diff options
Diffstat (limited to 'libguile')
275 files changed, 24933 insertions, 33108 deletions
diff --git a/libguile/Makefile.am b/libguile/Makefile.am index 5b2516973..12d106292 100644 --- a/libguile/Makefile.am +++ b/libguile/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with Automake to create Makefile.in ## -## Copyright (C) 1998-2004, 2006-2014, 2016-2018 +## Copyright (C) 1998-2004, 2006-2014, 2016-2019 ## Free Software Foundation, Inc. ## ## This file is part of GUILE. @@ -41,7 +41,7 @@ AM_CPPFLAGS = -DBUILDING_LIBGUILE=1 -I$(top_srcdir) -I$(top_builddir) \ $(LIBFFI_CFLAGS) if ENABLE_JIT -AM_CPPFLAGS += -I$(top_srcdir)/libguile/lightning/include +AM_CPPFLAGS += -I$(top_srcdir)/libguile/lightning endif AM_CFLAGS = $(GCC_CFLAGS) $(CFLAG_VISIBILITY) diff --git a/libguile/lightning/.gitattributes b/libguile/lightning/.gitattributes deleted file mode 100644 index e8495d51e..000000000 --- a/libguile/lightning/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -ChangeLog merge=merge-changelog diff --git a/libguile/lightning/.gitignore b/libguile/lightning/.gitignore index 62ca42aa8..d2a82cf1f 100644 --- a/libguile/lightning/.gitignore +++ b/libguile/lightning/.gitignore @@ -1,33 +1,4 @@ +*.o +* -autom4te.cache -aclocal.m4 -depcomp -INSTALL -Makefile -Makefile.in -config.guess -config.h -config.h.in -config.log -config.status -config.sub -configure -install-sh -libtool -lightning-*.tar.* -ltmain.sh -missing -size -stamp-h1 -test-driver -check/.deps -doc/.deps -lib/.deps -m4/libtool.m4 -m4/lt~obsolete.m4 -m4/ltoptions.m4 -m4/ltsugar.m4 -m4/ltversion.m4 -doc/mdate-sh -doc/texinfo.tex -lightning.pc +/lightning.info +/tests/test-* diff --git a/libguile/lightning/.gitlab-ci.yml b/libguile/lightning/.gitlab-ci.yml new file mode 100644 index 000000000..384befa31 --- /dev/null +++ b/libguile/lightning/.gitlab-ci.yml @@ -0,0 +1,9 @@ +# use the official gcc image, based on debian +# can use verions as well, like gcc:5.2 +# see https://hub.docker.com/_/gcc/ +image: gcc + +test: + stage: test + script: + - make -C tests check diff --git a/libguile/lightning/ChangeLog b/libguile/lightning/ChangeLog index 19b3335f5..cc7c8e9b2 100644 --- a/libguile/lightning/ChangeLog +++ b/libguile/lightning/ChangeLog @@ -1,4018 +1,17 @@ -2018-04-20 Paulo Andrade <pcpa@gnu.org> +-*- text -*- - * include/lightning/jit_private.h: Add new register classes to - flag float registers and double only registers, required for sparc64 - where only low 32 bit fpr registers can be used for single precision - operations. - Add new 128 bit jit_regset_t type for sparc64 register set. +Starting from October 30, 2018, the Lightening project no longer stores +change logs in `ChangeLog' files. Instead, changes are detailed in the +version control system's logs. They can be seen by downloading a copy +of the Git repository: - * include/lightning/jit_sparc.h, lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c, - lib/jit_sparc-sz.c, lib/jit_sparc.c: Update for 64 bits sparc. + $ git clone https://gitlab.com/wingo/lightening + $ git log - * lib/lightning.c: Update for new jit_regset_t required for sparc64. +Alternatively, they can be seen on the web, using the Gitweb interface +at: -2018-02-26 Paulo Andrade <pcpa@gnu.org> + https://gitlab.com/wingo/lightening - * check/lightning.c, include/lightning.h: Add the new jit_va_push - interface. That should be called when passing a va_list to a C - function. This is required because on Alpha a va_list is passed - by value, and lightning does not know about data types, so, cannot - understand it is pushing a va_list as argument. - - * lib/jit_names.c, lib/lightning.c: Minor changes for the new - jit_code_va_push. - - * check/cva_list.c: Update only test case using jit_va_push, to - pass a va_list to a C function. - - doc/body.texi: Better documentation of the varargs interface. - - * jit_alpha.c, jit_alpha-cpu.c: Update to properly push a - C va_list and correctly calculate varargs offset. - - * lib/jit_aarch64-sz.c, lib/jit_aarch64.c, lib/jit_alpha-sz.c, - lib/jit_arm-sz.c, lib/jit_arm.c, lib/jit_hppa-sz.c, lib/jit_hppa.c, - lib/jit_ia64-sz.c, lib/jit_ia64.c, lib/jit_mips-sz.c, lib/jit_mips.c, - lib/jit_ppc-sz.c, lib/jit_ppc.c, lib/jit_s390-sz.c, lib/jit_s390.c, - lib/jit_sparc-sz.c, lib/jit_sparc.c, lib/jit_x86-sz.c, lib/jit_x86.c: - Update for the new jit_va_push interface. - -2018-02-22 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_alpha-cpu.c: Always set t12 to the address of the - current function, to properly work on all systems. Previously - the shortcut did only work on Tru64. For Linux and glibc the - change is required. - -2018-02-22 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, - lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c: - Correct wrong logic in usage of jit_live in jit_retr. The - problem is that if a temporary is required during epilog, - the return register might be allocated, so, jit_live must always - be used. - -2018-01-31 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Avoid deep recursions when computing live - register ranges. - -2018-01-31 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-cpu.c: Correct frame size and varargs - initialization for the n32 abi. - * lib/jit_mips.c, lib/jit_mips-fpu.c: Correct 32 bit abis - in big-endian. - -2017-09-13 Paulo Andrade <pcpa@gnu.org> - - * configure.ac: Add check for binutils 2.29 prototype to the - disassembler function. - * lib/jit_disasm.c: Adapt for binutils 2.29 change. - -2017-06-09 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/lightning.c: Add a - second pass from start when computing register live ranges. - This should be used temporarily, and is required for certain - loop constructs, with several consecutive blocks not referencing - a live register. - -2016-05-05 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Correct wrong movr simplification, - remove no longer needed code to set return registers live - and update live register set when reaching a label boundary, - but do not descend if the block has been already visited. - The later need some tuning for complex code generation, where - it will still have issues. - -2015-11-30 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Change documentation to no longer say - it is a variant of the Fibonacci sequence, and document - a proper implementation. - Thanks to Jon Arintok for pointing out that the Fibonacci - sequence generation was incorrect. It was documented, but - still confusing. - - * check/fib.tst, check/fib.ok, check/bp.tst, check/bp.ok, - doc/ifib.c, doc/rbif.c: Implement a proper Fibonacci - sequence implementation. - -2015-07-03 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-cpu.c: Correct definition of htonr_ul. - Correct prolog/epilog/va* routines to work on o64 abi. - - * lib/jit_mips-fpu.c: Correct load of double literal - argument when not using a data buffer. - Remove alignment correction in vaarg_d if using the - new mips abi. - - * lib/jit_mips.c: Correct code to allow creating variadic - jit functions when using the new mips abi. - - * lib/jit_rewind.c: Minor adjust for rewind when using - the new mips abi, if there are varargs arguments in - registers. - -2015-06-06 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c: Search backward for the last output - register used, otherwise would stop too early if a float - argument used the slot. - Correct offset of first va_list argument, and use proper - va_list abi. - - * lib/jit_ia64-fpu.c: Add new functions to move a gpr - to a fpr register, to counterpart the ones that move a - fpr to a gpr. These are required to properly implement - jit_getarg*_{f,d} on complex prototypes, or variadic - jit functions. - - * lib/jit_ia64-sz.c: Update for support to jit variadic - functions. - - * lib/jit_ia64.c: Implement proper abi for variadic - jit functions. - -2015-06-04 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_rewind.c: New file implementing generic functions - to "rewind", or rewrite IR code sequences. - - * include/lightning.h: Add several new codes, that previously - were a function call, that would synthesize the operation. - Now, there is a code for the operation, and a new flag to - know an operation is synthesized. - - * include/lightning/jit_private.h: Add several new macros to - help construct synthesized IR code sequences. - - * lib/Makefile.am: Update for lib/jit_rewind.c. - - * lib/jit_disasm.c: Update for a small rework on jit_node_t, - so that --enable-devel-disassembler does not need a change - in the layout of jit_node_t. - - * lib/jit_names.c: Update for the new codes. - - * lib/jit_print.c: Update to print more readable output, and - flag synthesized IR code sequences. - - * lib/jit_aarch64-sz.c, lib/jit_aarch64.c, - lib/jit_arm-sz.c, lib/jit_arm.c, lib/jit_x86-sz.c, - lib/jit_x86.c: Update for new synthesized IR code sequences. - - * lib/jit_ppc-cpu.c, lib/jit_ppc-fpu., lib/jit_ppc-sz.c, - lib/jit_ppc.c, lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, - lib/jit_mips-sz.c, lib/jit_mips.c, lib/jit_s390-fpu.c, - lib/jit_s390-sz.c, lib/jit_s390.c: Update for new synthesized - IR code sequences and correct bugs in the initial varargs - implementation support. - - * lib/jit_alpha-sz.c, lib/jit_alpha.c, lib/jit_hppa-sz.c, - lib/jit_hppa.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, - lib/jit_sparc-sz.c, lib/jit_sparc.c: Add generic, untested - support for the new synthesized IR code sequences. Known - most likely broken right now, and should be corrected once - access to these hosts is available. - - * lib/lightning.c: Update for new IR codes, and add support - for not yet existing instructions that change third argument. - - * size.c: Change to use different tables for LE and BE PowerPC. - Correct a wrong endif for x32. - -2015-05-25 Paulo Andrade <pcpa@gnu.org> - - * check/cva_list.c: New file implementing a test to ensure - the value returned by jit_va_start is a valid C va_list. - - * check/va_list.ok: New simple helper file, as now the - va_list.tst test is enabled. - - * check/va_list.tst: Rewritten for an extensive variadic - jit functions test. - - * check/Makefile.am: Update for the new tests. - - * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, lib/jit_arm-vfp.c, - lib/jit_arm.c: Correct broken software float in a previous - commit. Note that the hard float abi implementation is known - broken at this time, for special cases involving variadic - functions, and should be corrected next. - - lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c: Correct - the jit_va_list_t semantics to match C va_list. - -2015-05-24 Paulo Andrade <pcpa@gnu.org> - - * lib/Makefile.am: Bump library major. This is a preparation - for a rework that was due for quite some time, but that is - now required to properly implement variadic jit functions. - The rework is mainly required to know at prolog parsing, if - a function is variadic or not. This will benefit a few - backends, and is mandatory for the hard float arm abi. - The rework was already planned for quite some time, to - be able to use a variable stack framesize, and for leaf - functions optimization where applicable. - The change will be source compatible, but will change - some internals, and jit_code_t values, as some new will - be added. - The only behavior change is that, jit_arg_register_p may - change return value on hard float arm abi, if called before - or after jit_ellipsis. Common sense anyway, would say to - make that call after jit_ellipsis, but documentation - should be updated for it. - -2015-05-24 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: Correct base - aarch64 varargs code. - -2015-05-24 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Clearly run check if clang is the system - compiler. - -2015-05-20 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c, lib/jit_sparc.c: - Add base support to jit vararg functions to the sparc backend. - -2015-05-20 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_alpha-cpu.c, lib/jit_alpha-fpu.c, lib/jit_alpha.c: - Add base support to jit vararg functions to the alpha backend. - -2015-05-19 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, lib/jit_hppa.c: - Add base support to jit vararg functions to the hppa backend. - -2015-05-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, lib/jit_ia64.c: - Add base support to jit vararg functions to the ia64 backend. - -2015-05-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-fpu.c, lib/jit_ia64.c: Correct movi_d_w - and movi_f_w implementation to work when not using a - data buffer. This causes the check varargs.tst to - work when passing "-d" to the lightning test tool. - -2015-05-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64.c: Implement inline assembly cache flush, - required on multiprocessor systems. - -2015-05-06 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips.c: - Add base support to jit vararg functions to the mips backend. - Currently only supported on the o32 abi, until access to a - n32 system is arranged. - -2015-05-05 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_ppc.c: - Add base support to jit vararg functions to the PowerPC backend. - -2015-05-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_s390-cpu.c, lib/jit_s390-fpu.c, lib/jit_s390.c: - Add base support to jit vararg functions to the s390 backend. - -2015-05-01 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, lib/jit_arm-vfp.c, - lib/jit_arm.c: Add base support to jit vararg - functions to the arm backend. - -2015-04-30 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, - lib/jit_aarch64.c: Add base support to jit vararg - functions to the aarch64 backend. - -2015-04-27 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/jit_names.c, lib/lightning.c: Add initial support - for the new jit_va_start, jit_va_arg, jit_va_arg_d, and - jit_va_end interfaces. The jit_va_start call is supposed - to return a va_list compatible pointer, but not yet - decided if it will be "declared" stdarg compatible, - as for now only x86 support has been added (and should - be compatible), but issues may arise on other backends. - - * check/lightning.c: Add wrappers to call the new jit_va_* - interfaces. - - * lib/jit_x86-cpu.c, lib/jit_x86.c: Implement the new - jit_va_* for x86. - - * lib/jit_x86-sz.c: Add fields, but not yet fully updated, - as this is an intermediate commit. - - * lib/jit_aarch64-sz.c, lib/jit_aarch64.c, - lib/jit_alpha-sz.c, lib/jit_alpha.c, - lib/jit_arm-sz.c, lib/jit_arm.c, - lib/jit_hppa-sz.c, lib/jit_hppa.c, - lib/jit_ia64-sz.c, lib/jit_ia64.c, - lib/jit_mips-sz.c, lib/jit_mips.c, - lib/jit_ppc-sz.c, lib/jit_ppc.c, - lib/jit_s390-sz.c, lib/jit_s390.c, - lib/jit_sparc-sz.c, lib/jit_sparc.c: Prepare for the - new jit_va_* interfaces. Not yet implemented, and will - cause an assertion if used. - - * check/va_list.tst: Simple early test case, that works - on x86_64, x32, ix86, cygwin, and cygwin64. - -2015-02-17 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/jit_aarch64-cpu.c, lib/jit_aarch64.c, - lib/jit_alpha-cpu.c, lib/jit_alpha.c, - lib/jit_arm-cpu.c, lib/jit_arm.c, - lib/jit_hppa-cpu.c, lib/jit_hppa.c, - lib/jit_ia64-cpu.c, lib/jit_ia64.c, - lib/jit_mips-cpu.c, lib/jit_mips.c, - lib/jit_ppc-cpu.c, lib/jit_ppc.c, - lib/jit_s390-cpu.c, lib/jit_s390.c, - lib/jit_sparc-cpu.c, lib/jit_sparc.c, - lib/jit_x86-cpu.c, lib/jit_x86.c: Implement the new - jit_allocar(offs, size) interface, that receives - two integer registers arguments, allocates space - dynamically in the stack, returns the offset in - the first argument, and uses the second argument - for the size in bytes of the memory to be allocated. - - * check/allocar.ok, check/allocar.tst: New files - implementing test cases for the new jit_allocar - interface. - - * check/Makefile.am, check/lightning.c: Update for - the new test case and interface. - - * doc/body.texi: Add documentation of the new - interface. - -2015-02-17 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_x86.h, lib/jit_x86-cpu.c, - lib/jit_x86-x87.c: No longer make st(7) available. - Need to keep one x87 slots empty to avoid exceptions. - This has the side effect of no longer needing the - hackish emms instruction before a function call. - -2015-02-16 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Remove the jit_regno_patch bitfield - register fields before actual emit, as it is only really - used before emit, otherwise, on special conditions it - may consider live registers as dead during code emit. - -2015-02-15 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: - Correct encoding of ldxr* stxr* in the x32 abi. If the - displacement register is negative, it would generate - a 64 bit instruction with a 32 bit unsigned displacement. - - * check/ranger.tst, check/ranger.ok: New files, implementing - a test case for negative loads and stores. This is range.tst - converted to use registers instead of immediate offsets. - - check/Makefile.am: Update for the new test case. - -2015-02-07 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_size.c: Preventively use at least 144 bytes - if JIT_INSTR_MAX is less than it. The logic is not - guaranteed to be 100% precise, it is mostly heuristics - to allocate a buffer with as close as possible size, - but a wrong value may cause code generation to write - past the end of the buffer. - -2015-02-03 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Correct the reason the bug in - simplify_stxi was not triggered before, it was due to - incorrectly resetting the value->code field, what was - causing it to never properly optimize: - stxi Im0 Rb0 Rt0 - ldxi Rt1 Rb1 Im1 - when Rb0 == Rb1, Rt0 == Rt1 and Im0 == Im1 - There was another possible issue, that has been also - addressed in this commit, that would be the case of - Rbn == Rtn, where no redundancy removal is possible. - -2015-02-03 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Correct wrong check in simplify_stxi. - The test was incorrectly comparing the target register - and the displacement offset. This was a time bomb bug, - that would trigger in code like: - stxi Im0 Rb0 Rt0 - stxi Im1 Rb1 Rt1 - if Rb0 == Rb1 && Rt0 == Rt1 && Im0 == Rt1, that is, - the wrong check was Im0 == Rt1, instead of the supposed - Im0 == Imm1 (that was what the code mean't to do). It - was removing the second stxi assuming it was redundantly - generated; as that is not uncommon pattern on - translators generating jit. - -2015-02-02 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, include/lightning/jit_private.h, - lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, - lib/jit_disasm.c, lib/jit_hppa.c, lib/jit_ia64.c, - lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, - lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c: Add a new - --enable-devel-disassembler option, that should be used - during development, or lightning debug. This option - intermixes previous jit_print and jit_disassemble - output, making it easier to visualize what lightning - call was used, and what code was generated. - -2015-01-31 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-cpu.c, lib/jit_arm.c: Only limit to 24 bit - displacement non conditional jump in the same jit_state_t. - -2015-01-19 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Reorder documentation, making jit_frame - and jit_tramp the lightning response to the need of - trampolines, continuations and tail call optimizations. - A pseudo code example of a factorial function was added. - Also added a section for description of the available - predicates. - - * doc/fact.c: New file, implementing a simple example of - a translation of a trivial, recursive, tail call optimization - into lightning calls. This is the conversion to functional C - code of the example in doc/body.texi. - - * doc/Makefile.am: Update for the next test case. - -2015-01-17 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/jit_aarch64.c, - lib/jit_alpha.c, lib/jit_arm-vfp.c, lib/jit_arm.c, - lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, - lib/jit_ppc.c, lib/jit_s390.c, lib/jit_sparc.c, - lib/jit_x86.c: Add the new jit_arg_register_p predicate. - The predicate is expected to be used to know if an - argument is in a register, what would need special - handling if code that can overwrite non callee save - registers is executed. - - * check/carg.c: New test case to check consistency and - expected usage of jit_arg_register_p. - - * check/Makefile.am: Update for new test case. - -2015-01-17 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_aarch64.h, - include/lightning/jit_alpha.h, - include/lightning/jit_arm.h, - include/lightning/jit_hppa.h, - include/lightning/jit_mips.h, - include/lightning/jit_ppc.h, - include/lightning/jit_s390.h, - include/lightning/jit_sparc.h, - include/lightning/jit_x86.h, - lib/jit_aarch64.c, lib/jit_alpha.c, - lib/jit_arm.c, lib/jit_hppa.c, - lib/jit_ia64.c, lib/jit_mips.c, - lib/jit_ppc.c, lib/jit_s390.c, - lib/jit_sparc.c, lib/jit_x86.c: Remove jit_arg_reg_p and - jit_arg_f_reg_p from a public header, and define it only - on port specific files where an integer offset is used - to qualify an argument identifier. Exported code expects - an opaque pointer (but of jit_node_t* type) to "qualify" - an argument identifier. - This patch, and the code review/simplification done during - it also corrected some bugs: - o Inconsistent jit_arg_d value of double argument after 3 - integer arguments in arm for jit_functions; tested, C - functions were being properly called. - o Inconsistent use of getarg_{f,d} and putarg*_{f,d} on - s390 (32-bit) that happened to not have a proper test - case, as it would only happen for jit functions, and - tested, called C functions had proper arguments. - o Corrected a "last minute" correction that did not go - to the committed version, and would not compile on hppa, - due to bad _jit_putargi_d prototype definition. - -2015-01-17 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Correct wrong/outdated information for - hton*, pusharg* and ret*, and add missing documentation - for rsb*, qmul*, qdvi* and putarg*. - -2015-01-15 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, lib/jit_disasm.c: Rewrite workaround - to apparent problem to initialize powerpc disassembler. - -2015-01-15 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/jit_aarch64.c, - lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, - lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c, - lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c: - Implement jit_putarg*. It works as a mix of jit_getarg* - and jit_pusharg*, in the way that the first argument is - a register or immediate, and the second is a pointer - returned by jit_arg*. The use of the interface is to change - values of arguments to the current jit function. - - * check/put.ok, check/put.tst: New test cases exercising - the new jit_putarg* interface. - - * check/Makefile.am, check/lightning.c: Update for the - new test case and interface. - -2015-01-08 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_s390.h, lib/jit_s390-cpu.c, - lib/jit_s390-fpu.c, lib/jit_s390-sz.c, lib/jit_s390.c: - Renamed s390x* files to s390*. - - * check/float.tst, check/lightning.c, configure.ac, - include/lightning.h, include/lightning/Makefile.am, - lib/Makefile.am, lib/jit_s390.c, lib/jit_size.c, - lib/lightning.c: Update for renamed files. - -2015-01-08 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - include/lightning/jit_s390x.h, lib/jit_disasm.c, - lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x-sz.c, - lib/jit_s390x.c, lib/jit_size.c, lib/lightning.c: - Add support for generating jit for s390 32 bit. This change - also removed %f15 from the list of temporaries fpr registers; - it was not being used, but if were, it would corrupt the - stack frame because the spill address would overwrite grp - offsets. - -2014-12-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Correct some endianess issues - on the powerpc le backend. - -2014-12-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c: Add mcrxr instruction emulation, - as this instruction has been phased out, and should be - implemented as a kernel trap. - -2014-12-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Better check for need to flush constants - before the pool being no longer reachable. - -2014-12-25 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h: Split jit_htonr in the new 3 interfaces - jit_htonr_us, jit_htonr_ui and jit_htonr_ul, the later only - available on 64 bit. The plain/untyped jit_htonr macro call - maps to the wordsize one. - * lib/jit_aarch64-cpu.c, lib/jit_aarch64-sz.c, lib/jit_aarch64.c, - lib/jit_alpha-cpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c, - lib/jit_arm-cpu.c, lib/jit_arm-sz.c, lib/jit_arm.c, - lib/jit_hppa-cpu.c, lib/jit_hppa-sz.c, lib/jit_hppa.c, - lib/jit_ia64-cpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, - lib/jit_mips-cpu.c, lib/jit_mips-sz.c, lib/jit_mips.c, - lib/jit_ppc-cpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c, - lib/jit_s390x-cpu.c, lib/jit_s390x-sz.c, lib/jit_s390x.c, - lib/jit_sparc-cpu.c, lib/jit_sparc-sz.c, lib/jit_sparc.c, - lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c: - Update backends for the new jit_htonr*. - * check/lightning.c, lib/jit_names.c, lib/lightning.c: - Update for the new jit_htonr* interfaces. - * check/Makefile.am: Update for new test cases. - * check/hton.ok, check/hton.tst: New test cases. - -2014-12-24 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, include/lightning/jit_x86.h, - lib/jit_disasm.c, lib/jit_x86-cpu.c, lib/jit_x86-sse.c, - lib/jit_x86-sz.c, lib/jit_x86-x87.c, lib/jit_x86.c, - size.c: Implement support for the x32 abi. Built and - tested on Gentoo default/linux/amd64/13.0/x32 profile. - -2014-12-24 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_names.c: Add missing rsbi_f and rsbi_d strings. - -2014-12-21 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Call __clear_cache for every page. - This should only be required for older boards or - toolchain setup, but has been reported to be required - for lightning at some point. - -2014-12-21 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Correct check to guard overflow of index - of constants from program counter. - -2014-11-24 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Remove an optimization to calee save - registers that may incorrectly remove a jit_movr under - special conditions. - -2014-11-20 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_ppc.h, lib/jit_ppc-cpu.c, - lib/jit_ppc.c: Add initial powerpc le support. - -2014-11-20 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_disasm.c: Change thumb or arm disassemble based on - jit code before disassembly. - - * lib/jit_arm-cpu.c: Correct reversed arguments to LDRD and - STRD instructions, and correct checking for support of those. - - * lib/jit_arm-swf.c: Correct wrong use of LDRD and STRD and - only use those if the register is even. - - * check/check.arm.swf.sh, check/check.arm4.swf.sh: New files - to test LDRD and STRD, as well as the alternate code path - when those are not available, in the .arm4. test case. - - * check/Makefile.am: Update for the new test cases. - -2014-11-08 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/jit_aarch64.c, - lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, - lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c, - lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c: - Implement a private jit_flush call, that flushes - the cache, if applicable, aligning down to the - previous and up to the next page boundary. - -2014-11-08 Paulo Andrade <pcpa@gnu.org> - - * check/ctramp.c: New file. It just repeats the test - of tramp.tst, but using two jit_state_t, what should - test possible issues with two contexts, and also validate - jit_tramp works on backends with function descriptions. - - * check/Makefile.am: Update for new test case. - -2014-11-03 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_mips.h: Do not make the t9 register - JIT_R11 (or JIT_R7 for n32 or n64 abi) available. Previously - it cause problems if one expects it to not be changed in a - function call. For example, calling a jit function, where it - really does not need to be changed. - -2014-10-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, - lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c, - lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c: Add an - assertion to all code generation "drivers" to ensure - _jitc->regarg is empty or in an expected state, after - translation of a lightning instruction to native code. - This change was a brute force test to find out other cases - of a temporary not being release (like was happening with - _bmsi and _bmci on x86), but no other case was found, - after running make check, with assertions enabled, on all - backends. - -2014-10-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-cpu.c: Correct a register allocation leak in - _bmsi and _bmci. - -2014-10-25 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_disasm.c: Do not cause an fatal error if init_jit - fails in the jit_init_debug call. - -2014-10-24 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64.c, lib/jit_ppc.c: Correct handling of function - descriptor when first prolog is a jit_tramp prolog. The - test case was using the same jit_context_t, so was not - triggering this condition. - - * lib/jit_ppc-cpu.c: Properly handle jump displacements that - do not fit on 24 powerpc. This required changing from previous - "mtlr reg, blr" to "mtctr reg, bctr" to properly handle - the logic to "hide" function descriptors, but that would - also be required as the proper jit_jmpr when/if implementing - optimizations to leaf functions (was working with blr because - it is saved/reloaded in prolog/epilog). - -2014-10-21 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/lightning.c: Add three predicates - to query information about labels. jit_forward_p(label) - will return non zero if the label is "forward", that is - need a call to jit_link(label), jit_indirect_p(label) - that returns non zero if the label was created with the - jit_indirect() call, and jit_target_p(label) that will - return non zero if there is at least one jump patched - to land at that label. - -2014-10-18 Paulo Andrade <pcpa@gnu.org> - - * check/range.ok, check/range.tst: New test case designed - to catch incorrect code generation, usually due to incorrect - test of immediate size. The test checks a large amount of - encodings in "power of two" boundaries. This test exorcises - a significant amount of code paths that was previously not - tested. - - * check/Makefile.am: Add range test to make check target. - - * lib/jit_aarch64-cpu.c: Correct wrong address calculation - for stxi_c, stxi_s, stxi_i and stxi_l when the offset is - too large. - - * lib/jit_mips-fpu.c: Correct wrong size test to check if - an immediate can be encoded in a float or double store. - - * lib/jit_s390x-cpu.c: Correct inverted encoding to stxi_s - when the offset cannot be encoded, and fallbacks to an - alternate encoding in 2 instructions. - -2014-10-17 Paulo Andrade <pcpa@gnu.org> - - * check/alu_rsb.ok, check/alu_rsb.tst: New files implementing - tests for jit_rsb*. - - * check/Makefile.am, check/lightning.c, include/lightning.h, - lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, lib/jit_aarch64-sz.c, - lib/jit_aarch64.c, lib/jit_alpha-cpu.c, lib/jit_alpha-fpu.c, - lib/jit_alpha-sz.c, lib/jit_alpha.c, lib/jit_arm-cpu.c, - lib/jit_arm-swf.c, lib/jit_arm-sz.c, lib/jit_arm-vfp.c, - lib/jit_arm.c, lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, - lib/jit_hppa-sz.c, lib/jit_hppa.c, lib/jit_ia64-cpu.c, - lib/jit_ia64-fpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, - lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips-sz.c, - lib/jit_mips.c, lib/jit_names.c, lib/jit_ppc-cpu.c, - lib/jit_ppc-fpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c, - lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x-sz.c, - lib/jit_s390x.c, lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c, - lib/jit_sparc-sz.c, lib/jit_sparc.c, lib/jit_x86-cpu.c, - lib/jit_x86-sse.c, lib/jit_x86-sz.c, lib/jit_x86-x87.c, - lib/jit_x86.c, lib/lightning.c: Implement jit_rsb*. This - was a missing lightning 1.x interface, that on most - backends is synthesized, but on a few backends (hppa and ia64), - it can generate better code as on those there is, or the - only instruction with an immediate is in "rsb" format - (left operand). - -2014-10-17 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_names.c: New file with single definition of string - representation of lightning IR codes. - - * size.c: Modified to append the code name in a C comment - after the maximum instruction size. - - * lib/jit_print.c: Minor change to not duplicate jit_names.c - contents. - - * lib/jit_aarch64-sz.c, lib/jit_alpha-sz.c, lib/jit_arm-sz.c, - lib/jit_hppa-sz.c, lib/jit_ia64-sz.c, lib/jit_mips-sz.c, - lib/jit_ppc-sz.c, lib/jit_s390x-sz.c, lib/jit_sparc-sz.c, - lib/jit_x86-sz.c: Rewritten to add string representation of - IR codes in a C comment. - -2014-10-14 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64-cpu.c, lib/jit_alpha-cpu.c, lib/jit_arm-cpu.c, - lib/jit_hppa-cpu.c, lib/jit_mips-cpu.c, lib/jit_ppc-cpu.c, - lib/jit_sparc-cpu.c: Implement or correct the internal - nop(count) call that receives an argument that tells the - modulo bytes to align the code for the next instruction. - - * include/lightning.h, lib/lightning.c, lib/jit_aarch64.c, - lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, lib/jit_ia64.c, - lib/jit_mips.c, lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c, - lib/jit_x86.c: Implement the new jit_align() call that receive - an argument, that tells the modulo, in bytes, to align the - next instruction. In most backends the only value that makes - a difference is a value that matches sizeof(void*), as all - other values usually are already automatically aligned in - labels, but not guaranteed to be aligned at word size bytes. - - * check/align.ok, check/align.tst: New files, implementing - a simple test for the new jit_align() interface. - - * check/Makefile.am, check/lightning.c, lib/jit_aarch64-sz.c, - lib/jit_alpha-sz.c, lib/jit_arm-sz.c, lib/jit_hppa-sz.c, - lib/jit_ia64-sz.c, lib/jit_mips-sz.c, lib/jit_ppc-sz.c, - lib/jit_print.c, lib/jit_s390x-sz.c, lib/jit_sparc-sz.c, - lib/jit_x86-sz.c: Update for the new jit_code_align code and - the jit_align() interface. - -2014-10-13 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/jit_size.c, size.c: Use a - symbolic value for the last IR code. - -2014-10-12 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/jit_aarch64-cpu.c, lib/jit_alpha-cpu.c, lib/jit_arm-cpu.c, - lib/jit_hppa-cpu.c, lib/jit_ia64-cpu.c, lib/jit_mips-cpu.c, - lib/jit_ppc-cpu.c, lib/jit_s390x-cpu.c, lib/jit_sparc-cpu.c, - lib/jit_x86-cpu.c, lib/lightning.c: Implement the new - jit_frame and jit_tramp interfaces, that allow writing - trampoline like calls, where a single dispatcher jit buffer - is written, and later other jit buffers are created, with - the same stack frame layout as the dispatcher. This is the - logic that GNU Smalltalk used in lightning 1.x, and is required - to make a sane port for lighting 2.x. - - * jit_ia64-cpu.c: Implement support for jit_frame and jit_tramp, - and also correct wrong encoding for B4 instructions, that - implement jmpr, as well as correct reverse logic in _jmpr, - that was moving the branch register to the jump register, - and not vice-versa. - Also, if a stack frame is to be assumed, always assume it may - call a function with up to 8 arguments, regardless of the - hint frame argument. - - * lib/jit_arm.c: Add a new must_align_p() interface to ensure - function prologs are always aligned. This condition was - previously always true, somewhat by accident, but with - jit_tramp it is not guaranteed. - - * jit_ia64-cpu.c: lib/jit_ppc.c: Add minor special handling - required to implement jit_tramp, where a function descriptor - should not be added before a prolog, as jit_tramp means omit - prolog. - - * check/lightning.c: Update test driver for the new interfaces. - - * check/Makefile.am, check/tramp.tst, check/tramp.ok: Add - a simple test and example of the jit_frame and jit_tramp - usage implementing a simple Fibonacci function using a - simulation of an interpreter stack and how it would handle - state in language specific variables. - - * doc/body.texi: Add documentation for jit_frame and - jit_tramp. - -2014-09-29 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, - lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, - lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c, - lib/jit_x86.c, lib/lightning.c: Allow jit_jmpi on a - target that is not a node. This may lead to hard to - debug code generation, but is a required feature for - certain generators, like the ones that used lightning - 1.2x. Note that previously, but not really well - documented, it was instructed to use: - jit_movi(rn, addr); jit_jmpr(rn); - but now, plain: - jit_patch_abs(jit_jmpi(), addr); - should also work. - -2014-09-24 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-sz.c: Generate information about instruction - lengths for more precise calculation of buffer size on - Windows x64. This change is specially important because - the maximum instruction length is larger than other - systems, what could cause an out of bounds write on - special conditions without this update. - -2014-09-24 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Add workaround to conflicting global - optind variable in cygwin binutils that have an internal - getopt* implementation. - - * lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building - for 32 bit and there is no ffsl function. - -2014-09-24 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Add a hopefully temporary kludge to not use - sprintf and sscanf returned by dlsym. This is required to pass - the varargs test. - - * include/lightning/jit_private.h: Use symbolic name for first - integer register argument, as this is different in sysv and - win64 abi. - - * include/lightning/jit_x86.h: Add conditionals and definitions - for Windows x64 (under __CYGWIN__ preprocessor conditional). - - * lib/jit_x86-cpu.c: Correct one instruction encoding bug, that - was working by accident. Only use rax to rdx for some byte - operations to work on compatibility mode (that is, to generate - the proper encoding, instead of actually generating encoding - for high byte registers, e.g. %bh). - Add proper prolog and epilog for windows x64. - - * lib/jit_x86-sse.c: Correct a swapped rex prefix for float - operations. - - * lib/jit_x86.c: Adjust to support Windows x64 abi. - - * check/check.x87.nodata.sh: New file, previously used but that - was missing git. - -2014-09-07 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Mark all registers advertised as live, as - per jit_callee_save_p as live whenever reaching a jump that - cannot be tracked. This is a rethink of the previous commit, - and is a better approach, otherwise there would not be much - sense on relying on jit_callee_save_p if it could not be - trusted. - - * check/jmpr.tst, check/jmpr.ok: New files implementing a very - simple test case, that would actually cause an assertion on - code before the change to only mark as live when reaching a - jump that could not tracked, the actually advertised as callee - save registers. - - check/Makefile.am: Update for new jmpr test case. - -2014-09-01 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Do not mark all registers in unknown state - as live on jit_jmpr, or jit_jmpi to an absolute address. Instead, - treat it as a function call, and only consider JIT_Vn registers - as possibly live. - -2014-08-29 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Add a proper info menu entry for - GNU lightning. - - * doc/version.texi: Regenerate. - -2014-08-16 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, - lib/jit_arm-cpu.c, lib/jit_arm-vfp.c, - lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, - lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, - lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, - lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, - lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, - lib/jit_s390x.c, lib/jit_sparc-cpu.c, - lib/jit_x86-cpu.c, lib/jit_x86-sse.c, - lib/jit_x86-x87.c: Review generation of all branch - instructions and always adds the jit_class_nospill - bitfield for temporary registers that cannot be spilled - because the reload would be after a conditional jump; the - patch only adds an extra assertion. These conditions do - not happen on documented lightning usage, but can happen - if one uses the not exported jit_get_reg and jit_unget_reg - calls and cause enough register starvation. - -2014-08-16 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_alpha.c: Correct wrong bitmask of most argument - float register arguments, that were being set as callee - save instead of argument registers class. - -2014-08-16 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-sz.c: Regenerate table of known maximum - instruction sizes for the software float fallback, - that implements "virtual" float registers in the stack - and operations as calls to libgcc. - - * size.c: Correct typo in the generated jit_arm-sz.c file. - -2014-08-10 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_alpha.h, lib/jit_alpha-cpu.c, - lib/jit_alpha-fpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c: - New files implementing a lightning Alpha port. Thanks - to Trent Nelson and snakebit.net staff for providing access - to an Alpha system. - - * check/float.tst, check/lightning.c, configure.ac, - include/lightning.h, include/lightning/Makefile.am, - include/lightning/jit_private.h, lib/Makefile.am, - lib/jit_disasm.c, lib/jit_size.c, lib/lightning.c: - Minor changes to adapt for the new Alpha port. - -2014-08-10 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Always mark JIT_RET and JIT_FRET as - live in a function epilog. This is required because - on some ports a complex sequence, allocating one or more - registers, may be required to jump from a ret* to the - epilog, and the lightning api does not have annotations - to know if a function returns a value, or the type of - the return value. - -2014-08-10 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Change the correct live bitmask of - return registers after a function call in jit_update. - -2014-08-10 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Change assertions to have an int - result and correct a bad bit mask assertion. - -2014-08-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64.c: Correct bad setup for assertion - of consistency before a patch. - -2014-08-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-cpu.c: Correct typo in the jit_bmsr - implementation that was using the wrong test result - register. - -2014-07-28 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_memory.c: Do not call free on NULL pointers. - - * include/lightning/jit_private.h, lib/jit_note.c, - lib/lightning.c: Add a wrapper to memcpy and memmove - to not actually call those functions with a zero size - argument, and likely also a null src or dst. - -2014-07-27 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/jit_disasm.c, - lib/lightning.c: Remove the global jit_progname variable. - It was being only used in jit_init_debug, that is called - from init_jit, so, just pass an argument. - -2014-07-27 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Add note that jit_set_memory_functions - should be called before init_jit, because init_jit - itself may call the memory wrappers. - -2014-04-22 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Do not get confused with default settings - if /proc is not mounted on Linux specific code path. - -2014-04-09 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h, - include/lightning/jit_hppa.h, include/lightning/jit_ia64.h, - include/lightning/jit_mips.h, include/lightning/jit_ppc.h, - include/lightning/jit_private.h, include/lightning/jit_s390x.h, - include/lightning/jit_sparc.h, include/lightning/jit_x86.h: - Do not add jit_regset_t, JIT_RA0, and JIT_FA0 to the installed - header file. These types and definitions are supposed to be - only used internally. - -2014-04-05 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-cpu.c: Only adjust stack pointer in prolog if - need stack space, that is, do not emit a nop instruction - subtracting zero from the stack pointer. - -2014-04-04 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_disasm.c: Correct a crash in the doc/printf example - on arm due to releasing the data_info information in - jit_clear_state. This is a special case for arm only, and - actually, only armv5 or older uses the data_info buffer, - or when forcing arm instruction set mode besides thumb - available. - -2014-12-03 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Write detailed description and examples for - jit_get_memory_functions, jit_set_memory_functions, - jit_get_code, jit_set_code, jit_get_data and jit_set_data. - -2014-12-03 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/lightning.c: Implement the new jit_set_data() interface, - and the new jit_get_data() helper. Like jit_set_code(), - jit_realize() should be called before jit_set_data(). - The most common usage should be jit_set_data(JIT_DISABLE_DATA - | JIT_DISABLE_NOTE), to force synthesize any float/double - constant in the stack and not generate any debug information. - - * lib/jit_note.c: Minor change to debug note generation as - now it uses an alternate temporary data buffer during constants - and debug generation to accommodate the possibility of the user - setting an alternate data buffer. - - * lib/jit_hppa-fpu.c, lib/jit_s390x.c, lib/jit_s390x-cpu.c, - lib/jit_s390x-fpu.c, lib/jit_sparc.c, lib/jit_sparc-fpu.c, - lib/jit_x86-sse.c, lib/jit_x86-x87.c: Implement jit_set_data. - - * lib/jit_hppa-sz.c, lib/jit_sparc-sz.c, lib/jit_x86-sz.c, - lib/jit_s390x-sz.c: Update for several instructions that now - have a different maximum length due to jit_set_data. - - * lib/jit_mips-fpu.c: Implement jit_set_data, but missing - validation on n32 and n64 abis (and/or big endian). - - * lib/jit_mips-sz.c: Update for changes in o32. - - * lib/jit_ppc-fpu.c: Implement jit_set_data, but missing - validation on Darwin PPC. - - * lib/jit_ppc-sz.c: Update for changes in powerpc 32 and - 64 bit. - - * lib/jit_ia64-fpu.c: Implement untested jit_set_data. - - * TODO: Add note to list ports that were not tested for the - new jit_set_data() feature, due to no longer having access - to them. - - * check/nodata.c: New file implementing a simple test exercising - several different conditions created by jit_set_data(). - - * check/check.nodata.sh: New file implementing a wrapper - over the existing *.tst files, that runs all tests without - using a data buffer for constants; only meaningful (and - enabled) on architectures that used to store float/double - constants on a read only data buffer. - - * configure.ac, check/Makefile.am: Update for the new test - cases. - - * check/lightning.c: Implement the new "-d" option that - sets an internal flag to call jit_set_data() disable - constants and debug, that is, using only a pure code - buffer. - -2014-11-03 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/lightning.c: Implement the new jit_set_code() interface, - that allows instructing lightning to use an alternate code - buffer. The new jit_realize() function should be called - before jit_set_code(), and usually call jit_get_code() - to query the amount of bytes expected to be required for - the code. - - * lib/jit_size.c: Minor update to have less chances of - miscalculating the code buffer by starting the counter - with the size of the longest instruction instead of zero, - as code emit fails if at any moment less than the longest - instruction bytes are available. - - * check/setcode.c: New file implementing some basic tests - of the new jit_set_code() interface. - - * check/Makefile.am: Update for newer test case. - -2014-06-03 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/lightning.c: Add the new - jit_indirect() call, that returns a special label node, - and tells lightning that the label may be the target of - an indirect jump. - - * doc/body.texi: Document the new jit_indirect() call, and - add examples of different ways to create labels and branches. - -2014-23-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86.c: Rewrite previous patch to inline save/restore - because clobbering %ebx in x86 is treated as an error - (jit_x86.c:239:5: error: PIC register clobbered by 'ebx' in 'asm'). - -2014-19-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86.c: Rewrite incorrect inline assembly that could - truncate a variable in a callee save register. Now it simply - tells gcc that the register is clobbered, instead of using a - *32 bit* swap with a temporary variable. The problem only - happens when compiling with optimization. - -2014-19-02 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h, - include/lightning/jit_hppa.h, include/lightning/jit_ia64.h, - include/lightning/jit_mips.h, include/lightning/jit_ppc.h, - include/lightning/jit_s390x.h, include/lightning/jit_sparc.h, - include/lightning/jit_x86.h: Change jit_regset_t to an - unsigned type, to allow safe right shift. - - * lib/lightning.c: Rewrite jit_regset_scan1 to allow easier - compiler optimization. - -2013-12-03 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-x87.c: Correct wrong optimization when - loading the log(2) constant. - -2013-12-03 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-cpu.c: Use the emms instruction before - calling any function. This is particularly important - when using c99 complex functions as it can easily - overflow the x87 stack due to the way lightning uses - the x87 stack as a flat register file. - -2013-12-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-x87.c: Correct wrong code generation due - to comparing the base and not the value register with - %st(0) in stxi_f. - -2013-12-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-x87.c, lib/jit_x86.c: Use 8 bytes aligned - stack offset for float/double x87 to/from sse move. - -2013-11-27 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, lib/jit_arm-swf.c, lib/jit_arm.c: Add - changes that should at least allow building lightning - on Apple iOS7. - -2013-10-08 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c: Correct wrong shortcut for ldxi_l with - a zero offset, that was calling ldr_i instead of ldr_l. - -2013-10-08 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_arm.h, lib/jit_arm-cpu.c: Do not use - by default load/store instructions that map to ldrt/strt. - There is already the long displacement version for positive - offsets, and when using a (shorter) negative offset it does - not map to ldrt/strt. At least on qemu strt may cause - reproducible, but unexpected SIGILL. - -2013-10-08 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-vfp.c: Correct wrong load/store offset - calculation when the displacement is constant but too - large to use an instruction with an immediate offset. - -2013-10-07 Paulo Andrade <pcpa@gnu.org> - - * check/self.c: Extend tests to validate jit_callee_save_p - does not cause an assertion on valid arguments, and test - extra registers defined on some backends. - - * configure.ac: Do not ignore environment CFLAGS when - checking if need to test runtime configurable options, - like use x87 when sse2 is available, arm instruction set - instead of thumb, etc. - - * include/lightning/jit_arm.h: Correct wrong jit_f macro - definition. - - * include/lightning/jit_ia64.h, include/lightning/jit_ppc.h: - Correct wrong jit_r macro definition. - - * lib/jit_x86-x87.c, lib/jit_x86.c: Actually use the - reserved stack space for integer to/from float conversion. - The stack space was also changed to ensure it is 8 bytes - aligned. Also, for Solaris x86 in 32 bit mode, an alternate - truncr_d was implemented because for some reason it is - failing with SIGILL if using the "fisttpl" instructions, - that must be available on p6 or newer, but for the sake of - making all tests pass, implement a 486 or newer sequence - if "sun" is defined. - -2013-10-03 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_mips.h, lib/jit_mips-cpu.c, - lib/jit_mips-sz.c, lib/jit_mips.c, size: Build and - pass all test cases on Irix big endian mips using - the 64 bit abi. - -2013-10-02 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_mips.h: Add proper mips abi detection. - -2013-09-30 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_print.c: Do not crash if calling jit_print from - gdb before actually emitting code. - - * lib/lightning.c: Correct misplaced check for already - visited blocks on conditional branches, what was preventing - proper merge live bit masks of forward blocks. - -2013-09-30 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-cpu.c: Correct not properly tested case of using - %r12 as index register, what was causing an invalid assertion. - %r12 is mapped to the "extra" JIT_R3 register, and test cases - only test "standard" lightning registers. - -2013-09-28 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64.c: Minor change to force collecting the maximum - instruction length in the --enable-devel-get-jit-size build - mode. The actual generated file did not change because the - sampling was large enough that it had already collected proper - information in the previously slightly buggy code (not forcing - a sync of the instructions that could be combined). - -2013-09-27 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Correct build when disassembler is - disabled. - -2013-09-25 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c: Correct some - off by one range checks (that were only accepting values - one less than the maximum allowed) and an invalid test - condition check that was forcing it to always use - indirect jumps even when reachable with an immediate - displacement. - -2013-09-24 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64-sz.c, lib/jit_arm-sz.c, lib/jit_hppa-sz.c, - lib/jit_ia64-sz.c, lib/jit_mips-sz.c, lib/jit_ppc-sz.c, - lib/jit_s390x-sz.c, lib/jit_size.c, lib/jit_sparc-sz.c, - lib/jit_x86-sz.c: New files implementing static tables - with longest known instructions length generated to match - a lightning instruction. These tables should make it easier - to make it very unlikely to ever miscalculate, or by too - much, the size of a code buffer. - - * lib/jit_size.c: New file that aids to either collect - jit code size information, or use the information depending - on build options. - - * size.c: New helper file that parses input for, and create - an initial jit_$arch-sz.c file, that needs some minor edit - for arches with multiple configurations. - - * configure.ac, Makefile.am: Add the new, devel mode only - --enable-devel-get-jit-size configure option, that sets - compile time flags to collect jit code size information, - that will be used as input for the "noinst size program". - - * lib/jit_aarch64.c, lib/jit_arm.c, lib/jit_disasm.c, - lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_memory.c, - lib/jit_mips.c, lib/jit_ppc.c, lib/jit_s390x.c, - lib/jit_sparc.c, lib/jit_x86.c, lib/lightning.c: Minor - changes for the --enable-devel-get-jit-size build mode, - as well as the "production build mode" with jit code - size information. - -2013-09-14 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/lightning.c: Add the new - jit_pointer_p interface, that returns a boolean value - telling if the pointer argument is inside the jit - code buffer. This is useful to avoid the need to add - extra labels and calls to jit_address to figure bounds - of code buffer, and still keep internal data private. - -2013-09-13 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/jit_note.c: Change the code argument of jit_get_note - to a jit_pointer_t and make jit_get_note a public interface. - It was intended so since start, as a way to map an offset - in the code to a function name, file name and line number - mapping. - -2013-09-11 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Correct reversed arguments in example of - usage in a (possibly) multi threaded, multiple jit_state_t - environments. - - * include/lightning/jit_arm.h, include/lightning/jit_private.h, - lib/jit_arm-cpu.c, lib/jit_arm.c: Make a previously, non - documented, global state private to the related jit_state_t - generating code. - -2013-09-10 Paulo Andrade <pcpa@gnu.org> - - * check/self.c, check/self.ok: New files implementing simple - consistency check assertions. At first validating some macros - that use values from different sources agree. - - * check/Makefile.am: Update for the new test case. - - * include/lightning.h, lib/lightning.c: Add the new - jit_callee_save_p() call, that is intended to be used when - writing complex code using lightning, so that one does not - need to verify what backend is being used, or have access to - private data, to query if a register is callee save or not; - on several backends the scratch registers are actually callee - save. - - * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h, - include/lightning/jit_hppa.h, include/lightning/jit_mips.h, - include/lightning/jit_ppc.h, include/lightning/jit_sparc.h, - include/lightning/jit_x86.h: Add an explicit definition for - JIT_R3-JIT_Rn, JIT_V3-JIT_Vn and JIT_F6-JIT_Fn when applicable. - This allows one to write code based on "#if defined(JIT_XN)" - and therefore, not need to check what is the current backend - or have access to private data structures. This is particularly - useful when writing virtual machines with several specialized, - global registers. - - * lib/jit_ia64.c: Properly flag the callee save general - purpose registers as such, so that jit_callee_save_p() works - as intended. - -2013-09-10 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c, configure.ac: Conditionally use the - code written to workaround a bug in the Hercules emulator, - as isnan and isinf are not available at least on HP-UX ia64. - -2013-09-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_s390x-cpu.c: Spill/reload correct callee save - float registers. - -2013-09-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_hppa-cpu.c: Correct code to call a function stored - in a register or a patched function address. - -2013-09-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c: Correct incorrect logic when restoring - the value of the "r2" callee save register. - -2013-08-29 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-cpu.c, lib/jit_arm.c: Correct wrong test and update - of the thumb offset information, when checking if needing to - patch a jump from arm to thumb mode. The problem would happen when - remapping the code buffer, and the new address being lower than - the previous one. - -2013-08-26 Paulo Andrade <pcpa@gnu.org> - - * configure.ac: Extend FreeBSD test to also handle NetBSD. - - * lib/jit_x86-cpu.c: Correct wrongly defined offset type of - ldxi_ui. Problem detected when building on NetBSD. - - * lib/lightning.c: Adjust code to handle NetBSD mremap, - where arguments do not match Linux mremap. - -2013-08-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc.c: Correct C sequence point problem miscalculating - the actual function address in a function descriptor. Problem - happens with gcc 4.8.1 at least. - -2013-08-11 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_s390x-cpu.c: Correct code checking if immediate - fits instruction, but using the negated value. - -2013-07-28 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_s390x.h, lib/jit_s390x-cpu.c, - lib/jit_s390x-fpu.c, lib/jit_s390x.c: New files - implementing the new s390x port. - - * configure.ac, include/lightning.h, - include/lightning/Makefile.am, - include/lightning/jit_private.h, - lib/Makefile.am, lib/jit_disasm.c, lib/lightning.c: - Minor adaptation for the new s390x backend. - - * check/float.tst: Update for the s390x result of - truncating +Inf to integer. - - * check/qalu_mul.tst: Add extra test cases to better test - high word of signed multiplication as the result is - adjust from unsigned multiplication on s390x. - -2013-07-28 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Do not assume casting a double NaN or - Inf to float will produce the expected float NaN or Inf. - This is not true at least under s390x. - -2013-07-28 Paulo Andrade <pcpa@gnu.org> - - * check/check.arm.sh, check/check.sh, check/check.swf.sh, - check/check.x87.sh: Properly check test programs output, - not just rely on the test program self testing the results - and not crashing. - -2013-07-28 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_aarch64.c: Remove unused macros left from cut&paste - of jit_arm.c. - -2013-07-16 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_aarch64.h, lib/jit_aarch64-cpu.c, - lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: New files - implementing the new aarch64 port, as a new architecture, - not as an expansion of the existing armv[4-7] port. - - * check/lightning.c: Add aarch64 support and a small - change to recognize character constants as immediate - values. - - * check/float.tst: Add aarch64 preprocessor conditionals - to select proper expected value when converting [+-]Inf - and NaN to integer. - - * include/lightning/jit_arm.h, lib/jit_arm.c: Minor changes - to better match the new aarch64 files. - - * configure.ac, include/lightning.h, - include/lightning/Makefile.am, include/lightning/jit_private.h, - lib/Makefile.am, lib/lightning.c: Minor adjustments - for the aarch64 port. - -2013-07-08 Paulo Andrade <pcpa@gnu.org> - - * NEWS, THANKS, configure.ac, doc/version.texi: Update for - the 1.99a second alpha release. - -2013-06-25 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips.c: Correct cut&paste error that caused wrong - stack offset calculation for double arguments in stack in - the o32 abi. - Correct typo in the __LITTLE_ENDIAN macro name, that came - from cut&paste error in the original typo in lib/jit_ppc.c. - - * lib/jit_ia64.c, lib/jit_ppc.c: Correct typo in the - __LITTLE_ENDIAN macro name. - -2013-06-22 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c, configure.ac, include/lightning.h, - lib/lightning.c: Add tests and quirks to build/detect - and/or work on Irix. - - * include/lightning/jit_mips.h, lib/jit_mips-cpu.c, - lib/jit_mips-fpu.c, lib/jit_mips.c: Adapt code to run - in big endian mips, using the n32 abi. - -2013-06-18 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h: Minor extra preprocessor testing - to "detect" byte order on x86 solaris, that now builds - and pass all test cases. - -2013-06-18 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_sparc-cpu.c: Correct compiler warning of value - used before assignment. The usage is bogus as the api - requires always patching jumps, but the random value used - could cause an assertion due to invalid displacement. - - * lib/jit_sparc.c: Always load and store double arguments - in stack as 2 float loads or stores, for safety, as unaligned - access is not allowed in Sparc Solaris. - -2013-06-14 Paulo Andrade <pcpa@gnu.org> - - * configure.ac: Force -mlp64 to CFLAGS on HP-UX ia64 port. - It is the only supported mode, and expects gcc as C compiler. - - * include/lightning.h, lib/jit_ia64-cpu.c, lib/jit_ia64.c: - Correct ia64 port to work on HP-UX that runs it in big endian - mode. - -2013-06-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_hppa.c: Sanitize the cache synchronization inline - assembly code that was doing twice the work and redundantly - flushing the end address every loop iteration. - -2013-06-09 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, check/Makefile.am, doc/Makefile.am: Do not - explicitly link to -ldl, but instead autodetect the library - with dlopen, dlsym, etc. - - * check/lightning.c: Add workaround to apparently buggy - getopt in HP-UX that sets optind to the wrong index, and - use RTLD_NEXT on HP-UX instead of RTLD_DEFAULT to dlsym - global symbols. - - * include/lightning.h: Rework definitions of wordsize and - byte order to detect proper values on HP-UX. - - * lib/lightning.c: Minor correction to use MAP_ANONYMOUS - instead of MAP_ANON on HP-UX. - - * lib/jit_hppa.c: Float arguments must be passed on integer - registers on HP-UX, not only for varargs functions. - Add code to properly clear instruction cache. This was - not required on Debian hppa port, but may have been working - by accident. - - * lib/jit_hppa-cpu.c: Follow pattern of HP-UX binaries and - use bve,n instead of bv,n to return from functions. - - * lib/jit_hppa-fpu.c: For some reason "fst? frX,rX,(rY)" did - not work on the tested computer (HP-UX B.11.23 U 9000/785 HP-UX) - so the code was changed, at first for __hpux only to add the - base and offset register and use the instruction with an - immediate (zero) offset. - -2013-06-07 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c, lib/jit_disasm.c, lib/jit_ppc-cpu.c, - lib/jit_ppc-fpu.c, lib/jit_ppc.c, include/lightning.h, - include/lightning/jit_ppc.h, include/lightning/jit_private.h: - Adapt code to work on 32 bit AIX ppc using gcc. Most changes - are basically to adapt the elf64 logic to 32 bit, as it does - not use the same convention of 32 bit Darwin ppc. - - * check/stack.tst: Add a fake memcpy function to the test - case if running under AIX, as it is not available to dlsym. - - * configure.ac: Check for getopt.h header, not available in - AIX. - -2013-06-01 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_hppa.h, lib/jit_hppa-cpu.c, - lib/jit_hppa-fpu.c, lib/jit_hppa.c: New files implementing - the hppa port. Built on Debian Linux PA-RISC 2.0, 32 bit. - - * check/float.tst: Add preprocessor for hppa expected - values when converting NaN and +-Inf to an integer. - - * check/ldst.inc: Ensure double load/store tests use an - 8 byte aligned address by default. - - * lib/lightning.c: Correct a bug found during tests in - the new port, where qmul* and qdiv* were not properly - setting one of the result registers as modified in the - function, what would be a problem if the only "write" - usage were the qmul* or qdiv*. - - * check/varargs.tst, check/varargs.ok: Add one extra - interleaved integer/double test to validate proper code - generation in the extra case. - - * check/lightning.c, configure.ac, include/lightning.h, - include/lightning/Makefile.am, - include/lightning/jit_private.h, lib/Makefile.am, - lib/jit_disasm.c: Update for the hppa port. - -2013-04-27 Paulo Andrade <pcpa@gnu.org> - - * check/varargs.tst: Correct misplaced .align directive - that was causing the double buffer to not be aligned at - 8 bytes. - * lib/jit_ia64-cpu.c: - Properly implement abi for excess arguments passed on - stack. - Simplify load/store with immediate displacement argument - with zero value. - Simplify some calls to "subi" changing to "addi" with - a negative argument. - Remove some #if 0'ed code, that could be useful in - special conditions, but the most useful one would be - to "optimize" "static" jit functions, but for the sake - of simplicity, jit functions are implemented in a way - that can be passed back to C code as C function pointers. - Add an attribute to prototypes of several unused functions. - These functions are defined for the sake of implementing all - Itanium documented instructions, but a significant amount of - them is not used by lightning. - * lib/jit_ia64-fpu.c: Simplify load/store with zero immediate - displacement and add unused attribute for functions not used - by lightning, but required to provide macros implementing all - Itanium documented instructions. - * lib/jit_ia64.c: Update for the properly implemented abi - for stack arguments. - * lib/lightning.c: Mark an unused function as such. - -2013-04-27 Paulo Andrade <pcpa@gnu.org> - - lib/jit_ia64-cpu.c: - Correct immediate range check of integer comparisons when - inverting arguments. - Correct gei_u that was not decrementing immediate when - inverting arguments. - Correct b?add* and b?sub* that were not properly updating - the result register. - -2013-04-27 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c: Correct wrong mapping of 2 instructions - in "M-, stop, M-, stop" translation, that was ignoring the - last stop (implemented as a nop I- stop). - - * lib/jit_ia64-fpu.c: Properly implement fnorm.s and fnorm.d, - as well as the proper integer to float or double conversion. - -2013-04-27 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c: Correct bogus implementation of ldr_T - for signed integers, that was using ld1.s, ld2.s and ld4.s. - The ".s" stands for speculative load, not sign extend. - - * lib/jit_ia64-fpu.c: Correct bogus implementation of ldxr_T - for float and double. The third (actually, second) argument - is indeed added to the base register, but the base register - is modified. The actual M7 implementation was already correct, - just the ldxr_f and ldxr_d implementation that was kept in - a prototype state, misinterpreting what M7 does. - -2013-04-27 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c: Correct X2 pattern matching by preventing - it to attempt to require a stop between the L and the X - instruction; that is, check the registers and predicates - before emitting the L instruction, not after. - - * lib/jit_ia64-fpu.c: Slightly simplify and correct - divr_f and divrd_d implementation. - - * check/lightning.c: Add __ia64__ preprocessor define - on Itanium. - - * check/alu.inc, check/clobber.tst, check/float.tst: Define - several macros conditionally to __ia64__. This is required - because __ia64__ jit generation can use way too many memory, - due to not implementing instruction reordering to avoid - as much as possible "stops", what causes way too many nops - to be generated, as well as the fact that division and - remainder requires function calls, and float division - requires significant code to implement. - -2013-04-27 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h: Add new backend specific movr_w_d, - movr_d_w and movi_d_w codes as helpers to ia64 varargs - functions arguments. - - * lib/jit_ia64-cpu.c: - Correct wrong encoding of A5 small integers. - Correct define of "mux" instruction modifiers. - Correct ordering of arguments and predicates of cmp_xy - implementation with immediate arguments; like most other - codes with an immediate, the immediate is the second, not - the third argument. - - * lib/jit_ia64-fpu.c: Actual implementation of the code - to move to/from gpr to/from fpr, to implement varargs abi. - - * lib/jit_ia64.c: Make fpr argument registers not allocatable - as temporaries, no need for the extra checks when there are - plenty registers. - - * lib/jit_print.c, lib/lightning.c: Minor updates for the - new movr_w_d, movr_d_w and movi_d_w codes. - -2013-04-26 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c: Correct code to - also insert a stop to break an instruction group if a - register is written more than once in the same group. - This may happen if a register is argument and result of - some lightning call (not a real instruction). The most - common case should be code in the pattern: - movl rn=largenum - ... - mov rn=smallnum - where "rn" would end up holding "largenum". - But the problem possibly could happen in other circumstances. - -2013-04-26 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_ia64.h, lib/jit_ia64-cpu.c, - lib/jit_ia64-fpu.c, lib/jit_ia64.c: - Relocate JIT_Rn registers to the local registers, as, like - float registers, div/rem and sqrt are implemented as function - calls, and may overwrite non saved scratch registers. - Change patch_at to receive a jit_code_t instead of a - jit_node_t, so that it is easier to "inline" patches when - some instruction requires complex code to implement, e.g. - uneq and ltgt. - Correct arguments to FMA and FMA like instructions that, - due to a cut&paste error were passing the wrong argument - to the related F- implementation function. - Rewrite ltgt to return the proper result if one (or both) - of the arguments is unordered. - -2013-04-26 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_ia64.h, include/lightning/jit_private.h, - lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, lib/jit_ia64.c, - lib/lightning.c: Rework code to detect need of a "stop" to - also handle predicates, as if a predicate is written, it - cannot be read in the same instruction group. - Use a single jit_regset_t variable for all registers when - checking need for a stop (increment value by 128 for - float registers). - Correct wrong "subi" implementation, as the code executed - is r0=im-r1, not r0=r1-im. - Use standard lightning 6 fpr registers, and rework to - use callee save float registers, that may be spill/reloaded - in prolog/epilog. This is required because some jit - instructions implementations need to call functions; currently - integer div/mod and float sqrt, what may change the value of - scratch float registers. - Rework point of "sync" of branches that need to return a - patch'able address, because the need for a "stop" before a - predicate read causes all branches to be the instruction - in slot 0, as there is no template to "stop" and branch - in the same instruction "bundle". - -2013-04-25 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_ia64.h, lib/jit_ia64-cpu.c, - lib/jit_ia64-fpu.c, lib/jit_ia64.c: New files implementing - the basic infrastructure of an Itanium port. The code - compiles and can generate jit for basic hello world like - functions. - - * check/lightning.c, configure.ac, include/lightning.h, - include/lightning/Makefile.am, include/lightning/jit_private.h, - lib/Makefile.am, lib/lightning.c: Update for the Itanium - port. - - * lib/jit_mips-cpu.c, lib/jit_mips.c: Correct typo and - make the jit_carry register local to the jit_state_t. - This matches code reviewed in the Itanium port, that - should use the same base logic to handle carry/borrow. - -2013-04-10 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/jit_arm.c, - lib/jit_mips-cpu.c, lib/jit_mips.c, lib/jit_ppc-cpu.c, - lib/jit_ppc.c, lib/jit_print.c, lib/jit_sparc-cpu.c, - lib/jit_sparc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, - lib/lightning.c: Change all jit_regset macros to take - a pointer argument, to avoid structure copies when - adding a port to an architecture with more than 64 - registers. - -2013-04-08 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c, lib/jit_ppc.c: Do not rely on __clear_cache - aligning to the next page boundary the end argument. It may - actually truncate it. - -2013-03-29 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_memory.c, - lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c, - lib/lightning.c: Do not start over jit generation if can grow - the code buffer with mremap without moving the base pointer. - -2013-03-29 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_memory.c: Implement a simple memory allocation wrapper - to allow overriding calls to malloc/calloc/realloc/free, as well - as ensuring all memory containing pointers is zero or points to - allocated memory. - - * include/lightning.h, include/lightning/jit_private.h: Definitions - for the memory allocation wrapper. - - * lib/Makefile.am: Update for new jit_memory.c file. - - * lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips.c, lib/jit_note.c, - lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c, lib/lightning.c: - Use the new memory allocation wrapper code. - -2013-03-22 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, include/lightning/jit_private.h, lib/lightning.c: - Remove dependency on gmp. Only a simple bitmap was required, and - that was not enough reason to force linking to gmp and possible - complications caused by it. - -2013-03-10 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h: Add check for __powerpc__ defined - in Linux, while Darwin defines __ppc__. - - * include/lightning/jit_ppc.h: Adjust register definitions - for Darwin 32 bit and Linux 64 bit ppc usage and/or ABI. - - * include/lightning/jit_private.h: Add proper check for - Linux __powerpc__ and an data definition for an workaround - to properly handle code that starts with a jump to a "main" - label. - - * lib/jit_disasm.c: Add extra disassembler initialization - for __powerpc64__. - - * lib/jit_ppc-cpu.c: Add extra macros and functions, and - correct/adapt previous ones to handle powerpc64. - - * lib/jit_ppc-fpu.c: Adapt for 64 bit wordsize. Basically - add conversion from/to int32/int64 and proper handling of - load/store offsets too large for 32 bit. - - * lib/jit_ppc.c: Add calls to 64 bit codes and adaptation - for the PowerPC 64 bit Linux ABI. - - * lib/jit_arm.c, lib/jit_mips.c, lib/jit_sparc, lib/jit_x86.c, - lib/lightning.c: Correct off by one error when restarting jit - of a function due to finding too late that needs to spill/reload - some register. Problem was found by accident on a very special - condition during PowerPC 64 code adaptation. - -2013-03-08 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Add missing ppc preprocessor definition. - -2013-03-06 Paulo Andrade <pcpa@gnu.org> - - * check/float.tst: Comment out the int to negative infinity - test in mips for the moment because not all Loongson agrees - on the result. - - * lib/jit_disasm.c: Add a test instead of an assertion - when loading symbols for disassembly due to a failure with - a simple binutils build in Debian mipsel64. - -2013-03-06 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/jit_arm-cpu.c, - lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips-cpu.c, - lib/jit_mips.c, lib/jit_note.c, lib/jit_ppc-cpu.c, - lib/jit_ppc.c, lib/jit_print.c, lib/jit_sparc-cpu.c, - lib/jit_sparc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, - lib/lightning.c: Add an extra structure for data storage - during jit generation, and release it after generating - jit, to reduce a bit memory usage, and also to make it - easier to understand what data is available during - jit runtime. - -2013-03-06 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Make data and code buffer readonly. - -2013-02-20 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Fool proof validate the examples of what - an assembly-language programmer would write and correct the - wrong sparc example. - -2013-02-19 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Add back the SPARC code generation example. - -2013-02-19 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Remove state flag to work with partial - sparc port, by just disassembling if there was incomplete - code generation. - - * jit_sparc-cpu.c: Correct wrong range check for immediate - integer constants (off by one bit shift). - Correct macro implementing equivalent "rd %y, rd" assembly. - Implement qmul* and qdiv*. - - * jit_sparc.c: Update for qmul* and qdiv* and remove logic - to handle incomplete code generation during sparc port. - -2013-02-18 Paulo Andrade <pcpa@gnu.org> - - * check/float.tst: Add sparc to list of known NaN and +-Inf - to integer conversion. - - * check/lightning.c: Define __sparc__ to preprocessor in - the sparc backend. - - * include/lightning/jit_private.h: Correct wrong definition - of emit_stxi_d, that has lived for a long time, but would - cause problems whenever needing to spill/reload a float - register. - - * include/lightning/jit_sparc.h: Can only use %g2,%g3,%g4 - for scratch variables, as other "global" registers are - reserved for the system, e.g. libc. - Reorder float register naming to make it easier to - access odd float registers, so that generating code for - pusharg and getarg is easier for the IR. - - * lib/jit_mips-cpu.c, lib/jit_ppc-cpu.c: Update to match - new code in jit_sparc-cpu.c. It must call jit_get_reg - with jit_class_nospill if using the register to move - an unconditional branch address to it, as the reload - will not happen (actually could happen in the delay - slot...) - - * lib/jit_sparc-cpu.c: Correct wrong macro definition for - ldxr_s. - Properly implement div* and implement rem. Div* needs - to use the y register, and rem* needs to be synthesized. - Correct b?sub* macro definitions. - - * lib/jit_sparc-fpu.c: Correct reversed float to/from double - conversion. - Correct wrong jit_get_reg call asking for a gpr and then - using the fpr with that number. - Correct wrong branch displacement computation for - conditional branches. - - * lib/jit_sparc.c: Correct getarg_d and pushargi_d implementation. - Add rem* entries to the switch converting IR to machine code. - - * lib/lightning.c: Correct a problem detected when adding - the jit_class_nospill flag to jit_get_reg, that was caused - when having a branch to an "epilog" node, what would cause - the code to think all registers in unknown state were live, - while in truth, all registers in unknown state in the - "just after return" point are actually dead. - -2013-02-17 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_sparc.h, lib/jit_sparc-cpu.c, - lib/jit_sparc-fpu.c, lib/jit_sparc.c: New files implementing - the basic framework of the sparc port. - - * configure.ac, include/lightning.h, include/lightning/Makefile.am, - include/lightning/jit_private.h, lib/jit_disasm.c: Update - for the sparc port framework. - - * lib/jit_mips.c: Correct reversed retr/reti logic. - - * lib/jit_ppc.c: Correct misspelled __LITTLE_ENDIAN. - - * lib/lightning.c: Always do byte hashing in hash_data, because - the logic to "compress" strings causes large pointers to not - be guaranteed aligned at 4 byte boundaries. - Update for the sparc port framework. - -2013-02-11 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Correct jit_pushargi_f in the arm hardfp abi. - Most of the logic uses even numbered register numbers, so that - a float and a double can be used in the same register, but - the abi requires packing the float arguments, so jit_pushargi_f - needs to allocate a temporary register to modify only the - proper register argument (or be very smart to push two - immediate arguments if applicable). - -2013-02-11 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/lightning.c: Implement the new - jit_clear_state and jit_destroy_state calls. jit_clear_state - releases all memory not required during jit_execution; that - is, leaves only the mmap'ed data and code buffers allocated. - jit_destroy_state releases the mmap'ed buffers as well as - the jit_state_t object itself, that holds pointers to the - code and data buffers, as well as annotation pointers (for - disassembly or backtrace) in the data buffer. - - * lib/jit_note.c: Correct invalid vector offset access. - - * check/ccall.c, check/lightning.c, doc/ifib.c, doc/incr.c, - doc/printf.c, doc/rfib.c, doc/rpn.c: Use the new jit_clear_state - and jit_destroy_state calls, to demonstrate the new code to - release all jit memory. - - * doc/body.texi: Add basic documentation and usage description - of jit_clear_state and jit_destroy_state. - -2013-02-11 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_private.h, lib/jit_note.c, lib/lightning.c: - Store all annotation information in the mmap'ed area reserved for - read only data. This adds code to not allocate memory for jit_note_t - objects, and to relocate jit_line_t objects and its contents after - calculating annotation information. The jit_line_t objects are - relocated because it is not possible to always calculate before - hand data layout because note information may be extended or - redundant entries removed, as well as allowed to be added in - non sequential order. - A bug was also corrected in _jit_set_note, that was causing it - to allocate new jit_line_t objects when not needed. It was still - working correctly, but allocating way more memory than required. - -2013-02-05 Paulo Andrade <pcpa@gnu.org> - - *include/lightning.h, lib/lightning.c: Add the new jit_live code - to explicitly mark a register as live. It is required to avoid - assuming functions always return a value in the gpr and fpr return - register, and to avoid the need of some very specialized codes - that vary too much from backend to backend, to instruct the - optimization code the return register is live. - - * lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, - lib/jit_x86.c: Update for the new jit_live code. - - * check/ret.ok, check/ret.tst: New files implementing a simple - test case that would previously fail at least in ix86/x86_64. - - * check/Makefile.am: Update for new "ret" test case. - -2013-02-05 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Validate and correct - problems in the qmul and qdiv ppc implementation. - -2013-02-04 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/jit_arm-cpu.c, lib/jit_arm.c, lib/jit_mips-cpu.c, - lib/jit_mips.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c, - lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c: - Implement the new qmul and qdiv instructions that return signed - and unsigned lo/hi multiplication result and div/rem division result. - These should be useful for jit translation of code that needs to - know if a multiplication overflows (no branch opcode added) or if - a division is exact (easy check if remainder is zero). - - * check/lightning.c, lib/jit_print.c, check/Makefile.am, - check/all.tst: Update for the new qmul and qdiv instructions. - - * check/qalu.inc, check/qalu_div.ok, check/qalu_div.tst, - check/qalu_mul.ok, check/qalu_mul.tst: New files implementing - simple test cases for qmul and qdiv. - -2013-01-30 Paulo Andrade <pcpa@gnu.org> - - * doc/body.texi: Correct "jmpi" description that incorrectly - told it was possible to pass any address as jump target. The - only way to do that is "movi+jmpr". - -2013-01-30 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-cpu.c: Correct undefined behavior code. - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56143 - -2013-01-29 Paulo Andrade <pcpa@gnu.org> - - * configure.ac: Use AC_CONFIG_HEADERS instead of AC_CONFIG_HEADER - to have HAVE_CONFIG_H defined with latest aclocal. - - * include/lightning/jit_private.h, lib/lightning.c: Add new - abstraction to use an heuristic to calculate amount of space - required for jit generation, and code to reallocate buffer if - did miscalculate it. - - * lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_x86.c: - Update to use new code to estimate and resize of required buffer - for jit code. - - * lib/jit_x86-cpu.c: Minor cosmetic change to avoid adding a - non required rex prefix when calling a function pointer stored - in a register. - -2013-01-24 Paulo Andrade <pcpa@gnu.org> - - * check/Makefile.am: "make debug" target should pass only - the main test tool program as argument for running gdb - - * configure.ac: Add the --enable-assertions options. - - * doc/Makefile.am, doc/body.texi, doc/lightning.texi: - Major rewrite of the documentation to match the current - implementation. - - * doc/version.texi: Automatic date update. - - * doc/ifib.c, doc/incr.c, doc/printf.c, doc/rfib.c, doc/rpn.c: - Implementation of the documentation examples, that are also - compiled during a normal build. - - * doc/p-lightning.texi, doc/porting.texi, doc/toc.texi, - doc/u-lightning.texi, doc/using.texi: These files were - renamed in the documentation rewrite, as the documentation - was significantly trimmed due to full removal of the porting - chapters. Better porting documentation should be added but - for the moment it was just removed the documentation not - matching the implementation. - -2013-01-18 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_note.c: Correct bounds check and wrong code keeping - a pointer that could be changed after a realloc call. - -2013-01-18 Paulo Andrade <pcpa@gnu.org> - - * check/3to2.tst, check/add.tst, check/allocai.tst, check/bp.tst, - check/call.tst, check/ccall.c, check/clobber.tst, check/divi.tst, - check/fib.tst, check/ldsti.tst, check/ldstr-c.tst, check/ldstr.tst, - check/ldstxi-c.tst, check/ldstxi.tst, check/ldstxr-c.tst, - check/ldstxr.tst, check/lightning.c, check/rpn.tst, check/stack.tst, - check/varargs.tst, include/lightning.h, - include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_disasm.c, - lib/jit_mips.c, lib/jit_note.c, lib/jit_ppc.c, lib/jit_print.c, - lib/jit_x86.c, lib/lightning.c: Extend the "jit_note" abstraction - with the new "jit_name" call, that receives a string argument, and - should usually be called to mark boundaries of functions of code - generating jit (that is, it is not expected that the language - generating jit map its functions to jit functions). - -2013-01-17 Paulo Andrade <pcpa@gnu.org> - - * check/add.tst, check/allocai.tst, check/bp.tst, check/divi.tst, - check/fib.tst, check/lightning.c, include/lightning/jit_arm.h, - include/lightning/jit_mips.h, include/lightning/jit_ppc.h, - include/lightning/jit_private.h, include/lightning/jit_x86.h: - Make JIT_RET, JIT_FRET and JIT_SP private. These should not be - used in any operations due to frequently having special - constraints (usually JIT_FRET). JIT_FP must be made available - because it must be used as the base register to access stack - space allocated with jit_allocai. - -2013-01-14 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/lightning.c: Add an extra align - argument to the jit_data call (that should be made private), - so that it should not align strings at 8 bytes. - Correct the jit_note call to include the null ending byte - when adding label/note names to the "jit data section". - -2013-01-11 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_note.c: New file implementing a simple string+integer - annotation, that should be used to map filename and line number - to offsets in the generated jit. - - * include/lightning.h, lib/lightning.c: Update for the new - note code. - Add an extra mandatory argument to init_jit, that is used - as argument to bfd_openr. - Change from generic void* to char* the argument to jit_note - and add an extra integer argument, to map to filename and - line number. - - * check/ccall.c, check/lightning.c, include/lightning/jit_private.h, - lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips.c, lib/jit_ppc.c, - lib/jit_print.c, lib/jit_x86.c: lib/Makefile.am: Update for the - new annotation code. - - * configure.ac, check/Makefile.am: Update to work with latest - automake. - -2013-01-09 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/jit_arm.c, jit_mips-fpu.c, - lib/jit_mips.c, lib/jit_print.c, lib/jit_x86.c, lib/lightning.c: - Remove the jit_code_getarg_{f,d} and jit_code_pusharg{i,r}_{f,d} - calls, replacing them with the new, internal only, jit_movr_w_f, - jit_mov{r,i}_f_w, jit_movr_ww_d, and jit_mov{i,r}_d_ww, that - better describe the operation being done, and allow removing - the hackish code to detect special conditions for arm when - moving from/to vfp from/to a grp register pair. - Rename jit_code_retval_{f,d} to jit_code_x86_retval_{f,d} as - it is specific to 32 bit x86, and used to move abi return - value in x87 register to a sse register. - -2013-01-05 Paulo Andrade <pcpa@gnu.org> - - * check/cccall.c, check/ccall.ok: New test case to validate - interleaved calls from/to C code and jit. - - * check/Makefile.am: Update for the new ccall test case. - - * include/lightning.h, lib/lightning.c: Add the new jit_address - call that returns the real/final address of a "note" in the - generated jit. It requires a jit_node_t as returned by the - jit_note call, and is only valid after calling jit_emit. - Add an intermediate solution to properly handle arm - soft and softfp modes that move a double to an integer register - pair. Currently it just adds extra tests for the condition, - but the proper solution should be to have extra lightning - codes for these conditions, codes which should be only used - by the backends that need it, and merged with the existing - jit_pusharg*_{f,d}. - - * include/lightning/jit_private.h: Add new jit_state_t flag - to know it finished jit_emit, so that calls to jit_address - are valid. - - * lib/jit_mips.c: Correct abi implementation so that the - new ccall test case pass. Major problem was using - _jit->function.self.arg{i,f} as boolean values, but that - would cause lightning.c:patch_registers() to incorrectly - assume only one register was used as argument when calling - jit_regarg_p(); _jit->function.self.arg{i,f} must be the - number of registers used as arguments (in all backends). - - * lib/jit_x86.c: Add workaround, by marking %rax as used, - to a special condition, when running out of registers and the - allocator trying to spill and reload %rax, but %rax was used - as a pointer to a function, what would cause the reload to - destroy the return value. This condition can be better - generalized, but the current solution is good enough. - - * include/lightning/jit_ppc.h, lib/jit_ppc-cpu.c, lib/jit_ppc.c: - Rewrite logic to handle arguments, as the original code was - written based on a SysV pdf about the generic powerpc ABI, - what did "invent" a new abi for the previous test cases, but - failed in the new ccall test in Darwin PPC. Now it properly - handles 13 float registers for arguments, as well as proper - computation of stack offsets when running out of registers - for arguments. - -2013-01-02 Paulo Andrade <pcpa@gnu.org> - - * check/float.tst: Correct test case to match ppc also - converting positive infinity to 0x7fffffff. - - * lib/jit_arm-swf.c: Correct typos with double underscores. - - * lib/lightning.c: Correct remaining wrong reverse jump logic. - -2012-12-29 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Correct both, wrong and confusing logic - to compute the reverse of a jump. Now it properly matches - C semantics for "eq" (==) and "ne" (!=) and correct computation - of reverse of "uneq" as "gt". - - * check/branch.tst: Update "ne" float branch check that - previously happened to be wrongly tested with a NaN argument. - -2012-12-29 Paulo Andrade <pcpa@gnu.org> - - * check/float.ok, check/float.tst: New test cases implementing - extensive validation of float comparison and branch code - generation as well as integer conversion, involving NaN and - [+-]Inf. - - * lib/jit_arm-swf.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: - Correct bugs found by new float test case. - - * lib/jit_x86.c: Correct cut&paste error added in commit to - convert jit_arg* return value to a jit_node_t*, that would - cause it to not properly handle double arguments in ix86. - - * check/Makefile.am: Update for the new test case. - -2012-12-28 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c, include/lightning.h, lib/jit_arm.c, - lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, lib/jit_x86.c, - lib/lightning.c: Change return value of jit_arg{,_f,_d} to - a jit_node_t* object, that should be used as argument to - jit_getarg_{c,uc,s,us,i,ui,l,f,d}. This just requires changing - from jit_int32_t to jit_pointer_t (or jit_node_t*) the "handle" - for the getarg calls, with the benefit that it makes it easy - to implement patching of the stack address of non register - arguments, this way allowing to implement variable size stack - frames if applicable; useful if there are too many registers and - jit functions uses only a few callee save registers. - -2012-12-27 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c, lib/jit_mips-cpu.c, lib/jit_mips.c: Correct - regressions when patching jit_calli for a forward function. - - * lib/jit_ppc-cpu.c: Correct wrong arguments to ANDI opcode - in jit_getarg_u{c,s} implementation. - -2012-12-23 Paulo Andrade <pcpa@gnu.org> - - * check/call.ok, check/call.tst: New test cases to validate - simple typed argument and return values in function calls. - - * check/lightning.c: Properly handle jit_movi of labels for - backward and forward code labels. - - * check/Makefile.am: Update for new test case. - -2012-12-23 Paulo Andrade <pcpa@gnu.org> - - * check/carry.ok, check/carry.tst: New test case to validate - carry condition handling. - - * check/Makefile.am: Update for new test case. - -2012-12-22 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Implement logic for - jit_htonr for big endian, so that ppc (big endian) pass the - new clobber.tst test case. - -2012-12-22 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm.c: Correct use of wrong argument offset - variable in armv7l or float/double argument for varargs - function in armv7hl. - Correct jit_getarg* logic in software float mode to - match expected behavior in other backends, that is, if - a function is not called, it is safe to use a few lightning - calls before a next jit_getarg* call, as done in the test - case check/stack.tst. The proper solution should be to - extend the parser in lib/lightning.c to check if there is - some float operation that will call some (libgcc?) function, - but software float arm should be a very uncommon backend for - lightning, so, just load the already in place arguments - saved to stack, assuming the register argument was clobbered - (what should not be the case most times...). - -2012-12-22 Paulo Andrade <pcpa@gnu.org> - - * check/clobber.ok, check/clobber.tst: New test case doing - extensive validation tests to ensure registers not used in - a operation are not clobbered. - - * check/Makefile.am: Update for new test case. - -2012-12-21 Paulo Andrade <pcpa@gnu.org> - - * lib/lightning.c: Partially rewrite/revert code to compute - initial register live state at the start of a basic block. - The original logic was corrupted when adding optimizations - to do as few computations as possible in jit_update. The - reglive field must be always a known set of live registers - at the start of a basic block. The value that was incorrect - was the regmask field, that must be the set of registers - that are in unknown state, because they are not known live, - neither set (or possibly not set) in the basic block, and - *must* store the state at the start of the basic block. - -2012-12-20 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_ppc.h: Correct mismatch of JIT_F{1,5} - with enum codes, that were correct, and returned by jit_f(). - - * lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_ppc.c: Properly - implement and better describe values when generating stack - frames. - -2012-12-18 Paulo Andrade <pcpa@gnu.org> - - * check/stack.ok, check/stack.tst: New files to test data - integrity on a deep chain of stack frames. - - * lib/jit_arm.c, lib/jit_arm-cpu.c, lib/jit_mips.c, - lib/jit_mips-cpu.c, lib/jit_ppc.c, lib/jit_ppc-cpu.c, - lib/jit_x86.c, lib/jit_x86-cpu.c: Calculate _jit->function->stack - in the emit stage, otherwise it will calculate it wrong if - need to jit_allocai space to spill registers. - - * lib/lightning.c: Correct wrong offset when updating the - "current" jit function pointer in the code that may need to - allocate stack space to spill registers. - - * check/lightning.c: Correct off by one data space check. - - * check/Makefile.am: Update for new test case. - -2012-12-17 Paulo Andrade <pcpa@gnu.org> - - * check/fop_abs.ok, check/fop_abs.tst, check/fop_sqrt.ok, - check/fop_sqrt.tst: New files implementing simple test cases - for the extra float operations. - - * check/Makefile.am: Update for new test cases. - - * check/alu.inc: Add an extra macro to check for unordered - equality on tests where it is expected to use NaN as an - argument. - - * check/lightning.c: Minor change for proper/common argument - syntax handling ommiting arguments to options. - -2012-12-17 Paulo Andrade <pcpa@gnu.org> - - * check/Makefile.am: Automatically generate pattern list - of tests with alternate jit generation options. This should - prevent typos and needing to change multiple places after - a change. - -2012-12-14 Paulo Andrade <pcpa@gnu.org> - - * check/lightning.c: Remove the ".cpu name value" syntax, - as it was not able to do proper changes before the jit - internal data structure was initialized. Now it supports - several getopt options to force using different jit - generation options, effectively replacing the previous - syntax. - - * check/run-test: Add simple extra logic to handle differently - named test scripts, used to test things like x87 coprocessor - in ix86, and arm instruction set or software float in armv7l. - - * configure.ac: Add some AC_RUN_IFELSE calls to figure at - compile time if can test different code generation options, - and update Makefile generation accordingly. - - * check/Makefile.am, lib/jit_arm.c, lib/jit_x86.c: Update to - properly work with the test tool updating the jit_cpu global - information. - - * check/check.arm.sh, check/check.swf.sh, check/check.x87.sh: - New wrapper files passing -mthumb=0, mvfp=0 and -mx87=1 to - the test tool, if applicable, so that it can validate alternate - code generation options on test hosts that support them. - -2012-12-14 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-x87.c, lib/jit_x86.c: Correct test cases in ix86 - when using the x87 coprocessor instead of sse2+. - -2012-12-14 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, include/lightning/jit_private.h, - lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_x86.c, - lib/lightning.c: Make jit_ellipsis implementation not - backend specific. It is not intended to handle va_list - like objects at runtime, as jit_arg* and jit_getarg* - return constant values resolved at parse time, so, effectively - it is not possible to create printf like jit functions, as - there is no va_start, va_arg, va_end, etc, abstraction. This - limitation should be kept for the sake of making new ports - easier. - -2012-12-14 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/lightning.c: Add two extra wrapper - functions to avoid need for excess pointer to/from word casts. - - * check/lightning.c: Only need for pointer to/from word cast - now is jit_movi, update accordingly. - -2012-12-13 Paulo Andrade <pcpa@gnu.org> - - * check/varargs.ok, check/varargs.tst: New test cases implementing - simple varargs calls with a large amount of arguments to exercise - excess arguments on stack. - - * include/lightning.h: Include config.h if HAVE_CONFIG_H is - defined. - - * lib/jit_arm.c: Allocate a fpr register, not a gpr one for - temporary when pushing varargs arguments in the stack. - - * lib/jit_arm-swf.c: Correct code changing the wrong offset - in jit_absr_d and jit_negr_d in software float. - - * lib/jit_mips.c: Correct calculation of offsets of arguments - on stack. - - * lib/jit_ppc.c: Correct bogus logic for "next" offset of arguments - on stack and adjust for fixed offset of stack arguments. - -2012-12-12 Paulo Andrade <pcpa@gnu.org> - - * include/lightning.h, lib/jit_arm.c, lib/jit_mips.c, - lib/jit_ppc.c, lib/jit_x86.c, lib/lightning.c: Change jit_prepare - to no longer receive an argument. If receiving an argument, it - should be an ABI specifier, not a boolean if varargs or not, - and add the new jit_ellipsis call, to specify where the - ellipsis is in the C prototype of the function being called. - Note that currently it is not supported to define varargs - functions and it will be ignored if calling jit_ellipsis not - in a prepare/finish* block, but this should be addressed. - - * check/allocai.tst, check/alu_add.tst, check/alu_and.tst, - check/alu_com.tst, check/alu_div.tst, check/alu_lsh.tst, - check/alu_mul.tst, check/alu_neg.tst, check/alu_or.tst, - check/alu_rem.tst, check/alu_rsh.tst, check/alu_sub.tst, - check/alu_xor.tst, check/alux_add.tst, check/alux_sub.tst, - check/bp.tst, check/branch.tst, check/cvt.tst, check/divi.tst, - check/fib.tst, check/ldsti.tst, check/ldstr-c.tst, - check/ldstr.tst, check/ldstxi-c.tst, check/ldstxi.tst, - check/ldstxr-c.tst, check/ldstxr.tst, check/rpn.tst, - check/lightning.c: Update for the change to jit_prepare and - addition of jit_ellipsis. - -2012-12-11 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc-cpu.c: Make movr a function that checks arguments - so that other code can safely assume it is a noop if src and dst - are the same register. - Implement rem{r,i}{,_u} as a div{,u}/mul/sub. - Correct ANDIS, ORIS and XORIS calls to cast the argument to - unsigned before the shift to avoid an assertion if the argument - had the topmost bit set. - Implement lshi, rshi and rshi_u as functions to test for a - zero argument, that would otherwise trigger an assertion when - computing the shift value. - Do a simple implementation of bm{s,c}{r,i} with a temporary, - "andr" of arguments and jump based on comparison with zero. - Correct typo in ldxi_c. - - * lib/jit_ppc-fpu.c: Correct wrong arguments to FDIV* and STF*. - - * lib/jit_ppc.c: Correct wrong check for 6 instead of 8 integer - arguments in registers. If calling a varargs function and - passing a float or double argument, also either store the - value in the stack or in integer registers, as varargs functions - do not fetch it from float registers. - Add "case" for new functions and incorrectly missing ones. - Call libgcc's __clear_cache, that should know what to do - if the hardware needs flushing cache before execution. - - * lib/lightning.c: Do a simple/trivial logic in jit_regset_scan1, - that should make it easier for the compiler to optimize it, and - that also corrects the previously wrong code for big endian, and - that was causing problems in ppc due to not saving all callee save - registers as it was not "finding" them in the regset due to the - little endian assumption bug. - -2012-12-11 Paulo Andrade <pcpa@gnu.org> - - * configure.ac: Only default to using the builtin disassembler - if on GNU/Linux. This should be temporary, due to requiring - /proc/self/exe. - Correctly check $target_cpu for powerpc. - - * include/lightning/jit_ppc.h: Correctly implement jit_v_num. - - * include/lightning/jit_private.h: Declare proper prototype - for jit_init_debug and jit_finish_debug. - - * lib/jit_ppc-cpu.c: Remove code to save/restore callee save - float registers, as it is not required since those float - registers are not usable currently. - Change prolog and epilog generation to, at least comparing - code, match what gcc generates in "gcc -O0", but it is still - failing in Darwin PPC, apparently due to the __clear_cache - call not being enough, as frequently it will also fail to - execute, and the code buffer is all zeroes. - - * lib/lightning.c: Do not fail in jit_regset_scan1 calls due - to passing 64 as argument on computers with 64 registers. - -2012-12-10 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-cpu.c: Correct all current test cases. - Call the "xori" not the "XORI" macro for jit_xori implementation, - as the XORI macro handles only 16 bit unsigned values. - Call the "movr" macro, not the "movi" macro in the special - case of adding or subtracting zero. - Use the proper temporary register in the jit_andr implementation. - -2012-12-09 Paulo Andrade <pcpa@gnu.org> - - * check/alu.inc, check/alu_add.ok, check/alu_add.tst, - check/alu_and.ok, check/alu_and.tst, check/alu_com.ok, - check/alu_com.tst, check/alu_div.ok, check/alu_div.tst, - check/alu_lsh.ok, check/alu_lsh.tst, check/alu_mul.ok, - check/alu_mul.tst, check/alu_neg.ok, check/alu_neg.tst, - check/alu_or.ok, check/alu_or.tst, check/alu_rem.ok, - check/alu_rem.tst, check/alu_rsh.ok, check/alu_rsh.tst, - check/alu_sub.ok, check/alu_sub.tst, check/alu_xor.ok, - check/alu_xor.tst, check/alux_add.ok, check/alux_add.tst, - check/alux_sub.ok, check/alux_sub.tst, check/branch.ok, - check/branch.tst: New test cases for arithmetic and branch - tests. - - * check/Makefile.am: Update for new test cases. - - * include/lightning/jit_private.h: Make the jit_reg_free_p - macro shared by all backends. Previously was added for the - arm backend, but is useful in the x86_64 backend when checking - state of "special purpose register". - Also add the new jit_class_named register class, that must be - or'ed with the register value if calling jit_get_reg expecting - an specific value, because the specific register value may be - zero, that previously was treated as no register requested. - - * lib/jit_arm-cpu.c: Correct argument order for T2_MVN. - - * lib/jit_arm-swf.c: Call the proper function for double - divide. The "software float" implementation just calls - libgcc functions. - - * lib/jit_arm.c: Return float/double values in the float - register if using the hard float ABI. - - * lib/jit_x86-cpu.c: Change the can_sign_extend_int_p macro - to not include -0x80000000L, because there is code that - "abuses" it and thinks it can negate the immediate value - after calling that macro. - Correct implementation of jit_subi that had a wrong code - patch logic doing subtraction with reversed arguments. - Correct REX prefix calculation in the jit_muli implementation. - Correct logic to get/unget %*ax and %*dx registers in divremr - and divremi. - Correct divremi that was using the symbolic, unique %*ax - value in on place (not using the _REGNO name suffix). - Correct cut&paste error causing it to use "xor" instead of - "or" in one code path of the jit_ori implementation. - Correct several flaws when clobbering registers and/or when - one of the arguments was %*cx in the rotshr wrapper function - implementing most shift operations. - - * lib/lightning.c: No longer expect that the backend be smart - enough to know what to do when asking for a named register - if that register is already an argument or is live. It fails - if it is an argument, or if register is live, fails if cannot - spill. - No longer incorrectly assume that eqr_{f,d} and ltgr_{f,d} are - safe to inverse value tests in jump thread optimization. - -2012-12-05 Paulo Andrade <pcpa@gnu.org> - - * check/Makefile.am, check/cvt.ok, check/cvt.tst: Add new - "cvt" test case to test conversion from/to int/float types. - - * check/lightning.c: Only define truncr_{f,d}_l in 64 bit mode. - - * include/lightning.h: Correct typo that caused it to define - jit_truncr_{f,d}_l in 32 bit mode. - - * lib/jit_arm-cpu.c: Avoid assertion failure in the signed/unsigned - extend opcodes generation as it shares an interface for 3 argument - opcode generation. - - * lib/jit_x86-cpu.c: Correct wrong argument passed to - jit_unget_reg in the andi implementation and wrong byte - unsigned extend code generation. - - * lib/jit_x86-sse.c: Correct conversion from "word" to float or - double as is dependent on wordsize. - -2012-12-05 Paulo Andrade <pcpa@gnu.org> - - * check/ldstr-c.ok, check/ldstr-c.tst, check/ldstxi-c.ok, - check/ldstxi-c.tst, check/ldstxr-c.ok, check/ldstxr-c.tst: - New test case files testing load clobbering the base and/or - index register; - - * check/ldst.inc: New file with common definition for all the - ldst* test cases. - - check/Makefile.am, check/ldsti.tst, check/ldstr.tst, - check/ldstxi.tst, check/ldstxr.tst: Update for new common - definitions file and new register clobber ldst tests. - -2012-12-05 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-fpu.c: Correct wrong register order in stxr_{f,d} - in the mips backend. - -2012-12-05 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_arm-vfp.c: Correct regression found in armv7l with - latest test cases. - -2012-12-05 Paulo Andrade <pcpa@gnu.org> - - * check/ldstxi.tst, check/ldstxr.tst: Correct wrong argument - order for 32 bit mode tests. - - * configure.ac: Correct check for ix86 target_cpu. - -2012-12-05 Paulo Andrade <pcpa@gnu.org> - - * check/ldstr.ok, check/ldstr.tst, check/ldsti.ok, - check/ldsti.tst, check/ldstxr.ok, check/ldstxr.tst, - check/ldstxi.ok, check/ldstxi.tst: - New test case files exercising a very large amount of - register combinations to verify load/store implementation. - - * check/Makefile.am: Update for new test cases. - - * lib/jit_x86-cpu.c: Correct wrong argument order when - computing REX prefix for {ld,st}r_T codes; - -2012-12-04 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips - jit_sqrtr_{f,d} codes. - - * check/all.tst, include/lightning.h, lib/jit_print.c: Change - declaration order and call order in all.tst of {add,sub}c and - {add,sub}x. *c must be called before to set the carry and *x - second to use the carry and keep it set. The wrong call order - was causing all.tst to fail in mips, where a register is - allocated to keep a global carry state. - -2012-12-04 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_mips.h, lib/jit_mips-cpu.c, - lib/jit_mips-fpu.c, lib/jit_mips.c: Correct float/double - argument handling and make the mips backend pass the initial - test cases. - - * include/lightning.h, ib/jit_print.c, lib/lightning.c: - Add extra enum values for argument handling functions that - could not be abstracted to the current codes, that is, when - float values need to move from/to gpr from/to fpr. It would - be more tempting to add such primitives, but they would have - wordsize limitations, and it is not expected to add codes - with one gpr argument for 64 bit and two for 32 bit. - - * lib/jit_ppc.c: Check _jit->function before calling jit_epilog() - to avoid a runtime exception. - -2012-12-04 Paulo Andrade <pcpa@gnu.org> - - * include/lightning/jit_mips.h, lib/jit_mips.c: Update to - make the mips backend compile in a qemu image. - - * lib/jit_ppc.c: Minor adaptations to help in having the - ppc backend compilable. - -2012-12-03 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, include/lightning/jit_private.h, lib/jit_arm-cpu.c, - lib/jit_arm-swf.c, lib/jit_arm.c, check/Makefile.am: Correct - implementation of the arm backend port to build and pass the - current test cases. Tested on armv7 with softfp abi. - - * lib/jit_disasm.c: Rename and change prototype of static - disassemble function as in the arm backend it is required - to access state information stored in the jit_state_t object. - - * check/3to2.tst, check/add.tst: Correct test case code assuming - JIT_RO and JIT_RET are the same, and even if they are the same, - the logic was incorrect because it must always call jit_retval* - to fetch a function call return before any other instruction. - The arm backend hash a special condition if jit_retval is not - called, because "r0" is not JIT_R0, but is JIT_RET and *also* - the first argument for a called function, so JIT_RET must be - only used as an argument to jit_retval. - -2012-12-03 Paulo Andrade <pcpa@gnu.org> - - * check/all.tst, check/lightning.c: Only declare or use 64 bit - interfaces on 64 bit builds. - - * check/fib.tst: Use simpler logic to not need preprocessor - conditionals for 32 or 64 bit. - - * include/lightning.h: Only declare 64 bit macros on a 64 bit - build. Code using lightning must know about wordsize and the - jit generation limitations, also, this way it generates a - compile time failure, not a runtime assertion. - - * include/lightning/jit_x86.h: Correct typo in macro name. - - * lib/jit_arm.c, lib/jit_arm-cpu.c, lib/jit_mips.c, - lib/jit_mips-cpu.c, lib/jit_ppc.c, lib/jit_ppc-cpu.c, - lib/jit_x86.c, lib/jit_x86-cpu.c: Correct wrong code to get - current jit function pointer. - - * lib/lightning.c: Move call to the simplify() optimization - to after register liveness is known. Previous code did work - by accident but now with proper test cases the problem was - noticed. - - * lib/jit_disasm.c: Always cast bfd_vma to long long when - passing it as printf argument. - -2012-12-03 Paulo Andrade <pcpa@gnu.org> - - * configure.ac, check/Makefile.am, check/check.sh, - doc/Makefile.am, include/lightning/Makefile.am, - lib/Makefile.am: Correct make distcheck. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_ppc.c: Assign copyright ownership to FSF. - - * lib/jit_x86-cpu.c: Correct integer multiplication that was - generating code with reversed register arguments. - - * check/rpn.ok, check/rpn.tst: New test case file. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - - * lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: - Actually change copyright owner to FSF as avertised. - - * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, - lib/jit_arm-vfp.c, lib/jit_arm.c, - lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips.c, - lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_ppc.c: New - files implementing initial code different jit backends. - - * include/lightning/jit_private.h: Add extra field to the - private jit_patch_t type, required by the arm port. - - * lib/Makefile.am: Update for the new backend implementation - files. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - - * check/Makefile.am: Add proper "make clean" rule and missing - check.sh to EXTRA_DIST. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - - * .gitignore: Update pattern of ignored files. - - * check/Makefile.am: Add rule to build liblightning.la dependency - in case of running "make check" before building the library. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - - * lightning/Makefile.am, lightning/asm-common.h, - lightning/core-common.h, lightning/fp-common.h, - lightning/funcs-common.h, lightning/i386/Makefile.frag, - lightning/i386/asm-32.h, lightning/i386/asm-64.h, - lightning/i386/asm.h, lightning/i386/core-32.h, - lightning/i386/core-64.h, lightning/i386/core.h, - lightning/i386/fp-32.h, lightning/i386/fp-64.h, - lightning/i386/fp.h, lightning/i386/funcs.h, - lightning/ppc/asm.h, lightning/ppc/core.h, - lightning/ppc/fp.h, lightning/ppc/funcs.h, - lightning/sparc/asm.h, lightning/sparc/core.h, - lightning/sparc/fp.h, lightning/sparc/funcs.h: - Removed. The core logic is used in the new code, and new mips - and arm ports will be added. At first, sparc will not be - supported as it has not yet been ported to the new engine. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - - * tests/Makefile.am, tests/3to2.c, tests/3to2.ok, tests/add.c, - tests/add.ok, tests/allocai.c, tests/allocai.ok, tests/bp.c, - tests/bp.ok, tests/divi.c, tests/divi.ok, tests/fib.c, tests/fib.ok, - tests/fibdelay.c, tests/fibdelay.ok, tests/fibit.c, tests/fibit.ok, - tests/funcfp.c, tests/funcfp.ok, tests/incr.c, tests/incr.ok, - tests/ldst.c, tests/ldst.ok, tests/ldxi.c, tests/ldxi.ok, - tests/modi.c, tests/modi.ok, tests/movi.c, tests/movi.ok, - tests/printf.c, tests/printf.ok, tests/printf2.c, tests/printf2.ok, - tests/ret.c, tests/ret.ok, tests/rpn.c, tests/rpn.ok, tests/rpnfp.c, - tests/rpnfp.ok, tests/sete.c, tests/sete.ok, tests/testfp.c, - tests/testfp.ok, tests-run-test: Removed previous test suite, in - favor of a newer one in the check subdirectory. - - * check/3to2.ok, check/3to2.tst, check/add.ok, check/add.tst, - check/allocai.ok, check/allocai.tst, check/bp.ok, check/bp.tst, - check/divi.ok, check/divi.tst, check/fib.ok, check/fib.tst: - New sample input for the new test program, loosely matching - several of the previous test cases. - - * check/Makefile.am: New test suite makefile. - - * check/check.sh, check/run-test: New wrapper files for the - new test suite. - - * check/lightning.c: New file. The main driver of the new test - suite, that compiles to a parser of a very simple assembly like - language, generates jit and executes it. - - * check/all.tst: New file. A generic debug and sample test file - with a directive to prevent it from being executed, and useful to - read disassembly of all possible instructions, using a fixed set - of registers. - - * include/Makefile.am, include/lightning.h, - include/lightning/Makefile.am, include/lightning/jit_arm.h, - include/lightning/jit_mips.h, include/lightning/jit_ppc.h, - include/lightning/jit_private.h, include/lightning/jit_x86.h, - lib/Makefile.am, lib/jit_disasm.c, lib/jit_print.c, - lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c, - lib/jit_x86.c, lib/lightning.c: New files. These files are - written from scratch, only by <pcpa@gnu.org>, and have now - copyright assignment to the FSF. This is the core of the new - lightning rework. Previously it was integrated in code with - a garbage collector and several custom types like vectors and - hash tables, so this first code merge with lightning converts - that code into a library extracting only the jit bits, and at - first only for x86_64 GNU/Linux. - - * lightning.h, m4/lightning.m4: Removed. These are no longer - required in the new lightning code. - - .gitignore, Makefile.am, configure.ac: Update for the new - lightning code. - -2012-12-02 Paulo Andrade <pcpa@gnu.org> - * .cvsignore: Removed for extra cleanup. - - * build-aux: Rename directory to m4. - - * m4: Renamed to "default" name and for consistency with merge - with code rework to be imported in lightning. - - * .gitignore, configure.ac, Makefile.am, doc/Makefile.am: - Update for build-aux to m4 rename. - -2012-12-01 Paulo Andrade <pcpa@gnu.org> - - * opcode/Makefile.am, opcode/Makefile.in, opcode/ansidecl.h, - opcode/bfd.h, opcode/dis-asm.h, opcode/dis-buf.c, opcode/disass.c, - opcode/i386-dis.c, opcode/i386.h, opcode/ppc-dis.c, opcode/ppc-opc.c, - opcode/ppc.h, opcode/sparc-dis.c, opcode/sparc-opc.c, opcode/sparc.h, - opcode/sysdep.h: Removed. Do not bundle GNU binutils files. - - * aclocal.m4, configure, Makefile.in, config.h.in, doc/Makefile.in, - lightning/Makefile.in, tests/Makefile.in: Removed. Do not maintain - autogenerated files that also generate too much diff noise when - regenerated in git. - - * build-aux/help2man, build-aux/texinfo.tex, build-aux/texi2dvi: - Removed. Buildenvironment must have an up to date version from - upstream installed. - - * build-aux/config.guess, build-aux/config.sub, build-aux/depcomp, - build-aux/install-sh build-aux/mdate-sh build-aux/missing: Removed. - Do not maintain a copy of automake files in git. Release tarballs - must use an up to date version. - - * lightningize.in, doc/lightningize.1: Removed. Do not encourage - bundling lightning in other packages. It should use a system package - or a proper thirdy part subdirectory. - - * INSTALL: Removed. Autoreconf removes it and creates a symlink - when regenerating files, so, avoid conflicts in git and let - automake create the symlink. - - * .gitignore: Add INSTALL and autogenerated files. - - * configure.ac, Makefile.am: Update for removal of opcode subdir, - auto generated files and lightningize. - - * tests/Makefile.am, tests/3to2.c, tests/add.c, tests/bp.c, - tests/fib.c, tests/fibdelay.c, tests/fibit.c, tests/funcfp.c, - tests/incr.c, tests/printf.c, tests/rpn.c, tests/rpnfp.c, - tests/sete.c, tests/testfp.c: Update for removal of opcode subdir. - - * doc/Makefile.am: Update for removal of lightningize. - - * configure.ac, lightning/ppc/funcs.h, lightning/sparc/funcs.h, - lightning/i386/fp.h, lightning/i386/core.h, lightning/i386/asm.h, - tests/3to2.c, tests/add.c, tests/bp.c, tests/fib.c, tests/fibdelay.c, - tests/fibit.c, tests/funcfp.c, tests/incr.c, tests/printf.c, - tests/rpn.c, tests/rpnfp.c, tests/sete.c, tests/testfp.c: - Remove LIGHTNING_CROSS, it is half supported and incomplete. - - * tests/3to2.c, tests/funcfp.c, tests/rpnfp.c: Remove preprocessor - check on JIT_FPR. If no hardware registers are available, the backend - must provide an alternative for software float. - - * lightning/ppc/core.h, lightning/sparc/core.h, tests/Makefile.am: - Remove JIT_NEED_PUSH_POP. It is absolutely not trivial to implement - properly on some backends due to stack alignment constraints, and - whenever it is required, using jit_allocai and using a properly - aligned stack vector, or a heap buffer, is better. - - * tests/push-pop.c, tests/push-pop.ok: Removed due to - JIT_NEED_PUSH_POP no longer available. - -2011-02-28 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Add jit_add{c,x}{i,r}_l, jit_mulr_{l,ul}_, - fix jit_mul{i,r}_{l,ul}. - -2010-08-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp-64.h: Return patch address from jit_bXYr_{f,d}. - Reported by Paulo César Pereira de Andrade. - * lightning/ppc/fp.h: Likewise. - * lightning/sparc/fp.h: Implement FP branches. - -2010-08-18 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp-64.h: Fix jp in jit_bner_{f,d}. - -2010-08-18 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp-32.h: Fix -D_ASM_SAFETY compilation. - Reported by Paulo César Pereira de Andrade. - -2010-08-15 Paolo Bonzini <bonzini@gnu.org> - - * tests/ldst.c: Update. - * tests/Makefile.am: Use -ffloat-store to compile it. - -2010-08-15 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h (jit_ldr_c, jit_ldxr_c, jit_ldr_s, - jit_ldxr_s): Move... - * lightning/i386/core-32.h: ... here. - * lightning/i386/core-64.h (jit_ldr_c, jit_ldxr_c, jit_ldr_s, - Use movsbq and movswq. - -2010-08-10 Paulo César Pereira de Andrade <pcpa@mandriva.com.br> - - * lightning/i386/core-32.h (jit_replace): Use MOVLrr, not MOVLir. - (jit_movbrm): Check index register as well. - * lightning/i386/fp-64.h: Add jit_extr_f_d and jit_extr_d_f. - * lightning/fp-common.h: Add jit_extr_f_d and jit_extr_d_f. - -2010-07-28 Paolo Bonzini <bonzini@gnu.org> - - * tests/Makefile.am: Add ldst test. - * tests/Makefile.in: Regenerate. - * tests/ldst.c: New. - * tests/ldst.ok: New. - -2010-07-28 Paolo Bonzini <bonzini@gnu.org> - - * THANKS: Add Paulo Cesar Pereira de Andrade. - * doc/porting.texi: Fix ordering of arguments in jit_stxi. - * lightning/i386/core-32.h (jit_replace): Remove cmp argument. - * lightning/i386/fp-64.h (jit_movi_f): Fix. - -2010-07-26 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-32.h (jit_replace): Move here (removed - 2009-03-01). - -2010-07-19 Paolo Bonzini <bonzini@gnu.org> - - * build-aux/lightning.m4: Always set and replace lightning_frag. - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * config.h.in: Regenerate. - * configure: Regenerate. - * doc/Makefile.in: Regenerate. - * doc/lightningize.1: Regenerate. - * doc/version.texi: Regenerate. - * lightning/Makefile.in: Regenerate. - * opcode/Makefile.in: Regenerate. - * tests/Makefile.in: Regenerate. - -2009-03-01 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Use Mike's macros for x86-64 too. - * lightning/i386/core.h: Remove jit_replace. - - 2009-02-27 Mike Spivey <mike@comlab.ox.ac.uk> - - * lightning/i386/core.h: Rewrite shift-handling macros. - * lightning/fp-common.h: Fix jit_extr_{f_d,d_f}. - -2009-02-17 Mike Spivey <mike@comlab.ox.ac.uk> - - * lightning/i386/core.h: Fix blunder in operand order. - -2009-02-17 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp-32.h: Another fix to jit_fp_btest. - -2009-02-17 Paolo Bonzini <bonzini@gnu.org> - - * lightning/fp-common.h: Define double branches if missing. - * lightning/i386/asm.h: Define JC and JNC mnemonics. - * lightning/i386/fp-32.h: Fix jit_fp_btest. All reported - by Mike Spivey. - -2008-10-09 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/funcs.h (jit_flush_code): Subtract 1 from end. - Reported by Eli Barzilay and Matthew Flatt. - -2008-08-23 Nix <nix@esperi.org.uk> - - * lightning/i386/Makefile.frag: fp-32.h and fp-64.h are target files. - -2008-07-02 Laurent Michel <ldm@engr.uconn.edu> - - * lightning/ppc/funcs.h (jit_flush_code): modified the computation - of start/end. The pointer arithmetic was done without casting. It - prevented compilation with recent gcc versions. - * lightning/ppc/core.h (jit_pushr_i): The offset for the store was - incorrect. Should have been 4 bytes below SP (not above). - * lightning/ppc/core.h (jit_popr_i): The offset for the load was - incorrect. Should have been 0 (not +8). - -2008-06-17 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-64.h: Forward IMULQir to IMULQirr, - fix REXQ order for IMULQirr. - -2008-06-17 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: Fix _rN vs. _rR. - -2008-06-16 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: Use jit_save in jit_replace. Move JIT_R - definition... - * lightning/i386/core-32.h: ... here; define jit_save so that - the core.h has no effect on the 32-bit backend. - * lightning/i386/core-64.h: Place JIT_R1/JIT_R2 in R10/R11, - place outgoing arguments in the right spot from the beginning, - define jit_save, fix jit_reg8/jit_reg16. - -2008-06-15 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Rewrite argument passing to - support up to 6 arguments and generate less code. - -2008-06-14 Laurent Michel <ldm@thorgal.homelinux.org> - - * lightning/i386/core-64.h (jit_movi_l): When the operand is 0, - the XOR should be on a quadword. - * lightning/i386/core-64.h (jit_prolog): Keep 16-byte stack - alignment. - (jit_ret): Always use LEAVE. - -2008-06-13 Laurent Michel <ldm@thorgal.homelinux.org> - - * lightning/i386/core-64.h: Add (void) casts for C++ compatibility. - * lightning/i386/asm.h: Likewise. - -2008-06-12 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: Move JIT_V definition... - * lightning/i386/core-32.h: ... here. - * lightning/i386/core-64.h: ... and here. Avoid dancing between - RSI/RDI and R12/R13, and place JIT_V1/JIT_V2 in R12/R13. - -2008-06-11 Paolo Bonzini <bonzini@gnu.org> - - * build-aux/lightning.m4: Adjust LIGHTNING_BACKENDS, don't - use suffix support to distinguish i386/x86_64. - * lightning/i386/Makefile.frag: Use LIGHTNING_TARGET_FILES - to distribute *-32.h and *-64.h files now. - * lightning/i386/asm-i386: Moved to... - * lightning/i386/asm.h: Include the appropriate subtarget file. - * lightning/i386/core-i386: Moved to... - * lightning/i386/core.h: Include the appropriate subtarget file. - * lightning/i386/fp.h: New, include the appropriate subtarget file. - * lightning/i386/asm-32: Do not include asm-i386.h. - * lightning/i386/asm-64.h: Likewise. - * lightning/i386/core-32: Do not include core-i386.h. - * lightning/i386/core-64.h: Likewise. - * lightning/Makefile.am: Adjust for renamed files. - - * configure.ac: Define LIGHTNING_TARGET here. - * opcode/disass.c: Change list of valid LIGHTNING_TARGET values. - - * lightningize.in: Robustify against missing subtarget files. - -2008-06-11 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-32.h: Use MOVLir instead of jit_movi_l - to implement jit_movi_p. - -2008-06-11 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-32.h: Use separate __APPLE__ and SysV - prolog/ret macros. Subtract 12 bytes in __APPLE__ case to - keep stack aligned, and always use LEAVE in the epilog. - -2008-06-11 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-i386.h: Fix C++ incompatibility. - -2008-06-10 Laurent Michel <ldm@engr.uconn.edu> - - * lightning/i386/core-i386.h: Fix jit_replace8 for - case when one of the operands is _EAX. - -2008-05-19 Paolo Bonzini <bonzini@gnu.org> - - * tests/run-test: Avoid CRLF issues on mingw. - -2008-03-21 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Fix jit_{ld,st}{,x}i_{i,l}. - Remove jit_ld{,x}i_ul. - * lightning/core-common.h: Make jit_ld{,x}{i,r}_ul - always a synonym of the _l variant. - * doc/porting.texi: Document this. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Fix uses of jit_qop_. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Add boolean operations. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-64.h: Add LEAQmr. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Misc bugfixes. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-i386.c: Remove jit_ldr_i, jit_ldxr_i. - * lightning/i386/core-32.h: Add jit_ldr_i, jit_ldxr_i. - * lightning/i386/core-64.h: Add jit_ld{r,xr,i,xi}_{ui,l,ul}; - move jit_ldr_i, jit_ldxr_i, jit_str_l, jit_stxr_l with others. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/asm-common.h: Add _s32P. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Implement long mul/div/mod. - -2008-03-19 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Cast memory address to long for JCCim. - -2008-03-15 Paolo Bonzini <bonzini@gnu.org> - - * lightning/asm-common.h: Add underscores around __unused__ - attribute. - -2008-03-15 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/core.h: Avoid some "value computed is not used" - warnings. - * lightnings/tests/allocai.c: Silence other warnings. - -2008-03-14 Paolo Bonzini <bonzini@gnu.org> - - * lightningize.in: Fix some problems (not all). - -2008-03-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-32.h: Avoid some "value computed is not used" - warnings; reported by Sam Steingold. - -2008-03-08 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-32.h: Fix stxr_c(_EAX, _EBX, _ESI). - -2008-02-13 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-32.h: Avoid redefinition of _r1, reported by - Sam Steingold. - * lightning/i386/asm-64.h: Likewise. - -2008-02-08 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Don't define _VOID, reported - by Reini Urban. - -2008-02-03 Paolo Bonzini <bonzini@gnu.org> - - * build-aux/lightning.m4: Add --with-lightning-prefix option, suggested - by Sam Steingold. - -2008-01-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-64.h: Use CALLsr, not CALLLsr. - -2008-01-13 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-i386.h: Move jit_calli and jit_callr... - * lightning/i386/core-32.h: ... here. - * lightning/i386/core-64.h: Redefine them. - -2008-01-05 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp-32.h: Fix sub(a,0,a). - * lightning/tests/3to2.c: Add new testcases. - * lightning/tests/3to2.ok: Add new testcases. - -2008-01-02 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp-32.h: Fix sub(a,b,a) with a ~= JIT_FPR0. - * lightning/tests/3to2.c: New. - * lightning/tests/3to2.ok: New. - -2007-11-07 Paolo Bonzini <bonzini@gnu.org> - - * opcode/Makefile.am: Fix AM_CPPFLAGS. - -2007-08-12 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-i386.h: Improve encoding of set* instructions. - * lightning/i386/core-64.h: Fix jit_bra_l. - * tests/sete.c: New. - * tests/sete.ok: New. - -2007-06-29 Paolo Bonzini <bonzini@gnu.org> - - * tests/bp.c: Upgrade to GPL/LGPLv3. - * lightning/i386/asm-32.h: Upgrade to GPL/LGPLv3. - * lightning/i386/asm-64.h: Upgrade to GPL/LGPLv3. - * lightning/i386/core-32.h: Upgrade to GPL/LGPLv3. - * lightning/i386/core-64.h: Upgrade to GPL/LGPLv3. - * lightning/i386/fp-64.h: Upgrade to GPL/LGPLv3. - * lightning/sparc/asm.h: Upgrade to GPL/LGPLv3. - * lightning/sparc/core.h: Upgrade to GPL/LGPLv3. - * lightning/sparc/fp.h: Upgrade to GPL/LGPLv3. - * lightning/sparc/funcs.h: Upgrade to GPL/LGPLv3. - * lightning/i386/asm-i386.h: Upgrade to GPL/LGPLv3. - * lightning/i386/core-i386.h: Upgrade to GPL/LGPLv3. - * lightning/i386/fp-32.h: Upgrade to GPL/LGPLv3. - * lightning/i386/funcs.h: Upgrade to GPL/LGPLv3. - * lightning/ppc/asm.h: Upgrade to GPL/LGPLv3. - * lightning/ppc/core.h: Upgrade to GPL/LGPLv3. - * lightning/ppc/fp.h: Upgrade to GPL/LGPLv3. - * lightning/ppc/funcs.h: Upgrade to GPL/LGPLv3. - * lightning.h: Upgrade to GPL/LGPLv3. - * tests/add.c: Upgrade to GPL/LGPLv3. - * tests/fib.c: Upgrade to GPL/LGPLv3. - * tests/testfp.c: Upgrade to GPL/LGPLv3. - * tests/fibdelay.c: Upgrade to GPL/LGPLv3. - * tests/fibit.c: Upgrade to GPL/LGPLv3. - * tests/funcfp.c: Upgrade to GPL/LGPLv3. - * tests/incr.c: Upgrade to GPL/LGPLv3. - * tests/printf.c: Upgrade to GPL/LGPLv3. - * tests/printf2.c: Upgrade to GPL/LGPLv3. - * tests/rpn.c: Upgrade to GPL/LGPLv3. - * tests/rpnfp.c: Upgrade to GPL/LGPLv3. - * lightning/asm-common.h: Upgrade to GPL/LGPLv3. - * lightning/core-common.h: Upgrade to GPL/LGPLv3. - * lightning/fp-common.h: Upgrade to GPL/LGPLv3. - * lightning/funcs-common.h: Upgrade to GPL/LGPLv3. - * opcode/dis-buf.c: Upgrade to GPL/LGPLv3. - * opcode/disass.c: Upgrade to GPL/LGPLv3. - * opcode/i386-dis.c: Upgrade to GPL/LGPLv3. - * opcode/sparc-dis.c: Upgrade to GPL/LGPLv3. - * opcode/sparc-opc.c: Upgrade to GPL/LGPLv3. - * lightningize.in: Upgrade to GPL/LGPLv3. - * opcode/bfd.h: Upgrade to GPL/LGPLv3. - * opcode/i386.h: Upgrade to GPL/LGPLv3. - * opcode/sparc.h: Upgrade to GPL/LGPLv3. - -2007-01-26 Thomas Girard <thomas.g.girard@free.fr> - - * lightning/Makefile.am: Add clean-local target. - -2006-12-02 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Add CVTTS?2SIL. - * lightning/i386/asm-64.h: Add CVTTS?2SIQ. - * lightning/i386/fp-64.h: Use it. - - * lightning/Makefile.am: Place files in nodist_lightning_HEADERS. - -2006-11-23 Paolo Bonzini <bonzini@gnu.org> - - * lightning/core-common.h: Add casts in "*i_p" variants. - * lightning/i386/asm-32.h: Add _r1. - * lightning/i386/asm-64.h: Likewise, and add SSE instructions. - * lightning/i386/asm-i386.h: Merge SSE instructions from Gwenole. - Use short form for 16-bit AX instructions. Remove _r1 - * lightning/i386/core-64.h: Add FP ABI support in its infancy. - * lightning/i386/core-i386.h: Move jit_arg_f and jit_arg_d... - * lightning/i386/core-32.h: ... and jit_prepare_f and jit_prepare_d... - * lightning/i386/fp-32.h: ... here. - * lightning/i386/fp-64.h: Write the code. - * lightning/sparc/fp.h: Fix jit_extr_{f_d,d_f} register order. - -2006-11-22 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Move x86-64 instructions... - * lightning/i386/asm-64.h: ... here. - * lightning/i386/fp-32.h: Fix bugfixes worked around in froofyJIT. - Add JIT_FPRET. - * lightning/sparc/fp.h: Likewise. - * lightning/ppc/fp.h: Likewise. - * lightning/fp-common.h: Adjust for JIT_FPRET. - * tests/funcfp.c: Adjust for JIT_FPRET. - * tests/rpnfp.c: Adjust for JIT_FPRET. - -2006-11-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Add an underscore to macros without - a parameter. - -2006-11-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core-i386.h: Move jit_movip, jit_check8, jit_reg8, - jit_reg16, jit_movbrm... - * lightning/i386/core-32.h: ... here. - * lightning/i386/core-64.h: Redefine them. Fix other bugs. - - * tests/printf.c: Do not do a varargs call. - -2006-11-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Check in rewrite from Basilisk II. - * lightning/i386/asm-32.h: Adjust. - * lightning/i386/asm-64.h: Adjust. - * lightning/i386/fp-32.h: Adjust. - - * lightning/i386/core-32.h: Adjust. Add jit_{ld,ldx,st,stx}i*. - * lightning/i386/core-64.h: Adjust. Add jit_{ld,ldx,st,stx}i*. - * lightning/i386/core-i386.h: Adjust. Remove these patterns. - -2006-11-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm-i386.h: Merge 64-bit cleanliness changes from - mzscheme. - Add SSE. - * lightning/i386/asm-64.h: Likewise. - -2006-11-20 Paolo Bonzini <bonzini@gnu.org> - Ludovic Courtes <ludo@chbouib.org> - - * lightning/i386/core-32.h: Disable jit_push and jit_pop if stack not - needed. - * lightning/i386/core-64.h: Disable jit_push and jit_pop if stack not - needed. - * lightning/sparc/core.h: Merge final implementation of jit_pushr and - jit_popr. - * lightning/ppc/core.h: Fix implementation of jit_pushr and jit_popr to - work (more or less) across function calls. - - * tests/push-pop.c, tests/push-pop.ok: New test. - * tests/Makefile.am: Run it. - -2006-11-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/asm-common.h: Make 64-bit safe. - * lightning/i386/funcs.h: Make 64-bit safe. - - * lightning/i386/asm-64.h: More merge from mzscheme. - * lightning/i386/asm-i386.h: More merge from mzscheme. - * lightning/i386/core-32.h: More merge from mzscheme. - * lightning/i386/core-64.h: More merge from mzscheme. - * lightning/i386/core-i386.h: More merge from mzscheme. - - * tests/rpnfp.c, tests/testfp.c, tests/funcfp.c: Skip if no - floating-point support. - -2006-11-04 Paolo Bonzini <bonzini@gnu.org> - - * tests/rpn.c: Remove pushr/popr. - -2006-11-04 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/core.h: Implement jit_allocai, define JIT_FP to be R1. - * lightning/ppc/funcs.h: Store frame size into _jitl. Store R1 before - the STMW, so that the offset is unchanged when we patch the STMW. - * lightning/i386/core.h: Define JIT_FP to be EBP. - * lightning/i386/core-32.h: Implement jit_allocai, put LEAVE in the - epilog if jit_allocai was used. - * lightning/i386/core-64.h: Implement jit_allocai, put LEAVE in the - epilog if jit_allocai was used. - -2006-11-04 Ludovic Courtes <ludo@chbouib.org> - - * lightning/sparc/core.h: Implement jit_allocai. - * tests/allocai.c: New. - * tests/Makefile.am: Point to new tests. - -2006-11-03 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/core.h: Fix jit_bms using BNE rather than BGT. - "AND." does signed comparisons. - -2006-10-31 Paolo Bonzini <bonzini@gnu.org> - - * doc/porting.texi: Rename JIT_FP to JIT_AP. - * lightning/core-common.h: Likewise. - * lightning/i386/core-i386.h: Likewise. - * lightning/fp-common.h: Provide default versions of jit_getarg_[fd]. - * lightning/i386/fp-32.h: Don't provide jit_getarg_[fd]. - * lightning/ppc/fp.h: Likewise. - -2006-10-31 Ludovic Courtes <ludo@chbouib.org> - - * doc/using.texi (The instruction set): Clarified the use of `JIT_RET' and - documented `jit_retval'. - * tests/ret.c (generate_function_proxy): After `jit_finish', use - `jit_retval_i' to move FUNC's return value into the correct register. - -2006-10-31 Paolo Bonzini <bonzini@gnu.org> - Ludovic Courtes <ludo@chbouib.org> - - * tests/divi.c, tests/divi.ok, tests/movi.c, tests/movi.ok: New. - * tests/ldxi.c: Ensure large pointer is generated. - * tests/Makefile.am: Point to new tests. - * lightning.h: Include funcs-common.h before funcs.h. - * lightning/sparc/core.h: Fix bugs in modi/divi. - -2006-10-30 Paolo Bonzini <bonzini@gnu.org> - - * lightning/Makefile.am: Use "ln -sf". - * lightning/core-common.h: Define jit_negr_l if necessary. - -2006-10-30 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm.h (MOVS*, MOVZ*): Use correct _r[124] macros. - -2006-10-29 Paolo Bonzini <bonzini@gnu.org> - - * configure.ac: Use lightning.m4 macros. - * lightning.m4: Refactor to use common code in configure.ac. Move... - * build-aux/lightning.m4: ... here. - * lightningize.in: Support suffixes. - * opcode/disass.in: Adapt to changes in configure.ac. - - * lightning/ppc/funcs.h: Use __APPLE__ instead of _CALL_DARWIN. - * lightning/i386/core-32.h: Likewise. - -2006-10-26 Paolo Bonzini <bonzini@gnu.org> - - * configure.ac: Fix compilation test. - * lightning/Makefile.am: Symlink LIGHTNING_TARGET_FILES in - non-distribution mode. - * lightning/i386/Makefile.frag: Use LIGHTNING_TARGET_FILES. - -2006-10-26 Paolo Bonzini <bonzini@gnu.org> - - * configure.ac: Subst cpu. - * lightning/core-common.h: Make tests pass on i386. - * lightning/i386/asm-32.h: Make tests pass on i386. - * lightning/i386/asm-64.h: Make tests pass on i386. - * lightning/i386/asm-i386.h: Make tests pass on i386. - * lightning/i386/core-32.h: Make tests pass on i386. - * lightning/i386/core-64.h: Make tests pass on i386. - * lightning/i386/core-i386.h: Make tests pass on i386. - * tests/Makefile.am: Include files from cpu directory. - -2006-10-26 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm.h: Move to asm-i386.h - * lightning/i386/asm-32.h: New, from Matthew Flatt. - * lightning/i386/asm-64.h: New, from Matthew Flatt. - * lightning/i386/core.h: Move to core-i386.h - * lightning/i386/core-32.h: New, from Matthew Flatt. - * lightning/i386/core-64.h: New, from Matthew Flatt. - * lightning/i386/fp.h: Move to fp-32.h - * lightning/i386/fp-64.h: New, dummy. - * lightning/i386/Makefile.frag: New. - * lightning/Makefile.am: Support per-target Makefile fragments. - * configure.ac: Support per-target Makefile fragments and CPU suffixes. - -2006-10-16 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/i386.h (jit_flush_code): Fix syntax error. :-( - -2006-07-06 Paolo Bonzini <bonzini@gnu.org> - Ludovic Courtes <ludovic.courtes@laas.fr> - - * doc/using.texi: Clarify "Using autoconf" section - and rename it to "Bundling lightning" - * lightning.m4: Work also if lightning is not bundled. - -2006-07-06 Paolo Bonzini <bonzini@gnu.org> - Ludovic Courtes <ludovic.courtes@laas.fr> - - * lightning/ppc/core.h (_jit_mod): Replace with... - (_jit_mod_big, _jit_mod_small): ... these. - (jit_modi_i, jit_modi_ui): Rewrite. - * tests/modi.c, tests/modi.ok: New tests. - -2006-05-18 Matthew Flatt <mflatt@cs.utah.edu> - - * lightning/i386/asm.h: Fix test for extending the mprotect area - towards lower addresses. - -2006-05-16 Bruno Haible <bruno@clisp.org> - - * lightning/asm-common.h: Don't use __func__ nor __FUNCTION__ if - not compiling with GNU C. - -2006-02-16 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/core.h: Fix jit_ldxi_* with big displacement. - -2006-01-23 Paolo Bonzini <bonzini@gnu.org> - - * configure.ac: Fix comments in config.h.in. - -2005-11-25 Paolo Bonzini <bonzini@gnu.org> - - * lightning/sparc/fp.h: Fix header comment. - * lightning/ppc/fp.h: Fix header comment. - -2005-04-27 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/asm.h (JCm, JCSm, JNCm, JNCSm): New. - -2004-11-26 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/funcs.h (_jit_epilog): Remove unused variable. - -2004-11-13 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/funcs.h [__linux__]: Include sys/mman.h. - -2004-11-09 Paolo Bonzini <bonzini@gnu.org> - - * lightning/sparc/fp.h: Fix fp-to-integer conversions. - * lightning/ppc/testfp.c: Test fp-to-integer conversions - of integer numbers. - * lightning/ppc/testfp.ok: Adjust for the above. - -2004-11-08 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/testfp.c: Always flush code before - testing it. - -2004-11-08 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/fp.h: Do not clobber f31. - -2004-11-08 Paolo Bonzini <bonzini@gnu.org> - - * lightning.h: New name of... - * lightning-inst.h: ... this file. - * lightning.h.in: Removed. - - * opcodes/disass.c: Include config.h. - * tests/add.c: Include config.h. - * tests/bp.c: Include config.h. - * tests/fib.c: Include config.h. - * tests/fibdelay.c: Include config.h. - * tests/fibit.c: Include config.h. - * tests/funcfp.c: Include config.h. - * tests/incr.c: Include config.h. - * tests/printf.c: Include config.h. - * tests/printf2.c: Include config.h. - * tests/rpn.c: Include config.h. - * tests/rpnfp.c: Include config.h. - * tests/testfp.c: Include config.h. - -2004-10-12 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp.h: Fix bugs in conditional branches. - -2004-10-10 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/funcs.h: Fix pasto in jit_flush_code. - -2004-10-08 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/fp.h: Optimized conditional branches. - -2004-09-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/asm.h: Fix more typos. - -2004-09-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/asm.h: Fix typos, replace `26' with JIT_AUX. - -2004-09-20 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/fp.h: Added conditional branches. - -2004-09-18 Laurent Michel <ldm@thorgal.homelinux.org> - - * lightning/ppc/fp.h (jit_unler_d, jit_unltr_d, jit_unger_d, - jit_ungtr_d, jit_ltgt_d, jit_uneq_d): Implemented missing tests - to fully support testfp. - (jit_floorr_d_i, jit_ceilr_d_i, jit_roundr_d_i, jit_truncr_d_i): - New macros. - * lightning/ppc/asm.h: Added missing opcodes FCTIWZ and MTFSFI. - * lightning/ppc/funcs.h (_jit_prolog): Fixed minor mistake in - the initialization of _jitl.nextarg_geti, relying on the - JIT_AUX macro as well to get the register offset. - -2004-09-07 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/funcs.h: Fix typo. - -2004-09-06 Paolo Bonzini <bonzini@gnu.org> - - * tests/funcfp.c: Use %g. Remove C99 variable declarations. - * tests/testfp.c: Don't use __builtin_nan. - - * lightning/ppc/core.h: Add three V registers. - * lightning/ppc/funcs.h: Adjust. - - * lightning/sparc/core.h: Some fixes related to FP argument passing. - Move R0 to %g2, use %o7 for JIT_BIG2. - * lightning/sparc/fp.h: Some fixes related to FP argument passing. - -2004-09-02 Paolo Bonzini <bonzini@gnu.org> - - * lightning/sparc/core.h: Add another V register, - move R0 to %o7. - -2004-07-15 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/funcs.h: Implement jit_flush_code, - in order to support Fedora's exec-shield. - -2004-07-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/core-common.h: Add more jit_extr_*_* macros. - * lightning/doc/using.texi: Be clearer about the order - of arguments in jit_extr_*_*. - * lightning/doc/porting.texi: Add more jit_extr_*_* macros. - * lightning/i386/fp.h: Fix typo in jit_extr_i_d. - -2004-07-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/funcs.h: Adjust offset of LR into - stack frame if running under the Darwin ABI. - -2004-07-13 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp.h: Rename jit_exti_d to jit_extr_i_d. - -2004-07-13 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/core.h: Fix thinko. - - * lightning/i386/core.h: Fix jit_lti_ui. - * lightning/core-common.h: Add missing macros. - - * lightning/ppc/fp.h: Rename jit_neg_* to jit_negr_*. - * lightning/i386/fp.h: Rename jit_neg_* to jit_negr_*. - * lightning/sparc/fp.h: Rename jit_neg_* to jit_negr_*. - * lightning/fp-common.h: Rename jit_neg_* to jit_negr_*. - * doc/porting.texi: Add undocumented macros. - -2004-07-12 Paolo Bonzini <bonzini@gnu.org> - - * doc/porting.texi: Add missing macros. - -2004-07-12 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/funcs.h: Don't generate trampolines. - Separate prolog and epilog generation. - * lightning/ppc/core.h: Generate epilog explicitly. - Don't reserve r31 anymore. - * lightning/core-common.h: Remove call to jit_setup_code. - -2004-07-09 Paolo Bonzini <bonzini@gnu.org> - - * lightning/lightning.h.in: Avoid preprocessor warnings. - * lightning/lightning-inst.h: Likewise. - - * lightning/i386/core.h: Define JIT_R, JIT_R_NUM, JIT_V, - JIT_V_NUM. - * lightning/ppc/core.h: Likewise. - * lightning/sparc/core.h: Likewise. - * lightning/i386/fp.h: Define JIT_FPR, JIT_FPR_NUM. - * lightning/ppc/fp.h: Likewise. - * lightning/sparc/fp.h: Likewise. - * lightning/core-common.h: Define fixed register names. - * lightning/fp-common.h: Likewise for FP regs. - -2004-07-09 Paolo Bonzini <bonzini@gnu.org> - - * lightning/ppc/funcs.h: Fix location where return address - is stored. - * lightning/i386/asm.h: Add a trailing _ to opcodes without - any parameter. - * lightning/i386/core.h: Adjust for the above. - -2004-04-15 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/fp.h: Change "and" to "_and" - to satisfy C++ compilers. - -2004-04-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/sparc/fp.h: Use memcpy to implement jit_movi. - * lightning/ppc/fp.h: Use memcpy to implement jit_movi. - Move floating-point opcodes... - * lightning/ppc/asm.h: ... here. - -2004-04-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/core-common.h: Add jit_finishr. - * lightning/ppc/core.h: Add jit_callr and jit_finishr. - * lightning/i386/core.h: Add jit_callr. - * lightning/sparc/core.h: Add jit_callr. Fix typo. - -2004-04-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: Fix pasto in jit_b*_ui. - -2004-03-30 Laurent Michel - - * lightning/ppc: Implement PowerPC floating point - (ChangeLog entry missing). - -2004-03-12 Paolo Bonzini <bonzini@gnu.org> - - * lightning/fp-common.h: Load/store macros are not the - same for floats and doubles anywhere, but jit_retval may be. - * lightning/i386/asm.h: Fix = mistaken for == in ESCrri. - * lightning/i386/core.h: Fix typo in jit_prepare_[fd]. - * lightning/i386/fp.h: Rewritten. - * tests/testfp.c: Add tests for unordered comparisons. - * tests/testfp.ok: Add results. - -2004-03-15 Paolo Bonzini <bonzini@gnu.org> - - Merge changes from Laurent Michel. - - * lightning/asm-common.h: Add _jit_I_noinc. - * lightning/core-common.h: Support jit_init, - jit_setup_code, jit_patch_at. Return patchable IP from - jit_movi_p. - * lightning/funcs-common.h: Provide defaults - for jit_setup_code, jit_start_pfx, jit_end_pfx - * lightning/i386/core.h: Add jit_patch_at, jit_patch_movi. - * lightning/ppc/core.h: Likewise. - * lightning/sparc/core.h: Likewise. - * lightning/ppc/asm.h: Fix generation of branch destination - displacements in _FB and _BB - * lightning/ppc/core.h: Generate trampolines in the user - area. - * lightning/ppc/funcs.h: Add a few casts. - * tests/bc.c: New testcase. - - * lightning/i386/asm.h: Wrap into #ifndef LIGHTNING_DEBUG. - * lightning/ppc/asm.h: Wrap into #ifndef LIGHTNING_DEBUG. - * lightning/sparc/asm.h: Wrap into #ifndef LIGHTNING_DEBUG. - - -2004-03-09 Paolo Bonzini <bonzini@gnu.org> - - * lightning/sparc/fp.h: Rewrite. Move macros for - FP code generation... - * lightning/sparc/asm.h: ... here. - * lightning/sparc/core.h: Rename jit_prepare to - jit_prepare_i, jit_retval to jit_retval_i. - * lightning/ppc/core.h: Rename jit_prepare to - jit_prepare_i, jit_retval to jit_retval_i. - * lightning/i386/core.h: Rename jit_prepare to - jit_prepare_i, jit_retval to jit_retval_i. - * lightning/core-common.h: Provide backwards - compatible synonyms for the above. - * lightning/fp-common.h: Rewrite. - * lightning-inst.h: Include fp unconditionally. - * lightning.h.in: Include fp unconditionally. - * tests/Makefile.am: Enable fp tests. - * tests/fib.c: Use jit_retval_i. - * tests/fibit.c: Cast codeBuffer to char *. - * tests/funcfp.c: Use new fp macros. - * tests/printf.c: Use jit_retval_i. - * tests/rpnfp.c: Use new fp macros. - * tests/testfp.c: Use new fp macros. - -2004-03-02 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: generate correct code when - doing lt/le/ge/etc. on ESI and EDI. Use MOVZX/MOVSX - where possible. - * lightning/i386/asm.h: Add macros for MOVZX/MOVSX. - Move macros for x87 here, and add many of them. - * lightning/i386/fp.h: Use new macros for x87. - -2004-02-06 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: avoid generating MOV reg, reg. - * lightning/sparc/core.h: fix several bugs. - * lightning/ppc/core.h: fix several bugs. - * tests/rpn.c: rewritten. - -2004-01-08 Paolo Bonzini <bonzini@gnu.org> - - * tests/rpnfp.c: new example, suggested by Basile - Starynkevitch. - * tests/rpnfp.ok: new example. - -2003-12-12 Paolo Bonzini <bonzini@gnu.org> - - * tests/add.c: new test, suggested by Steve Dekorte. - * tests/add.c: new test. - -2003-11-14 Paolo Bonzini <bonzini@gnu.org> - John Redford <eirenik@hotmail.com> - - * lightning/asm-common.h: change the 'pc' field of _jit to - be a union of various data types, because ISO C99 doesn't - permit using ++ on a = cast. Change the incremented casts of - _jit.pc to be _jit.x.uc_pc, _jit.x.us_pc, etc. - * all files: change all non-cast instances of _jit.pc to be - _jit.x.pc. - * lightning/i386/core.h: remove casts from jit_might. - -2003-05-25 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: use JITSORRY in jit_replace - * lightning/asm-common.h: define JITSORRY - -2003-05-14 Paolo Bonzini <bonzini@gnu.org> - - * lightning/i386/core.h: fix missing comma in several - load/store macros. - * lightning/core-common.h: fix long/unsigned long/pointer - jit_pushr/jit_popr. - * lightning/ppc/funcs.h: correctly align stack pointer - -No changelogs for the assemblers (lightning directory) until 1.0 - -2003-03-27 Paolo Bonzini <bonzini@gnu.org> - - * tests/printf2.c: new test - -2001-05-03 Paolo Bonzini <bonzini@gnu.org> - - * tests/printf.c: made the message platform independent - -2001-01-19 Paolo Bonzini <bonzini@gnu.org> - - * configure.in: support cross-assembling - - * disass/bfd.h, disass/dis-asm.h, disass/dis-buf.c, - disass/i386-dis.c, disass/i386.h, disass/ppc-dis.c, - disass/ppc.h, disass/ppc-opc.c, disass/sparc-dis.c, - disass/sparc.h, disass/sparc-opc.c: new files, from GDB - - * disass/disass.c, disass/Makefile.am: new files - - * tests/fib.c, tests/fibit.c, tests/incr.c, tests/printf.c, - tests/rpn.c, tests/testfp.c, tests/Makefile.am: support - disassembling +Change logs from upstream GNU Lightning are still available in +ChangeLog.lightning. diff --git a/libguile/lightning/ChangeLog.lightning b/libguile/lightning/ChangeLog.lightning new file mode 100644 index 000000000..19b3335f5 --- /dev/null +++ b/libguile/lightning/ChangeLog.lightning @@ -0,0 +1,4018 @@ +2018-04-20 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h: Add new register classes to + flag float registers and double only registers, required for sparc64 + where only low 32 bit fpr registers can be used for single precision + operations. + Add new 128 bit jit_regset_t type for sparc64 register set. + + * include/lightning/jit_sparc.h, lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c, + lib/jit_sparc-sz.c, lib/jit_sparc.c: Update for 64 bits sparc. + + * lib/lightning.c: Update for new jit_regset_t required for sparc64. + +2018-02-26 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c, include/lightning.h: Add the new jit_va_push + interface. That should be called when passing a va_list to a C + function. This is required because on Alpha a va_list is passed + by value, and lightning does not know about data types, so, cannot + understand it is pushing a va_list as argument. + + * lib/jit_names.c, lib/lightning.c: Minor changes for the new + jit_code_va_push. + + * check/cva_list.c: Update only test case using jit_va_push, to + pass a va_list to a C function. + + doc/body.texi: Better documentation of the varargs interface. + + * jit_alpha.c, jit_alpha-cpu.c: Update to properly push a + C va_list and correctly calculate varargs offset. + + * lib/jit_aarch64-sz.c, lib/jit_aarch64.c, lib/jit_alpha-sz.c, + lib/jit_arm-sz.c, lib/jit_arm.c, lib/jit_hppa-sz.c, lib/jit_hppa.c, + lib/jit_ia64-sz.c, lib/jit_ia64.c, lib/jit_mips-sz.c, lib/jit_mips.c, + lib/jit_ppc-sz.c, lib/jit_ppc.c, lib/jit_s390-sz.c, lib/jit_s390.c, + lib/jit_sparc-sz.c, lib/jit_sparc.c, lib/jit_x86-sz.c, lib/jit_x86.c: + Update for the new jit_va_push interface. + +2018-02-22 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_alpha-cpu.c: Always set t12 to the address of the + current function, to properly work on all systems. Previously + the shortcut did only work on Tru64. For Linux and glibc the + change is required. + +2018-02-22 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, + lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c: + Correct wrong logic in usage of jit_live in jit_retr. The + problem is that if a temporary is required during epilog, + the return register might be allocated, so, jit_live must always + be used. + +2018-01-31 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Avoid deep recursions when computing live + register ranges. + +2018-01-31 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-cpu.c: Correct frame size and varargs + initialization for the n32 abi. + * lib/jit_mips.c, lib/jit_mips-fpu.c: Correct 32 bit abis + in big-endian. + +2017-09-13 Paulo Andrade <pcpa@gnu.org> + + * configure.ac: Add check for binutils 2.29 prototype to the + disassembler function. + * lib/jit_disasm.c: Adapt for binutils 2.29 change. + +2017-06-09 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/lightning.c: Add a + second pass from start when computing register live ranges. + This should be used temporarily, and is required for certain + loop constructs, with several consecutive blocks not referencing + a live register. + +2016-05-05 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Correct wrong movr simplification, + remove no longer needed code to set return registers live + and update live register set when reaching a label boundary, + but do not descend if the block has been already visited. + The later need some tuning for complex code generation, where + it will still have issues. + +2015-11-30 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Change documentation to no longer say + it is a variant of the Fibonacci sequence, and document + a proper implementation. + Thanks to Jon Arintok for pointing out that the Fibonacci + sequence generation was incorrect. It was documented, but + still confusing. + + * check/fib.tst, check/fib.ok, check/bp.tst, check/bp.ok, + doc/ifib.c, doc/rbif.c: Implement a proper Fibonacci + sequence implementation. + +2015-07-03 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-cpu.c: Correct definition of htonr_ul. + Correct prolog/epilog/va* routines to work on o64 abi. + + * lib/jit_mips-fpu.c: Correct load of double literal + argument when not using a data buffer. + Remove alignment correction in vaarg_d if using the + new mips abi. + + * lib/jit_mips.c: Correct code to allow creating variadic + jit functions when using the new mips abi. + + * lib/jit_rewind.c: Minor adjust for rewind when using + the new mips abi, if there are varargs arguments in + registers. + +2015-06-06 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c: Search backward for the last output + register used, otherwise would stop too early if a float + argument used the slot. + Correct offset of first va_list argument, and use proper + va_list abi. + + * lib/jit_ia64-fpu.c: Add new functions to move a gpr + to a fpr register, to counterpart the ones that move a + fpr to a gpr. These are required to properly implement + jit_getarg*_{f,d} on complex prototypes, or variadic + jit functions. + + * lib/jit_ia64-sz.c: Update for support to jit variadic + functions. + + * lib/jit_ia64.c: Implement proper abi for variadic + jit functions. + +2015-06-04 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_rewind.c: New file implementing generic functions + to "rewind", or rewrite IR code sequences. + + * include/lightning.h: Add several new codes, that previously + were a function call, that would synthesize the operation. + Now, there is a code for the operation, and a new flag to + know an operation is synthesized. + + * include/lightning/jit_private.h: Add several new macros to + help construct synthesized IR code sequences. + + * lib/Makefile.am: Update for lib/jit_rewind.c. + + * lib/jit_disasm.c: Update for a small rework on jit_node_t, + so that --enable-devel-disassembler does not need a change + in the layout of jit_node_t. + + * lib/jit_names.c: Update for the new codes. + + * lib/jit_print.c: Update to print more readable output, and + flag synthesized IR code sequences. + + * lib/jit_aarch64-sz.c, lib/jit_aarch64.c, + lib/jit_arm-sz.c, lib/jit_arm.c, lib/jit_x86-sz.c, + lib/jit_x86.c: Update for new synthesized IR code sequences. + + * lib/jit_ppc-cpu.c, lib/jit_ppc-fpu., lib/jit_ppc-sz.c, + lib/jit_ppc.c, lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, + lib/jit_mips-sz.c, lib/jit_mips.c, lib/jit_s390-fpu.c, + lib/jit_s390-sz.c, lib/jit_s390.c: Update for new synthesized + IR code sequences and correct bugs in the initial varargs + implementation support. + + * lib/jit_alpha-sz.c, lib/jit_alpha.c, lib/jit_hppa-sz.c, + lib/jit_hppa.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, + lib/jit_sparc-sz.c, lib/jit_sparc.c: Add generic, untested + support for the new synthesized IR code sequences. Known + most likely broken right now, and should be corrected once + access to these hosts is available. + + * lib/lightning.c: Update for new IR codes, and add support + for not yet existing instructions that change third argument. + + * size.c: Change to use different tables for LE and BE PowerPC. + Correct a wrong endif for x32. + +2015-05-25 Paulo Andrade <pcpa@gnu.org> + + * check/cva_list.c: New file implementing a test to ensure + the value returned by jit_va_start is a valid C va_list. + + * check/va_list.ok: New simple helper file, as now the + va_list.tst test is enabled. + + * check/va_list.tst: Rewritten for an extensive variadic + jit functions test. + + * check/Makefile.am: Update for the new tests. + + * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, lib/jit_arm-vfp.c, + lib/jit_arm.c: Correct broken software float in a previous + commit. Note that the hard float abi implementation is known + broken at this time, for special cases involving variadic + functions, and should be corrected next. + + lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c: Correct + the jit_va_list_t semantics to match C va_list. + +2015-05-24 Paulo Andrade <pcpa@gnu.org> + + * lib/Makefile.am: Bump library major. This is a preparation + for a rework that was due for quite some time, but that is + now required to properly implement variadic jit functions. + The rework is mainly required to know at prolog parsing, if + a function is variadic or not. This will benefit a few + backends, and is mandatory for the hard float arm abi. + The rework was already planned for quite some time, to + be able to use a variable stack framesize, and for leaf + functions optimization where applicable. + The change will be source compatible, but will change + some internals, and jit_code_t values, as some new will + be added. + The only behavior change is that, jit_arg_register_p may + change return value on hard float arm abi, if called before + or after jit_ellipsis. Common sense anyway, would say to + make that call after jit_ellipsis, but documentation + should be updated for it. + +2015-05-24 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: Correct base + aarch64 varargs code. + +2015-05-24 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Clearly run check if clang is the system + compiler. + +2015-05-20 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c, lib/jit_sparc.c: + Add base support to jit vararg functions to the sparc backend. + +2015-05-20 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_alpha-cpu.c, lib/jit_alpha-fpu.c, lib/jit_alpha.c: + Add base support to jit vararg functions to the alpha backend. + +2015-05-19 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, lib/jit_hppa.c: + Add base support to jit vararg functions to the hppa backend. + +2015-05-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, lib/jit_ia64.c: + Add base support to jit vararg functions to the ia64 backend. + +2015-05-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-fpu.c, lib/jit_ia64.c: Correct movi_d_w + and movi_f_w implementation to work when not using a + data buffer. This causes the check varargs.tst to + work when passing "-d" to the lightning test tool. + +2015-05-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64.c: Implement inline assembly cache flush, + required on multiprocessor systems. + +2015-05-06 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips.c: + Add base support to jit vararg functions to the mips backend. + Currently only supported on the o32 abi, until access to a + n32 system is arranged. + +2015-05-05 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_ppc.c: + Add base support to jit vararg functions to the PowerPC backend. + +2015-05-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_s390-cpu.c, lib/jit_s390-fpu.c, lib/jit_s390.c: + Add base support to jit vararg functions to the s390 backend. + +2015-05-01 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, lib/jit_arm-vfp.c, + lib/jit_arm.c: Add base support to jit vararg + functions to the arm backend. + +2015-04-30 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, + lib/jit_aarch64.c: Add base support to jit vararg + functions to the aarch64 backend. + +2015-04-27 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/jit_names.c, lib/lightning.c: Add initial support + for the new jit_va_start, jit_va_arg, jit_va_arg_d, and + jit_va_end interfaces. The jit_va_start call is supposed + to return a va_list compatible pointer, but not yet + decided if it will be "declared" stdarg compatible, + as for now only x86 support has been added (and should + be compatible), but issues may arise on other backends. + + * check/lightning.c: Add wrappers to call the new jit_va_* + interfaces. + + * lib/jit_x86-cpu.c, lib/jit_x86.c: Implement the new + jit_va_* for x86. + + * lib/jit_x86-sz.c: Add fields, but not yet fully updated, + as this is an intermediate commit. + + * lib/jit_aarch64-sz.c, lib/jit_aarch64.c, + lib/jit_alpha-sz.c, lib/jit_alpha.c, + lib/jit_arm-sz.c, lib/jit_arm.c, + lib/jit_hppa-sz.c, lib/jit_hppa.c, + lib/jit_ia64-sz.c, lib/jit_ia64.c, + lib/jit_mips-sz.c, lib/jit_mips.c, + lib/jit_ppc-sz.c, lib/jit_ppc.c, + lib/jit_s390-sz.c, lib/jit_s390.c, + lib/jit_sparc-sz.c, lib/jit_sparc.c: Prepare for the + new jit_va_* interfaces. Not yet implemented, and will + cause an assertion if used. + + * check/va_list.tst: Simple early test case, that works + on x86_64, x32, ix86, cygwin, and cygwin64. + +2015-02-17 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/jit_aarch64-cpu.c, lib/jit_aarch64.c, + lib/jit_alpha-cpu.c, lib/jit_alpha.c, + lib/jit_arm-cpu.c, lib/jit_arm.c, + lib/jit_hppa-cpu.c, lib/jit_hppa.c, + lib/jit_ia64-cpu.c, lib/jit_ia64.c, + lib/jit_mips-cpu.c, lib/jit_mips.c, + lib/jit_ppc-cpu.c, lib/jit_ppc.c, + lib/jit_s390-cpu.c, lib/jit_s390.c, + lib/jit_sparc-cpu.c, lib/jit_sparc.c, + lib/jit_x86-cpu.c, lib/jit_x86.c: Implement the new + jit_allocar(offs, size) interface, that receives + two integer registers arguments, allocates space + dynamically in the stack, returns the offset in + the first argument, and uses the second argument + for the size in bytes of the memory to be allocated. + + * check/allocar.ok, check/allocar.tst: New files + implementing test cases for the new jit_allocar + interface. + + * check/Makefile.am, check/lightning.c: Update for + the new test case and interface. + + * doc/body.texi: Add documentation of the new + interface. + +2015-02-17 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_x86.h, lib/jit_x86-cpu.c, + lib/jit_x86-x87.c: No longer make st(7) available. + Need to keep one x87 slots empty to avoid exceptions. + This has the side effect of no longer needing the + hackish emms instruction before a function call. + +2015-02-16 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Remove the jit_regno_patch bitfield + register fields before actual emit, as it is only really + used before emit, otherwise, on special conditions it + may consider live registers as dead during code emit. + +2015-02-15 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: + Correct encoding of ldxr* stxr* in the x32 abi. If the + displacement register is negative, it would generate + a 64 bit instruction with a 32 bit unsigned displacement. + + * check/ranger.tst, check/ranger.ok: New files, implementing + a test case for negative loads and stores. This is range.tst + converted to use registers instead of immediate offsets. + + check/Makefile.am: Update for the new test case. + +2015-02-07 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_size.c: Preventively use at least 144 bytes + if JIT_INSTR_MAX is less than it. The logic is not + guaranteed to be 100% precise, it is mostly heuristics + to allocate a buffer with as close as possible size, + but a wrong value may cause code generation to write + past the end of the buffer. + +2015-02-03 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Correct the reason the bug in + simplify_stxi was not triggered before, it was due to + incorrectly resetting the value->code field, what was + causing it to never properly optimize: + stxi Im0 Rb0 Rt0 + ldxi Rt1 Rb1 Im1 + when Rb0 == Rb1, Rt0 == Rt1 and Im0 == Im1 + There was another possible issue, that has been also + addressed in this commit, that would be the case of + Rbn == Rtn, where no redundancy removal is possible. + +2015-02-03 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Correct wrong check in simplify_stxi. + The test was incorrectly comparing the target register + and the displacement offset. This was a time bomb bug, + that would trigger in code like: + stxi Im0 Rb0 Rt0 + stxi Im1 Rb1 Rt1 + if Rb0 == Rb1 && Rt0 == Rt1 && Im0 == Rt1, that is, + the wrong check was Im0 == Rt1, instead of the supposed + Im0 == Imm1 (that was what the code mean't to do). It + was removing the second stxi assuming it was redundantly + generated; as that is not uncommon pattern on + translators generating jit. + +2015-02-02 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, include/lightning/jit_private.h, + lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, + lib/jit_disasm.c, lib/jit_hppa.c, lib/jit_ia64.c, + lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, + lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c: Add a new + --enable-devel-disassembler option, that should be used + during development, or lightning debug. This option + intermixes previous jit_print and jit_disassemble + output, making it easier to visualize what lightning + call was used, and what code was generated. + +2015-01-31 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-cpu.c, lib/jit_arm.c: Only limit to 24 bit + displacement non conditional jump in the same jit_state_t. + +2015-01-19 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Reorder documentation, making jit_frame + and jit_tramp the lightning response to the need of + trampolines, continuations and tail call optimizations. + A pseudo code example of a factorial function was added. + Also added a section for description of the available + predicates. + + * doc/fact.c: New file, implementing a simple example of + a translation of a trivial, recursive, tail call optimization + into lightning calls. This is the conversion to functional C + code of the example in doc/body.texi. + + * doc/Makefile.am: Update for the next test case. + +2015-01-17 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/jit_aarch64.c, + lib/jit_alpha.c, lib/jit_arm-vfp.c, lib/jit_arm.c, + lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, + lib/jit_ppc.c, lib/jit_s390.c, lib/jit_sparc.c, + lib/jit_x86.c: Add the new jit_arg_register_p predicate. + The predicate is expected to be used to know if an + argument is in a register, what would need special + handling if code that can overwrite non callee save + registers is executed. + + * check/carg.c: New test case to check consistency and + expected usage of jit_arg_register_p. + + * check/Makefile.am: Update for new test case. + +2015-01-17 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_aarch64.h, + include/lightning/jit_alpha.h, + include/lightning/jit_arm.h, + include/lightning/jit_hppa.h, + include/lightning/jit_mips.h, + include/lightning/jit_ppc.h, + include/lightning/jit_s390.h, + include/lightning/jit_sparc.h, + include/lightning/jit_x86.h, + lib/jit_aarch64.c, lib/jit_alpha.c, + lib/jit_arm.c, lib/jit_hppa.c, + lib/jit_ia64.c, lib/jit_mips.c, + lib/jit_ppc.c, lib/jit_s390.c, + lib/jit_sparc.c, lib/jit_x86.c: Remove jit_arg_reg_p and + jit_arg_f_reg_p from a public header, and define it only + on port specific files where an integer offset is used + to qualify an argument identifier. Exported code expects + an opaque pointer (but of jit_node_t* type) to "qualify" + an argument identifier. + This patch, and the code review/simplification done during + it also corrected some bugs: + o Inconsistent jit_arg_d value of double argument after 3 + integer arguments in arm for jit_functions; tested, C + functions were being properly called. + o Inconsistent use of getarg_{f,d} and putarg*_{f,d} on + s390 (32-bit) that happened to not have a proper test + case, as it would only happen for jit functions, and + tested, called C functions had proper arguments. + o Corrected a "last minute" correction that did not go + to the committed version, and would not compile on hppa, + due to bad _jit_putargi_d prototype definition. + +2015-01-17 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Correct wrong/outdated information for + hton*, pusharg* and ret*, and add missing documentation + for rsb*, qmul*, qdvi* and putarg*. + +2015-01-15 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, lib/jit_disasm.c: Rewrite workaround + to apparent problem to initialize powerpc disassembler. + +2015-01-15 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/jit_aarch64.c, + lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, + lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c, + lib/jit_s390.c, lib/jit_sparc.c, lib/jit_x86.c: + Implement jit_putarg*. It works as a mix of jit_getarg* + and jit_pusharg*, in the way that the first argument is + a register or immediate, and the second is a pointer + returned by jit_arg*. The use of the interface is to change + values of arguments to the current jit function. + + * check/put.ok, check/put.tst: New test cases exercising + the new jit_putarg* interface. + + * check/Makefile.am, check/lightning.c: Update for the + new test case and interface. + +2015-01-08 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_s390.h, lib/jit_s390-cpu.c, + lib/jit_s390-fpu.c, lib/jit_s390-sz.c, lib/jit_s390.c: + Renamed s390x* files to s390*. + + * check/float.tst, check/lightning.c, configure.ac, + include/lightning.h, include/lightning/Makefile.am, + lib/Makefile.am, lib/jit_s390.c, lib/jit_size.c, + lib/lightning.c: Update for renamed files. + +2015-01-08 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + include/lightning/jit_s390x.h, lib/jit_disasm.c, + lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x-sz.c, + lib/jit_s390x.c, lib/jit_size.c, lib/lightning.c: + Add support for generating jit for s390 32 bit. This change + also removed %f15 from the list of temporaries fpr registers; + it was not being used, but if were, it would corrupt the + stack frame because the spill address would overwrite grp + offsets. + +2014-12-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Correct some endianess issues + on the powerpc le backend. + +2014-12-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c: Add mcrxr instruction emulation, + as this instruction has been phased out, and should be + implemented as a kernel trap. + +2014-12-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Better check for need to flush constants + before the pool being no longer reachable. + +2014-12-25 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h: Split jit_htonr in the new 3 interfaces + jit_htonr_us, jit_htonr_ui and jit_htonr_ul, the later only + available on 64 bit. The plain/untyped jit_htonr macro call + maps to the wordsize one. + * lib/jit_aarch64-cpu.c, lib/jit_aarch64-sz.c, lib/jit_aarch64.c, + lib/jit_alpha-cpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c, + lib/jit_arm-cpu.c, lib/jit_arm-sz.c, lib/jit_arm.c, + lib/jit_hppa-cpu.c, lib/jit_hppa-sz.c, lib/jit_hppa.c, + lib/jit_ia64-cpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, + lib/jit_mips-cpu.c, lib/jit_mips-sz.c, lib/jit_mips.c, + lib/jit_ppc-cpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c, + lib/jit_s390x-cpu.c, lib/jit_s390x-sz.c, lib/jit_s390x.c, + lib/jit_sparc-cpu.c, lib/jit_sparc-sz.c, lib/jit_sparc.c, + lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c: + Update backends for the new jit_htonr*. + * check/lightning.c, lib/jit_names.c, lib/lightning.c: + Update for the new jit_htonr* interfaces. + * check/Makefile.am: Update for new test cases. + * check/hton.ok, check/hton.tst: New test cases. + +2014-12-24 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, include/lightning/jit_x86.h, + lib/jit_disasm.c, lib/jit_x86-cpu.c, lib/jit_x86-sse.c, + lib/jit_x86-sz.c, lib/jit_x86-x87.c, lib/jit_x86.c, + size.c: Implement support for the x32 abi. Built and + tested on Gentoo default/linux/amd64/13.0/x32 profile. + +2014-12-24 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_names.c: Add missing rsbi_f and rsbi_d strings. + +2014-12-21 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Call __clear_cache for every page. + This should only be required for older boards or + toolchain setup, but has been reported to be required + for lightning at some point. + +2014-12-21 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Correct check to guard overflow of index + of constants from program counter. + +2014-11-24 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Remove an optimization to calee save + registers that may incorrectly remove a jit_movr under + special conditions. + +2014-11-20 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_ppc.h, lib/jit_ppc-cpu.c, + lib/jit_ppc.c: Add initial powerpc le support. + +2014-11-20 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_disasm.c: Change thumb or arm disassemble based on + jit code before disassembly. + + * lib/jit_arm-cpu.c: Correct reversed arguments to LDRD and + STRD instructions, and correct checking for support of those. + + * lib/jit_arm-swf.c: Correct wrong use of LDRD and STRD and + only use those if the register is even. + + * check/check.arm.swf.sh, check/check.arm4.swf.sh: New files + to test LDRD and STRD, as well as the alternate code path + when those are not available, in the .arm4. test case. + + * check/Makefile.am: Update for the new test cases. + +2014-11-08 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/jit_aarch64.c, + lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, + lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c, + lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c: + Implement a private jit_flush call, that flushes + the cache, if applicable, aligning down to the + previous and up to the next page boundary. + +2014-11-08 Paulo Andrade <pcpa@gnu.org> + + * check/ctramp.c: New file. It just repeats the test + of tramp.tst, but using two jit_state_t, what should + test possible issues with two contexts, and also validate + jit_tramp works on backends with function descriptions. + + * check/Makefile.am: Update for new test case. + +2014-11-03 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_mips.h: Do not make the t9 register + JIT_R11 (or JIT_R7 for n32 or n64 abi) available. Previously + it cause problems if one expects it to not be changed in a + function call. For example, calling a jit function, where it + really does not need to be changed. + +2014-10-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, + lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, lib/jit_ppc.c, + lib/jit_s390x.c, lib/jit_sparc.c, lib/jit_x86.c: Add an + assertion to all code generation "drivers" to ensure + _jitc->regarg is empty or in an expected state, after + translation of a lightning instruction to native code. + This change was a brute force test to find out other cases + of a temporary not being release (like was happening with + _bmsi and _bmci on x86), but no other case was found, + after running make check, with assertions enabled, on all + backends. + +2014-10-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-cpu.c: Correct a register allocation leak in + _bmsi and _bmci. + +2014-10-25 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_disasm.c: Do not cause an fatal error if init_jit + fails in the jit_init_debug call. + +2014-10-24 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64.c, lib/jit_ppc.c: Correct handling of function + descriptor when first prolog is a jit_tramp prolog. The + test case was using the same jit_context_t, so was not + triggering this condition. + + * lib/jit_ppc-cpu.c: Properly handle jump displacements that + do not fit on 24 powerpc. This required changing from previous + "mtlr reg, blr" to "mtctr reg, bctr" to properly handle + the logic to "hide" function descriptors, but that would + also be required as the proper jit_jmpr when/if implementing + optimizations to leaf functions (was working with blr because + it is saved/reloaded in prolog/epilog). + +2014-10-21 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/lightning.c: Add three predicates + to query information about labels. jit_forward_p(label) + will return non zero if the label is "forward", that is + need a call to jit_link(label), jit_indirect_p(label) + that returns non zero if the label was created with the + jit_indirect() call, and jit_target_p(label) that will + return non zero if there is at least one jump patched + to land at that label. + +2014-10-18 Paulo Andrade <pcpa@gnu.org> + + * check/range.ok, check/range.tst: New test case designed + to catch incorrect code generation, usually due to incorrect + test of immediate size. The test checks a large amount of + encodings in "power of two" boundaries. This test exorcises + a significant amount of code paths that was previously not + tested. + + * check/Makefile.am: Add range test to make check target. + + * lib/jit_aarch64-cpu.c: Correct wrong address calculation + for stxi_c, stxi_s, stxi_i and stxi_l when the offset is + too large. + + * lib/jit_mips-fpu.c: Correct wrong size test to check if + an immediate can be encoded in a float or double store. + + * lib/jit_s390x-cpu.c: Correct inverted encoding to stxi_s + when the offset cannot be encoded, and fallbacks to an + alternate encoding in 2 instructions. + +2014-10-17 Paulo Andrade <pcpa@gnu.org> + + * check/alu_rsb.ok, check/alu_rsb.tst: New files implementing + tests for jit_rsb*. + + * check/Makefile.am, check/lightning.c, include/lightning.h, + lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, lib/jit_aarch64-sz.c, + lib/jit_aarch64.c, lib/jit_alpha-cpu.c, lib/jit_alpha-fpu.c, + lib/jit_alpha-sz.c, lib/jit_alpha.c, lib/jit_arm-cpu.c, + lib/jit_arm-swf.c, lib/jit_arm-sz.c, lib/jit_arm-vfp.c, + lib/jit_arm.c, lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, + lib/jit_hppa-sz.c, lib/jit_hppa.c, lib/jit_ia64-cpu.c, + lib/jit_ia64-fpu.c, lib/jit_ia64-sz.c, lib/jit_ia64.c, + lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips-sz.c, + lib/jit_mips.c, lib/jit_names.c, lib/jit_ppc-cpu.c, + lib/jit_ppc-fpu.c, lib/jit_ppc-sz.c, lib/jit_ppc.c, + lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x-sz.c, + lib/jit_s390x.c, lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c, + lib/jit_sparc-sz.c, lib/jit_sparc.c, lib/jit_x86-cpu.c, + lib/jit_x86-sse.c, lib/jit_x86-sz.c, lib/jit_x86-x87.c, + lib/jit_x86.c, lib/lightning.c: Implement jit_rsb*. This + was a missing lightning 1.x interface, that on most + backends is synthesized, but on a few backends (hppa and ia64), + it can generate better code as on those there is, or the + only instruction with an immediate is in "rsb" format + (left operand). + +2014-10-17 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_names.c: New file with single definition of string + representation of lightning IR codes. + + * size.c: Modified to append the code name in a C comment + after the maximum instruction size. + + * lib/jit_print.c: Minor change to not duplicate jit_names.c + contents. + + * lib/jit_aarch64-sz.c, lib/jit_alpha-sz.c, lib/jit_arm-sz.c, + lib/jit_hppa-sz.c, lib/jit_ia64-sz.c, lib/jit_mips-sz.c, + lib/jit_ppc-sz.c, lib/jit_s390x-sz.c, lib/jit_sparc-sz.c, + lib/jit_x86-sz.c: Rewritten to add string representation of + IR codes in a C comment. + +2014-10-14 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64-cpu.c, lib/jit_alpha-cpu.c, lib/jit_arm-cpu.c, + lib/jit_hppa-cpu.c, lib/jit_mips-cpu.c, lib/jit_ppc-cpu.c, + lib/jit_sparc-cpu.c: Implement or correct the internal + nop(count) call that receives an argument that tells the + modulo bytes to align the code for the next instruction. + + * include/lightning.h, lib/lightning.c, lib/jit_aarch64.c, + lib/jit_alpha.c, lib/jit_arm.c, lib/jit_hppa.c, lib/jit_ia64.c, + lib/jit_mips.c, lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c, + lib/jit_x86.c: Implement the new jit_align() call that receive + an argument, that tells the modulo, in bytes, to align the + next instruction. In most backends the only value that makes + a difference is a value that matches sizeof(void*), as all + other values usually are already automatically aligned in + labels, but not guaranteed to be aligned at word size bytes. + + * check/align.ok, check/align.tst: New files, implementing + a simple test for the new jit_align() interface. + + * check/Makefile.am, check/lightning.c, lib/jit_aarch64-sz.c, + lib/jit_alpha-sz.c, lib/jit_arm-sz.c, lib/jit_hppa-sz.c, + lib/jit_ia64-sz.c, lib/jit_mips-sz.c, lib/jit_ppc-sz.c, + lib/jit_print.c, lib/jit_s390x-sz.c, lib/jit_sparc-sz.c, + lib/jit_x86-sz.c: Update for the new jit_code_align code and + the jit_align() interface. + +2014-10-13 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/jit_size.c, size.c: Use a + symbolic value for the last IR code. + +2014-10-12 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/jit_aarch64-cpu.c, lib/jit_alpha-cpu.c, lib/jit_arm-cpu.c, + lib/jit_hppa-cpu.c, lib/jit_ia64-cpu.c, lib/jit_mips-cpu.c, + lib/jit_ppc-cpu.c, lib/jit_s390x-cpu.c, lib/jit_sparc-cpu.c, + lib/jit_x86-cpu.c, lib/lightning.c: Implement the new + jit_frame and jit_tramp interfaces, that allow writing + trampoline like calls, where a single dispatcher jit buffer + is written, and later other jit buffers are created, with + the same stack frame layout as the dispatcher. This is the + logic that GNU Smalltalk used in lightning 1.x, and is required + to make a sane port for lighting 2.x. + + * jit_ia64-cpu.c: Implement support for jit_frame and jit_tramp, + and also correct wrong encoding for B4 instructions, that + implement jmpr, as well as correct reverse logic in _jmpr, + that was moving the branch register to the jump register, + and not vice-versa. + Also, if a stack frame is to be assumed, always assume it may + call a function with up to 8 arguments, regardless of the + hint frame argument. + + * lib/jit_arm.c: Add a new must_align_p() interface to ensure + function prologs are always aligned. This condition was + previously always true, somewhat by accident, but with + jit_tramp it is not guaranteed. + + * jit_ia64-cpu.c: lib/jit_ppc.c: Add minor special handling + required to implement jit_tramp, where a function descriptor + should not be added before a prolog, as jit_tramp means omit + prolog. + + * check/lightning.c: Update test driver for the new interfaces. + + * check/Makefile.am, check/tramp.tst, check/tramp.ok: Add + a simple test and example of the jit_frame and jit_tramp + usage implementing a simple Fibonacci function using a + simulation of an interpreter stack and how it would handle + state in language specific variables. + + * doc/body.texi: Add documentation for jit_frame and + jit_tramp. + +2014-09-29 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64.c, lib/jit_alpha.c, lib/jit_arm.c, + lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_mips.c, + lib/jit_ppc.c, lib/jit_s390x.c, lib/jit_sparc.c, + lib/jit_x86.c, lib/lightning.c: Allow jit_jmpi on a + target that is not a node. This may lead to hard to + debug code generation, but is a required feature for + certain generators, like the ones that used lightning + 1.2x. Note that previously, but not really well + documented, it was instructed to use: + jit_movi(rn, addr); jit_jmpr(rn); + but now, plain: + jit_patch_abs(jit_jmpi(), addr); + should also work. + +2014-09-24 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-sz.c: Generate information about instruction + lengths for more precise calculation of buffer size on + Windows x64. This change is specially important because + the maximum instruction length is larger than other + systems, what could cause an out of bounds write on + special conditions without this update. + +2014-09-24 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Add workaround to conflicting global + optind variable in cygwin binutils that have an internal + getopt* implementation. + + * lib/jit_x86-cpu.c: Add a simple define ffsl ffs if building + for 32 bit and there is no ffsl function. + +2014-09-24 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Add a hopefully temporary kludge to not use + sprintf and sscanf returned by dlsym. This is required to pass + the varargs test. + + * include/lightning/jit_private.h: Use symbolic name for first + integer register argument, as this is different in sysv and + win64 abi. + + * include/lightning/jit_x86.h: Add conditionals and definitions + for Windows x64 (under __CYGWIN__ preprocessor conditional). + + * lib/jit_x86-cpu.c: Correct one instruction encoding bug, that + was working by accident. Only use rax to rdx for some byte + operations to work on compatibility mode (that is, to generate + the proper encoding, instead of actually generating encoding + for high byte registers, e.g. %bh). + Add proper prolog and epilog for windows x64. + + * lib/jit_x86-sse.c: Correct a swapped rex prefix for float + operations. + + * lib/jit_x86.c: Adjust to support Windows x64 abi. + + * check/check.x87.nodata.sh: New file, previously used but that + was missing git. + +2014-09-07 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Mark all registers advertised as live, as + per jit_callee_save_p as live whenever reaching a jump that + cannot be tracked. This is a rethink of the previous commit, + and is a better approach, otherwise there would not be much + sense on relying on jit_callee_save_p if it could not be + trusted. + + * check/jmpr.tst, check/jmpr.ok: New files implementing a very + simple test case, that would actually cause an assertion on + code before the change to only mark as live when reaching a + jump that could not tracked, the actually advertised as callee + save registers. + + check/Makefile.am: Update for new jmpr test case. + +2014-09-01 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Do not mark all registers in unknown state + as live on jit_jmpr, or jit_jmpi to an absolute address. Instead, + treat it as a function call, and only consider JIT_Vn registers + as possibly live. + +2014-08-29 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Add a proper info menu entry for + GNU lightning. + + * doc/version.texi: Regenerate. + +2014-08-16 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64-cpu.c, lib/jit_aarch64-fpu.c, + lib/jit_arm-cpu.c, lib/jit_arm-vfp.c, + lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, + lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, + lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, + lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, + lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, + lib/jit_s390x.c, lib/jit_sparc-cpu.c, + lib/jit_x86-cpu.c, lib/jit_x86-sse.c, + lib/jit_x86-x87.c: Review generation of all branch + instructions and always adds the jit_class_nospill + bitfield for temporary registers that cannot be spilled + because the reload would be after a conditional jump; the + patch only adds an extra assertion. These conditions do + not happen on documented lightning usage, but can happen + if one uses the not exported jit_get_reg and jit_unget_reg + calls and cause enough register starvation. + +2014-08-16 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_alpha.c: Correct wrong bitmask of most argument + float register arguments, that were being set as callee + save instead of argument registers class. + +2014-08-16 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-sz.c: Regenerate table of known maximum + instruction sizes for the software float fallback, + that implements "virtual" float registers in the stack + and operations as calls to libgcc. + + * size.c: Correct typo in the generated jit_arm-sz.c file. + +2014-08-10 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_alpha.h, lib/jit_alpha-cpu.c, + lib/jit_alpha-fpu.c, lib/jit_alpha-sz.c, lib/jit_alpha.c: + New files implementing a lightning Alpha port. Thanks + to Trent Nelson and snakebit.net staff for providing access + to an Alpha system. + + * check/float.tst, check/lightning.c, configure.ac, + include/lightning.h, include/lightning/Makefile.am, + include/lightning/jit_private.h, lib/Makefile.am, + lib/jit_disasm.c, lib/jit_size.c, lib/lightning.c: + Minor changes to adapt for the new Alpha port. + +2014-08-10 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Always mark JIT_RET and JIT_FRET as + live in a function epilog. This is required because + on some ports a complex sequence, allocating one or more + registers, may be required to jump from a ret* to the + epilog, and the lightning api does not have annotations + to know if a function returns a value, or the type of + the return value. + +2014-08-10 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Change the correct live bitmask of + return registers after a function call in jit_update. + +2014-08-10 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Change assertions to have an int + result and correct a bad bit mask assertion. + +2014-08-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64.c: Correct bad setup for assertion + of consistency before a patch. + +2014-08-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-cpu.c: Correct typo in the jit_bmsr + implementation that was using the wrong test result + register. + +2014-07-28 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_memory.c: Do not call free on NULL pointers. + + * include/lightning/jit_private.h, lib/jit_note.c, + lib/lightning.c: Add a wrapper to memcpy and memmove + to not actually call those functions with a zero size + argument, and likely also a null src or dst. + +2014-07-27 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/jit_disasm.c, + lib/lightning.c: Remove the global jit_progname variable. + It was being only used in jit_init_debug, that is called + from init_jit, so, just pass an argument. + +2014-07-27 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Add note that jit_set_memory_functions + should be called before init_jit, because init_jit + itself may call the memory wrappers. + +2014-04-22 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Do not get confused with default settings + if /proc is not mounted on Linux specific code path. + +2014-04-09 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h, + include/lightning/jit_hppa.h, include/lightning/jit_ia64.h, + include/lightning/jit_mips.h, include/lightning/jit_ppc.h, + include/lightning/jit_private.h, include/lightning/jit_s390x.h, + include/lightning/jit_sparc.h, include/lightning/jit_x86.h: + Do not add jit_regset_t, JIT_RA0, and JIT_FA0 to the installed + header file. These types and definitions are supposed to be + only used internally. + +2014-04-05 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-cpu.c: Only adjust stack pointer in prolog if + need stack space, that is, do not emit a nop instruction + subtracting zero from the stack pointer. + +2014-04-04 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_disasm.c: Correct a crash in the doc/printf example + on arm due to releasing the data_info information in + jit_clear_state. This is a special case for arm only, and + actually, only armv5 or older uses the data_info buffer, + or when forcing arm instruction set mode besides thumb + available. + +2014-12-03 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Write detailed description and examples for + jit_get_memory_functions, jit_set_memory_functions, + jit_get_code, jit_set_code, jit_get_data and jit_set_data. + +2014-12-03 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/lightning.c: Implement the new jit_set_data() interface, + and the new jit_get_data() helper. Like jit_set_code(), + jit_realize() should be called before jit_set_data(). + The most common usage should be jit_set_data(JIT_DISABLE_DATA + | JIT_DISABLE_NOTE), to force synthesize any float/double + constant in the stack and not generate any debug information. + + * lib/jit_note.c: Minor change to debug note generation as + now it uses an alternate temporary data buffer during constants + and debug generation to accommodate the possibility of the user + setting an alternate data buffer. + + * lib/jit_hppa-fpu.c, lib/jit_s390x.c, lib/jit_s390x-cpu.c, + lib/jit_s390x-fpu.c, lib/jit_sparc.c, lib/jit_sparc-fpu.c, + lib/jit_x86-sse.c, lib/jit_x86-x87.c: Implement jit_set_data. + + * lib/jit_hppa-sz.c, lib/jit_sparc-sz.c, lib/jit_x86-sz.c, + lib/jit_s390x-sz.c: Update for several instructions that now + have a different maximum length due to jit_set_data. + + * lib/jit_mips-fpu.c: Implement jit_set_data, but missing + validation on n32 and n64 abis (and/or big endian). + + * lib/jit_mips-sz.c: Update for changes in o32. + + * lib/jit_ppc-fpu.c: Implement jit_set_data, but missing + validation on Darwin PPC. + + * lib/jit_ppc-sz.c: Update for changes in powerpc 32 and + 64 bit. + + * lib/jit_ia64-fpu.c: Implement untested jit_set_data. + + * TODO: Add note to list ports that were not tested for the + new jit_set_data() feature, due to no longer having access + to them. + + * check/nodata.c: New file implementing a simple test exercising + several different conditions created by jit_set_data(). + + * check/check.nodata.sh: New file implementing a wrapper + over the existing *.tst files, that runs all tests without + using a data buffer for constants; only meaningful (and + enabled) on architectures that used to store float/double + constants on a read only data buffer. + + * configure.ac, check/Makefile.am: Update for the new test + cases. + + * check/lightning.c: Implement the new "-d" option that + sets an internal flag to call jit_set_data() disable + constants and debug, that is, using only a pure code + buffer. + +2014-11-03 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/lightning.c: Implement the new jit_set_code() interface, + that allows instructing lightning to use an alternate code + buffer. The new jit_realize() function should be called + before jit_set_code(), and usually call jit_get_code() + to query the amount of bytes expected to be required for + the code. + + * lib/jit_size.c: Minor update to have less chances of + miscalculating the code buffer by starting the counter + with the size of the longest instruction instead of zero, + as code emit fails if at any moment less than the longest + instruction bytes are available. + + * check/setcode.c: New file implementing some basic tests + of the new jit_set_code() interface. + + * check/Makefile.am: Update for newer test case. + +2014-06-03 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/lightning.c: Add the new + jit_indirect() call, that returns a special label node, + and tells lightning that the label may be the target of + an indirect jump. + + * doc/body.texi: Document the new jit_indirect() call, and + add examples of different ways to create labels and branches. + +2014-23-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86.c: Rewrite previous patch to inline save/restore + because clobbering %ebx in x86 is treated as an error + (jit_x86.c:239:5: error: PIC register clobbered by 'ebx' in 'asm'). + +2014-19-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86.c: Rewrite incorrect inline assembly that could + truncate a variable in a callee save register. Now it simply + tells gcc that the register is clobbered, instead of using a + *32 bit* swap with a temporary variable. The problem only + happens when compiling with optimization. + +2014-19-02 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h, + include/lightning/jit_hppa.h, include/lightning/jit_ia64.h, + include/lightning/jit_mips.h, include/lightning/jit_ppc.h, + include/lightning/jit_s390x.h, include/lightning/jit_sparc.h, + include/lightning/jit_x86.h: Change jit_regset_t to an + unsigned type, to allow safe right shift. + + * lib/lightning.c: Rewrite jit_regset_scan1 to allow easier + compiler optimization. + +2013-12-03 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-x87.c: Correct wrong optimization when + loading the log(2) constant. + +2013-12-03 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-cpu.c: Use the emms instruction before + calling any function. This is particularly important + when using c99 complex functions as it can easily + overflow the x87 stack due to the way lightning uses + the x87 stack as a flat register file. + +2013-12-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-x87.c: Correct wrong code generation due + to comparing the base and not the value register with + %st(0) in stxi_f. + +2013-12-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-x87.c, lib/jit_x86.c: Use 8 bytes aligned + stack offset for float/double x87 to/from sse move. + +2013-11-27 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, lib/jit_arm-swf.c, lib/jit_arm.c: Add + changes that should at least allow building lightning + on Apple iOS7. + +2013-10-08 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c: Correct wrong shortcut for ldxi_l with + a zero offset, that was calling ldr_i instead of ldr_l. + +2013-10-08 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_arm.h, lib/jit_arm-cpu.c: Do not use + by default load/store instructions that map to ldrt/strt. + There is already the long displacement version for positive + offsets, and when using a (shorter) negative offset it does + not map to ldrt/strt. At least on qemu strt may cause + reproducible, but unexpected SIGILL. + +2013-10-08 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-vfp.c: Correct wrong load/store offset + calculation when the displacement is constant but too + large to use an instruction with an immediate offset. + +2013-10-07 Paulo Andrade <pcpa@gnu.org> + + * check/self.c: Extend tests to validate jit_callee_save_p + does not cause an assertion on valid arguments, and test + extra registers defined on some backends. + + * configure.ac: Do not ignore environment CFLAGS when + checking if need to test runtime configurable options, + like use x87 when sse2 is available, arm instruction set + instead of thumb, etc. + + * include/lightning/jit_arm.h: Correct wrong jit_f macro + definition. + + * include/lightning/jit_ia64.h, include/lightning/jit_ppc.h: + Correct wrong jit_r macro definition. + + * lib/jit_x86-x87.c, lib/jit_x86.c: Actually use the + reserved stack space for integer to/from float conversion. + The stack space was also changed to ensure it is 8 bytes + aligned. Also, for Solaris x86 in 32 bit mode, an alternate + truncr_d was implemented because for some reason it is + failing with SIGILL if using the "fisttpl" instructions, + that must be available on p6 or newer, but for the sake of + making all tests pass, implement a 486 or newer sequence + if "sun" is defined. + +2013-10-03 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_mips.h, lib/jit_mips-cpu.c, + lib/jit_mips-sz.c, lib/jit_mips.c, size: Build and + pass all test cases on Irix big endian mips using + the 64 bit abi. + +2013-10-02 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_mips.h: Add proper mips abi detection. + +2013-09-30 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_print.c: Do not crash if calling jit_print from + gdb before actually emitting code. + + * lib/lightning.c: Correct misplaced check for already + visited blocks on conditional branches, what was preventing + proper merge live bit masks of forward blocks. + +2013-09-30 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-cpu.c: Correct not properly tested case of using + %r12 as index register, what was causing an invalid assertion. + %r12 is mapped to the "extra" JIT_R3 register, and test cases + only test "standard" lightning registers. + +2013-09-28 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64.c: Minor change to force collecting the maximum + instruction length in the --enable-devel-get-jit-size build + mode. The actual generated file did not change because the + sampling was large enough that it had already collected proper + information in the previously slightly buggy code (not forcing + a sync of the instructions that could be combined). + +2013-09-27 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Correct build when disassembler is + disabled. + +2013-09-25 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c: Correct some + off by one range checks (that were only accepting values + one less than the maximum allowed) and an invalid test + condition check that was forcing it to always use + indirect jumps even when reachable with an immediate + displacement. + +2013-09-24 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64-sz.c, lib/jit_arm-sz.c, lib/jit_hppa-sz.c, + lib/jit_ia64-sz.c, lib/jit_mips-sz.c, lib/jit_ppc-sz.c, + lib/jit_s390x-sz.c, lib/jit_size.c, lib/jit_sparc-sz.c, + lib/jit_x86-sz.c: New files implementing static tables + with longest known instructions length generated to match + a lightning instruction. These tables should make it easier + to make it very unlikely to ever miscalculate, or by too + much, the size of a code buffer. + + * lib/jit_size.c: New file that aids to either collect + jit code size information, or use the information depending + on build options. + + * size.c: New helper file that parses input for, and create + an initial jit_$arch-sz.c file, that needs some minor edit + for arches with multiple configurations. + + * configure.ac, Makefile.am: Add the new, devel mode only + --enable-devel-get-jit-size configure option, that sets + compile time flags to collect jit code size information, + that will be used as input for the "noinst size program". + + * lib/jit_aarch64.c, lib/jit_arm.c, lib/jit_disasm.c, + lib/jit_hppa.c, lib/jit_ia64.c, lib/jit_memory.c, + lib/jit_mips.c, lib/jit_ppc.c, lib/jit_s390x.c, + lib/jit_sparc.c, lib/jit_x86.c, lib/lightning.c: Minor + changes for the --enable-devel-get-jit-size build mode, + as well as the "production build mode" with jit code + size information. + +2013-09-14 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/lightning.c: Add the new + jit_pointer_p interface, that returns a boolean value + telling if the pointer argument is inside the jit + code buffer. This is useful to avoid the need to add + extra labels and calls to jit_address to figure bounds + of code buffer, and still keep internal data private. + +2013-09-13 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/jit_note.c: Change the code argument of jit_get_note + to a jit_pointer_t and make jit_get_note a public interface. + It was intended so since start, as a way to map an offset + in the code to a function name, file name and line number + mapping. + +2013-09-11 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Correct reversed arguments in example of + usage in a (possibly) multi threaded, multiple jit_state_t + environments. + + * include/lightning/jit_arm.h, include/lightning/jit_private.h, + lib/jit_arm-cpu.c, lib/jit_arm.c: Make a previously, non + documented, global state private to the related jit_state_t + generating code. + +2013-09-10 Paulo Andrade <pcpa@gnu.org> + + * check/self.c, check/self.ok: New files implementing simple + consistency check assertions. At first validating some macros + that use values from different sources agree. + + * check/Makefile.am: Update for the new test case. + + * include/lightning.h, lib/lightning.c: Add the new + jit_callee_save_p() call, that is intended to be used when + writing complex code using lightning, so that one does not + need to verify what backend is being used, or have access to + private data, to query if a register is callee save or not; + on several backends the scratch registers are actually callee + save. + + * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h, + include/lightning/jit_hppa.h, include/lightning/jit_mips.h, + include/lightning/jit_ppc.h, include/lightning/jit_sparc.h, + include/lightning/jit_x86.h: Add an explicit definition for + JIT_R3-JIT_Rn, JIT_V3-JIT_Vn and JIT_F6-JIT_Fn when applicable. + This allows one to write code based on "#if defined(JIT_XN)" + and therefore, not need to check what is the current backend + or have access to private data structures. This is particularly + useful when writing virtual machines with several specialized, + global registers. + + * lib/jit_ia64.c: Properly flag the callee save general + purpose registers as such, so that jit_callee_save_p() works + as intended. + +2013-09-10 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c, configure.ac: Conditionally use the + code written to workaround a bug in the Hercules emulator, + as isnan and isinf are not available at least on HP-UX ia64. + +2013-09-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_s390x-cpu.c: Spill/reload correct callee save + float registers. + +2013-09-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_hppa-cpu.c: Correct code to call a function stored + in a register or a patched function address. + +2013-09-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c: Correct incorrect logic when restoring + the value of the "r2" callee save register. + +2013-08-29 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-cpu.c, lib/jit_arm.c: Correct wrong test and update + of the thumb offset information, when checking if needing to + patch a jump from arm to thumb mode. The problem would happen when + remapping the code buffer, and the new address being lower than + the previous one. + +2013-08-26 Paulo Andrade <pcpa@gnu.org> + + * configure.ac: Extend FreeBSD test to also handle NetBSD. + + * lib/jit_x86-cpu.c: Correct wrongly defined offset type of + ldxi_ui. Problem detected when building on NetBSD. + + * lib/lightning.c: Adjust code to handle NetBSD mremap, + where arguments do not match Linux mremap. + +2013-08-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc.c: Correct C sequence point problem miscalculating + the actual function address in a function descriptor. Problem + happens with gcc 4.8.1 at least. + +2013-08-11 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_s390x-cpu.c: Correct code checking if immediate + fits instruction, but using the negated value. + +2013-07-28 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_s390x.h, lib/jit_s390x-cpu.c, + lib/jit_s390x-fpu.c, lib/jit_s390x.c: New files + implementing the new s390x port. + + * configure.ac, include/lightning.h, + include/lightning/Makefile.am, + include/lightning/jit_private.h, + lib/Makefile.am, lib/jit_disasm.c, lib/lightning.c: + Minor adaptation for the new s390x backend. + + * check/float.tst: Update for the s390x result of + truncating +Inf to integer. + + * check/qalu_mul.tst: Add extra test cases to better test + high word of signed multiplication as the result is + adjust from unsigned multiplication on s390x. + +2013-07-28 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Do not assume casting a double NaN or + Inf to float will produce the expected float NaN or Inf. + This is not true at least under s390x. + +2013-07-28 Paulo Andrade <pcpa@gnu.org> + + * check/check.arm.sh, check/check.sh, check/check.swf.sh, + check/check.x87.sh: Properly check test programs output, + not just rely on the test program self testing the results + and not crashing. + +2013-07-28 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_aarch64.c: Remove unused macros left from cut&paste + of jit_arm.c. + +2013-07-16 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_aarch64.h, lib/jit_aarch64-cpu.c, + lib/jit_aarch64-fpu.c, lib/jit_aarch64.c: New files + implementing the new aarch64 port, as a new architecture, + not as an expansion of the existing armv[4-7] port. + + * check/lightning.c: Add aarch64 support and a small + change to recognize character constants as immediate + values. + + * check/float.tst: Add aarch64 preprocessor conditionals + to select proper expected value when converting [+-]Inf + and NaN to integer. + + * include/lightning/jit_arm.h, lib/jit_arm.c: Minor changes + to better match the new aarch64 files. + + * configure.ac, include/lightning.h, + include/lightning/Makefile.am, include/lightning/jit_private.h, + lib/Makefile.am, lib/lightning.c: Minor adjustments + for the aarch64 port. + +2013-07-08 Paulo Andrade <pcpa@gnu.org> + + * NEWS, THANKS, configure.ac, doc/version.texi: Update for + the 1.99a second alpha release. + +2013-06-25 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips.c: Correct cut&paste error that caused wrong + stack offset calculation for double arguments in stack in + the o32 abi. + Correct typo in the __LITTLE_ENDIAN macro name, that came + from cut&paste error in the original typo in lib/jit_ppc.c. + + * lib/jit_ia64.c, lib/jit_ppc.c: Correct typo in the + __LITTLE_ENDIAN macro name. + +2013-06-22 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c, configure.ac, include/lightning.h, + lib/lightning.c: Add tests and quirks to build/detect + and/or work on Irix. + + * include/lightning/jit_mips.h, lib/jit_mips-cpu.c, + lib/jit_mips-fpu.c, lib/jit_mips.c: Adapt code to run + in big endian mips, using the n32 abi. + +2013-06-18 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h: Minor extra preprocessor testing + to "detect" byte order on x86 solaris, that now builds + and pass all test cases. + +2013-06-18 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_sparc-cpu.c: Correct compiler warning of value + used before assignment. The usage is bogus as the api + requires always patching jumps, but the random value used + could cause an assertion due to invalid displacement. + + * lib/jit_sparc.c: Always load and store double arguments + in stack as 2 float loads or stores, for safety, as unaligned + access is not allowed in Sparc Solaris. + +2013-06-14 Paulo Andrade <pcpa@gnu.org> + + * configure.ac: Force -mlp64 to CFLAGS on HP-UX ia64 port. + It is the only supported mode, and expects gcc as C compiler. + + * include/lightning.h, lib/jit_ia64-cpu.c, lib/jit_ia64.c: + Correct ia64 port to work on HP-UX that runs it in big endian + mode. + +2013-06-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_hppa.c: Sanitize the cache synchronization inline + assembly code that was doing twice the work and redundantly + flushing the end address every loop iteration. + +2013-06-09 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, check/Makefile.am, doc/Makefile.am: Do not + explicitly link to -ldl, but instead autodetect the library + with dlopen, dlsym, etc. + + * check/lightning.c: Add workaround to apparently buggy + getopt in HP-UX that sets optind to the wrong index, and + use RTLD_NEXT on HP-UX instead of RTLD_DEFAULT to dlsym + global symbols. + + * include/lightning.h: Rework definitions of wordsize and + byte order to detect proper values on HP-UX. + + * lib/lightning.c: Minor correction to use MAP_ANONYMOUS + instead of MAP_ANON on HP-UX. + + * lib/jit_hppa.c: Float arguments must be passed on integer + registers on HP-UX, not only for varargs functions. + Add code to properly clear instruction cache. This was + not required on Debian hppa port, but may have been working + by accident. + + * lib/jit_hppa-cpu.c: Follow pattern of HP-UX binaries and + use bve,n instead of bv,n to return from functions. + + * lib/jit_hppa-fpu.c: For some reason "fst? frX,rX,(rY)" did + not work on the tested computer (HP-UX B.11.23 U 9000/785 HP-UX) + so the code was changed, at first for __hpux only to add the + base and offset register and use the instruction with an + immediate (zero) offset. + +2013-06-07 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c, lib/jit_disasm.c, lib/jit_ppc-cpu.c, + lib/jit_ppc-fpu.c, lib/jit_ppc.c, include/lightning.h, + include/lightning/jit_ppc.h, include/lightning/jit_private.h: + Adapt code to work on 32 bit AIX ppc using gcc. Most changes + are basically to adapt the elf64 logic to 32 bit, as it does + not use the same convention of 32 bit Darwin ppc. + + * check/stack.tst: Add a fake memcpy function to the test + case if running under AIX, as it is not available to dlsym. + + * configure.ac: Check for getopt.h header, not available in + AIX. + +2013-06-01 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_hppa.h, lib/jit_hppa-cpu.c, + lib/jit_hppa-fpu.c, lib/jit_hppa.c: New files implementing + the hppa port. Built on Debian Linux PA-RISC 2.0, 32 bit. + + * check/float.tst: Add preprocessor for hppa expected + values when converting NaN and +-Inf to an integer. + + * check/ldst.inc: Ensure double load/store tests use an + 8 byte aligned address by default. + + * lib/lightning.c: Correct a bug found during tests in + the new port, where qmul* and qdiv* were not properly + setting one of the result registers as modified in the + function, what would be a problem if the only "write" + usage were the qmul* or qdiv*. + + * check/varargs.tst, check/varargs.ok: Add one extra + interleaved integer/double test to validate proper code + generation in the extra case. + + * check/lightning.c, configure.ac, include/lightning.h, + include/lightning/Makefile.am, + include/lightning/jit_private.h, lib/Makefile.am, + lib/jit_disasm.c: Update for the hppa port. + +2013-04-27 Paulo Andrade <pcpa@gnu.org> + + * check/varargs.tst: Correct misplaced .align directive + that was causing the double buffer to not be aligned at + 8 bytes. + * lib/jit_ia64-cpu.c: + Properly implement abi for excess arguments passed on + stack. + Simplify load/store with immediate displacement argument + with zero value. + Simplify some calls to "subi" changing to "addi" with + a negative argument. + Remove some #if 0'ed code, that could be useful in + special conditions, but the most useful one would be + to "optimize" "static" jit functions, but for the sake + of simplicity, jit functions are implemented in a way + that can be passed back to C code as C function pointers. + Add an attribute to prototypes of several unused functions. + These functions are defined for the sake of implementing all + Itanium documented instructions, but a significant amount of + them is not used by lightning. + * lib/jit_ia64-fpu.c: Simplify load/store with zero immediate + displacement and add unused attribute for functions not used + by lightning, but required to provide macros implementing all + Itanium documented instructions. + * lib/jit_ia64.c: Update for the properly implemented abi + for stack arguments. + * lib/lightning.c: Mark an unused function as such. + +2013-04-27 Paulo Andrade <pcpa@gnu.org> + + lib/jit_ia64-cpu.c: + Correct immediate range check of integer comparisons when + inverting arguments. + Correct gei_u that was not decrementing immediate when + inverting arguments. + Correct b?add* and b?sub* that were not properly updating + the result register. + +2013-04-27 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c: Correct wrong mapping of 2 instructions + in "M-, stop, M-, stop" translation, that was ignoring the + last stop (implemented as a nop I- stop). + + * lib/jit_ia64-fpu.c: Properly implement fnorm.s and fnorm.d, + as well as the proper integer to float or double conversion. + +2013-04-27 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c: Correct bogus implementation of ldr_T + for signed integers, that was using ld1.s, ld2.s and ld4.s. + The ".s" stands for speculative load, not sign extend. + + * lib/jit_ia64-fpu.c: Correct bogus implementation of ldxr_T + for float and double. The third (actually, second) argument + is indeed added to the base register, but the base register + is modified. The actual M7 implementation was already correct, + just the ldxr_f and ldxr_d implementation that was kept in + a prototype state, misinterpreting what M7 does. + +2013-04-27 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c: Correct X2 pattern matching by preventing + it to attempt to require a stop between the L and the X + instruction; that is, check the registers and predicates + before emitting the L instruction, not after. + + * lib/jit_ia64-fpu.c: Slightly simplify and correct + divr_f and divrd_d implementation. + + * check/lightning.c: Add __ia64__ preprocessor define + on Itanium. + + * check/alu.inc, check/clobber.tst, check/float.tst: Define + several macros conditionally to __ia64__. This is required + because __ia64__ jit generation can use way too many memory, + due to not implementing instruction reordering to avoid + as much as possible "stops", what causes way too many nops + to be generated, as well as the fact that division and + remainder requires function calls, and float division + requires significant code to implement. + +2013-04-27 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h: Add new backend specific movr_w_d, + movr_d_w and movi_d_w codes as helpers to ia64 varargs + functions arguments. + + * lib/jit_ia64-cpu.c: + Correct wrong encoding of A5 small integers. + Correct define of "mux" instruction modifiers. + Correct ordering of arguments and predicates of cmp_xy + implementation with immediate arguments; like most other + codes with an immediate, the immediate is the second, not + the third argument. + + * lib/jit_ia64-fpu.c: Actual implementation of the code + to move to/from gpr to/from fpr, to implement varargs abi. + + * lib/jit_ia64.c: Make fpr argument registers not allocatable + as temporaries, no need for the extra checks when there are + plenty registers. + + * lib/jit_print.c, lib/lightning.c: Minor updates for the + new movr_w_d, movr_d_w and movi_d_w codes. + +2013-04-26 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c: Correct code to + also insert a stop to break an instruction group if a + register is written more than once in the same group. + This may happen if a register is argument and result of + some lightning call (not a real instruction). The most + common case should be code in the pattern: + movl rn=largenum + ... + mov rn=smallnum + where "rn" would end up holding "largenum". + But the problem possibly could happen in other circumstances. + +2013-04-26 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_ia64.h, lib/jit_ia64-cpu.c, + lib/jit_ia64-fpu.c, lib/jit_ia64.c: + Relocate JIT_Rn registers to the local registers, as, like + float registers, div/rem and sqrt are implemented as function + calls, and may overwrite non saved scratch registers. + Change patch_at to receive a jit_code_t instead of a + jit_node_t, so that it is easier to "inline" patches when + some instruction requires complex code to implement, e.g. + uneq and ltgt. + Correct arguments to FMA and FMA like instructions that, + due to a cut&paste error were passing the wrong argument + to the related F- implementation function. + Rewrite ltgt to return the proper result if one (or both) + of the arguments is unordered. + +2013-04-26 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_ia64.h, include/lightning/jit_private.h, + lib/jit_ia64-cpu.c, lib/jit_ia64-fpu.c, lib/jit_ia64.c, + lib/lightning.c: Rework code to detect need of a "stop" to + also handle predicates, as if a predicate is written, it + cannot be read in the same instruction group. + Use a single jit_regset_t variable for all registers when + checking need for a stop (increment value by 128 for + float registers). + Correct wrong "subi" implementation, as the code executed + is r0=im-r1, not r0=r1-im. + Use standard lightning 6 fpr registers, and rework to + use callee save float registers, that may be spill/reloaded + in prolog/epilog. This is required because some jit + instructions implementations need to call functions; currently + integer div/mod and float sqrt, what may change the value of + scratch float registers. + Rework point of "sync" of branches that need to return a + patch'able address, because the need for a "stop" before a + predicate read causes all branches to be the instruction + in slot 0, as there is no template to "stop" and branch + in the same instruction "bundle". + +2013-04-25 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_ia64.h, lib/jit_ia64-cpu.c, + lib/jit_ia64-fpu.c, lib/jit_ia64.c: New files implementing + the basic infrastructure of an Itanium port. The code + compiles and can generate jit for basic hello world like + functions. + + * check/lightning.c, configure.ac, include/lightning.h, + include/lightning/Makefile.am, include/lightning/jit_private.h, + lib/Makefile.am, lib/lightning.c: Update for the Itanium + port. + + * lib/jit_mips-cpu.c, lib/jit_mips.c: Correct typo and + make the jit_carry register local to the jit_state_t. + This matches code reviewed in the Itanium port, that + should use the same base logic to handle carry/borrow. + +2013-04-10 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/jit_arm.c, + lib/jit_mips-cpu.c, lib/jit_mips.c, lib/jit_ppc-cpu.c, + lib/jit_ppc.c, lib/jit_print.c, lib/jit_sparc-cpu.c, + lib/jit_sparc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, + lib/lightning.c: Change all jit_regset macros to take + a pointer argument, to avoid structure copies when + adding a port to an architecture with more than 64 + registers. + +2013-04-08 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c, lib/jit_ppc.c: Do not rely on __clear_cache + aligning to the next page boundary the end argument. It may + actually truncate it. + +2013-03-29 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_memory.c, + lib/jit_mips.c, lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c, + lib/lightning.c: Do not start over jit generation if can grow + the code buffer with mremap without moving the base pointer. + +2013-03-29 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_memory.c: Implement a simple memory allocation wrapper + to allow overriding calls to malloc/calloc/realloc/free, as well + as ensuring all memory containing pointers is zero or points to + allocated memory. + + * include/lightning.h, include/lightning/jit_private.h: Definitions + for the memory allocation wrapper. + + * lib/Makefile.am: Update for new jit_memory.c file. + + * lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips.c, lib/jit_note.c, + lib/jit_ppc.c, lib/jit_sparc.c, lib/jit_x86.c, lib/lightning.c: + Use the new memory allocation wrapper code. + +2013-03-22 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, include/lightning/jit_private.h, lib/lightning.c: + Remove dependency on gmp. Only a simple bitmap was required, and + that was not enough reason to force linking to gmp and possible + complications caused by it. + +2013-03-10 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h: Add check for __powerpc__ defined + in Linux, while Darwin defines __ppc__. + + * include/lightning/jit_ppc.h: Adjust register definitions + for Darwin 32 bit and Linux 64 bit ppc usage and/or ABI. + + * include/lightning/jit_private.h: Add proper check for + Linux __powerpc__ and an data definition for an workaround + to properly handle code that starts with a jump to a "main" + label. + + * lib/jit_disasm.c: Add extra disassembler initialization + for __powerpc64__. + + * lib/jit_ppc-cpu.c: Add extra macros and functions, and + correct/adapt previous ones to handle powerpc64. + + * lib/jit_ppc-fpu.c: Adapt for 64 bit wordsize. Basically + add conversion from/to int32/int64 and proper handling of + load/store offsets too large for 32 bit. + + * lib/jit_ppc.c: Add calls to 64 bit codes and adaptation + for the PowerPC 64 bit Linux ABI. + + * lib/jit_arm.c, lib/jit_mips.c, lib/jit_sparc, lib/jit_x86.c, + lib/lightning.c: Correct off by one error when restarting jit + of a function due to finding too late that needs to spill/reload + some register. Problem was found by accident on a very special + condition during PowerPC 64 code adaptation. + +2013-03-08 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Add missing ppc preprocessor definition. + +2013-03-06 Paulo Andrade <pcpa@gnu.org> + + * check/float.tst: Comment out the int to negative infinity + test in mips for the moment because not all Loongson agrees + on the result. + + * lib/jit_disasm.c: Add a test instead of an assertion + when loading symbols for disassembly due to a failure with + a simple binutils build in Debian mipsel64. + +2013-03-06 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/jit_arm-cpu.c, + lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips-cpu.c, + lib/jit_mips.c, lib/jit_note.c, lib/jit_ppc-cpu.c, + lib/jit_ppc.c, lib/jit_print.c, lib/jit_sparc-cpu.c, + lib/jit_sparc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, + lib/lightning.c: Add an extra structure for data storage + during jit generation, and release it after generating + jit, to reduce a bit memory usage, and also to make it + easier to understand what data is available during + jit runtime. + +2013-03-06 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Make data and code buffer readonly. + +2013-02-20 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Fool proof validate the examples of what + an assembly-language programmer would write and correct the + wrong sparc example. + +2013-02-19 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Add back the SPARC code generation example. + +2013-02-19 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Remove state flag to work with partial + sparc port, by just disassembling if there was incomplete + code generation. + + * jit_sparc-cpu.c: Correct wrong range check for immediate + integer constants (off by one bit shift). + Correct macro implementing equivalent "rd %y, rd" assembly. + Implement qmul* and qdiv*. + + * jit_sparc.c: Update for qmul* and qdiv* and remove logic + to handle incomplete code generation during sparc port. + +2013-02-18 Paulo Andrade <pcpa@gnu.org> + + * check/float.tst: Add sparc to list of known NaN and +-Inf + to integer conversion. + + * check/lightning.c: Define __sparc__ to preprocessor in + the sparc backend. + + * include/lightning/jit_private.h: Correct wrong definition + of emit_stxi_d, that has lived for a long time, but would + cause problems whenever needing to spill/reload a float + register. + + * include/lightning/jit_sparc.h: Can only use %g2,%g3,%g4 + for scratch variables, as other "global" registers are + reserved for the system, e.g. libc. + Reorder float register naming to make it easier to + access odd float registers, so that generating code for + pusharg and getarg is easier for the IR. + + * lib/jit_mips-cpu.c, lib/jit_ppc-cpu.c: Update to match + new code in jit_sparc-cpu.c. It must call jit_get_reg + with jit_class_nospill if using the register to move + an unconditional branch address to it, as the reload + will not happen (actually could happen in the delay + slot...) + + * lib/jit_sparc-cpu.c: Correct wrong macro definition for + ldxr_s. + Properly implement div* and implement rem. Div* needs + to use the y register, and rem* needs to be synthesized. + Correct b?sub* macro definitions. + + * lib/jit_sparc-fpu.c: Correct reversed float to/from double + conversion. + Correct wrong jit_get_reg call asking for a gpr and then + using the fpr with that number. + Correct wrong branch displacement computation for + conditional branches. + + * lib/jit_sparc.c: Correct getarg_d and pushargi_d implementation. + Add rem* entries to the switch converting IR to machine code. + + * lib/lightning.c: Correct a problem detected when adding + the jit_class_nospill flag to jit_get_reg, that was caused + when having a branch to an "epilog" node, what would cause + the code to think all registers in unknown state were live, + while in truth, all registers in unknown state in the + "just after return" point are actually dead. + +2013-02-17 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_sparc.h, lib/jit_sparc-cpu.c, + lib/jit_sparc-fpu.c, lib/jit_sparc.c: New files implementing + the basic framework of the sparc port. + + * configure.ac, include/lightning.h, include/lightning/Makefile.am, + include/lightning/jit_private.h, lib/jit_disasm.c: Update + for the sparc port framework. + + * lib/jit_mips.c: Correct reversed retr/reti logic. + + * lib/jit_ppc.c: Correct misspelled __LITTLE_ENDIAN. + + * lib/lightning.c: Always do byte hashing in hash_data, because + the logic to "compress" strings causes large pointers to not + be guaranteed aligned at 4 byte boundaries. + Update for the sparc port framework. + +2013-02-11 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Correct jit_pushargi_f in the arm hardfp abi. + Most of the logic uses even numbered register numbers, so that + a float and a double can be used in the same register, but + the abi requires packing the float arguments, so jit_pushargi_f + needs to allocate a temporary register to modify only the + proper register argument (or be very smart to push two + immediate arguments if applicable). + +2013-02-11 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/lightning.c: Implement the new + jit_clear_state and jit_destroy_state calls. jit_clear_state + releases all memory not required during jit_execution; that + is, leaves only the mmap'ed data and code buffers allocated. + jit_destroy_state releases the mmap'ed buffers as well as + the jit_state_t object itself, that holds pointers to the + code and data buffers, as well as annotation pointers (for + disassembly or backtrace) in the data buffer. + + * lib/jit_note.c: Correct invalid vector offset access. + + * check/ccall.c, check/lightning.c, doc/ifib.c, doc/incr.c, + doc/printf.c, doc/rfib.c, doc/rpn.c: Use the new jit_clear_state + and jit_destroy_state calls, to demonstrate the new code to + release all jit memory. + + * doc/body.texi: Add basic documentation and usage description + of jit_clear_state and jit_destroy_state. + +2013-02-11 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_private.h, lib/jit_note.c, lib/lightning.c: + Store all annotation information in the mmap'ed area reserved for + read only data. This adds code to not allocate memory for jit_note_t + objects, and to relocate jit_line_t objects and its contents after + calculating annotation information. The jit_line_t objects are + relocated because it is not possible to always calculate before + hand data layout because note information may be extended or + redundant entries removed, as well as allowed to be added in + non sequential order. + A bug was also corrected in _jit_set_note, that was causing it + to allocate new jit_line_t objects when not needed. It was still + working correctly, but allocating way more memory than required. + +2013-02-05 Paulo Andrade <pcpa@gnu.org> + + *include/lightning.h, lib/lightning.c: Add the new jit_live code + to explicitly mark a register as live. It is required to avoid + assuming functions always return a value in the gpr and fpr return + register, and to avoid the need of some very specialized codes + that vary too much from backend to backend, to instruct the + optimization code the return register is live. + + * lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, + lib/jit_x86.c: Update for the new jit_live code. + + * check/ret.ok, check/ret.tst: New files implementing a simple + test case that would previously fail at least in ix86/x86_64. + + * check/Makefile.am: Update for new "ret" test case. + +2013-02-05 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Validate and correct + problems in the qmul and qdiv ppc implementation. + +2013-02-04 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/jit_arm-cpu.c, lib/jit_arm.c, lib/jit_mips-cpu.c, + lib/jit_mips.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c, + lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c: + Implement the new qmul and qdiv instructions that return signed + and unsigned lo/hi multiplication result and div/rem division result. + These should be useful for jit translation of code that needs to + know if a multiplication overflows (no branch opcode added) or if + a division is exact (easy check if remainder is zero). + + * check/lightning.c, lib/jit_print.c, check/Makefile.am, + check/all.tst: Update for the new qmul and qdiv instructions. + + * check/qalu.inc, check/qalu_div.ok, check/qalu_div.tst, + check/qalu_mul.ok, check/qalu_mul.tst: New files implementing + simple test cases for qmul and qdiv. + +2013-01-30 Paulo Andrade <pcpa@gnu.org> + + * doc/body.texi: Correct "jmpi" description that incorrectly + told it was possible to pass any address as jump target. The + only way to do that is "movi+jmpr". + +2013-01-30 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-cpu.c: Correct undefined behavior code. + http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56143 + +2013-01-29 Paulo Andrade <pcpa@gnu.org> + + * configure.ac: Use AC_CONFIG_HEADERS instead of AC_CONFIG_HEADER + to have HAVE_CONFIG_H defined with latest aclocal. + + * include/lightning/jit_private.h, lib/lightning.c: Add new + abstraction to use an heuristic to calculate amount of space + required for jit generation, and code to reallocate buffer if + did miscalculate it. + + * lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_x86.c: + Update to use new code to estimate and resize of required buffer + for jit code. + + * lib/jit_x86-cpu.c: Minor cosmetic change to avoid adding a + non required rex prefix when calling a function pointer stored + in a register. + +2013-01-24 Paulo Andrade <pcpa@gnu.org> + + * check/Makefile.am: "make debug" target should pass only + the main test tool program as argument for running gdb + + * configure.ac: Add the --enable-assertions options. + + * doc/Makefile.am, doc/body.texi, doc/lightning.texi: + Major rewrite of the documentation to match the current + implementation. + + * doc/version.texi: Automatic date update. + + * doc/ifib.c, doc/incr.c, doc/printf.c, doc/rfib.c, doc/rpn.c: + Implementation of the documentation examples, that are also + compiled during a normal build. + + * doc/p-lightning.texi, doc/porting.texi, doc/toc.texi, + doc/u-lightning.texi, doc/using.texi: These files were + renamed in the documentation rewrite, as the documentation + was significantly trimmed due to full removal of the porting + chapters. Better porting documentation should be added but + for the moment it was just removed the documentation not + matching the implementation. + +2013-01-18 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_note.c: Correct bounds check and wrong code keeping + a pointer that could be changed after a realloc call. + +2013-01-18 Paulo Andrade <pcpa@gnu.org> + + * check/3to2.tst, check/add.tst, check/allocai.tst, check/bp.tst, + check/call.tst, check/ccall.c, check/clobber.tst, check/divi.tst, + check/fib.tst, check/ldsti.tst, check/ldstr-c.tst, check/ldstr.tst, + check/ldstxi-c.tst, check/ldstxi.tst, check/ldstxr-c.tst, + check/ldstxr.tst, check/lightning.c, check/rpn.tst, check/stack.tst, + check/varargs.tst, include/lightning.h, + include/lightning/jit_private.h, lib/jit_arm.c, lib/jit_disasm.c, + lib/jit_mips.c, lib/jit_note.c, lib/jit_ppc.c, lib/jit_print.c, + lib/jit_x86.c, lib/lightning.c: Extend the "jit_note" abstraction + with the new "jit_name" call, that receives a string argument, and + should usually be called to mark boundaries of functions of code + generating jit (that is, it is not expected that the language + generating jit map its functions to jit functions). + +2013-01-17 Paulo Andrade <pcpa@gnu.org> + + * check/add.tst, check/allocai.tst, check/bp.tst, check/divi.tst, + check/fib.tst, check/lightning.c, include/lightning/jit_arm.h, + include/lightning/jit_mips.h, include/lightning/jit_ppc.h, + include/lightning/jit_private.h, include/lightning/jit_x86.h: + Make JIT_RET, JIT_FRET and JIT_SP private. These should not be + used in any operations due to frequently having special + constraints (usually JIT_FRET). JIT_FP must be made available + because it must be used as the base register to access stack + space allocated with jit_allocai. + +2013-01-14 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/lightning.c: Add an extra align + argument to the jit_data call (that should be made private), + so that it should not align strings at 8 bytes. + Correct the jit_note call to include the null ending byte + when adding label/note names to the "jit data section". + +2013-01-11 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_note.c: New file implementing a simple string+integer + annotation, that should be used to map filename and line number + to offsets in the generated jit. + + * include/lightning.h, lib/lightning.c: Update for the new + note code. + Add an extra mandatory argument to init_jit, that is used + as argument to bfd_openr. + Change from generic void* to char* the argument to jit_note + and add an extra integer argument, to map to filename and + line number. + + * check/ccall.c, check/lightning.c, include/lightning/jit_private.h, + lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips.c, lib/jit_ppc.c, + lib/jit_print.c, lib/jit_x86.c: lib/Makefile.am: Update for the + new annotation code. + + * configure.ac, check/Makefile.am: Update to work with latest + automake. + +2013-01-09 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/jit_arm.c, jit_mips-fpu.c, + lib/jit_mips.c, lib/jit_print.c, lib/jit_x86.c, lib/lightning.c: + Remove the jit_code_getarg_{f,d} and jit_code_pusharg{i,r}_{f,d} + calls, replacing them with the new, internal only, jit_movr_w_f, + jit_mov{r,i}_f_w, jit_movr_ww_d, and jit_mov{i,r}_d_ww, that + better describe the operation being done, and allow removing + the hackish code to detect special conditions for arm when + moving from/to vfp from/to a grp register pair. + Rename jit_code_retval_{f,d} to jit_code_x86_retval_{f,d} as + it is specific to 32 bit x86, and used to move abi return + value in x87 register to a sse register. + +2013-01-05 Paulo Andrade <pcpa@gnu.org> + + * check/cccall.c, check/ccall.ok: New test case to validate + interleaved calls from/to C code and jit. + + * check/Makefile.am: Update for the new ccall test case. + + * include/lightning.h, lib/lightning.c: Add the new jit_address + call that returns the real/final address of a "note" in the + generated jit. It requires a jit_node_t as returned by the + jit_note call, and is only valid after calling jit_emit. + Add an intermediate solution to properly handle arm + soft and softfp modes that move a double to an integer register + pair. Currently it just adds extra tests for the condition, + but the proper solution should be to have extra lightning + codes for these conditions, codes which should be only used + by the backends that need it, and merged with the existing + jit_pusharg*_{f,d}. + + * include/lightning/jit_private.h: Add new jit_state_t flag + to know it finished jit_emit, so that calls to jit_address + are valid. + + * lib/jit_mips.c: Correct abi implementation so that the + new ccall test case pass. Major problem was using + _jit->function.self.arg{i,f} as boolean values, but that + would cause lightning.c:patch_registers() to incorrectly + assume only one register was used as argument when calling + jit_regarg_p(); _jit->function.self.arg{i,f} must be the + number of registers used as arguments (in all backends). + + * lib/jit_x86.c: Add workaround, by marking %rax as used, + to a special condition, when running out of registers and the + allocator trying to spill and reload %rax, but %rax was used + as a pointer to a function, what would cause the reload to + destroy the return value. This condition can be better + generalized, but the current solution is good enough. + + * include/lightning/jit_ppc.h, lib/jit_ppc-cpu.c, lib/jit_ppc.c: + Rewrite logic to handle arguments, as the original code was + written based on a SysV pdf about the generic powerpc ABI, + what did "invent" a new abi for the previous test cases, but + failed in the new ccall test in Darwin PPC. Now it properly + handles 13 float registers for arguments, as well as proper + computation of stack offsets when running out of registers + for arguments. + +2013-01-02 Paulo Andrade <pcpa@gnu.org> + + * check/float.tst: Correct test case to match ppc also + converting positive infinity to 0x7fffffff. + + * lib/jit_arm-swf.c: Correct typos with double underscores. + + * lib/lightning.c: Correct remaining wrong reverse jump logic. + +2012-12-29 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Correct both, wrong and confusing logic + to compute the reverse of a jump. Now it properly matches + C semantics for "eq" (==) and "ne" (!=) and correct computation + of reverse of "uneq" as "gt". + + * check/branch.tst: Update "ne" float branch check that + previously happened to be wrongly tested with a NaN argument. + +2012-12-29 Paulo Andrade <pcpa@gnu.org> + + * check/float.ok, check/float.tst: New test cases implementing + extensive validation of float comparison and branch code + generation as well as integer conversion, involving NaN and + [+-]Inf. + + * lib/jit_arm-swf.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: + Correct bugs found by new float test case. + + * lib/jit_x86.c: Correct cut&paste error added in commit to + convert jit_arg* return value to a jit_node_t*, that would + cause it to not properly handle double arguments in ix86. + + * check/Makefile.am: Update for the new test case. + +2012-12-28 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c, include/lightning.h, lib/jit_arm.c, + lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c, lib/jit_x86.c, + lib/lightning.c: Change return value of jit_arg{,_f,_d} to + a jit_node_t* object, that should be used as argument to + jit_getarg_{c,uc,s,us,i,ui,l,f,d}. This just requires changing + from jit_int32_t to jit_pointer_t (or jit_node_t*) the "handle" + for the getarg calls, with the benefit that it makes it easy + to implement patching of the stack address of non register + arguments, this way allowing to implement variable size stack + frames if applicable; useful if there are too many registers and + jit functions uses only a few callee save registers. + +2012-12-27 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c, lib/jit_mips-cpu.c, lib/jit_mips.c: Correct + regressions when patching jit_calli for a forward function. + + * lib/jit_ppc-cpu.c: Correct wrong arguments to ANDI opcode + in jit_getarg_u{c,s} implementation. + +2012-12-23 Paulo Andrade <pcpa@gnu.org> + + * check/call.ok, check/call.tst: New test cases to validate + simple typed argument and return values in function calls. + + * check/lightning.c: Properly handle jit_movi of labels for + backward and forward code labels. + + * check/Makefile.am: Update for new test case. + +2012-12-23 Paulo Andrade <pcpa@gnu.org> + + * check/carry.ok, check/carry.tst: New test case to validate + carry condition handling. + + * check/Makefile.am: Update for new test case. + +2012-12-22 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c, lib/jit_ppc.c: Implement logic for + jit_htonr for big endian, so that ppc (big endian) pass the + new clobber.tst test case. + +2012-12-22 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm.c: Correct use of wrong argument offset + variable in armv7l or float/double argument for varargs + function in armv7hl. + Correct jit_getarg* logic in software float mode to + match expected behavior in other backends, that is, if + a function is not called, it is safe to use a few lightning + calls before a next jit_getarg* call, as done in the test + case check/stack.tst. The proper solution should be to + extend the parser in lib/lightning.c to check if there is + some float operation that will call some (libgcc?) function, + but software float arm should be a very uncommon backend for + lightning, so, just load the already in place arguments + saved to stack, assuming the register argument was clobbered + (what should not be the case most times...). + +2012-12-22 Paulo Andrade <pcpa@gnu.org> + + * check/clobber.ok, check/clobber.tst: New test case doing + extensive validation tests to ensure registers not used in + a operation are not clobbered. + + * check/Makefile.am: Update for new test case. + +2012-12-21 Paulo Andrade <pcpa@gnu.org> + + * lib/lightning.c: Partially rewrite/revert code to compute + initial register live state at the start of a basic block. + The original logic was corrupted when adding optimizations + to do as few computations as possible in jit_update. The + reglive field must be always a known set of live registers + at the start of a basic block. The value that was incorrect + was the regmask field, that must be the set of registers + that are in unknown state, because they are not known live, + neither set (or possibly not set) in the basic block, and + *must* store the state at the start of the basic block. + +2012-12-20 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_ppc.h: Correct mismatch of JIT_F{1,5} + with enum codes, that were correct, and returned by jit_f(). + + * lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_ppc.c: Properly + implement and better describe values when generating stack + frames. + +2012-12-18 Paulo Andrade <pcpa@gnu.org> + + * check/stack.ok, check/stack.tst: New files to test data + integrity on a deep chain of stack frames. + + * lib/jit_arm.c, lib/jit_arm-cpu.c, lib/jit_mips.c, + lib/jit_mips-cpu.c, lib/jit_ppc.c, lib/jit_ppc-cpu.c, + lib/jit_x86.c, lib/jit_x86-cpu.c: Calculate _jit->function->stack + in the emit stage, otherwise it will calculate it wrong if + need to jit_allocai space to spill registers. + + * lib/lightning.c: Correct wrong offset when updating the + "current" jit function pointer in the code that may need to + allocate stack space to spill registers. + + * check/lightning.c: Correct off by one data space check. + + * check/Makefile.am: Update for new test case. + +2012-12-17 Paulo Andrade <pcpa@gnu.org> + + * check/fop_abs.ok, check/fop_abs.tst, check/fop_sqrt.ok, + check/fop_sqrt.tst: New files implementing simple test cases + for the extra float operations. + + * check/Makefile.am: Update for new test cases. + + * check/alu.inc: Add an extra macro to check for unordered + equality on tests where it is expected to use NaN as an + argument. + + * check/lightning.c: Minor change for proper/common argument + syntax handling ommiting arguments to options. + +2012-12-17 Paulo Andrade <pcpa@gnu.org> + + * check/Makefile.am: Automatically generate pattern list + of tests with alternate jit generation options. This should + prevent typos and needing to change multiple places after + a change. + +2012-12-14 Paulo Andrade <pcpa@gnu.org> + + * check/lightning.c: Remove the ".cpu name value" syntax, + as it was not able to do proper changes before the jit + internal data structure was initialized. Now it supports + several getopt options to force using different jit + generation options, effectively replacing the previous + syntax. + + * check/run-test: Add simple extra logic to handle differently + named test scripts, used to test things like x87 coprocessor + in ix86, and arm instruction set or software float in armv7l. + + * configure.ac: Add some AC_RUN_IFELSE calls to figure at + compile time if can test different code generation options, + and update Makefile generation accordingly. + + * check/Makefile.am, lib/jit_arm.c, lib/jit_x86.c: Update to + properly work with the test tool updating the jit_cpu global + information. + + * check/check.arm.sh, check/check.swf.sh, check/check.x87.sh: + New wrapper files passing -mthumb=0, mvfp=0 and -mx87=1 to + the test tool, if applicable, so that it can validate alternate + code generation options on test hosts that support them. + +2012-12-14 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-x87.c, lib/jit_x86.c: Correct test cases in ix86 + when using the x87 coprocessor instead of sse2+. + +2012-12-14 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, include/lightning/jit_private.h, + lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_x86.c, + lib/lightning.c: Make jit_ellipsis implementation not + backend specific. It is not intended to handle va_list + like objects at runtime, as jit_arg* and jit_getarg* + return constant values resolved at parse time, so, effectively + it is not possible to create printf like jit functions, as + there is no va_start, va_arg, va_end, etc, abstraction. This + limitation should be kept for the sake of making new ports + easier. + +2012-12-14 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/lightning.c: Add two extra wrapper + functions to avoid need for excess pointer to/from word casts. + + * check/lightning.c: Only need for pointer to/from word cast + now is jit_movi, update accordingly. + +2012-12-13 Paulo Andrade <pcpa@gnu.org> + + * check/varargs.ok, check/varargs.tst: New test cases implementing + simple varargs calls with a large amount of arguments to exercise + excess arguments on stack. + + * include/lightning.h: Include config.h if HAVE_CONFIG_H is + defined. + + * lib/jit_arm.c: Allocate a fpr register, not a gpr one for + temporary when pushing varargs arguments in the stack. + + * lib/jit_arm-swf.c: Correct code changing the wrong offset + in jit_absr_d and jit_negr_d in software float. + + * lib/jit_mips.c: Correct calculation of offsets of arguments + on stack. + + * lib/jit_ppc.c: Correct bogus logic for "next" offset of arguments + on stack and adjust for fixed offset of stack arguments. + +2012-12-12 Paulo Andrade <pcpa@gnu.org> + + * include/lightning.h, lib/jit_arm.c, lib/jit_mips.c, + lib/jit_ppc.c, lib/jit_x86.c, lib/lightning.c: Change jit_prepare + to no longer receive an argument. If receiving an argument, it + should be an ABI specifier, not a boolean if varargs or not, + and add the new jit_ellipsis call, to specify where the + ellipsis is in the C prototype of the function being called. + Note that currently it is not supported to define varargs + functions and it will be ignored if calling jit_ellipsis not + in a prepare/finish* block, but this should be addressed. + + * check/allocai.tst, check/alu_add.tst, check/alu_and.tst, + check/alu_com.tst, check/alu_div.tst, check/alu_lsh.tst, + check/alu_mul.tst, check/alu_neg.tst, check/alu_or.tst, + check/alu_rem.tst, check/alu_rsh.tst, check/alu_sub.tst, + check/alu_xor.tst, check/alux_add.tst, check/alux_sub.tst, + check/bp.tst, check/branch.tst, check/cvt.tst, check/divi.tst, + check/fib.tst, check/ldsti.tst, check/ldstr-c.tst, + check/ldstr.tst, check/ldstxi-c.tst, check/ldstxi.tst, + check/ldstxr-c.tst, check/ldstxr.tst, check/rpn.tst, + check/lightning.c: Update for the change to jit_prepare and + addition of jit_ellipsis. + +2012-12-11 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc-cpu.c: Make movr a function that checks arguments + so that other code can safely assume it is a noop if src and dst + are the same register. + Implement rem{r,i}{,_u} as a div{,u}/mul/sub. + Correct ANDIS, ORIS and XORIS calls to cast the argument to + unsigned before the shift to avoid an assertion if the argument + had the topmost bit set. + Implement lshi, rshi and rshi_u as functions to test for a + zero argument, that would otherwise trigger an assertion when + computing the shift value. + Do a simple implementation of bm{s,c}{r,i} with a temporary, + "andr" of arguments and jump based on comparison with zero. + Correct typo in ldxi_c. + + * lib/jit_ppc-fpu.c: Correct wrong arguments to FDIV* and STF*. + + * lib/jit_ppc.c: Correct wrong check for 6 instead of 8 integer + arguments in registers. If calling a varargs function and + passing a float or double argument, also either store the + value in the stack or in integer registers, as varargs functions + do not fetch it from float registers. + Add "case" for new functions and incorrectly missing ones. + Call libgcc's __clear_cache, that should know what to do + if the hardware needs flushing cache before execution. + + * lib/lightning.c: Do a simple/trivial logic in jit_regset_scan1, + that should make it easier for the compiler to optimize it, and + that also corrects the previously wrong code for big endian, and + that was causing problems in ppc due to not saving all callee save + registers as it was not "finding" them in the regset due to the + little endian assumption bug. + +2012-12-11 Paulo Andrade <pcpa@gnu.org> + + * configure.ac: Only default to using the builtin disassembler + if on GNU/Linux. This should be temporary, due to requiring + /proc/self/exe. + Correctly check $target_cpu for powerpc. + + * include/lightning/jit_ppc.h: Correctly implement jit_v_num. + + * include/lightning/jit_private.h: Declare proper prototype + for jit_init_debug and jit_finish_debug. + + * lib/jit_ppc-cpu.c: Remove code to save/restore callee save + float registers, as it is not required since those float + registers are not usable currently. + Change prolog and epilog generation to, at least comparing + code, match what gcc generates in "gcc -O0", but it is still + failing in Darwin PPC, apparently due to the __clear_cache + call not being enough, as frequently it will also fail to + execute, and the code buffer is all zeroes. + + * lib/lightning.c: Do not fail in jit_regset_scan1 calls due + to passing 64 as argument on computers with 64 registers. + +2012-12-10 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-cpu.c: Correct all current test cases. + Call the "xori" not the "XORI" macro for jit_xori implementation, + as the XORI macro handles only 16 bit unsigned values. + Call the "movr" macro, not the "movi" macro in the special + case of adding or subtracting zero. + Use the proper temporary register in the jit_andr implementation. + +2012-12-09 Paulo Andrade <pcpa@gnu.org> + + * check/alu.inc, check/alu_add.ok, check/alu_add.tst, + check/alu_and.ok, check/alu_and.tst, check/alu_com.ok, + check/alu_com.tst, check/alu_div.ok, check/alu_div.tst, + check/alu_lsh.ok, check/alu_lsh.tst, check/alu_mul.ok, + check/alu_mul.tst, check/alu_neg.ok, check/alu_neg.tst, + check/alu_or.ok, check/alu_or.tst, check/alu_rem.ok, + check/alu_rem.tst, check/alu_rsh.ok, check/alu_rsh.tst, + check/alu_sub.ok, check/alu_sub.tst, check/alu_xor.ok, + check/alu_xor.tst, check/alux_add.ok, check/alux_add.tst, + check/alux_sub.ok, check/alux_sub.tst, check/branch.ok, + check/branch.tst: New test cases for arithmetic and branch + tests. + + * check/Makefile.am: Update for new test cases. + + * include/lightning/jit_private.h: Make the jit_reg_free_p + macro shared by all backends. Previously was added for the + arm backend, but is useful in the x86_64 backend when checking + state of "special purpose register". + Also add the new jit_class_named register class, that must be + or'ed with the register value if calling jit_get_reg expecting + an specific value, because the specific register value may be + zero, that previously was treated as no register requested. + + * lib/jit_arm-cpu.c: Correct argument order for T2_MVN. + + * lib/jit_arm-swf.c: Call the proper function for double + divide. The "software float" implementation just calls + libgcc functions. + + * lib/jit_arm.c: Return float/double values in the float + register if using the hard float ABI. + + * lib/jit_x86-cpu.c: Change the can_sign_extend_int_p macro + to not include -0x80000000L, because there is code that + "abuses" it and thinks it can negate the immediate value + after calling that macro. + Correct implementation of jit_subi that had a wrong code + patch logic doing subtraction with reversed arguments. + Correct REX prefix calculation in the jit_muli implementation. + Correct logic to get/unget %*ax and %*dx registers in divremr + and divremi. + Correct divremi that was using the symbolic, unique %*ax + value in on place (not using the _REGNO name suffix). + Correct cut&paste error causing it to use "xor" instead of + "or" in one code path of the jit_ori implementation. + Correct several flaws when clobbering registers and/or when + one of the arguments was %*cx in the rotshr wrapper function + implementing most shift operations. + + * lib/lightning.c: No longer expect that the backend be smart + enough to know what to do when asking for a named register + if that register is already an argument or is live. It fails + if it is an argument, or if register is live, fails if cannot + spill. + No longer incorrectly assume that eqr_{f,d} and ltgr_{f,d} are + safe to inverse value tests in jump thread optimization. + +2012-12-05 Paulo Andrade <pcpa@gnu.org> + + * check/Makefile.am, check/cvt.ok, check/cvt.tst: Add new + "cvt" test case to test conversion from/to int/float types. + + * check/lightning.c: Only define truncr_{f,d}_l in 64 bit mode. + + * include/lightning.h: Correct typo that caused it to define + jit_truncr_{f,d}_l in 32 bit mode. + + * lib/jit_arm-cpu.c: Avoid assertion failure in the signed/unsigned + extend opcodes generation as it shares an interface for 3 argument + opcode generation. + + * lib/jit_x86-cpu.c: Correct wrong argument passed to + jit_unget_reg in the andi implementation and wrong byte + unsigned extend code generation. + + * lib/jit_x86-sse.c: Correct conversion from "word" to float or + double as is dependent on wordsize. + +2012-12-05 Paulo Andrade <pcpa@gnu.org> + + * check/ldstr-c.ok, check/ldstr-c.tst, check/ldstxi-c.ok, + check/ldstxi-c.tst, check/ldstxr-c.ok, check/ldstxr-c.tst: + New test case files testing load clobbering the base and/or + index register; + + * check/ldst.inc: New file with common definition for all the + ldst* test cases. + + check/Makefile.am, check/ldsti.tst, check/ldstr.tst, + check/ldstxi.tst, check/ldstxr.tst: Update for new common + definitions file and new register clobber ldst tests. + +2012-12-05 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-fpu.c: Correct wrong register order in stxr_{f,d} + in the mips backend. + +2012-12-05 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_arm-vfp.c: Correct regression found in armv7l with + latest test cases. + +2012-12-05 Paulo Andrade <pcpa@gnu.org> + + * check/ldstxi.tst, check/ldstxr.tst: Correct wrong argument + order for 32 bit mode tests. + + * configure.ac: Correct check for ix86 target_cpu. + +2012-12-05 Paulo Andrade <pcpa@gnu.org> + + * check/ldstr.ok, check/ldstr.tst, check/ldsti.ok, + check/ldsti.tst, check/ldstxr.ok, check/ldstxr.tst, + check/ldstxi.ok, check/ldstxi.tst: + New test case files exercising a very large amount of + register combinations to verify load/store implementation. + + * check/Makefile.am: Update for new test cases. + + * lib/jit_x86-cpu.c: Correct wrong argument order when + computing REX prefix for {ld,st}r_T codes; + +2012-12-04 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips + jit_sqrtr_{f,d} codes. + + * check/all.tst, include/lightning.h, lib/jit_print.c: Change + declaration order and call order in all.tst of {add,sub}c and + {add,sub}x. *c must be called before to set the carry and *x + second to use the carry and keep it set. The wrong call order + was causing all.tst to fail in mips, where a register is + allocated to keep a global carry state. + +2012-12-04 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_mips.h, lib/jit_mips-cpu.c, + lib/jit_mips-fpu.c, lib/jit_mips.c: Correct float/double + argument handling and make the mips backend pass the initial + test cases. + + * include/lightning.h, ib/jit_print.c, lib/lightning.c: + Add extra enum values for argument handling functions that + could not be abstracted to the current codes, that is, when + float values need to move from/to gpr from/to fpr. It would + be more tempting to add such primitives, but they would have + wordsize limitations, and it is not expected to add codes + with one gpr argument for 64 bit and two for 32 bit. + + * lib/jit_ppc.c: Check _jit->function before calling jit_epilog() + to avoid a runtime exception. + +2012-12-04 Paulo Andrade <pcpa@gnu.org> + + * include/lightning/jit_mips.h, lib/jit_mips.c: Update to + make the mips backend compile in a qemu image. + + * lib/jit_ppc.c: Minor adaptations to help in having the + ppc backend compilable. + +2012-12-03 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, include/lightning/jit_private.h, lib/jit_arm-cpu.c, + lib/jit_arm-swf.c, lib/jit_arm.c, check/Makefile.am: Correct + implementation of the arm backend port to build and pass the + current test cases. Tested on armv7 with softfp abi. + + * lib/jit_disasm.c: Rename and change prototype of static + disassemble function as in the arm backend it is required + to access state information stored in the jit_state_t object. + + * check/3to2.tst, check/add.tst: Correct test case code assuming + JIT_RO and JIT_RET are the same, and even if they are the same, + the logic was incorrect because it must always call jit_retval* + to fetch a function call return before any other instruction. + The arm backend hash a special condition if jit_retval is not + called, because "r0" is not JIT_R0, but is JIT_RET and *also* + the first argument for a called function, so JIT_RET must be + only used as an argument to jit_retval. + +2012-12-03 Paulo Andrade <pcpa@gnu.org> + + * check/all.tst, check/lightning.c: Only declare or use 64 bit + interfaces on 64 bit builds. + + * check/fib.tst: Use simpler logic to not need preprocessor + conditionals for 32 or 64 bit. + + * include/lightning.h: Only declare 64 bit macros on a 64 bit + build. Code using lightning must know about wordsize and the + jit generation limitations, also, this way it generates a + compile time failure, not a runtime assertion. + + * include/lightning/jit_x86.h: Correct typo in macro name. + + * lib/jit_arm.c, lib/jit_arm-cpu.c, lib/jit_mips.c, + lib/jit_mips-cpu.c, lib/jit_ppc.c, lib/jit_ppc-cpu.c, + lib/jit_x86.c, lib/jit_x86-cpu.c: Correct wrong code to get + current jit function pointer. + + * lib/lightning.c: Move call to the simplify() optimization + to after register liveness is known. Previous code did work + by accident but now with proper test cases the problem was + noticed. + + * lib/jit_disasm.c: Always cast bfd_vma to long long when + passing it as printf argument. + +2012-12-03 Paulo Andrade <pcpa@gnu.org> + + * configure.ac, check/Makefile.am, check/check.sh, + doc/Makefile.am, include/lightning/Makefile.am, + lib/Makefile.am: Correct make distcheck. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_ppc.c: Assign copyright ownership to FSF. + + * lib/jit_x86-cpu.c: Correct integer multiplication that was + generating code with reversed register arguments. + + * check/rpn.ok, check/rpn.tst: New test case file. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + + * lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c: + Actually change copyright owner to FSF as avertised. + + * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, + lib/jit_arm-vfp.c, lib/jit_arm.c, + lib/jit_mips-cpu.c, lib/jit_mips-fpu.c, lib/jit_mips.c, + lib/jit_ppc-cpu.c, lib/jit_ppc-fpu.c, lib/jit_ppc.c: New + files implementing initial code different jit backends. + + * include/lightning/jit_private.h: Add extra field to the + private jit_patch_t type, required by the arm port. + + * lib/Makefile.am: Update for the new backend implementation + files. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + + * check/Makefile.am: Add proper "make clean" rule and missing + check.sh to EXTRA_DIST. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + + * .gitignore: Update pattern of ignored files. + + * check/Makefile.am: Add rule to build liblightning.la dependency + in case of running "make check" before building the library. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + + * lightning/Makefile.am, lightning/asm-common.h, + lightning/core-common.h, lightning/fp-common.h, + lightning/funcs-common.h, lightning/i386/Makefile.frag, + lightning/i386/asm-32.h, lightning/i386/asm-64.h, + lightning/i386/asm.h, lightning/i386/core-32.h, + lightning/i386/core-64.h, lightning/i386/core.h, + lightning/i386/fp-32.h, lightning/i386/fp-64.h, + lightning/i386/fp.h, lightning/i386/funcs.h, + lightning/ppc/asm.h, lightning/ppc/core.h, + lightning/ppc/fp.h, lightning/ppc/funcs.h, + lightning/sparc/asm.h, lightning/sparc/core.h, + lightning/sparc/fp.h, lightning/sparc/funcs.h: + Removed. The core logic is used in the new code, and new mips + and arm ports will be added. At first, sparc will not be + supported as it has not yet been ported to the new engine. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + + * tests/Makefile.am, tests/3to2.c, tests/3to2.ok, tests/add.c, + tests/add.ok, tests/allocai.c, tests/allocai.ok, tests/bp.c, + tests/bp.ok, tests/divi.c, tests/divi.ok, tests/fib.c, tests/fib.ok, + tests/fibdelay.c, tests/fibdelay.ok, tests/fibit.c, tests/fibit.ok, + tests/funcfp.c, tests/funcfp.ok, tests/incr.c, tests/incr.ok, + tests/ldst.c, tests/ldst.ok, tests/ldxi.c, tests/ldxi.ok, + tests/modi.c, tests/modi.ok, tests/movi.c, tests/movi.ok, + tests/printf.c, tests/printf.ok, tests/printf2.c, tests/printf2.ok, + tests/ret.c, tests/ret.ok, tests/rpn.c, tests/rpn.ok, tests/rpnfp.c, + tests/rpnfp.ok, tests/sete.c, tests/sete.ok, tests/testfp.c, + tests/testfp.ok, tests-run-test: Removed previous test suite, in + favor of a newer one in the check subdirectory. + + * check/3to2.ok, check/3to2.tst, check/add.ok, check/add.tst, + check/allocai.ok, check/allocai.tst, check/bp.ok, check/bp.tst, + check/divi.ok, check/divi.tst, check/fib.ok, check/fib.tst: + New sample input for the new test program, loosely matching + several of the previous test cases. + + * check/Makefile.am: New test suite makefile. + + * check/check.sh, check/run-test: New wrapper files for the + new test suite. + + * check/lightning.c: New file. The main driver of the new test + suite, that compiles to a parser of a very simple assembly like + language, generates jit and executes it. + + * check/all.tst: New file. A generic debug and sample test file + with a directive to prevent it from being executed, and useful to + read disassembly of all possible instructions, using a fixed set + of registers. + + * include/Makefile.am, include/lightning.h, + include/lightning/Makefile.am, include/lightning/jit_arm.h, + include/lightning/jit_mips.h, include/lightning/jit_ppc.h, + include/lightning/jit_private.h, include/lightning/jit_x86.h, + lib/Makefile.am, lib/jit_disasm.c, lib/jit_print.c, + lib/jit_x86-cpu.c, lib/jit_x86-sse.c, lib/jit_x86-x87.c, + lib/jit_x86.c, lib/lightning.c: New files. These files are + written from scratch, only by <pcpa@gnu.org>, and have now + copyright assignment to the FSF. This is the core of the new + lightning rework. Previously it was integrated in code with + a garbage collector and several custom types like vectors and + hash tables, so this first code merge with lightning converts + that code into a library extracting only the jit bits, and at + first only for x86_64 GNU/Linux. + + * lightning.h, m4/lightning.m4: Removed. These are no longer + required in the new lightning code. + + .gitignore, Makefile.am, configure.ac: Update for the new + lightning code. + +2012-12-02 Paulo Andrade <pcpa@gnu.org> + * .cvsignore: Removed for extra cleanup. + + * build-aux: Rename directory to m4. + + * m4: Renamed to "default" name and for consistency with merge + with code rework to be imported in lightning. + + * .gitignore, configure.ac, Makefile.am, doc/Makefile.am: + Update for build-aux to m4 rename. + +2012-12-01 Paulo Andrade <pcpa@gnu.org> + + * opcode/Makefile.am, opcode/Makefile.in, opcode/ansidecl.h, + opcode/bfd.h, opcode/dis-asm.h, opcode/dis-buf.c, opcode/disass.c, + opcode/i386-dis.c, opcode/i386.h, opcode/ppc-dis.c, opcode/ppc-opc.c, + opcode/ppc.h, opcode/sparc-dis.c, opcode/sparc-opc.c, opcode/sparc.h, + opcode/sysdep.h: Removed. Do not bundle GNU binutils files. + + * aclocal.m4, configure, Makefile.in, config.h.in, doc/Makefile.in, + lightning/Makefile.in, tests/Makefile.in: Removed. Do not maintain + autogenerated files that also generate too much diff noise when + regenerated in git. + + * build-aux/help2man, build-aux/texinfo.tex, build-aux/texi2dvi: + Removed. Buildenvironment must have an up to date version from + upstream installed. + + * build-aux/config.guess, build-aux/config.sub, build-aux/depcomp, + build-aux/install-sh build-aux/mdate-sh build-aux/missing: Removed. + Do not maintain a copy of automake files in git. Release tarballs + must use an up to date version. + + * lightningize.in, doc/lightningize.1: Removed. Do not encourage + bundling lightning in other packages. It should use a system package + or a proper thirdy part subdirectory. + + * INSTALL: Removed. Autoreconf removes it and creates a symlink + when regenerating files, so, avoid conflicts in git and let + automake create the symlink. + + * .gitignore: Add INSTALL and autogenerated files. + + * configure.ac, Makefile.am: Update for removal of opcode subdir, + auto generated files and lightningize. + + * tests/Makefile.am, tests/3to2.c, tests/add.c, tests/bp.c, + tests/fib.c, tests/fibdelay.c, tests/fibit.c, tests/funcfp.c, + tests/incr.c, tests/printf.c, tests/rpn.c, tests/rpnfp.c, + tests/sete.c, tests/testfp.c: Update for removal of opcode subdir. + + * doc/Makefile.am: Update for removal of lightningize. + + * configure.ac, lightning/ppc/funcs.h, lightning/sparc/funcs.h, + lightning/i386/fp.h, lightning/i386/core.h, lightning/i386/asm.h, + tests/3to2.c, tests/add.c, tests/bp.c, tests/fib.c, tests/fibdelay.c, + tests/fibit.c, tests/funcfp.c, tests/incr.c, tests/printf.c, + tests/rpn.c, tests/rpnfp.c, tests/sete.c, tests/testfp.c: + Remove LIGHTNING_CROSS, it is half supported and incomplete. + + * tests/3to2.c, tests/funcfp.c, tests/rpnfp.c: Remove preprocessor + check on JIT_FPR. If no hardware registers are available, the backend + must provide an alternative for software float. + + * lightning/ppc/core.h, lightning/sparc/core.h, tests/Makefile.am: + Remove JIT_NEED_PUSH_POP. It is absolutely not trivial to implement + properly on some backends due to stack alignment constraints, and + whenever it is required, using jit_allocai and using a properly + aligned stack vector, or a heap buffer, is better. + + * tests/push-pop.c, tests/push-pop.ok: Removed due to + JIT_NEED_PUSH_POP no longer available. + +2011-02-28 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Add jit_add{c,x}{i,r}_l, jit_mulr_{l,ul}_, + fix jit_mul{i,r}_{l,ul}. + +2010-08-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp-64.h: Return patch address from jit_bXYr_{f,d}. + Reported by Paulo César Pereira de Andrade. + * lightning/ppc/fp.h: Likewise. + * lightning/sparc/fp.h: Implement FP branches. + +2010-08-18 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp-64.h: Fix jp in jit_bner_{f,d}. + +2010-08-18 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp-32.h: Fix -D_ASM_SAFETY compilation. + Reported by Paulo César Pereira de Andrade. + +2010-08-15 Paolo Bonzini <bonzini@gnu.org> + + * tests/ldst.c: Update. + * tests/Makefile.am: Use -ffloat-store to compile it. + +2010-08-15 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h (jit_ldr_c, jit_ldxr_c, jit_ldr_s, + jit_ldxr_s): Move... + * lightning/i386/core-32.h: ... here. + * lightning/i386/core-64.h (jit_ldr_c, jit_ldxr_c, jit_ldr_s, + Use movsbq and movswq. + +2010-08-10 Paulo César Pereira de Andrade <pcpa@mandriva.com.br> + + * lightning/i386/core-32.h (jit_replace): Use MOVLrr, not MOVLir. + (jit_movbrm): Check index register as well. + * lightning/i386/fp-64.h: Add jit_extr_f_d and jit_extr_d_f. + * lightning/fp-common.h: Add jit_extr_f_d and jit_extr_d_f. + +2010-07-28 Paolo Bonzini <bonzini@gnu.org> + + * tests/Makefile.am: Add ldst test. + * tests/Makefile.in: Regenerate. + * tests/ldst.c: New. + * tests/ldst.ok: New. + +2010-07-28 Paolo Bonzini <bonzini@gnu.org> + + * THANKS: Add Paulo Cesar Pereira de Andrade. + * doc/porting.texi: Fix ordering of arguments in jit_stxi. + * lightning/i386/core-32.h (jit_replace): Remove cmp argument. + * lightning/i386/fp-64.h (jit_movi_f): Fix. + +2010-07-26 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-32.h (jit_replace): Move here (removed + 2009-03-01). + +2010-07-19 Paolo Bonzini <bonzini@gnu.org> + + * build-aux/lightning.m4: Always set and replace lightning_frag. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.h.in: Regenerate. + * configure: Regenerate. + * doc/Makefile.in: Regenerate. + * doc/lightningize.1: Regenerate. + * doc/version.texi: Regenerate. + * lightning/Makefile.in: Regenerate. + * opcode/Makefile.in: Regenerate. + * tests/Makefile.in: Regenerate. + +2009-03-01 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Use Mike's macros for x86-64 too. + * lightning/i386/core.h: Remove jit_replace. + + 2009-02-27 Mike Spivey <mike@comlab.ox.ac.uk> + + * lightning/i386/core.h: Rewrite shift-handling macros. + * lightning/fp-common.h: Fix jit_extr_{f_d,d_f}. + +2009-02-17 Mike Spivey <mike@comlab.ox.ac.uk> + + * lightning/i386/core.h: Fix blunder in operand order. + +2009-02-17 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp-32.h: Another fix to jit_fp_btest. + +2009-02-17 Paolo Bonzini <bonzini@gnu.org> + + * lightning/fp-common.h: Define double branches if missing. + * lightning/i386/asm.h: Define JC and JNC mnemonics. + * lightning/i386/fp-32.h: Fix jit_fp_btest. All reported + by Mike Spivey. + +2008-10-09 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/funcs.h (jit_flush_code): Subtract 1 from end. + Reported by Eli Barzilay and Matthew Flatt. + +2008-08-23 Nix <nix@esperi.org.uk> + + * lightning/i386/Makefile.frag: fp-32.h and fp-64.h are target files. + +2008-07-02 Laurent Michel <ldm@engr.uconn.edu> + + * lightning/ppc/funcs.h (jit_flush_code): modified the computation + of start/end. The pointer arithmetic was done without casting. It + prevented compilation with recent gcc versions. + * lightning/ppc/core.h (jit_pushr_i): The offset for the store was + incorrect. Should have been 4 bytes below SP (not above). + * lightning/ppc/core.h (jit_popr_i): The offset for the load was + incorrect. Should have been 0 (not +8). + +2008-06-17 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-64.h: Forward IMULQir to IMULQirr, + fix REXQ order for IMULQirr. + +2008-06-17 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: Fix _rN vs. _rR. + +2008-06-16 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: Use jit_save in jit_replace. Move JIT_R + definition... + * lightning/i386/core-32.h: ... here; define jit_save so that + the core.h has no effect on the 32-bit backend. + * lightning/i386/core-64.h: Place JIT_R1/JIT_R2 in R10/R11, + place outgoing arguments in the right spot from the beginning, + define jit_save, fix jit_reg8/jit_reg16. + +2008-06-15 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Rewrite argument passing to + support up to 6 arguments and generate less code. + +2008-06-14 Laurent Michel <ldm@thorgal.homelinux.org> + + * lightning/i386/core-64.h (jit_movi_l): When the operand is 0, + the XOR should be on a quadword. + * lightning/i386/core-64.h (jit_prolog): Keep 16-byte stack + alignment. + (jit_ret): Always use LEAVE. + +2008-06-13 Laurent Michel <ldm@thorgal.homelinux.org> + + * lightning/i386/core-64.h: Add (void) casts for C++ compatibility. + * lightning/i386/asm.h: Likewise. + +2008-06-12 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: Move JIT_V definition... + * lightning/i386/core-32.h: ... here. + * lightning/i386/core-64.h: ... and here. Avoid dancing between + RSI/RDI and R12/R13, and place JIT_V1/JIT_V2 in R12/R13. + +2008-06-11 Paolo Bonzini <bonzini@gnu.org> + + * build-aux/lightning.m4: Adjust LIGHTNING_BACKENDS, don't + use suffix support to distinguish i386/x86_64. + * lightning/i386/Makefile.frag: Use LIGHTNING_TARGET_FILES + to distribute *-32.h and *-64.h files now. + * lightning/i386/asm-i386: Moved to... + * lightning/i386/asm.h: Include the appropriate subtarget file. + * lightning/i386/core-i386: Moved to... + * lightning/i386/core.h: Include the appropriate subtarget file. + * lightning/i386/fp.h: New, include the appropriate subtarget file. + * lightning/i386/asm-32: Do not include asm-i386.h. + * lightning/i386/asm-64.h: Likewise. + * lightning/i386/core-32: Do not include core-i386.h. + * lightning/i386/core-64.h: Likewise. + * lightning/Makefile.am: Adjust for renamed files. + + * configure.ac: Define LIGHTNING_TARGET here. + * opcode/disass.c: Change list of valid LIGHTNING_TARGET values. + + * lightningize.in: Robustify against missing subtarget files. + +2008-06-11 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-32.h: Use MOVLir instead of jit_movi_l + to implement jit_movi_p. + +2008-06-11 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-32.h: Use separate __APPLE__ and SysV + prolog/ret macros. Subtract 12 bytes in __APPLE__ case to + keep stack aligned, and always use LEAVE in the epilog. + +2008-06-11 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-i386.h: Fix C++ incompatibility. + +2008-06-10 Laurent Michel <ldm@engr.uconn.edu> + + * lightning/i386/core-i386.h: Fix jit_replace8 for + case when one of the operands is _EAX. + +2008-05-19 Paolo Bonzini <bonzini@gnu.org> + + * tests/run-test: Avoid CRLF issues on mingw. + +2008-03-21 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Fix jit_{ld,st}{,x}i_{i,l}. + Remove jit_ld{,x}i_ul. + * lightning/core-common.h: Make jit_ld{,x}{i,r}_ul + always a synonym of the _l variant. + * doc/porting.texi: Document this. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Fix uses of jit_qop_. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Add boolean operations. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-64.h: Add LEAQmr. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Misc bugfixes. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-i386.c: Remove jit_ldr_i, jit_ldxr_i. + * lightning/i386/core-32.h: Add jit_ldr_i, jit_ldxr_i. + * lightning/i386/core-64.h: Add jit_ld{r,xr,i,xi}_{ui,l,ul}; + move jit_ldr_i, jit_ldxr_i, jit_str_l, jit_stxr_l with others. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/asm-common.h: Add _s32P. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Implement long mul/div/mod. + +2008-03-19 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Cast memory address to long for JCCim. + +2008-03-15 Paolo Bonzini <bonzini@gnu.org> + + * lightning/asm-common.h: Add underscores around __unused__ + attribute. + +2008-03-15 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/core.h: Avoid some "value computed is not used" + warnings. + * lightnings/tests/allocai.c: Silence other warnings. + +2008-03-14 Paolo Bonzini <bonzini@gnu.org> + + * lightningize.in: Fix some problems (not all). + +2008-03-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-32.h: Avoid some "value computed is not used" + warnings; reported by Sam Steingold. + +2008-03-08 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-32.h: Fix stxr_c(_EAX, _EBX, _ESI). + +2008-02-13 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-32.h: Avoid redefinition of _r1, reported by + Sam Steingold. + * lightning/i386/asm-64.h: Likewise. + +2008-02-08 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Don't define _VOID, reported + by Reini Urban. + +2008-02-03 Paolo Bonzini <bonzini@gnu.org> + + * build-aux/lightning.m4: Add --with-lightning-prefix option, suggested + by Sam Steingold. + +2008-01-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-64.h: Use CALLsr, not CALLLsr. + +2008-01-13 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-i386.h: Move jit_calli and jit_callr... + * lightning/i386/core-32.h: ... here. + * lightning/i386/core-64.h: Redefine them. + +2008-01-05 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp-32.h: Fix sub(a,0,a). + * lightning/tests/3to2.c: Add new testcases. + * lightning/tests/3to2.ok: Add new testcases. + +2008-01-02 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp-32.h: Fix sub(a,b,a) with a ~= JIT_FPR0. + * lightning/tests/3to2.c: New. + * lightning/tests/3to2.ok: New. + +2007-11-07 Paolo Bonzini <bonzini@gnu.org> + + * opcode/Makefile.am: Fix AM_CPPFLAGS. + +2007-08-12 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-i386.h: Improve encoding of set* instructions. + * lightning/i386/core-64.h: Fix jit_bra_l. + * tests/sete.c: New. + * tests/sete.ok: New. + +2007-06-29 Paolo Bonzini <bonzini@gnu.org> + + * tests/bp.c: Upgrade to GPL/LGPLv3. + * lightning/i386/asm-32.h: Upgrade to GPL/LGPLv3. + * lightning/i386/asm-64.h: Upgrade to GPL/LGPLv3. + * lightning/i386/core-32.h: Upgrade to GPL/LGPLv3. + * lightning/i386/core-64.h: Upgrade to GPL/LGPLv3. + * lightning/i386/fp-64.h: Upgrade to GPL/LGPLv3. + * lightning/sparc/asm.h: Upgrade to GPL/LGPLv3. + * lightning/sparc/core.h: Upgrade to GPL/LGPLv3. + * lightning/sparc/fp.h: Upgrade to GPL/LGPLv3. + * lightning/sparc/funcs.h: Upgrade to GPL/LGPLv3. + * lightning/i386/asm-i386.h: Upgrade to GPL/LGPLv3. + * lightning/i386/core-i386.h: Upgrade to GPL/LGPLv3. + * lightning/i386/fp-32.h: Upgrade to GPL/LGPLv3. + * lightning/i386/funcs.h: Upgrade to GPL/LGPLv3. + * lightning/ppc/asm.h: Upgrade to GPL/LGPLv3. + * lightning/ppc/core.h: Upgrade to GPL/LGPLv3. + * lightning/ppc/fp.h: Upgrade to GPL/LGPLv3. + * lightning/ppc/funcs.h: Upgrade to GPL/LGPLv3. + * lightning.h: Upgrade to GPL/LGPLv3. + * tests/add.c: Upgrade to GPL/LGPLv3. + * tests/fib.c: Upgrade to GPL/LGPLv3. + * tests/testfp.c: Upgrade to GPL/LGPLv3. + * tests/fibdelay.c: Upgrade to GPL/LGPLv3. + * tests/fibit.c: Upgrade to GPL/LGPLv3. + * tests/funcfp.c: Upgrade to GPL/LGPLv3. + * tests/incr.c: Upgrade to GPL/LGPLv3. + * tests/printf.c: Upgrade to GPL/LGPLv3. + * tests/printf2.c: Upgrade to GPL/LGPLv3. + * tests/rpn.c: Upgrade to GPL/LGPLv3. + * tests/rpnfp.c: Upgrade to GPL/LGPLv3. + * lightning/asm-common.h: Upgrade to GPL/LGPLv3. + * lightning/core-common.h: Upgrade to GPL/LGPLv3. + * lightning/fp-common.h: Upgrade to GPL/LGPLv3. + * lightning/funcs-common.h: Upgrade to GPL/LGPLv3. + * opcode/dis-buf.c: Upgrade to GPL/LGPLv3. + * opcode/disass.c: Upgrade to GPL/LGPLv3. + * opcode/i386-dis.c: Upgrade to GPL/LGPLv3. + * opcode/sparc-dis.c: Upgrade to GPL/LGPLv3. + * opcode/sparc-opc.c: Upgrade to GPL/LGPLv3. + * lightningize.in: Upgrade to GPL/LGPLv3. + * opcode/bfd.h: Upgrade to GPL/LGPLv3. + * opcode/i386.h: Upgrade to GPL/LGPLv3. + * opcode/sparc.h: Upgrade to GPL/LGPLv3. + +2007-01-26 Thomas Girard <thomas.g.girard@free.fr> + + * lightning/Makefile.am: Add clean-local target. + +2006-12-02 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Add CVTTS?2SIL. + * lightning/i386/asm-64.h: Add CVTTS?2SIQ. + * lightning/i386/fp-64.h: Use it. + + * lightning/Makefile.am: Place files in nodist_lightning_HEADERS. + +2006-11-23 Paolo Bonzini <bonzini@gnu.org> + + * lightning/core-common.h: Add casts in "*i_p" variants. + * lightning/i386/asm-32.h: Add _r1. + * lightning/i386/asm-64.h: Likewise, and add SSE instructions. + * lightning/i386/asm-i386.h: Merge SSE instructions from Gwenole. + Use short form for 16-bit AX instructions. Remove _r1 + * lightning/i386/core-64.h: Add FP ABI support in its infancy. + * lightning/i386/core-i386.h: Move jit_arg_f and jit_arg_d... + * lightning/i386/core-32.h: ... and jit_prepare_f and jit_prepare_d... + * lightning/i386/fp-32.h: ... here. + * lightning/i386/fp-64.h: Write the code. + * lightning/sparc/fp.h: Fix jit_extr_{f_d,d_f} register order. + +2006-11-22 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Move x86-64 instructions... + * lightning/i386/asm-64.h: ... here. + * lightning/i386/fp-32.h: Fix bugfixes worked around in froofyJIT. + Add JIT_FPRET. + * lightning/sparc/fp.h: Likewise. + * lightning/ppc/fp.h: Likewise. + * lightning/fp-common.h: Adjust for JIT_FPRET. + * tests/funcfp.c: Adjust for JIT_FPRET. + * tests/rpnfp.c: Adjust for JIT_FPRET. + +2006-11-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Add an underscore to macros without + a parameter. + +2006-11-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core-i386.h: Move jit_movip, jit_check8, jit_reg8, + jit_reg16, jit_movbrm... + * lightning/i386/core-32.h: ... here. + * lightning/i386/core-64.h: Redefine them. Fix other bugs. + + * tests/printf.c: Do not do a varargs call. + +2006-11-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Check in rewrite from Basilisk II. + * lightning/i386/asm-32.h: Adjust. + * lightning/i386/asm-64.h: Adjust. + * lightning/i386/fp-32.h: Adjust. + + * lightning/i386/core-32.h: Adjust. Add jit_{ld,ldx,st,stx}i*. + * lightning/i386/core-64.h: Adjust. Add jit_{ld,ldx,st,stx}i*. + * lightning/i386/core-i386.h: Adjust. Remove these patterns. + +2006-11-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm-i386.h: Merge 64-bit cleanliness changes from + mzscheme. + Add SSE. + * lightning/i386/asm-64.h: Likewise. + +2006-11-20 Paolo Bonzini <bonzini@gnu.org> + Ludovic Courtes <ludo@chbouib.org> + + * lightning/i386/core-32.h: Disable jit_push and jit_pop if stack not + needed. + * lightning/i386/core-64.h: Disable jit_push and jit_pop if stack not + needed. + * lightning/sparc/core.h: Merge final implementation of jit_pushr and + jit_popr. + * lightning/ppc/core.h: Fix implementation of jit_pushr and jit_popr to + work (more or less) across function calls. + + * tests/push-pop.c, tests/push-pop.ok: New test. + * tests/Makefile.am: Run it. + +2006-11-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/asm-common.h: Make 64-bit safe. + * lightning/i386/funcs.h: Make 64-bit safe. + + * lightning/i386/asm-64.h: More merge from mzscheme. + * lightning/i386/asm-i386.h: More merge from mzscheme. + * lightning/i386/core-32.h: More merge from mzscheme. + * lightning/i386/core-64.h: More merge from mzscheme. + * lightning/i386/core-i386.h: More merge from mzscheme. + + * tests/rpnfp.c, tests/testfp.c, tests/funcfp.c: Skip if no + floating-point support. + +2006-11-04 Paolo Bonzini <bonzini@gnu.org> + + * tests/rpn.c: Remove pushr/popr. + +2006-11-04 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/core.h: Implement jit_allocai, define JIT_FP to be R1. + * lightning/ppc/funcs.h: Store frame size into _jitl. Store R1 before + the STMW, so that the offset is unchanged when we patch the STMW. + * lightning/i386/core.h: Define JIT_FP to be EBP. + * lightning/i386/core-32.h: Implement jit_allocai, put LEAVE in the + epilog if jit_allocai was used. + * lightning/i386/core-64.h: Implement jit_allocai, put LEAVE in the + epilog if jit_allocai was used. + +2006-11-04 Ludovic Courtes <ludo@chbouib.org> + + * lightning/sparc/core.h: Implement jit_allocai. + * tests/allocai.c: New. + * tests/Makefile.am: Point to new tests. + +2006-11-03 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/core.h: Fix jit_bms using BNE rather than BGT. + "AND." does signed comparisons. + +2006-10-31 Paolo Bonzini <bonzini@gnu.org> + + * doc/porting.texi: Rename JIT_FP to JIT_AP. + * lightning/core-common.h: Likewise. + * lightning/i386/core-i386.h: Likewise. + * lightning/fp-common.h: Provide default versions of jit_getarg_[fd]. + * lightning/i386/fp-32.h: Don't provide jit_getarg_[fd]. + * lightning/ppc/fp.h: Likewise. + +2006-10-31 Ludovic Courtes <ludo@chbouib.org> + + * doc/using.texi (The instruction set): Clarified the use of `JIT_RET' and + documented `jit_retval'. + * tests/ret.c (generate_function_proxy): After `jit_finish', use + `jit_retval_i' to move FUNC's return value into the correct register. + +2006-10-31 Paolo Bonzini <bonzini@gnu.org> + Ludovic Courtes <ludo@chbouib.org> + + * tests/divi.c, tests/divi.ok, tests/movi.c, tests/movi.ok: New. + * tests/ldxi.c: Ensure large pointer is generated. + * tests/Makefile.am: Point to new tests. + * lightning.h: Include funcs-common.h before funcs.h. + * lightning/sparc/core.h: Fix bugs in modi/divi. + +2006-10-30 Paolo Bonzini <bonzini@gnu.org> + + * lightning/Makefile.am: Use "ln -sf". + * lightning/core-common.h: Define jit_negr_l if necessary. + +2006-10-30 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm.h (MOVS*, MOVZ*): Use correct _r[124] macros. + +2006-10-29 Paolo Bonzini <bonzini@gnu.org> + + * configure.ac: Use lightning.m4 macros. + * lightning.m4: Refactor to use common code in configure.ac. Move... + * build-aux/lightning.m4: ... here. + * lightningize.in: Support suffixes. + * opcode/disass.in: Adapt to changes in configure.ac. + + * lightning/ppc/funcs.h: Use __APPLE__ instead of _CALL_DARWIN. + * lightning/i386/core-32.h: Likewise. + +2006-10-26 Paolo Bonzini <bonzini@gnu.org> + + * configure.ac: Fix compilation test. + * lightning/Makefile.am: Symlink LIGHTNING_TARGET_FILES in + non-distribution mode. + * lightning/i386/Makefile.frag: Use LIGHTNING_TARGET_FILES. + +2006-10-26 Paolo Bonzini <bonzini@gnu.org> + + * configure.ac: Subst cpu. + * lightning/core-common.h: Make tests pass on i386. + * lightning/i386/asm-32.h: Make tests pass on i386. + * lightning/i386/asm-64.h: Make tests pass on i386. + * lightning/i386/asm-i386.h: Make tests pass on i386. + * lightning/i386/core-32.h: Make tests pass on i386. + * lightning/i386/core-64.h: Make tests pass on i386. + * lightning/i386/core-i386.h: Make tests pass on i386. + * tests/Makefile.am: Include files from cpu directory. + +2006-10-26 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm.h: Move to asm-i386.h + * lightning/i386/asm-32.h: New, from Matthew Flatt. + * lightning/i386/asm-64.h: New, from Matthew Flatt. + * lightning/i386/core.h: Move to core-i386.h + * lightning/i386/core-32.h: New, from Matthew Flatt. + * lightning/i386/core-64.h: New, from Matthew Flatt. + * lightning/i386/fp.h: Move to fp-32.h + * lightning/i386/fp-64.h: New, dummy. + * lightning/i386/Makefile.frag: New. + * lightning/Makefile.am: Support per-target Makefile fragments. + * configure.ac: Support per-target Makefile fragments and CPU suffixes. + +2006-10-16 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/i386.h (jit_flush_code): Fix syntax error. :-( + +2006-07-06 Paolo Bonzini <bonzini@gnu.org> + Ludovic Courtes <ludovic.courtes@laas.fr> + + * doc/using.texi: Clarify "Using autoconf" section + and rename it to "Bundling lightning" + * lightning.m4: Work also if lightning is not bundled. + +2006-07-06 Paolo Bonzini <bonzini@gnu.org> + Ludovic Courtes <ludovic.courtes@laas.fr> + + * lightning/ppc/core.h (_jit_mod): Replace with... + (_jit_mod_big, _jit_mod_small): ... these. + (jit_modi_i, jit_modi_ui): Rewrite. + * tests/modi.c, tests/modi.ok: New tests. + +2006-05-18 Matthew Flatt <mflatt@cs.utah.edu> + + * lightning/i386/asm.h: Fix test for extending the mprotect area + towards lower addresses. + +2006-05-16 Bruno Haible <bruno@clisp.org> + + * lightning/asm-common.h: Don't use __func__ nor __FUNCTION__ if + not compiling with GNU C. + +2006-02-16 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/core.h: Fix jit_ldxi_* with big displacement. + +2006-01-23 Paolo Bonzini <bonzini@gnu.org> + + * configure.ac: Fix comments in config.h.in. + +2005-11-25 Paolo Bonzini <bonzini@gnu.org> + + * lightning/sparc/fp.h: Fix header comment. + * lightning/ppc/fp.h: Fix header comment. + +2005-04-27 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/asm.h (JCm, JCSm, JNCm, JNCSm): New. + +2004-11-26 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/funcs.h (_jit_epilog): Remove unused variable. + +2004-11-13 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/funcs.h [__linux__]: Include sys/mman.h. + +2004-11-09 Paolo Bonzini <bonzini@gnu.org> + + * lightning/sparc/fp.h: Fix fp-to-integer conversions. + * lightning/ppc/testfp.c: Test fp-to-integer conversions + of integer numbers. + * lightning/ppc/testfp.ok: Adjust for the above. + +2004-11-08 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/testfp.c: Always flush code before + testing it. + +2004-11-08 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/fp.h: Do not clobber f31. + +2004-11-08 Paolo Bonzini <bonzini@gnu.org> + + * lightning.h: New name of... + * lightning-inst.h: ... this file. + * lightning.h.in: Removed. + + * opcodes/disass.c: Include config.h. + * tests/add.c: Include config.h. + * tests/bp.c: Include config.h. + * tests/fib.c: Include config.h. + * tests/fibdelay.c: Include config.h. + * tests/fibit.c: Include config.h. + * tests/funcfp.c: Include config.h. + * tests/incr.c: Include config.h. + * tests/printf.c: Include config.h. + * tests/printf2.c: Include config.h. + * tests/rpn.c: Include config.h. + * tests/rpnfp.c: Include config.h. + * tests/testfp.c: Include config.h. + +2004-10-12 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp.h: Fix bugs in conditional branches. + +2004-10-10 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/funcs.h: Fix pasto in jit_flush_code. + +2004-10-08 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/fp.h: Optimized conditional branches. + +2004-09-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/asm.h: Fix more typos. + +2004-09-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/asm.h: Fix typos, replace `26' with JIT_AUX. + +2004-09-20 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/fp.h: Added conditional branches. + +2004-09-18 Laurent Michel <ldm@thorgal.homelinux.org> + + * lightning/ppc/fp.h (jit_unler_d, jit_unltr_d, jit_unger_d, + jit_ungtr_d, jit_ltgt_d, jit_uneq_d): Implemented missing tests + to fully support testfp. + (jit_floorr_d_i, jit_ceilr_d_i, jit_roundr_d_i, jit_truncr_d_i): + New macros. + * lightning/ppc/asm.h: Added missing opcodes FCTIWZ and MTFSFI. + * lightning/ppc/funcs.h (_jit_prolog): Fixed minor mistake in + the initialization of _jitl.nextarg_geti, relying on the + JIT_AUX macro as well to get the register offset. + +2004-09-07 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/funcs.h: Fix typo. + +2004-09-06 Paolo Bonzini <bonzini@gnu.org> + + * tests/funcfp.c: Use %g. Remove C99 variable declarations. + * tests/testfp.c: Don't use __builtin_nan. + + * lightning/ppc/core.h: Add three V registers. + * lightning/ppc/funcs.h: Adjust. + + * lightning/sparc/core.h: Some fixes related to FP argument passing. + Move R0 to %g2, use %o7 for JIT_BIG2. + * lightning/sparc/fp.h: Some fixes related to FP argument passing. + +2004-09-02 Paolo Bonzini <bonzini@gnu.org> + + * lightning/sparc/core.h: Add another V register, + move R0 to %o7. + +2004-07-15 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/funcs.h: Implement jit_flush_code, + in order to support Fedora's exec-shield. + +2004-07-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/core-common.h: Add more jit_extr_*_* macros. + * lightning/doc/using.texi: Be clearer about the order + of arguments in jit_extr_*_*. + * lightning/doc/porting.texi: Add more jit_extr_*_* macros. + * lightning/i386/fp.h: Fix typo in jit_extr_i_d. + +2004-07-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/funcs.h: Adjust offset of LR into + stack frame if running under the Darwin ABI. + +2004-07-13 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp.h: Rename jit_exti_d to jit_extr_i_d. + +2004-07-13 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/core.h: Fix thinko. + + * lightning/i386/core.h: Fix jit_lti_ui. + * lightning/core-common.h: Add missing macros. + + * lightning/ppc/fp.h: Rename jit_neg_* to jit_negr_*. + * lightning/i386/fp.h: Rename jit_neg_* to jit_negr_*. + * lightning/sparc/fp.h: Rename jit_neg_* to jit_negr_*. + * lightning/fp-common.h: Rename jit_neg_* to jit_negr_*. + * doc/porting.texi: Add undocumented macros. + +2004-07-12 Paolo Bonzini <bonzini@gnu.org> + + * doc/porting.texi: Add missing macros. + +2004-07-12 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/funcs.h: Don't generate trampolines. + Separate prolog and epilog generation. + * lightning/ppc/core.h: Generate epilog explicitly. + Don't reserve r31 anymore. + * lightning/core-common.h: Remove call to jit_setup_code. + +2004-07-09 Paolo Bonzini <bonzini@gnu.org> + + * lightning/lightning.h.in: Avoid preprocessor warnings. + * lightning/lightning-inst.h: Likewise. + + * lightning/i386/core.h: Define JIT_R, JIT_R_NUM, JIT_V, + JIT_V_NUM. + * lightning/ppc/core.h: Likewise. + * lightning/sparc/core.h: Likewise. + * lightning/i386/fp.h: Define JIT_FPR, JIT_FPR_NUM. + * lightning/ppc/fp.h: Likewise. + * lightning/sparc/fp.h: Likewise. + * lightning/core-common.h: Define fixed register names. + * lightning/fp-common.h: Likewise for FP regs. + +2004-07-09 Paolo Bonzini <bonzini@gnu.org> + + * lightning/ppc/funcs.h: Fix location where return address + is stored. + * lightning/i386/asm.h: Add a trailing _ to opcodes without + any parameter. + * lightning/i386/core.h: Adjust for the above. + +2004-04-15 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/fp.h: Change "and" to "_and" + to satisfy C++ compilers. + +2004-04-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/sparc/fp.h: Use memcpy to implement jit_movi. + * lightning/ppc/fp.h: Use memcpy to implement jit_movi. + Move floating-point opcodes... + * lightning/ppc/asm.h: ... here. + +2004-04-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/core-common.h: Add jit_finishr. + * lightning/ppc/core.h: Add jit_callr and jit_finishr. + * lightning/i386/core.h: Add jit_callr. + * lightning/sparc/core.h: Add jit_callr. Fix typo. + +2004-04-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: Fix pasto in jit_b*_ui. + +2004-03-30 Laurent Michel + + * lightning/ppc: Implement PowerPC floating point + (ChangeLog entry missing). + +2004-03-12 Paolo Bonzini <bonzini@gnu.org> + + * lightning/fp-common.h: Load/store macros are not the + same for floats and doubles anywhere, but jit_retval may be. + * lightning/i386/asm.h: Fix = mistaken for == in ESCrri. + * lightning/i386/core.h: Fix typo in jit_prepare_[fd]. + * lightning/i386/fp.h: Rewritten. + * tests/testfp.c: Add tests for unordered comparisons. + * tests/testfp.ok: Add results. + +2004-03-15 Paolo Bonzini <bonzini@gnu.org> + + Merge changes from Laurent Michel. + + * lightning/asm-common.h: Add _jit_I_noinc. + * lightning/core-common.h: Support jit_init, + jit_setup_code, jit_patch_at. Return patchable IP from + jit_movi_p. + * lightning/funcs-common.h: Provide defaults + for jit_setup_code, jit_start_pfx, jit_end_pfx + * lightning/i386/core.h: Add jit_patch_at, jit_patch_movi. + * lightning/ppc/core.h: Likewise. + * lightning/sparc/core.h: Likewise. + * lightning/ppc/asm.h: Fix generation of branch destination + displacements in _FB and _BB + * lightning/ppc/core.h: Generate trampolines in the user + area. + * lightning/ppc/funcs.h: Add a few casts. + * tests/bc.c: New testcase. + + * lightning/i386/asm.h: Wrap into #ifndef LIGHTNING_DEBUG. + * lightning/ppc/asm.h: Wrap into #ifndef LIGHTNING_DEBUG. + * lightning/sparc/asm.h: Wrap into #ifndef LIGHTNING_DEBUG. + + +2004-03-09 Paolo Bonzini <bonzini@gnu.org> + + * lightning/sparc/fp.h: Rewrite. Move macros for + FP code generation... + * lightning/sparc/asm.h: ... here. + * lightning/sparc/core.h: Rename jit_prepare to + jit_prepare_i, jit_retval to jit_retval_i. + * lightning/ppc/core.h: Rename jit_prepare to + jit_prepare_i, jit_retval to jit_retval_i. + * lightning/i386/core.h: Rename jit_prepare to + jit_prepare_i, jit_retval to jit_retval_i. + * lightning/core-common.h: Provide backwards + compatible synonyms for the above. + * lightning/fp-common.h: Rewrite. + * lightning-inst.h: Include fp unconditionally. + * lightning.h.in: Include fp unconditionally. + * tests/Makefile.am: Enable fp tests. + * tests/fib.c: Use jit_retval_i. + * tests/fibit.c: Cast codeBuffer to char *. + * tests/funcfp.c: Use new fp macros. + * tests/printf.c: Use jit_retval_i. + * tests/rpnfp.c: Use new fp macros. + * tests/testfp.c: Use new fp macros. + +2004-03-02 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: generate correct code when + doing lt/le/ge/etc. on ESI and EDI. Use MOVZX/MOVSX + where possible. + * lightning/i386/asm.h: Add macros for MOVZX/MOVSX. + Move macros for x87 here, and add many of them. + * lightning/i386/fp.h: Use new macros for x87. + +2004-02-06 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: avoid generating MOV reg, reg. + * lightning/sparc/core.h: fix several bugs. + * lightning/ppc/core.h: fix several bugs. + * tests/rpn.c: rewritten. + +2004-01-08 Paolo Bonzini <bonzini@gnu.org> + + * tests/rpnfp.c: new example, suggested by Basile + Starynkevitch. + * tests/rpnfp.ok: new example. + +2003-12-12 Paolo Bonzini <bonzini@gnu.org> + + * tests/add.c: new test, suggested by Steve Dekorte. + * tests/add.c: new test. + +2003-11-14 Paolo Bonzini <bonzini@gnu.org> + John Redford <eirenik@hotmail.com> + + * lightning/asm-common.h: change the 'pc' field of _jit to + be a union of various data types, because ISO C99 doesn't + permit using ++ on a = cast. Change the incremented casts of + _jit.pc to be _jit.x.uc_pc, _jit.x.us_pc, etc. + * all files: change all non-cast instances of _jit.pc to be + _jit.x.pc. + * lightning/i386/core.h: remove casts from jit_might. + +2003-05-25 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: use JITSORRY in jit_replace + * lightning/asm-common.h: define JITSORRY + +2003-05-14 Paolo Bonzini <bonzini@gnu.org> + + * lightning/i386/core.h: fix missing comma in several + load/store macros. + * lightning/core-common.h: fix long/unsigned long/pointer + jit_pushr/jit_popr. + * lightning/ppc/funcs.h: correctly align stack pointer + +No changelogs for the assemblers (lightning directory) until 1.0 + +2003-03-27 Paolo Bonzini <bonzini@gnu.org> + + * tests/printf2.c: new test + +2001-05-03 Paolo Bonzini <bonzini@gnu.org> + + * tests/printf.c: made the message platform independent + +2001-01-19 Paolo Bonzini <bonzini@gnu.org> + + * configure.in: support cross-assembling + + * disass/bfd.h, disass/dis-asm.h, disass/dis-buf.c, + disass/i386-dis.c, disass/i386.h, disass/ppc-dis.c, + disass/ppc.h, disass/ppc-opc.c, disass/sparc-dis.c, + disass/sparc.h, disass/sparc-opc.c: new files, from GDB + + * disass/disass.c, disass/Makefile.am: new files + + * tests/fib.c, tests/fibit.c, tests/incr.c, tests/printf.c, + tests/rpn.c, tests/testfp.c, tests/Makefile.am: support + disassembling diff --git a/libguile/lightning/README b/libguile/lightning/README deleted file mode 100644 index ae36ea578..000000000 --- a/libguile/lightning/README +++ /dev/null @@ -1,3 +0,0 @@ -GNU lightning is a library to aid in making portable programs -that compile assembly code at run time. For more information, -look at the info documentation. diff --git a/libguile/lightning/README.md b/libguile/lightning/README.md new file mode 100644 index 000000000..90e01bf3f --- /dev/null +++ b/libguile/lightning/README.md @@ -0,0 +1,37 @@ +# 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 jit.o -c jit/jit.c +gcc -flto -O2 -g -o my-program jit.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. + +## Status + +Only the x86-64 port is currently usable. I plan to re-enable 32-bit +x86 shortly, and then work on 32-bit and 64-bit ARM. Other +architectures may come with time, but help is very much appreciated +there. The test suite is still in progress but will be fairly +comprehensive in terms of API surface. diff --git a/libguile/lightning/TODO b/libguile/lightning/TODO deleted file mode 100644 index 676af0293..000000000 --- a/libguile/lightning/TODO +++ /dev/null @@ -1,28 +0,0 @@ - * Validate that divrem in jit_x86-cpu.c is not modifying - the non result arguments. This is not verified by clobber.tst, - as it only checks registers not involved in the operation - (because it does not know about values being set as input - for the the operation). - - * Write a simple higher level language implementation generating - jit with lightning, that could be some lisp or C like language. - - * rerun ./configure --enable-devel-get-jit-size and regenerate - the related jit_$arch-sz.c for the ports where nodata is - meaningful: - hppa (done) - i586 (done) - ia64 - mips o32 (done) - mips n32 - mips n64 - powerpc 32 (done) - powerpc 64 (done) - ppc - s390x (done) - sparc (done) - x86_64 (done) - Missing ones are due to no longer (remote) access to such hosts - and may be broken with jit_set_data(..., JIT_DISABLE_DATA). - (ia64 hp-ux or linx), (irix mips for 32 or 64 abi), and - (darwin ppc). diff --git a/libguile/lightning/include/lightning.h b/libguile/lightning/include/lightning.h deleted file mode 100644 index 6b4790a44..000000000 --- a/libguile/lightning/include/lightning.h +++ /dev/null @@ -1,1096 +0,0 @@ -/* - * Copyright (C) 2012-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#ifndef _lightning_h -#define _lightning_h - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include <unistd.h> -#include <stdlib.h> -#include <stdint.h> -#include <string.h> - -#if defined(__hpux) && defined(__hppa__) -# include <machine/param.h> -#endif -#if defined(__alpha__) && defined(__osf__) -# include <machine/endian.h> -#endif - -#ifdef STDC_HEADERS -# include <stddef.h> -#else -# if !defined(offsetof) -# define offsetof(type, field) ((char *)&((type *)0)->field - (char *)0) -# endif -#endif - -#ifndef __WORDSIZE -# if defined(WORDSIZE) /* ppc darwin */ -# define __WORDSIZE WORDSIZE -# elif defined(__SIZEOF_POINTER__) /* ppc aix */ -# define __WORDSIZE (__SIZEOF_POINTER__ << 3) -# elif defined(_ILP32) /* hppa hp-ux */ -# define __WORDSIZE 32 -# elif defined(_LP64) /* ia64 hp-ux (with cc +DD64) */ -# define __WORDSIZE 64 -# elif defined(_MIPS_SZPTR) /* mips irix */ -# if _MIPS_SZPTR == 32 -# define __WORDSIZE 32 -# else -# define __WORDSIZE 64 -# endif -# else /* From FreeBSD 9.1 stdint.h */ -# if defined(UINTPTR_MAX) && defined(UINT64_MAX) && \ - (UINTPTR_MAX == UINT64_MAX) -# define __WORDSIZE 64 -# else -# define __WORDSIZE 32 -# endif -# endif -#endif -#ifndef __LITTLE_ENDIAN -# if defined(LITTLE_ENDIAN) /* ppc darwin */ -# define __LITTLE_ENDIAN LITTLE_ENDIAN -# elif defined(__ORDER_LITTLE_ENDIAN__) /* ppc aix */ -# define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ -# else -# define __LITTLE_ENDIAN 1234 -# endif -#endif -#ifndef __BIG_ENDIAN -# if defined(BIG_ENDIAN) /* ppc darwin */ -# define __BIG_ENDIAN BIG_ENDIAN -# elif defined(__ORDER_BIG_ENDIAN__) /* ppc aix */ -# define __BIG_ENDIAN __ORDER_BIG_ENDIAN__ -# else -# define __BIG_ENDIAN 4321 -# endif -#endif -#ifndef __BYTE_ORDER -# if defined(BYTE_ORDER) /* ppc darwin */ -# define __BYTE_ORDER BYTE_ORDER -# elif defined(__BYTE_ORDER__) /* ppc aix */ -# define __BYTE_ORDER __BYTE_ORDER__ -# elif defined(_BIG_ENDIAN) /* hppa hp-ux */ -# define __BYTE_ORDER __BIG_ENDIAN -# elif defined(__BIG_ENDIAN__) /* ia64 hp-ux */ -# define __BYTE_ORDER __BIG_ENDIAN -# elif defined(__i386__) /* 32 bit x86 solaris */ -# define __BYTE_ORDER __LITTLE_ENDIAN -# elif defined(__x86_64__) /* 64 bit x86 solaris */ -# define __BYTE_ORDER __LITTLE_ENDIAN -# elif defined(__MIPSEB) /* mips irix */ -# define __BYTE_ORDER __BIG_ENDIAN -# else -# error cannot figure __BYTE_ORDER -# endif -#endif - -typedef signed char jit_int8_t; -typedef unsigned char jit_uint8_t; -typedef signed short jit_int16_t; -typedef unsigned short jit_uint16_t; -typedef signed int jit_int32_t; -typedef unsigned int jit_uint32_t; -#if __WORDSIZE == 32 -typedef signed long long jit_int64_t; -typedef unsigned long long jit_uint64_t; -typedef jit_int32_t jit_word_t; -typedef jit_uint32_t jit_uword_t; -#else -typedef signed long jit_int64_t; -typedef unsigned long jit_uint64_t; -typedef jit_int64_t jit_word_t; -typedef jit_uint64_t jit_uword_t; -#endif -typedef float jit_float32_t; -typedef double jit_float64_t; -typedef void* jit_pointer_t; -typedef jit_int32_t jit_bool_t; -typedef jit_int32_t jit_gpr_t; -typedef jit_int32_t jit_fpr_t; - -#if defined(__i386__) || defined(__x86_64__) -# include <lightning/jit_x86.h> -#elif defined(__mips__) -# include <lightning/jit_mips.h> -#elif defined(__arm__) -# include <lightning/jit_arm.h> -#elif defined(__ppc__) || defined(__powerpc__) -# include <lightning/jit_ppc.h> -#elif defined(__sparc__) -# include <lightning/jit_sparc.h> -#elif defined(__ia64__) -# include <lightning/jit_ia64.h> -#elif defined(__hppa__) -# include <lightning/jit_hppa.h> -#elif defined(__aarch64__) -# include <lightning/jit_aarch64.h> -#elif defined(__s390__) || defined(__s390x__) -# include <lightning/jit_s390.h> -#elif defined(__alpha__) -# include <lightning/jit_alpha.h> -#endif - -#define jit_flag_node 0x0001 /* patch node not absolute */ -#define jit_flag_patch 0x0002 /* jump already patched */ -#define jit_flag_data 0x0004 /* data in the constant pool */ -#define jit_flag_use 0x0008 /* do not remove marker label */ -#define jit_flag_synth 0x0010 /* synthesized instruction */ -#define jit_flag_head 0x1000 /* label reached by normal flow */ - -#define JIT_R(index) jit_r(index) -#define JIT_V(index) jit_v(index) -#define JIT_F(index) jit_f(index) -#define JIT_R_NUM jit_r_num() -#define JIT_V_NUM jit_v_num() -#define JIT_F_NUM jit_f_num() - -#define JIT_DISABLE_DATA 1 /* force synthesize of constants */ -#define JIT_DISABLE_NOTE 2 /* disable debug info generation */ - -#define jit_class_chk 0x02000000 /* just checking */ -#define jit_class_arg 0x08000000 /* argument register */ -#define jit_class_sav 0x10000000 /* callee save */ -#define jit_class_gpr 0x20000000 /* general purpose */ -#define jit_class_fpr 0x40000000 /* float */ -#define jit_class(reg) ((reg) & 0xffff0000) -#define jit_regno(reg) ((reg) & 0x00007fff) - -typedef struct jit_node jit_node_t; -typedef struct jit_state jit_state_t; - -typedef enum { - jit_code_data, -#define jit_live(u) jit_new_node_w(jit_code_live, u) -#define jit_align(u) jit_new_node_w(jit_code_align, u) - jit_code_live, jit_code_align, - jit_code_save, jit_code_load, -#define jit_name(u) _jit_name(_jit,u) - jit_code_name, -#define jit_note(u, v) _jit_note(_jit, u, v) -#define jit_label() _jit_label(_jit) -#define jit_forward() _jit_forward(_jit) -#define jit_indirect() _jit_indirect(_jit) -#define jit_link(u) _jit_link(_jit,u) - jit_code_note, jit_code_label, - -#define jit_prolog() _jit_prolog(_jit) - jit_code_prolog, - -#define jit_ellipsis() _jit_ellipsis(_jit) - jit_code_ellipsis, -#define jit_va_push(u) _jit_va_push(_jit,u) - jit_code_va_push, -#define jit_allocai(u) _jit_allocai(_jit,u) -#define jit_allocar(u, v) _jit_allocar(_jit,u,v) - jit_code_allocai, jit_code_allocar, - -#define jit_arg() _jit_arg(_jit) - jit_code_arg, -#define jit_getarg_c(u,v) _jit_getarg_c(_jit,u,v) -#define jit_getarg_uc(u,v) _jit_getarg_uc(_jit,u,v) - jit_code_getarg_c, jit_code_getarg_uc, -#define jit_getarg_s(u,v) _jit_getarg_s(_jit,u,v) -#define jit_getarg_us(u,v) _jit_getarg_us(_jit,u,v) - jit_code_getarg_s, jit_code_getarg_us, -#define jit_getarg_i(u,v) _jit_getarg_i(_jit,u,v) -#if __WORDSIZE == 32 -# define jit_getarg(u,v) jit_getarg_i(u,v) -#else -# define jit_getarg(u,v) jit_getarg_l(u,v) -# define jit_getarg_ui(u,v) _jit_getarg_ui(_jit,u,v) -# define jit_getarg_l(u,v) _jit_getarg_l(_jit,u,v) -#endif - jit_code_getarg_i, jit_code_getarg_ui, - jit_code_getarg_l, -# define jit_putargr(u,v) _jit_putargr(_jit,u,v) -# define jit_putargi(u,v) _jit_putargi(_jit,u,v) - jit_code_putargr, jit_code_putargi, - -#define jit_va_start(u) jit_new_node_w(jit_code_va_start, u) - jit_code_va_start, -#define jit_va_arg(u, v) jit_new_node_ww(jit_code_va_arg, u, v) -#define jit_va_arg_d(u, v) jit_new_node_ww(jit_code_va_arg_d, u, v) - jit_code_va_arg, jit_code_va_arg_d, -#define jit_va_end(u) jit_new_node_w(jit_code_va_end, u) - jit_code_va_end, - -#define jit_addr(u,v,w) jit_new_node_www(jit_code_addr,u,v,w) -#define jit_addi(u,v,w) jit_new_node_www(jit_code_addi,u,v,w) - jit_code_addr, jit_code_addi, -#define jit_addcr(u,v,w) jit_new_node_www(jit_code_addcr,u,v,w) -#define jit_addci(u,v,w) jit_new_node_www(jit_code_addci,u,v,w) - jit_code_addcr, jit_code_addci, -#define jit_addxr(u,v,w) jit_new_node_www(jit_code_addxr,u,v,w) -#define jit_addxi(u,v,w) jit_new_node_www(jit_code_addxi,u,v,w) - jit_code_addxr, jit_code_addxi, -#define jit_subr(u,v,w) jit_new_node_www(jit_code_subr,u,v,w) -#define jit_subi(u,v,w) jit_new_node_www(jit_code_subi,u,v,w) - jit_code_subr, jit_code_subi, -#define jit_subcr(u,v,w) jit_new_node_www(jit_code_subcr,u,v,w) -#define jit_subci(u,v,w) jit_new_node_www(jit_code_subci,u,v,w) - jit_code_subcr, jit_code_subci, -#define jit_subxr(u,v,w) jit_new_node_www(jit_code_subxr,u,v,w) -#define jit_subxi(u,v,w) jit_new_node_www(jit_code_subxi,u,v,w) - jit_code_subxr, jit_code_subxi, -#define jit_rsbr(u,v,w) jit_subr(u,w,v) -#define jit_rsbi(u,v,w) jit_new_node_www(jit_code_rsbi,u,v,w) - jit_code_rsbi, -#define jit_mulr(u,v,w) jit_new_node_www(jit_code_mulr,u,v,w) -#define jit_muli(u,v,w) jit_new_node_www(jit_code_muli,u,v,w) - jit_code_mulr, jit_code_muli, -#define jit_qmulr(l,h,v,w) jit_new_node_qww(jit_code_qmulr,l,h,v,w) -#define jit_qmuli(l,h,v,w) jit_new_node_qww(jit_code_qmuli,l,h,v,w) - jit_code_qmulr, jit_code_qmuli, -#define jit_qmulr_u(l,h,v,w) jit_new_node_qww(jit_code_qmulr_u,l,h,v,w) -#define jit_qmuli_u(l,h,v,w) jit_new_node_qww(jit_code_qmuli_u,l,h,v,w) - jit_code_qmulr_u, jit_code_qmuli_u, -#define jit_divr(u,v,w) jit_new_node_www(jit_code_divr,u,v,w) -#define jit_divi(u,v,w) jit_new_node_www(jit_code_divi,u,v,w) - jit_code_divr, jit_code_divi, -#define jit_divr_u(u,v,w) jit_new_node_www(jit_code_divr_u,u,v,w) -#define jit_divi_u(u,v,w) jit_new_node_www(jit_code_divi_u,u,v,w) - jit_code_divr_u, jit_code_divi_u, -#define jit_qdivr(l,h,v,w) jit_new_node_qww(jit_code_qdivr,l,h,v,w) -#define jit_qdivi(l,h,v,w) jit_new_node_qww(jit_code_qdivi,l,h,v,w) - jit_code_qdivr, jit_code_qdivi, -#define jit_qdivr_u(l,h,v,w) jit_new_node_qww(jit_code_qdivr_u,l,h,v,w) -#define jit_qdivi_u(l,h,v,w) jit_new_node_qww(jit_code_qdivi_u,l,h,v,w) - jit_code_qdivr_u, jit_code_qdivi_u, -#define jit_remr(u,v,w) jit_new_node_www(jit_code_remr,u,v,w) -#define jit_remi(u,v,w) jit_new_node_www(jit_code_remi,u,v,w) - jit_code_remr, jit_code_remi, -#define jit_remr_u(u,v,w) jit_new_node_www(jit_code_remr_u,u,v,w) -#define jit_remi_u(u,v,w) jit_new_node_www(jit_code_remi_u,u,v,w) - jit_code_remr_u, jit_code_remi_u, - -#define jit_andr(u,v,w) jit_new_node_www(jit_code_andr,u,v,w) -#define jit_andi(u,v,w) jit_new_node_www(jit_code_andi,u,v,w) - jit_code_andr, jit_code_andi, -#define jit_orr(u,v,w) jit_new_node_www(jit_code_orr,u,v,w) -#define jit_ori(u,v,w) jit_new_node_www(jit_code_ori,u,v,w) - jit_code_orr, jit_code_ori, -#define jit_xorr(u,v,w) jit_new_node_www(jit_code_xorr,u,v,w) -#define jit_xori(u,v,w) jit_new_node_www(jit_code_xori,u,v,w) - jit_code_xorr, jit_code_xori, - -#define jit_lshr(u,v,w) jit_new_node_www(jit_code_lshr,u,v,w) -#define jit_lshi(u,v,w) jit_new_node_www(jit_code_lshi,u,v,w) - jit_code_lshr, jit_code_lshi, -#define jit_rshr(u,v,w) jit_new_node_www(jit_code_rshr,u,v,w) -#define jit_rshi(u,v,w) jit_new_node_www(jit_code_rshi,u,v,w) - jit_code_rshr, jit_code_rshi, -#define jit_rshr_u(u,v,w) jit_new_node_www(jit_code_rshr_u,u,v,w) -#define jit_rshi_u(u,v,w) jit_new_node_www(jit_code_rshi_u,u,v,w) - jit_code_rshr_u, jit_code_rshi_u, - -#define jit_negr(u,v) jit_new_node_ww(jit_code_negr,u,v) -#define jit_comr(u,v) jit_new_node_ww(jit_code_comr,u,v) - jit_code_negr, jit_code_comr, - -#define jit_ltr(u,v,w) jit_new_node_www(jit_code_ltr,u,v,w) -#define jit_lti(u,v,w) jit_new_node_www(jit_code_lti,u,v,w) - jit_code_ltr, jit_code_lti, -#define jit_ltr_u(u,v,w) jit_new_node_www(jit_code_ltr_u,u,v,w) -#define jit_lti_u(u,v,w) jit_new_node_www(jit_code_lti_u,u,v,w) - jit_code_ltr_u, jit_code_lti_u, -#define jit_ler(u,v,w) jit_new_node_www(jit_code_ler,u,v,w) -#define jit_lei(u,v,w) jit_new_node_www(jit_code_lei,u,v,w) - jit_code_ler, jit_code_lei, -#define jit_ler_u(u,v,w) jit_new_node_www(jit_code_ler_u,u,v,w) -#define jit_lei_u(u,v,w) jit_new_node_www(jit_code_lei_u,u,v,w) - jit_code_ler_u, jit_code_lei_u, -#define jit_eqr(u,v,w) jit_new_node_www(jit_code_eqr,u,v,w) -#define jit_eqi(u,v,w) jit_new_node_www(jit_code_eqi,u,v,w) - jit_code_eqr, jit_code_eqi, -#define jit_ger(u,v,w) jit_new_node_www(jit_code_ger,u,v,w) -#define jit_gei(u,v,w) jit_new_node_www(jit_code_gei,u,v,w) - jit_code_ger, jit_code_gei, -#define jit_ger_u(u,v,w) jit_new_node_www(jit_code_ger_u,u,v,w) -#define jit_gei_u(u,v,w) jit_new_node_www(jit_code_gei_u,u,v,w) - jit_code_ger_u, jit_code_gei_u, -#define jit_gtr(u,v,w) jit_new_node_www(jit_code_gtr,u,v,w) -#define jit_gti(u,v,w) jit_new_node_www(jit_code_gti,u,v,w) - jit_code_gtr, jit_code_gti, -#define jit_gtr_u(u,v,w) jit_new_node_www(jit_code_gtr_u,u,v,w) -#define jit_gti_u(u,v,w) jit_new_node_www(jit_code_gti_u,u,v,w) - jit_code_gtr_u, jit_code_gti_u, -#define jit_ner(u,v,w) jit_new_node_www(jit_code_ner,u,v,w) -#define jit_nei(u,v,w) jit_new_node_www(jit_code_nei,u,v,w) - jit_code_ner, jit_code_nei, - -#define jit_movr(u,v) jit_new_node_ww(jit_code_movr,u,v) -#define jit_movi(u,v) jit_new_node_ww(jit_code_movi,u,v) - jit_code_movr, jit_code_movi, -#define jit_extr_c(u,v) jit_new_node_ww(jit_code_extr_c,u,v) -#define jit_extr_uc(u,v) jit_new_node_ww(jit_code_extr_uc,u,v) - jit_code_extr_c, jit_code_extr_uc, -#define jit_extr_s(u,v) jit_new_node_ww(jit_code_extr_s,u,v) -#define jit_extr_us(u,v) jit_new_node_ww(jit_code_extr_us,u,v) - jit_code_extr_s, jit_code_extr_us, -#if __WORDSIZE == 64 -# define jit_extr_i(u,v) jit_new_node_ww(jit_code_extr_i,u,v) -# define jit_extr_ui(u,v) jit_new_node_ww(jit_code_extr_ui,u,v) -#endif - jit_code_extr_i, jit_code_extr_ui, - -#define jit_htonr_us(u,v) jit_new_node_ww(jit_code_htonr_us,u,v) -#define jit_ntohr_us(u,v) jit_new_node_ww(jit_code_htonr_us,u,v) - jit_code_htonr_us, -#define jit_htonr_ui(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v) -#define jit_ntohr_ui(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v) -#if __WORDSIZE == 32 -# define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v) -# define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr_ui,u,v) -#else -#define jit_htonr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v) -#define jit_ntohr_ul(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v) -# define jit_htonr(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v) -# define jit_ntohr(u,v) jit_new_node_ww(jit_code_htonr_ul,u,v) -#endif - jit_code_htonr_ui, jit_code_htonr_ul, - -#define jit_ldr_c(u,v) jit_new_node_ww(jit_code_ldr_c,u,v) -#define jit_ldi_c(u,v) jit_new_node_wp(jit_code_ldi_c,u,v) - jit_code_ldr_c, jit_code_ldi_c, -#define jit_ldr_uc(u,v) jit_new_node_ww(jit_code_ldr_uc,u,v) -#define jit_ldi_uc(u,v) jit_new_node_wp(jit_code_ldi_uc,u,v) - jit_code_ldr_uc, jit_code_ldi_uc, -#define jit_ldr_s(u,v) jit_new_node_ww(jit_code_ldr_s,u,v) -#define jit_ldi_s(u,v) jit_new_node_wp(jit_code_ldi_s,u,v) - jit_code_ldr_s, jit_code_ldi_s, -#define jit_ldr_us(u,v) jit_new_node_ww(jit_code_ldr_us,u,v) -#define jit_ldi_us(u,v) jit_new_node_wp(jit_code_ldi_us,u,v) - jit_code_ldr_us, jit_code_ldi_us, -#define jit_ldr_i(u,v) jit_new_node_ww(jit_code_ldr_i,u,v) -#define jit_ldi_i(u,v) jit_new_node_wp(jit_code_ldi_i,u,v) - jit_code_ldr_i, jit_code_ldi_i, -#if __WORDSIZE == 32 -# define jit_ldr(u,v) jit_ldr_i(u,v) -# define jit_ldi(u,v) jit_ldi_i(u,v) -#else -# define jit_ldr(u,v) jit_ldr_l(u,v) -# define jit_ldi(u,v) jit_ldi_l(u,v) -# define jit_ldr_ui(u,v) jit_new_node_ww(jit_code_ldr_ui,u,v) -# define jit_ldi_ui(u,v) jit_new_node_wp(jit_code_ldi_ui,u,v) -#define jit_ldr_l(u,v) jit_new_node_ww(jit_code_ldr_l,u,v) -#define jit_ldi_l(u,v) jit_new_node_wp(jit_code_ldi_l,u,v) -#endif - jit_code_ldr_ui, jit_code_ldi_ui, - jit_code_ldr_l, jit_code_ldi_l, - -#define jit_ldxr_c(u,v,w) jit_new_node_www(jit_code_ldxr_c,u,v,w) -#define jit_ldxi_c(u,v,w) jit_new_node_www(jit_code_ldxi_c,u,v,w) - jit_code_ldxr_c, jit_code_ldxi_c, -#define jit_ldxr_uc(u,v,w) jit_new_node_www(jit_code_ldxr_uc,u,v,w) -#define jit_ldxi_uc(u,v,w) jit_new_node_www(jit_code_ldxi_uc,u,v,w) - jit_code_ldxr_uc, jit_code_ldxi_uc, -#define jit_ldxr_s(u,v,w) jit_new_node_www(jit_code_ldxr_s,u,v,w) -#define jit_ldxi_s(u,v,w) jit_new_node_www(jit_code_ldxi_s,u,v,w) - jit_code_ldxr_s, jit_code_ldxi_s, -#define jit_ldxr_us(u,v,w) jit_new_node_www(jit_code_ldxr_us,u,v,w) -#define jit_ldxi_us(u,v,w) jit_new_node_www(jit_code_ldxi_us,u,v,w) - jit_code_ldxr_us, jit_code_ldxi_us, -#define jit_ldxr_i(u,v,w) jit_new_node_www(jit_code_ldxr_i,u,v,w) -#define jit_ldxi_i(u,v,w) jit_new_node_www(jit_code_ldxi_i,u,v,w) - jit_code_ldxr_i, jit_code_ldxi_i, -#if __WORDSIZE == 32 -# define jit_ldxr(u,v,w) jit_ldxr_i(u,v,w) -# define jit_ldxi(u,v,w) jit_ldxi_i(u,v,w) -#else -# define jit_ldxr_ui(u,v,w) jit_new_node_www(jit_code_ldxr_ui,u,v,w) -# define jit_ldxi_ui(u,v,w) jit_new_node_www(jit_code_ldxi_ui,u,v,w) -# define jit_ldxr_l(u,v,w) jit_new_node_www(jit_code_ldxr_l,u,v,w) -# define jit_ldxi_l(u,v,w) jit_new_node_www(jit_code_ldxi_l,u,v,w) -# define jit_ldxr(u,v,w) jit_ldxr_l(u,v,w) -# define jit_ldxi(u,v,w) jit_ldxi_l(u,v,w) -#endif - jit_code_ldxr_ui, jit_code_ldxi_ui, - jit_code_ldxr_l, jit_code_ldxi_l, - -#define jit_str_c(u,v) jit_new_node_ww(jit_code_str_c,u,v) -#define jit_sti_c(u,v) jit_new_node_pw(jit_code_sti_c,u,v) - jit_code_str_c, jit_code_sti_c, -#define jit_str_s(u,v) jit_new_node_ww(jit_code_str_s,u,v) -#define jit_sti_s(u,v) jit_new_node_pw(jit_code_sti_s,u,v) - jit_code_str_s, jit_code_sti_s, -#define jit_str_i(u,v) jit_new_node_ww(jit_code_str_i,u,v) -#define jit_sti_i(u,v) jit_new_node_pw(jit_code_sti_i,u,v) - jit_code_str_i, jit_code_sti_i, -#if __WORDSIZE == 32 -# define jit_str(u,v) jit_str_i(u,v) -# define jit_sti(u,v) jit_sti_i(u,v) -#else -# define jit_str(u,v) jit_str_l(u,v) -# define jit_sti(u,v) jit_sti_l(u,v) -# define jit_str_l(u,v) jit_new_node_ww(jit_code_str_l,u,v) -# define jit_sti_l(u,v) jit_new_node_pw(jit_code_sti_l,u,v) -#endif - jit_code_str_l, jit_code_sti_l, - -#define jit_stxr_c(u,v,w) jit_new_node_www(jit_code_stxr_c,u,v,w) -#define jit_stxi_c(u,v,w) jit_new_node_www(jit_code_stxi_c,u,v,w) - jit_code_stxr_c, jit_code_stxi_c, -#define jit_stxr_s(u,v,w) jit_new_node_www(jit_code_stxr_s,u,v,w) -#define jit_stxi_s(u,v,w) jit_new_node_www(jit_code_stxi_s,u,v,w) - jit_code_stxr_s, jit_code_stxi_s, -#define jit_stxr_i(u,v,w) jit_new_node_www(jit_code_stxr_i,u,v,w) -#define jit_stxi_i(u,v,w) jit_new_node_www(jit_code_stxi_i,u,v,w) - jit_code_stxr_i, jit_code_stxi_i, -#if __WORDSIZE == 32 -# define jit_stxr(u,v,w) jit_stxr_i(u,v,w) -# define jit_stxi(u,v,w) jit_stxi_i(u,v,w) -#else -# define jit_stxr(u,v,w) jit_stxr_l(u,v,w) -# define jit_stxi(u,v,w) jit_stxi_l(u,v,w) -# define jit_stxr_l(u,v,w) jit_new_node_www(jit_code_stxr_l,u,v,w) -# define jit_stxi_l(u,v,w) jit_new_node_www(jit_code_stxi_l,u,v,w) -#endif - jit_code_stxr_l, jit_code_stxi_l, - -#define jit_bltr(v,w) jit_new_node_pww(jit_code_bltr,NULL,v,w) -#define jit_blti(v,w) jit_new_node_pww(jit_code_blti,NULL,v,w) - jit_code_bltr, jit_code_blti, -#define jit_bltr_u(v,w) jit_new_node_pww(jit_code_bltr_u,NULL,v,w) -#define jit_blti_u(v,w) jit_new_node_pww(jit_code_blti_u,NULL,v,w) - jit_code_bltr_u, jit_code_blti_u, -#define jit_bler(v,w) jit_new_node_pww(jit_code_bler,NULL,v,w) -#define jit_blei(v,w) jit_new_node_pww(jit_code_blei,NULL,v,w) - jit_code_bler, jit_code_blei, -#define jit_bler_u(v,w) jit_new_node_pww(jit_code_bler_u,NULL,v,w) -#define jit_blei_u(v,w) jit_new_node_pww(jit_code_blei_u,NULL,v,w) - jit_code_bler_u, jit_code_blei_u, -#define jit_beqr(v,w) jit_new_node_pww(jit_code_beqr,NULL,v,w) -#define jit_beqi(v,w) jit_new_node_pww(jit_code_beqi,NULL,v,w) - jit_code_beqr, jit_code_beqi, -#define jit_bger(v,w) jit_new_node_pww(jit_code_bger,NULL,v,w) -#define jit_bgei(v,w) jit_new_node_pww(jit_code_bgei,NULL,v,w) - jit_code_bger, jit_code_bgei, -#define jit_bger_u(v,w) jit_new_node_pww(jit_code_bger_u,NULL,v,w) -#define jit_bgei_u(v,w) jit_new_node_pww(jit_code_bgei_u,NULL,v,w) - jit_code_bger_u, jit_code_bgei_u, -#define jit_bgtr(v,w) jit_new_node_pww(jit_code_bgtr,NULL,v,w) -#define jit_bgti(v,w) jit_new_node_pww(jit_code_bgti,NULL,v,w) - jit_code_bgtr, jit_code_bgti, -#define jit_bgtr_u(v,w) jit_new_node_pww(jit_code_bgtr_u,NULL,v,w) -#define jit_bgti_u(v,w) jit_new_node_pww(jit_code_bgti_u,NULL,v,w) - jit_code_bgtr_u, jit_code_bgti_u, -#define jit_bner(v,w) jit_new_node_pww(jit_code_bner,NULL,v,w) -#define jit_bnei(v,w) jit_new_node_pww(jit_code_bnei,NULL,v,w) - jit_code_bner, jit_code_bnei, - -#define jit_bmsr(v,w) jit_new_node_pww(jit_code_bmsr,NULL,v,w) -#define jit_bmsi(v,w) jit_new_node_pww(jit_code_bmsi,NULL,v,w) - jit_code_bmsr, jit_code_bmsi, -#define jit_bmcr(v,w) jit_new_node_pww(jit_code_bmcr,NULL,v,w) -#define jit_bmci(v,w) jit_new_node_pww(jit_code_bmci,NULL,v,w) - jit_code_bmcr, jit_code_bmci, - -#define jit_boaddr(v,w) jit_new_node_pww(jit_code_boaddr,NULL,v,w) -#define jit_boaddi(v,w) jit_new_node_pww(jit_code_boaddi,NULL,v,w) - jit_code_boaddr, jit_code_boaddi, -#define jit_boaddr_u(v,w) jit_new_node_pww(jit_code_boaddr_u,NULL,v,w) -#define jit_boaddi_u(v,w) jit_new_node_pww(jit_code_boaddi_u,NULL,v,w) - jit_code_boaddr_u, jit_code_boaddi_u, -#define jit_bxaddr(v,w) jit_new_node_pww(jit_code_bxaddr,NULL,v,w) -#define jit_bxaddi(v,w) jit_new_node_pww(jit_code_bxaddi,NULL,v,w) - jit_code_bxaddr, jit_code_bxaddi, -#define jit_bxaddr_u(v,w) jit_new_node_pww(jit_code_bxaddr_u,NULL,v,w) -#define jit_bxaddi_u(v,w) jit_new_node_pww(jit_code_bxaddi_u,NULL,v,w) - jit_code_bxaddr_u, jit_code_bxaddi_u, -#define jit_bosubr(v,w) jit_new_node_pww(jit_code_bosubr,NULL,v,w) -#define jit_bosubi(v,w) jit_new_node_pww(jit_code_bosubi,NULL,v,w) - jit_code_bosubr, jit_code_bosubi, -#define jit_bosubr_u(v,w) jit_new_node_pww(jit_code_bosubr_u,NULL,v,w) -#define jit_bosubi_u(v,w) jit_new_node_pww(jit_code_bosubi_u,NULL,v,w) - jit_code_bosubr_u, jit_code_bosubi_u, -#define jit_bxsubr(v,w) jit_new_node_pww(jit_code_bxsubr,NULL,v,w) -#define jit_bxsubi(v,w) jit_new_node_pww(jit_code_bxsubi,NULL,v,w) - jit_code_bxsubr, jit_code_bxsubi, -#define jit_bxsubr_u(v,w) jit_new_node_pww(jit_code_bxsubr_u,NULL,v,w) -#define jit_bxsubi_u(v,w) jit_new_node_pww(jit_code_bxsubi_u,NULL,v,w) - jit_code_bxsubr_u, jit_code_bxsubi_u, - -#define jit_jmpr(u) jit_new_node_w(jit_code_jmpr,u) -#define jit_jmpi() jit_new_node_p(jit_code_jmpi,NULL) - jit_code_jmpr, jit_code_jmpi, -#define jit_callr(u) jit_new_node_w(jit_code_callr,u) -#define jit_calli(u) jit_new_node_p(jit_code_calli,u) - jit_code_callr, jit_code_calli, - -#define jit_prepare() _jit_prepare(_jit) - jit_code_prepare, -#define jit_pushargr(u) _jit_pushargr(_jit,u) -#define jit_pushargi(u) _jit_pushargi(_jit,u) - jit_code_pushargr, jit_code_pushargi, -#define jit_finishr(u) _jit_finishr(_jit,u) -#define jit_finishi(u) _jit_finishi(_jit,u) - jit_code_finishr, jit_code_finishi, -#define jit_ret() _jit_ret(_jit) - jit_code_ret, -#define jit_retr(u) _jit_retr(_jit,u) -#define jit_reti(u) _jit_reti(_jit,u) - jit_code_retr, jit_code_reti, -#define jit_retval_c(u) _jit_retval_c(_jit,u) -#define jit_retval_uc(u) _jit_retval_uc(_jit,u) - jit_code_retval_c, jit_code_retval_uc, -#define jit_retval_s(u) _jit_retval_s(_jit,u) -#define jit_retval_us(u) _jit_retval_us(_jit,u) - jit_code_retval_s, jit_code_retval_us, -#define jit_retval_i(u) _jit_retval_i(_jit,u) -#if __WORDSIZE == 32 -# define jit_retval(u) jit_retval_i(u) -#else -# define jit_retval(u) jit_retval_l(u) -# define jit_retval_ui(u) _jit_retval_ui(_jit,u) -# define jit_retval_l(u) _jit_retval_l(_jit,u) -#endif - jit_code_retval_i, jit_code_retval_ui, - jit_code_retval_l, - -#define jit_epilog() _jit_epilog(_jit) - jit_code_epilog, - -#define jit_arg_f() _jit_arg_f(_jit) - jit_code_arg_f, -#define jit_getarg_f(u,v) _jit_getarg_f(_jit,u,v) - jit_code_getarg_f, -#define jit_putargr_f(u,v) _jit_putargr_f(_jit,u,v) -#define jit_putargi_f(u,v) _jit_putargi_f(_jit,u,v) - jit_code_putargr_f, jit_code_putargi_f, - -#define jit_addr_f(u,v,w) jit_new_node_www(jit_code_addr_f,u,v,w) -#define jit_addi_f(u,v,w) jit_new_node_wwf(jit_code_addi_f,u,v,w) - jit_code_addr_f, jit_code_addi_f, -#define jit_subr_f(u,v,w) jit_new_node_www(jit_code_subr_f,u,v,w) -#define jit_subi_f(u,v,w) jit_new_node_wwf(jit_code_subi_f,u,v,w) - jit_code_subr_f, jit_code_subi_f, -#define jit_rsbr_f(u,v,w) jit_subr_f(u,w,v) -#define jit_rsbi_f(u,v,w) jit_new_node_wwf(jit_code_rsbi_f,u,v,w) - jit_code_rsbi_f, -#define jit_mulr_f(u,v,w) jit_new_node_www(jit_code_mulr_f,u,v,w) -#define jit_muli_f(u,v,w) jit_new_node_wwf(jit_code_muli_f,u,v,w) - jit_code_mulr_f, jit_code_muli_f, -#define jit_divr_f(u,v,w) jit_new_node_www(jit_code_divr_f,u,v,w) -#define jit_divi_f(u,v,w) jit_new_node_wwf(jit_code_divi_f,u,v,w) - jit_code_divr_f, jit_code_divi_f, -#define jit_negr_f(u,v) jit_new_node_ww(jit_code_negr_f,u,v) -#define jit_absr_f(u,v) jit_new_node_ww(jit_code_absr_f,u,v) -#define jit_sqrtr_f(u,v) jit_new_node_ww(jit_code_sqrtr_f,u,v) - jit_code_negr_f, jit_code_absr_f, jit_code_sqrtr_f, - -#define jit_ltr_f(u,v,w) jit_new_node_www(jit_code_ltr_f,u,v,w) -#define jit_lti_f(u,v,w) jit_new_node_wwf(jit_code_lti_f,u,v,w) - jit_code_ltr_f, jit_code_lti_f, -#define jit_ler_f(u,v,w) jit_new_node_www(jit_code_ler_f,u,v,w) -#define jit_lei_f(u,v,w) jit_new_node_wwf(jit_code_lei_f,u,v,w) - jit_code_ler_f, jit_code_lei_f, -#define jit_eqr_f(u,v,w) jit_new_node_www(jit_code_eqr_f,u,v,w) -#define jit_eqi_f(u,v,w) jit_new_node_wwf(jit_code_eqi_f,u,v,w) - jit_code_eqr_f, jit_code_eqi_f, -#define jit_ger_f(u,v,w) jit_new_node_www(jit_code_ger_f,u,v,w) -#define jit_gei_f(u,v,w) jit_new_node_wwf(jit_code_gei_f,u,v,w) - jit_code_ger_f, jit_code_gei_f, -#define jit_gtr_f(u,v,w) jit_new_node_www(jit_code_gtr_f,u,v,w) -#define jit_gti_f(u,v,w) jit_new_node_wwf(jit_code_gti_f,u,v,w) - jit_code_gtr_f, jit_code_gti_f, -#define jit_ner_f(u,v,w) jit_new_node_www(jit_code_ner_f,u,v,w) -#define jit_nei_f(u,v,w) jit_new_node_wwf(jit_code_nei_f,u,v,w) - jit_code_ner_f, jit_code_nei_f, -#define jit_unltr_f(u,v,w) jit_new_node_www(jit_code_unltr_f,u,v,w) -#define jit_unlti_f(u,v,w) jit_new_node_wwf(jit_code_unlti_f,u,v,w) - jit_code_unltr_f, jit_code_unlti_f, -#define jit_unler_f(u,v,w) jit_new_node_www(jit_code_unler_f,u,v,w) -#define jit_unlei_f(u,v,w) jit_new_node_wwf(jit_code_unlei_f,u,v,w) - jit_code_unler_f, jit_code_unlei_f, -#define jit_uneqr_f(u,v,w) jit_new_node_www(jit_code_uneqr_f,u,v,w) -#define jit_uneqi_f(u,v,w) jit_new_node_wwf(jit_code_uneqi_f,u,v,w) - jit_code_uneqr_f, jit_code_uneqi_f, -#define jit_unger_f(u,v,w) jit_new_node_www(jit_code_unger_f,u,v,w) -#define jit_ungei_f(u,v,w) jit_new_node_wwf(jit_code_ungei_f,u,v,w) - jit_code_unger_f, jit_code_ungei_f, -#define jit_ungtr_f(u,v,w) jit_new_node_www(jit_code_ungtr_f,u,v,w) -#define jit_ungti_f(u,v,w) jit_new_node_wwf(jit_code_ungti_f,u,v,w) - jit_code_ungtr_f, jit_code_ungti_f, -#define jit_ltgtr_f(u,v,w) jit_new_node_www(jit_code_ltgtr_f,u,v,w) -#define jit_ltgti_f(u,v,w) jit_new_node_wwf(jit_code_ltgti_f,u,v,w) - jit_code_ltgtr_f, jit_code_ltgti_f, -#define jit_ordr_f(u,v,w) jit_new_node_www(jit_code_ordr_f,u,v,w) -#define jit_ordi_f(u,v,w) jit_new_node_wwf(jit_code_ordi_f,u,v,w) - jit_code_ordr_f, jit_code_ordi_f, -#define jit_unordr_f(u,v,w) jit_new_node_www(jit_code_unordr_f,u,v,w) -#define jit_unordi_f(u,v,w) jit_new_node_wwf(jit_code_unordi_f,u,v,w) - jit_code_unordr_f, jit_code_unordi_f, - -#define jit_truncr_f_i(u,v) jit_new_node_ww(jit_code_truncr_f_i,u,v) - jit_code_truncr_f_i, -#if __WORDSIZE == 32 -# define jit_truncr_f(u,v) jit_truncr_f_i(u,v) -#else -# define jit_truncr_f(u,v) jit_truncr_f_l(u,v) -# define jit_truncr_f_l(u,v) jit_new_node_ww(jit_code_truncr_f_l,u,v) -#endif - jit_code_truncr_f_l, -#define jit_extr_f(u,v) jit_new_node_ww(jit_code_extr_f,u,v) -#define jit_extr_d_f(u,v) jit_new_node_ww(jit_code_extr_d_f,u,v) - jit_code_extr_f, jit_code_extr_d_f, -#define jit_movr_f(u,v) jit_new_node_ww(jit_code_movr_f,u,v) -#define jit_movi_f(u,v) jit_new_node_wf(jit_code_movi_f,u,v) - jit_code_movr_f, jit_code_movi_f, - -#define jit_ldr_f(u,v) jit_new_node_ww(jit_code_ldr_f,u,v) -#define jit_ldi_f(u,v) jit_new_node_wp(jit_code_ldi_f,u,v) - jit_code_ldr_f, jit_code_ldi_f, -#define jit_ldxr_f(u,v,w) jit_new_node_www(jit_code_ldxr_f,u,v,w) -#define jit_ldxi_f(u,v,w) jit_new_node_www(jit_code_ldxi_f,u,v,w) - jit_code_ldxr_f, jit_code_ldxi_f, -#define jit_str_f(u,v) jit_new_node_ww(jit_code_str_f,u,v) -#define jit_sti_f(u,v) jit_new_node_pw(jit_code_sti_f,u,v) - jit_code_str_f, jit_code_sti_f, -#define jit_stxr_f(u,v,w) jit_new_node_www(jit_code_stxr_f,u,v,w) -#define jit_stxi_f(u,v,w) jit_new_node_www(jit_code_stxi_f,u,v,w) - jit_code_stxr_f, jit_code_stxi_f, - -#define jit_bltr_f(v,w) jit_new_node_pww(jit_code_bltr_f,NULL,v,w) -#define jit_blti_f(v,w) jit_new_node_pwf(jit_code_blti_f,NULL,v,w) - jit_code_bltr_f, jit_code_blti_f, -#define jit_bler_f(v,w) jit_new_node_pww(jit_code_bler_f,NULL,v,w) -#define jit_blei_f(v,w) jit_new_node_pwf(jit_code_blei_f,NULL,v,w) - jit_code_bler_f, jit_code_blei_f, -#define jit_beqr_f(v,w) jit_new_node_pww(jit_code_beqr_f,NULL,v,w) -#define jit_beqi_f(v,w) jit_new_node_pwf(jit_code_beqi_f,NULL,v,w) - jit_code_beqr_f, jit_code_beqi_f, -#define jit_bger_f(v,w) jit_new_node_pww(jit_code_bger_f,NULL,v,w) -#define jit_bgei_f(v,w) jit_new_node_pwf(jit_code_bgei_f,NULL,v,w) - jit_code_bger_f, jit_code_bgei_f, -#define jit_bgtr_f(v,w) jit_new_node_pww(jit_code_bgtr_f,NULL,v,w) -#define jit_bgti_f(v,w) jit_new_node_pwf(jit_code_bgti_f,NULL,v,w) - jit_code_bgtr_f, jit_code_bgti_f, -#define jit_bner_f(v,w) jit_new_node_pww(jit_code_bner_f,NULL,v,w) -#define jit_bnei_f(v,w) jit_new_node_pwf(jit_code_bnei_f,NULL,v,w) - jit_code_bner_f, jit_code_bnei_f, -#define jit_bunltr_f(v,w) jit_new_node_pww(jit_code_bunltr_f,NULL,v,w) -#define jit_bunlti_f(v,w) jit_new_node_pwf(jit_code_bunlti_f,NULL,v,w) - jit_code_bunltr_f, jit_code_bunlti_f, -#define jit_bunler_f(v,w) jit_new_node_pww(jit_code_bunler_f,NULL,v,w) -#define jit_bunlei_f(v,w) jit_new_node_pwf(jit_code_bunlei_f,NULL,v,w) - jit_code_bunler_f, jit_code_bunlei_f, -#define jit_buneqr_f(v,w) jit_new_node_pww(jit_code_buneqr_f,NULL,v,w) -#define jit_buneqi_f(v,w) jit_new_node_pwf(jit_code_buneqi_f,NULL,v,w) - jit_code_buneqr_f, jit_code_buneqi_f, -#define jit_bunger_f(v,w) jit_new_node_pww(jit_code_bunger_f,NULL,v,w) -#define jit_bungei_f(v,w) jit_new_node_pwf(jit_code_bungei_f,NULL,v,w) - jit_code_bunger_f, jit_code_bungei_f, -#define jit_bungtr_f(v,w) jit_new_node_pww(jit_code_bungtr_f,NULL,v,w) -#define jit_bungti_f(v,w) jit_new_node_pwf(jit_code_bungti_f,NULL,v,w) - jit_code_bungtr_f, jit_code_bungti_f, -#define jit_bltgtr_f(v,w) jit_new_node_pww(jit_code_bltgtr_f,NULL,v,w) -#define jit_bltgti_f(v,w) jit_new_node_pwf(jit_code_bltgti_f,NULL,v,w) - jit_code_bltgtr_f, jit_code_bltgti_f, -#define jit_bordr_f(v,w) jit_new_node_pww(jit_code_bordr_f,NULL,v,w) -#define jit_bordi_f(v,w) jit_new_node_pwf(jit_code_bordi_f,NULL,v,w) - jit_code_bordr_f, jit_code_bordi_f, -#define jit_bunordr_f(v,w) jit_new_node_pww(jit_code_bunordr_f,NULL,v,w) -#define jit_bunordi_f(v,w) jit_new_node_pwf(jit_code_bunordi_f,NULL,v,w) - jit_code_bunordr_f, jit_code_bunordi_f, - -#define jit_pushargr_f(u) _jit_pushargr_f(_jit,u) -#define jit_pushargi_f(u) _jit_pushargi_f(_jit,u) - jit_code_pushargr_f, jit_code_pushargi_f, -#define jit_retr_f(u) _jit_retr_f(_jit,u) -#define jit_reti_f(u) _jit_reti_f(_jit,u) - jit_code_retr_f, jit_code_reti_f, -#define jit_retval_f(u) _jit_retval_f(_jit,u) - jit_code_retval_f, - -#define jit_arg_d() _jit_arg_d(_jit) - jit_code_arg_d, -#define jit_getarg_d(u,v) _jit_getarg_d(_jit,u,v) - jit_code_getarg_d, -#define jit_putargr_d(u,v) _jit_putargr_d(_jit,u,v) -#define jit_putargi_d(u,v) _jit_putargi_d(_jit,u,v) - jit_code_putargr_d, jit_code_putargi_d, - -#define jit_addr_d(u,v,w) jit_new_node_www(jit_code_addr_d,u,v,w) -#define jit_addi_d(u,v,w) jit_new_node_wwd(jit_code_addi_d,u,v,w) - jit_code_addr_d, jit_code_addi_d, -#define jit_subr_d(u,v,w) jit_new_node_www(jit_code_subr_d,u,v,w) -#define jit_subi_d(u,v,w) jit_new_node_wwd(jit_code_subi_d,u,v,w) - jit_code_subr_d, jit_code_subi_d, -#define jit_rsbr_d(u,v,w) jit_subr_d(u,w,v) -#define jit_rsbi_d(u,v,w) jit_new_node_wwd(jit_code_rsbi_d,u,v,w) - jit_code_rsbi_d, -#define jit_mulr_d(u,v,w) jit_new_node_www(jit_code_mulr_d,u,v,w) -#define jit_muli_d(u,v,w) jit_new_node_wwd(jit_code_muli_d,u,v,w) - jit_code_mulr_d, jit_code_muli_d, -#define jit_divr_d(u,v,w) jit_new_node_www(jit_code_divr_d,u,v,w) -#define jit_divi_d(u,v,w) jit_new_node_wwd(jit_code_divi_d,u,v,w) - jit_code_divr_d, jit_code_divi_d, - -#define jit_negr_d(u,v) jit_new_node_ww(jit_code_negr_d,u,v) -#define jit_absr_d(u,v) jit_new_node_ww(jit_code_absr_d,u,v) -#define jit_sqrtr_d(u,v) jit_new_node_ww(jit_code_sqrtr_d,u,v) - jit_code_negr_d, jit_code_absr_d, jit_code_sqrtr_d, - -#define jit_ltr_d(u,v,w) jit_new_node_www(jit_code_ltr_d,u,v,w) -#define jit_lti_d(u,v,w) jit_new_node_wwd(jit_code_lti_d,u,v,w) - jit_code_ltr_d, jit_code_lti_d, -#define jit_ler_d(u,v,w) jit_new_node_www(jit_code_ler_d,u,v,w) -#define jit_lei_d(u,v,w) jit_new_node_wwd(jit_code_lei_d,u,v,w) - jit_code_ler_d, jit_code_lei_d, -#define jit_eqr_d(u,v,w) jit_new_node_www(jit_code_eqr_d,u,v,w) -#define jit_eqi_d(u,v,w) jit_new_node_wwd(jit_code_eqi_d,u,v,w) - jit_code_eqr_d, jit_code_eqi_d, -#define jit_ger_d(u,v,w) jit_new_node_www(jit_code_ger_d,u,v,w) -#define jit_gei_d(u,v,w) jit_new_node_wwd(jit_code_gei_d,u,v,w) - jit_code_ger_d, jit_code_gei_d, -#define jit_gtr_d(u,v,w) jit_new_node_www(jit_code_gtr_d,u,v,w) -#define jit_gti_d(u,v,w) jit_new_node_wwd(jit_code_gti_d,u,v,w) - jit_code_gtr_d, jit_code_gti_d, -#define jit_ner_d(u,v,w) jit_new_node_www(jit_code_ner_d,u,v,w) -#define jit_nei_d(u,v,w) jit_new_node_wwd(jit_code_nei_d,u,v,w) - jit_code_ner_d, jit_code_nei_d, -#define jit_unltr_d(u,v,w) jit_new_node_www(jit_code_unltr_d,u,v,w) -#define jit_unlti_d(u,v,w) jit_new_node_wwd(jit_code_unlti_d,u,v,w) - jit_code_unltr_d, jit_code_unlti_d, -#define jit_unler_d(u,v,w) jit_new_node_www(jit_code_unler_d,u,v,w) -#define jit_unlei_d(u,v,w) jit_new_node_wwd(jit_code_unlei_d,u,v,w) - jit_code_unler_d, jit_code_unlei_d, -#define jit_uneqr_d(u,v,w) jit_new_node_www(jit_code_uneqr_d,u,v,w) -#define jit_uneqi_d(u,v,w) jit_new_node_wwd(jit_code_uneqi_d,u,v,w) - jit_code_uneqr_d, jit_code_uneqi_d, -#define jit_unger_d(u,v,w) jit_new_node_www(jit_code_unger_d,u,v,w) -#define jit_ungei_d(u,v,w) jit_new_node_wwd(jit_code_ungei_d,u,v,w) - jit_code_unger_d, jit_code_ungei_d, -#define jit_ungtr_d(u,v,w) jit_new_node_www(jit_code_ungtr_d,u,v,w) -#define jit_ungti_d(u,v,w) jit_new_node_wwd(jit_code_ungti_d,u,v,w) - jit_code_ungtr_d, jit_code_ungti_d, -#define jit_ltgtr_d(u,v,w) jit_new_node_www(jit_code_ltgtr_d,u,v,w) -#define jit_ltgti_d(u,v,w) jit_new_node_wwd(jit_code_ltgti_d,u,v,w) - jit_code_ltgtr_d, jit_code_ltgti_d, -#define jit_ordr_d(u,v,w) jit_new_node_www(jit_code_ordr_d,u,v,w) -#define jit_ordi_d(u,v,w) jit_new_node_wwd(jit_code_ordi_d,u,v,w) - jit_code_ordr_d, jit_code_ordi_d, -#define jit_unordr_d(u,v,w) jit_new_node_www(jit_code_unordr_d,u,v,w) -#define jit_unordi_d(u,v,w) jit_new_node_wwd(jit_code_unordi_d,u,v,w) - jit_code_unordr_d, jit_code_unordi_d, - -#define jit_truncr_d_i(u,v) jit_new_node_ww(jit_code_truncr_d_i,u,v) - jit_code_truncr_d_i, -#if __WORDSIZE == 32 -# define jit_truncr_d(u,v) jit_truncr_d_i(u,v) -#else -# define jit_truncr_d(u,v) jit_truncr_d_l(u,v) -# define jit_truncr_d_l(u,v) jit_new_node_ww(jit_code_truncr_d_l,u,v) -#endif - jit_code_truncr_d_l, -#define jit_extr_d(u,v) jit_new_node_ww(jit_code_extr_d,u,v) -#define jit_extr_f_d(u,v) jit_new_node_ww(jit_code_extr_f_d,u,v) - jit_code_extr_d, jit_code_extr_f_d, -#define jit_movr_d(u,v) jit_new_node_ww(jit_code_movr_d,u,v) -#define jit_movi_d(u,v) jit_new_node_wd(jit_code_movi_d,u,v) - jit_code_movr_d, jit_code_movi_d, - -#define jit_ldr_d(u,v) jit_new_node_ww(jit_code_ldr_d,u,v) -#define jit_ldi_d(u,v) jit_new_node_wp(jit_code_ldi_d,u,v) - jit_code_ldr_d, jit_code_ldi_d, -#define jit_ldxr_d(u,v,w) jit_new_node_www(jit_code_ldxr_d,u,v,w) -#define jit_ldxi_d(u,v,w) jit_new_node_www(jit_code_ldxi_d,u,v,w) - jit_code_ldxr_d, jit_code_ldxi_d, -#define jit_str_d(u,v) jit_new_node_ww(jit_code_str_d,u,v) -#define jit_sti_d(u,v) jit_new_node_pw(jit_code_sti_d,u,v) - jit_code_str_d, jit_code_sti_d, -#define jit_stxr_d(u,v,w) jit_new_node_www(jit_code_stxr_d,u,v,w) -#define jit_stxi_d(u,v,w) jit_new_node_www(jit_code_stxi_d,u,v,w) - jit_code_stxr_d, jit_code_stxi_d, - -#define jit_bltr_d(v,w) jit_new_node_pww(jit_code_bltr_d,NULL,v,w) -#define jit_blti_d(v,w) jit_new_node_pwd(jit_code_blti_d,NULL,v,w) - jit_code_bltr_d, jit_code_blti_d, -#define jit_bler_d(v,w) jit_new_node_pww(jit_code_bler_d,NULL,v,w) -#define jit_blei_d(v,w) jit_new_node_pwd(jit_code_blei_d,NULL,v,w) - jit_code_bler_d, jit_code_blei_d, -#define jit_beqr_d(v,w) jit_new_node_pww(jit_code_beqr_d,NULL,v,w) -#define jit_beqi_d(v,w) jit_new_node_pwd(jit_code_beqi_d,NULL,v,w) - jit_code_beqr_d, jit_code_beqi_d, -#define jit_bger_d(v,w) jit_new_node_pww(jit_code_bger_d,NULL,v,w) -#define jit_bgei_d(v,w) jit_new_node_pwd(jit_code_bgei_d,NULL,v,w) - jit_code_bger_d, jit_code_bgei_d, -#define jit_bgtr_d(v,w) jit_new_node_pww(jit_code_bgtr_d,NULL,v,w) -#define jit_bgti_d(v,w) jit_new_node_pwd(jit_code_bgti_d,NULL,v,w) - jit_code_bgtr_d, jit_code_bgti_d, -#define jit_bner_d(v,w) jit_new_node_pww(jit_code_bner_d,NULL,v,w) -#define jit_bnei_d(v,w) jit_new_node_pwd(jit_code_bnei_d,NULL,v,w) - jit_code_bner_d, jit_code_bnei_d, -#define jit_bunltr_d(v,w) jit_new_node_pww(jit_code_bunltr_d,NULL,v,w) -#define jit_bunlti_d(v,w) jit_new_node_pwd(jit_code_bunlti_d,NULL,v,w) - jit_code_bunltr_d, jit_code_bunlti_d, -#define jit_bunler_d(v,w) jit_new_node_pww(jit_code_bunler_d,NULL,v,w) -#define jit_bunlei_d(v,w) jit_new_node_pwd(jit_code_bunlei_d,NULL,v,w) - jit_code_bunler_d, jit_code_bunlei_d, -#define jit_buneqr_d(v,w) jit_new_node_pww(jit_code_buneqr_d,NULL,v,w) -#define jit_buneqi_d(v,w) jit_new_node_pwd(jit_code_buneqi_d,NULL,v,w) - jit_code_buneqr_d, jit_code_buneqi_d, -#define jit_bunger_d(v,w) jit_new_node_pww(jit_code_bunger_d,NULL,v,w) -#define jit_bungei_d(v,w) jit_new_node_pwd(jit_code_bungei_d,NULL,v,w) - jit_code_bunger_d, jit_code_bungei_d, -#define jit_bungtr_d(v,w) jit_new_node_pww(jit_code_bungtr_d,NULL,v,w) -#define jit_bungti_d(v,w) jit_new_node_pwd(jit_code_bungti_d,NULL,v,w) - jit_code_bungtr_d, jit_code_bungti_d, -#define jit_bltgtr_d(v,w) jit_new_node_pww(jit_code_bltgtr_d,NULL,v,w) -#define jit_bltgti_d(v,w) jit_new_node_pwd(jit_code_bltgti_d,NULL,v,w) - jit_code_bltgtr_d, jit_code_bltgti_d, -#define jit_bordr_d(v,w) jit_new_node_pww(jit_code_bordr_d,NULL,v,w) -#define jit_bordi_d(v,w) jit_new_node_pwd(jit_code_bordi_d,NULL,v,w) - jit_code_bordr_d, jit_code_bordi_d, -#define jit_bunordr_d(v,w) jit_new_node_pww(jit_code_bunordr_d,NULL,v,w) -#define jit_bunordi_d(v,w) jit_new_node_pwd(jit_code_bunordi_d,NULL,v,w) - jit_code_bunordr_d, jit_code_bunordi_d, - -#define jit_pushargr_d(u) _jit_pushargr_d(_jit,u) -#define jit_pushargi_d(u) _jit_pushargi_d(_jit,u) - jit_code_pushargr_d, jit_code_pushargi_d, -#define jit_retr_d(u) _jit_retr_d(_jit,u) -#define jit_reti_d(u) _jit_reti_d(_jit,u) - jit_code_retr_d, jit_code_reti_d, -#define jit_retval_d(u) _jit_retval_d(_jit,u) - jit_code_retval_d, - - /* Special internal backend specific codes */ - jit_code_movr_w_f, jit_code_movr_ww_d, /* w* -> f|d */ -#define jit_movr_w_f(u, v) jit_new_node_ww(jit_code_movr_w_f, u, v) -#define jit_movr_ww_d(u, v, w) jit_new_node_www(jit_code_movr_ww_d, u, v, w) - jit_code_movr_w_d, /* w -> d */ -#define jit_movr_w_d(u, v) jit_new_node_ww(jit_code_movr_w_d, u, v) - - jit_code_movr_f_w, jit_code_movi_f_w, /* f|d -> w* */ -#define jit_movr_f_w(u, v) jit_new_node_ww(jit_code_movr_f_w, u, v) -#define jit_movi_f_w(u, v) jit_new_node_wf(jit_code_movi_f_w, u, v) - jit_code_movr_d_ww, jit_code_movi_d_ww, -#define jit_movr_d_ww(u, v, w) jit_new_node_www(jit_code_movr_d_ww, u, v, w) -#define jit_movi_d_ww(u, v, w) jit_new_node_wwd(jit_code_movi_d_ww, u, v, w) - - jit_code_movr_d_w, jit_code_movi_d_w, /* d -> w */ -#define jit_movr_d_w(u, v) jit_new_node_ww(jit_code_movr_d_w, u, v) -#define jit_movi_d_w(u, v) jit_new_node_wd(jit_code_movi_d_w, u, v) - - jit_code_last_code -} jit_code_t; - -typedef void* (*jit_alloc_func_ptr) (size_t); -typedef void* (*jit_realloc_func_ptr) (void*, size_t); -typedef void (*jit_free_func_ptr) (void*); - -/* - * Prototypes - */ -extern void init_jit(const char*); -extern void finish_jit(void); - -extern jit_state_t *jit_new_state(void); -#define jit_clear_state() _jit_clear_state(_jit) -extern void _jit_clear_state(jit_state_t*); -#define jit_destroy_state() _jit_destroy_state(_jit) -extern void _jit_destroy_state(jit_state_t*); - -#define jit_address(node) _jit_address(_jit, node) -extern jit_pointer_t _jit_address(jit_state_t*, jit_node_t*); -extern jit_node_t *_jit_name(jit_state_t*, const char*); -extern jit_node_t *_jit_note(jit_state_t*, const char*, int); -extern jit_node_t *_jit_label(jit_state_t*); -extern jit_node_t *_jit_forward(jit_state_t*); -extern jit_node_t *_jit_indirect(jit_state_t*); -extern void _jit_link(jit_state_t*, jit_node_t*); -#define jit_forward_p(u) _jit_forward_p(_jit,u) -extern jit_bool_t _jit_forward_p(jit_state_t*,jit_node_t*); -#define jit_indirect_p(u) _jit_indirect_p(_jit,u) -extern jit_bool_t _jit_indirect_p(jit_state_t*,jit_node_t*); -#define jit_target_p(u) _jit_target_p(_jit,u) -extern jit_bool_t _jit_target_p(jit_state_t*,jit_node_t*); - -extern void _jit_prolog(jit_state_t*); - -extern jit_int32_t _jit_allocai(jit_state_t*, jit_int32_t); -extern void _jit_allocar(jit_state_t*, jit_int32_t, jit_int32_t); -extern void _jit_ellipsis(jit_state_t*); - -extern jit_node_t *_jit_arg(jit_state_t*); -extern void _jit_getarg_c(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_uc(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_s(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_us(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_i(jit_state_t*, jit_gpr_t, jit_node_t*); -#if __WORDSIZE == 64 -extern void _jit_getarg_ui(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_l(jit_state_t*, jit_gpr_t, jit_node_t*); -#endif -extern void _jit_putargr(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_putargi(jit_state_t*, jit_word_t, jit_node_t*); - -extern void _jit_prepare(jit_state_t*); -extern void _jit_ellipsis(jit_state_t*); -extern void _jit_va_push(jit_state_t*, jit_gpr_t); -extern void _jit_pushargr(jit_state_t*, jit_gpr_t); -extern void _jit_pushargi(jit_state_t*, jit_word_t); -extern void _jit_finishr(jit_state_t*, jit_gpr_t); -extern jit_node_t *_jit_finishi(jit_state_t*, jit_pointer_t); -extern void _jit_ret(jit_state_t*); -extern void _jit_retr(jit_state_t*, jit_gpr_t); -extern void _jit_reti(jit_state_t*, jit_word_t); -extern void _jit_retval_c(jit_state_t*, jit_gpr_t); -extern void _jit_retval_uc(jit_state_t*, jit_gpr_t); -extern void _jit_retval_s(jit_state_t*, jit_gpr_t); -extern void _jit_retval_us(jit_state_t*, jit_gpr_t); -extern void _jit_retval_i(jit_state_t*, jit_gpr_t); -#if __WORDSIZE == 64 -extern void _jit_retval_ui(jit_state_t*, jit_gpr_t); -extern void _jit_retval_l(jit_state_t*, jit_gpr_t); -#endif -extern void _jit_epilog(jit_state_t*); - -#define jit_patch(u) _jit_patch(_jit,u) -extern void _jit_patch(jit_state_t*, jit_node_t*); -#define jit_patch_at(u,v) _jit_patch_at(_jit,u,v) -extern void _jit_patch_at(jit_state_t*, jit_node_t*, jit_node_t*); -#define jit_patch_abs(u,v) _jit_patch_abs(_jit,u,v) -extern void _jit_patch_abs(jit_state_t*, jit_node_t*, jit_pointer_t); -#define jit_realize() _jit_realize(_jit) -extern void _jit_realize(jit_state_t*); -#define jit_get_code(u) _jit_get_code(_jit,u) -extern jit_pointer_t _jit_get_code(jit_state_t*, jit_word_t*); -#define jit_set_code(u,v) _jit_set_code(_jit,u,v) -extern void _jit_set_code(jit_state_t*, jit_pointer_t, jit_word_t); -#define jit_get_data(u,v) _jit_get_data(_jit,u,v) -extern jit_pointer_t _jit_get_data(jit_state_t*, jit_word_t*, jit_word_t*); -#define jit_set_data(u,v,w) _jit_set_data(_jit,u,v,w) -extern void _jit_set_data(jit_state_t*, jit_pointer_t, jit_word_t, jit_word_t); -#define jit_frame(u) _jit_frame(_jit,u) -extern void _jit_frame(jit_state_t*, jit_int32_t); -#define jit_tramp(u) _jit_tramp(_jit,u) -extern void _jit_tramp(jit_state_t*, jit_int32_t); -#define jit_emit() _jit_emit(_jit) -extern jit_pointer_t _jit_emit(jit_state_t*); - -#define jit_print() _jit_print(_jit) -extern void _jit_print(jit_state_t*); - -extern jit_node_t *_jit_arg_f(jit_state_t*); -extern void _jit_getarg_f(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargr_f(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargi_f(jit_state_t*, jit_float32_t, jit_node_t*); -extern void _jit_pushargr_f(jit_state_t*, jit_fpr_t); -extern void _jit_pushargi_f(jit_state_t*, jit_float32_t); -extern void _jit_retr_f(jit_state_t*, jit_fpr_t); -extern void _jit_reti_f(jit_state_t*, jit_float32_t); -extern void _jit_retval_f(jit_state_t*, jit_fpr_t); - -extern jit_node_t *_jit_arg_d(jit_state_t*); -extern void _jit_getarg_d(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargr_d(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargi_d(jit_state_t*, jit_float64_t, jit_node_t*); -extern void _jit_pushargr_d(jit_state_t*, jit_fpr_t); -extern void _jit_pushargi_d(jit_state_t*, jit_float64_t); -extern void _jit_retr_d(jit_state_t*, jit_fpr_t); -extern void _jit_reti_d(jit_state_t*, jit_float64_t); -extern void _jit_retval_d(jit_state_t*, jit_fpr_t); - -#define jit_new_node(c) _jit_new_node(_jit,c) -extern jit_node_t *_jit_new_node(jit_state_t*, jit_code_t); -#define jit_new_node_w(c,u) _jit_new_node_w(_jit,c,u) -extern jit_node_t *_jit_new_node_w(jit_state_t*, jit_code_t, - jit_word_t); -#define jit_new_node_f(c,u) _jit_new_node_f(_jit,c,u) -extern jit_node_t *_jit_new_node_f(jit_state_t*, jit_code_t, - jit_float32_t); -#define jit_new_node_d(c,u) _jit_new_node_d(_jit,c,u) -extern jit_node_t *_jit_new_node_d(jit_state_t*, jit_code_t, - jit_float64_t); -#define jit_new_node_p(c,u) _jit_new_node_p(_jit,c,u) -extern jit_node_t *_jit_new_node_p(jit_state_t*, jit_code_t, - jit_pointer_t); -#define jit_new_node_ww(c,u,v) _jit_new_node_ww(_jit,c,u,v) -extern jit_node_t *_jit_new_node_ww(jit_state_t*,jit_code_t, - jit_word_t, jit_word_t); -#define jit_new_node_wp(c,u,v) _jit_new_node_wp(_jit,c,u,v) -extern jit_node_t *_jit_new_node_wp(jit_state_t*,jit_code_t, - jit_word_t, jit_pointer_t); -#define jit_new_node_fp(c,u,v) _jit_new_node_fp(_jit,c,u,v) -extern jit_node_t *_jit_new_node_fp(jit_state_t*,jit_code_t, - jit_float32_t, jit_pointer_t); -#define jit_new_node_dp(c,u,v) _jit_new_node_dp(_jit,c,u,v) -extern jit_node_t *_jit_new_node_dp(jit_state_t*,jit_code_t, - jit_float64_t, jit_pointer_t); -#define jit_new_node_pw(c,u,v) _jit_new_node_pw(_jit,c,u,v) -extern jit_node_t *_jit_new_node_pw(jit_state_t*,jit_code_t, - jit_pointer_t, jit_word_t); -#define jit_new_node_wf(c,u,v) _jit_new_node_wf(_jit,c,u,v) -extern jit_node_t *_jit_new_node_wf(jit_state_t*, jit_code_t, - jit_word_t, jit_float32_t); -#define jit_new_node_wd(c,u,v) _jit_new_node_wd(_jit,c,u,v) -extern jit_node_t *_jit_new_node_wd(jit_state_t*, jit_code_t, - jit_word_t, jit_float64_t); -#define jit_new_node_www(c,u,v,w) _jit_new_node_www(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_www(jit_state_t*, jit_code_t, - jit_word_t, jit_word_t, jit_word_t); -#define jit_new_node_qww(c,l,h,v,w) _jit_new_node_qww(_jit,c,l,h,v,w) -extern jit_node_t *_jit_new_node_qww(jit_state_t*, jit_code_t, - jit_int32_t, jit_int32_t, - jit_word_t, jit_word_t); -#define jit_new_node_wwf(c,u,v,w) _jit_new_node_wwf(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_wwf(jit_state_t*, jit_code_t, - jit_word_t, jit_word_t, jit_float32_t); -#define jit_new_node_wwd(c,u,v,w) _jit_new_node_wwd(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_wwd(jit_state_t*, jit_code_t, - jit_word_t, jit_word_t, jit_float64_t); -#define jit_new_node_pww(c,u,v,w) _jit_new_node_pww(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_pww(jit_state_t*, jit_code_t, - jit_pointer_t, jit_word_t, jit_word_t); -#define jit_new_node_pwf(c,u,v,w) _jit_new_node_pwf(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_pwf(jit_state_t*, jit_code_t, - jit_pointer_t, jit_word_t, jit_float32_t); -#define jit_new_node_pwd(c,u,v,w) _jit_new_node_pwd(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_pwd(jit_state_t*, jit_code_t, - jit_pointer_t, jit_word_t, jit_float64_t); - -#define jit_arg_register_p(u) _jit_arg_register_p(_jit,u) -extern jit_bool_t _jit_arg_register_p(jit_state_t*, jit_node_t*); -#define jit_callee_save_p(u) _jit_callee_save_p(_jit,u) -extern jit_bool_t _jit_callee_save_p(jit_state_t*, jit_int32_t); -#define jit_pointer_p(u) _jit_pointer_p(_jit,u) -extern jit_bool_t _jit_pointer_p(jit_state_t*,jit_pointer_t); - -#define jit_get_note(n,u,v,w) _jit_get_note(_jit,n,u,v,w) -extern jit_bool_t _jit_get_note(jit_state_t*,jit_pointer_t,char**,char**,int*); - -#define jit_disassemble() _jit_disassemble(_jit) -extern void _jit_disassemble(jit_state_t*); - -extern void jit_set_memory_functions(jit_alloc_func_ptr, - jit_realloc_func_ptr, - jit_free_func_ptr); -extern void jit_get_memory_functions(jit_alloc_func_ptr*, - jit_realloc_func_ptr*, - jit_free_func_ptr*); - -#endif /* _lightning_h */ diff --git a/libguile/lightning/include/lightning/jit_private.h b/libguile/lightning/include/lightning/jit_private.h deleted file mode 100644 index d09fc46f2..000000000 --- a/libguile/lightning/include/lightning/jit_private.h +++ /dev/null @@ -1,740 +0,0 @@ -/* - * Copyright (C) 2012-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#ifndef _jit_private_h -#define _jit_private_h - -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include <assert.h> -#include <limits.h> -#include <stdio.h> - -#if defined(__GNUC__) -# define maybe_unused __attribute__ ((unused)) -# define unlikely(exprn) __builtin_expect(!!(exprn), 0) -# define likely(exprn) __builtin_expect(!!(exprn), 1) -# if (__GNUC__ >= 4) -# define PUBLIC __attribute__ ((visibility("default"))) -# define HIDDEN __attribute__ ((visibility("hidden"))) -# else -# define PUBLIC /**/ -# define HIDDEN /**/ -# endif -#else -# define maybe_unused /**/ -# define unlikely(exprn) exprn -# define likely(exprn) exprn -# define PUBLIC /**/ -# define HIDDEN /**/ -#endif - -#define rc(value) jit_class_##value -#define rn(reg) (jit_regno(_rvs[jit_regno(reg)].spec)) - -#if defined(__i386__) || defined(__x86_64__) -# define JIT_SP _RSP -# define JIT_RET _RAX -# if __X32 -# define JIT_FRET _ST0 -typedef jit_uint32_t jit_regset_t; -# else -# if __CYGWIN__ -# define JIT_RA0 _RCX -# else -# define JIT_RA0 _RDI -# endif -# define JIT_FA0 _XMM0 -# define JIT_FRET _XMM0 -typedef jit_uint64_t jit_regset_t; -# endif -#elif defined(__mips__) -# define JIT_RA0 _A0 -# define JIT_FA0 _F12 -# define JIT_SP _SP -# define JIT_RET _V0 -# define JIT_FRET _F0 -typedef jit_uint64_t jit_regset_t; -#elif defined(__arm__) -# define JIT_RA0 _R0 -# define JIT_FA0 _D0 -# define JIT_SP _R13 -# define JIT_RET _R0 -# if defined(__ARM_PCS_VFP) -# define JIT_FRET _D0 -# else -# define JIT_FRET _R0 -# endif -typedef jit_uint64_t jit_regset_t; -#elif defined(__ppc__) || defined(__powerpc__) -# define JIT_RA0 _R3 -# define JIT_FA0 _F1 -# define JIT_SP _R1 -# define JIT_RET _R3 -# define JIT_FRET _F1 -typedef jit_uint64_t jit_regset_t; -#elif defined(__sparc__) -# define JIT_SP _SP -# define JIT_RET _I0 -# define JIT_FRET _F0 -# if __WORDSIZE == 32 -typedef jit_uint64_t jit_regset_t; -# else -typedef struct { - jit_uint64_t rl; - jit_uint64_t rh; -} jit_regset_t; -# endif -#elif defined(__ia64__) -# define JIT_SP _R12 -# define JIT_RET _R8 -# define JIT_FRET _F8 -typedef struct { - jit_uint64_t rl; - jit_uint64_t rh; - jit_uint64_t fl; - jit_uint64_t fh; -} jit_regset_t; -#elif defined(__hppa__) -# define JIT_SP _R30 -# define JIT_RET _R28 -# define JIT_FRET _F4 -typedef jit_uint64_t jit_regset_t; -#elif defined(__aarch64__) -# define JIT_RA0 _R0 -# define JIT_FA0 _V0 -# define JIT_SP _SP -# define JIT_RET _R0 -# define JIT_FRET _V0 -typedef jit_uint64_t jit_regset_t; -#elif defined(__s390__) || defined(__s390x__) -# define JIT_SP _R15 -# define JIT_RET _R2 -# define JIT_FRET _F0 -typedef jit_uint32_t jit_regset_t; -#elif defined(__alpha__) -# define JIT_SP _SP -# define JIT_RET _V0 -# define JIT_FRET _F0 -typedef jit_uint64_t jit_regset_t; -#endif - -#define jit_data(u,v,w) _jit_data(_jit,u,v,w) -extern jit_node_t *_jit_data(jit_state_t*, const void*, - jit_word_t, jit_int32_t); - -#define jit_size(vector) (sizeof(vector) / sizeof((vector)[0])) - -#define jit_reg_free_p(regno) \ - (!jit_regset_tstbit(&_jitc->reglive, regno) && \ - !jit_regset_tstbit(&_jitc->regarg, regno) && \ - !jit_regset_tstbit(&_jitc->regsav, regno)) - -#define jit_reg_free_if_spill_p(regno) \ - (!jit_regset_tstbit(&_jitc->regarg, regno) && \ - !jit_regset_tstbit(&_jitc->regsav, regno)) - -#define jit_inc_synth(code) \ - do { \ - (void)jit_new_node(jit_code_##code); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_w(code, u) \ - do { \ - (void)jit_new_node_w(jit_code_##code, u); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_f(code, u) \ - do { \ - (void)jit_new_node_f(jit_code_##code, u); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_d(code, u) \ - do { \ - (void)jit_new_node_d(jit_code_##code, u); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_ww(code, u, v) \ - do { \ - (void)jit_new_node_ww(jit_code_##code, u, v); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_wp(code, u, v) \ - do { \ - (void)jit_new_node_wp(jit_code_##code, u, v); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_fp(code, u, v) \ - do { \ - (void)jit_new_node_fp(jit_code_##code, u, v); \ - jit_synth_inc(); \ - } while (0) -#define jit_inc_synth_dp(code, u, v) \ - do { \ - (void)jit_new_node_dp(jit_code_##code, u, v); \ - jit_synth_inc(); \ - } while (0) -#define jit_dec_synth() jit_synth_dec() - -#define jit_link_prolog() \ - do { \ - _jitc->tail->link = _jitc->function->prolog->link; \ - _jitc->function->prolog->link = _jitc->tail; \ - } while (0) -#define jit_link_prepare() \ - do { \ - _jitc->tail->link = _jitc->prepare->link; \ - _jitc->prepare->link = _jitc->tail; \ - } while (0) -#define jit_link_reverse(where) \ - do { \ - jit_node_t *tmp, *tail = 0; \ - while (where) { \ - tmp = (where)->link; \ - (where)->link = tail; \ - tail = where; \ - where = tmp; \ - } \ - where = tail; \ - } while (0); - -/* - * Private jit_class bitmasks - */ -#define jit_class_named 0x00400000 /* hit must be the named reg */ -#define jit_class_nospill 0x00800000 /* hint to fail if need spill */ -#define jit_class_sft 0x01000000 /* not a hardware register */ -#define jit_class_rg8 0x04000000 /* x86 8 bits */ -#define jit_class_xpr 0x80000000 /* float / vector */ -/* Used on sparc64 where %f0-%f31 can be encode for single float - * but %f32 to %f62 only as double precision */ -#define jit_class_sng 0x10000000 /* Single precision float */ -#define jit_class_dbl 0x20000000 /* Only double precision float */ -#define jit_regno_patch 0x00008000 /* this is a register - * returned by a "user" call - * to jit_get_reg() */ - -#define jit_call_default 0 -#define jit_call_varargs 1 - -#define jit_kind_register 1 -#define jit_kind_code 2 -#define jit_kind_word 3 -#define jit_kind_float32 4 -#define jit_kind_float64 5 - -#define jit_cc_a0_reg 0x00000001 /* arg0 is a register */ -#define jit_cc_a0_chg 0x00000002 /* arg0 is modified */ -#define jit_cc_a0_jmp 0x00000004 /* arg0 is a jump target */ -#define jit_cc_a0_rlh 0x00000008 /* arg0 is a register pair */ -#define jit_cc_a0_int 0x00000010 /* arg0 is immediate word */ -#define jit_cc_a0_flt 0x00000020 /* arg0 is immediate float */ -#define jit_cc_a0_dbl 0x00000040 /* arg0 is immediate double */ -#define jit_cc_a0_arg 0x00000080 /* arg1 is an argument int id */ -#define jit_cc_a1_reg 0x00000100 /* arg1 is a register */ -#define jit_cc_a1_chg 0x00000200 /* arg1 is modified */ -#define jit_cc_a1_int 0x00001000 /* arg1 is immediate word */ -#define jit_cc_a1_flt 0x00002000 /* arg1 is immediate float */ -#define jit_cc_a1_dbl 0x00004000 /* arg1 is immediate double */ -#define jit_cc_a1_arg 0x00008000 /* arg1 is an argument node */ -#define jit_cc_a2_reg 0x00010000 /* arg2 is a register */ -#define jit_cc_a2_chg 0x00020000 /* arg2 is modified */ -#define jit_cc_a2_int 0x00100000 /* arg2 is immediate word */ -#define jit_cc_a2_flt 0x00200000 /* arg2 is immediate float */ -#define jit_cc_a2_dbl 0x00400000 /* arg2 is immediate double */ - -#if __ia64__ || (__sparc__ && __WORDSIZE == 64) -extern void -jit_regset_com(jit_regset_t*, jit_regset_t*); - -extern void -jit_regset_and(jit_regset_t*, jit_regset_t*, jit_regset_t*); - -extern void -jit_regset_ior(jit_regset_t*, jit_regset_t*, jit_regset_t*); - -extern void -jit_regset_xor(jit_regset_t*, jit_regset_t*, jit_regset_t*); - -extern void -jit_regset_set(jit_regset_t*, jit_regset_t*); - -extern void -jit_regset_set_mask(jit_regset_t*, jit_int32_t); - -extern jit_bool_t -jit_regset_cmp_ui(jit_regset_t*, jit_word_t); - -extern void -jit_regset_set_ui(jit_regset_t*, jit_word_t); - -extern jit_bool_t -jit_regset_set_p(jit_regset_t*); - -extern void -jit_regset_clrbit(jit_regset_t*, jit_int32_t); - -extern void -jit_regset_setbit(jit_regset_t*, jit_int32_t); - -extern jit_bool_t -jit_regset_tstbit(jit_regset_t*, jit_int32_t); -# if __sparc__ && __WORDSIZE == 64 -# define jit_regset_new(set) \ - do { (set)->rl = (set)->rh = 0; } while (0) -# define jit_regset_del(set) \ - do { (set)->rl = (set)->rh = 0; } while (0) -# else -# define jit_regset_new(set) \ - do { (set)->rl = (set)->rh = (set)->fl = (set)->fh = 0; } while (0) -# define jit_regset_del(set) \ - do { (set)->rl = (set)->rh = (set)->fl = (set)->fh = 0; } while (0) -# endif -#else -# define jit_regset_com(u, v) (*(u) = ~*(v)) -# define jit_regset_and(u, v, w) (*(u) = *(v) & *(w)) -# define jit_regset_ior(u, v, w) (*(u) = *(v) | *(w)) -# define jit_regset_xor(u, v, w) (*(u) = *(v) ^ *(w)) -# define jit_regset_set(u, v) (*(u) = *(v)) -# define jit_regset_set_mask(u, v) (*(u) = (1LL << (v)) - 1) -# define jit_regset_cmp_ui(u, v) (*(u) != (v)) -# define jit_regset_set_ui(u, v) (*(u) = (v)) -# define jit_regset_set_p(set) (*set) -# define jit_regset_clrbit(set, bit) (*(set) &= ~(1LL << (bit))) -# define jit_regset_setbit(set, bit) (*(set) |= 1LL << (bit)) -# define jit_regset_tstbit(set, bit) (*(set) & (1LL << (bit))) -# define jit_regset_new(set) (*(set) = 0) -# define jit_regset_del(set) (*(set) = 0) -#endif -extern unsigned long -jit_regset_scan1(jit_regset_t*, jit_int32_t); - -#define jit_reglive_setup() \ - do { \ - jit_regset_set_ui(&_jitc->reglive, 0); \ - jit_regset_set_ui(&_jitc->regmask, 0); \ - } while (0) - -/* - * Types - */ -typedef union jit_data jit_data_t; -typedef struct jit_note jit_note_t; -typedef struct jit_line jit_line_t; -typedef struct jit_block jit_block_t; -typedef struct jit_value jit_value_t; -typedef struct jit_compiler jit_compiler_t; -typedef struct jit_function jit_function_t; -typedef struct jit_register jit_register_t; -#if __arm__ -# if DISASSEMBLER -typedef struct jit_data_info jit_data_info_t; -# endif -#endif - -union jit_data { - struct { -#if __BYTE_ORDER == __LITTLE_ENDIAN - jit_int32_t l; - jit_int32_t h; -#else - jit_int32_t h; - jit_int32_t l; -#endif - } q; - jit_word_t w; - jit_float32_t f; - jit_float64_t d; - jit_pointer_t p; - jit_node_t *n; -}; - -struct jit_note { - jit_uint8_t *code; - char *name; - jit_line_t *lines; - jit_word_t length; - jit_word_t size; /* of code */ -}; - -struct jit_line { - char *file; - jit_int32_t *linenos; - jit_int32_t *offsets; - jit_word_t length; -}; - -struct jit_node { - jit_node_t *next; - jit_code_t code; - jit_uint16_t flag; - jit_uint16_t offset; /* Used if DEVEL_DISASSEMBLER */ - jit_data_t u; - jit_data_t v; - jit_data_t w; - jit_node_t *link; -}; - -struct jit_block { - jit_node_t *label; - jit_regset_t reglive; - jit_regset_t regmask; - jit_regset_t setmask; /* Used for forward second pass */ -}; - -struct jit_value { - jit_int32_t kind; - jit_code_t code; - jit_data_t base; - jit_data_t disp; -}; - -typedef struct { -#if __arm__ - jit_word_t kind; -#endif - jit_word_t inst; - jit_node_t *node; -} jit_patch_t; - -#if __arm__ && DISASSEMBLER -struct jit_data_info { - jit_uword_t code; /* pointer in code buffer */ - jit_word_t length; /* length of constant vector */ -}; -#endif - -struct jit_function { - struct { - jit_int32_t argi; - jit_int32_t argf; - jit_int32_t size; - jit_int32_t aoff; - jit_int32_t alen; - jit_int32_t call; - jit_int32_t argn; /* for debug output */ - } self; - struct { - jit_int32_t argi; - jit_int32_t argf; - jit_int32_t size; - jit_int32_t call; - } call; - jit_node_t *prolog; - jit_node_t *epilog; - jit_int32_t *regoff; - jit_regset_t regset; - jit_int32_t stack; - - /* Helper for common jit generation pattern, used in GNU Smalltalk - * and possibly others, where a static frame layout is required or - * assumed. */ - jit_int32_t frame; - jit_uint32_t define_frame : 1; - jit_uint32_t assume_frame : 1; - - /* alloca offset offset */ - jit_int32_t aoffoff; - /* uses allocar flag */ - jit_uint32_t allocar : 1; - - /* varargs state offsets */ - jit_int32_t vaoff; /* offset of jit_va_list */ - jit_int32_t vagp; /* first gp va argument */ - jit_int32_t vafp; /* first fp va argument */ -}; - -/* data used only during jit generation */ -struct jit_compiler { -#if __ia64__ - struct { - jit_uint64_t i : 41; - jit_uint64_t t : 4; - } inst[3]; - jit_regset_t regs; /* changed regs since last stop */ - jit_int32_t pred; /* changed preds last stop */ - jit_int32_t ioff; /* offset in inst vector */ - jit_int32_t rout; /* first output register */ - jit_int32_t breg; /* base register for prolog/epilog */ -#endif -#if __mips__ || __ia64__ || __alpha__ || (__sparc__ && __WORDSIZE == 64) - jit_int32_t carry; -#define jit_carry _jitc->carry -#endif - jit_node_t *head; - jit_node_t *tail; - jit_node_t *prepare; /* inside prepare/finish* block */ - jit_uint32_t realize : 1; /* jit_realize() called? */ - jit_uint32_t dataset : 1; /* jit_dataset() called? */ - jit_uint32_t done : 1; /* emit state finished */ - jit_uint32_t emit : 1; /* emit state entered */ - jit_uint32_t again : 1; /* start over emiting function */ - jit_uint32_t synth : 8; /* emiting synthesized instructions */ -#if DEBUG - jit_uint32_t getreg : 1; -#endif - jit_uint32_t no_data : 1; - jit_uint32_t no_note : 1; - jit_int32_t reglen; /* number of registers */ - jit_regset_t regarg; /* cannot allocate */ - jit_regset_t regsav; /* automatic spill only once */ - jit_regset_t reglive; /* known live registers at some point */ - jit_regset_t regmask; /* register mask to update reglive */ - struct { - jit_word_t *ptr; - jit_word_t length; - } blockmask; /* mask of visited basic blocks */ - struct { - jit_uint8_t *end; - } code; - struct { - jit_uint8_t *ptr; - jit_node_t **table; /* very simple hash table */ - jit_word_t size; /* number of vectors in table */ - jit_word_t count; /* number of hash table entries */ - jit_word_t offset; /* offset in bytes in ptr */ - } data; - jit_node_t **spill; - jit_int32_t *gen; /* ssa like "register version" */ - jit_value_t *values; /* temporary jit_value_t vector */ - struct { - jit_block_t *ptr; - jit_word_t offset; - jit_word_t length; - } blocks; /* basic blocks */ - struct { - jit_patch_t *ptr; - jit_word_t offset; - jit_word_t length; - } patches; /* forward patch information */ - jit_function_t *function; /* current function */ - struct { - jit_function_t *ptr; - jit_word_t offset; - jit_word_t length; - } functions; /* prolog/epilogue offsets in code */ - struct { - jit_node_t **ptr; - jit_word_t offset; - jit_word_t length; - } pool; - jit_node_t *list; - struct { - jit_node_t *head; /* first note node */ - jit_node_t *tail; /* linked list insertion */ - /* fields to store temporary state information */ - jit_word_t size; - jit_node_t *name; - jit_node_t *note; - jit_uint8_t *base; - } note; -#if __arm__ - /* prevent using thumb instructions that set flags? */ - jit_uint32_t no_set_flags : 1; -# if DISASSEMBLER - struct { - jit_data_info_t *ptr; - jit_word_t offset; - jit_word_t length; - } data_info; /* constant pools information */ -# endif - /* Note that this field is somewhat hackish, but required by most - * ways to implement jit, unless implementing a pure one function - * per jit, as most times it needs to start the jit buffer with a - * jump where the "main" prolog starts, and because the initial - * code is in "arm mode", need to make an "arm mode" patch on that - * jump. A good example is the test suite assembler, where most - * test cases start with a "jmpi main" call. */ - jit_uword_t thumb; - struct { - jit_uint8_t *data; /* pointer to code */ - jit_word_t size; /* size data */ - jit_word_t offset; /* pending patches */ - jit_word_t length; /* number of pending constants */ - jit_int32_t values[1024]; /* pending constants */ - jit_word_t patches[2048]; - } consts; -#elif __powerpc__ || __ia64__ - /* Keep track of prolog addresses, just for the sake of making - * jit that starts with a jump to a "main" label work like other - * backends. */ - struct { - jit_word_t *ptr; - jit_word_t offset; - jit_word_t length; - } prolog; - jit_bool_t jump; -#endif -}; - -#define _jitc _jit->comp -struct jit_state { - union { - jit_uint8_t *uc; - jit_uint16_t *us; - jit_uint32_t *ui; - jit_uint64_t *ul; - jit_word_t w; - } pc; - struct { - jit_uint8_t *ptr; - jit_word_t length; - } code; - struct { - jit_uint8_t *ptr; - jit_word_t length; - } data; - struct { - jit_note_t *ptr; - jit_word_t length; - } note; - jit_compiler_t *comp; - /* Flags to know if user did set the code and data buffers */ - jit_uint32_t user_code : 1; - jit_uint32_t user_data : 1; -}; - -struct jit_register { - jit_reg_t spec; - char *name; -}; - -/* - * Prototypes - */ -extern void jit_get_cpu(void); - -#define jit_init() _jit_init(_jit) -extern void _jit_init(jit_state_t*); - -#define jit_synth_inc() _jit_synth_inc(_jit) -extern void _jit_synth_inc(jit_state_t*); - -#define jit_new_node_no_link(u) _jit_new_node_no_link(_jit, u) -extern jit_node_t *_jit_new_node_no_link(jit_state_t*, jit_code_t); - -#define jit_link_node(u) _jit_link_node(_jit, u) -extern void _jit_link_node(jit_state_t*, jit_node_t*); - -#define jit_link_label(l) _jit_link_label(_jit,l) -extern void -_jit_link_label(jit_state_t*,jit_node_t*); - -#define jit_synth_dec() _jit_synth_dec(_jit) -extern void _jit_synth_dec(jit_state_t*); - -#define jit_reglive(node) _jit_reglive(_jit, node) -extern void -_jit_reglive(jit_state_t*, jit_node_t*); - -#define jit_regarg_set(n,v) _jit_regarg_set(_jit,n,v) -extern void -_jit_regarg_set(jit_state_t*, jit_node_t*, jit_int32_t); - -#define jit_regarg_clr(n,v) _jit_regarg_clr(_jit,n,v) -extern void -_jit_regarg_clr(jit_state_t*, jit_node_t*, jit_int32_t); - -#define jit_get_reg(s) _jit_get_reg(_jit,s) -extern jit_int32_t -_jit_get_reg(jit_state_t*, jit_int32_t); - -#define jit_unget_reg(r) _jit_unget_reg(_jit,r) -extern void -_jit_unget_reg(jit_state_t*, jit_int32_t); - -#define jit_save(reg) _jit_save(_jit, reg) -extern void -_jit_save(jit_state_t*, jit_int32_t); - -#define jit_load(reg) _jit_load(_jit, reg) -extern void -_jit_load(jit_state_t*, jit_int32_t); - -#define jit_trampoline(u,v) _jit_trampoline(_jit, u, v) -extern void _jit_trampoline(jit_state_t*, jit_int32_t, jit_bool_t); - -#define jit_optimize() _jit_optimize(_jit) -extern void -_jit_optimize(jit_state_t*); - -#define jit_classify(code) _jit_classify(_jit, code) -extern jit_int32_t -_jit_classify(jit_state_t*, jit_code_t); - -#define jit_regarg_p(n, r) _jit_regarg_p(_jit, n, r) -extern jit_bool_t -_jit_regarg_p(jit_state_t*, jit_node_t*, jit_int32_t); - -#define emit_code() _emit_code(_jit) -extern jit_pointer_t -_emit_code(jit_state_t*); - -extern void -jit_flush(void *fptr, void *tptr); - -#define emit_ldxi(r0, r1, i0) _emit_ldxi(_jit, r0, r1, i0) -extern void -_emit_ldxi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); - -#define emit_stxi(i0, r0, r1) _emit_stxi(_jit, i0, r0, r1) -extern void -_emit_stxi(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); - -#define emit_ldxi_d(r0, r1, i0) _emit_ldxi_d(_jit, r0, r1, i0) -extern void -_emit_ldxi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); - -#define emit_stxi_d(i0, r0, r1) _emit_stxi_d(_jit, i0, r0, r1) -extern void -_emit_stxi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); - -extern void jit_init_debug(const char*); -extern void jit_finish_debug(void); - -extern void jit_init_note(void); -extern void jit_finish_note(void); -#define jit_set_note(n,u,v,w) _jit_set_note(_jit, n, u, v, w) -extern void _jit_set_note(jit_state_t*, jit_note_t*, char*, int, jit_int32_t); -#define jit_annotate() _jit_annotate(_jit) -extern void _jit_annotate(jit_state_t*); - -#define jit_print_node(u) _jit_print_node(_jit,u) -extern void _jit_print_node(jit_state_t*,jit_node_t*); - -extern jit_pointer_t jit_memcpy(jit_pointer_t,const void*,jit_word_t); -extern jit_pointer_t jit_memmove(jit_pointer_t,const void*,jit_word_t); -extern void jit_alloc(jit_pointer_t*, jit_word_t); -extern void jit_realloc(jit_pointer_t*, jit_word_t, jit_word_t); -void jit_free(jit_pointer_t*); - -extern void jit_init_size(void); -extern void jit_finish_size(void); - -extern jit_word_t -jit_get_max_instr(void); - -/* - * Externs - */ -extern jit_register_t _rvs[]; - -#endif /* _jit_private_h */ diff --git a/libguile/lightning/include/lightning/jit_x86.h b/libguile/lightning/include/lightning/jit_x86.h deleted file mode 100644 index 33500211d..000000000 --- a/libguile/lightning/include/lightning/jit_x86.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#ifndef _jit_x86_h -#define _jit_x86_h - -#define JIT_HASH_CONSTS 1 -#define JIT_NUM_OPERANDS 2 - -/* - * Types - */ -#define jit_sse2_p() jit_cpu.sse2 -#define jit_x87_reg_p(reg) ((reg) >= _ST0 && (reg) <= _ST6) -#if __WORDSIZE == 32 -# if defined(__x86_64__) -# define __X64_32 1 -# define __X64 1 -# else -# define __X32 1 -# endif -#else -# define __X64 1 -#endif - -#define JIT_FP _RBP -typedef enum { -#if __X32 -# define jit_r(i) (_RAX + (i)) -# define jit_r_num() 3 -# define jit_v(i) (_RBX + (i)) -# define jit_v_num() 3 -# define jit_f(i) (jit_cpu.sse2 ? _XMM0 + (i) : _ST0 + (i)) -# define jit_f_num() (jit_cpu.sse2 ? 8 : 6) -# define JIT_R0 _RAX -# define JIT_R1 _RCX -# define JIT_R2 _RDX - _RAX, _RCX, _RDX, -# define JIT_V0 _RBX -# define JIT_V1 _RSI -# define JIT_V2 _RDI - _RBX, _RSI, _RDI, - _RSP, _RBP, -# define JIT_F0 (jit_sse2_p() ? _XMM0 : _ST0) -# define JIT_F1 (jit_sse2_p() ? _XMM1 : _ST1) -# define JIT_F2 (jit_sse2_p() ? _XMM2 : _ST2) -# define JIT_F3 (jit_sse2_p() ? _XMM3 : _ST3) -# define JIT_F4 (jit_sse2_p() ? _XMM4 : _ST4) -# define JIT_F5 (jit_sse2_p() ? _XMM5 : _ST5) -# define JIT_F6 (jit_sse2_p() ? _XMM6 : _ST6) - _XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7, -# define jit_sse_reg_p(reg) ((reg) >= _XMM0 && (reg) <= _XMM7) -#else -# if __CYGWIN__ -# define jit_r(i) (_RAX + (i)) -# define jit_r_num() 3 -# define jit_v(i) (_RBX + (i)) -# define jit_v_num() 7 -# define jit_f(index) (_XMM4 + (index)) -# define jit_f_num() 12 -# define JIT_R0 _RAX -# define JIT_R1 _R10 -# define JIT_R2 _R11 -# define JIT_V0 _RBX -# define JIT_V1 _RDI -# define JIT_V2 _RSI -# define JIT_V3 _R12 -# define JIT_V4 _R13 -# define JIT_V5 _R14 -# define JIT_V6 _R15 - /* Volatile - Return value register */ - _RAX, - /* Volatile */ - _R10, _R11, - /* Nonvolatile */ - _RBX, _RDI, _RSI, - _R12, _R13, _R14, _R15, - /* Volatile - Integer arguments (4 to 1) */ - _R9, _R8, _RDX, _RCX, - /* Nonvolatile */ - _RSP, _RBP, -# define JIT_F0 _XMM4 -# define JIT_F1 _XMM5 -# define JIT_F2 _XMM6 -# define JIT_F3 _XMM7 -# define JIT_F4 _XMM8 -# define JIT_F5 _XMM9 -# define JIT_F6 _XMM10 -# define JIT_F7 _XMM11 -# define JIT_F8 _XMM12 -# define JIT_F9 _XMM13 -# define JIT_F10 _XMM14 -# define JIT_F11 _XMM15 - /* Volatile */ - _XMM4, _XMM5, - /* Nonvolatile */ - _XMM6, _XMM7, _XMM8, _XMM9, _XMM10, - _XMM11, _XMM12, _XMM13, _XMM14, _XMM15, - /* Volatile - FP arguments (4 to 1) */ - _XMM3, _XMM2, _XMM1, _XMM0, -# define jit_sse_reg_p(reg) ((reg) >= _XMM4 && (reg) <= _XMM0) -# else -# define jit_r(i) (_RAX + (i)) -# define jit_r_num() 4 -# define jit_v(i) (_RBX + (i)) -# define jit_v_num() 4 -# define jit_f(index) (_XMM8 + (index)) -# define jit_f_num() 8 -# define JIT_R0 _RAX -# define JIT_R1 _R10 -# define JIT_R2 _R11 -# define JIT_R3 _R12 - _RAX, _R10, _R11, _R12, -# define JIT_V0 _RBX -# define JIT_V1 _R13 -# define JIT_V2 _R14 -# define JIT_V3 _R15 - _RBX, _R13, _R14, _R15, - _R9, _R8, _RCX, _RDX, _RSI, _RDI, - _RSP, _RBP, -# define JIT_F0 _XMM8 -# define JIT_F1 _XMM9 -# define JIT_F2 _XMM10 -# define JIT_F3 _XMM11 -# define JIT_F4 _XMM12 -# define JIT_F5 _XMM13 -# define JIT_F6 _XMM14 -# define JIT_F7 _XMM15 - _XMM8, _XMM9, _XMM10, _XMM11, _XMM12, _XMM13, _XMM14, _XMM15, - _XMM7, _XMM6, _XMM5, _XMM4, _XMM3, _XMM2, _XMM1, _XMM0, -# define jit_sse_reg_p(reg) ((reg) >= _XMM8 && (reg) <= _XMM0) -# endif -#endif - _ST0, _ST1, _ST2, _ST3, _ST4, _ST5, _ST6, -# define JIT_NOREG _NOREG - _NOREG, -} jit_reg_t; - -typedef struct { - /* x87 present */ - jit_uint32_t fpu : 1; - /* cmpxchg8b instruction */ - jit_uint32_t cmpxchg8b : 1; - /* cmov and fcmov branchless conditional mov */ - jit_uint32_t cmov : 1; - /* mmx registers/instructions available */ - jit_uint32_t mmx : 1; - /* sse registers/instructions available */ - jit_uint32_t sse : 1; - /* sse2 registers/instructions available */ - jit_uint32_t sse2 : 1; - /* sse3 instructions available */ - jit_uint32_t sse3 : 1; - /* pcmulqdq instruction */ - jit_uint32_t pclmulqdq : 1; - /* ssse3 suplemental sse3 instructions available */ - jit_uint32_t ssse3 : 1; - /* fused multiply/add using ymm state */ - jit_uint32_t fma : 1; - /* cmpxchg16b instruction */ - jit_uint32_t cmpxchg16b : 1; - /* sse4.1 instructions available */ - jit_uint32_t sse4_1 : 1; - /* sse4.2 instructions available */ - jit_uint32_t sse4_2 : 1; - /* movbe instruction available */ - jit_uint32_t movbe : 1; - /* popcnt instruction available */ - jit_uint32_t popcnt : 1; - /* aes instructions available */ - jit_uint32_t aes : 1; - /* avx instructions available */ - jit_uint32_t avx : 1; - /* lahf/sahf available in 64 bits mode */ - jit_uint32_t lahf : 1; -} jit_cpu_t; - -/* - * Initialization - */ -extern jit_cpu_t jit_cpu; - -#endif /* _jit_x86_h */ diff --git a/libguile/lightning/jit.h b/libguile/lightning/jit.h new file mode 100644 index 000000000..67e107497 --- /dev/null +++ b/libguile/lightning/jit.h @@ -0,0 +1,519 @@ +/* + * Copyright (C) 2012-2019 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + * Andy Wingo + */ + +#ifndef _jit_h +#define _jit_h + +#include <unistd.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <stddef.h> + +#include "jit/endian.h" + +CHOOSE_32_64(typedef int32_t jit_word_t, + typedef int64_t jit_word_t); +CHOOSE_32_64(typedef uint32_t jit_uword_t, + typedef uint64_t jit_uword_t); +typedef float jit_float32_t; +typedef double jit_float64_t; +typedef void* jit_pointer_t; +typedef int jit_bool_t; +typedef struct jit_gpr { int bits; } jit_gpr_t; +typedef struct jit_fpr { int bits; } jit_fpr_t; + +typedef void* jit_addr_t; +typedef ptrdiff_t jit_off_t; +typedef intptr_t jit_imm_t; +typedef uintptr_t jit_uimm_t; + +#define JIT_GPR(bits) ((jit_gpr_t) { bits }) +#define JIT_FPR(bits) ((jit_fpr_t) { bits }) +static inline jit_gpr_t jit_gpr(int bits) { return JIT_GPR(bits); } +static inline jit_fpr_t jit_fpr(int bits) { return JIT_FPR(bits); } + +enum jit_reloc_kind +{ + JIT_RELOC_ABSOLUTE, + JIT_RELOC_REL8, + JIT_RELOC_REL16, + JIT_RELOC_REL32, + JIT_RELOC_REL64, +}; + +typedef struct jit_reloc +{ + uint8_t kind; + uint8_t inst_start_offset; + uint16_t flags; + uint32_t offset; +} jit_reloc_t; + +#if defined(__GNUC__) && (__GNUC__ >= 4) +# define JIT_API extern __attribute__ ((__visibility__("hidden"))) +#else +# define JIT_API extern +#endif + +#if defined(__i386__) || defined(__x86_64__) +# include "jit/x86.h" +#elif defined(__mips__) +# include "jit/mips.h" +#elif defined(__arm__) +# include "jit/arm.h" +#elif defined(__ppc__) || defined(__powerpc__) +# include "jit/ppc.h" +#elif defined(__sparc__) +# include "jit/sparc.h" +#elif defined(__ia64__) +# include "jit/ia64.h" +#elif defined(__hppa__) +# include "jit/hppa.h" +#elif defined(__aarch64__) +# include "jit/aarch64.h" +#elif defined(__s390__) || defined(__s390x__) +# include "jit/s390.h" +#elif defined(__alpha__) +# include "jit/alpha.h" +#endif + +#define JIT_R(index) JIT_GPR(jit_r(index)) +#define JIT_V(index) JIT_GPR(jit_v(index)) +#define JIT_F(index) JIT_FPR(jit_f(index)) +#define JIT_R_NUM jit_r_num() +#define JIT_V_NUM jit_v_num() +#define JIT_F_NUM jit_f_num() + +#define jit_class_chk 0x02000000 /* just checking */ +#define jit_class_arg 0x08000000 /* argument register */ +#define jit_class_sav 0x10000000 /* callee save */ +#define jit_class_gpr 0x20000000 /* general purpose */ +#define jit_class_fpr 0x40000000 /* float */ +#define jit_class(bits) ((bits) & 0xffff0000) +#define jit_regno(bits) ((bits) & 0x00007fff) + +typedef struct jit_state jit_state_t; +enum jit_arg_loc +{ + JIT_ARG_LOC_IMM, + JIT_ARG_LOC_GPR, + JIT_ARG_LOC_FPR, + JIT_ARG_LOC_MEM +}; + +typedef enum jit_arg_abi +{ + JIT_ARG_ABI_UINT8, + JIT_ARG_ABI_INT8, + JIT_ARG_ABI_UINT16, + JIT_ARG_ABI_INT16, + JIT_ARG_ABI_UINT32, + JIT_ARG_ABI_INT32, + JIT_ARG_ABI_UINT64, + JIT_ARG_ABI_INT64, + JIT_ARG_ABI_POINTER, + JIT_ARG_ABI_FLOAT, + JIT_ARG_ABI_DOUBLE, + JIT_ARG_ABI_INTMAX = CHOOSE_32_64(JIT_ARG_ABI_INT32, JIT_ARG_ABI_INT64) +} jit_arg_abi_t; + +typedef struct jit_arg +{ + enum jit_arg_loc kind; + union + { + intptr_t imm; + jit_gpr_t gpr; + jit_fpr_t fpr; + struct { jit_gpr_t base; ptrdiff_t offset; } mem; + } loc; +} jit_arg_t; + +typedef union jit_anyreg +{ + jit_gpr_t gpr; + jit_fpr_t fpr; +} jit_anyreg_t; + +JIT_API jit_bool_t init_jit(void); + +JIT_API jit_state_t *jit_new_state(void); +JIT_API void jit_destroy_state(jit_state_t*); + +JIT_API void jit_begin(jit_state_t*, uint8_t*, size_t); +JIT_API jit_bool_t jit_has_overflow(jit_state_t*); +JIT_API void jit_reset(jit_state_t*); +JIT_API void* jit_end(jit_state_t*, size_t*); + +JIT_API void jit_align(jit_state_t*, unsigned); + +JIT_API jit_pointer_t jit_address(jit_state_t*); +JIT_API void jit_patch_here(jit_state_t*, jit_reloc_t); +JIT_API void jit_patch_there(jit_state_t*, jit_reloc_t, jit_pointer_t); + +/* Note that all functions that take jit_arg_t args[] use the args as scratch + space while shuffling values into position. */ +JIT_API void jit_calli(jit_state_t *, jit_pointer_t f, + size_t argc, const jit_arg_abi_t abi[], + jit_arg_t args[]); +JIT_API void jit_callr(jit_state_t *, jit_gpr_t f, + size_t argc, const jit_arg_abi_t abi[], + jit_arg_t args[]); +JIT_API void jit_receive(jit_state_t*, size_t argc, + const jit_arg_abi_t abi[], jit_arg_t args[]); +JIT_API void jit_load_args(jit_state_t *_jit, size_t argc, + const jit_arg_abi_t abi[], jit_arg_t args[], + const jit_anyreg_t regs[]); + +#define JIT_PROTO_0(stem, ret) \ + ret jit_##stem (jit_state_t* _jit) +#define JIT_PROTO_1(stem, ret, ta) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a) +#define JIT_PROTO_2(stem, ret, ta, tb) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a, jit_##tb##_t b) +#define JIT_PROTO_3(stem, ret, ta, tb, tc) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a, jit_##tb##_t b, jit_##tc##_t c) +#define JIT_PROTO_4(stem, ret, ta, tb, tc, td) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a, jit_##tb##_t b, jit_##tc##_t c, jit_##td##_t d) + +#define JIT_PROTO_RFF__(stem) JIT_PROTO_2(stem, jit_reloc_t, fpr, fpr) +#define JIT_PROTO_RGG__(stem) JIT_PROTO_2(stem, jit_reloc_t, gpr, gpr) +#define JIT_PROTO_RG___(stem) JIT_PROTO_1(stem, jit_reloc_t, gpr) +#define JIT_PROTO_RGi__(stem) JIT_PROTO_2(stem, jit_reloc_t, gpr, imm) +#define JIT_PROTO_RGu__(stem) JIT_PROTO_2(stem, jit_reloc_t, gpr, uimm) +#define JIT_PROTO_R____(stem) JIT_PROTO_0(stem, jit_reloc_t) +#define JIT_PROTO__FFF_(stem) JIT_PROTO_3(stem, void, fpr, fpr, fpr) +#define JIT_PROTO__FF__(stem) JIT_PROTO_2(stem, void, fpr, fpr) +#define JIT_PROTO__FGG_(stem) JIT_PROTO_3(stem, void, fpr, gpr, gpr) +#define JIT_PROTO__FG__(stem) JIT_PROTO_2(stem, void, fpr, gpr) +#define JIT_PROTO__FGo_(stem) JIT_PROTO_3(stem, void, fpr, gpr, off) +#define JIT_PROTO__F___(stem) JIT_PROTO_1(stem, void, fpr) +#define JIT_PROTO__Fd__(stem) JIT_PROTO_2(stem, void, fpr, float64) +#define JIT_PROTO__Ff__(stem) JIT_PROTO_2(stem, void, fpr, float32) +#define JIT_PROTO__Fp__(stem) JIT_PROTO_2(stem, void, fpr, pointer) +#define JIT_PROTO__GF__(stem) JIT_PROTO_2(stem, void, gpr, fpr) +#define JIT_PROTO__GGF_(stem) JIT_PROTO_3(stem, void, gpr, gpr, fpr) +#define JIT_PROTO__GGGG(stem) JIT_PROTO_4(stem, void, gpr, gpr, gpr, gpr) +#define JIT_PROTO__GGG_(stem) JIT_PROTO_3(stem, void, gpr, gpr, gpr) +#define JIT_PROTO__GGGi(stem) JIT_PROTO_4(stem, void, gpr, gpr, gpr, imm) +#define JIT_PROTO__GGGu(stem) JIT_PROTO_4(stem, void, gpr, gpr, gpr, uimm) +#define JIT_PROTO__GG__(stem) JIT_PROTO_2(stem, void, gpr, gpr) +#define JIT_PROTO__GGi_(stem) JIT_PROTO_3(stem, void, gpr, gpr, imm) +#define JIT_PROTO__GGo_(stem) JIT_PROTO_3(stem, void, gpr, gpr, off) +#define JIT_PROTO__GGu_(stem) JIT_PROTO_3(stem, void, gpr, gpr, uimm) +#define JIT_PROTO__G___(stem) JIT_PROTO_1(stem, void, gpr) +#define JIT_PROTO__Gi__(stem) JIT_PROTO_2(stem, void, gpr, imm) +#define JIT_PROTO__Gp__(stem) JIT_PROTO_2(stem, void, gpr, pointer) +#define JIT_PROTO______(stem) JIT_PROTO_0(stem, void) +#define JIT_PROTO__i___(stem) JIT_PROTO_1(stem, void, imm) +#define JIT_PROTO__oGF_(stem) JIT_PROTO_3(stem, void, off, gpr, fpr) +#define JIT_PROTO__oGG_(stem) JIT_PROTO_3(stem, void, off, gpr, gpr) +#define JIT_PROTO__pF__(stem) JIT_PROTO_2(stem, void, pointer, fpr) +#define JIT_PROTO__pG__(stem) JIT_PROTO_2(stem, void, pointer, gpr) +#define JIT_PROTO__p___(stem) JIT_PROTO_1(stem, void, pointer) + +#define FOR_EACH_INSTRUCTION(M) \ + M(_GGG_, addr) \ + M(_FFF_, addr_f) \ + M(_FFF_, addr_d) \ + M(_GGi_, addi) \ + M(_GGG_, addcr) \ + M(_GGi_, addci) \ + M(_GGG_, addxr) \ + M(_GGi_, addxi) \ + M(_GGG_, subr) \ + M(_FFF_, subr_f) \ + M(_FFF_, subr_d) \ + M(_GGi_, subi) \ + M(_GGG_, subcr) \ + M(_GGi_, subci) \ + M(_GGG_, subxr) \ + M(_GGi_, subxi) \ + M(_GGG_, mulr) \ + M(_FFF_, mulr_f) \ + M(_FFF_, mulr_d) \ + M(_GGi_, muli) \ + M(_GGGG, qmulr) \ + M(_GGGi, qmuli) \ + M(_GGGG, qmulr_u) \ + M(_GGGu, qmuli_u) \ + M(_GGG_, divr) \ + M(_FFF_, divr_f) \ + M(_FFF_, divr_d) \ + M(_GGi_, divi) \ + M(_GGG_, divr_u) \ + M(_GGu_, divi_u) \ + M(_GGGG, qdivr) \ + M(_GGGi, qdivi) \ + M(_GGGG, qdivr_u) \ + M(_GGGu, qdivi_u) \ + M(_GGG_, remr) \ + M(_GGi_, remi) \ + M(_GGG_, remr_u) \ + M(_GGu_, remi_u) \ + \ + M(_GGG_, andr) \ + M(_GGu_, andi) \ + M(_GGG_, orr) \ + M(_GGu_, ori) \ + M(_GGG_, xorr) \ + M(_GGu_, xori) \ + \ + M(_GGG_, lshr) \ + M(_GGu_, lshi) \ + M(_GGG_, rshr) \ + M(_GGu_, rshi) \ + M(_GGG_, rshr_u) \ + M(_GGu_, rshi_u) \ + \ + M(_GG__, negr) \ + M(_GG__, comr) \ + \ + M(_GG__, movr) \ + M(_Gi__, movi) \ + M(RG___, mov_addr) \ + M(_GG__, extr_c) \ + M(_GG__, extr_uc) \ + M(_GG__, extr_s) \ + M(_GG__, extr_us) \ + WHEN_64(M(_GG__, extr_i)) \ + WHEN_64(M(_GG__, extr_ui)) \ + \ + M(_GG__, bswapr_us) \ + M(_GG__, bswapr_ui) \ + WHEN_64(M(_GG__, bswapr_ul)) \ + \ + M(_GG__, ldr_c) \ + M(_Gp__, ldi_c) \ + M(_GG__, ldr_uc) \ + M(_Gp__, ldi_uc) \ + M(_GG__, ldr_s) \ + M(_Gp__, ldi_s) \ + M(_GG__, ldr_us) \ + M(_Gp__, ldi_us) \ + M(_GG__, ldr_i) \ + M(_Gp__, ldi_i) \ + WHEN_64(M(_GG__, ldr_ui)) \ + WHEN_64(M(_Gp__, ldi_ui)) \ + WHEN_64(M(_GG__, ldr_l)) \ + WHEN_64(M(_Gp__, ldi_l)) \ + M(_FG__, ldr_f) \ + M(_Fp__, ldi_f) \ + M(_FG__, ldr_d) \ + M(_Fp__, ldi_d) \ + \ + M(_GGG_, ldxr_c) \ + M(_GGo_, ldxi_c) \ + M(_GGG_, ldxr_uc) \ + M(_GGo_, ldxi_uc) \ + M(_GGG_, ldxr_s) \ + M(_GGo_, ldxi_s) \ + M(_GGG_, ldxr_us) \ + M(_GGo_, ldxi_us) \ + M(_GGG_, ldxr_i) \ + M(_GGo_, ldxi_i) \ + WHEN_64(M(_GGG_, ldxr_ui)) \ + WHEN_64(M(_GGo_, ldxi_ui)) \ + WHEN_64(M(_GGG_, ldxr_l)) \ + WHEN_64(M(_GGo_, ldxi_l)) \ + M(_FGG_, ldxr_f) \ + M(_FGo_, ldxi_f) \ + M(_FGG_, ldxr_d) \ + M(_FGo_, ldxi_d) \ + \ + M(_GG__, str_c) \ + M(_pG__, sti_c) \ + M(_GG__, str_s) \ + M(_pG__, sti_s) \ + M(_GG__, str_i) \ + M(_pG__, sti_i) \ + WHEN_64(M(_GG__, str_l)) \ + WHEN_64(M(_pG__, sti_l)) \ + M(_GF__, str_f) \ + M(_pF__, sti_f) \ + M(_GF__, str_d) \ + M(_pF__, sti_d) \ + \ + M(_GGG_, stxr_c) \ + M(_oGG_, stxi_c) \ + M(_GGG_, stxr_s) \ + M(_oGG_, stxi_s) \ + M(_GGG_, stxr_i) \ + M(_oGG_, stxi_i) \ + WHEN_64(M(_GGG_, stxr_l)) \ + WHEN_64(M(_oGG_, stxi_l)) \ + M(_GGF_, stxr_f) \ + M(_oGF_, stxi_f) \ + M(_GGF_, stxr_d) \ + M(_oGF_, stxi_d) \ + \ + M(RGG__, bltr) \ + M(RFF__, bltr_f) \ + M(RFF__, bltr_d) \ + M(RGi__, blti) \ + M(RGG__, bltr_u) \ + M(RGu__, blti_u) \ + M(RGG__, bler) \ + M(RFF__, bler_f) \ + M(RFF__, bler_d) \ + M(RGi__, blei) \ + M(RGG__, bler_u) \ + M(RGu__, blei_u) \ + M(RGG__, beqr) \ + M(RFF__, beqr_f) \ + M(RFF__, beqr_d) \ + M(RGi__, beqi) \ + M(RGG__, bger) \ + M(RFF__, bger_f) \ + M(RFF__, bger_d) \ + M(RGi__, bgei) \ + M(RGG__, bger_u) \ + M(RGu__, bgei_u) \ + M(RGG__, bgtr) \ + M(RFF__, bgtr_f) \ + M(RFF__, bgtr_d) \ + M(RGi__, bgti) \ + M(RGG__, bgtr_u) \ + M(RGu__, bgti_u) \ + M(RGG__, bner) \ + M(RFF__, bner_f) \ + M(RFF__, bner_d) \ + M(RGi__, bnei) \ + \ + M(RFF__, bunltr_f) \ + M(RFF__, bunltr_d) \ + M(RFF__, bunler_f) \ + M(RFF__, bunler_d) \ + M(RFF__, buneqr_f) \ + M(RFF__, buneqr_d) \ + M(RFF__, bunger_f) \ + M(RFF__, bunger_d) \ + M(RFF__, bungtr_f) \ + M(RFF__, bungtr_d) \ + M(RFF__, bltgtr_f) \ + M(RFF__, bltgtr_d) \ + M(RFF__, bordr_f) \ + M(RFF__, bordr_d) \ + M(RFF__, bunordr_f) \ + M(RFF__, bunordr_d) \ + \ + M(RGG__, bmsr) \ + M(RGu__, bmsi) \ + M(RGG__, bmcr) \ + M(RGu__, bmci) \ + \ + M(RGG__, boaddr) \ + M(RGi__, boaddi) \ + M(RGG__, boaddr_u) \ + M(RGu__, boaddi_u) \ + M(RGG__, bxaddr) \ + M(RGi__, bxaddi) \ + M(RGG__, bxaddr_u) \ + M(RGu__, bxaddi_u) \ + M(RGG__, bosubr) \ + M(RGi__, bosubi) \ + M(RGG__, bosubr_u) \ + M(RGu__, bosubi_u) \ + M(RGG__, bxsubr) \ + M(RGi__, bxsubi) \ + M(RGG__, bxsubr_u) \ + M(RGu__, bxsubi_u) \ + \ + M(_i___, nop) \ + \ + M(_G___, jmpr) \ + M(_p___, jmpi) \ + M(R____, jmp) \ + \ + M(_G___, pushr) \ + M(_F___, pushr_d) \ + M(_G___, popr) \ + M(_F___, popr_d) \ + \ + M(_____, ret) \ + M(_G___, retr) \ + M(_F___, retr_f) \ + M(_F___, retr_d) \ + M(_i___, reti) \ + M(_G___, retval_c) \ + M(_G___, retval_uc) \ + M(_G___, retval_s) \ + M(_G___, retval_us) \ + M(_G___, retval_i) \ + WHEN_64(M(_G___, retval_ui)) \ + WHEN_64(M(_G___, retval_l)) \ + M(_F___, retval_f) \ + M(_F___, retval_d) \ + \ + M(_FF__, negr_f) \ + M(_FF__, negr_d) \ + M(_FF__, absr_f) \ + M(_FF__, absr_d) \ + M(_FF__, sqrtr_f) \ + M(_FF__, sqrtr_d) \ + \ + M(_GF__, truncr_f_i) \ + M(_FG__, extr_f) \ + M(_FG__, extr_d) \ + M(_FF__, extr_d_f) \ + M(_FF__, extr_f_d) \ + M(_FF__, movr_f) \ + M(_FF__, movr_d) \ + M(_Ff__, movi_f) \ + M(_Fd__, movi_d) \ + M(_GF__, truncr_d_i) \ + WHEN_64(M(_GF__, truncr_f_l)) \ + WHEN_64(M(_GF__, truncr_d_l)) \ + /* EOL */ + +#define DECLARE_INSTRUCTION(kind, stem) JIT_API JIT_PROTO_##kind(stem); +FOR_EACH_INSTRUCTION(DECLARE_INSTRUCTION) +#undef DECLARE_INSTRUCTION + +#if __WORDSIZE == 32 +# define jit_ldr(j,u,v) jit_ldr_i(j,u,v) +# define jit_ldi(j,u,v) jit_ldi_i(j,u,v) +# define jit_ldxr(j,u,v,w) jit_ldxr_i(j,u,v,w) +# define jit_ldxi(j,u,v,w) jit_ldxi_i(j,u,v,w) +# define jit_str(j,u,v) jit_str_i(j,u,v) +# define jit_sti(j,u,v) jit_sti_i(j,u,v) +# define jit_stxr(j,u,v,w) jit_stxr_i(j,u,v,w) +# define jit_stxi(j,u,v,w) jit_stxi_i(j,u,v,w) +# define jit_retval(j,u) jit_retval_i(j,u) +# define jit_bswapr(j,u,v) jit_bswapr_ui(j,u,v) +# define jit_truncr_d(j,u,v) jit_truncr_d_i(j,u,v) +# define jit_truncr_f(j,u,v) jit_truncr_f_i(j,u,v) +#else +# define jit_ldr(j,u,v) jit_ldr_l(j,u,v) +# define jit_ldi(j,u,v) jit_ldi_l(j,u,v) +# define jit_ldxr(j,u,v,w) jit_ldxr_l(j,u,v,w) +# define jit_ldxi(j,u,v,w) jit_ldxi_l(j,u,v,w) +# define jit_str(j,u,v) jit_str_l(j,u,v) +# define jit_sti(j,u,v) jit_sti_l(j,u,v) +# define jit_stxr(j,u,v,w) jit_stxr_l(j,u,v,w) +# define jit_stxi(j,u,v,w) jit_stxi_l(j,u,v,w) +# define jit_retval(j,u) jit_retval_l(j,u) +# define jit_bswapr(j,u,v) jit_bswapr_ul(j,u,v) +# define jit_truncr_d(j,u,v) jit_truncr_d_l(j,u,v) +# define jit_truncr_f(j,u,v) jit_truncr_f_l(j,u,v) +#endif + +#endif /* _jit_h */ diff --git a/libguile/lightning/lib/jit_aarch64-cpu.c b/libguile/lightning/jit/aarch64-cpu.c index 07b0edb2d..98f2dabde 100644 --- a/libguile/lightning/lib/jit_aarch64-cpu.c +++ b/libguile/lightning/jit/aarch64-cpu.c @@ -20,7 +20,7 @@ #if PROTO typedef union { /* aarch64-opc.c */ -# define ui jit_uint32_t +# define ui uint32_t # if __BYTE_ORDER == __LITTLE_ENDIAN /* cond2: condition in truly conditional-executed inst. */ struct { ui b: 4; } cond2; @@ -207,7 +207,7 @@ typedef union { struct { ui _: 8; ui b: 5; } b40; struct { ui _: 16; ui b: 6; } scale; # endif - jit_int32_t w; + int32_t w; # undef ui } instr_t; # define stack_framesize 160 @@ -470,203 +470,203 @@ typedef union { # define CBZ(Rd,Simm19) ox19(A64_CBZ|XS,Rd,Simm19) # define CBNZ(Rd,Simm19) ox19(A64_CBNZ|XS,Rd,Simm19) # define NOP() ii(0xd503201f) -static jit_int32_t logical_immediate(jit_word_t); +static int32_t logical_immediate(jit_word_t); # define oxxx(Op,Rd,Rn,Rm) _oxxx(_jit,Op,Rd,Rn,Rm) -static void _oxxx(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxxx(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define oxxi(Op,Rd,Rn,Imm12) _oxxi(_jit,Op,Rd,Rn,Imm12) -static void _oxxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxxi(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define oxx9(Op,Rd,Rn,Imm9) _oxx9(_jit,Op,Rd,Rn,Imm9) -static void _oxx9(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxx9(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define ox19(Op,Rd,Simm19) _ox19(_jit,Op,Rd,Simm19) -static void _ox19(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ox19(jit_state_t*,int32_t,int32_t,int32_t); # define oc19(Op,Cc,Simm19) _oc19(_jit,Op,Cc,Simm19) -static void _oc19(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _oc19(jit_state_t*,int32_t,int32_t,int32_t); # define o26(Op,Simm26) _o26(_jit,Op,Simm26) -static void _oc26(jit_state_t*,jit_int32_t,jit_int32_t); +static void _oc26(jit_state_t*,int32_t,int32_t); # define ox_x(Op,Rd,Rn) _ox_x(_jit,Op,Rd,Rn) -static void _ox_x(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ox_x(jit_state_t*,int32_t,int32_t,int32_t); # define o_xx(Op,Rd,Rn) _o_xx(_jit,Op,Rd,Rn) -static void _o_xx(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _o_xx(jit_state_t*,int32_t,int32_t,int32_t); # define oxx_(Op,Rn,Rm) _oxx_(_jit,Op,Rn,Rm) -static void _oxx_(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxx_(jit_state_t*,int32_t,int32_t,int32_t); # define o_x_(Op,Rn) _o_x_(_jit,Op,Rn) -static void _o_x_(jit_state_t*,jit_int32_t,jit_int32_t); +static void _o_x_(jit_state_t*,int32_t,int32_t); # define ox_h(Op,Rd,Imm16) _ox_h(_jit,Op,Rd,Imm16) -static void _ox_h(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ox_h(jit_state_t*,int32_t,int32_t,int32_t); # define oxxrs(Op,Rd,Rn,R,S) _oxxrs(_jit,Op,Rd,Rn,R,S) -static void _oxxrs(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxxrs(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t); # define oxxxc(Op,Rd,Rn,Rm,Cc) _oxxxc(_jit,Op,Rd,Rn,Rm,Cc) -static void _oxxxc(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxxxc(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t); # define oxxx7(Op,Rt,Rt2,Rn,Simm7) _oxxx7(_jit,Op,Rt,Rt2,Rn,Simm7) -static void _oxxx7(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _oxxx7(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t); # define nop(i0) _nop(_jit,i0) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); # define addr(r0,r1,r2) ADD(r0,r1,r2) # define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); # define addcr(r0,r1,r2) ADDS(r0,r1,r2) # define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); # define addxr(r0,r1,r2) ADCS(r0,r1,r2) # define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subr(r0,r1,r2) SUB(r0,r1,r2) # define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0,r1,r2) SUBS(r0,r1,r2) # define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0,r1,r2) SBCS(r0,r1,r2) # define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); # define mulr(r0,r1,r2) MUL(r0,r1,r2) # define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); # define qmulr(r0,r1,r2,r3) _qmulr(_jit,r0,r1,r2,r3) -static void _qmulr(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qmulr(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qmuli(r0,r1,r2,i0) _qmuli(_jit,r0,r1,r2,i0) -static void _qmuli(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qmuli(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define qmulr_u(r0,r1,r2,r3) _qmulr_u(_jit,r0,r1,r2,r3) -static void _qmulr_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qmulr_u(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qmuli_u(r0,r1,r2,i0) _qmuli_u(_jit,r0,r1,r2,i0) -static void _qmuli_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qmuli_u(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define divr(r0,r1,r2) SDIV(r0,r1,r2) # define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); # define divr_u(r0,r1,r2) UDIV(r0,r1,r2) # define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define qdivr(r0,r1,r2,r3) _iqdivr(_jit,1,r0,r1,r2,r3) # define qdivr_u(r0,r1,r2,r3) _iqdivr(_jit,0,r0,r1,r2,r3) static void _iqdivr(jit_state_t*,jit_bool_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); # define qdivi(r0,r1,r2,i0) _qdivi(_jit,r0,r1,r2,i0) -static void _qdivi(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qdivi(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define qdivi_u(r0,r1,r2,i0) _qdivi_u(_jit,r0,r1,r2,i0) -static void _qdivi_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qdivi_u(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); # define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); # define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); # define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define lshr(r0,r1,r2) LSL(r0,r1,r2) # define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr(r0,r1,r2) ASR(r0,r1,r2) # define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr_u(r0,r1,r2) LSR(r0,r1,r2) # define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define negr(r0,r1) NEG(r0,r1) # define comr(r0,r1) MVN(r0,r1) # define andr(r0,r1,r2) AND(r0,r1,r2) # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); # define orr(r0,r1,r2) ORR(r0,r1,r2) # define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); # define xorr(r0,r1,r2) EOR(r0,r1,r2) # define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_c(r0,r1) LDRSBI(r0,r1,0) # define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldr_uc(r0,r1) _ldr_uc(_jit,r0,r1) -static void _ldr_uc(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_uc(jit_state_t*,int32_t,int32_t); # define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldr_s(r0,r1) LDRSHI(r0,r1,0) # define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldr_us(r0,r1) _ldr_us(_jit,r0,r1) -static void _ldr_us(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_us(jit_state_t*,int32_t,int32_t); # define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # define ldr_i(r0,r1) LDRSWI(r0,r1,0) # define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # define ldr_ui(r0,r1) _ldr_ui(_jit,r0,r1) -static void _ldr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_ui(jit_state_t*,int32_t,int32_t); # define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); # define ldr_l(r0,r1) LDRI(r0,r1,0) -static void _ldr_l(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_l(jit_state_t*,int32_t,int32_t); # define ldi_l(r0,i0) _ldi_l(_jit,r0,i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); # define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_s(r0,r1,r2) LDRSH(r0,r1,r2) # define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_us(r0,r1,r2) _ldxr_us(_jit,r0,r1,r2) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_i(r0,r1,r2) LDRSW(r0,r1,r2) # define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_ui(r0,r1,r2) _ldxr_ui(_jit,r0,r1,r2) -static void _ldxr_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_ui(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_l(r0,r1,r2) LDR(r0,r1,r2) # define ldxi_l(r0,r1,i0) _ldxi_l(_jit,r0,r1,i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_c(r0,r1) STRBI(r1,r0,0) # define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define str_s(r0,r1) STRHI(r1,r0,0) # define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # define str_i(r0,r1) STRWI(r1,r0,0) # define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # define str_l(r0,r1) STRI(r1,r0,0) # define sti_l(i0,r0) _sti_l(_jit,i0,r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); # define stxr_c(r0,r1,r2) STRB(r2,r1,r0) # define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_s(r0,r1,r2) STRH(r2,r1,r0) # define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_i(r0,r1,r2) STRW(r2,r1,r0) # define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_l(r0,r1,r2) STR(r2,r1,r0) # define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); # if __BYTE_ORDER == __LITTLE_ENDIAN -# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ul(r0,r1) REV(r0,r1) +# define bswapr_us(r0,r1) _bswapr_us(_jit,r0,r1) +static void _bswapr_us(jit_state_t*,int32_t,int32_t); +# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1) +static void _bswapr_ui(jit_state_t*,int32_t,int32_t); +# define bswapr_ul(r0,r1) REV(r0,r1) # else -# define htonr_us(r0,r1) extr_us(r0,r1) -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr_ul(r0,r1) movr(r0,r1) # endif # define extr_c(r0,r1) SXTB(r0,r1) # define extr_uc(r0,r1) UXTB(r0,r1) @@ -675,15 +675,15 @@ static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); # define extr_i(r0,r1) SXTW(r0,r1) # define extr_ui(r0,r1) UXTW(r0,r1) # define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); # define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); # define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); # define ccr(cc,r0,r1,r2) _ccr(_jit,cc,r0,r1,r2) -static void _ccr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ccr(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define cci(cc,r0,r1,i0) _cci(_jit,cc,r0,r1,i0) -static void _cci(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); +static void _cci(jit_state_t*,int32_t,int32_t,int32_t,jit_word_t); # define ltr(r0,r1,r2) ccr(CC_LT,r0,r1,r2) # define lti(r0,r1,i0) cci(CC_LT,r0,r1,i0) # define ltr_u(r0,r1,r2) ccr(CC_CC,r0,r1,r2) @@ -706,10 +706,10 @@ static void _cci(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); # define nei(r0,r1,i0) cci(CC_NE,r0,r1,i0) # define bccr(cc,i0,r0,r1) _bccr(_jit,cc,i0,r0,r1) static jit_word_t -_bccr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_bccr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define bcci(cc,i0,r0,i1) _bcci(_jit,cc,i0,r0,i1) static jit_word_t -_bcci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); +_bcci(jit_state_t*,int32_t,jit_word_t,int32_t,jit_word_t); # define bltr(i0,r0,r1) bccr(BCC_LT,i0,r0,r1) # define blti(i0,r0,i1) bcci(BCC_LT,i0,r0,i1) # define bltr_u(i0,r0,r1) bccr(BCC_CC,i0,r0,r1) @@ -720,7 +720,7 @@ _bcci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); # define blei_u(i0,r0,i1) bcci(BCC_LS,i0,r0,i1) # define beqr(i0,r0,r1) bccr(BCC_EQ,i0,r0,r1) # define beqi(i0,r0,i1) _beqi(_jit,i0,r0,i1) -static jit_word_t _beqi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _beqi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bger(i0,r0,r1) bccr(BCC_GE,i0,r0,r1) # define bgei(i0,r0,i1) bcci(BCC_GE,i0,r0,i1) # define bger_u(i0,r0,r1) bccr(BCC_CS,i0,r0,r1) @@ -731,13 +731,13 @@ static jit_word_t _beqi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); # define bgti_u(i0,r0,i1) bcci(BCC_HI,i0,r0,i1) # define bner(i0,r0,r1) bccr(BCC_NE,i0,r0,r1) # define bnei(i0,r0,i1) _bnei(_jit,i0,r0,i1) -static jit_word_t _bnei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bnei(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define baddr(cc,i0,r0,r1) _baddr(_jit,cc,i0,r0,r1) static jit_word_t -_baddr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_baddr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define baddi(cc,i0,r0,i1) _baddi(_jit,cc,i0,r0,i1) static jit_word_t -_baddi(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); +_baddi(jit_state_t*,int32_t,jit_word_t,int32_t,jit_word_t); # define boaddr(i0,r0,r1) baddr(BCC_VS,i0,r0,r1) # define boaddi(i0,r0,i1) baddi(BCC_VS,i0,r0,i1) # define boaddr_u(i0,r0,r1) baddr(BCC_HS,i0,r0,r1) @@ -748,10 +748,10 @@ _baddi(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); # define bxaddi_u(i0,r0,i1) baddi(BCC_LO,i0,r0,i1) # define bsubr(cc,i0,r0,r1) _bsubr(_jit,cc,i0,r0,r1) static jit_word_t -_bsubr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_bsubr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define bsubi(cc,i0,r0,i1) _bsubi(_jit,cc,i0,r0,i1) static jit_word_t -_bsubi(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); +_bsubi(jit_state_t*,int32_t,jit_word_t,int32_t,jit_word_t); # define bosubr(i0,r0,r1) bsubr(BCC_VS,i0,r0,r1) # define bosubi(i0,r0,i1) bsubi(BCC_VS,i0,r0,i1) # define bosubr_u(i0,r0,r1) bsubr(BCC_LO,i0,r0,r1) @@ -762,10 +762,10 @@ _bsubi(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); # define bxsubi_u(i0,r0,i1) bsubi(BCC_HS,i0,r0,i1) # define bmxr(cc,i0,r0,r1) _bmxr(_jit,cc,i0,r0,r1) static jit_word_t -_bmxr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_bmxr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define bmxi(cc,i0,r0,r1) _bmxi(_jit,cc,i0,r0,r1) static jit_word_t -_bmxi(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); +_bmxi(jit_state_t*,int32_t,jit_word_t,int32_t,jit_word_t); # define bmsr(i0,r0,r1) bmxr(BCC_NE,i0,r0,r1) # define bmsi(i0,r0,i1) bmxi(BCC_NE,i0,r0,i1) # define bmcr(i0,r0,r1) bmxr(BCC_EQ,i0,r0,r1) @@ -785,15 +785,15 @@ static void _prolog(jit_state_t*,jit_node_t*); # define epilog(i0) _epilog(_jit,i0) static void _epilog(jit_state_t*,jit_node_t*); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); # define patch_at(jump,label) _patch_at(_jit,jump,label) static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #endif #if CODE -static jit_int32_t +static int32_t logical_immediate(jit_word_t imm) { /* There are 5334 possible immediate values, but to avoid the @@ -826,8 +826,8 @@ logical_immediate(jit_word_t imm) } static void -_oxxx(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Rd, jit_int32_t Rn, jit_int32_t Rm) +_oxxx(jit_state_t *_jit, int32_t Op, + int32_t Rd, int32_t Rn, int32_t Rm) { instr_t i; assert(!(Rd & ~0x1f)); @@ -842,8 +842,8 @@ _oxxx(jit_state_t *_jit, jit_int32_t Op, } static void -_oxxi(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Rd, jit_int32_t Rn, jit_int32_t Imm12) +_oxxi(jit_state_t *_jit, int32_t Op, + int32_t Rd, int32_t Rn, int32_t Imm12) { instr_t i; assert(!(Rd & ~0x1f)); @@ -858,8 +858,8 @@ _oxxi(jit_state_t *_jit, jit_int32_t Op, } static void -_oxx9(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Rd, jit_int32_t Rn, jit_int32_t Imm9) +_oxx9(jit_state_t *_jit, int32_t Op, + int32_t Rd, int32_t Rn, int32_t Imm9) { instr_t i; assert(!(Rd & ~0x1f)); @@ -874,7 +874,7 @@ _oxx9(jit_state_t *_jit, jit_int32_t Op, } static void -_ox19(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Simm19) +_ox19(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Simm19) { instr_t i; assert(!(Rd & ~0x1f)); @@ -887,7 +887,7 @@ _ox19(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Simm19) } static void -_oc19(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Cc, jit_int32_t Simm19) +_oc19(jit_state_t *_jit, int32_t Op, int32_t Cc, int32_t Simm19) { instr_t i; assert(!(Cc & ~0xf)); @@ -900,7 +900,7 @@ _oc19(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Cc, jit_int32_t Simm19) } static void -_o26(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Simm26) +_o26(jit_state_t *_jit, int32_t Op, int32_t Simm26) { instr_t i; assert(Simm26 >= -33554432 && Simm26 <= 33554431); @@ -911,7 +911,7 @@ _o26(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Simm26) } static void -_ox_x(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Rm) +_ox_x(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rm) { instr_t i; assert(!(Rd & ~0x1f)); @@ -924,7 +924,7 @@ _ox_x(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Rm) } static void -_o_xx(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Rn) +_o_xx(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rn) { instr_t i; assert(!(Rd & ~0x1f)); @@ -937,7 +937,7 @@ _o_xx(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Rn) } static void -_oxx_(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rn, jit_int32_t Rm) +_oxx_(jit_state_t *_jit, int32_t Op, int32_t Rn, int32_t Rm) { instr_t i; assert(!(Rn & ~0x1f)); @@ -950,7 +950,7 @@ _oxx_(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rn, jit_int32_t Rm) } static void -_o_x_(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rn) +_o_x_(jit_state_t *_jit, int32_t Op, int32_t Rn) { instr_t i; assert(!(Rn & ~0x1f)); @@ -961,7 +961,7 @@ _o_x_(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rn) } static void -_ox_h(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Imm16) +_ox_h(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Imm16) { instr_t i; assert(!(Rd & ~0x1f)); @@ -974,8 +974,8 @@ _ox_h(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Rd, jit_int32_t Imm16) } static void -_oxxrs(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Rd, jit_int32_t Rn, jit_int32_t R, jit_int32_t S) +_oxxrs(jit_state_t *_jit, int32_t Op, + int32_t Rd, int32_t Rn, int32_t R, int32_t S) { instr_t i; assert(!(Rd & ~0x1f)); @@ -992,8 +992,8 @@ _oxxrs(jit_state_t *_jit, jit_int32_t Op, } static void -_oxxxc(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Rd, jit_int32_t Rn, jit_int32_t Rm, jit_int32_t Cc) +_oxxxc(jit_state_t *_jit, int32_t Op, + int32_t Rd, int32_t Rn, int32_t Rm, int32_t Cc) { instr_t i; assert(!(Rd & ~0x1f)); @@ -1010,8 +1010,8 @@ _oxxxc(jit_state_t *_jit, jit_int32_t Op, } static void -_oxxx7(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Rt, jit_int32_t Rt2, jit_int32_t Rn, jit_int32_t Simm7) +_oxxx7(jit_state_t *_jit, int32_t Op, + int32_t Rt, int32_t Rt2, int32_t Rn, int32_t Simm7) { instr_t i; assert(!(Rt & ~0x1f)); @@ -1028,7 +1028,7 @@ _oxxx7(jit_state_t *_jit, jit_int32_t Op, } static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { for (; i0 > 0; i0 -= 4) NOP(); @@ -1036,9 +1036,9 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t is = i0 >> 12; jit_word_t in = -i0; jit_word_t iS = in >> 12; @@ -1059,9 +1059,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t is = i0 >> 12; jit_word_t in = -i0; jit_word_t iS = in >> 12; @@ -1082,9 +1082,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); addxr(r0, r1, rn(reg)); @@ -1092,9 +1092,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t is = i0 >> 12; if ( i0 >= 0 && i0 <= 0xfff) SUBI (r0, r1, i0); @@ -1109,9 +1109,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t is = i0 >> 12; if ( i0 >= 0 && i0 <= 0xfff) SUBSI (r0, r1, i0); @@ -1126,9 +1126,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); subxr(r0, r1, rn(reg)); @@ -1136,16 +1136,16 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); mulr(r0, r1, rn(reg)); @@ -1153,10 +1153,10 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_qmulr(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +_qmulr(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t reg; + int32_t reg; if (r0 == r2 || r0 == r3) { reg = jit_get_reg(jit_class_gpr); mulr(rn(reg), r2, r3); @@ -1171,10 +1171,10 @@ _qmulr(jit_state_t *_jit, jit_int32_t r0, } static void -_qmuli(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_word_t i0) +_qmuli(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qmulr(r0, r1, r2, rn(reg)); @@ -1182,10 +1182,10 @@ _qmuli(jit_state_t *_jit, jit_int32_t r0, } static void -_qmulr_u(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +_qmulr_u(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t reg; + int32_t reg; if (r0 == r2 || r0 == r3) { reg = jit_get_reg(jit_class_gpr); mulr(rn(reg), r2, r3); @@ -1200,10 +1200,10 @@ _qmulr_u(jit_state_t *_jit, jit_int32_t r0, } static void -_qmuli_u(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_word_t i0) +_qmuli_u(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qmulr_u(r0, r1, r2, rn(reg)); @@ -1211,9 +1211,9 @@ _qmuli_u(jit_state_t *_jit, jit_int32_t r0, } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr(r0, r1, rn(reg)); @@ -1221,9 +1221,9 @@ _divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr_u(r0, r1, rn(reg)); @@ -1232,10 +1232,10 @@ _divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) static void _iqdivr(jit_state_t *_jit, jit_bool_t sign, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t sv0, rg0; - jit_int32_t sv1, rg1; + int32_t sv0, rg0; + int32_t sv1, rg1; if (r0 == r2 || r0 == r3) { sv0 = jit_get_reg(jit_class_gpr); rg0 = rn(sv0); @@ -1265,10 +1265,10 @@ _iqdivr(jit_state_t *_jit, jit_bool_t sign, } static void -_qdivi(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_word_t i0) +_qdivi(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qdivr(r0, r1, r2, rn(reg)); @@ -1276,10 +1276,10 @@ _qdivi(jit_state_t *_jit, jit_int32_t r0, } static void -_qdivi_u(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_word_t i0) +_qdivi_u(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qdivr_u(r0, r1, r2, rn(reg)); @@ -1287,9 +1287,9 @@ _qdivi_u(jit_state_t *_jit, jit_int32_t r0, } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); divr(rn(reg), r1, r2); @@ -1305,9 +1305,9 @@ _remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr(r0, r1, rn(reg)); @@ -1315,9 +1315,9 @@ _remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); divr_u(rn(reg), r1, r2); @@ -1333,9 +1333,9 @@ _remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr_u(r0, r1, rn(reg)); @@ -1343,7 +1343,7 @@ _remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0 == 0) movr(r0, r1); @@ -1354,7 +1354,7 @@ _lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0 == 0) movr(r0, r1); @@ -1365,7 +1365,7 @@ _rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0 == 0) movr(r0, r1); @@ -1376,10 +1376,10 @@ _rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; - jit_int32_t imm; + int32_t reg; + int32_t imm; if (i0 == 0) movi(r0, 0); else if (i0 == -1) @@ -1398,10 +1398,10 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; - jit_int32_t imm; + int32_t reg; + int32_t imm; if (i0 == 0) movr(r0, r1); else if (i0 == -1) @@ -1420,10 +1420,10 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; - jit_int32_t imm; + int32_t reg; + int32_t imm; if (i0 == 0) movr(r0, r1); else if (i0 == -1) @@ -1443,24 +1443,24 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #if __BYTE_ORDER == __LITTLE_ENDIAN static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { - htonr_ul(r0, r1); + bswapr_ul(r0, r1); rshi_u(r0, r0, 48); } static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { - htonr_ul(r0, r1); + bswapr, 2019_ul(r0, r1); rshi_u(r0, r0, 32); } #endif static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_c(r0, rn(reg)); @@ -1468,7 +1468,7 @@ _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_uc(jit_state_t *_jit, int32_t r0, int32_t r1) { LDRBI(r0, r1, 0); #if 0 @@ -1477,9 +1477,9 @@ _ldr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_uc(r0, rn(reg)); @@ -1487,9 +1487,9 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_s(r0, rn(reg)); @@ -1497,7 +1497,7 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { LDRHI(r0, r1, 0); #if 0 @@ -1506,9 +1506,9 @@ _ldr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_us(r0, rn(reg)); @@ -1516,9 +1516,9 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_i(r0, rn(reg)); @@ -1526,7 +1526,7 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { LDRWI(r0, r1, 0); #if 0 @@ -1535,9 +1535,9 @@ _ldr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_ui(r0, rn(reg)); @@ -1545,9 +1545,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_l(r0, rn(reg)); @@ -1555,16 +1555,16 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { LDRSB(r0, r1, r2); extr_c(r0, r0); } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= 0 && i0 <= 4095) LDRSBI(r0, r1, i0); else if (i0 > -256 && i0 < 0) @@ -1579,7 +1579,7 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { LDRB(r0, r1, r2); #if 0 @@ -1588,9 +1588,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= 0 && i0 <= 4095) LDRBI(r0, r1, i0); else if (i0 > -256 && i0 < 0) @@ -1607,9 +1607,9 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 1)); if (i0 >= 0 && i0 <= 8191) LDRSHI(r0, r1, i0 >> 1); @@ -1624,7 +1624,7 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { LDRH(r0, r1, r2); #if 0 @@ -1633,9 +1633,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 1)); if (i0 >= 0 && i0 <= 8191) LDRHI(r0, r1, i0 >> 1); @@ -1653,9 +1653,9 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 3)); if (i0 >= 0 && i0 <= 16383) LDRSWI(r0, r1, i0 >> 2); @@ -1670,7 +1670,7 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { LDRW(r0, r1, r2); #if 0 @@ -1679,9 +1679,9 @@ _ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 3)); if (i0 >= 0 && i0 <= 16383) LDRWI(r0, r1, i0 >> 2); @@ -1699,9 +1699,9 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 7)); if (i0 >= 0 && i0 <= 32767) LDRI(r0, r1, i0 >> 3); @@ -1716,9 +1716,9 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_c(rn(reg), r0); @@ -1726,9 +1726,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_s(rn(reg), r0); @@ -1736,9 +1736,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_i(rn(reg), r0); @@ -1746,9 +1746,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_l(rn(reg), r0); @@ -1756,9 +1756,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 >= 0 && i0 <= 4095) STRBI(r1, r0, i0); else if (i0 > -256 && i0 < 0) @@ -1772,9 +1772,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 1)); if (i0 >= 0 && i0 <= 8191) STRHI(r1, r0, i0 >> 1); @@ -1789,9 +1789,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 3)); if (i0 >= 0 && i0 <= 16383) STRWI(r1, r0, i0 >> 2); @@ -1806,9 +1806,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 7)); if (i0 >= 0 && i0 <= 32767) STRI(r1, r0, i0 >> 3); @@ -1823,14 +1823,14 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) MOV(r0, r1); } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t n0, ibit, nbit; n0 = ~i0; @@ -1939,7 +1939,7 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; w = _jit->pc.w; @@ -1951,18 +1951,18 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ccr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ccr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { CMP(r1, r2); CSET(r0, cc); } static void -_cci(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_cci(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t is = i0 >> 12; jit_word_t in = -i0; jit_word_t iS = in >> 12; @@ -1984,8 +1984,8 @@ _cci(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bccr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bccr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w, d; CMP(r0, r1); @@ -1996,10 +1996,10 @@ _bccr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bcci(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bcci(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t w, d; jit_word_t is = i1 >> 12; jit_word_t in = -i1; @@ -2025,7 +2025,7 @@ _bcci(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_beqi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; if (i1 == 0) { @@ -2038,7 +2038,7 @@ _beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bnei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; if (i1 == 0) { @@ -2051,8 +2051,8 @@ _bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_baddr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_baddr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; addcr(r0, r0, r1); @@ -2062,8 +2062,8 @@ _baddr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_baddi(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_baddi(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; addci(r0, r0, i1); @@ -2073,8 +2073,8 @@ _baddi(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bsubr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bsubr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; subcr(r0, r0, r1); @@ -2084,8 +2084,8 @@ _bsubr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bsubi(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bsubi(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; subci(r0, r0, i1); @@ -2095,8 +2095,8 @@ _bsubi(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bmxr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmxr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; TST(r0, r1); @@ -2106,12 +2106,12 @@ _bmxr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bmxi(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmxi(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; - jit_int32_t imm; + int32_t reg; + int32_t imm; imm = logical_immediate(i1); if (imm != -1) TSTI(r0, imm); @@ -2130,7 +2130,7 @@ static void _jmpi(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; w = (i0 - _jit->pc.w) >> 2; if (w >= -33554432 && w <= 33554431) B(w); @@ -2146,7 +2146,7 @@ static jit_word_t _jmpi_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); w = movi_p(rn(reg), i0); jmpr(rn(reg)); @@ -2158,7 +2158,7 @@ static void _calli(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; w = (i0 - _jit->pc.w) >> 2; if (w >= -33554432 && w <= 33554431) BL(w); @@ -2174,7 +2174,7 @@ static jit_word_t _calli_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); w = movi_p(rn(reg), i0); callr(rn(reg)); @@ -2193,9 +2193,9 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t reg; + int32_t reg; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -2310,9 +2310,9 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function->self.call & jit_call_varargs); @@ -2345,11 +2345,11 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_word_t ge_code; jit_word_t lt_code; - jit_int32_t rg0, rg1; + int32_t rg0, rg1; assert(_jitc->function->self.call & jit_call_varargs); @@ -2402,9 +2402,9 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { instr_t i; jit_word_t d; - jit_int32_t fc, ff, ffc; + int32_t fc, ff, ffc; union { - jit_int32_t *i; + int32_t *i; jit_word_t w; } u; u.w = instr; diff --git a/libguile/lightning/lib/jit_aarch64-fpu.c b/libguile/lightning/jit/aarch64-fpu.c index 058b98a1e..e1ccde65c 100644 --- a/libguile/lightning/lib/jit_aarch64-fpu.c +++ b/libguile/lightning/jit/aarch64-fpu.c @@ -66,65 +66,65 @@ # define FDIVS(Rd,Rn,Rm) osvvv(A64_FDIV,0,Rd,Rn,Rm) # define FDIVD(Rd,Rn,Rm) osvvv(A64_FDIV,1,Rd,Rn,Rm) # define osvvv(Op,Sz,Rd,Rn,Rm) _osvvv(_jit,Op,Sz,Rd,Rn,Rm) -static void _osvvv(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _osvvv(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t); # define osvv_(Op,Sz,Rd,Rn) _osvv_(_jit,Op,Sz,Rd,Rn) -static void _osvv_(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _osvv_(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define os_vv(Op,Sz,Rn,Rm) _os_vv(_jit,Op,Sz,Rn,Rm) -static void _os_vv(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _os_vv(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define truncr_f_i(r0,r1) _truncr_f_i(_jit,r0,r1) -static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_f_i(jit_state_t*,int32_t,int32_t); # define truncr_f_l(r0,r1) FCVTSZ_XS(r0,r1) # define truncr_d_i(r0,r1) _truncr_d_i(_jit,r0,r1) -static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_i(jit_state_t*,int32_t,int32_t); # define truncr_d_l(r0,r1) FCVTSZ_XD(r0,r1) # define addr_f(r0,r1,r2) FADDS(r0,r1,r2) # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0) -static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define subr_f(r0,r1,r2) FSUBS(r0,r1,r2) # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0) -static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define rsbr_f(r0, r1, r2) subr_f(r0, r2, r1) # define rsbi_f(r0, r1, i0) _rsbi_f(_jit, r0, r1, i0) -static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define mulr_f(r0,r1,r2) FMULS(r0,r1,r2) # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0) -static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define divr_f(r0,r1,r2) FDIVS(r0,r1,r2) # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0) -static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define absr_f(r0,r1) FABSS(r0,r1) # define negr_f(r0,r1) FNEGS(r0,r1) # define sqrtr_f(r0,r1) FSQRTS(r0,r1) # define extr_f(r0,r1) SCVTFS(r0,r1) # define ldr_f(r0,r1) _ldr_f(_jit,r0,r1) -static void _ldr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_f(jit_state_t*,int32_t,int32_t); # define ldi_f(r0,i0) _ldi_f(_jit,r0,i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); # define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_f(r0,r1) _str_f(_jit,r0,r1) -static void _str_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_f(jit_state_t*,int32_t,int32_t); # define sti_f(i0,r0) _sti_f(_jit,i0,r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); # define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define movr_f(r0,r1) _movr_f(_jit,r0,r1) -static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_f(jit_state_t*,int32_t,int32_t); # define movi_f(r0,i0) _movi_f(_jit,r0,i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t); # define extr_d_f(r0,r1) FCVT_SD(r0,r1) # define fccr(cc,r0,r1,r2) _fccr(_jit,cc,r0,r1,r2) -static void _fccr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _fccr(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define fcci(cc,r0,r1,i0) _fcci(_jit,cc,r0,r1,i0) static void _fcci(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_float32_t); + int32_t,int32_t,int32_t,jit_float32_t); # define ltr_f(r0,r1,r2) fccr(CC_MI,r0,r1,r2) # define lti_f(r0,r1,i0) fcci(CC_MI,r0,r1,i0) # define ler_f(r0,r1,r2) fccr(CC_LS,r0,r1,r2) @@ -142,27 +142,27 @@ static void _fcci(jit_state_t*, # define unler_f(r0,r1,r2) fccr(CC_LE,r0,r1,r2) # define unlei_f(r0,r1,i0) fcci(CC_LE,r0,r1,i0) # define uneqr_f(r0,r1,r2) _uneqr_f(_jit,r0,r1,r2) -static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_f(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0) -static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define unger_f(r0,r1,r2) fccr(CC_PL,r0,r1,r2) # define ungei_f(r0,r1,i0) fcci(CC_PL,r0,r1,i0) # define ungtr_f(r0,r1,r2) fccr(CC_HI,r0,r1,r2) # define ungti_f(r0,r1,i0) fcci(CC_HI,r0,r1,i0) # define ltgtr_f(r0,r1,r2) _ltgtr_f(_jit,r0,r1,r2) -static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0) -static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define ordr_f(r0,r1,r2) fccr(CC_VC,r0,r1,r2) # define ordi_f(r0,r1,i0) fcci(CC_VC,r0,r1,i0) # define unordr_f(r0,r1,r2) fccr(CC_VS,r0,r1,r2) # define unordi_f(r0,r1,i0) fcci(CC_VS,r0,r1,i0) #define fbccr(cc,i0,r0,r1) _fbccr(_jit,cc,i0,r0,r1) static jit_word_t -_fbccr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_fbccr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); #define fbcci(cc,i0,r0,i1) _fbcci(_jit,cc,i0,r0,i1) static jit_word_t -_fbcci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float32_t); +_fbcci(jit_state_t*,int32_t,jit_word_t,int32_t,jit_float32_t); # define bltr_f(i0,r0,r1) fbccr(BCC_MI,i0,r0,r1) # define blti_f(i0,r0,i1) fbcci(BCC_MI,i0,r0,i1) # define bler_f(i0,r0,r1) fbccr(BCC_LS,i0,r0,r1) @@ -180,66 +180,66 @@ _fbcci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float32_t); # define bunler_f(i0,r0,r1) fbccr(BCC_LE,i0,r0,r1) # define bunlei_f(i0,r0,i1) fbcci(BCC_LE,i0,r0,i1) # define buneqr_f(i0,r0,r1) _buneqr_f(_jit,i0,r0,r1) -static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1) -static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define bunger_f(i0,r0,r1) fbccr(BCC_PL,i0,r0,r1) # define bungei_f(i0,r0,i1) fbcci(BCC_PL,i0,r0,i1) # define bungtr_f(i0,r0,r1) fbccr(BCC_HI,i0,r0,r1) # define bungti_f(i0,r0,i1) fbcci(BCC_HI,i0,r0,i1) # define bltgtr_f(i0,r0,r1) _bltgtr_f(_jit,i0,r0,r1) -static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1) -static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define bordr_f(i0,r0,r1) fbccr(BCC_VC,i0,r0,r1) # define bordi_f(i0,r0,i1) fbcci(BCC_VC,i0,r0,i1) # define bunordr_f(i0,r0,r1) fbccr(BCC_VS,i0,r0,r1) # define bunordi_f(i0,r0,i1) fbcci(BCC_VS,i0,r0,i1) # define addr_d(r0,r1,r2) FADDD(r0,r1,r2) # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0) -static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define subr_d(r0,r1,r2) FSUBD(r0,r1,r2) # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0) -static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define rsbr_d(r0, r1, r2) subr_d(r0, r2, r1) # define rsbi_d(r0, r1, i0) _rsbi_d(_jit, r0, r1, i0) -static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define mulr_d(r0,r1,r2) FMULD(r0,r1,r2) # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0) -static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define divr_d(r0,r1,r2) FDIVD(r0,r1,r2) # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0) -static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define absr_d(r0,r1) FABSD(r0,r1) # define negr_d(r0,r1) FNEGD(r0,r1) # define sqrtr_d(r0,r1) FSQRTD(r0,r1) # define extr_d(r0,r1) SCVTFD(r0,r1) # define ldr_d(r0,r1) _ldr_d(_jit,r0,r1) -static void _ldr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_d(jit_state_t*,int32_t,int32_t); # define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); # define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2) -static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_d(r0,r1) _str_d(_jit,r0,r1) -static void _str_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_d(jit_state_t*,int32_t,int32_t); # define sti_d(i0,r0) _sti_d(_jit,i0,r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); # define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define movr_d(r0,r1) _movr_d(_jit,r0,r1) -static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_d(jit_state_t*,int32_t,int32_t); # define movi_d(r0,i0) _movi_d(_jit,r0,i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t); # define extr_f_d(r0,r1) FCVT_DS(r0,r1) # define dccr(cc,r0,r1,r2) _dccr(_jit,cc,r0,r1,r2) -static void _dccr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _dccr(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define dcci(cc,r0,r1,i0) _dcci(_jit,cc,r0,r1,i0) static void _dcci(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_float64_t); + int32_t,int32_t,int32_t,jit_float64_t); # define ltr_d(r0,r1,r2) dccr(CC_MI,r0,r1,r2) # define lti_d(r0,r1,i0) dcci(CC_MI,r0,r1,i0) # define ler_d(r0,r1,r2) dccr(CC_LS,r0,r1,r2) @@ -257,27 +257,27 @@ static void _dcci(jit_state_t*, # define unler_d(r0,r1,r2) dccr(CC_LE,r0,r1,r2) # define unlei_d(r0,r1,i0) dcci(CC_LE,r0,r1,i0) # define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2) -static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0) -static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define unger_d(r0,r1,r2) dccr(CC_PL,r0,r1,r2) # define ungei_d(r0,r1,i0) dcci(CC_PL,r0,r1,i0) # define ungtr_d(r0,r1,r2) dccr(CC_HI,r0,r1,r2) # define ungti_d(r0,r1,i0) dcci(CC_HI,r0,r1,i0) # define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2) -static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0) -static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define ordr_d(r0,r1,r2) dccr(CC_VC,r0,r1,r2) # define ordi_d(r0,r1,i0) dcci(CC_VC,r0,r1,i0) # define unordr_d(r0,r1,r2) dccr(CC_VS,r0,r1,r2) # define unordi_d(r0,r1,i0) dcci(CC_VS,r0,r1,i0) #define dbccr(cc,i0,r0,r1) _dbccr(_jit,cc,i0,r0,r1) static jit_word_t -_dbccr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_dbccr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); #define dbcci(cc,i0,r0,i1) _dbcci(_jit,cc,i0,r0,i1) static jit_word_t -_dbcci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float64_t); +_dbcci(jit_state_t*,int32_t,jit_word_t,int32_t,jit_float64_t); # define bltr_d(i0,r0,r1) dbccr(BCC_MI,i0,r0,r1) # define blti_d(i0,r0,i1) dbcci(BCC_MI,i0,r0,i1) # define bler_d(i0,r0,r1) dbccr(BCC_LS,i0,r0,r1) @@ -295,29 +295,29 @@ _dbcci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float64_t); # define bunler_d(i0,r0,r1) dbccr(BCC_LE,i0,r0,r1) # define bunlei_d(i0,r0,i1) dbcci(BCC_LE,i0,r0,i1) # define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1) -static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1) -static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define bunger_d(i0,r0,r1) dbccr(BCC_PL,i0,r0,r1) # define bungei_d(i0,r0,i1) dbcci(BCC_PL,i0,r0,i1) # define bungtr_d(i0,r0,r1) dbccr(BCC_HI,i0,r0,r1) # define bungti_d(i0,r0,i1) dbcci(BCC_HI,i0,r0,i1) # define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1) -static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1) -static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define bordr_d(i0,r0,r1) dbccr(BCC_VC,i0,r0,r1) # define bordi_d(i0,r0,i1) dbcci(BCC_VC,i0,r0,i1) # define bunordr_d(i0,r0,r1) dbccr(BCC_VS,i0,r0,r1) # define bunordi_d(i0,r0,i1) dbcci(BCC_VS,i0,r0,i1) # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE static void -_osvvv(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Sz, - jit_int32_t Rd, jit_int32_t Rn, jit_int32_t Rm) +_osvvv(jit_state_t *_jit, int32_t Op, int32_t Sz, + int32_t Rd, int32_t Rn, int32_t Rm) { instr_t i; assert(!(Rd & ~0x1f)); @@ -334,8 +334,8 @@ _osvvv(jit_state_t *_jit, jit_int32_t Op, jit_int32_t Sz, } static void -_osvv_(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Sz, jit_int32_t Rd, jit_int32_t Rn) +_osvv_(jit_state_t *_jit, int32_t Op, + int32_t Sz, int32_t Rd, int32_t Rn) { instr_t i; assert(!(Rd & ~0x1f)); @@ -350,8 +350,8 @@ _osvv_(jit_state_t *_jit, jit_int32_t Op, } static void -_os_vv(jit_state_t *_jit, jit_int32_t Op, - jit_int32_t Sz, jit_int32_t Rn, jit_int32_t Rm) +_os_vv(jit_state_t *_jit, int32_t Op, + int32_t Sz, int32_t Rn, int32_t Rm) { instr_t i; assert(!(Rn & ~0x1f)); @@ -368,9 +368,9 @@ _os_vv(jit_state_t *_jit, jit_int32_t Op, #define fopi(name) \ static void \ _##name##i_f(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) \ + int32_t r0, int32_t r1, jit_float32_t i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_f(rn(reg), i0); \ name##r_f(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -378,9 +378,9 @@ _##name##i_f(jit_state_t *_jit, \ #define dopi(name) \ static void \ _##name##i_d(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) \ + int32_t r0, int32_t r1, jit_float64_t i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_d(rn(reg), i0); \ name##r_d(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -388,10 +388,10 @@ _##name##i_d(jit_state_t *_jit, \ #define fbopi(name) \ static jit_word_t \ _b##name##i_f(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, jit_float32_t i1) \ + jit_word_t i0, int32_t r0, jit_float32_t i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ movi_f(rn(reg), i1); \ word = b##name##r_f(i0, r0, rn(reg)); \ @@ -401,10 +401,10 @@ _b##name##i_f(jit_state_t *_jit, \ #define dbopi(name) \ static jit_word_t \ _b##name##i_d(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, jit_float64_t i1) \ + jit_word_t i0, int32_t r0, jit_float64_t i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ movi_d(rn(reg), i1); \ word = b##name##r_d(i0, r0, rn(reg)); \ @@ -413,14 +413,14 @@ _b##name##i_d(jit_state_t *_jit, \ } static void -_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) { FCVTSZ_WS(r0, r1); extr_i(r0, r0); } static void -_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { FCVTSZ_WD(r0, r1); extr_i(r0, r0); @@ -433,9 +433,9 @@ fopi(mul) fopi(div) static void -_ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldr_i(rn(reg), r1); FMOVSW(r0, rn(reg)); @@ -443,9 +443,9 @@ _ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldi_i(rn(reg), i0); FMOVSW(r0, rn(reg)); @@ -453,9 +453,9 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldxr_i(rn(reg), r1, r2); FMOVSW(r0, rn(reg)); @@ -463,9 +463,9 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldxi_i(rn(reg), r1, i0); FMOVSW(r0, rn(reg)); @@ -473,9 +473,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_str_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r1); str_i(r0, rn(reg)); @@ -483,9 +483,9 @@ _str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r0); sti_i(i0, rn(reg)); @@ -493,9 +493,9 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r2); stxr_i(r0, r1, rn(reg)); @@ -503,9 +503,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVWS(rn(reg), r1); stxi_i(i0, r0, rn(reg)); @@ -513,20 +513,20 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) FMOVS(r0, r1); } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } u; - jit_int32_t reg; + int32_t reg; u.f = i0; if (u.i == 0) FMOVSW(r0, WZR_REGNO); @@ -540,18 +540,18 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0) } static void -_fccr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_fccr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { FCMPES(r1, r2); CSET(r0, cc); } static void -_fcci(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) +_fcci(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_float32_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); movi_f(rn(reg), i0); fccr(cc, r0, r1, rn(reg)); @@ -559,7 +559,7 @@ _fcci(jit_state_t *_jit, jit_int32_t cc, } static void -_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; FCMPES(r1, r2); @@ -572,7 +572,7 @@ _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(uneq) static void -_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; FCMPES(r1, r2); @@ -585,8 +585,8 @@ _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ltgt) static jit_word_t -_fbccr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_fbccr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w, d; FCMPES(r0, r1); @@ -597,11 +597,11 @@ _fbccr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_fbcci(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float32_t i1) +_fbcci(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float32_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi_f(rn(reg), i1); w = fbccr(cc, i0, r0, rn(reg)); @@ -610,7 +610,7 @@ _fbcci(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_buneqr_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t u, v, w; FCMPES(r0, r1); @@ -627,7 +627,7 @@ _buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) fbopi(uneq) static jit_word_t -_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltgtr_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t u, v, w; FCMPES(r0, r1); @@ -650,9 +650,9 @@ dopi(mul) dopi(div) static void -_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldr_l(rn(reg), r1); FMOVDX(r0, rn(reg)); @@ -660,9 +660,9 @@ _ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldi_l(rn(reg), i0); FMOVDX(r0, rn(reg)); @@ -670,9 +670,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldxr_l(rn(reg), r1, r2); FMOVDX(r0, rn(reg)); @@ -680,9 +680,9 @@ _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ldxi_l(rn(reg), r1, i0); FMOVDX(r0, rn(reg)); @@ -690,9 +690,9 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_str_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r1); str_l(r0, rn(reg)); @@ -700,9 +700,9 @@ _str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r0); sti_l(i0, rn(reg)); @@ -710,9 +710,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r2); stxr_l(r0, r1, rn(reg)); @@ -720,9 +720,9 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); FMOVXD(rn(reg), r1); stxi_l(i0, r0, rn(reg)); @@ -730,20 +730,20 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) FMOVD(r0, r1); } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0) { union { - jit_int64_t l; + int64_t l; jit_float64_t d; } u; - jit_int32_t reg; + int32_t reg; u.d = i0; if (u.l == 0) FMOVDX(r0, XZR_REGNO); @@ -756,18 +756,18 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0) } static void -_dccr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_dccr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { FCMPED(r1, r2); CSET(r0, cc); } static void -_dcci(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) +_dcci(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_float64_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); movi_d(rn(reg), i0); dccr(cc, r0, r1, rn(reg)); @@ -775,7 +775,7 @@ _dcci(jit_state_t *_jit, jit_int32_t cc, } static void -_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; FCMPED(r1, r2); @@ -788,7 +788,7 @@ _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(uneq) static void -_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; FCMPED(r1, r2); @@ -801,8 +801,8 @@ _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ltgt) static jit_word_t -_dbccr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_dbccr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w, d; FCMPED(r0, r1); @@ -813,11 +813,11 @@ _dbccr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_dbcci(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float64_t i1) +_dbcci(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float64_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi_d(rn(reg), i1); w = dbccr(cc, i0, r0, rn(reg)); @@ -826,7 +826,7 @@ _dbcci(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t u, v, w; FCMPED(r0, r1); @@ -843,7 +843,7 @@ _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) dbopi(uneq) static jit_word_t -_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t u, v, w; FCMPED(r0, r1); @@ -860,11 +860,11 @@ _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) dbopi(ltgt) static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_word_t ge_code; jit_word_t lt_code; - jit_int32_t rg0, rg1; + int32_t rg0, rg1; assert(_jitc->function->self.call & jit_call_varargs); diff --git a/libguile/lightning/lib/jit_aarch64.c b/libguile/lightning/jit/aarch64.c index 2d0f2b4c7..332c4c0c6 100644 --- a/libguile/lightning/lib/jit_aarch64.c +++ b/libguile/lightning/jit/aarch64.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2017 Free Software Foundation, Inc. + * Copyright (C) 2013-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -31,17 +31,17 @@ typedef struct jit_va_list { jit_pointer_t stack; jit_pointer_t gptop; jit_pointer_t fptop; - jit_int32_t gpoff; - jit_int32_t fpoff; - - jit_int64_t x0; - jit_int64_t x1; - jit_int64_t x2; - jit_int64_t x3; - jit_int64_t x4; - jit_int64_t x5; - jit_int64_t x6; - jit_int64_t x7; + int32_t gpoff; + int32_t fpoff; + + int64_t x0; + int64_t x1; + int64_t x2; + int64_t x3; + int64_t x4; + int64_t x5; + int64_t x6; + int64_t x7; jit_qreg_t q0; jit_qreg_t q1; @@ -63,14 +63,14 @@ static void _patch(jit_state_t*,jit_word_t,jit_node_t*); extern void __clear_cache(void *, void *); #define PROTO 1 -# include "jit_aarch64-cpu.c" -# include "jit_aarch64-fpu.c" +# include "aarch64-cpu.c" +# include "aarch64-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { rc(gpr) | 0x08, "x8" }, { rc(gpr) | 0x12, "x18" }, { rc(gpr) | 0x11, "x17" }, @@ -155,7 +155,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -175,7 +175,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = 0; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -194,8 +194,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -213,13 +213,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t r0, r1; + int32_t r0, r1; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } r0 = jit_get_reg(jit_class_gpr); @@ -258,7 +258,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); if (JIT_RET != u) @@ -278,7 +278,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); if (u != JIT_FRET) @@ -299,7 +299,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); if (u != JIT_FRET) @@ -372,7 +372,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -383,7 +383,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); assert(!(_jitc->function->self.call & jit_call_varargs)); if (jit_arg_reg_p(_jitc->function->self.argi)) @@ -402,7 +402,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); assert(!(_jitc->function->self.call & jit_call_varargs)); if (jit_arg_f_reg_p(_jitc->function->self.argf)) @@ -421,7 +421,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); assert(!(_jitc->function->self.call & jit_call_varargs)); if (jit_arg_f_reg_p(_jitc->function->self.argf)) @@ -437,7 +437,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -449,7 +449,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -461,7 +461,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -473,7 +473,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -485,7 +485,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -497,7 +497,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_ui, u, v); @@ -509,7 +509,7 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_l, u, v); @@ -521,7 +521,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -535,7 +535,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_arg_reg_p(v->u.w)) @@ -550,7 +550,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -562,7 +562,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -576,7 +576,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -591,7 +591,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -603,7 +603,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -617,7 +617,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (jit_arg_reg_p(v->u.w)) @@ -632,7 +632,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr, u); @@ -651,7 +651,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -670,7 +670,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_f, u); @@ -689,7 +689,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -708,7 +708,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_d, u); @@ -727,7 +727,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -746,9 +746,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { regno = JIT_RA0 - regno; @@ -765,7 +765,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *node; assert(_jitc->function); @@ -800,7 +800,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, JIT_RET); @@ -808,7 +808,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, JIT_RET); @@ -816,7 +816,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, JIT_RET); @@ -824,7 +824,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, JIT_RET); @@ -832,7 +832,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); jit_extr_i(r0, JIT_RET); @@ -840,7 +840,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_ui, r0); jit_extr_ui(r0, JIT_RET); @@ -848,7 +848,7 @@ _jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_l, r0); if (r0 != JIT_RET) @@ -857,7 +857,7 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_f, r0); if (r0 != JIT_FRET) @@ -866,7 +866,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); if (r0 != JIT_FRET) @@ -881,16 +881,16 @@ _emit_code(jit_state_t *_jit) jit_node_t *temp; jit_word_t word; jit_word_t value; - jit_int32_t offset; + int32_t offset; struct { jit_node_t *node; - jit_uint8_t *data; + uint8_t *data; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t const_offset; - jit_int32_t patch_offset; + int32_t const_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1518,8 +1518,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_aarch64-cpu.c" -# include "jit_aarch64-fpu.c" +# include "aarch64-cpu.c" +# include ", 2018aarch64-fpu.c" #undef CODE void @@ -1536,25 +1536,25 @@ jit_flush(void *fptr, void *tptr) } void -_emit_ldxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi(rn(r0), rn(r1), i0); } void -_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi(i0, rn(r0), rn(r1)); } void -_emit_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_d(rn(r0), rn(r1), i0); } void -_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi_d(i0, rn(r0), rn(r1)); } @@ -1562,7 +1562,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_aarch64.h b/libguile/lightning/jit/aarch64.h index 65723a6d2..65723a6d2 100644 --- a/libguile/lightning/include/lightning/jit_aarch64.h +++ b/libguile/lightning/jit/aarch64.h diff --git a/libguile/lightning/lib/jit_alpha-cpu.c b/libguile/lightning/jit/alpha-cpu.c index a59029095..a31640f37 100644 --- a/libguile/lightning/lib/jit_alpha-cpu.c +++ b/libguile/lightning/jit/alpha-cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014, 2017 Free Software Foundation, Inc. + * Copyright (C) 2014, 2017, 2019 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -304,188 +304,188 @@ static void _Opi(jit_state_t*,int,int,unsigned int,unsigned int,int); # define NEGQ(ra,rc) SUBQ(_R31_REGNO,ra,rc) # define NOT(ra,rc) ORNOT(_R31_REGNO,ra,rc) # define nop(i0) _nop(_jit,i0) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); # define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); # define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); # define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); # define negr(r0,r1) NEGQ(r1,r0) # define comr(r0,r1) NOT(r1,r0) # define addr(r0,r1,r2) ADDQ(r1,r2,r0) # define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); # define addcr(r0,r1,i0) _addcr(_jit,r0,r1,i0) -static void _addcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addcr(jit_state_t*,int32_t,int32_t,int32_t); # define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); # define addxr(r0,r1,i0) _addxr(_jit,r0,r1,i0) -static void _addxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addxr(jit_state_t*,int32_t,int32_t,int32_t); # define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subr(r0,r1,r2) SUBQ(r1,r2,r0) # define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0,r1,i0) _subcr(_jit,r0,r1,i0) -static void _subcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subcr(jit_state_t*,int32_t,int32_t,int32_t); # define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0,r1,i0) _subxr(_jit,r0,r1,i0) -static void _subxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subxr(jit_state_t*,int32_t,int32_t,int32_t); # define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t, jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t, jit_word_t); # define mulr(r0,r1,r2) MULQ(r1,r2,r0) # define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); # define qmulr(r0,r1,r2,r3) _qmulr(_jit,r0,r1,r2,r3) -static void _qmulr(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qmulr(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qmuli(r0,r1,r2,i0) _qmuli(_jit,r0,r1,r2,i0) -static void _qmuli(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qmuli(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define qmulr_u(r0,r1,r2,r3) _qmulr_u(_jit,r0,r1,r2,r3) -static void _qmulr_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qmulr_u(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qmuli_u(r0,r1,r2,i0) _qmuli_u(_jit,r0,r1,r2,i0) -static void _qmuli_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qmuli_u(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); static jit_word_t __idiv(jit_word_t, jit_word_t); # define divr(r0,r1,r2) _divr(_jit,r0,r1,r2) -static void _divr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr(jit_state_t*,int32_t,int32_t,int32_t); # define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); static jit_uword_t __udiv(jit_uword_t, jit_uword_t); # define divr_u(r0,r1,r2) _divr_u(_jit,r0,r1,r2) -static void _divr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_u(jit_state_t*,int32_t,int32_t,int32_t); # define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); static jit_word_t __irem(jit_word_t, jit_word_t); # define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); # define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); static jit_uword_t __urem(jit_uword_t, jit_uword_t); # define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); # define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); static jit_word_t __idivrem(jit_word_t, jit_word_t, jit_word_t*); # define qdivr(r0,r1,r2,r3) _qdivr(_jit,r0,r1,r2,r3) static void _qdivr(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); # define qdivi(r0,r1,r2,i0) _qdivi(_jit,r0,r1,r2,i0) static void _qdivi(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); static jit_word_t __udivrem(jit_uword_t, jit_uword_t, jit_uword_t*); # define qdivr_u(r0,r1,r2,r3) _qdivr_u(_jit,r0,r1,r2,r3) static void _qdivr_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); # define qdivi_u(r0,r1,r2,i0) _qdivi_u(_jit,r0,r1,r2,i0) static void _qdivi_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); # define lshr(r0,r1,r2) SLL(r1,r2,r0) # define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr(r0,r1,r2) SRA(r1,r2,r0) # define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr_u(r0,r1,r2) SRL(r1,r2,r0) # define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define andr(r0,r1,r2) AND(r1,r2,r0) # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); # define orr(r0,r1,r2) OR(r1,r2,r0) # define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); # define xorr(r0,r1,r2) XOR(r1,r2,r0) # define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); # define ltr(r0,r1,r2) CMPLT(r1,r2,r0) # define lti(r0,r1,i0) _lti(_jit,r0,r1,i0) -static void _lti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti(jit_state_t*,int32_t,int32_t,jit_word_t); # define ltr_u(r0,r1,r2) CMPULT(r1,r2,r0) # define lti_u(r0,r1,i0) _lti_u(_jit,r0,r1,i0) -static void _lti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define ler(r0,r1,r2) CMPLE(r1,r2,r0) # define lei(r0,r1,i0) _lei(_jit,r0,r1,i0) -static void _lei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei(jit_state_t*,int32_t,int32_t,jit_word_t); # define ler_u(r0,r1,r2) CMPULE(r1,r2,r0) # define lei_u(r0,r1,i0) _lei_u(_jit,r0,r1,i0) -static void _lei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define eqr(r0,r1,r2) CMPEQ(r1,r2,r0) # define eqi(r0,r1,i0) _eqi(_jit,r0,r1,i0) -static void _eqi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _eqi(jit_state_t*,int32_t,int32_t,jit_word_t); # define ger(r0,r1,r2) CMPLE(r2,r1,r0) # define gei(r0,r1,i0) _gei(_jit,r0,r1,i0) -static void _gei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei(jit_state_t*,int32_t,int32_t,jit_word_t); # define ger_u(r0,r1,r2) CMPULE(r2,r1,r0) # define gei_u(r0,r1,i0) _gei_u(_jit,r0,r1,i0) -static void _gei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define gtr(r0,r1,r2) CMPLT(r2,r1,r0) # define gti(r0,r1,i0) _gti(_jit,r0,r1,i0) -static void _gti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti(jit_state_t*,int32_t,int32_t,jit_word_t); # define gtr_u(r0,r1,r2) CMPULT(r2,r1,r0) # define gti_u(r0,r1,i0) _gti_u(_jit,r0,r1,i0) -static void _gti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define ner(r0,r1,r2) _ner(_jit,r0,r1,r2) -static void _ner(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner(jit_state_t*,int32_t,int32_t,int32_t); # define nei(r0,r1,i0) _nei(_jit,r0,r1,i0) -static void _nei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _nei(jit_state_t*,int32_t,int32_t,jit_word_t); # define bltr(i0,r0,r1) _bltr(_jit,i0,r0,r1) -static jit_word_t _bltr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr(jit_state_t*,jit_word_t,int32_t,int32_t); # define blti(i0,r0,i1) _blti(_jit,i0,r0,i1) -static jit_word_t _blti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bltr_u(i0,r0,r1) _bltr_u(_jit,i0,r0,r1) -static jit_word_t _bltr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define blti_u(i0,r0,i1) _blti_u(_jit,i0,r0,i1) -static jit_word_t _blti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bler(i0,r0,r1) _bler(_jit,i0,r0,r1) -static jit_word_t _bler(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler(jit_state_t*,jit_word_t,int32_t,int32_t); # define blei(i0,r0,i1) _blei(_jit,i0,r0,i1) -static jit_word_t _blei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bler_u(i0,r0,r1) _bler_u(_jit,i0,r0,r1) -static jit_word_t _bler_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define blei_u(i0,r0,i1) _blei_u(_jit,i0,r0,i1) -static jit_word_t _blei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define beqr(i0,r0,r1) _beqr(_jit,i0,r0,r1) -static jit_word_t _beqr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr(jit_state_t*,jit_word_t,int32_t,int32_t); # define beqi(i0,r0,i1) _beqi(_jit,i0,r0,i1) -static jit_word_t _beqi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _beqi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bger(i0,r0,r1) _bger(_jit,i0,r0,r1) -static jit_word_t _bger(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgei(i0,r0,i1) _bgei(_jit,i0,r0,i1) -static jit_word_t _bgei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bger_u(i0,r0,r1) _bger_u(_jit,i0,r0,r1) -static jit_word_t _bger_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgei_u(i0,r0,i1) _bgei_u(_jit,i0,r0,i1) -static jit_word_t _bgei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bgtr(i0,r0,r1) _bgtr(_jit,i0,r0,r1) -static jit_word_t _bgtr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgti(i0,r0,i1) _bgti(_jit,i0,r0,i1) -static jit_word_t _bgti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bgtr_u(i0,r0,r1) _bgtr_u(_jit,i0,r0,r1) -static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgti_u(i0,r0,i1) _bgti_u(_jit,i0,r0,i1) -static jit_word_t _bgti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bner(i0,r0,r1) _bner(_jit,i0,r0,r1) -static jit_word_t _bner(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner(jit_state_t*,jit_word_t,int32_t,int32_t); # define bnei(i0,r0,i1) _bnei(_jit,i0,r0,i1) -static jit_word_t _bnei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bnei(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define baddr(i0,r0,r1,cc) _baddr(_jit,i0,r0,r1,cc) -static jit_word_t _baddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t, +static jit_word_t _baddr(jit_state_t*,jit_word_t,int32_t,int32_t, jit_bool_t); # define baddi(i0,r0,i1,cc) _baddi(_jit,i0,r0,i1,cc) -static jit_word_t _baddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, +static jit_word_t _baddi(jit_state_t*,jit_word_t,int32_t,jit_word_t, jit_bool_t); # define baddr_u(i0,r0,r1,cc) _baddr_u(_jit,i0,r0,r1,cc) -static jit_word_t _baddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t, +static jit_word_t _baddr_u(jit_state_t*,jit_word_t,int32_t,int32_t, jit_bool_t); # define baddi_u(i0,r0,i1,cc) _baddi_u(_jit,i0,r0,i1,cc) -static jit_word_t _baddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, +static jit_word_t _baddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t, jit_bool_t); # define boaddr(i0,r0,r1) baddr(i0,r0,r1,1) # define boaddi(i0,r0,i1) baddi(i0,r0,i1,1) @@ -496,16 +496,16 @@ static jit_word_t _baddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, # define bxaddr_u(i0,r0,r1) baddr_u(i0,r0,r1,0) # define bxaddi_u(i0,r0,i1) baddi_u(i0,r0,i1,0) # define bsubr(i0,r0,r1,cc) _bsubr(_jit,i0,r0,r1,cc) -static jit_word_t _bsubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t, +static jit_word_t _bsubr(jit_state_t*,jit_word_t,int32_t,int32_t, jit_bool_t); # define bsubi(i0,r0,i1,cc) _bsubi(_jit,i0,r0,i1,cc) -static jit_word_t _bsubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, +static jit_word_t _bsubi(jit_state_t*,jit_word_t,int32_t,jit_word_t, jit_bool_t); # define bsubr_u(i0,r0,r1,cc) _bsubr_u(_jit,i0,r0,r1,cc) -static jit_word_t _bsubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t, +static jit_word_t _bsubr_u(jit_state_t*,jit_word_t,int32_t,int32_t, jit_bool_t); # define bsubi_u(i0,r0,i1,cc) _bsubi_u(_jit,i0,r0,i1,cc) -static jit_word_t _bsubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, +static jit_word_t _bsubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t, jit_bool_t); # define bosubr(i0,r0,r1) bsubr(i0,r0,r1,1) # define bosubi(i0,r0,i1) bsubi(i0,r0,i1,1) @@ -516,123 +516,123 @@ static jit_word_t _bsubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, # define bxsubr_u(i0,r0,r1) bsubr_u(i0,r0,r1,0) # define bxsubi_u(i0,r0,i1) bsubi_u(i0,r0,i1,0) # define bmxr(i0,r0,r1,cc) _bmxr(_jit,i0,r0,r1,cc) -static jit_word_t _bmxr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t, +static jit_word_t _bmxr(jit_state_t*,jit_word_t,int32_t,int32_t, jit_bool_t); # define bmxi(i0,r0,i1,cc) _bmxi(_jit,i0,r0,i1,cc) -static jit_word_t _bmxi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t, +static jit_word_t _bmxi(jit_state_t*,jit_word_t,int32_t,jit_word_t, jit_bool_t); # define bmsr(i0,r0,r1) bmxr(i0,r0,r1,1) # define bmsi(i0,r0,i1) bmxi(i0,r0,i1,1) # define bmcr(i0,r0,r1) bmxr(i0,r0,r1,0) # define bmci(i0,r0,i1) bmxi(i0,r0,i1,0) # define ldr_c(r0,r1) _ldr_c(_jit,r0,r1) -static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_c(jit_state_t*,int32_t,int32_t); # define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldr_uc(r0,r1) LDBU(r0,r1,0) # define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldr_s(r0,r1) _ldr_s(_jit,r0,r1) -static void _ldr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_s(jit_state_t*,int32_t,int32_t); # define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldr_us(r0,r1) LDWU(r0,r1,0) # define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # define ldr_i(r0,r1) LDL(r0,r1,0) # define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # define ldr_ui(r0,r1) _ldr_ui(_jit,r0,r1) -static void _ldr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_ui(jit_state_t*,int32_t,int32_t); # define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); # define ldr(r0,r1) ldr_l(r0,r1) # define ldr_l(r0,r1) LDQ(r0,r1,0) # define ldi_l(r0,i0) _ldi_l(_jit,r0,i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); # define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_s(r0,r1,r2) _ldxr_s(_jit,r0,r1,r2) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_us(r0,r1,r2) _ldxr_us(_jit,r0,r1,r2) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_i(r0,r1,r2) _ldxr_i(_jit,r0,r1,r2) -static void _ldxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_ui(r0,r1,r2) _ldxr_ui(_jit,r0,r1,r2) -static void _ldxr_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_ui(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr(r0,r1,r2) ldxr_l(r0,r1,r2) # define ldxr_l(r0,r1,r2) _ldxr_l(_jit,r0,r1,r2) -static void _ldxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi(r0,r1,i0) ldxi_l(r0,r1,i0) # define ldxi_l(r0,r1,i0) _ldxi_l(_jit,r0,r1,i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_c(r0,r1) STB(r1,r0,0) # define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define str_s(r0,r1) STW(r1,r0,0) # define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # define str_i(r0,r1) STL(r1,r0,0) # define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # define str(r0,r1) str_l(r0,r1) # define str_l(r0,r1) STQ(r1,r0,0) # define sti_l(i0,r0) _sti_l(_jit,i0,r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); # define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_l(r0,r1,r2) _stxr_l(_jit,r0,r1,r2) -static void _stxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define stxi(i0,r0,r1) stxi_l(i0,r0,r1) # define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); # define extr_c(r0,r1) _extr_c(_jit,r0,r1) -static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_c(jit_state_t*,int32_t,int32_t); # define extr_uc(r0,r1) _extr_uc(_jit,r0,r1) -static void _extr_uc(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_uc(jit_state_t*,int32_t,int32_t); # define extr_s(r0,r1) _extr_s(_jit,r0,r1) -static void _extr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_s(jit_state_t*,int32_t,int32_t); # define extr_us(r0,r1) _extr_us(_jit,r0,r1) -static void _extr_us(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_us(jit_state_t*,int32_t,int32_t); # define extr_i(r0,r1) _extr_i(_jit,r0,r1) -static void _extr_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_i(jit_state_t*,int32_t,int32_t); # define extr_ui(r0,r1) _extr_ui(_jit,r0,r1) -static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_ui(jit_state_t*,int32_t,int32_t); # if __BYTE_ORDER == __LITTLE_ENDIAN -# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ul(r0,r1) _htonr_ul(_jit,r0,r1) -static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t); +# define bswapr_us(r0,r1) _bswapr_us(_jit,r0,r1) +static void _bswapr_us(jit_state_t*,int32_t,int32_t); +# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1) +static void _bswapr_ui(jit_state_t*,int32_t,int32_t); +# define bswapr_ul(r0,r1) _bswapr_ul(_jit,r0,r1) +static void _bswapr_ul(jit_state_t*,int32_t,int32_t); # else -# define htonr_us(r0,r1) extr_us(r0,r1) -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr_ul(r0,r1) movr(r0,r1) # endif # define jmpr(r0) JMP(_R31_REGNO,r0,0) # define jmpi(i0) _jmpi(_jit,i0) @@ -640,7 +640,7 @@ static void _jmpi(jit_state_t*, jit_word_t); # define jmpi_p(i0) _jmpi_p(_jit,i0) static jit_word_t _jmpi_p(jit_state_t*, jit_word_t); #define callr(r0) _callr(_jit,r0) -static void _callr(jit_state_t*, jit_int32_t); +static void _callr(jit_state_t*, int32_t); # define calli(i0) _calli(_jit,i0) static void _calli(jit_state_t*, jit_word_t); # define calli_p(i0) _calli_p(_jit,i0) @@ -650,9 +650,9 @@ static void _prolog(jit_state_t*,jit_node_t*); # define epilog(node) _epilog(_jit,node) static void _epilog(jit_state_t*,jit_node_t*); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); # define patch_at(jump,label) _patch_at(_jit,jump,label) static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #endif @@ -719,7 +719,7 @@ _Opi(jit_state_t *_jit, int o, int ra, unsigned int i, unsigned int f, int rc) } static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { for (; i0 > 0; i0 -= 4) NOP(); @@ -727,17 +727,17 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) MOV(r1, r0); } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; - jit_int16_t s0, s1, s2, s3; + int32_t reg; + int16_t s0, s1, s2, s3; s0 = i0; s1 = i0 >> 16; s2 = i0 >> 32; @@ -784,11 +784,11 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; - jit_int16_t s0, s1, s2, s3; + int32_t reg; + int16_t s0, s1, s2, s3; w = _jit->pc.w; reg = jit_get_reg(jit_class_gpr); s0 = i0; @@ -812,9 +812,9 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) ADDQi(r1, i0, r0); else if (_s16_p(i0)) @@ -828,9 +828,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -847,9 +847,9 @@ _addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -866,9 +866,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -878,9 +878,9 @@ _addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -890,9 +890,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) SUBQi(r1, i0, r0); else if (_s16_p(-i0)) @@ -906,9 +906,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -925,9 +925,9 @@ _subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -944,9 +944,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -956,9 +956,9 @@ _subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -968,16 +968,16 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) MULQi(r1, i0, r0); else { @@ -989,12 +989,12 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_qmulr(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +_qmulr(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t reg; + int32_t reg; /* The only invalid condition is r0 == r1 */ - jit_int32_t t2, t3, s2, s3; + int32_t t2, t3, s2, s3; if (r2 == r0 || r2 == r1) { s2 = jit_get_reg(jit_class_gpr); t2 = rn(s2); @@ -1027,10 +1027,10 @@ _qmulr(jit_state_t *_jit, jit_int32_t r0, } static void -_qmuli(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_word_t i0) +_qmuli(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qmulr(r0, r1, r2, rn(reg)); @@ -1038,10 +1038,10 @@ _qmuli(jit_state_t *_jit, jit_int32_t r0, } static void -_qmulr_u(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) +_qmulr_u(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t reg; + int32_t reg; if (r0 == r2 || r0 == r3) { reg = jit_get_reg(jit_class_gpr); mulr(rn(reg), r2, r3); @@ -1056,10 +1056,10 @@ _qmulr_u(jit_state_t *_jit, jit_int32_t r0, } static void -_qmuli_u(jit_state_t *_jit, jit_int32_t r0, - jit_int32_t r1, jit_int32_t r2, jit_word_t i0) +_qmuli_u(jit_state_t *_jit, int32_t r0, + int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) { if (r0 == r2) { reg = jit_get_reg(jit_class_gpr); @@ -1088,7 +1088,7 @@ __idiv(jit_word_t u, jit_word_t v) } static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_A0_REGNO, r1); movr(_A1_REGNO, r2); @@ -1097,7 +1097,7 @@ _divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_A0_REGNO, r1); movi(_A1_REGNO, i0); @@ -1112,7 +1112,7 @@ __udiv(jit_uword_t u, jit_uword_t v) } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_A0_REGNO, r1); movr(_A1_REGNO, r2); @@ -1121,7 +1121,7 @@ _divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_A0_REGNO, r1); movi(_A1_REGNO, i0); @@ -1136,7 +1136,7 @@ __irem(jit_word_t u, jit_word_t v) } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_A0_REGNO, r1); movr(_A1_REGNO, r2); @@ -1145,7 +1145,7 @@ _remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_A0_REGNO, r1); movi(_A1_REGNO, i0); @@ -1160,7 +1160,7 @@ __urem(jit_uword_t u, jit_uword_t v) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_A0_REGNO, r1); movr(_A1_REGNO, r2); @@ -1169,7 +1169,7 @@ _remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_A0_REGNO, r1); movi(_A1_REGNO, i0); @@ -1186,7 +1186,7 @@ __idivrem(jit_word_t u, jit_word_t v, jit_word_t *rem) static void _qdivr(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { movr(_A0_REGNO, r2); movr(_A1_REGNO, r3); @@ -1198,7 +1198,7 @@ _qdivr(jit_state_t *_jit, static void _qdivi(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { movr(_A0_REGNO, r2); movi(_A1_REGNO, i0); @@ -1217,7 +1217,7 @@ __udivrem(jit_uword_t u, jit_uword_t v, jit_uword_t *rem) static void _qdivr_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { movr(_A0_REGNO, r2); movr(_A1_REGNO, r3); @@ -1229,7 +1229,7 @@ _qdivr_u(jit_state_t *_jit, static void _qdivi_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { movr(_A0_REGNO, r2); movi(_A1_REGNO, i0); @@ -1240,30 +1240,30 @@ _qdivi_u(jit_state_t *_jit, } static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 < 64); SLLi(r1, i0, r0); } static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 < 64); SRAi(r1, i0, r0); } static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 < 64); SRLi(r1, i0, r0); } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) ANDi(r1, i0, r0); else { @@ -1275,9 +1275,9 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) ORi(r1, i0, r0); else { @@ -1289,9 +1289,9 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) XORi(r1, i0, r0); else { @@ -1303,9 +1303,9 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) CMPLTi(r1, i0, r0); else { @@ -1317,9 +1317,9 @@ _lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) CMPULTi(r1, i0, r0); else { @@ -1331,9 +1331,9 @@ _lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) CMPLEi(r1, i0, r0); else { @@ -1345,9 +1345,9 @@ _lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t ni0; ni0 = -i0; if (_u8_p(i0)) @@ -1361,9 +1361,9 @@ _lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_eqi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) CMPEQi(r1, i0, r0); else { @@ -1375,9 +1375,9 @@ _eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ger(r0, r1, rn(reg)); @@ -1385,9 +1385,9 @@ _gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ger_u(r0, r1, rn(reg)); @@ -1395,9 +1395,9 @@ _gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); gtr(r0, r1, rn(reg)); @@ -1405,9 +1405,9 @@ _gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); gtr_u(r0, r1, rn(reg)); @@ -1415,16 +1415,16 @@ _gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPEQ(r1, r2, r0); CMPEQi(r0, 0, r0); } static void -_nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_nei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_u8_p(i0)) { CMPEQi(r1, i0, r0); CMPEQi(r0, 0, r0); @@ -1438,10 +1438,10 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static jit_word_t -_bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); ltr(rn(reg), r0, r1); w = _jit->pc.w; @@ -1451,10 +1451,10 @@ _bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BLT(r0, ((i0 - w) >> 2) - 1); @@ -1470,10 +1470,10 @@ _blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); ltr_u(rn(reg), r0, r1); w = _jit->pc.w; @@ -1483,10 +1483,10 @@ _bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; /* FIXME cannot optimize zero because need to return a patcheable address */ reg = jit_get_reg(jit_class_gpr|jit_class_nospill); lti_u(rn(reg), r0, i1); @@ -1497,10 +1497,10 @@ _blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); ler(rn(reg), r0, r1); w = _jit->pc.w; @@ -1510,10 +1510,10 @@ _bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BLE(r0, ((i0 - w) >> 2) - 1); @@ -1529,10 +1529,10 @@ _blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); ler_u(rn(reg), r0, r1); w = _jit->pc.w; @@ -1542,10 +1542,10 @@ _bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BEQ(r0, ((i0 - w) >> 2) - 1); @@ -1561,10 +1561,10 @@ _blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); eqr(rn(reg), r0, r1); w = _jit->pc.w; @@ -1574,10 +1574,10 @@ _beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_beqi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BEQ(r0, ((i0 - w) >> 2) - 1); @@ -1593,10 +1593,10 @@ _beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); ger(rn(reg), r0, r1); w = _jit->pc.w; @@ -1606,10 +1606,10 @@ _bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BGE(r0, ((i0 - w) >> 2) - 1); @@ -1625,10 +1625,10 @@ _bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); ger_u(rn(reg), r0, r1); w = _jit->pc.w; @@ -1638,10 +1638,10 @@ _bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; /* always true if i1 == 0 */ if (i0 == 0) { w = _jit->pc.w; @@ -1658,10 +1658,10 @@ _bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); gtr(rn(reg), r0, r1); w = _jit->pc.w; @@ -1671,10 +1671,10 @@ _bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BGT(r0, ((i0 - w) >> 2) - 1); @@ -1690,10 +1690,10 @@ _bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); gtr_u(rn(reg), r0, r1); w = _jit->pc.w; @@ -1703,10 +1703,10 @@ _bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); gti_u(rn(reg), r0, i1); w = _jit->pc.w; @@ -1716,10 +1716,10 @@ _bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); eqr(rn(reg), r0, r1); w = _jit->pc.w; @@ -1729,10 +1729,10 @@ _bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bnei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; BNE(r0, ((i0 - w) >> 2) - 1); @@ -1748,14 +1748,14 @@ _bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_baddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_baddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; - jit_int32_t t3; + int32_t t0; + int32_t t1; + int32_t t2; + int32_t t3; /* t0 = r0 + r1; overflow = r1 < 0 ? r0 < t0 : t0 < r0 */ t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr); @@ -1780,11 +1780,11 @@ _baddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_baddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_baddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = baddr(i0, r0, rn(reg), carry); @@ -1793,12 +1793,12 @@ _baddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_baddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_baddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); addr(rn(t0), r0, r1); @@ -1815,12 +1815,12 @@ _baddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_baddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_baddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); addi(rn(t0), r0, i1); @@ -1837,14 +1837,14 @@ _baddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_bsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_bsubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; - jit_int32_t t3; + int32_t t0; + int32_t t1; + int32_t t2; + int32_t t3; /* t0 = r0 - r1; overflow = 0 < r1 ? r0 < t0 : t0 < r0 */ t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr); @@ -1869,11 +1869,11 @@ _bsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_bsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_bsubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bsubr(i0, r0, rn(reg), carry); @@ -1882,12 +1882,12 @@ _bsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_bsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_bsubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); subr(rn(t0), r0, r1); @@ -1904,12 +1904,12 @@ _bsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_bsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_bsubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); subi(rn(t0), r0, i1); @@ -1926,11 +1926,11 @@ _bsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_bmxr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_bmxr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t set) { jit_word_t w; - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); andr(rn(t0), r0, r1); w = _jit->pc.w; @@ -1943,11 +1943,11 @@ _bmxr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_bmxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_bmxi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t set) { jit_word_t w; - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); andi(rn(t0), r0, i1); w = _jit->pc.w; @@ -1960,16 +1960,16 @@ _bmxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static void -_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_uc(r0, r1); extr_c(r0, r0); } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) { LDBU(r0, _R31_REGNO, _u16(i0)); extr_c(r0, r0); @@ -1983,9 +1983,9 @@ _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDBU(r0, _R31_REGNO, _u16(i0)); else { @@ -1997,16 +1997,16 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_us(r0, r1); extr_s(r0, r0); } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) { LDWU(r0, _R31_REGNO, _u16(i0)); extr_s(r0, r0); @@ -2020,9 +2020,9 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDWU(r0, _R31_REGNO, _u16(i0)); else { @@ -2034,9 +2034,9 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDL(r0, _R31_REGNO, _u16(i0)); else { @@ -2048,16 +2048,16 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_i(r0, r1); extr_ui(r0, r0); } static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) { LDL(r0, _R31_REGNO, _u16(i0)); extr_ui(r0, r0); @@ -2071,9 +2071,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDQ(r0, _R31_REGNO, _u16(i0)); else { @@ -2085,9 +2085,9 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_c(r0, rn(reg)); @@ -2095,9 +2095,9 @@ _ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) { LDBU(r0, r1, _u16(i0)); extr_c(r0, r0); @@ -2111,9 +2111,9 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_uc(r0, rn(reg)); @@ -2121,9 +2121,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDBU(r0, r1, _u16(i0)); else { @@ -2135,9 +2135,9 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_s(r0, rn(reg)); @@ -2145,9 +2145,9 @@ _ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) { LDWU(r0, r1, _u16(i0)); extr_s(r0, r0); @@ -2161,9 +2161,9 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_us(r0, rn(reg)); @@ -2171,9 +2171,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDWU(r0, r1, _u16(i0)); else { @@ -2185,9 +2185,9 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_i(r0, rn(reg)); @@ -2195,9 +2195,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDL(r0, r1, _u16(i0)); else { @@ -2209,9 +2209,9 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_ui(r0, rn(reg)); @@ -2219,9 +2219,9 @@ _ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) { LDL(r0, r1, _u16(i0)); extr_ui(r0, r0); @@ -2235,9 +2235,9 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_l(r0, rn(reg)); @@ -2245,9 +2245,9 @@ _ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) LDQ(r0, r1, _u16(i0)); else { @@ -2259,9 +2259,9 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STB(r0, _R31_REGNO, _u16(i0)); else { @@ -2273,9 +2273,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STW(r0, _R31_REGNO, _u16(i0)); else { @@ -2287,9 +2287,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STL(r0, _R31_REGNO, _u16(i0)); else { @@ -2301,9 +2301,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STQ(r0, _R31_REGNO, _u16(i0)); else { @@ -2315,9 +2315,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_c(rn(reg), r2); @@ -2325,9 +2325,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STB(r1, r0, _u16(i0)); else { @@ -2339,9 +2339,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_s(rn(reg), r2); @@ -2349,9 +2349,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STW(r1, r0, _u16(i0)); else { @@ -2363,9 +2363,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_i(rn(reg), r2); @@ -2373,9 +2373,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STL(r1, r0, _u16(i0)); else { @@ -2387,9 +2387,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_l(rn(reg), r2); @@ -2397,9 +2397,9 @@ _stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (_s16_p(i0)) STQ(r1, r0, _u16(i0)); else { @@ -2411,51 +2411,51 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 56); rshi(r0, r0, 56); } static void -_extr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_uc(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 56); rshi_u(r0, r0, 56); } static void -_extr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 48); rshi(r0, r0, 48); } static void -_extr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 48); rshi_u(r0, r0, 48); } static void -_extr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_i(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 32); rshi(r0, r0, 32); } static void -_extr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 32); rshi_u(r0, r0, 32); } static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr); EXTBLi(r1, 0, rn(t0)); EXTBLi(r1, 1, r0); @@ -2465,12 +2465,12 @@ _htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; - jit_int32_t t3; + int32_t t0; + int32_t t1; + int32_t t2; + int32_t t3; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr); t2 = jit_get_reg(jit_class_gpr); @@ -2491,11 +2491,11 @@ _htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ul(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; assert(_jitc->function != NULL); t0 = jit_get_reg(jit_class_fpr); t1 = jit_get_reg(jit_class_gpr); @@ -2531,7 +2531,7 @@ static jit_word_t _jmpi_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); w = movi_p(rn(reg), i0); jmpr(rn(reg)); @@ -2540,7 +2540,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { if (r0 != _PV_REGNO) MOV(r0, _PV_REGNO); @@ -2578,9 +2578,9 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t reg; + int32_t reg; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -2675,9 +2675,9 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { - jit_int32_t reg; + int32_t reg; /* Return jit_va_list_t in the register argument */ addi(r0, _FP_REGNO, _jitc->function->vaoff); @@ -2699,9 +2699,9 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; assert(_jitc->function->self.call & jit_call_varargs); @@ -2730,11 +2730,11 @@ static void _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { union { - jit_int32_t *i; + int32_t *i; jit_word_t w; } u; jit_word_t d; - jit_int16_t s0, s1, s2, s3; + int16_t s0, s1, s2, s3; u.w = instr; switch (_u6(u.i[0] >> 26)) { /* BLT BLE BEQ BGE */ diff --git a/libguile/lightning/lib/jit_alpha-fpu.c b/libguile/lightning/jit/alpha-fpu.c index 6cf47451e..b3d65af85 100644 --- a/libguile/lightning/lib/jit_alpha-fpu.c +++ b/libguile/lightning/jit/alpha-fpu.c @@ -300,304 +300,304 @@ static void _Opr(jit_state_t*,int,int,int,unsigned int,int); # define FNEGT(ra,rc) CPYSN(ra,ra,rc) # define movr_f(r0,r1) movr_d(r0,r1) # define movr_d(r0,r1) _movr_d(_jit,r0,r1) -static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_d(jit_state_t*,int32_t,int32_t); # define movi_f(r0,i0) _movi_f(_jit,r0,i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t*); # define movi_d(r0,i0) _movi_d(_jit,r0,i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t*); # define absr_f(r0,r1) FABS(r1,r0) # define absr_d(r0,r1) FABS(r1,r0) # define negr_f(r0,r1) FNEGS(r1,r0) # define negr_d(r0,r1) FNEGT(r1,r0) # define sqrtr_f(r0,r1) _sqrtr_f(_jit,r0,r1) -static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _sqrtr_f(jit_state_t*,int32_t,int32_t); # define sqrtr_d(r0,r1) _sqrtr_d(_jit,r0,r1) -static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _sqrtr_d(jit_state_t*,int32_t,int32_t); # define extr_f_d(r0,r1) movr_d(r0,r1) # define extr_d_f(r0,r1) movr_f(r0,r1) # define truncr_f_i(r0,r1) truncr_d_i(r0,r1) # define truncr_f_l(r0,r1) truncr_d_l(r0,r1) # define truncr_d_i(r0,r1) truncr_d_l(r0,r1) # define truncr_d_l(r0,r1) _truncr_d_l(_jit,r0,r1) -static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_l(jit_state_t*,int32_t,int32_t); # define extr_f(r0,r1) _extr_f(_jit,r0,r1) -static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_f(jit_state_t*,int32_t,int32_t); # define extr_d(r0,r1) _extr_d(_jit,r0,r1) -static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_d(jit_state_t*,int32_t,int32_t); # define addr_f(r0,r1,r2) _addr_f(_jit,r0,r1,r2) -static void _addr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addr_f(jit_state_t*,int32_t,int32_t,int32_t); # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0) -static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define addr_d(r0,r1,r2) _addr_d(_jit,r0,r1,r2) -static void _addr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addr_d(jit_state_t*,int32_t,int32_t,int32_t); # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0) -static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define subr_f(r0,r1,r2) _subr_f(_jit,r0,r1,r2) -static void _subr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subr_f(jit_state_t*,int32_t,int32_t,int32_t); # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0) -static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define subr_d(r0,r1,r2) _subr_d(_jit,r0,r1,r2) -static void _subr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subr_d(jit_state_t*,int32_t,int32_t,int32_t); # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0) -static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define rsbr_f(r0, r1, r2) subr_f(r0, r2, r1) # define rsbi_f(r0, r1, i0) _rsbi_f(_jit, r0, r1, i0) -static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define rsbr_d(r0, r1, r2) subr_d(r0, r2, r1) # define rsbi_d(r0, r1, i0) _rsbi_d(_jit, r0, r1, i0) -static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define mulr_f(r0,r1,r2) _mulr_f(_jit,r0,r1,r2) -static void _mulr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr_f(jit_state_t*,int32_t,int32_t,int32_t); # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0) -static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define mulr_d(r0,r1,r2) _mulr_d(_jit,r0,r1,r2) -static void _mulr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr_d(jit_state_t*,int32_t,int32_t,int32_t); # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0) -static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define divr_f(r0,r1,r2) _divr_f(_jit,r0,r1,r2) -static void _divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_f(jit_state_t*,int32_t,int32_t,int32_t); # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0) -static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define divr_d(r0,r1,r2) _divr_d(_jit,r0,r1,r2) -static void _divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_d(jit_state_t*,int32_t,int32_t,int32_t); # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0) -static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ltr_f(r0,r1,r2) ltr_d(r0,r1,r2) # define ltr_d(r0,r1,r2) _ltr_d(_jit,r0,r1,r2) -static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_d(jit_state_t*,int32_t,int32_t,int32_t); # define lti_f(r0,r1,i0) _lti_f(_jit,r0,r1,i0) -static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define lti_d(r0,r1,i0) _lti_d(_jit,r0,r1,i0) -static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ler_f(r0,r1,r2) ler_d(r0,r1,r2) # define ler_d(r0,r1,r2) _ler_d(_jit,r0,r1,r2) -static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_d(jit_state_t*,int32_t,int32_t,int32_t); # define lei_f(r0,r1,i0) _lei_f(_jit,r0,r1,i0) -static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define lei_d(r0,r1,i0) _lei_d(_jit,r0,r1,i0) -static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define eqr_f(r0,r1,r2) eqr_d(r0,r1,r2) # define eqr_d(r0,r1,r2) _eqr_d(_jit,r0,r1,r2) -static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define eqi_f(r0,r1,i0) _eqi_f(_jit,r0,r1,i0) -static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define eqi_d(r0,r1,i0) _eqi_d(_jit,r0,r1,i0) -static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ger_f(r0,r1,r2) ger_d(r0,r1,r2) # define ger_d(r0,r1,r2) _ger_d(_jit,r0,r1,r2) -static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_d(jit_state_t*,int32_t,int32_t,int32_t); # define gei_f(r0,r1,i0) _gei_f(_jit,r0,r1,i0) -static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define gei_d(r0,r1,i0) _gei_d(_jit,r0,r1,i0) -static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define gtr_f(r0,r1,r2) gtr_d(r0,r1,r2) # define gtr_d(r0,r1,r2) _gtr_d(_jit,r0,r1,r2) -static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define gti_f(r0,r1,i0) _gti_f(_jit,r0,r1,i0) -static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define gti_d(r0,r1,i0) _gti_d(_jit,r0,r1,i0) -static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ner_f(r0,r1,r2) ner_d(r0,r1,r2) # define ner_d(r0,r1,r2) _ner_d(_jit,r0,r1,r2) -static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner_d(jit_state_t*,int32_t,int32_t,int32_t); # define nei_f(r0,r1,i0) _nei_f(_jit,r0,r1,i0) -static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define nei_d(r0,r1,i0) _nei_d(_jit,r0,r1,i0) -static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unltr_f(r0,r1,r2) unltr_d(r0,r1,r2) # define unltr_d(r0,r1,r2) _unltr_d(_jit,r0,r1,r2) -static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unltr_d(jit_state_t*,int32_t,int32_t,int32_t); # define unlti_f(r0,r1,i0) _unlti_f(_jit,r0,r1,i0) -static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unlti_d(r0,r1,i0) _unlti_d(_jit,r0,r1,i0) -static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unler_f(r0,r1,r2) unler_d(r0,r1,r2) # define unler_d(r0,r1,r2) _unler_d(_jit,r0,r1,r2) -static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unler_d(jit_state_t*,int32_t,int32_t,int32_t); # define unlei_f(r0,r1,i0) _unlei_f(_jit,r0,r1,i0) -static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unlei_d(r0,r1,i0) _unlei_d(_jit,r0,r1,i0) -static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define uneqr_f(r0,r1,r2) uneqr_d(r0,r1,r2) # define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2) -static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0) -static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0) -static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unger_f(r0,r1,r2) unger_d(r0,r1,r2) # define unger_d(r0,r1,r2) _unger_d(_jit,r0,r1,r2) -static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unger_d(jit_state_t*,int32_t,int32_t,int32_t); # define ungei_f(r0,r1,i0) _ungei_f(_jit,r0,r1,i0) -static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ungei_d(r0,r1,i0) _ungei_d(_jit,r0,r1,i0) -static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ungtr_f(r0,r1,r2) ungtr_d(r0,r1,r2) # define ungtr_d(r0,r1,r2) _ungtr_d(_jit,r0,r1,r2) -static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ungtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ungti_f(r0,r1,i0) _ungti_f(_jit,r0,r1,i0) -static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ungti_d(r0,r1,i0) _ungti_d(_jit,r0,r1,i0) -static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ltgtr_f(r0,r1,r2) ltgtr_d(r0,r1,r2) # define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2) -static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0) -static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0) -static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ordr_f(r0,r1,r2) ordr_d(r0,r1,r2) # define ordr_d(r0,r1,r2) _ordr_d(_jit,r0,r1,r2) -static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ordi_f(r0,r1,i0) _ordi_f(_jit,r0,r1,i0) -static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ordi_d(r0,r1,i0) _ordi_d(_jit,r0,r1,i0) -static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unordr_f(r0,r1,r2) unordr_d(r0,r1,r2) # define unordr_d(r0,r1,r2) _unordr_d(_jit,r0,r1,r2) -static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define unordi_f(r0,r1,i0) _unordi_f(_jit,r0,r1,i0) -static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unordi_d(r0,r1,i0) _unordi_d(_jit,r0,r1,i0) -static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define bltr_f(i0,r0,r1) bltr_d(i0,r0,r1) # define bltr_d(i0,r0,r1) _bltr_d(_jit,i0,r0,r1) -static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define blti_f(i0,r0,i1) _blti_f(_jit,i0,r0,i1) -static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _blti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define blti_d(i0,r0,i1) _blti_d(_jit,i0,r0,i1) -static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _blti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bler_f(i0,r0,r1) bler_d(i0,r0,r1) # define bler_d(i0,r0,r1) _bler_d(_jit,i0,r0,r1) -static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define blei_f(i0,r0,i1) _blei_f(_jit,i0,r0,i1) -static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _blei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define blei_d(i0,r0,i1) _blei_d(_jit,i0,r0,i1) -static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _blei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define beqr_f(i0,r0,r1) beqr_d(i0,r0,r1) # define beqr_d(i0,r0,r1) _beqr_d(_jit,i0,r0,r1) -static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define beqi_f(i0,r0,i1) _beqi_f(_jit,i0,r0,i1) -static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _beqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define beqi_d(i0,r0,i1) _beqi_d(_jit,i0,r0,i1) -static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _beqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bger_f(i0,r0,r1) bger_d(i0,r0,r1) # define bger_d(i0,r0,r1) _bger_d(_jit,i0,r0,r1) -static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgei_f(i0,r0,i1) _bgei_f(_jit,i0,r0,i1) -static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bgei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bgei_d(i0,r0,i1) _bgei_d(_jit,i0,r0,i1) -static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bgei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bgtr_f(i0,r0,r1) bgtr_d(i0,r0,r1) # define bgtr_d(i0,r0,r1) _bgtr_d(_jit,i0,r0,r1) -static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgti_f(i0,r0,i1) _bgti_f(_jit,i0,r0,i1) -static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bgti_d(i0,r0,i1) _bgti_d(_jit,i0,r0,i1) -static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bner_f(i0,r0,r1) bner_d(i0,r0,r1) # define bner_d(i0,r0,r1) _bner_d(_jit,i0,r0,r1) -static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bnei_f(i0,r0,i1) _bnei_f(_jit,i0,r0,i1) -static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bnei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bnei_d(i0,r0,i1) _bnei_d(_jit,i0,r0,i1) -static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bnei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunltr_f(i0,r0,r1) bunltr_d(i0,r0,r1) # define bunltr_d(i0,r0,r1) _bunltr_d(_jit,i0,r0,r1) -static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlti_f(i0,r0,i1) _bunlti_f(_jit,i0,r0,i1) -static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bunlti_d(i0,r0,i1) _bunlti_d(_jit,i0,r0,i1) -static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunler_f(i0,r0,r1) bunler_d(i0,r0,r1) # define bunler_d(i0,r0,r1) _bunler_d(_jit,i0,r0,r1) -static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunler_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlei_f(i0,r0,i1) _bunlei_f(_jit,i0,r0,i1) -static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bunlei_d(i0,r0,i1) _bunlei_d(_jit,i0,r0,i1) -static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define buneqr_f(i0,r0,r1) buneqr_d(i0,r0,r1) # define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1) -static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1) -static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1) -static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunger_f(i0,r0,r1) bunger_d(i0,r0,r1) # define bunger_d(i0,r0,r1) _bunger_d(_jit,i0,r0,r1) -static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungei_f(i0,r0,i1) _bungei_f(_jit,i0,r0,i1) -static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bungei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bungei_d(i0,r0,i1) _bungei_d(_jit,i0,r0,i1) -static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bungei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bungtr_f(i0,r0,r1) bungtr_d(i0,r0,r1) # define bungtr_d(i0,r0,r1) _bungtr_d(_jit,i0,r0,r1) -static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungti_f(i0,r0,i1) _bungti_f(_jit,i0,r0,i1) -static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bungti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bungti_d(i0,r0,i1) _bungti_d(_jit,i0,r0,i1) -static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bungti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bltgtr_f(i0,r0,r1) bltgtr_d(i0,r0,r1) # define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1) -static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1) -static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1) -static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bordr_f(i0,r0,r1) bordr_d(i0,r0,r1) # define bordr_d(i0,r0,r1) _bordr_d(_jit,i0,r0,r1) -static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bordi_f(i0,r0,i1) _bordi_f(_jit,i0,r0,i1) -static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bordi_d(i0,r0,i1) _bordi_d(_jit,i0,r0,i1) -static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunordr_f(i0,r0,r1) bunordr_d(i0,r0,r1) # define bunordr_d(i0,r0,r1) _bunordr_d(_jit,i0,r0,r1) -static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunordi_f(i0,r0,i1) _bunordi_f(_jit,i0,r0,i1) -static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bunordi_d(i0,r0,i1) _bunordi_d(_jit,i0,r0,i1) -static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define ldr_f(r0,r1) LDS(r0,r1,0) # define ldi_f(r0,i0) _ldi_f(_jit,r0,i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); # define ldr_d(r0,r1) LDT(r0,r1,0) # define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); # define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2) -static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_f(r0,r1) STS(r1,r0,0) # define sti_f(i0,r0) _sti_f(_jit,i0,r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); # define str_d(r0,r1) STT(r1,r0,0) # define sti_d(i0,r0) _sti_d(_jit,i0,r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); # define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE # define fpr_opi(name, type, size) \ static void \ _##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ + int32_t r0, int32_t r1, \ jit_float##size##_t *i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_##type(rn(reg), i0); \ name##r_##type(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -605,11 +605,11 @@ _##name##i_##type(jit_state_t *_jit, \ # define fpr_bopi(name, type, size) \ static jit_word_t \ _b##name##i_##type(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, \ + jit_word_t i0, int32_t r0, \ jit_float##size##_t *i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr|jit_class_nospill);\ + int32_t reg = jit_get_reg(jit_class_fpr|jit_class_nospill);\ movi_##type(rn(reg), i1); \ word = b##name##r_##type(i0, r0, rn(reg)); \ jit_unget_reg(reg); \ @@ -621,20 +621,20 @@ _b##name##i_##type(jit_state_t *_jit, \ # define dbopi(name) fpr_bopi(name, d, 64) static void -_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) FMOV(r1, r0); } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.f = *i0; @@ -649,13 +649,13 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { jit_word_t w; jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.d = *i0; @@ -670,9 +670,9 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) } static void -_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); CVTTQ_SVC(r1, rn(reg)); TRAPB(); @@ -682,21 +682,21 @@ _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_sqrtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { SQRTS_SU(r1, r0); TRAPB(); } static void -_sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_sqrtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { SQRTT_SU(r1, r0); TRAPB(); } static void -_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi_l(-8, _FP_REGNO, r1); ldxi_d(r0, _FP_REGNO, -8); @@ -704,7 +704,7 @@ _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi_l(-8, _FP_REGNO, r1); ldxi_d(r0, _FP_REGNO, -8); @@ -712,7 +712,7 @@ _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { ADDS_SU(r1, r2, r0); TRAPB(); @@ -720,7 +720,7 @@ _addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(add) static void -_addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { ADDT_SU(r1, r2, r0); TRAPB(); @@ -728,7 +728,7 @@ _addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(add) static void -_subr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { SUBS_SU(r1, r2, r0); TRAPB(); @@ -737,7 +737,7 @@ fopi(sub) fopi(rsb) static void -_subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { SUBT_SU(r1, r2, r0); TRAPB(); @@ -746,7 +746,7 @@ dopi(sub) dopi(rsb) static void -_mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MULS_SU(r1, r2, r0); TRAPB(); @@ -754,7 +754,7 @@ _mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(mul) static void -_mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MULT_SU(r1, r2, r0); TRAPB(); @@ -762,7 +762,7 @@ _mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(mul) static void -_divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { DIVS_SU(r1, r2, r0); TRAPB(); @@ -770,7 +770,7 @@ _divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(div) static void -_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { DIVT_SU(r1, r2, r0); TRAPB(); @@ -778,9 +778,9 @@ _divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(div) static void -_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); @@ -801,9 +801,9 @@ fopi(lt); dopi(lt); static void -_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); @@ -824,9 +824,9 @@ fopi(le); dopi(le); static void -_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); @@ -847,9 +847,9 @@ fopi(eq); dopi(eq); static void -_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); @@ -870,9 +870,9 @@ fopi(ge); dopi(ge); static void -_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); @@ -893,9 +893,9 @@ fopi(gt); dopi(gt); static void -_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); @@ -916,9 +916,9 @@ fopi(ne); dopi(ne); static void -_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); @@ -939,9 +939,9 @@ fopi(unlt); dopi(unlt); static void -_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); @@ -962,9 +962,9 @@ fopi(unle); dopi(unle); static void -_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); @@ -985,9 +985,9 @@ fopi(uneq); dopi(uneq); static void -_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); @@ -1008,9 +1008,9 @@ fopi(unge); dopi(unge); static void -_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ungtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); @@ -1031,9 +1031,9 @@ fopi(ungt); dopi(ungt); static void -_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); @@ -1054,10 +1054,10 @@ fopi(ltgt); dopi(ltgt); static void -_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 0); CMPTUN_SU(r1, r2, rn(reg)); @@ -1072,10 +1072,10 @@ fopi(ord); dopi(ord); static void -_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi(r0, 1); CMPTUN_SU(r1, r2, rn(reg)); @@ -1090,9 +1090,9 @@ fopi(unord); dopi(unord); static jit_word_t -_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ @@ -1111,9 +1111,9 @@ fbopi(lt); dbopi(lt); static jit_word_t -_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ @@ -1132,9 +1132,9 @@ fbopi(le); dbopi(le); static jit_word_t -_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ @@ -1153,9 +1153,9 @@ fbopi(eq); dbopi(eq); static jit_word_t -_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ @@ -1174,9 +1174,9 @@ fbopi(ge); dbopi(ge); static jit_word_t -_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ @@ -1195,9 +1195,9 @@ fbopi(gt); dbopi(gt); static jit_word_t -_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t u, v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ @@ -1219,9 +1219,9 @@ fbopi(ne); dbopi(ne); static jit_word_t -_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t u, v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ @@ -1243,9 +1243,9 @@ fbopi(unlt); dbopi(unlt); static jit_word_t -_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunler_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t u, v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ @@ -1267,9 +1267,9 @@ fbopi(unle); dbopi(unle); static jit_word_t -_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t u, v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ @@ -1291,9 +1291,9 @@ fbopi(uneq); dbopi(uneq); static jit_word_t -_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t u, v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ @@ -1315,9 +1315,9 @@ fbopi(unge); dbopi(unge); static jit_word_t -_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bungtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; jit_word_t u, v, w; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ @@ -1339,10 +1339,10 @@ fbopi(ungt); dbopi(ungt); static jit_word_t -_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t u, v, w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ TRAPB(); @@ -1363,10 +1363,10 @@ fbopi(ltgt); dbopi(ltgt); static jit_word_t -_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord does not satisfy condition */ TRAPB(); @@ -1379,10 +1379,10 @@ fbopi(ord); dbopi(ord); static jit_word_t -_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); CMPTUN_SU(r0, r1, rn(reg)); /* unord satisfy condition */ TRAPB(); @@ -1395,7 +1395,7 @@ fbopi(unord); dbopi(unord); static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t reg; if (_s16_p(i0)) @@ -1409,7 +1409,7 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t reg; if (_s16_p(i0)) @@ -1423,7 +1423,7 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t reg; reg = jit_get_reg(jit_class_gpr); @@ -1433,7 +1433,7 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { jit_word_t reg; if (_s16_p(i0)) @@ -1447,7 +1447,7 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t reg; reg = jit_get_reg(jit_class_gpr); @@ -1457,7 +1457,7 @@ _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { jit_word_t reg; if (_s16_p(i0)) @@ -1471,7 +1471,7 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_word_t reg; if (_s16_p(i0)) @@ -1485,7 +1485,7 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_word_t reg; if (_s16_p(i0)) @@ -1499,7 +1499,7 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t reg; reg = jit_get_reg(jit_class_gpr); @@ -1509,7 +1509,7 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t reg; if (_s16_p(i0)) @@ -1523,7 +1523,7 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t reg; reg = jit_get_reg(jit_class_gpr); @@ -1533,7 +1533,7 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t reg; if (_s16_p(i0)) @@ -1547,10 +1547,10 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_word_t ge_code; - jit_int32_t rg0, rg1, rg2; + int32_t rg0, rg1, rg2; assert(_jitc->function->self.call & jit_call_varargs); diff --git a/libguile/lightning/lib/jit_alpha.c b/libguile/lightning/jit/alpha.c index a950a33d4..1f1e40634 100644 --- a/libguile/lightning/lib/jit_alpha.c +++ b/libguile/lightning/jit/alpha.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2017 Free Software Foundation, Inc. + * Copyright (C) 2014-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -25,9 +25,9 @@ # define I_DISP 0 # define F_DISP 0 #else -# define C_DISP 8 - sizeof(jit_int8_t) -# define S_DISP 8 - sizeof(jit_int16_t) -# define I_DISP 8 - sizeof(jit_int32_t) +# define C_DISP 8 - sizeof(int8_t) +# define S_DISP 8 - sizeof(int16_t) +# define I_DISP 8 - sizeof(int32_t) # define F_DISP 8 - sizeof(jit_float32_t) #endif @@ -62,14 +62,14 @@ typedef struct jit_va_list { static void _patch(jit_state_t*,jit_word_t,jit_node_t*); #define PROTO 1 -# include "jit_alpha-cpu.c" -# include "jit_alpha-fpu.c" +# include "alpha-cpu.c" +# include "alpha-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { rc(gpr) | 0x1c, "at" }, { rc(gpr) | 0x00, "v0" }, { rc(gpr) | 0x01, "t0" }, @@ -155,7 +155,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -175,7 +175,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = -8; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -194,8 +194,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function != NULL); switch (length) { @@ -213,13 +213,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function != NULL); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -246,7 +246,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); if (JIT_RET != u) @@ -266,7 +266,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); if (u != JIT_FRET) @@ -287,7 +287,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); if (u != JIT_FRET) @@ -347,9 +347,9 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { - jit_int32_t reg; + int32_t reg; jit_inc_synth_w(va_push, u); reg = jit_get_reg(jit_class_gpr); jit_ldxi(reg, u, offsetof(jit_va_list_t, base)); @@ -364,7 +364,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function != NULL); if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -382,7 +382,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function != NULL); if (jit_arg_f_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -400,7 +400,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function != NULL); if (jit_arg_f_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -415,7 +415,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -427,7 +427,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -439,7 +439,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -451,7 +451,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -463,7 +463,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -475,7 +475,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_ui, u, v); @@ -487,7 +487,7 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_l, u, v); @@ -499,7 +499,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -513,7 +513,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_arg_reg_p(v->u.w)) @@ -528,7 +528,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -540,7 +540,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -554,7 +554,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -569,7 +569,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -581,7 +581,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -595,7 +595,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -610,7 +610,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function != NULL); jit_inc_synth_w(pushargr, u); @@ -627,9 +627,9 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) } void -_jit_pushargi(jit_state_t *_jit, jit_int64_t u) +_jit_pushargi(jit_state_t *_jit, int64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function != NULL); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -648,7 +648,7 @@ _jit_pushargi(jit_state_t *_jit, jit_int64_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function != NULL); jit_inc_synth_w(pushargr_f, u); @@ -667,7 +667,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function != NULL); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -686,7 +686,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function != NULL); jit_inc_synth_w(pushargr_d, u); @@ -705,7 +705,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function != NULL); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -724,9 +724,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { @@ -746,7 +746,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function != NULL); @@ -777,7 +777,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, JIT_RET); @@ -785,7 +785,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, JIT_RET); @@ -793,7 +793,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, JIT_RET); @@ -801,7 +801,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, JIT_RET); @@ -809,7 +809,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); jit_extr_i(r0, JIT_RET); @@ -817,7 +817,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_ui, r0); jit_extr_ui(r0, JIT_RET); @@ -825,7 +825,7 @@ _jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_l, r0); if (r0 != JIT_RET) @@ -834,7 +834,7 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_f, r0); if (r0 != JIT_FRET) @@ -843,7 +843,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); if (r0 != JIT_FRET) @@ -858,16 +858,16 @@ _emit_code(jit_state_t *_jit) jit_node_t *temp; jit_word_t word; jit_word_t value; - jit_int32_t offset; + int32_t offset; struct { jit_node_t *node; - jit_uint8_t *data; + uint8_t *data; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t const_offset; - jit_int32_t patch_offset; + int32_t const_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1495,8 +1495,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_alpha-cpu.c" -# include "jit_alpha-fpu.c" +# include "alpha-cpu.c" +# include ", 2018alpha-fpu.c" #undef CODE void @@ -1505,25 +1505,25 @@ jit_flush(void *fptr, void *tptr) } void -_emit_ldxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi(rn(r0), rn(r1), i0); } void -_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi(i0, rn(r0), rn(r1)); } void -_emit_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_d(rn(r0), rn(r1), i0); } void -_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi_d(i0, rn(r0), rn(r1)); } @@ -1531,7 +1531,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_alpha.h b/libguile/lightning/jit/alpha.h index 8ccb5cc8a..8ccb5cc8a 100644 --- a/libguile/lightning/include/lightning/jit_alpha.h +++ b/libguile/lightning/jit/alpha.h diff --git a/libguile/lightning/lib/jit_arm-cpu.c b/libguile/lightning/jit/arm-cpu.c index 6f06965c3..9d44699b9 100644 --- a/libguile/lightning/lib/jit_arm-cpu.c +++ b/libguile/lightning/jit/arm-cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2017, 2019 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -836,113 +836,113 @@ static void _torl(jit_state_t*,int,int,int) maybe_unused; jit_unget_reg(_R0); \ } while (0) # define nop(i0) _nop(_jit,i0) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); # define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); # define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); # define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); # define comr(r0,r1) _comr(_jit,r0,r1) -static void _comr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _comr(jit_state_t*,int32_t,int32_t); # define negr(r0,r1) _negr(_jit,r0,r1) -static void _negr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _negr(jit_state_t*,int32_t,int32_t); # define addr(r0,r1,r2) _addr(_jit,r0,r1,r2) -static void _addr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addr(jit_state_t*,int32_t,int32_t,int32_t); # define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); # define addcr(r0,r1,r2) _addcr(_jit,r0,r1,r2) -static void _addcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addcr(jit_state_t*,int32_t,int32_t,int32_t); # define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); # define addxr(r0,r1,r2) _addxr(_jit,r0,r1,r2) -static void _addxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addxr(jit_state_t*,int32_t,int32_t,int32_t); # define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subr(r0,r1,r2) _subr(_jit,r0,r1,r2) -static void _subr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subr(jit_state_t*,int32_t,int32_t,int32_t); # define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0,r1,r2) _subcr(_jit,r0,r1,r2) -static void _subcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subcr(jit_state_t*,int32_t,int32_t,int32_t); # define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0,r1,r2) _subxr(_jit,r0,r1,r2) -static void _subxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subxr(jit_state_t*,int32_t,int32_t,int32_t); # define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); # define mulr(r0,r1,r2) _mulr(_jit,r0,r1,r2) -static void _mulr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr(jit_state_t*,int32_t,int32_t,int32_t); # define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); # define qmulr(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,1) # define qmulr_u(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,0) # define iqmulr(r0,r1,r2,r3,cc) _iqmulr(_jit,r0,r1,r2,r3,cc) -static void _iqmulr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqmulr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qmuli(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,1) # define qmuli_u(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,0) # define iqmuli(r0,r1,r2,i0,cc) _iqmuli(_jit,r0,r1,r2,i0,cc) -static void _iqmuli(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqmuli(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # define divrem(d,s,r0,r1,r2) _divrem(_jit,d,s,r0,r1,r2) -static void _divrem(jit_state_t*,int,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divrem(jit_state_t*,int,int,int32_t,int32_t,int32_t); # define divr(r0,r1,r2) _divr(_jit,r0,r1,r2) -static void _divr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr(jit_state_t*,int32_t,int32_t,int32_t); # define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); # define divr_u(r0,r1,r2) _divr_u(_jit,r0,r1,r2) -static void _divr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_u(jit_state_t*,int32_t,int32_t,int32_t); # define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define qdivr(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,1) # define qdivr_u(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,0) # define iqdivr(r0,r1,r2,r3,cc) _iqdivr(_jit,r0,r1,r2,r3,cc) -static void _iqdivr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqdivr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qdivi(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,1) # define qdivi_u(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,0) # define iqdivi(r0,r1,r2,i0,cc) _iqdivi(_jit,r0,r1,r2,i0,cc) -static void _iqdivi(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqdivi(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); # define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); # define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); # define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define andr(r0,r1,r2) _andr(_jit,r0,r1,r2) -static void _andr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _andr(jit_state_t*,int32_t,int32_t,int32_t); # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); # define orr(r0,r1,r2) _orr(_jit,r0,r1,r2) -static void _orr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _orr(jit_state_t*,int32_t,int32_t,int32_t); # define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); # define xorr(r0,r1,r2) _xorr(_jit,r0,r1,r2) -static void _xorr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _xorr(jit_state_t*,int32_t,int32_t,int32_t); # define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); # define lshr(r0,r1,r2) _lshr(_jit,r0,r1,r2) -static void _lshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _lshr(jit_state_t*,int32_t,int32_t,int32_t); # define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr(r0,r1,r2) _rshr(_jit,r0,r1,r2) -static void _rshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _rshr(jit_state_t*,int32_t,int32_t,int32_t); # define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr_u(r0,r1,r2) _rshr_u(_jit,r0,r1,r2) -static void _rshr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _rshr_u(jit_state_t*,int32_t,int32_t,int32_t); # define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define ccr(ct,cf,r0,r1,r2) _ccr(_jit,ct,cf,r0,r1,r2) -static void _ccr(jit_state_t*,int,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ccr(jit_state_t*,int,int,int32_t,int32_t,int32_t); # define cci(ct,cf,r0,r1,i0) _cci(_jit,ct,cf,r0,r1,i0) -static void _cci(jit_state_t*,int,int,jit_int32_t,jit_int32_t,jit_word_t); +static void _cci(jit_state_t*,int,int,int32_t,int32_t,jit_word_t); # define ltr(r0, r1, r2) ccr(ARM_CC_LT,ARM_CC_GE,r0,r1,r2) # define lti(r0, r1, i0) cci(ARM_CC_LT,ARM_CC_GE,r0,r1,i0) # define ltr_u(r0, r1, r2) ccr(ARM_CC_LO,ARM_CC_HS,r0,r1,r2) @@ -962,19 +962,19 @@ static void _cci(jit_state_t*,int,int,jit_int32_t,jit_int32_t,jit_word_t); # define gtr_u(r0, r1, r2) ccr(ARM_CC_HI,ARM_CC_LS,r0,r1,r2) # define gti_u(r0, r1, i0) cci(ARM_CC_HI,ARM_CC_LS,r0,r1,i0) # define ner(r0,r1,r2) _ner(_jit,r0,r1,r2) -static void _ner(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner(jit_state_t*,int32_t,int32_t,int32_t); # define nei(r0,r1,i0) _nei(_jit,r0,r1,i0) -static void _nei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _nei(jit_state_t*,int32_t,int32_t,jit_word_t); # define jmpr(r0) _jmpr(_jit,r0) -static void _jmpr(jit_state_t*,jit_int32_t); +static void _jmpr(jit_state_t*,int32_t); # define jmpi(i0) _jmpi(_jit,i0) static void _jmpi(jit_state_t*,jit_word_t); # define jmpi_p(i0, i1) _jmpi_p(_jit,i0, i1) static jit_word_t _jmpi_p(jit_state_t*,jit_word_t,jit_bool_t); # define bccr(cc,i0,r0,r1) _bccr(_jit,cc,i0,r0,r1) -static jit_word_t _bccr(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bccr(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define bcci(cc,i0,r0,i1) _bcci(_jit,cc,i0,r0,i1) -static jit_word_t _bcci(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bcci(jit_state_t*,int,jit_word_t,int32_t,jit_word_t); # define bltr(i0, r0, r1) bccr(ARM_CC_LT,i0,r0,r1) # define blti(i0, r0, i1) bcci(ARM_CC_LT,i0,r0,i1) # define bltr_u(i0, r0, r1) bccr(ARM_CC_LO,i0,r0,r1) @@ -996,9 +996,9 @@ static jit_word_t _bcci(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); # define bner(i0, r0, r1) bccr(ARM_CC_NE,i0,r0,r1) # define bnei(i0, r0, i1) bcci(ARM_CC_NE,i0,r0,i1) # define baddr(cc,i0,r0,r1) _baddr(_jit,cc,i0,r0,r1) -static jit_word_t _baddr(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _baddr(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define baddi(cc,i0,r0,r1) _baddi(_jit,cc,i0,r0,r1) -static jit_word_t _baddi(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _baddi(jit_state_t*,int,jit_word_t,int32_t,jit_word_t); # define boaddr(i0,r0,r1) baddr(ARM_CC_VS,i0,r0,r1) # define boaddi(i0,r0,i1) baddi(ARM_CC_VS,i0,r0,i1) # define boaddr_u(i0,r0,r1) baddr(ARM_CC_HS,i0,r0,r1) @@ -1008,9 +1008,9 @@ static jit_word_t _baddi(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); # define bxaddr_u(i0,r0,r1) baddr(ARM_CC_LO,i0,r0,r1) # define bxaddi_u(i0,r0,i1) baddi(ARM_CC_LO,i0,r0,i1) # define bsubr(cc,i0,r0,r1) _bsubr(_jit,cc,i0,r0,r1) -static jit_word_t _bsubr(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bsubr(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define bsubi(cc,i0,r0,r1) _bsubi(_jit,cc,i0,r0,r1) -static jit_word_t _bsubi(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bsubi(jit_state_t*,int,jit_word_t,int32_t,jit_word_t); # define bosubr(i0,r0,r1) bsubr(ARM_CC_VS,i0,r0,r1) # define bosubi(i0,r0,i1) bsubi(ARM_CC_VS,i0,r0,i1) # define bosubr_u(i0,r0,r1) bsubr(ARM_CC_LO,i0,r0,r1) @@ -1020,110 +1020,110 @@ static jit_word_t _bsubi(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); # define bxsubr_u(i0,r0,r1) bsubr(ARM_CC_HS,i0,r0,r1) # define bxsubi_u(i0,r0,i1) bsubi(ARM_CC_HS,i0,r0,i1) # define bmxr(cc,i0,r0,r1) _bmxr(_jit,cc,i0,r0,r1) -static jit_word_t _bmxr(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmxr(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define bmxi(cc,i0,r0,r1) _bmxi(_jit,cc,i0,r0,r1) -static jit_word_t _bmxi(jit_state_t*,int,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmxi(jit_state_t*,int,jit_word_t,int32_t,jit_word_t); # define bmsr(i0,r0,r1) bmxr(ARM_CC_NE,i0,r0,r1) # define bmsi(i0,r0,i1) bmxi(ARM_CC_NE,i0,r0,i1) # define bmcr(i0,r0,r1) bmxr(ARM_CC_EQ,i0,r0,r1) # define bmci(i0,r0,i1) bmxi(ARM_CC_EQ,i0,r0,i1) # define ldr_c(r0,r1) _ldr_c(_jit,r0,r1) -static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_c(jit_state_t*,int32_t,int32_t); # define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_uc(r0,r1) _ldr_uc(_jit,r0,r1) -static void _ldr_uc(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_uc(jit_state_t*,int32_t,int32_t); # define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_s(r0,r1) _ldr_s(_jit,r0,r1) -static void _ldr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_s(jit_state_t*,int32_t,int32_t); # define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldxr_s(r0,r1,r2) _ldxr_s(_jit,r0,r1,r2) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_us(r0,r1) _ldr_us(_jit,r0,r1) -static void _ldr_us(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_us(jit_state_t*,int32_t,int32_t); # define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # define ldxr_us(r0,r1,r2) _ldxr_us(_jit,r0,r1,r2) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_i(r0,r1) _ldr_i(_jit,r0,r1) -static void _ldr_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_i(jit_state_t*,int32_t,int32_t); # define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # define ldxr_i(r0,r1,r2) _ldxr_i(_jit,r0,r1,r2) -static void _ldxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_c(r0,r1) _str_c(_jit,r0,r1) -static void _str_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_c(jit_state_t*,int32_t,int32_t); # define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_c(r0,r1,i0) _stxi_c(_jit,r0,r1,i0) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define str_s(r0,r1) _str_s(_jit,r0,r1) -static void _str_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_s(jit_state_t*,int32_t,int32_t); # define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_s(r0,r1,i0) _stxi_s(_jit,r0,r1,i0) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # define str_i(r0,r1) _str_i(_jit,r0,r1) -static void _str_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_i(jit_state_t*,int32_t,int32_t); # define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxi_i(r0,r1,i0) _stxi_i(_jit,r0,r1,i0) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # if __BYTE_ORDER == __LITTLE_ENDIAN -# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +# define bswapr_us(r0,r1) _bswapr_us(_jit,r0,r1) +static void _bswapr_us(jit_state_t*,int32_t,int32_t); +# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1) +static void _bswapr_ui(jit_state_t*,int32_t,int32_t); # else -# define htonr_us(r0,r1) extr_us(r0,r1) -# define htonr(r0,r1) movr(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) +# define bswapr(r0,r1) movr(r0,r1) # endif # define extr_c(r0,r1) _extr_c(_jit,r0,r1) -static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_c(jit_state_t*,int32_t,int32_t); # define extr_uc(r0,r1) _extr_uc(_jit,r0,r1) -static void _extr_uc(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_uc(jit_state_t*,int32_t,int32_t); # define extr_s(r0,r1) _extr_s(_jit,r0,r1) -static void _extr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_s(jit_state_t*,int32_t,int32_t); # define extr_us(r0,r1) _extr_us(_jit,r0,r1) -static void _extr_us(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_us(jit_state_t*,int32_t,int32_t); # define prolog(i0) _prolog(_jit,i0) static void _prolog(jit_state_t*,jit_node_t*); # define epilog(i0) _epilog(_jit,i0) static void _epilog(jit_state_t*,jit_node_t*); # define callr(r0) _callr(_jit,r0) -static void _callr(jit_state_t*,jit_int32_t); +static void _callr(jit_state_t*,int32_t); # define calli(i0) _calli(_jit,i0) static void _calli(jit_state_t*,jit_word_t); # define calli_p(i0) _calli_p(_jit,i0) static jit_word_t _calli_p(jit_state_t*,jit_word_t); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); # define patch_at(kind,jump,label) _patch_at(_jit,kind,jump,label) -static void _patch_at(jit_state_t*,jit_int32_t,jit_word_t,jit_word_t); +static void _patch_at(jit_state_t*,int32_t,jit_word_t,jit_word_t); #endif #if CODE @@ -1406,7 +1406,7 @@ _tcb(jit_state_t *_jit, int cc, int im) jit_thumb_t thumb; assert(!(cc & 0xfffffff)); assert(cc != ARM_CC_AL && cc != ARM_CC_NV); - cc = ((jit_uint32_t)cc) >> 6; + cc = ((uint32_t)cc) >> 6; assert(!(im & (THUMB2_CC_B|cc))); thumb.i = THUMB2_CC_B|cc|im; iss(thumb.s[0], thumb.s[1]); @@ -1510,7 +1510,7 @@ _torl(jit_state_t *_jit, int o, int rn, int im) } static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { if (jit_thumb_p()) { for (; i0 > 0; i0 -= 2) @@ -1524,7 +1524,7 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) { if (jit_thumb_p()) @@ -1535,7 +1535,7 @@ _movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { int i; if (jit_thumb_p()) { @@ -1546,9 +1546,9 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) else if ((i = encode_thumb_immediate(~i0)) != -1) T2_MVNI(r0, i); else { - T2_MOVWI(r0, (jit_uint16_t)i0); + T2_MOVWI(r0, (uint16_t)i0); if (i0 & 0xffff0000) - T2_MOVTI(r0, (jit_uint16_t)((unsigned)i0 >> 16)); + T2_MOVTI(r0, (uint16_t)((unsigned)i0 >> 16)); } } else { @@ -1559,9 +1559,9 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) else if ((i = encode_arm_immediate(~i0)) != -1) MVNI(r0, i); else if (jit_armv6_p()) { - MOVWI(r0, (jit_uint16_t)(i0)); + MOVWI(r0, (uint16_t)(i0)); if ((i0 & 0xffff0000)) - MOVTI(r0, (jit_uint16_t)((unsigned)i0 >> 16)); + MOVTI(r0, (uint16_t)((unsigned)i0 >> 16)); } else load_const(0, r0, i0); @@ -1569,13 +1569,13 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; w = _jit->pc.w; if (jit_thumb_p()) { - T2_MOVWI(r0, (jit_uint16_t)(i0)); - T2_MOVTI(r0, (jit_uint16_t)((unsigned)i0 >> 16)); + T2_MOVWI(r0, (uint16_t)(i0)); + T2_MOVTI(r0, (uint16_t)((unsigned)i0 >> 16)); } else load_const(1, r0, 0); @@ -1583,7 +1583,7 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_comr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_comr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1) < 8) @@ -1596,7 +1596,7 @@ _comr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_negr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_negr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1) < 8) @@ -1609,7 +1609,7 @@ _negr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8) @@ -1624,10 +1624,10 @@ _addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1) < 8 && !(i0 & ~7)) T1_ADDI3(r0, r1, i0); @@ -1671,7 +1671,7 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { /* thumb auto set carry if not inside IT block */ @@ -1685,10 +1685,10 @@ _addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && !(i0 & ~7)) T1_ADDI3(r0, r1, i0); @@ -1728,7 +1728,7 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { /* keep setting carry because don't know last ADC */ if (jit_thumb_p()) { @@ -1743,10 +1743,10 @@ _addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; int no_set_flags; if (jit_thumb_p()) { no_set_flags = jit_no_set_flags(); @@ -1786,7 +1786,7 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8) @@ -1799,10 +1799,10 @@ _subr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1) < 8 && !(i0 & ~7)) T1_SUBI3(r0, r1, i0); @@ -1846,7 +1846,7 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { /* thumb auto set carry if not inside IT block */ @@ -1860,10 +1860,10 @@ _subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && !(i0 & ~7)) T1_SUBI3(r0, r1, i0); @@ -1903,7 +1903,7 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { /* keep setting carry because don't know last SBC */ if (jit_thumb_p()) { @@ -1918,10 +1918,10 @@ _subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; int no_set_flags; if (jit_thumb_p()) { no_set_flags = jit_no_set_flags(); @@ -1961,16 +1961,16 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (!jit_no_set_flags() && r0 == r2 && (r0|r1) < 8) T1_MUL(r0, r1); @@ -1996,9 +1996,9 @@ _mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); mulr(r0, r1, rn(reg)); @@ -2006,10 +2006,10 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (r2 == r3) { reg = jit_get_reg(jit_class_gpr); @@ -2059,10 +2059,10 @@ _iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqmulr(r0, r1, r2, rn(reg), sign); @@ -2071,7 +2071,7 @@ _iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, static void _divrem(jit_state_t *_jit, int div, int sign, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_word_t d; jit_word_t w; @@ -2101,7 +2101,7 @@ _divrem(jit_state_t *_jit, int div, int sign, } static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_armv7r_p() && jit_thumb_p()) T2_SDIV(r0, r1, r2); @@ -2110,9 +2110,9 @@ _divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr(r0, r1, rn(reg)); @@ -2120,7 +2120,7 @@ _divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_armv7r_p() && jit_thumb_p()) T2_UDIV(r0, r1, r2); @@ -2129,9 +2129,9 @@ _divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr_u(r0, r1, rn(reg)); @@ -2139,8 +2139,8 @@ _divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { jit_word_t d; jit_word_t w; @@ -2170,10 +2170,10 @@ _iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqdivr(r0, r1, r2, rn(reg), sign); @@ -2181,15 +2181,15 @@ _iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { divrem(0, 1, r0, r1, r2); } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr(r0, r1, rn(reg)); @@ -2197,15 +2197,15 @@ _remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { divrem(0, 0, r0, r1, r2); } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr_u(r0, r1,rn(reg)); @@ -2213,7 +2213,7 @@ _remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_andr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_andr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8 && (r0 == r1 || r0 == r2)) @@ -2226,10 +2226,10 @@ _andr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((i = encode_thumb_immediate(i0)) != -1) T2_ANDI(r0, r1, i); @@ -2265,7 +2265,7 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_orr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_orr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8 && (r0 == r1 || r0 == r2)) @@ -2278,10 +2278,10 @@ _orr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((i = encode_thumb_immediate(i0)) != -1) T2_ORRI(r0, r1, i); @@ -2313,7 +2313,7 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xorr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_xorr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8 && (r0 == r1 || r0 == r2)) @@ -2326,10 +2326,10 @@ _xorr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((i = encode_thumb_immediate(i0)) != -1) T2_EORI(r0, r1, i); @@ -2361,7 +2361,7 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_lshr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8 && r0 == r1) @@ -2374,7 +2374,7 @@ _lshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 <= 31); if (i0 == 0) @@ -2390,7 +2390,7 @@ _lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_rshr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8 && r0 == r1) @@ -2403,7 +2403,7 @@ _rshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 <= 31); if (i0 == 0) @@ -2419,7 +2419,7 @@ _rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_rshr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if (!jit_no_set_flags() && (r0|r1|r2) < 8 && r0 == r1) @@ -2432,7 +2432,7 @@ _rshr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 <= 31); if (i0 == 0) @@ -2449,7 +2449,7 @@ _rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) static void _ccr(jit_state_t *_jit, int ct, int cf, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { assert((ct ^ cf) >> 28 == 1); @@ -2478,10 +2478,10 @@ _ccr(jit_state_t *_jit, int ct, int cf, static void _cci(jit_state_t *_jit, int ct, int cf, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) + int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (r1 < 7 && !(i0 & 0xffffff00)) T1_CMPI(r1, i0); @@ -2527,7 +2527,7 @@ _cci(jit_state_t *_jit, int ct, int cf, } static void -_ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) ccr(ARM_CC_NE, ARM_CC_EQ, r0, r1, r2); @@ -2538,10 +2538,10 @@ _ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_nei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) cci(ARM_CC_NE, ARM_CC_EQ, r0, r1, i0); else { @@ -2564,7 +2564,7 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) +_jmpr(jit_state_t *_jit, int32_t r0) { if (jit_thumb_p()) T1_MOV(_R15_REGNO, r0); @@ -2577,7 +2577,7 @@ _jmpi(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; w = _jit->pc.w; /* if thumb and in thumb mode */ if (jit_thumb_p() && _jitc->thumb) { @@ -2611,7 +2611,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0, jit_bool_t i1) { jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; if (i1) { /* Assume jump is not longer than 23 bits if inside jit */ w = _jit->pc.w; @@ -2637,7 +2637,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0, jit_bool_t i1) } static jit_word_t -_bccr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bccr(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; jit_word_t d; @@ -2665,12 +2665,12 @@ _bccr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bcci(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bcci(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; jit_word_t d; int i; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (r0 < 7 && !(i1 & 0xffffff00)) T1_CMPI(r0, i1); @@ -2710,7 +2710,7 @@ _bcci(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_baddr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_baddr(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; jit_word_t d; @@ -2735,12 +2735,12 @@ _baddr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_baddi(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, int i1) +_baddi(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, int i1) { int i; jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (r0 < 8 && !(i1 & ~7)) T1_ADDI3(r0, r0, i1); @@ -2785,7 +2785,7 @@ _baddi(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, int i1) } static jit_word_t -_bsubr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bsubr(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; jit_word_t d; @@ -2810,12 +2810,12 @@ _bsubr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bsubi(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, int i1) +_bsubi(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, int i1) { int i; jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (r0 < 8 && !(i1 & ~7)) T1_SUBI3(r0, r0, i1); @@ -2860,11 +2860,11 @@ _bsubi(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, int i1) } static jit_word_t -_bmxr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmxr(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8) T1_TST(r0, r1); @@ -2892,12 +2892,12 @@ _bmxr(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmxi(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmxi(jit_state_t *_jit, int cc, jit_word_t i0, int32_t r0, jit_word_t i1) { int i; jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((i = encode_thumb_immediate(i1)) != -1) T2_TSTI(r0, i); @@ -2944,7 +2944,7 @@ _bmxi(jit_state_t *_jit, int cc, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static void -_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_LDRSBI(r0, r1, 0); @@ -2953,9 +2953,9 @@ _ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -2966,7 +2966,7 @@ _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -2979,9 +2979,9 @@ _ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255) T2_LDRSBI(r0, r1, i0); @@ -3025,7 +3025,7 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_uc(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_LDRBI(r0, r1, 0); @@ -3034,9 +3034,9 @@ _ldr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3047,7 +3047,7 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3060,9 +3060,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && i0 >= 0 && i0 < 0x20) T1_LDRBI(r0, r1, i0); @@ -3108,7 +3108,7 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_LDRSHI(r0, r1, 0); @@ -3117,9 +3117,9 @@ _ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3130,7 +3130,7 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3143,9 +3143,9 @@ _ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if (jit_ldrt_strt_p() && i0 >= 0 && i0 <= 255) T2_LDRSHI(r0, r1, i0); @@ -3189,7 +3189,7 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_LDRHI(r0, r1, 0); @@ -3198,9 +3198,9 @@ _ldr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3211,7 +3211,7 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3224,9 +3224,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && i0 >= 0 && !(i0 & 1) && (i0 >> 1) < 0x20) T1_LDRHI(r0, r1, i0 >> 1); @@ -3272,7 +3272,7 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_i(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_LDRI(r0, r1, 0); @@ -3281,9 +3281,9 @@ _ldr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3294,7 +3294,7 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3307,9 +3307,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && i0 >= 0 && !(i0 & 3) && (i0 >> 2) < 0x20) T1_LDRI(r0, r1, i0 >> 2); @@ -3358,7 +3358,7 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_str_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_str_c(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_STRBI(r1, r0, 0); @@ -3367,9 +3367,9 @@ _str_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3380,7 +3380,7 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3393,9 +3393,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && i0 >= 0 && i0 < 0x20) T1_STRBI(r1, r0, i0); @@ -3430,7 +3430,7 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_str_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_str_s(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_STRHI(r1, r0, 0); @@ -3439,9 +3439,9 @@ _str_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3452,7 +3452,7 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3465,9 +3465,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && i0 >= 0 && !(i0 & 1) && (i0 >> 1) < 0x20) T1_STRHI(r1, r0, i0 >> 1); @@ -3502,7 +3502,7 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_str_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_str_i(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) T2_STRI(r1, r0, 0); @@ -3511,9 +3511,9 @@ _str_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_thumb_p()) @@ -3524,7 +3524,7 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (jit_thumb_p()) { if ((r0|r1|r2) < 8) @@ -3537,9 +3537,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8 && i0 >= 0 && !(i0 & 3) && (i0 >> 2) < 0x20) T1_STRI(r1, r0, i0 >> 2); @@ -3578,9 +3578,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) # if __BYTE_ORDER == __LITTLE_ENDIAN static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; if (jit_thumb_p()) { if ((r0|r1) < 8) T1_REV(r0, r1); @@ -3607,9 +3607,9 @@ _htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) /* inline glibc htonl (without register clobber) */ static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_thumb_p()) { if ((r0|r1) < 8) T1_REV(r0, r1); @@ -3632,7 +3632,7 @@ _htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) #endif static void -_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) { if ((r0|r1) < 8) @@ -3651,7 +3651,7 @@ _extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_uc(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) { if ((r0|r1) < 8) @@ -3668,7 +3668,7 @@ _extr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) { if ((r0|r1) < 8) @@ -3687,7 +3687,7 @@ _extr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_thumb_p()) { if ((r0|r1) < 8) @@ -3706,7 +3706,7 @@ _extr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { if (jit_thumb_p()) T1_BLX(r0); @@ -3718,7 +3718,7 @@ static void _calli(jit_state_t *_jit, jit_word_t i0) { jit_word_t d; - jit_int32_t reg; + int32_t reg; d = ((i0 - _jit->pc.w) >> 2) - 2; if (!jit_exchange_p() && !jit_thumb_p() && _s24P(d)) BLI(d & 0x00ffffff); @@ -3737,7 +3737,7 @@ static jit_word_t _calli_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); w = _jit->pc.w; movi_p(rn(reg), i0); @@ -3752,9 +3752,9 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t reg; + int32_t reg; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) { if (jit_thumb_p() && !_jitc->thumb) @@ -3833,7 +3833,7 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { assert(_jitc->function->self.call & jit_call_varargs); @@ -3846,7 +3846,7 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); @@ -3859,13 +3859,13 @@ _vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) static void _patch_at(jit_state_t *_jit, - jit_int32_t kind, jit_word_t instr, jit_word_t label) + int32_t kind, jit_word_t instr, jit_word_t label) { jit_word_t d; jit_thumb_t thumb; union { - jit_int16_t *s; - jit_int32_t *i; + int16_t *s; + int32_t *i; jit_word_t w; } u; u.w = instr; diff --git a/libguile/lightning/lib/jit_arm-swf.c b/libguile/lightning/jit/arm-swf.c index 3ea2b2bb6..2b8bfa139 100644 --- a/libguile/lightning/lib/jit_arm-swf.c +++ b/libguile/lightning/jit/arm-swf.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -50,98 +50,98 @@ extern int __aeabi_fcmpun(float, float); extern int __aeabi_dcmpun(double, double); # define swf_ff(i0,r0,r1) _swf_ff(_jit,i0,r0,r1) static void -_swf_ff(jit_state_t*,float(*)(float),jit_int32_t,jit_int32_t) maybe_unused; +_swf_ff(jit_state_t*,float(*)(float),int32_t,int32_t) maybe_unused; # define swf_dd(i0,r0,r1) _swf_dd(_jit,i0,r0,r1) static void -_swf_dd(jit_state_t*,double(*)(double),jit_int32_t,jit_int32_t) maybe_unused; +_swf_dd(jit_state_t*,double(*)(double),int32_t,int32_t) maybe_unused; # define swf_fff(i0,r0,r1,r2) _swf_fff(_jit,i0,r0,r1,r2) static void _swf_fff(jit_state_t*,float(*)(float,float), - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); # define swf_ddd(i0,r0,r1,r2) _swf_ddd(_jit,i0,r0,r1,r2) static void _swf_ddd(jit_state_t*,double(*)(double,double), - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); # define swf_fff_(i0,r0,r1,i1) _swf_fff_(_jit,i0,r0,r1,i1) static void _swf_fff_(jit_state_t*,float(*)(float,float), - jit_int32_t,jit_int32_t,jit_float32_t); + int32_t,int32_t,jit_float32_t); # define swf_ddd_(i0,r0,r1,i1) _swf_ddd_(_jit,i0,r0,r1,i1) static void _swf_ddd_(jit_state_t*,double(*)(double,double), - jit_int32_t,jit_int32_t,jit_float64_t); + int32_t,int32_t,jit_float64_t); # define swf_iff(i0,r0,r1,r2) _swf_iff(_jit,i0,r0,r1,r2) static void _swf_iff(jit_state_t*,int(*)(float,float), - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); # define swf_idd(i0,r0,r1,r2) _swf_idd(_jit,i0,r0,r1,r2) static void _swf_idd(jit_state_t*,int(*)(double,double), - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); # define swf_iff_(i0,r0,r1,r2) _swf_iff_(_jit,i0,r0,r1,r2) static void _swf_iff_(jit_state_t*,int(*)(float,float), - jit_int32_t,jit_int32_t,jit_float32_t); + int32_t,int32_t,jit_float32_t); # define swf_idd_(i0,r0,r1,r2) _swf_idd_(_jit,i0,r0,r1,r2) static void _swf_idd_(jit_state_t*,int(*)(double,double), - jit_int32_t,jit_int32_t,jit_float64_t); + int32_t,int32_t,jit_float64_t); # define swf_iunff(i0,r0,r1,r2) _swf_iunff(_jit,i0,r0,r1,r2) static void _swf_iunff(jit_state_t*,int(*)(float,float), - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); # define swf_iundd(i0,r0,r1,r2) _swf_iundd(_jit,i0,r0,r1,r2) static void _swf_iundd(jit_state_t*,int(*)(double,double), - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); # define swf_iunff_(i0,r0,r1,i1) _swf_iunff_(_jit,i0,r0,r1,i1) static void _swf_iunff_(jit_state_t*,int(*)(float,float), - jit_int32_t,jit_int32_t,jit_float32_t); + int32_t,int32_t,jit_float32_t); # define swf_iundd_(i0,r0,r1,i1) _swf_iundd_(_jit,i0,r0,r1,i1) static void _swf_iundd_(jit_state_t*,int(*)(double,double), - jit_int32_t,jit_int32_t,jit_float64_t); + int32_t,int32_t,jit_float64_t); # define swf_bff(i0,cc,i1,r0,r1) _swf_bff(_jit,i0,cc,i1,r0,r1) static jit_word_t _swf_bff(jit_state_t*,int(*)(float,float),int, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); # define swf_bdd(i0,cc,i1,r0,r1) _swf_bdd(_jit,i0,cc,i1,r0,r1) static jit_word_t _swf_bdd(jit_state_t*,int(*)(double,double),int, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); # define swf_bff_(i0,cc,i1,r0,i2) _swf_bff_(_jit,i0,cc,i1,r0,i2) static jit_word_t _swf_bff_(jit_state_t*,int(*)(float,float),int, - jit_word_t,jit_int32_t,jit_float32_t); + jit_word_t,int32_t,jit_float32_t); # define swf_bdd_(i0,cc,i1,r0,i2) _swf_bdd_(_jit,i0,cc,i1,r0,i2) static jit_word_t _swf_bdd_(jit_state_t*,int(*)(double,double),int, - jit_word_t,jit_int32_t,jit_float64_t); + jit_word_t,int32_t,jit_float64_t); # define swf_bunff(eq,i0,r0,r1) _swf_bunff(_jit,eq,i0,r0,r1) static jit_word_t _swf_bunff(jit_state_t*,int, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); # define swf_bundd(eq,i0,r0,r1) _swf_bundd(_jit,eq,i0,r0,r1) static jit_word_t _swf_bundd(jit_state_t*,int, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); # define swf_bunff_(eq,i0,r0,i1) _swf_bunff_(_jit,eq,i0,r0,i1) static jit_word_t _swf_bunff_(jit_state_t*,int, - jit_word_t,jit_int32_t,jit_float32_t); + jit_word_t,int32_t,jit_float32_t); # define swf_bundd_(eq,i0,r0,i1) _swf_bundd_(_jit,eq,i0,r0,i1) static jit_word_t _swf_bundd_(jit_state_t*,int, - jit_word_t,jit_int32_t,jit_float64_t); + jit_word_t,int32_t,jit_float64_t); # define swf_extr_f(r0,r1) _swf_extr_f(_jit,r0,r1) -static void _swf_extr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_extr_f(jit_state_t*,int32_t,int32_t); # define swf_extr_d(r0,r1) _swf_extr_d(_jit,r0,r1) -static void _swf_extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_extr_d(jit_state_t*,int32_t,int32_t); # define swf_extr_d_f(r0,r1) _swf_extr_d_f(_jit,r0,r1) -static void _swf_extr_d_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_extr_d_f(jit_state_t*,int32_t,int32_t); # define swf_extr_f_d(r0,r1) _swf_extr_f_d(_jit,r0,r1) -static void _swf_extr_f_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_extr_f_d(jit_state_t*,int32_t,int32_t); # define swf_truncr_f_i(r0,r1) _swf_truncr_f_i(_jit,r0,r1) -static void _swf_truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_truncr_f_i(jit_state_t*,int32_t,int32_t); # define swf_truncr_d_i(r0,r1) _swf_truncr_d_i(_jit,r0,r1) -static void _swf_truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_truncr_d_i(jit_state_t*,int32_t,int32_t); # define swf_movr_f(r0,r1) _swf_movr_f(_jit,r0,r1) -static void _swf_movr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_movr_f(jit_state_t*,int32_t,int32_t); # define swf_movr_d(r0,r1) _swf_movr_d(_jit,r0,r1) -static void _swf_movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_movr_d(jit_state_t*,int32_t,int32_t); # define swf_movi_f(r0,i0) _swf_movi_f(_jit,r0,i0) -static void _swf_movi_f(jit_state_t*,jit_int32_t,jit_float32_t); +static void _swf_movi_f(jit_state_t*,int32_t,jit_float32_t); # define swf_movi_d(r0,i0) _swf_movi_d(_jit,r0,i0) -static void _swf_movi_d(jit_state_t*,jit_int32_t,jit_float64_t); +static void _swf_movi_d(jit_state_t*,int32_t,jit_float64_t); # define swf_absr_f(r0,r1) _swf_absr_f(_jit,r0,r1) -static void _swf_absr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_absr_f(jit_state_t*,int32_t,int32_t); # define swf_absr_d(r0,r1) _swf_absr_d(_jit,r0,r1) -static void _swf_absr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_absr_d(jit_state_t*,int32_t,int32_t); # define swf_negr_f(r0,r1) _swf_negr_f(_jit,r0,r1) -static void _swf_negr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_negr_f(jit_state_t*,int32_t,int32_t); # define swf_negr_d(r0,r1) _swf_negr_d(_jit,r0,r1) -static void _swf_negr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_negr_d(jit_state_t*,int32_t,int32_t); # define swf_sqrtr_f(r0,r1) swf_ff(sqrtf,r0,r1) # define swf_sqrtr_d(r0,r1) swf_dd(sqrt,r0,r1) # define swf_addr_f(r0,r1,r2) swf_fff(__addsf3,r0,r1,r2) @@ -154,10 +154,10 @@ static void _swf_negr_d(jit_state_t*,jit_int32_t,jit_int32_t); # define swf_subi_d(r0,r1,i0) swf_ddd_(__aeabi_dsub,r0,r1,i0) # define swf_rsbr_f(r0, r1, r2) swf_subr_f(r0, r2, r1) # define swf_rsbi_f(r0, r1, i0) _swf_rsbi_f(_jit, r0, r1, i0) -static void _swf_rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _swf_rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define swf_rsbr_d(r0, r1, r2) swf_subr_d(r0, r2, r1) # define swf_rsbi_d(r0, r1, i0) _swf_rsbi_d(_jit, r0, r1, i0) -static void _swf_rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _swf_rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define swf_mulr_f(r0,r1,r2) swf_fff(__aeabi_fmul,r0,r1,r2) # define swf_muli_f(r0,r1,i0) swf_fff_(__aeabi_fmul,r0,r1,i0) # define swf_mulr_d(r0,r1,r2) swf_ddd(__aeabi_dmul,r0,r1,r2) @@ -187,13 +187,13 @@ static void _swf_rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); # define swf_gtr_d(r0,r1,r2) swf_idd(__aeabi_dcmpgt,r0,r1,r2) # define swf_gti_d(r0,r1,i0) swf_idd_(__aeabi_dcmpgt,r0,r1,i0) # define swf_ner_f(r0,r1,r2) _swf_ner_f(_jit,r0,r1,r2) -static void _swf_ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ner_f(jit_state_t*,int32_t,int32_t,int32_t); # define swf_nei_f(r0,r1,i0) _swf_nei_f(_jit,r0,r1,i0) -static void _swf_nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _swf_nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define swf_ner_d(r0,r1,r2) _swf_ner_d(_jit,r0,r1,r2) -static void _swf_ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ner_d(jit_state_t*,int32_t,int32_t,int32_t); # define swf_nei_d(r0,r1,i0) _swf_nei_d(_jit,r0,r1,i0) -static void _swf_nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _swf_nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define swf_unltr_f(r0,r1,r2) swf_iunff(__aeabi_fcmplt,r0,r1,r2) # define swf_unlti_f(r0,r1,i0) swf_iunff_(__aeabi_fcmplt,r0,r1,i0) # define swf_unltr_d(r0,r1,r2) swf_iundd(__aeabi_dcmplt,r0,r1,r2) @@ -215,21 +215,21 @@ static void _swf_nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); # define swf_ungtr_d(r0,r1,r2) swf_iundd(__aeabi_dcmpgt,r0,r1,r2) # define swf_ungti_d(r0,r1,i0) swf_iundd_(__aeabi_dcmpgt,r0,r1,i0) # define swf_ltgtr_f(r0,r1,r2) _swf_ltgtr_f(_jit,r0,r1,r2) -static void _swf_ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ltgtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define swf_ltgti_f(r0,r1,i0) _swf_ltgti_f(_jit,r0,r1,i0) -static void _swf_ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _swf_ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define swf_ltgtr_d(r0,r1,r2) _swf_ltgtr_d(_jit,r0,r1,r2) -static void _swf_ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define swf_ltgti_d(r0,r1,i0) _swf_ltgti_d(_jit,r0,r1,i0) -static void _swf_ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _swf_ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define swf_ordr_f(r0,r1,r2) _swf_ordr_f(_jit,r0,r1,r2) -static void _swf_ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ordr_f(jit_state_t*,int32_t,int32_t,int32_t); # define swf_ordi_f(r0,r1,i0) _swf_ordi_f(_jit,r0,r1,i0) -static void _swf_ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _swf_ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define swf_ordr_d(r0,r1,r2) _swf_ordr_d(_jit,r0,r1,r2) -static void _swf_ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define swf_ordi_d(r0,r1,i0) _swf_ordi_d(_jit,r0,r1,i0) -static void _swf_ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _swf_ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define swf_unordr_f(r0,r1,r2) swf_iunff(__aeabi_fcmpun,r0,r1,r2) # define swf_unordi_f(r0,r1,i0) swf_iunff_(__aeabi_fcmpun,r0,r1,i0) # define swf_unordr_d(r0,r1,r2) swf_iundd(__aeabi_dcmpun,r0,r1,r2) @@ -291,39 +291,39 @@ static void _swf_ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); # define swf_bunordr_d(i0,r0,r1) swf_bdd(__aeabi_dcmpun,ARM_CC_NE,i0,r0,r1) # define swf_bunordi_d(i0,r0,i1) swf_bdd_(__aeabi_dcmpun,ARM_CC_NE,i0,r0,i1) # define swf_ldr_f(r0,r1) _swf_ldr_f(_jit,r0,r1) -static void _swf_ldr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_ldr_f(jit_state_t*,int32_t,int32_t); # define swf_ldr_d(r0,r1) _swf_ldr_d(_jit,r0,r1) -static void _swf_ldr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_ldr_d(jit_state_t*,int32_t,int32_t); # define swf_ldi_f(r0,i0) _swf_ldi_f(_jit,r0,i0) -static void _swf_ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _swf_ldi_f(jit_state_t*,int32_t,jit_word_t); # define swf_ldi_d(r0,i0) _swf_ldi_d(_jit,r0,i0) -static void _swf_ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _swf_ldi_d(jit_state_t*,int32_t,jit_word_t); # define swf_ldxr_f(r0,r1,r2) _swf_ldxr_f(_jit,r0,r1,r2) -static void _swf_ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define swf_ldxr_d(r0,r1,r2) _swf_ldxr_d(_jit,r0,r1,r2) -static void _swf_ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define swf_ldxi_f(r0,r1,i0) _swf_ldxi_f(_jit,r0,r1,i0) -static void _swf_ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _swf_ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define swf_ldxi_d(r0,r1,i0) _swf_ldxi_d(_jit,r0,r1,i0) -static void _swf_ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _swf_ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define swf_str_f(r0,r1) _swf_str_f(_jit,r0,r1) -static void _swf_str_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_str_f(jit_state_t*,int32_t,int32_t); # define swf_str_d(r0,r1) _swf_str_d(_jit,r0,r1) -static void _swf_str_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _swf_str_d(jit_state_t*,int32_t,int32_t); # define swf_sti_f(r0,i0) _swf_sti_f(_jit,r0,i0) -static void _swf_sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _swf_sti_f(jit_state_t*,jit_word_t,int32_t); # define swf_sti_d(r0,i0) _swf_sti_d(_jit,r0,i0) -static void _swf_sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _swf_sti_d(jit_state_t*,jit_word_t,int32_t); # define swf_stxr_f(r0,r1,r2) _swf_stxr_f(_jit,r0,r1,r2) -static void _swf_stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define swf_stxr_d(r0,r1,r2) _swf_stxr_d(_jit,r0,r1,r2) -static void _swf_stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _swf_stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define swf_stxi_f(r0,r1,i0) _swf_stxi_f(_jit,r0,r1,i0) -static void _swf_stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _swf_stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define swf_stxi_d(r0,r1,i0) _swf_stxi_d(_jit,r0,r1,i0) -static void _swf_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _swf_stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define swf_vaarg_d(r0, r1) _swf_vaarg_d(_jit, r0, r1) -static void _swf_vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _swf_vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE @@ -358,7 +358,7 @@ static void _swf_vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); #define swf_call_with_get_reg(function, label) \ do { \ jit_word_t d; \ - jit_int32_t reg; \ + int32_t reg; \ if (!jit_exchange_p()) { \ if (jit_thumb_p()) \ d = (((jit_word_t)function - _jit->pc.w) >> 1) - 2; \ @@ -474,7 +474,7 @@ __aeabi_f2d(float u) return (u); } -extern int +int __aeabi_f2iz(float u) { return (u); @@ -561,7 +561,7 @@ __aeabi_dcmpun(double u, double v) static void _swf_ff(jit_state_t *_jit, float(*i0)(float), - jit_int32_t r0, jit_int32_t r1) + int32_t r0, int32_t r1) { jit_get_reg_args(); if (jit_fpr_p(r1)) @@ -578,7 +578,7 @@ _swf_ff(jit_state_t *_jit, float(*i0)(float), static void _swf_dd(jit_state_t *_jit, double (*i0)(double), - jit_int32_t r0, jit_int32_t r1) + int32_t r0, int32_t r1) { jit_get_reg_args(); if (jit_fpr_p(r1)) { @@ -611,7 +611,7 @@ _swf_dd(jit_state_t *_jit, double (*i0)(double), static void _swf_fff(jit_state_t *_jit, float (*i0)(float, float), - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_get_reg_args(); if (jit_fpr_p(r1)) @@ -632,7 +632,7 @@ _swf_fff(jit_state_t *_jit, float (*i0)(float, float), static void _swf_ddd(jit_state_t *_jit, double (*i0)(double, double), - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_get_reg_args(); if (jit_fpr_p(r1)) { @@ -677,10 +677,10 @@ _swf_ddd(jit_state_t *_jit, double (*i0)(double, double), static void _swf_fff_(jit_state_t *_jit, float (*i0)(float, float), - jit_int32_t r0, jit_int32_t r1, jit_float32_t i1) + int32_t r0, int32_t r1, jit_float32_t i1) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; jit_get_reg_args(); @@ -699,10 +699,10 @@ _swf_fff_(jit_state_t *_jit, float (*i0)(float, float), } static void -_swf_rsbi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) +_swf_rsbi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float32_t i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; jit_get_reg_args(); @@ -722,10 +722,10 @@ _swf_rsbi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) static void _swf_ddd_(jit_state_t *_jit, double (*i0)(double, double), - jit_int32_t r0, jit_int32_t r1, jit_float64_t i1) + int32_t r0, int32_t r1, jit_float64_t i1) { union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; jit_get_reg_args(); @@ -762,10 +762,10 @@ _swf_ddd_(jit_state_t *_jit, double (*i0)(double, double), } static void -_swf_rsbi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) +_swf_rsbi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float64_t i0) { union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; jit_get_reg_args(); @@ -802,7 +802,7 @@ _swf_rsbi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) static void _swf_iff(jit_state_t *_jit, int (*i0)(float, float), - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_get_reg_args(); if (jit_fpr_p(r1)) @@ -820,7 +820,7 @@ _swf_iff(jit_state_t *_jit, int (*i0)(float, float), static void _swf_idd(jit_state_t *_jit, int (*i0)(double, double), - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_get_reg_args(); if (jit_fpr_p(r1)) { @@ -854,10 +854,10 @@ _swf_idd(jit_state_t *_jit, int (*i0)(double, double), static void _swf_iff_(jit_state_t *_jit, int (*i0)(float, float), - jit_int32_t r0, jit_int32_t r1, jit_float32_t i1) + int32_t r0, int32_t r1, jit_float32_t i1) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; jit_get_reg_args(); @@ -874,10 +874,10 @@ _swf_iff_(jit_state_t *_jit, int (*i0)(float, float), static void _swf_idd_(jit_state_t *_jit, int (*i0)(double, double), - jit_int32_t r0, jit_int32_t r1, jit_float64_t i1) + int32_t r0, int32_t r1, jit_float64_t i1) { union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; jit_get_reg_args(); @@ -903,7 +903,7 @@ _swf_idd_(jit_state_t *_jit, int (*i0)(double, double), static void _swf_iunff(jit_state_t *_jit, int (*i0)(float, float), - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_word_t instr; jit_get_reg_args(); @@ -948,7 +948,7 @@ _swf_iunff(jit_state_t *_jit, int (*i0)(float, float), static void _swf_iundd(jit_state_t *_jit, int (*i0)(double, double), - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { jit_word_t instr; jit_get_reg_args(); @@ -1025,11 +1025,11 @@ _swf_iundd(jit_state_t *_jit, int (*i0)(double, double), static void _swf_iunff_(jit_state_t *_jit, int (*i0)(float, float), - jit_int32_t r0, jit_int32_t r1, jit_float32_t i1) + int32_t r0, int32_t r1, jit_float32_t i1) { jit_word_t instr; union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; jit_get_reg_args(); @@ -1069,11 +1069,11 @@ _swf_iunff_(jit_state_t *_jit, int (*i0)(float, float), static void _swf_iundd_(jit_state_t *_jit, int (*i0)(double, double), - jit_int32_t r0, jit_int32_t r1, jit_float64_t i1) + int32_t r0, int32_t r1, jit_float64_t i1) { jit_word_t instr; union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; jit_get_reg_args(); @@ -1131,7 +1131,7 @@ _swf_iundd_(jit_state_t *_jit, int (*i0)(double, double), static jit_word_t _swf_bff(jit_state_t *_jit, int (*i0)(float, float), int cc, - jit_word_t i1, jit_int32_t r0, jit_int32_t r1) + jit_word_t i1, int32_t r0, int32_t r1) { jit_word_t w, d; jit_get_reg_args(); @@ -1164,7 +1164,7 @@ _swf_bff(jit_state_t *_jit, int (*i0)(float, float), int cc, static jit_word_t _swf_bdd(jit_state_t *_jit, int (*i0)(double, double), int cc, - jit_word_t i1, jit_int32_t r0, jit_int32_t r1) + jit_word_t i1, int32_t r0, int32_t r1) { jit_word_t w, d; jit_get_reg_args(); @@ -1213,10 +1213,10 @@ _swf_bdd(jit_state_t *_jit, int (*i0)(double, double), int cc, static jit_word_t _swf_bff_(jit_state_t *_jit, int (*i0)(float, float), int cc, - jit_word_t i1, jit_int32_t r0, jit_float32_t i2) + jit_word_t i1, int32_t r0, jit_float32_t i2) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; jit_word_t w, d; @@ -1248,11 +1248,11 @@ _swf_bff_(jit_state_t *_jit, int (*i0)(float, float), int cc, static jit_word_t _swf_bdd_(jit_state_t *_jit, int (*i0)(double, double), int cc, - jit_word_t i1, jit_int32_t r0, jit_float64_t i2) + jit_word_t i1, int32_t r0, jit_float64_t i2) { jit_word_t w, d; union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; jit_get_reg_args(); @@ -1292,7 +1292,7 @@ _swf_bdd_(jit_state_t *_jit, int (*i0)(double, double), int cc, static jit_word_t _swf_bunff(jit_state_t *_jit, int eq, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w, d, j0, j1; jit_get_reg_args(); @@ -1362,7 +1362,7 @@ _swf_bunff(jit_state_t *_jit, int eq, static jit_word_t _swf_bundd(jit_state_t *_jit, int eq, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w, d, j0, j1; jit_get_reg_args(); @@ -1464,10 +1464,10 @@ _swf_bundd(jit_state_t *_jit, int eq, static jit_word_t _swf_bunff_(jit_state_t *_jit, int eq, - jit_word_t i0, jit_int32_t r0, jit_float32_t i1) + jit_word_t i0, int32_t r0, jit_float32_t i1) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; jit_word_t w, d, j0, j1; @@ -1533,11 +1533,11 @@ _swf_bunff_(jit_state_t *_jit, int eq, static jit_word_t _swf_bundd_(jit_state_t *_jit, int eq, - jit_word_t i0, jit_int32_t r0, jit_float64_t i1) + jit_word_t i0, int32_t r0, jit_float64_t i1) { jit_word_t w, d, j0, j1; union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; jit_get_reg_args(); @@ -1619,7 +1619,7 @@ _swf_bundd_(jit_state_t *_jit, int eq, } static void -_swf_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_get_reg_args(); movr(_R0_REGNO, r1); @@ -1632,7 +1632,7 @@ _swf_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_get_reg_args(); movr(_R0_REGNO, r1); @@ -1653,7 +1653,7 @@ _swf_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_extr_d_f(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_get_reg_args(); if (jit_fpr_p(r1)) { @@ -1677,7 +1677,7 @@ _swf_extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_extr_f_d(jit_state_t *_jit, int32_t r0, int32_t r1) { jit_get_reg_args(); if (jit_fpr_p(r1)) @@ -1701,7 +1701,7 @@ _swf_extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) { #if !NAN_TO_INT_IS_ZERO jit_word_t is_nan; @@ -1755,7 +1755,7 @@ _swf_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { #if !NAN_TO_INT_IS_ZERO jit_word_t is_nan; @@ -1819,9 +1819,9 @@ _swf_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (r0 != r1) { if (jit_fpr_p(r1)) { reg = jit_get_reg(jit_class_gpr); @@ -1840,9 +1840,9 @@ _swf_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (r0 != r1) { if (jit_fpr_p(r1)) { if (!jit_thumb_p() && jit_armv5e_p() && @@ -1887,13 +1887,13 @@ _swf_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0) +_swf_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; data.f = i0; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); @@ -1906,11 +1906,11 @@ _swf_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0) } static void -_swf_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0) +_swf_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0) { - jit_int32_t reg; + int32_t reg; union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } data; data.d = i0; @@ -1938,9 +1938,9 @@ _swf_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0) } static void -_swf_absr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_absr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { reg = jit_get_reg(jit_class_gpr); swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8); @@ -1963,9 +1963,9 @@ _swf_absr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_absr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() && r0 != r1 && (reg = jit_get_reg_pair()) != JIT_NOREG) { @@ -2010,9 +2010,9 @@ _swf_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_negr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_negr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { reg = jit_get_reg(jit_class_gpr); swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8); @@ -2035,9 +2035,9 @@ _swf_negr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_negr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() && r0 != r1 && (reg = jit_get_reg_pair()) != JIT_NOREG) { @@ -2082,93 +2082,93 @@ _swf_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ner_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { swf_iff(__aeabi_fcmpeq, r0, r1, r2); xori(r0, r0, 1); } static void -_swf_nei_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) +_swf_nei_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float32_t i0) { swf_iff_(__aeabi_fcmpeq, r0, r1, i0); xori(r0, r0, 1); } static void -_swf_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { swf_idd(__aeabi_dcmpeq, r0, r1, r2); xori(r0, r0, 1); } static void -_swf_nei_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) +_swf_nei_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float64_t i0) { swf_idd_(__aeabi_dcmpeq, r0, r1, i0); xori(r0, r0, 1); } static void -_swf_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { swf_iunff(__aeabi_fcmpeq, r0, r1, r2); xori(r0, r0, 1); } static void -_swf_ltgti_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) +_swf_ltgti_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float32_t i0) { swf_iunff_(__aeabi_fcmpeq, r0, r1, i0); xori(r0, r0, 1); } static void -_swf_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { swf_iundd(__aeabi_dcmpeq, r0, r1, r2); xori(r0, r0, 1); } static void -_swf_ltgti_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) +_swf_ltgti_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float64_t i0) { swf_iundd_(__aeabi_dcmpeq, r0, r1, i0); xori(r0, r0, 1); } static void -_swf_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { swf_iff(__aeabi_fcmpun, r0, r1, r2); xori(r0, r0, 1); } static void -_swf_ordi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) +_swf_ordi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float32_t i0) { swf_iff_(__aeabi_fcmpun, r0, r1, i0); xori(r0, r0, 1); } static void -_swf_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { swf_idd(__aeabi_dcmpun, r0, r1, r2); xori(r0, r0, 1); } static void -_swf_ordi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) +_swf_ordi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float64_t i0) { swf_idd_(__aeabi_dcmpun, r0, r1, i0); xori(r0, r0, 1); } static void -_swf_ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); ldxi_i(rn(reg), r1, 0); @@ -2180,9 +2180,9 @@ _swf_ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_ldr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { if (!jit_thumb_p() && jit_armv5e_p() && (reg = jit_get_reg_pair()) != JIT_NOREG) { @@ -2208,9 +2208,9 @@ _swf_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_swf_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); ldi_i(rn(reg), i0); @@ -2222,9 +2222,9 @@ _swf_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_swf_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_swf_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r0) && !jit_thumb_p() && jit_armv5e_p() && (rg0 = jit_get_reg_pair()) != JIT_NOREG) { movi(rn(rg0), i0); @@ -2254,9 +2254,9 @@ _swf_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_swf_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); ldxr_i(rn(reg), r1, r2); @@ -2268,9 +2268,9 @@ _swf_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_swf_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r0)) { if (!jit_thumb_p() && jit_armv5e_p() && (rg0 = jit_get_reg_pair()) != JIT_NOREG) { @@ -2304,9 +2304,9 @@ _swf_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_swf_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_swf_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); ldxi_i(rn(reg), r1, i0); @@ -2318,9 +2318,9 @@ _swf_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_swf_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_swf_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r0)) { if (!jit_thumb_p() && jit_armv5e_p() && ((i0 >= 0 && i0 <= 255) || (i0 < 0 && i0 >= -255)) && @@ -2387,9 +2387,9 @@ _swf_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_swf_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_str_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { reg = jit_get_reg(jit_class_gpr); swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8); @@ -2401,9 +2401,9 @@ _swf_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_str_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (!jit_thumb_p() && jit_armv5e_p() && (reg = jit_get_reg_pair()) != JIT_NOREG) { @@ -2431,9 +2431,9 @@ _swf_str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_swf_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_swf_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); swf_ldrin(rn(reg), _FP_REGNO, swf_off(r0) + 8); @@ -2445,9 +2445,9 @@ _swf_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_swf_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_swf_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r0)) { if (!jit_thumb_p() && jit_armv5e_p() && (rg0 = jit_get_reg_pair()) != JIT_NOREG) { @@ -2484,9 +2484,9 @@ _swf_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_swf_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r2)) { reg = jit_get_reg(jit_class_gpr); swf_ldrin(rn(reg), _FP_REGNO, swf_off(r2) + 8); @@ -2498,9 +2498,9 @@ _swf_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_swf_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_swf_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r2)) { if (!jit_thumb_p() && jit_armv5e_p() && (rg0 = jit_get_reg_pair()) != JIT_NOREG) { @@ -2534,9 +2534,9 @@ _swf_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_swf_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_swf_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { reg = jit_get_reg(jit_class_gpr); swf_ldrin(rn(reg), _FP_REGNO, swf_off(r1) + 8); @@ -2548,9 +2548,9 @@ _swf_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_swf_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_swf_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r1)) { if (!jit_thumb_p() && jit_armv5e_p() && ((i0 >= 0 && i0 <= 255) || (i0 < 0 && i0 >= -255)) && @@ -2618,9 +2618,9 @@ _swf_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_swf_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_swf_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function->self.call & jit_call_varargs); diff --git a/libguile/lightning/lib/jit_arm-vfp.c b/libguile/lightning/jit/arm-vfp.c index 2964ef42e..d17a77844 100644 --- a/libguile/lightning/lib/jit_arm-vfp.c +++ b/libguile/lightning/jit/arm-vfp.c @@ -467,25 +467,25 @@ static void _cc_vorsl(jit_state_t*,int,int,int,int,int); # define CC_VSTR_F64(cc,r0,r1,i0) cc_vldst(cc,ARM_VSTR|ARM_V_F64|ARM_P,r0,r1,i0) # define VSTR_F64(r0,r1,i0) CC_VSTR_F64(ARM_CC_AL,r0,r1,i0) # define vfp_movr_f(r0,r1) _vfp_movr_f(_jit,r0,r1) -static void _vfp_movr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_movr_f(jit_state_t*,int32_t,int32_t); # define vfp_movr_d(r0,r1) _vfp_movr_d(_jit,r0,r1) -static void _vfp_movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_movr_d(jit_state_t*,int32_t,int32_t); # define vfp_movi_f(r0,i0) _vfp_movi_f(_jit,r0,i0) -static void _vfp_movi_f(jit_state_t*,jit_int32_t,jit_float32_t); +static void _vfp_movi_f(jit_state_t*,int32_t,jit_float32_t); # define vfp_movi_d(r0,i0) _vfp_movi_d(_jit,r0,i0) -static void _vfp_movi_d(jit_state_t*,jit_int32_t,jit_float64_t); +static void _vfp_movi_d(jit_state_t*,int32_t,jit_float64_t); # define vfp_extr_f(r0,r1) _vfp_extr_f(_jit,r0,r1) -static void _vfp_extr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_extr_f(jit_state_t*,int32_t,int32_t); # define vfp_extr_d(r0,r1) _vfp_extr_d(_jit,r0,r1) -static void _vfp_extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_extr_d(jit_state_t*,int32_t,int32_t); # define vfp_extr_d_f(r0,r1) _vfp_extr_d_f(_jit,r0,r1) -static void _vfp_extr_d_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_extr_d_f(jit_state_t*,int32_t,int32_t); # define vfp_extr_f_d(r0,r1) _vfp_extr_f_d(_jit,r0,r1) -static void _vfp_extr_f_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_extr_f_d(jit_state_t*,int32_t,int32_t); # define vfp_truncr_f_i(r0,r1) _vfp_truncr_f_i(_jit,r0,r1) -static void _vfp_truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_truncr_f_i(jit_state_t*,int32_t,int32_t); # define vfp_truncr_d_i(r0,r1) _vfp_truncr_d_i(_jit,r0,r1) -static void _vfp_truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_truncr_d_i(jit_state_t*,int32_t,int32_t); # define vfp_absr_f(r0,r1) VABS_F32(r0,r1) # define vfp_absr_d(r0,r1) VABS_F64(r0,r1) # define vfp_negr_f(r0,r1) VNEG_F32(r0,r1) @@ -494,318 +494,318 @@ static void _vfp_truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); # define vfp_sqrtr_d(r0,r1) VSQRT_F64(r0,r1) # define vfp_addr_f(r0,r1,r2) VADD_F32(r0,r1,r2) # define vfp_addi_f(r0,r1,i0) _vfp_addi_f(_jit,r0,r1,i0) -static void _vfp_addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_addr_d(r0,r1,r2) VADD_F64(r0,r1,r2) # define vfp_addi_d(r0,r1,i0) _vfp_addi_d(_jit,r0,r1,i0) -static void _vfp_addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_subr_f(r0,r1,r2) VSUB_F32(r0,r1,r2) # define vfp_subi_f(r0,r1,i0) _vfp_subi_f(_jit,r0,r1,i0) -static void _vfp_subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_subr_d(r0,r1,r2) VSUB_F64(r0,r1,r2) # define vfp_subi_d(r0,r1,i0) _vfp_subi_d(_jit,r0,r1,i0) -static void _vfp_subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_rsbr_f(r0,r1,r2) vfp_subr_f(r0,r2,r1) # define vfp_rsbi_f(r0,r1,i0) _vfp_rsbi_f(_jit,r0,r1,i0) -static void _vfp_rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_rsbr_d(r0,r1,r2) vfp_subr_d(r0,r2,r1) # define vfp_rsbi_d(r0,r1,i0) _vfp_rsbi_d(_jit,r0,r1,i0) -static void _vfp_rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_mulr_f(r0,r1,r2) VMUL_F32(r0,r1,r2) # define vfp_muli_f(r0,r1,i0) _vfp_muli_f(_jit,r0,r1,i0) -static void _vfp_muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_mulr_d(r0,r1,r2) VMUL_F64(r0,r1,r2) # define vfp_muli_d(r0,r1,i0) _vfp_muli_d(_jit,r0,r1,i0) -static void _vfp_muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_divr_f(r0,r1,r2) VDIV_F32(r0,r1,r2) # define vfp_divi_f(r0,r1,i0) _vfp_divi_f(_jit,r0,r1,i0) -static void _vfp_divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_divr_d(r0,r1,r2) VDIV_F64(r0,r1,r2) # define vfp_divi_d(r0,r1,i0) _vfp_divi_d(_jit,r0,r1,i0) -static void _vfp_divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_cmp_f(r0,r1) _vfp_cmp_f(_jit,r0,r1) -static void _vfp_cmp_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_cmp_f(jit_state_t*,int32_t,int32_t); # define vfp_cmp_d(r0,r1) _vfp_cmp_d(_jit,r0,r1) -static void _vfp_cmp_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _vfp_cmp_d(jit_state_t*,int32_t,int32_t); # define vcmp01_x(c0,c1,r0) _vcmp01_x(_jit,c0,c1,r0) -static void _vcmp01_x(jit_state_t*,int,int,jit_int32_t); +static void _vcmp01_x(jit_state_t*,int,int,int32_t); # define vcmp01_f(c0,c1,r0,r1,r2) _vcmp01_f(_jit,c0,c1,r0,r1,r2) -static void _vcmp01_f(jit_state_t*,int,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vcmp01_f(jit_state_t*,int,int,int32_t,int32_t,int32_t); # define vcmp01_d(c0,c1,r0,r1,r2) _vcmp01_d(_jit,c0,c1,r0,r1,r2) -static void _vcmp01_d(jit_state_t*,int,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vcmp01_d(jit_state_t*,int,int,int32_t,int32_t,int32_t); # define vfp_ltr_f(r0,r1,r2) vcmp01_f(ARM_CC_PL,ARM_CC_MI,r0,r1,r2) # define vfp_lti_f(r0,r1,i0) _vfp_lti_f(_jit,r0,r1,i0) -static void _vfp_lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ltr_d(r0,r1,r2) vcmp01_d(ARM_CC_PL,ARM_CC_MI,r0,r1,r2) # define vfp_lti_d(r0,r1,i0) _vfp_lti_d(_jit,r0,r1,i0) -static void _vfp_lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_ler_f(r0,r1,r2) vcmp01_f(ARM_CC_HS,ARM_CC_LS,r0,r1,r2) # define vfp_lei_f(r0,r1,i0) _vfp_lei_f(_jit,r0,r1,i0) -static void _vfp_lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ler_d(r0,r1,r2) vcmp01_d(ARM_CC_HS,ARM_CC_LS,r0,r1,r2) # define vfp_lei_d(r0,r1,i0) _vfp_lei_d(_jit,r0,r1,i0) -static void _vfp_lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_eqr_f(r0,r1,r2) vcmp01_f(ARM_CC_NE,ARM_CC_EQ,r0,r1,r2) # define vfp_eqi_f(r0,r1,i0) _vfp_eqi_f(_jit,r0,r1,i0) -static void _vfp_eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_eqr_d(r0,r1,r2) vcmp01_d(ARM_CC_NE,ARM_CC_EQ,r0,r1,r2) # define vfp_eqi_d(r0,r1,i0) _vfp_eqi_d(_jit,r0,r1,i0) -static void _vfp_eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_ger_f(r0,r1,r2) vcmp01_f(ARM_CC_LT,ARM_CC_GE,r0,r1,r2) # define vfp_gei_f(r0,r1,i0) _vfp_gei_f(_jit,r0,r1,i0) -static void _vfp_gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ger_d(r0,r1,r2) vcmp01_d(ARM_CC_LT,ARM_CC_GE,r0,r1,r2) # define vfp_gei_d(r0,r1,i0) _vfp_gei_d(_jit,r0,r1,i0) -static void _vfp_gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_gtr_f(r0,r1,r2) vcmp01_f(ARM_CC_LE,ARM_CC_GT,r0,r1,r2) # define vfp_gti_f(r0,r1,i0) _vfp_gti_f(_jit,r0,r1,i0) -static void _vfp_gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_gtr_d(r0,r1,r2) vcmp01_d(ARM_CC_LE,ARM_CC_GT,r0,r1,r2) # define vfp_gti_d(r0,r1,i0) _vfp_gti_d(_jit,r0,r1,i0) -static void _vfp_gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_ner_f(r0,r1,r2) vcmp01_f(ARM_CC_EQ,ARM_CC_NE,r0,r1,r2) # define vfp_nei_f(r0,r1,i0) _vfp_nei_f(_jit,r0,r1,i0) -static void _vfp_nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ner_d(r0,r1,r2) vcmp01_d(ARM_CC_EQ,ARM_CC_NE,r0,r1,r2) # define vfp_nei_d(r0,r1,i0) _vfp_nei_d(_jit,r0,r1,i0) -static void _vfp_nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vcmp10_x(c0,r0) _vcmp10_x(_jit,c0,r0) -static void _vcmp10_x(jit_state_t*,int,jit_int32_t); +static void _vcmp10_x(jit_state_t*,int,int32_t); # define vcmp_10_f(c0,r0,r1,r2) _vcmp_10_f(_jit,c0,r0,r1,r2) -static void _vcmp_10_f(jit_state_t*,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vcmp_10_f(jit_state_t*,int,int32_t,int32_t,int32_t); # define vcmp_10_d(c0,r0,r1,r2) _vcmp_10_d(_jit,c0,r0,r1,r2) -static void _vcmp_10_d(jit_state_t*,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vcmp_10_d(jit_state_t*,int,int32_t,int32_t,int32_t); # define vfp_unltr_f(r0,r1,r2) vcmp_10_f(ARM_CC_GE,r0,r1,r2) # define vfp_unlti_f(r0,r1,i0) _vfp_unlti_f(_jit,r0,r1,i0) -static void _vfp_unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_unltr_d(r0,r1,r2) vcmp_10_d(ARM_CC_GE,r0,r1,r2) # define vfp_unlti_d(r0,r1,i0) _vfp_unlti_d(_jit,r0,r1,i0) -static void _vfp_unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_unler_f(r0,r1,r2) vcmp_10_f(ARM_CC_GT,r0,r1,r2) # define vfp_unlei_f(r0,r1,i0) _vfp_unlei_f(_jit,r0,r1,i0) -static void _vfp_unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_unler_d(r0,r1,r2) vcmp_10_d(ARM_CC_GT,r0,r1,r2) # define vfp_unlei_d(r0,r1,i0) _vfp_unlei_d(_jit,r0,r1,i0) -static void _vfp_unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_uneqr_x(r0) _vfp_uneqr_x(_jit,r0) -static void _vfp_uneqr_x(jit_state_t*,jit_int32_t); +static void _vfp_uneqr_x(jit_state_t*,int32_t); # define vfp_uneqr_f(r0,r1,r2) _vfp_uneqr_f(_jit,r0,r1,r2) -static void _vfp_uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_uneqr_f(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_uneqi_f(r0,r1,i0) _vfp_uneqi_f(_jit,r0,r1,i0) -static void _vfp_uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_uneqr_d(r0,r1,r2) _vfp_uneqr_d(_jit,r0,r1,r2) -static void _vfp_uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_uneqi_d(r0,r1,i0) _vfp_uneqi_d(_jit,r0,r1,i0) -static void _vfp_uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vcmp_01_x(c0,r0) _vcmp_01_x(_jit,c0,r0) -static void _vcmp_01_x(jit_state_t*,int,jit_int32_t); +static void _vcmp_01_x(jit_state_t*,int,int32_t); # define vcmp_01_f(c0,r0,r1,r2) _vcmp_01_f(_jit,c0,r0,r1,r2) -static void _vcmp_01_f(jit_state_t*,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vcmp_01_f(jit_state_t*,int,int32_t,int32_t,int32_t); # define vcmp_01_d(c0,r0,r1,r2) _vcmp_01_d(_jit,c0,r0,r1,r2) -static void _vcmp_01_d(jit_state_t*,int,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vcmp_01_d(jit_state_t*,int,int32_t,int32_t,int32_t); # define vfp_unger_f(r0,r1,r2) vcmp_01_f(ARM_CC_CS,r0,r1,r2) # define vfp_ungei_f(r0,r1,i0) _vfp_ungei_f(_jit,r0,r1,i0) -static void _vfp_ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_unger_d(r0,r1,r2) vcmp_01_d(ARM_CC_CS,r0,r1,r2) # define vfp_ungei_d(r0,r1,i0) _vfp_ungei_d(_jit,r0,r1,i0) -static void _vfp_ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_ungtr_f(r0,r1,r2) vcmp_01_f(ARM_CC_HI,r0,r1,r2) # define vfp_ungti_f(r0,r1,i0) _vfp_ungti_f(_jit,r0,r1,i0) -static void _vfp_ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ungtr_d(r0,r1,r2) vcmp_01_d(ARM_CC_HI,r0,r1,r2) # define vfp_ungti_d(r0,r1,i0) _vfp_ungti_d(_jit,r0,r1,i0) -static void _vfp_ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_ltgtr_x(r0) _vfp_ltgtr_x(_jit,r0) -static void _vfp_ltgtr_x(jit_state_t*,jit_int32_t); +static void _vfp_ltgtr_x(jit_state_t*,int32_t); # define vfp_ltgtr_f(r0,r1,r2) _vfp_ltgtr_f(_jit,r0,r1,r2) -static void _vfp_ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_ltgtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_ltgti_f(r0,r1,i0) _vfp_ltgti_f(_jit,r0,r1,i0) -static void _vfp_ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ltgtr_d(r0,r1,r2) _vfp_ltgtr_d(_jit,r0,r1,r2) -static void _vfp_ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_ltgti_d(r0,r1,i0) _vfp_ltgti_d(_jit,r0,r1,i0) -static void _vfp_ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_ordr_f(r0,r1,r2) _vfp_ordr_f(_jit,r0,r1,r2) -static void _vfp_ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_ordr_f(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_ordi_f(r0,r1,i0) _vfp_ordi_f(_jit,r0,r1,i0) -static void _vfp_ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_ordr_d(r0,r1,r2) _vfp_ordr_d(_jit,r0,r1,r2) -static void _vfp_ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_ordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_ordi_d(r0,r1,i0) _vfp_ordi_d(_jit,r0,r1,i0) -static void _vfp_ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vfp_unordr_f(r0,r1,r2) _vfp_unordr_f(_jit,r0,r1,r2) -static void _vfp_unordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_unordr_f(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_unordi_f(r0,r1,i0) _vfp_unordi_f(_jit,r0,r1,i0) -static void _vfp_unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t); +static void _vfp_unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t); # define vfp_unordr_d(r0,r1,r2) _vfp_unordr_d(_jit,r0,r1,r2) -static void _vfp_unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_unordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_unordi_d(r0,r1,i0) _vfp_unordi_d(_jit,r0,r1,i0) -static void _vfp_unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t); +static void _vfp_unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t); # define vbcmp_x(cc,i0) _vbcmp_x(_jit,cc,i0) static jit_word_t _vbcmp_x(jit_state_t*,int,jit_word_t); # define vbcmp_f(cc,i0,r0,r1) _vbcmp_f(_jit,cc,i0,r0,r1) static jit_word_t -_vbcmp_f(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +_vbcmp_f(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define vbcmp_x(cc,i0) _vbcmp_x(_jit,cc,i0) static jit_word_t _vbcmp_x(jit_state_t*,int,jit_word_t); # define vbcmp_d(cc,i0,r0,r1) _vbcmp_d(_jit,cc,i0,r0,r1) static jit_word_t -_vbcmp_d(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +_vbcmp_d(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define vfp_bltr_f(i0,r0,r1) vbcmp_f(ARM_CC_MI,i0,r0,r1) # define vfp_blti_f(i0,r0,i1) _vfp_blti_f(_jit,i0,r0,i1) -static jit_word_t _vfp_blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _vfp_blti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bltr_d(i0,r0,r1) vbcmp_d(ARM_CC_MI,i0,r0,r1) -static jit_word_t _vfp_blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _vfp_blti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_blti_d(i0,r0,i1) _vfp_blti_d(_jit,i0,r0,i1) # define vfp_bler_f(i0,r0,r1) vbcmp_f(ARM_CC_LS,i0,r0,r1) # define vfp_blei_f(i0,r0,i1) _vfp_blei_f(_jit,i0,r0,i1) -static jit_word_t _vfp_blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _vfp_blei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bler_d(i0,r0,r1) vbcmp_d(ARM_CC_LS,i0,r0,r1) # define vfp_blei_d(i0,r0,i1) _vfp_blei_d(_jit,i0,r0,i1) -static jit_word_t _vfp_blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _vfp_blei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_beqr_f(i0,r0,r1) vbcmp_f(ARM_CC_EQ,i0,r0,r1) # define vfp_beqi_f(i0,r0,i1) _vfp_beqi_f(_jit,i0,r0,i1) -static jit_word_t _vfp_beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _vfp_beqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_beqr_d(i0,r0,r1) vbcmp_d(ARM_CC_EQ,i0,r0,r1) # define vfp_beqi_d(i0,r0,i1) _vfp_beqi_d(_jit,i0,r0,i1) -static jit_word_t _vfp_beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _vfp_beqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bger_f(i0,r0,r1) vbcmp_f(ARM_CC_GE,i0,r0,r1) # define vfp_bgei_f(i0,r0,i1) _vfp_bgei_f(_jit,i0,r0,i1) -static jit_word_t _vfp_bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _vfp_bgei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bger_d(i0,r0,r1) vbcmp_d(ARM_CC_GE,i0,r0,r1) # define vfp_bgei_d(i0,r0,i1) _vfp_bgei_d(_jit,i0,r0,i1) -static jit_word_t _vfp_bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _vfp_bgei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bgtr_f(i0,r0,r1) vbcmp_f(ARM_CC_GT,i0,r0,r1) # define vfp_bgti_f(i0,r0,i1) _vfp_bgti_f(_jit,i0,r0,i1) -static jit_word_t _vfp_bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _vfp_bgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bgtr_d(i0,r0,r1) vbcmp_d(ARM_CC_GT,i0,r0,r1) # define vfp_bgti_d(i0,r0,i1) _vfp_bgti_d(_jit,i0,r0,i1) -static jit_word_t _vfp_bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _vfp_bgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bner_f(i0,r0,r1) vbcmp_f(ARM_CC_NE,i0,r0,r1) # define vfp_bnei_f(i0,r0,i1) _vfp_bnei_f(_jit,i0,r0,i1) -static jit_word_t _vfp_bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +static jit_word_t _vfp_bnei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bner_d(i0,r0,r1) vbcmp_d(ARM_CC_NE,i0,r0,r1) # define vfp_bnei_d(i0,r0,i1) _vfp_bnei_d(_jit,i0,r0,i1) -static jit_word_t _vfp_bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +static jit_word_t _vfp_bnei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vbncmp_x(cc,i0) _vbncmp_x(_jit,cc,i0) static jit_word_t _vbncmp_x(jit_state_t*,int,jit_word_t); # define vbncmp_f(cc,i0,r0,r1) _vbncmp_f(_jit,cc,i0,r0,r1) static jit_word_t -_vbncmp_f(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +_vbncmp_f(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define vbncmp_d(cc,i0,r0,r1) _vbncmp_d(_jit,cc,i0,r0,r1) static jit_word_t -_vbncmp_d(jit_state_t*,int,jit_word_t,jit_int32_t,jit_int32_t); +_vbncmp_d(jit_state_t*,int,jit_word_t,int32_t,int32_t); # define vfp_bunltr_f(i0,r0,r1) vbncmp_f(ARM_CC_GE,i0,r0,r1) # define vfp_bunlti_f(i0,r0,i1) _vfp_bunlti_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bunlti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bunltr_d(i0,r0,r1) vbncmp_d(ARM_CC_GE,i0,r0,r1) # define vfp_bunlti_d(i0,r0,i1) _vfp_bunlti_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bunlti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bunler_f(i0,r0,r1) vbncmp_f(ARM_CC_GT,i0,r0,r1) # define vfp_bunlei_f(i0,r0,i1) _vfp_bunlei_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bunlei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bunler_d(i0,r0,r1) vbncmp_d(ARM_CC_GT,i0,r0,r1) # define vfp_bunlei_d(i0,r0,i1) _vfp_bunlei_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bunlei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_buneqr_x(i0) _vfp_buneqr_x(_jit,i0) static jit_word_t _vfp_buneqr_x(jit_state_t*,jit_word_t); # define vfp_buneqr_f(i0,r0,r1) _vfp_buneqr_f(_jit,i0,r0,r1) static jit_word_t -_vfp_buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +_vfp_buneqr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_buneqi_f(i0,r0,i1) _vfp_buneqi_f(_jit,i0,r0,i1) static jit_word_t -_vfp_buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_buneqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_buneqr_d(i0,r0,r1) _vfp_buneqr_d(_jit,i0,r0,r1) static jit_word_t -_vfp_buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +_vfp_buneqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_buneqi_d(i0,r0,i1) _vfp_buneqi_d(_jit,i0,r0,i1) static jit_word_t -_vfp_buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_buneqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bunger_x(i0) _vfp_bunger_x(_jit,i0) static jit_word_t _vfp_bunger_x(jit_state_t*,jit_word_t); # define vfp_bunger_f(i0,r0,r1) _vfp_bunger_f(_jit,i0,r0,r1) static jit_word_t -_vfp_bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +_vfp_bunger_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_bungei_f(i0,r0,i1) _vfp_bungei_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bungei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bunger_d(i0,r0,r1) _vfp_bunger_d(_jit,i0,r0,r1) static jit_word_t -_vfp_bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +_vfp_bunger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_bungei_d(i0,r0,i1) _vfp_bungei_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bungei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bungtr_f(i0,r0,r1) vbcmp_f(ARM_CC_HI,i0,r0,r1) # define vfp_bungti_f(i0,r0,i1) _vfp_bungti_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bungti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bungtr_d(i0,r0,r1) vbcmp_d(ARM_CC_HI,i0,r0,r1) # define vfp_bungti_d(i0,r0,i1) _vfp_bungti_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bungti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bltgtr_x(i0) _vfp_bltgtr_x(_jit,i0) static jit_word_t _vfp_bltgtr_x(jit_state_t*,jit_word_t); # define vfp_bltgtr_f(i0,r0,r1) _vfp_bltgtr_f(_jit,i0,r0,r1) static jit_word_t -_vfp_bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +_vfp_bltgtr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_bltgti_f(i0,r0,i1) _vfp_bltgti_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bltgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bltgtr_d(i0,r0,r1) _vfp_bltgtr_d(_jit,i0,r0,r1) static jit_word_t -_vfp_bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +_vfp_bltgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_bltgti_d(i0,r0,i1) _vfp_bltgti_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bltgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bordr_f(i0,r0,r1) vbcmp_f(ARM_CC_VC,i0,r0,r1) # define vfp_bordi_f(i0,r0,i1) _vfp_bordi_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bordr_d(i0,r0,r1) vbcmp_d(ARM_CC_VC,i0,r0,r1) # define vfp_bordi_d(i0,r0,i1) _vfp_bordi_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_bunordr_f(i0,r0,r1) vbcmp_f(ARM_CC_VS,i0,r0,r1) # define vfp_bunordi_f(i0,r0,i1) _vfp_bunordi_f(_jit,i0,r0,i1) static jit_word_t -_vfp_bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t); +_vfp_bunordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t); # define vfp_bunordr_d(i0,r0,r1) vbcmp_d(ARM_CC_VS,i0,r0,r1) # define vfp_bunordi_d(i0,r0,i1) _vfp_bunordi_d(_jit,i0,r0,i1) static jit_word_t -_vfp_bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t); +_vfp_bunordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t); # define vfp_ldr_f(r0,r1) VLDR_F32(r0,r1,0) # define vfp_ldr_d(r0,r1) VLDR_F64(r0,r1,0) # define vfp_ldi_f(r0,i0) _vfp_ldi_f(_jit,r0,i0) -static void _vfp_ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _vfp_ldi_f(jit_state_t*,int32_t,jit_word_t); # define vfp_ldi_d(r0,i0) _vfp_ldi_d(_jit,r0,i0) -static void _vfp_ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _vfp_ldi_d(jit_state_t*,int32_t,jit_word_t); # define vfp_ldxr_f(r0,r1,r2) _vfp_ldxr_f(_jit,r0,r1,r2) -static void _vfp_ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_ldxr_d(r0,r1,r2) _vfp_ldxr_d(_jit,r0,r1,r2) -static void _vfp_ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_ldxi_f(r0,r1,i0) _vfp_ldxi_f(_jit,r0,r1,i0) -static void _vfp_ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _vfp_ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define vfp_ldxi_d(r0,r1,i0) _vfp_ldxi_d(_jit,r0,r1,i0) -static void _vfp_ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _vfp_ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define vfp_str_f(r0,r1) VSTR_F32(r1,r0,0) # define vfp_str_d(r0,r1) VSTR_F64(r1,r0,0) # define vfp_sti_f(i0,r0) _vfp_sti_f(_jit,i0,r0) -static void _vfp_sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _vfp_sti_f(jit_state_t*,jit_word_t,int32_t); # define vfp_sti_d(i0,r0) _vfp_sti_d(_jit,i0,r0) -static void _vfp_sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _vfp_sti_d(jit_state_t*,jit_word_t,int32_t); # define vfp_stxr_f(r0,r1,r2) _vfp_stxr_f(_jit,r0,r1,r2) -static void _vfp_stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_stxr_d(r0,r1,r2) _vfp_stxr_d(_jit,r0,r1,r2) -static void _vfp_stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _vfp_stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define vfp_stxi_f(i0,r0,r1) _vfp_stxi_f(_jit,i0,r0,r1) -static void _vfp_stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _vfp_stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_stxi_d(i0,r0,r1) _vfp_stxi_d(_jit,i0,r0,r1) -static void _vfp_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _vfp_stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define vfp_vaarg_d(r0, r1) _vfp_vaarg_d(_jit, r0, r1) -static void _vfp_vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vfp_vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE @@ -1205,7 +1205,7 @@ _cc_vorsl(jit_state_t *_jit, int cc, int o, int r0, int r1, int i0) } static void -_vfp_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) { if (jit_fpr_p(r1)) { @@ -1222,7 +1222,7 @@ _vfp_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) { if (jit_fpr_p(r1)) { @@ -1243,14 +1243,14 @@ _vfp_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0) +_vfp_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } u; - jit_int32_t reg; - jit_int32_t code; + int32_t reg; + int32_t code; u.f = i0; if (jit_fpr_p(r0)) { /* float arguments are packed, for others, @@ -1271,14 +1271,14 @@ _vfp_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0) } static void -_vfp_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0) +_vfp_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0) { union { - jit_int32_t i[2]; + int32_t i[2]; jit_float64_t d; } u; - jit_int32_t code; - jit_int32_t rg0, rg1; + int32_t code; + int32_t rg0, rg1; u.d = i0; if (jit_fpr_p(r0)) { if ((code = encode_vfp_double(1, 0, u.i[0], u.i[1])) != -1 || @@ -1301,9 +1301,9 @@ _vfp_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t i0) } static void -_vfp_extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_extr_d_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (jit_fpr_p(r0)) VCVT_F64_F32(r0, r1); @@ -1327,9 +1327,9 @@ _vfp_extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_extr_f_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (jit_fpr_p(r0)) VCVT_F32_F64(r0, r1); @@ -1353,9 +1353,9 @@ _vfp_extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { VMOV_V_I32(r0, r1); VCVT_F32_S32(r0, r0); @@ -1370,9 +1370,9 @@ _vfp_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { VMOV_V_I32(r0, r1); VCVT_F64_S32(r0, r0); @@ -1387,9 +1387,9 @@ _vfp_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); if (jit_fpr_p(r1)) VCVT_S32_F32(rn(reg), r1); @@ -1402,9 +1402,9 @@ _vfp_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); if (jit_fpr_p(r1)) VCVT_S32_F64(rn(reg), r1); @@ -1419,9 +1419,9 @@ _vfp_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # define fopi(name) \ static void \ _vfp_##name##i_f(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) \ + int32_t r0, int32_t r1, jit_float32_t i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ vfp_movi_f(rn(reg), i0); \ vfp_##name##r_f(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -1429,9 +1429,9 @@ _vfp_##name##i_f(jit_state_t *_jit, \ # define dopi(name) \ static void \ _vfp_##name##i_d(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) \ + int32_t r0, int32_t r1, jit_float64_t i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ vfp_movi_d(rn(reg), i0); \ vfp_##name##r_d(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -1439,10 +1439,10 @@ _vfp_##name##i_d(jit_state_t *_jit, \ # define fbopi(name) \ static jit_word_t \ _vfp_b##name##i_f(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, jit_float32_t i0) \ + int32_t r0, int32_t r1, jit_float32_t i0) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ vfp_movi_f(rn(reg), i0); \ word = vfp_b##name##r_f(r0, r1, rn(reg)); \ @@ -1452,10 +1452,10 @@ _vfp_b##name##i_f(jit_state_t *_jit, \ # define dbopi(name) \ static jit_word_t \ _vfp_b##name##i_d(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, jit_float64_t i0) \ + int32_t r0, int32_t r1, jit_float64_t i0) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ vfp_movi_d(rn(reg), i0); \ word = vfp_b##name##r_d(r0, r1, rn(reg)); \ @@ -1475,9 +1475,9 @@ fopi(div) dopi(div) static void -_vfp_cmp_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_cmp_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r0)) { if (jit_fpr_p(r1)) VCMP_F32(r0, r1); @@ -1504,9 +1504,9 @@ _vfp_cmp_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_cmp_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_cmp_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t rg0, rg1; + int32_t rg0, rg1; if (jit_fpr_p(r0)) { if (jit_fpr_p(r1)) VCMP_F64(r0, r1); @@ -1533,7 +1533,7 @@ _vfp_cmp_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_vcmp01_x(jit_state_t *_jit, int c0, int c1, jit_int32_t r0) +_vcmp01_x(jit_state_t *_jit, int c0, int c1, int32_t r0) { VMRS(_R15_REGNO); if (jit_thumb_p()) { @@ -1571,7 +1571,7 @@ _vcmp01_x(jit_state_t *_jit, int c0, int c1, jit_int32_t r0) static void _vcmp01_f(jit_state_t *_jit, int c0, int c1, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vcmp01_x(c0, c1, r0); @@ -1579,14 +1579,14 @@ _vcmp01_f(jit_state_t *_jit, int c0, int c1, static void _vcmp01_d(jit_state_t *_jit, int c0, int c1, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vcmp01_x(c0, c1, r0); } static void -_vcmp10_x(jit_state_t *_jit, int cc, jit_int32_t r0) +_vcmp10_x(jit_state_t *_jit, int cc, int32_t r0) { if (jit_thumb_p()) { if (r0 < 8) { @@ -1610,7 +1610,7 @@ _vcmp10_x(jit_state_t *_jit, int cc, jit_int32_t r0) } static void _vcmp_10_f(jit_state_t *_jit, int cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vcmp10_x(cc, r0); @@ -1618,7 +1618,7 @@ _vcmp_10_f(jit_state_t *_jit, int cc, static void _vcmp_10_d(jit_state_t *_jit, int cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vcmp10_x(cc, r0); @@ -1642,7 +1642,7 @@ fopi(unle) dopi(unle) static void -_vfp_uneqr_x(jit_state_t *_jit, jit_int32_t r0) +_vfp_uneqr_x(jit_state_t *_jit, int32_t r0) { VMRS(_R15_REGNO); if (jit_thumb_p()) { @@ -1668,7 +1668,7 @@ _vfp_uneqr_x(jit_state_t *_jit, jit_int32_t r0) } static void -_vfp_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_uneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vfp_uneqr_x(r0); @@ -1677,7 +1677,7 @@ _vfp_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(uneq) static void -_vfp_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vfp_uneqr_x(r0); @@ -1686,7 +1686,7 @@ _vfp_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(uneq) static void -_vcmp_01_x(jit_state_t *_jit, int cc, jit_int32_t r0) +_vcmp_01_x(jit_state_t *_jit, int cc, int32_t r0) { if (jit_thumb_p()) { if (r0 < 8) { @@ -1711,7 +1711,7 @@ _vcmp_01_x(jit_state_t *_jit, int cc, jit_int32_t r0) static void _vcmp_01_f(jit_state_t *_jit, int cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vcmp_01_x(cc, r0); @@ -1719,7 +1719,7 @@ _vcmp_01_f(jit_state_t *_jit, int cc, static void _vcmp_01_d(jit_state_t *_jit, int cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vcmp_01_x(cc, r0); @@ -1731,7 +1731,7 @@ fopi(ungt) dopi(ungt) static void -_vfp_ltgtr_x(jit_state_t *_jit, jit_int32_t r0) +_vfp_ltgtr_x(jit_state_t *_jit, int32_t r0) { VMRS(_R15_REGNO); if (jit_thumb_p()) { @@ -1757,7 +1757,7 @@ _vfp_ltgtr_x(jit_state_t *_jit, jit_int32_t r0) } static void -_vfp_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_ltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vfp_ltgtr_x(r0); @@ -1766,7 +1766,7 @@ _vfp_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ltgt) static void -_vfp_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vfp_ltgtr_x(r0); @@ -1775,7 +1775,7 @@ _vfp_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ltgt) static void -_vfp_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_ordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vcmp10_x(ARM_CC_VS, r0); @@ -1784,7 +1784,7 @@ _vfp_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ord) static void -_vfp_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vcmp10_x(ARM_CC_VS, r0); @@ -1793,7 +1793,7 @@ _vfp_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ord) static void -_vfp_unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_unordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_f(r1, r2); vcmp_01_x(ARM_CC_VS, r0); @@ -1802,7 +1802,7 @@ _vfp_unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(unord) static void -_vfp_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_unordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { vfp_cmp_d(r1, r2); vcmp_01_x(ARM_CC_VS, r0); @@ -1832,7 +1832,7 @@ _vbcmp_x(jit_state_t *_jit, int cc, jit_word_t i0) static jit_word_t _vbcmp_f(jit_state_t *_jit, int cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_f(r0, r1); return (vbcmp_x(cc, i0)); @@ -1840,7 +1840,7 @@ _vbcmp_f(jit_state_t *_jit, int cc, static jit_word_t _vbcmp_d(jit_state_t *_jit, int cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_d(r0, r1); return (vbcmp_x(cc, i0)); @@ -1872,7 +1872,7 @@ _vbncmp_x(jit_state_t *_jit, int cc, jit_word_t i0) static jit_word_t _vbncmp_f(jit_state_t *_jit, int cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_f(r0, r1); return (vbncmp_x(cc, i0)); @@ -1880,7 +1880,7 @@ _vbncmp_f(jit_state_t *_jit, int cc, static jit_word_t _vbncmp_d(jit_state_t *_jit, int cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_d(r0, r1); return (vbncmp_x(cc, i0)); @@ -1934,7 +1934,7 @@ _vfp_buneqr_x(jit_state_t *_jit, jit_word_t i0) } static jit_word_t -_vfp_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_buneqr_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_f(r0, r1); return (vfp_buneqr_x(i0)); @@ -1943,7 +1943,7 @@ _vfp_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) fbopi(uneq) static jit_word_t -_vfp_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_d(r0, r1); return (vfp_buneqr_x(i0)); @@ -1976,7 +1976,7 @@ _vfp_bunger_x(jit_state_t *_jit, jit_word_t i0) } static jit_word_t -_vfp_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_bunger_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_f(r0, r1); return (vfp_bunger_x(i0)); @@ -1985,7 +1985,7 @@ _vfp_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) fbopi(unge) static jit_word_t -_vfp_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_d(r0, r1); return (vfp_bunger_x(i0)); @@ -2023,7 +2023,7 @@ _vfp_bltgtr_x(jit_state_t *_jit, jit_word_t i0) } static jit_word_t -_vfp_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_bltgtr_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_f(r0, r1); return (vfp_bltgtr_x(i0)); @@ -2034,7 +2034,7 @@ dbopi(ungt) fbopi(ltgt) static jit_word_t -_vfp_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { vfp_cmp_d(r0, r1); return (vfp_bltgtr_x(i0)); @@ -2047,9 +2047,9 @@ fbopi(unord) dbopi(unord) static void -_vfp_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_vfp_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t gpr; + int32_t gpr; if (jit_fpr_p(r0)) { gpr = jit_get_reg(jit_class_gpr); movi(rn(gpr), i0); @@ -2061,9 +2061,9 @@ _vfp_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_vfp_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_vfp_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_fpr_p(r0)) @@ -2076,9 +2076,9 @@ _vfp_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_vfp_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); @@ -2090,9 +2090,9 @@ _vfp_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_vfp_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); if (jit_fpr_p(r0)) @@ -2105,9 +2105,9 @@ _vfp_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_vfp_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_vfp_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { if (i0 >= 0) { assert(!(i0 & 3)); @@ -2138,9 +2138,9 @@ _vfp_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_vfp_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_vfp_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { if (i0 >= 0) { assert(!(i0 & 3)); @@ -2176,9 +2176,9 @@ _vfp_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_vfp_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_vfp_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r0)) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -2190,9 +2190,9 @@ _vfp_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_vfp_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_vfp_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); if (jit_fpr_p(r0)) @@ -2205,9 +2205,9 @@ _vfp_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_vfp_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r2)) { reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); @@ -2219,9 +2219,9 @@ _vfp_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_vfp_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_vfp_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); if (jit_fpr_p(r2)) @@ -2234,9 +2234,9 @@ _vfp_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_vfp_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (i0 >= 0) { assert(!(i0 & 3)); @@ -2267,9 +2267,9 @@ _vfp_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_vfp_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (jit_fpr_p(r1)) { if (i0 >= 0) { assert(!(i0 & 3)); @@ -2305,9 +2305,9 @@ _vfp_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_vfp_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vfp_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function->self.call & jit_call_varargs); diff --git a/libguile/lightning/lib/jit_arm.c b/libguile/lightning/jit/arm.c index 7578865ab..ef4a3e2e7 100644 --- a/libguile/lightning/lib/jit_arm.c +++ b/libguile/lightning/jit/arm.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -50,8 +50,8 @@ * Types */ typedef union _jit_thumb_t { - jit_int32_t i; - jit_int16_t s[2]; + int32_t i; + int16_t s[2]; } jit_thumb_t; typedef jit_pointer_t jit_va_list; @@ -66,13 +66,13 @@ static jit_node_t *_jit_make_arg_f(jit_state_t*,jit_node_t*); #define jit_make_arg_d(node) _jit_make_arg_d(_jit,node) static jit_node_t *_jit_make_arg_d(jit_state_t*,jit_node_t*); #define jit_get_reg_pair() _jit_get_reg_pair(_jit) -static jit_int32_t _jit_get_reg_pair(jit_state_t*); +static int32_t _jit_get_reg_pair(jit_state_t*); #define jit_unget_reg_pair(rn) _jit_unget_reg_pair(_jit,rn) -static void _jit_unget_reg_pair(jit_state_t*,jit_int32_t); +static void _jit_unget_reg_pair(jit_state_t*,int32_t); # define must_align_p(node) _must_align_p(_jit, node) static jit_bool_t _must_align_p(jit_state_t*,jit_node_t*); #define load_const(uniq,r0,i0) _load_const(_jit,uniq,r0,i0) -static void _load_const(jit_state_t*,jit_bool_t,jit_int32_t,jit_word_t); +static void _load_const(jit_state_t*,jit_bool_t,int32_t,jit_word_t); #define flush_consts() _flush_consts(_jit) static void _flush_consts(jit_state_t*); #define invalidate_consts() _invalidate_consts(_jit) @@ -86,17 +86,17 @@ extern void __clear_cache(void *, void *); #endif #define PROTO 1 -# include "jit_rewind.c" -# include "jit_arm-cpu.c" -# include "jit_arm-swf.c" -# include "jit_arm-vfp.c" +# include "rewind.c" +# include "arm-cpu.c" +# include "arm-swf.c" +# include "arm-vfp.c" #undef PROTO /* * Initialization */ jit_cpu_t jit_cpu; -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { rc(gpr) | 0x0c, "ip" }, { rc(sav) | rc(gpr) | 0x04, "r4" }, { rc(sav) | rc(gpr) | 0x05, "r5" }, @@ -206,7 +206,7 @@ jit_get_cpu(void) void _jit_init(jit_state_t *_jit) { - jit_int32_t regno; + int32_t regno; static jit_bool_t first = 1; _jitc->reglen = jit_size(_rvs) - 1; @@ -229,7 +229,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -255,7 +255,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = 0; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -274,8 +274,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -293,13 +293,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -326,7 +326,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); if (JIT_RET != u) @@ -346,7 +346,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); if (jit_cpu.abi) { @@ -378,7 +378,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); if (jit_cpu.abi) { @@ -438,7 +438,7 @@ _jit_arg_register_p(jit_state_t *_jit, jit_node_t *u) static jit_node_t * _jit_make_arg(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t offset; + int32_t offset; if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; else { @@ -458,7 +458,7 @@ _jit_make_arg(jit_state_t *_jit, jit_node_t *node) jit_node_t * _jit_make_arg_f(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t offset; + int32_t offset; if (jit_cpu.abi && !(_jitc->function->self.call & jit_call_varargs)) { if (jit_arg_f_reg_p(_jitc->function->self.argf)) { offset = _jitc->function->self.argf++; @@ -487,7 +487,7 @@ done: jit_node_t * _jit_make_arg_d(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t offset; + int32_t offset; if (jit_cpu.abi && !(_jitc->function->self.call & jit_call_varargs)) { if (jit_arg_d_reg_p(_jitc->function->self.argf)) { if (_jitc->function->self.argf & 1) @@ -550,7 +550,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -579,7 +579,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -593,7 +593,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -607,7 +607,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -621,7 +621,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -635,7 +635,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -649,7 +649,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -665,7 +665,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_swf_p()) { @@ -686,7 +686,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -708,7 +708,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -732,7 +732,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (jit_cpu.abi) { @@ -764,7 +764,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -786,7 +786,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -810,7 +810,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (jit_cpu.abi) { @@ -842,7 +842,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr, u); @@ -861,7 +861,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -880,7 +880,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_f, u); @@ -908,7 +908,7 @@ done: void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -943,7 +943,7 @@ done: } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_d, u); @@ -979,7 +979,7 @@ done: void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -1015,9 +1015,9 @@ done: } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { regno = JIT_RA0 - regno; @@ -1034,7 +1034,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *node; assert(_jitc->function); @@ -1069,7 +1069,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, JIT_RET); @@ -1077,7 +1077,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, JIT_RET); @@ -1085,7 +1085,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, JIT_RET); @@ -1093,7 +1093,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, JIT_RET); @@ -1101,7 +1101,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); if (r0 != JIT_RET) @@ -1110,7 +1110,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_f, r0); if (jit_cpu.abi) { @@ -1123,7 +1123,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); if (jit_cpu.abi) { @@ -1141,21 +1141,21 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; - jit_uint8_t *data; + uint8_t *data; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif jit_uword_t thumb; #if DISASSEMBLER - jit_int32_t info_offset; + int32_t info_offset; #endif - jit_int32_t const_offset; - jit_int32_t patch_offset; + int32_t const_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1974,7 +1974,7 @@ _emit_code(jit_state_t *_jit) if (!jit_thumb_p() && (node->code == jit_code_movi || node->code == jit_code_calli)) { /* calculate where to patch word */ - value = *(jit_int32_t *)word; + value = *(int32_t *)word; assert((value & 0x0f700000) == ARM_LDRI); /* offset may become negative (-4) if last instruction * before unconditional branch and data following @@ -1995,10 +1995,10 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_rewind.c" -# include "jit_arm-cpu.c" -# include "jit_arm-swf.c" -# include "jit_arm-vfp.c" +# include "rewind.c" +# include "arm-cpu.c" +# include "arm-swf.c" +# include ", 2018arm-vfp.c" #undef CODE void @@ -2016,19 +2016,19 @@ jit_flush(void *fptr, void *tptr) } void -_emit_ldxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_i(rn(r0), rn(r1), i0); } void -_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi_i(i0, rn(r0), rn(r1)); } void -_emit_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (jit_swf_p()) swf_ldxi_d(rn(r0), rn(r1), i0); @@ -2037,7 +2037,7 @@ _emit_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } void -_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { if (jit_swf_p()) swf_stxi_d(i0, rn(r0), rn(r1)); @@ -2045,7 +2045,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) vfp_stxi_d(i0, rn(r0), rn(r1)); } -static jit_int32_t +static int32_t _jit_get_reg_pair(jit_state_t *_jit) { /* bypass jit_get_reg() with argument or'ed with jit_class_chk @@ -2081,7 +2081,7 @@ _jit_get_reg_pair(jit_state_t *_jit) } static void -_jit_unget_reg_pair(jit_state_t *_jit, jit_int32_t reg) +_jit_unget_reg_pair(jit_state_t *_jit, int32_t reg) { jit_unget_reg(reg); switch (reg) { @@ -2119,14 +2119,14 @@ _must_align_p(jit_state_t *_jit, jit_node_t *node) } static void -_load_const(jit_state_t *_jit, jit_bool_t uniq, jit_int32_t r0, jit_word_t i0) +_load_const(jit_state_t *_jit, jit_bool_t uniq, int32_t r0, jit_word_t i0) { jit_word_t w; jit_word_t d; jit_word_t base; - jit_int32_t *data; - jit_int32_t size; - jit_int32_t offset; + int32_t *data; + int32_t size; + int32_t offset; assert(!jit_thumb_p()); if (!uniq) { @@ -2145,7 +2145,7 @@ _load_const(jit_state_t *_jit, jit_bool_t uniq, jit_int32_t r0, jit_word_t i0) */ /* search in previous constant pool */ - if ((data = (jit_int32_t *)_jitc->consts.data)) { + if ((data = (int32_t *)_jitc->consts.data)) { w = (jit_word_t)data; /* maximum backwards offset */ base = (_jit->pc.w + 8) - 4092; @@ -2196,7 +2196,7 @@ static void _flush_consts(jit_state_t *_jit) { jit_word_t word; - jit_int32_t offset; + int32_t offset; /* if no forward constants */ if (!_jitc->consts.length) @@ -2243,8 +2243,8 @@ _invalidate_consts(jit_state_t *_jit) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; - jit_int32_t kind; + int32_t flag; + int32_t kind; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) { diff --git a/libguile/lightning/include/lightning/jit_arm.h b/libguile/lightning/jit/arm.h index 496e89b1b..9177f1354 100644 --- a/libguile/lightning/include/lightning/jit_arm.h +++ b/libguile/lightning/jit/arm.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -105,23 +105,23 @@ typedef enum { } jit_reg_t; typedef struct { - jit_uint32_t version : 4; - jit_uint32_t extend : 1; + uint32_t version : 4; + uint32_t extend : 1; /* only generate thumb instructions for thumb2 */ - jit_uint32_t thumb : 1; - jit_uint32_t vfp : 3; - jit_uint32_t neon : 1; - jit_uint32_t abi : 2; + uint32_t thumb : 1; + uint32_t vfp : 3; + uint32_t neon : 1; + uint32_t abi : 2; /* use strt+offset instead of str.w? * on special cases it causes a SIGILL at least on qemu, probably * due to some memory ordering constraint not being respected, so, * disable by default */ - jit_uint32_t ldrt_strt : 1; + uint32_t ldrt_strt : 1; } jit_cpu_t; /* * Initialization */ -extern jit_cpu_t jit_cpu; +JIT_API jit_cpu_t jit_cpu; #endif /* _jit_arm_h */ diff --git a/libguile/lightning/jit/endian.h b/libguile/lightning/jit/endian.h new file mode 100644 index 000000000..b9b1a918d --- /dev/null +++ b/libguile/lightning/jit/endian.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2012-2018 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + * Andy Wingo + */ + +#ifndef _jit_endian_h +#define _jit_endian_h + +#include <unistd.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <stddef.h> + +#if defined(__hpux) && defined(__hppa__) +# include <machine/param.h> +#endif +#if defined(__alpha__) && defined(__osf__) +# include <machine/endian.h> +#endif + +#ifndef __WORDSIZE +# if defined(WORDSIZE) /* ppc darwin */ +# define __WORDSIZE WORDSIZE +# elif defined(__SIZEOF_POINTER__) /* ppc aix */ +# define __WORDSIZE (__SIZEOF_POINTER__ << 3) +# elif defined(_ILP32) /* hppa hp-ux */ +# define __WORDSIZE 32 +# elif defined(_LP64) /* ia64 hp-ux (with cc +DD64) */ +# define __WORDSIZE 64 +# elif defined(_MIPS_SZPTR) /* mips irix */ +# if _MIPS_SZPTR == 32 +# define __WORDSIZE 32 +# else +# define __WORDSIZE 64 +# endif +# else /* From FreeBSD 9.1 stdint.h */ +# if defined(UINTPTR_MAX) && defined(UINT64_MAX) && \ + (UINTPTR_MAX == UINT64_MAX) +# define __WORDSIZE 64 +# else +# define __WORDSIZE 32 +# endif +# endif +#endif +#ifndef __LITTLE_ENDIAN +# if defined(LITTLE_ENDIAN) /* ppc darwin */ +# define __LITTLE_ENDIAN LITTLE_ENDIAN +# elif defined(__ORDER_LITTLE_ENDIAN__) /* ppc aix */ +# define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ +# else +# define __LITTLE_ENDIAN 1234 +# endif +#endif +#ifndef __BIG_ENDIAN +# if defined(BIG_ENDIAN) /* ppc darwin */ +# define __BIG_ENDIAN BIG_ENDIAN +# elif defined(__ORDER_BIG_ENDIAN__) /* ppc aix */ +# define __BIG_ENDIAN __ORDER_BIG_ENDIAN__ +# else +# define __BIG_ENDIAN 4321 +# endif +#endif +#ifndef __BYTE_ORDER +# if defined(BYTE_ORDER) /* ppc darwin */ +# define __BYTE_ORDER BYTE_ORDER +# elif defined(__BYTE_ORDER__) /* ppc aix */ +# define __BYTE_ORDER __BYTE_ORDER__ +# elif defined(_BIG_ENDIAN) /* hppa hp-ux */ +# define __BYTE_ORDER __BIG_ENDIAN +# elif defined(__BIG_ENDIAN__) /* ia64 hp-ux */ +# define __BYTE_ORDER __BIG_ENDIAN +# elif defined(__i386__) /* 32 bit x86 solaris */ +# define __BYTE_ORDER __LITTLE_ENDIAN +# elif defined(__x86_64__) /* 64 bit x86 solaris */ +# define __BYTE_ORDER __LITTLE_ENDIAN +# elif defined(__MIPSEB) /* mips irix */ +# define __BYTE_ORDER __BIG_ENDIAN +# else +# error cannot figure __BYTE_ORDER +# endif +#endif + +#if __WORDSIZE == 32 +#define CHOOSE_32_64(x, y) x +#elif __WORDSIZE == 64 +#define CHOOSE_32_64(x, y) y +#else +#error unhandled __WORDSIZE +#endif + +#define WHEN_64(x) CHOOSE_32_64(/**/, x) + + +#endif /* _jit_endian_h */ diff --git a/libguile/lightning/lib/jit_hppa-cpu.c b/libguile/lightning/jit/hppa-cpu.c index 4318f062a..68281e4a5 100644 --- a/libguile/lightning/lib/jit_hppa-cpu.c +++ b/libguile/lightning/jit/hppa-cpu.c @@ -48,142 +48,142 @@ typedef struct udiv { #define _CR11_REGNO 11 #define ii(v) *_jit->pc.ui++ = v #define f1(o,b,t,i) _f1(_jit,o,b,t,i) -static void _f1(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _f1(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); #define f2(o,b,r,i,j) _f2(_jit,o,b,r,i,j) -static void _f2(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f2(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f3(o,b,t,i,j) _f3(_jit,o,b,t,i,j) -static void _f3(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _f3(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t); #define f4(o,b,x,s,u,y,c,z,m,t) _f4(_jit,o,b,x,s,u,y,c,z,m,t) -static void _f4(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f4(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f5(o,b,i,s,a,y,c,z,m,t) _f5(_jit,o,b,i,s,a,y,c,z,m,t) -static void _f5(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f5(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f6(o,b,r,s,a,x,c,y,m,i) _f6(_jit,o,b,r,s,a,x,c,y,m,i) -static void _f6(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f6(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f7(o,r,i) _f7(_jit,o,r,i) -static void _f7(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f7(jit_state_t*,int32_t,int32_t,int32_t); #define f8(o,r2,r1,cf,e1,x,e2,y,d,t) _f8(_jit,o,r2,r1,cf,e1,x,e2,y,d,t) -static void _f8(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _f8(jit_state_t*,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t); #define f9(o,r,t,cf,e1,im) _f9(_jit,o,r,t,cf,e1,im) static void _f9(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t); #define f10(o,r2,r1,u,v,w,x,sa,y,t) _f10(_jit,o,r2,r1,u,v,w,x,sa,y,t) -static void _f10(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f10(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f11(o,r2,r1,c,x,y,z,u,t) _f11(_jit,o,r2,r1,c,x,y,z,u,t) -static void _f11(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f11(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f12(o,r,t,c,x,se,y,c1,z,clen) _f12(_jit,o,r,t,c,x,se,y,c1,z,clen) -static void _f12(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f12(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f13(o,t,r,c,x,nz,c1,clen) _f13(_jit,o,t,r,c,x,nz,c1,clen) -static void _f13(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _f13(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t); #define f13x(o,t,i,c,x,nz,c1,clen) _f13x(_jit,o,t,i,c,x,nz,c1,clen) -static void _f13x(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f13x(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f14(o,r2,r1,c,x,cp,y,cpos,t) _f14(_jit,o,r2,r1,c,x,cp,y,cpos,t) -static void _f14(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f14(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f15(o,r,t,c,c1,p,se,pos,clen) _f15(_jit,o,r,t,c,c1,p,se,pos,clen) -static void _f15(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f15(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f16(o,t,r,c,c1,cp,nz,cpos,clen) _f16(_jit,o,t,r,c,c1,cp,nz,cpos,clen) -static void _f16(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f16(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f16x(o,t,i,c,c1,cp,nz,cpos,clen) _f16x(_jit,o,t,i,c,c1,cp,nz,cpos,clen) -static void _f16x(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f16x(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f17(o,r2,r1,c,i,n) _f17(_jit,o,r2,r1,c,i,n) -static void _f17(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f17(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f17x(o,r2,r1,c,i,n) _f17x(_jit,o,r2,r1,c,i,n) -static void _f17x(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f17x(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f18(o,p,r,c,i,n) _f18(_jit,o,p,r,c,i,n) -static void _f18(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f18(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f19(o,b,s,i,n) _f19(_jit,o,b,s,i,n) -static void _f19(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f19(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f20(o,t,i,g,n) _f20(_jit,o,t,i,g,n) -static void _f20(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _f20(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t); #define f21(o,t,x,y,n) _f21(_jit,o,t,x,y,n) -static void _f21(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _f21(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t); #define f22(o,b,x,r,n,p) _f22(_jit,o,b,x,r,n,p) -static void _f22(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f22(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f23(o,a,b,c,d,e,f,g,h) _f23(_jit,o,a,b,c,d,e,f,g,h) -static void _f23(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f23(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f24(o,b,x,s,y,m,r) _f24(_jit,o,b,x,s,y,m,r) -static void _f24(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f24(jit_state_t*,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f25(o,b,i,s,y,m,r) _f25(_jit,o,b,i,s,y,m,r) -static void _f25(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f25(jit_state_t*,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f26(o,b,x,s,y,m,r) _f26(_jit,o,b,x,s,y,m,r) -static void _f26(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f26(jit_state_t*,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f27(o,i,j) _f27(_jit,o,i,j) -static void _f27(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f27(jit_state_t*,int32_t,int32_t,int32_t) maybe_unused; #define f28(o,i) _f28(_jit,o,i) -static void _f28(jit_state_t*,jit_int32_t,jit_int32_t) maybe_unused; +static void _f28(jit_state_t*,int32_t,int32_t) maybe_unused; #define f29(o,r,x,s,y,t) _f29(_jit,o,r,x,s,y,t) -static void _f29(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f29(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f30(o,b,r,s,x,y,t) _f30(_jit,o,b,r,s,x,y,t) -static void _f30(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f30(jit_state_t*,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f31(o,t,r,v,x,y) _f31(_jit,o,t,r,v,x,y) -static void _f31(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f31(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f33(o,x,r,y,z,u) _f33(_jit,o,x,r,y,z,u) -static void _f33(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f33(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f34(o,o1,x,sf,n,o2) _f34(_jit,o,o1,x,sf,n,o2) -static void _f34(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f34(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f35(o,op,x,sf,n,t) _f35(_jit,o,op,x,sf,n,t) -static void _f35(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f35(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f36(o,r,o1,x,sf,n,o2) _f36(_jit,o,r,o1,x,sf,n,o2) -static void _f36(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f36(jit_state_t*,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f37(o,r2,r1,o1,x,sf,n,o2) _f37(_jit,o,r2,r1,o1,x,sf,n,o2) -static void _f37(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f37(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t) maybe_unused; #define f38(o,s,u,n) _f38(_jit,o,s,u,n) -static void _f38(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f38(jit_state_t*,int32_t, + int32_t,int32_t,int32_t) maybe_unused; /* nulify next instruction if condition is met with addition */ #define ADD_CF_NV 0 /* never */ #define ADD_CF_EQ 2 /* O1 == -O2 (word) */ @@ -641,13 +641,13 @@ static void _f38(jit_state_t*,jit_int32_t, #define UXOR(r1,r2,t) f8(0x2,r2,r1,LOG_CC_NV,0,1,1,2,0,t) #define XOR(r1,r2,t) f8(0x2,r2,r1,LOG_CC_NV,0,1,0,2,0,t) # define nop(c) _nop(_jit,c) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); #define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); #define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); #define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); #define comr(r0,r1) UADDCM(_R0_REGNO,r1,r0) #define negr(r0,r1) SUB(_R0_REGNO,r1,r0) #define extr_c(r0,r1) EXTRWR(r1,31,8,r0) @@ -655,105 +655,105 @@ static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); #define extr_s(r0,r1) EXTRWR(r1,31,16,r0) #define extr_us(r0,r1) EXTRWR_U(r1,31,16,r0) #if __BYTE_ORDER == __BIG_ENDIAN -# define htonr_us(r0,r1) extr_us(r0,r1) -# define htonr_ui(r0,r1) movr(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) +# define bswapr_ui(r0,r1) movr(r0,r1) #else -# error need htonr implementation +# error need bswapr implementation #endif #define addr(r0,r1,r2) ADD(r1,r2,r0) #define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); #define addcr(r0,r1,r2) addr(r0,r1,r2) #define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); #define addxr(r0,r1,r2) ADD_C(r1,r2,r0) #define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); #define subr(r0,r1,r2) SUB(r1,r2,r0) #define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); #define subcr(r0,r1,r2) subr(r0,r1,r2) #define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); #define subxr(r0,r1,r2) SUB_B(r1,r2,r0) #define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); #define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); #define mulr(r0,r1,r2) _mulr(_jit,r0,r1,r2) -static void _mulr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr(jit_state_t*,int32_t,int32_t,int32_t); #define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); static long long __llmul(int, int); #define qmulr(r0,r1,r2,r3) _qmulr(_jit,r0,r1,r2,r3) static void _qmulr(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); #define qmuli(r0,r1,r2,i0) _qmuli(_jit,r0,r1,r2,i0) static void _qmuli(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); #define qmulr_u(r0,r1,r2,r3) _qmulr_u(_jit,r0,r1,r2,r3) static void _qmulr_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); #define qmuli_u(r0,r1,r2,i0) _qmuli_u(_jit,r0,r1,r2,i0) static void _qmuli_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); static int __idiv(int, int); #define divr(r0,r1,r2) _divr(_jit,r0,r1,r2) -static void _divr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr(jit_state_t*,int32_t,int32_t,int32_t); #define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); static unsigned int __udiv(unsigned int, unsigned int); #define divr_u(r0,r1,r2) _divr_u(_jit,r0,r1,r2) -static void _divr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_u(jit_state_t*,int32_t,int32_t,int32_t); #define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); static int __irem(int, int); #define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); #define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); static unsigned int __urem(unsigned int, unsigned int); #define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); #define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); static idiv_t __idivrem(int, int); #define qdivr(r0,r1,r2,r3) _qdivr(_jit,r0,r1,r2,r3) static void _qdivr(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); #define qdivi(r0,r1,r2,i0) _qdivi(_jit,r0,r1,r2,i0) static void _qdivi(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); static udiv_t __udivrem(unsigned int, unsigned int); #define qdivr_u(r0,r1,r2,r3) _qdivr_u(_jit,r0,r1,r2,r3) static void _qdivr_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); #define qdivi_u(r0,r1,r2,i0) _qdivi_u(_jit,r0,r1,r2,i0) static void _qdivi_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); #define andr(r0,r1,r2) AND(r1,r2,r0) #define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); #define orr(r0,r1,r2) OR(r1,r2,r0) #define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); #define xorr(r0,r1,r2) XOR(r1,r2,r0) #define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); #define lshr(r0,r1,r2) _lshr(_jit,r0,r1,r2) -static void _lshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _lshr(jit_state_t*,int32_t,int32_t,int32_t); #define lshi(r0,r1,i0) SHLWI(r1,i0,r0) #define rshr(r0,r1,r2) _rshr(_jit,r0,r1,r2) -static void _rshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _rshr(jit_state_t*,int32_t,int32_t,int32_t); #define rshi(r0,r1,i0) SHRWI(r1,i0,r0) #define rshr_u(r0,r1,r2) _rshr_u(_jit,r0,r1,r2) -static void _rshr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _rshr_u(jit_state_t*,int32_t,int32_t,int32_t); #define rshi_u(r0,r1,i0) SHRWI_U(r1,i0,r0) #define cmpr(c,r0,r1,r2) _cmpr(_jit,c,r0,r1,r2) -static void _cmpr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _cmpr(jit_state_t*,jit_word_t,int32_t,int32_t,int32_t); #define cmpi(c,ci,r0,r1,i0) _cmpi(_jit,c,ci,r0,r1,i0) static void _cmpi(jit_state_t*,jit_word_t,jit_word_t, - jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,jit_word_t); #define ltr(r0,r1,r2) cmpr(CS_CC_GE,r0,r1,r2) #define lti(r0,r1,i0) cmpi(CS_CC_GE,CS_CC_LE,r0,r1,i0) #define ltr_u(r0,r1,r2) cmpr(CS_CC_UGE,r0,r1,r2) @@ -775,73 +775,73 @@ static void _cmpi(jit_state_t*,jit_word_t,jit_word_t, #define ner(r0,r1,r2) cmpr(CS_CC_EQ,r0,r1,r2) #define nei(r0,r1,i0) cmpi(CS_CC_EQ,CS_CC_EQ,r0,r1,i0) #define ldr_c(r0,r1) _ldr_c(_jit,r0,r1) -static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_c(jit_state_t*,int32_t,int32_t); #define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); #define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldr_uc(r0,r1) LDBI(_R0_REGNO,r1,r0) #define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); #define ldxr_uc(r0,r1,r2) LDB(r2,r1,r0) #define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldr_s(r0,r1) _ldr_s(_jit,r0,r1) -static void _ldr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_s(jit_state_t*,int32_t,int32_t); #define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); #define ldxr_s(r0,r1,r2) _ldxr_s(_jit,r0,r1,r2) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldr_us(r0,r1) LDHI(_R0_REGNO,r1,r0) #define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); #define ldxr_us(r0,r1,r2) LDH(r2,r1,r0) #define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldr(r0,r1) ldr_ui(r0,r1) #define ldr_i(r0,r1) ldr_ui(r0,r1) #define ldr_ui(r0,r1) LDWI(_R0_REGNO,r1,r0) #define ldi_i(r0,i0) ldi_ui(r0,i0) #define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); #define ldxr_i(r0,r1,r2) ldxr_ui(r0,r1,r2) #define ldxr_ui(r0,r1,r2) LDW(r2,r1,r0) #define ldxi(r0,r1,i0) ldxi_ui(r0,r1,i0) #define ldxi_i(r0,r1,i0) ldxi_ui(r0,r1,i0) #define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); #define str_c(r0,r1) STBI(r1,_R0_REGNO,r0) #define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); #define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); #define str_s(r0,r1) STHI(r1,_R0_REGNO,r0) #define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); #define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); #define str_i(r0,r1) STWI(r1,_R0_REGNO,r0) #define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); #define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,int32_t,int32_t,int32_t); #define stxi(i0,r0,r1) stxi_i(i0,r0,r1) #define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); #define bcmpr(c,i0,r0,r1) _bcmpr(_jit,c,i0,r0,r1) static jit_word_t _bcmpr(jit_state_t*,jit_word_t, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); #define bcmpi(c,ci,i0,r0,i1) _bcmpi(_jit,c,ci,i0,r0,i1) static jit_word_t _bcmpi(jit_state_t*,jit_word_t,jit_word_t, - jit_word_t,jit_int32_t,jit_word_t); + jit_word_t,int32_t,jit_word_t); #define bltr(i0,r0,r1) bcmpr(CS_CC_LT,i0,r0,r1) #define blti(i0,r0,r1) bcmpi(CS_CC_LT,CS_CC_GT,i0,r0,r1) #define bltr_u(i0,r0,r1) bcmpr(CS_CC_ULT,i0,r0,r1) @@ -864,54 +864,54 @@ static jit_word_t _bcmpi(jit_state_t*,jit_word_t,jit_word_t, #define bnei(i0,r0,r1) bcmpi(CS_CC_NE,CS_CC_NE,i0,r0,r1) #define bmxr(c,i0,r0,r1) _bmxr(_jit,c,i0,r0,r1) static jit_word_t _bmxr(jit_state_t*,jit_bool_t, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); #define bmxi(c,i0,r0,i1) _bmxi(_jit,c,i0,r0,i1) static jit_word_t _bmxi(jit_state_t*,jit_bool_t, - jit_word_t,jit_int32_t,jit_word_t); + jit_word_t,int32_t,jit_word_t); #define bmcr(r0,r1,r2) bmxr(0,r0,r1,r2) #define bmci(r0,r1,r2) bmxi(0,r0,r1,r2) #define bmsr(r0,r1,r2) bmxr(1,r0,r1,r2) #define bmsi(r0,r1,r2) bmxi(1,r0,r1,r2) #define boaddr(i0,r0,r1) _boaddr(_jit,i0,r0,r1) -static jit_word_t _boaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _boaddr(jit_state_t*,jit_word_t,int32_t,int32_t); #define boaddi(i0,r0,i1) _boaddi(_jit,i0,r0,i1) -static jit_word_t _boaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _boaddi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define boaddr_u(i0,r0,r1) _boaddr_u(_jit,i0,r0,r1) -static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define boaddi_u(i0,r0,i1) _boaddi_u(_jit,i0,r0,i1) -static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxaddr(i0,r0,r1) _bxaddr(_jit,i0,r0,r1) -static jit_word_t _bxaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxaddr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxaddi(i0,r0,i1) _bxaddi(_jit,i0,r0,i1) -static jit_word_t _bxaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxaddi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxaddr_u(i0,r0,r1) _bxaddr_u(_jit,i0,r0,r1) -static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxaddi_u(i0,r0,i1) _bxaddi_u(_jit,i0,r0,i1) -static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bosubr(i0,r0,r1) _bosubr(_jit,i0,r0,r1) -static jit_word_t _bosubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bosubr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bosubi(i0,r0,i1) _bosubi(_jit,i0,r0,i1) -static jit_word_t _bosubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bosubi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bosubr_u(i0,r0,r1) _bosubr_u(_jit,i0,r0,r1) -static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bosubi_u(i0,r0,i1) _bosubi_u(_jit,i0,r0,i1) -static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxsubr(i0,r0,r1) _bxsubr(_jit,i0,r0,r1) -static jit_word_t _bxsubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxsubr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxsubi(i0,r0,i1) _bxsubi(_jit,i0,r0,i1) -static jit_word_t _bxsubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxsubi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxsubr_u(i0,r0,r1) _bxsubr_u(_jit,i0,r0,r1) -static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxsubi_u(i0,r0,i1) _bxsubi_u(_jit,i0,r0,i1) -static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define jmpr(r0) _jmpr(_jit,r0) -static void _jmpr(jit_state_t*,jit_int32_t); +static void _jmpr(jit_state_t*,int32_t); #define jmpi(i0) _jmpi(_jit,i0) static void _jmpi(jit_state_t*,jit_word_t); #define jmpi_p(i0) _jmpi_p(_jit,i0) static jit_word_t _jmpi_p(jit_state_t*,jit_word_t); #define callr(r0) _callr(_jit,r0) -static void _callr(jit_state_t*,jit_int32_t); +static void _callr(jit_state_t*,int32_t); #define calli(i0) _calli(_jit,i0) static void _calli(jit_state_t*,jit_word_t); #define calli_p(i0) _calli_p(_jit,i0) @@ -921,9 +921,9 @@ static void _prolog(jit_state_t*, jit_node_t*); #define epilog(node) _epilog(_jit, node) static void _epilog(jit_state_t*, jit_node_t*); #define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); #define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); #define patch_at(i,l) _patch_at(_jit,i,l) static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #endif @@ -1017,8 +1017,8 @@ re_assemble_22 (int as22) } static void -_f1(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t t, jit_int32_t i) +_f1(jit_state_t *_jit, int32_t o, + int32_t b, int32_t t, int32_t i) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1028,8 +1028,8 @@ _f1(jit_state_t *_jit, jit_int32_t o, } static void -_f2(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t t, jit_int32_t i, jit_int32_t j) +_f2(jit_state_t *_jit, int32_t o, + int32_t b, int32_t t, int32_t i, int32_t j) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1040,8 +1040,8 @@ _f2(jit_state_t *_jit, jit_int32_t o, } static void -_f3(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t t, jit_int32_t i, jit_int32_t j) +_f3(jit_state_t *_jit, int32_t o, + int32_t b, int32_t t, int32_t i, int32_t j) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1052,9 +1052,9 @@ _f3(jit_state_t *_jit, jit_int32_t o, } static void -_f4(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, - jit_int32_t x, jit_int32_t s, jit_int32_t u, jit_int32_t y, - jit_int32_t c, jit_int32_t z, jit_int32_t m, jit_int32_t t) +_f4(jit_state_t *_jit, int32_t o, int32_t b, + int32_t x, int32_t s, int32_t u, int32_t y, + int32_t c, int32_t z, int32_t m, int32_t t) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1070,9 +1070,9 @@ _f4(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, } static void -_f5(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, - jit_int32_t i, jit_int32_t s, jit_int32_t a, jit_int32_t y, - jit_int32_t c, jit_int32_t z, jit_int32_t m, jit_int32_t t) +_f5(jit_state_t *_jit, int32_t o, int32_t b, + int32_t i, int32_t s, int32_t a, int32_t y, + int32_t c, int32_t z, int32_t m, int32_t t) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1088,9 +1088,9 @@ _f5(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, } static void -_f6(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, - jit_int32_t r, jit_int32_t s, jit_int32_t a, jit_int32_t x, - jit_int32_t c, jit_int32_t y, jit_int32_t m, jit_int32_t i) +_f6(jit_state_t *_jit, int32_t o, int32_t b, + int32_t r, int32_t s, int32_t a, int32_t x, + int32_t c, int32_t y, int32_t m, int32_t i) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1106,7 +1106,7 @@ _f6(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, } static void -_f7(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, jit_int32_t i) +_f7(jit_state_t *_jit, int32_t o, int32_t r, int32_t i) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1115,10 +1115,10 @@ _f7(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, jit_int32_t i) } static void -_f8(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r2, jit_int32_t r1, jit_int32_t cf, - jit_int32_t e1, jit_int32_t x, jit_int32_t e2, - jit_int32_t e3, jit_int32_t d, jit_int32_t t) +_f8(jit_state_t *_jit, int32_t o, + int32_t r2, int32_t r1, int32_t cf, + int32_t e1, int32_t x, int32_t e2, + int32_t e3, int32_t d, int32_t t) { assert(!(o & ~0x3f)); assert(!(r2 & ~0x1f)); @@ -1136,8 +1136,8 @@ _f8(jit_state_t *_jit, jit_int32_t o, static void _f9(jit_state_t *_jit, - jit_int32_t o, jit_int32_t r, jit_int32_t t, - jit_int32_t cf, jit_int32_t e1, jit_int32_t i) + int32_t o, int32_t r, int32_t t, + int32_t cf, int32_t e1, int32_t i) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1149,9 +1149,9 @@ _f9(jit_state_t *_jit, } static void -_f10(jit_state_t *_jit, jit_int32_t o, jit_int32_t r2, - jit_int32_t r1, jit_int32_t u, jit_int32_t v, jit_int32_t w, - jit_int32_t x, jit_int32_t sa, jit_int32_t y, jit_int32_t t) +_f10(jit_state_t *_jit, int32_t o, int32_t r2, + int32_t r1, int32_t u, int32_t v, int32_t w, + int32_t x, int32_t sa, int32_t y, int32_t t) { assert(!(o & ~0x3f)); assert(!(r2 & ~0x1f)); @@ -1168,9 +1168,9 @@ _f10(jit_state_t *_jit, jit_int32_t o, jit_int32_t r2, } static void -_f11(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r2, jit_int32_t r1, jit_int32_t c, jit_int32_t x, - jit_int32_t y, jit_int32_t z, jit_int32_t u, jit_int32_t t) +_f11(jit_state_t *_jit, int32_t o, + int32_t r2, int32_t r1, int32_t c, int32_t x, + int32_t y, int32_t z, int32_t u, int32_t t) { assert(!(o & ~0x3f)); assert(!(r1 & ~0x1f)); @@ -1185,9 +1185,9 @@ _f11(jit_state_t *_jit, jit_int32_t o, } static void -_f12(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, - jit_int32_t t, jit_int32_t c, jit_int32_t x, jit_int32_t se, - jit_int32_t y, jit_int32_t c1, jit_int32_t z, jit_int32_t clen) +_f12(jit_state_t *_jit, int32_t o, int32_t r, + int32_t t, int32_t c, int32_t x, int32_t se, + int32_t y, int32_t c1, int32_t z, int32_t clen) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1204,9 +1204,9 @@ _f12(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, } static void -_f13(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, - jit_int32_t r, jit_int32_t c, jit_int32_t x, - jit_int32_t nz, jit_int32_t c1, jit_int32_t clen) +_f13(jit_state_t *_jit, int32_t o, int32_t t, + int32_t r, int32_t c, int32_t x, + int32_t nz, int32_t c1, int32_t clen) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1221,9 +1221,9 @@ _f13(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, } static void -_f13x(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, - jit_int32_t i, jit_int32_t c, jit_int32_t x, - jit_int32_t nz, jit_int32_t c1, jit_int32_t clen) +_f13x(jit_state_t *_jit, int32_t o, int32_t t, + int32_t i, int32_t c, int32_t x, + int32_t nz, int32_t c1, int32_t clen) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1237,9 +1237,9 @@ _f13x(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, } static void -_f14(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r2, jit_int32_t r1, jit_int32_t c, jit_int32_t x, - jit_int32_t cp, jit_int32_t y, jit_int32_t cpos, jit_int32_t t) +_f14(jit_state_t *_jit, int32_t o, + int32_t r2, int32_t r1, int32_t c, int32_t x, + int32_t cp, int32_t y, int32_t cpos, int32_t t) { assert(!(o & ~0x3f)); assert(!(r1 & ~0x1f)); @@ -1254,9 +1254,9 @@ _f14(jit_state_t *_jit, jit_int32_t o, } static void -_f15(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r, jit_int32_t t, jit_int32_t c, jit_int32_t c1, - jit_int32_t p, jit_int32_t se, jit_int32_t pos, jit_int32_t clen) +_f15(jit_state_t *_jit, int32_t o, + int32_t r, int32_t t, int32_t c, int32_t c1, + int32_t p, int32_t se, int32_t pos, int32_t clen) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1272,9 +1272,9 @@ _f15(jit_state_t *_jit, jit_int32_t o, } static void -_f16(jit_state_t *_jit, jit_int32_t o, - jit_int32_t t, jit_int32_t r, jit_int32_t c, jit_int32_t c1, - jit_int32_t cp, jit_int32_t nz, jit_int32_t cpos, jit_int32_t clen) +_f16(jit_state_t *_jit, int32_t o, + int32_t t, int32_t r, int32_t c, int32_t c1, + int32_t cp, int32_t nz, int32_t cpos, int32_t clen) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1290,9 +1290,9 @@ _f16(jit_state_t *_jit, jit_int32_t o, } static void -_f16x(jit_state_t *_jit, jit_int32_t o, - jit_int32_t t, jit_int32_t i, jit_int32_t c, jit_int32_t c1, - jit_int32_t cp, jit_int32_t nz, jit_int32_t cpos, jit_int32_t clen) +_f16x(jit_state_t *_jit, int32_t o, + int32_t t, int32_t i, int32_t c, int32_t c1, + int32_t cp, int32_t nz, int32_t cpos, int32_t clen) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1308,8 +1308,8 @@ _f16x(jit_state_t *_jit, jit_int32_t o, } static void -_f17(jit_state_t *_jit, jit_int32_t o, jit_int32_t r2, - jit_int32_t r1, jit_int32_t c, jit_int32_t i, jit_int32_t n) +_f17(jit_state_t *_jit, int32_t o, int32_t r2, + int32_t r1, int32_t c, int32_t i, int32_t n) { assert(!(o & ~0x3f)); assert(!(r2 & ~0x1f)); @@ -1321,8 +1321,8 @@ _f17(jit_state_t *_jit, jit_int32_t o, jit_int32_t r2, } static void -_f17x(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, - jit_int32_t i, jit_int32_t c, jit_int32_t t, jit_int32_t n) +_f17x(jit_state_t *_jit, int32_t o, int32_t r, + int32_t i, int32_t c, int32_t t, int32_t n) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1335,8 +1335,8 @@ _f17x(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, } static void -_f18(jit_state_t *_jit, jit_int32_t o, jit_int32_t p, - jit_int32_t r, jit_int32_t c, jit_int32_t i, jit_int32_t n) +_f18(jit_state_t *_jit, int32_t o, int32_t p, + int32_t r, int32_t c, int32_t i, int32_t n) { assert(!(o & ~0x3f)); assert(!(p & ~0x1f)); @@ -1348,8 +1348,8 @@ _f18(jit_state_t *_jit, jit_int32_t o, jit_int32_t p, } static void -_f19(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, - jit_int32_t s, jit_int32_t i, jit_int32_t n) +_f19(jit_state_t *_jit, int32_t o, int32_t b, + int32_t s, int32_t i, int32_t n) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1360,8 +1360,8 @@ _f19(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, } static void -_f20(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, - jit_int32_t i, jit_int32_t g, jit_int32_t n) +_f20(jit_state_t *_jit, int32_t o, int32_t t, + int32_t i, int32_t g, int32_t n) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1372,8 +1372,8 @@ _f20(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, } static void -_f21(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, - jit_int32_t x, jit_int32_t y, jit_int32_t n) +_f21(jit_state_t *_jit, int32_t o, int32_t t, + int32_t x, int32_t y, int32_t n) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1384,8 +1384,8 @@ _f21(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, } static void -_f22(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, - jit_int32_t x, jit_int32_t r, jit_int32_t n, jit_int32_t p) +_f22(jit_state_t *_jit, int32_t o, int32_t b, + int32_t x, int32_t r, int32_t n, int32_t p) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1397,9 +1397,9 @@ _f22(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, } static void -_f23(jit_state_t *_jit, jit_int32_t o, - jit_int32_t a, jit_int32_t b, jit_int32_t c, jit_int32_t d, - jit_int32_t e, jit_int32_t f, jit_int32_t g, jit_int32_t h) +_f23(jit_state_t *_jit, int32_t o, + int32_t a, int32_t b, int32_t c, int32_t d, + int32_t e, int32_t f, int32_t g, int32_t h) { assert(!(o & ~0x3f)); assert(!(a & ~0x1f)); @@ -1414,9 +1414,9 @@ _f23(jit_state_t *_jit, jit_int32_t o, } static void -_f24(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t x, jit_int32_t s, - jit_int32_t y, jit_int32_t m,jit_int32_t r) +_f24(jit_state_t *_jit, int32_t o, + int32_t b, int32_t x, int32_t s, + int32_t y, int32_t m,int32_t r) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1429,9 +1429,9 @@ _f24(jit_state_t *_jit, jit_int32_t o, } static void -_f25(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t i, jit_int32_t s, - jit_int32_t y, jit_int32_t m, jit_int32_t r) +_f25(jit_state_t *_jit, int32_t o, + int32_t b, int32_t i, int32_t s, + int32_t y, int32_t m, int32_t r) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1444,9 +1444,9 @@ _f25(jit_state_t *_jit, jit_int32_t o, } static void -_f26(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t x, jit_int32_t s, - jit_int32_t y, jit_int32_t m,jit_int32_t r) +_f26(jit_state_t *_jit, int32_t o, + int32_t b, int32_t x, int32_t s, + int32_t y, int32_t m,int32_t r) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1459,7 +1459,7 @@ _f26(jit_state_t *_jit, jit_int32_t o, } static void -_f27(jit_state_t *_jit, jit_int32_t o, jit_int32_t i, jit_int32_t j) +_f27(jit_state_t *_jit, int32_t o, int32_t i, int32_t j) { assert(!(o & ~0x3f)); assert(i >= -4096 && i < 4095); @@ -1468,7 +1468,7 @@ _f27(jit_state_t *_jit, jit_int32_t o, jit_int32_t i, jit_int32_t j) } static void -_f28(jit_state_t *_jit, jit_int32_t o, jit_int32_t i) +_f28(jit_state_t *_jit, int32_t o, int32_t i) { assert(!(o & ~0x3f)); assert(!(i & ~0x1ffffff)); @@ -1476,8 +1476,8 @@ _f28(jit_state_t *_jit, jit_int32_t o, jit_int32_t i) } static void -_f29(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, - jit_int32_t x, jit_int32_t s, jit_int32_t y, jit_int32_t t) +_f29(jit_state_t *_jit, int32_t o, int32_t r, + int32_t x, int32_t s, int32_t y, int32_t t) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1489,8 +1489,8 @@ _f29(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, } static void -_f30(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, jit_int32_t r, - jit_int32_t s, jit_int32_t x, jit_int32_t y, jit_int32_t t) +_f30(jit_state_t *_jit, int32_t o, int32_t b, int32_t r, + int32_t s, int32_t x, int32_t y, int32_t t) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -1503,8 +1503,8 @@ _f30(jit_state_t *_jit, jit_int32_t o, jit_int32_t b, jit_int32_t r, } static void -_f31(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, - jit_int32_t r, jit_int32_t v, jit_int32_t x, jit_int32_t y) +_f31(jit_state_t *_jit, int32_t o, int32_t t, + int32_t r, int32_t v, int32_t x, int32_t y) { assert(!(o & ~0x3f)); assert(!(t & ~0x1f)); @@ -1516,8 +1516,8 @@ _f31(jit_state_t *_jit, jit_int32_t o, jit_int32_t t, } static void -_f33(jit_state_t *_jit, jit_int32_t o, jit_int32_t x, - jit_int32_t r, jit_int32_t y, jit_int32_t z, jit_int32_t u) +_f33(jit_state_t *_jit, int32_t o, int32_t x, + int32_t r, int32_t y, int32_t z, int32_t u) { assert(!(o & ~0x3f)); assert(!(x & ~0x1f)); @@ -1529,8 +1529,8 @@ _f33(jit_state_t *_jit, jit_int32_t o, jit_int32_t x, } static void -_f34(jit_state_t *_jit, jit_int32_t o, jit_int32_t o1, - jit_int32_t x, jit_int32_t sf, jit_int32_t n, jit_int32_t o2) +_f34(jit_state_t *_jit, int32_t o, int32_t o1, + int32_t x, int32_t sf, int32_t n, int32_t o2) { assert(!(o & ~0x3f)); assert(!(o1 & ~0x7fff)); @@ -1542,8 +1542,8 @@ _f34(jit_state_t *_jit, jit_int32_t o, jit_int32_t o1, } static void -_f35(jit_state_t *_jit, jit_int32_t o, jit_int32_t op, - jit_int32_t x, jit_int32_t sf, jit_int32_t n, jit_int32_t t) +_f35(jit_state_t *_jit, int32_t o, int32_t op, + int32_t x, int32_t sf, int32_t n, int32_t t) { assert(!(o & ~0x3f)); assert(!(op & ~0x7fff)); @@ -1555,8 +1555,8 @@ _f35(jit_state_t *_jit, jit_int32_t o, jit_int32_t op, } static void -_f36(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, jit_int32_t o1, - jit_int32_t x, jit_int32_t sf, jit_int32_t n, jit_int32_t o2) +_f36(jit_state_t *_jit, int32_t o, int32_t r, int32_t o1, + int32_t x, int32_t sf, int32_t n, int32_t o2) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -1569,9 +1569,9 @@ _f36(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, jit_int32_t o1, } static void -_f37(jit_state_t *_jit, jit_int32_t o, jit_int32_t r2, - jit_int32_t r1, jit_int32_t o1, jit_int32_t x, - jit_int32_t sf, jit_int32_t n, jit_int32_t o2) +_f37(jit_state_t *_jit, int32_t o, int32_t r2, + int32_t r1, int32_t o1, int32_t x, + int32_t sf, int32_t n, int32_t o2) { assert(!(o & ~0x3f)); assert(!(r2 & ~0x1f)); @@ -1585,8 +1585,8 @@ _f37(jit_state_t *_jit, jit_int32_t o, jit_int32_t r2, } static void -_f38(jit_state_t *_jit, jit_int32_t o, - jit_int32_t s, jit_int32_t u, jit_int32_t n) +_f38(jit_state_t *_jit, int32_t o, + int32_t s, int32_t u, int32_t n) { assert(!(o & ~0x3f)); assert(!(s & ~0x3fffff)); @@ -1596,7 +1596,7 @@ _f38(jit_state_t *_jit, jit_int32_t o, } static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { for (; i0 > 0; i0 -= 4) NOP(); @@ -1604,14 +1604,14 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) COPY(r1, r0); } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { if (i0 >= -8192 && i0 <= 8191) LDI(i0, r0); @@ -1624,7 +1624,7 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; w = _jit->pc.w; @@ -1634,9 +1634,9 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -1024 && i0 <= 1023) ADDI(i0, r1, r0); else { @@ -1648,9 +1648,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); addcr(r0, r1, rn(reg)); @@ -1658,9 +1658,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); addxr(r0, r1, rn(reg)); @@ -1668,9 +1668,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -1023 && i0 <= 1024) addi(r0, r1, -i0); else { @@ -1682,9 +1682,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); subcr(r0, r1, rn(reg)); @@ -1692,9 +1692,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); subxr(r0, r1, rn(reg)); @@ -1702,9 +1702,9 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -1024 && i0 <= 1023) SUBI(i0, r1, r0); else { @@ -1716,9 +1716,9 @@ _rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0, t1; + int32_t t0, t1; t0 = jit_get_reg(jit_class_fpr); t1 = jit_get_reg(jit_class_fpr); stxi(alloca_offset - 8, _FP_REGNO, r1); @@ -1733,9 +1733,9 @@ _mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (r0 != r1) { movi(r0, i0); mulr(r0, r1, r0); @@ -1756,7 +1756,7 @@ __llmul(int u, int v) static void _qmulr(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { movr(_R26_REGNO, r2); movr(_R25_REGNO, r3); @@ -1767,7 +1767,7 @@ _qmulr(jit_state_t *_jit, static void _qmuli(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { movr(_R26_REGNO, r2); movi(_R25_REGNO, i0); @@ -1778,9 +1778,9 @@ _qmuli(jit_state_t *_jit, static void _qmulr_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t t0, t1; + int32_t t0, t1; t0 = jit_get_reg(jit_class_fpr); t1 = jit_get_reg(jit_class_fpr); stxi(alloca_offset - 8, _FP_REGNO, r2); @@ -1797,9 +1797,9 @@ _qmulr_u(jit_state_t *_jit, static void _qmuli_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qmulr_u(r0, r1, r2, rn(reg)); @@ -1813,7 +1813,7 @@ __idiv(int u, int v) } static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_R26_REGNO, r1); movr(_R25_REGNO, r2); @@ -1822,7 +1822,7 @@ _divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_R26_REGNO, r1); movi(_R25_REGNO, i0); @@ -1837,7 +1837,7 @@ __udiv(unsigned int u, unsigned int v) } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_R26_REGNO, r1); movr(_R25_REGNO, r2); @@ -1846,7 +1846,7 @@ _divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_R26_REGNO, r1); movi(_R25_REGNO, i0); @@ -1861,7 +1861,7 @@ __irem(int u, int v) } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_R26_REGNO, r1); movr(_R25_REGNO, r2); @@ -1870,7 +1870,7 @@ _remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_R26_REGNO, r1); movi(_R25_REGNO, i0); @@ -1885,7 +1885,7 @@ __urem(unsigned int u, unsigned int v) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { movr(_R26_REGNO, r1); movr(_R25_REGNO, r2); @@ -1894,7 +1894,7 @@ _remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(_R26_REGNO, r1); movi(_R25_REGNO, i0); @@ -1913,7 +1913,7 @@ __idivrem(int u, int v) static void _qdivr(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { movr(_R26_REGNO, r2); movr(_R25_REGNO, r3); @@ -1924,7 +1924,7 @@ _qdivr(jit_state_t *_jit, static void _qdivi(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { movr(_R26_REGNO, r2); movi(_R25_REGNO, i0); @@ -1944,7 +1944,7 @@ __udivrem(unsigned int u, unsigned int v) static void _qdivr_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { movr(_R26_REGNO, r2); movr(_R25_REGNO, r3); @@ -1955,7 +1955,7 @@ _qdivr_u(jit_state_t *_jit, static void _qdivi_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { movr(_R26_REGNO, r2); movi(_R25_REGNO, i0); @@ -1965,9 +1965,9 @@ _qdivi_u(jit_state_t *_jit, } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); andr(r0, r1, rn(reg)); @@ -1975,9 +1975,9 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); orr(r0, r1, rn(reg)); @@ -1985,9 +1985,9 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); xorr(r0, r1, rn(reg)); @@ -1995,7 +1995,7 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_lshr(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { SUBI(0x1f, r2, _R1_REGNO); MTSAR(_R1_REGNO); @@ -2003,7 +2003,7 @@ _lshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_rshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_rshr(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { SUBI(0x1f, r2, _R1_REGNO); MTSAR(_R1_REGNO); @@ -2011,7 +2011,7 @@ _rshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_rshr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_rshr_u(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { SUBI(0x1f, r2, _R1_REGNO); MTSAR(_R1_REGNO); @@ -2020,7 +2020,7 @@ _rshr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) static void _cmpr(jit_state_t *_jit, jit_word_t c, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { CMPCLR_(c, r1, r2, r0); LDI(1, r0); @@ -2028,9 +2028,9 @@ _cmpr(jit_state_t *_jit, jit_word_t c, static void _cmpi(jit_state_t *_jit, jit_word_t c, jit_word_t ci, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) + int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) CMPICLR_(ci, i0, r1, r0); else { @@ -2043,37 +2043,37 @@ _cmpi(jit_state_t *_jit, jit_word_t c, jit_word_t ci, } static void -_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_uc(r0, r1); extr_c(r0, r0); } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { ldi_uc(r0, i0); extr_c(r0, r0); } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { ldxr_uc(r0, r1, r2); extr_c(r0, r0); } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_uc(r0, r1, i0); extr_c(r0, r0); } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8182 && i0 <= 8191) LDBL(i0, _R0_REGNO, r0); else { @@ -2085,9 +2085,9 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) LDBI(i0, r1, r0); else if (i0 >= -8182 && i0 <= 8191) @@ -2101,37 +2101,37 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_us(r0, r1); extr_s(r0, r0); } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { ldi_us(r0, i0); extr_s(r0, r0); } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { ldxr_us(r0, r1, r2); extr_s(r0, r0); } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_us(r0, r1, i0); extr_s(r0, r0); } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8182 && i0 <= 8191) LDHL(i0, _R0_REGNO, r0); else { @@ -2143,9 +2143,9 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) LDHI(i0, r1, r0); else if (i0 >= -8182 && i0 <= 8191) @@ -2159,9 +2159,9 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8182 && i0 <= 8191) LDWL(i0, _R0_REGNO, r0); else { @@ -2173,9 +2173,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) LDWI(i0, r1, r0); else if (i0 >= -8182 && i0 <= 8191) @@ -2189,9 +2189,9 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8182 && i0 <= 8191) STBL(r0, i0, _R0_REGNO); else { @@ -2203,9 +2203,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_c(rn(reg), r2); @@ -2213,9 +2213,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) STBI(r1, i0, r0); else if (i0 >= -8182 && i0 <= 8191) @@ -2229,9 +2229,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8182 && i0 <= 8191) STHL(r0, i0, _R0_REGNO); else { @@ -2243,9 +2243,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_s(rn(reg), r2); @@ -2253,9 +2253,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) STHI(r1, i0, r0); else if (i0 >= -8182 && i0 <= 8191) @@ -2269,9 +2269,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8182 && i0 <= 8191) STWL(r0, i0, _R0_REGNO); else { @@ -2283,9 +2283,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_i(rn(reg), r2); @@ -2293,9 +2293,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) STWI(r1, i0, r0); else if (i0 >= -8182 && i0 <= 8191) @@ -2310,7 +2310,7 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) static jit_word_t _bcmpr(jit_state_t *_jit, jit_word_t c, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; w = _jit->pc.w; @@ -2321,10 +2321,10 @@ _bcmpr(jit_state_t *_jit, jit_word_t c, static jit_word_t _bcmpi(jit_state_t *_jit, jit_word_t c, jit_word_t ci, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -16 && i1 <= 15) { w = _jit->pc.w; CMPIB_N_(ci, i1, r0, ((i0 - w) >> 2) - 2); @@ -2342,10 +2342,10 @@ _bcmpi(jit_state_t *_jit, jit_word_t c, jit_word_t ci, static jit_word_t _bmxr(jit_state_t *_jit, jit_bool_t c, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); andr(rn(reg), r0, r1); w = c ? bnei(i0, rn(reg), 0) : beqi(i0, rn(reg), 0); @@ -2355,10 +2355,10 @@ _bmxr(jit_state_t *_jit, jit_bool_t c, static jit_word_t _bmxi(jit_state_t *_jit, jit_bool_t c, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); andr(rn(reg), r0, rn(reg)); @@ -2368,7 +2368,7 @@ _bmxi(jit_state_t *_jit, jit_bool_t c, } static jit_word_t -_boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_boaddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; w = _jit->pc.w; @@ -2378,10 +2378,10 @@ _boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_boaddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -16 && i1 <= 15) { w = _jit->pc.w; ADDIB_N_SV(i1, r0, ((i0 - w) >> 2) - 2); @@ -2397,7 +2397,7 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_boaddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; w = _jit->pc.w; @@ -2407,10 +2407,10 @@ _boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_boaddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -16 && i1 <= 15) { w = _jit->pc.w; ADDIB_N_UV(i1, r0, ((i0 - w) >> 2) - 2); @@ -2426,7 +2426,7 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxaddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; w = _jit->pc.w; @@ -2436,10 +2436,10 @@ _bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxaddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -16 && i1 <= 15) { w = _jit->pc.w; ADDIB_N_NSV(i1, r0, ((i0 - w) >> 2) - 2); @@ -2455,7 +2455,7 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxaddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; w = _jit->pc.w; @@ -2465,10 +2465,10 @@ _bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxaddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -16 && i1 <= 15) { w = _jit->pc.w; ADDIB_N_NUV(i1, r0, ((i0 - w) >> 2) - 2); @@ -2484,7 +2484,7 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bosubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; SUB_NSV(r0, r1, r0); @@ -2496,14 +2496,14 @@ _bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bosubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { movi(_R1_REGNO, i1); return (bosubr(i0, r0, _R1_REGNO)); } static jit_word_t -_bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bosubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { SUB(r0, r1, r0); SUB_B(_R0_REGNO, _R0_REGNO, _R1_REGNO); @@ -2511,7 +2511,7 @@ _bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bosubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { movi(_R1_REGNO, i1); SUB(r0, _R1_REGNO, r0); @@ -2520,7 +2520,7 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxsubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; SUB_SV(r0, r1, r0); @@ -2532,14 +2532,14 @@ _bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxsubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { movi(_R1_REGNO, i1); return (bxsubr(i0, r0, _R1_REGNO)); } static jit_word_t -_bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxsubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { SUB(r0, r1, r0); SUB_B(_R0_REGNO, _R0_REGNO, _R1_REGNO); @@ -2547,7 +2547,7 @@ _bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxsubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { movi(_R1_REGNO, i1); SUB(r0, _R1_REGNO, r0); @@ -2556,7 +2556,7 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) +_jmpr(jit_state_t *_jit, int32_t r0) { BV_N(_R0_REGNO, r0); } @@ -2584,7 +2584,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { jit_word_t dyn; jit_word_t imm; @@ -2640,13 +2640,13 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) return (w); } -static jit_int32_t gr[] = { +static int32_t gr[] = { _R4, _R5, _R6, _R7, _R8, _R9, _R10, _R11, _R12, _R13, _R14, _R15, _R16, _R17, _R18 }; -static jit_int32_t fr[] = { +static int32_t fr[] = { _F12, _F13, _F14, _F15, _F16, _F17, _F18, _F19, _F20, _F21 }; @@ -2654,7 +2654,7 @@ static jit_int32_t fr[] = { static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t regno; + int32_t regno; jit_word_t offset; if (_jitc->function->define_frame || _jitc->function->assume_frame) { @@ -2707,7 +2707,7 @@ _prolog(jit_state_t *_jit, jit_node_t *node) static void _epilog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t regno; + int32_t regno; jit_word_t offset; if (_jitc->function->assume_frame) @@ -2735,14 +2735,14 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { /* Initialize stack pointer to the first stack argument. */ addi(r0, _FP_REGNO, params_offset - _jitc->function->vagp * 4); } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); @@ -2758,7 +2758,7 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { jit_word_t w; union { - jit_uint32_t *i; + uint32_t *i; jit_word_t w; } u; u.w = instr; diff --git a/libguile/lightning/lib/jit_hppa-fpu.c b/libguile/lightning/jit/hppa-fpu.c index c0e85bab4..98c39ce5c 100644 --- a/libguile/lightning/lib/jit_hppa-fpu.c +++ b/libguile/lightning/jit/hppa-fpu.c @@ -28,44 +28,44 @@ #endif #define f39(o,b,x,t) _f39(_jit,o,b,x,t) -static void _f39(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f39(jit_state_t*,int32_t,int32_t,int32_t,int32_t); #define f40(o,b,x,r) _f40(_jit,o,b,x,r) -static void _f40(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) +static void _f40(jit_state_t*,int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f41(o,b,x,t) _f41(_jit,o,b,x,t) -static void _f41(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f41(jit_state_t*,int32_t,int32_t,int32_t,int32_t); #define f42(o,b,i,r) _f42(_jit,o,b,i,r) -static void _f42(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f42(jit_state_t*,int32_t,int32_t,int32_t,int32_t); #define f43(o,b,t,i) f1(o,b,t,i) #define f45(o,r,a,b,fmt,c,d,e,t) _f45(_jit,o,r,a,b,fmt,c,d,e,t) -static void _f45(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f45(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f46(o,r,a,s,df,sf,b,c,d,t) _f46(_jit,o,r,a,s,df,sf,b,c,d,t) -static void _f46(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f46(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f47(o,r1,r2,a,fmt,b,c,d,t) f47_48(o,r1,r2,a,fmt,b,c,d,t) #define f48(o,r1,r2,a,fmt,b,c,d,t) f47_48(o,r1,r2,a,fmt,b,c,d,t) #define f47_48(o,r1,r2,y,fmt,b,c,d,t) _f47_48(_jit,o,r1,r2,y,fmt,b,c,d,t) -static void _f47_48(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f47_48(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f49(o,r,a,b,c,f,d,e,g,h,i,t) f49_52(o,r,a,b,c,f,d,e,g,h,i,t) #define f51(o,r1,r2,y,a,f,b,d,e,g,h,c) f49_52(o,r1,r2,y,a,f,b,d,e,g,h,c) #define f52(o,r1,r2,a,b,f,c,d,e,g,h,t) f49_52(o,r1,r2,a,b,f,c,d,e,g,h,t) #define f49_52(o,r1,r2,y,v,f,a,b,u,c,d,t) _f49_52(_jit,o,r1,r2,y,v,f,a,b,u,c,d,t) -static void _f49_52(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f49_52(jit_state_t*,int32_t, + int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t); #define f53(o,r1,r2,ta,ra,f,tm) _f53(_jit,o,r1,r2,ta,ra,f,tm) -static void _f53(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f53(jit_state_t*,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define f54(o,r1,r2,a,b,f,c,d,e,g,t) _f54(_jit,o,r1,r2,a,b,f,c,d,e,g,t) -static void _f54(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused; +static void _f54(jit_state_t*,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t,int32_t) maybe_unused; #define FABS_(f,r,t) f49(0xe,r,0,3,0,f,0,0,0,0,0,t) #define FABS_S(r,t) FABS_(0,r,t) #define FABS_D(r,t) FABS_(1,r,t) @@ -271,67 +271,67 @@ static void _f54(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, #define sqrtr_f(r0,r1) FSQRT_S(r1,r0) #define sqrtr_d(r0,r1) FSQRT_D(r1,r0) #define extr_f(r0,r1) _extr_f(_jit,r0,r1) -static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_f(jit_state_t*,int32_t,int32_t); #define extr_d(r0,r1) _extr_d(_jit,r0,r1) -static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_d(jit_state_t*,int32_t,int32_t); #define extr_f_d(r0,r1) FCNVFF_S_D(r1,r0) #define extr_d_f(r0,r1) FCNVFF_D_S(r1,r0) #define truncr_f(r0,r1) truncr_f_i(r0,r1) #define truncr_f_i(r0,r1) _truncr_f_i(_jit,r0,r1) -static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_f_i(jit_state_t*,int32_t,int32_t); #define truncr_d(r0,r1) truncr_d_i(r0,r1) #define truncr_d_i(r0,r1) _truncr_d_i(_jit,r0,r1) -static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_i(jit_state_t*,int32_t,int32_t); #define movr_f(r0,r1) FCPY_S(r1,r0) #define movi_f(r0,i0) _movi_f(_jit,r0,i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t*); #define movr_d(r0,r1) FCPY_D(r1,r0) #define movi_d(r0,i0) _movi_d(_jit,r0,i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t*); #define absr_f(r0,r1) FABS_S(r1,r0) #define absr_d(r0,r1) FABS_D(r1,r0) #define addr_f(r0,r1,r2) FADD_S(r1,r2,r0) #define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0) -static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define addr_d(r0,r1,r2) FADD_D(r1,r2,r0) #define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0) -static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define subr_f(r0,r1,r2) FSUB_S(r1,r2,r0) #define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0) -static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define subr_d(r0,r1,r2) FSUB_D(r1,r2,r0) #define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0) -static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1) #define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0) -static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1) #define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0) -static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define mulr_f(r0,r1,r2) FMPY_S(r1,r2,r0) #define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0) -static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define mulr_d(r0,r1,r2) FMPY_D(r1,r2,r0) #define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0) -static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define divr_f(r0,r1,r2) FDIV_S(r1,r2,r0) #define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0) -static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define divr_d(r0,r1,r2) FDIV_D(r1,r2,r0) #define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0) -static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define cmpr_f(c,r0,r1,r2) _cmpr_f(_jit,c,r0,r1,r2) static void _cmpr_f(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); #define cmpi_f(c,r0,r1,i0) _cmpi_f(_jit,c,r0,r1,i0) static void _cmpi_f(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_float32_t*); + int32_t,int32_t,jit_float32_t*); #define cmpr_d(c,r0,r1,r2) _cmpr_d(_jit,c,r0,r1,r2) static void _cmpr_d(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t); #define cmpi_d(c,r0,r1,i0) _cmpi_d(_jit,c,r0,r1,i0) static void _cmpi_d(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_float64_t*); + int32_t,int32_t,jit_float64_t*); #define ltr_f(r0,r1,r2) cmpr_f(FCMP_LT,r0,r1,r2) #define lti_f(r0,r1,i0) cmpi_f(FCMP_LT,r0,r1,i0) #define ltr_d(r0,r1,r2) cmpr_d(FCMP_LT,r0,r1,r2) @@ -390,47 +390,47 @@ static void _cmpi_d(jit_state_t*,jit_word_t, #define unordi_d(r0,r1,i0) cmpi_d(FCMP_UNORD,r0,r1,i0) #define ldr_f(r0,r1) FLDWI(0,r1,r0) #define ldi_f(r0,i0) _ldi_f(_jit,r0,i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); #define ldxr_f(r0,r1,r2) FLDW(r2,r1,r0) #define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldr_d(r0,r1) FLDDI(0,r1,r0) #define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); #define ldxr_d(r0,r1,r2) FLDD(r2,r1,r0) #define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); #define str_f(r0,r1) FSTWI(r1,0,r0) #define sti_f(i0,r0) _sti_f(_jit,i0,r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); #if FSTXR # define stxr_f(r0,r1,r2) FSTW(r2,r1,r0) # define stxr_d(r0,r1,r2) FSTD(r2,r1,r0) #else # define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); #endif #define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); #define str_d(r0,r1) FSTDI(r1,0,r0) #define sti_d(i0,r0) _sti_d(_jit,i0,r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); #define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bcmpr_f(c,i0,r0,r1) _bcmpr_f(_jit,c,i0,r0,r1) static jit_word_t _bcmpr_f(jit_state_t*,jit_word_t, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); #define bcmpi_f(c,i0,r0,i1) _bcmpi_f(_jit,c,i0,r0,i1) static jit_word_t _bcmpi_f(jit_state_t*,jit_word_t, - jit_word_t,jit_int32_t,jit_float32_t*); + jit_word_t,int32_t,jit_float32_t*); #define bcmpr_d(c,i0,r0,r1) _bcmpr_d(_jit,c,i0,r0,r1) static jit_word_t _bcmpr_d(jit_state_t*,jit_word_t, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); #define bcmpi_d(c,i0,r0,i1) _bcmpi_d(_jit,c,i0,r0,i1) static jit_word_t _bcmpi_d(jit_state_t*,jit_word_t, - jit_word_t,jit_int32_t,jit_float64_t*); + jit_word_t,int32_t,jit_float64_t*); #define bltr_f(i0,r0,r1) bcmpr_f(FCMP_LT,i0,r0,r1) #define blti_f(i0,r0,i1) bcmpi_f(FCMP_LT,i0,r0,i1) #define bltr_d(i0,r0,r1) bcmpr_d(FCMP_LT,i0,r0,r1) @@ -488,13 +488,13 @@ static jit_word_t _bcmpi_d(jit_state_t*,jit_word_t, #define bunordr_d(i0,r0,r1) bcmpr_d(FCMP_UNORD,i0,r0,r1) #define bunordi_d(i0,r0,i1) bcmpi_d(FCMP_UNORD,i0,r0,i1) #define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE static void -_f39(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t x, jit_int32_t t) +_f39(jit_state_t *_jit, int32_t o, + int32_t b, int32_t x, int32_t t) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -504,8 +504,8 @@ _f39(jit_state_t *_jit, jit_int32_t o, } static void -_f40(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t x, jit_int32_t r) +_f40(jit_state_t *_jit, int32_t o, + int32_t b, int32_t x, int32_t r) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -515,8 +515,8 @@ _f40(jit_state_t *_jit, jit_int32_t o, } static void -_f41(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t x, jit_int32_t t) +_f41(jit_state_t *_jit, int32_t o, + int32_t b, int32_t x, int32_t t) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -526,8 +526,8 @@ _f41(jit_state_t *_jit, jit_int32_t o, } static void -_f42(jit_state_t *_jit, jit_int32_t o, - jit_int32_t b, jit_int32_t i, jit_int32_t r) +_f42(jit_state_t *_jit, int32_t o, + int32_t b, int32_t i, int32_t r) { assert(!(o & ~0x3f)); assert(!(b & ~0x1f)); @@ -537,9 +537,9 @@ _f42(jit_state_t *_jit, jit_int32_t o, } static void -_f45(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r, jit_int32_t a, jit_int32_t b, jit_int32_t fmt, - jit_int32_t c, jit_int32_t d, jit_int32_t e, jit_int32_t t) +_f45(jit_state_t *_jit, int32_t o, + int32_t r, int32_t a, int32_t b, int32_t fmt, + int32_t c, int32_t d, int32_t e, int32_t t) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -554,9 +554,9 @@ _f45(jit_state_t *_jit, jit_int32_t o, } static void -_f46(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, - jit_int32_t a, jit_int32_t s, jit_int32_t df, jit_int32_t sf, - jit_int32_t b, jit_int32_t c, jit_int32_t d, jit_int32_t t) +_f46(jit_state_t *_jit, int32_t o, int32_t r, + int32_t a, int32_t s, int32_t df, int32_t sf, + int32_t b, int32_t c, int32_t d, int32_t t) { assert(!(o & ~0x3f)); assert(!(r & ~0x1f)); @@ -573,9 +573,9 @@ _f46(jit_state_t *_jit, jit_int32_t o, jit_int32_t r, } static void -_f47_48(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r2, jit_int32_t r1, jit_int32_t y, jit_int32_t fmt, - jit_int32_t a, jit_int32_t b, jit_int32_t c, jit_int32_t t) +_f47_48(jit_state_t *_jit, int32_t o, + int32_t r2, int32_t r1, int32_t y, int32_t fmt, + int32_t a, int32_t b, int32_t c, int32_t t) { assert(!(o & ~0x3f)); assert(!(r2 & ~0x1f)); @@ -590,10 +590,10 @@ _f47_48(jit_state_t *_jit, jit_int32_t o, } static void -_f49_52(jit_state_t *_jit, jit_int32_t o, - jit_int32_t r1, jit_int32_t r2, jit_int32_t y, - jit_int32_t v, jit_int32_t f, jit_int32_t a, jit_int32_t b, - jit_int32_t u, jit_int32_t c, jit_int32_t d, jit_int32_t t) +_f49_52(jit_state_t *_jit, int32_t o, + int32_t r1, int32_t r2, int32_t y, + int32_t v, int32_t f, int32_t a, int32_t b, + int32_t u, int32_t c, int32_t d, int32_t t) { assert(!(o & ~0x3f)); assert(!(r1 & ~0x1f)); @@ -612,8 +612,8 @@ _f49_52(jit_state_t *_jit, jit_int32_t o, } static void -_f53(jit_state_t *_jit, jit_int32_t o, jit_int32_t r1, jit_int32_t r2, - jit_int32_t ta, jit_int32_t ra, jit_int32_t f, jit_int32_t tm) +_f53(jit_state_t *_jit, int32_t o, int32_t r1, int32_t r2, + int32_t ta, int32_t ra, int32_t f, int32_t tm) { assert(!(o & ~0x3f)); assert(!(r1 & ~0x1f)); @@ -629,9 +629,9 @@ _f53(jit_state_t *_jit, jit_int32_t o, jit_int32_t r1, jit_int32_t r2, } static void -_f54(jit_state_t *_jit, jit_int32_t o, jit_int32_t r1, jit_int32_t r2, - jit_int32_t a, jit_int32_t b, jit_int32_t f, jit_int32_t c, - jit_int32_t d, jit_int32_t e, jit_int32_t g, jit_int32_t t) +_f54(jit_state_t *_jit, int32_t o, int32_t r1, int32_t r2, + int32_t a, int32_t b, int32_t f, int32_t c, + int32_t d, int32_t e, int32_t g, int32_t t) { assert(!(o & ~0x3f)); assert(!(r1 & ~0x1f)); @@ -649,7 +649,7 @@ _f54(jit_state_t *_jit, jit_int32_t o, jit_int32_t r1, jit_int32_t r2, } static void -_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi(alloca_offset - 8, _FP_REGNO, r1); ldxi_f(r0, _FP_REGNO, alloca_offset - 8); @@ -657,7 +657,7 @@ _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi(alloca_offset - 8, _FP_REGNO, r1); ldxi_f(r0, _FP_REGNO, alloca_offset - 8); @@ -665,9 +665,9 @@ _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); FCNVXT_S_S(r1, rn(reg)); stxi_f(alloca_offset - 8, _FP_REGNO, rn(reg)); @@ -676,9 +676,9 @@ _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); FCNVXT_D_S(r1, rn(reg)); stxi_d(alloca_offset - 8, _FP_REGNO, rn(reg)); @@ -687,13 +687,13 @@ _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.f = *i0; @@ -708,14 +708,14 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { - jit_int32_t ii[2]; + int32_t ii[2]; jit_word_t w; jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; data.d = *i0; if (_jitc->no_data) { @@ -735,10 +735,10 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) #define fpr_opi(name, type, size) \ static void \ _##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ + int32_t r0, int32_t r1, \ jit_float##size##_t *i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_##type(rn(reg), i0); \ name##r_##type(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -759,7 +759,7 @@ dopi(div) static void _cmpr_f(jit_state_t *_jit, jit_word_t c, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { LDI(0, r0); FCMP_S_(r1, r2, c); @@ -769,9 +769,9 @@ _cmpr_f(jit_state_t *_jit, jit_word_t c, static void _cmpi_f(jit_state_t *_jit, jit_word_t c, - jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0) + int32_t r0, int32_t r1, jit_float32_t *i0) { - jit_int32_t reg = jit_get_reg(jit_class_fpr); + int32_t reg = jit_get_reg(jit_class_fpr); movi_f(rn(reg), i0); cmpr_f(c, r0, r1, rn(reg)); jit_unget_reg(reg); @@ -779,7 +779,7 @@ _cmpi_f(jit_state_t *_jit, jit_word_t c, static void _cmpr_d(jit_state_t *_jit, jit_word_t c, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) + int32_t r0, int32_t r1, int32_t r2) { LDI(0, r0); FCMP_D_(r1, r2, c); @@ -789,18 +789,18 @@ _cmpr_d(jit_state_t *_jit, jit_word_t c, static void _cmpi_d(jit_state_t *_jit, jit_word_t c, - jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) + int32_t r0, int32_t r1, jit_float64_t *i0) { - jit_int32_t reg = jit_get_reg(jit_class_fpr); + int32_t reg = jit_get_reg(jit_class_fpr); movi_d(rn(reg), i0); cmpr_d(c, r0, r1, rn(reg)); jit_unget_reg(reg); } static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 3)); if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 6)) FLDWL(i0, _R0_REGNO, r0); @@ -813,9 +813,9 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) FLDWI(i0, r1, r0); /* |im11a|0|t|i| */ @@ -830,9 +830,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 7)); if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 14)) FLDDL(i0, _R0_REGNO, r0); @@ -845,9 +845,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) FLDDI(i0, r1, r0); /* |im10a|m|a|1|i| */ @@ -862,9 +862,9 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 3)); if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 6)) FSTWL(r0, i0, _R0_REGNO); @@ -878,9 +878,9 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) #if !FSTXR static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_f(rn(reg), r2); @@ -888,9 +888,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_d(rn(reg), r2); @@ -899,9 +899,9 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) #endif static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) FSTWI(r1, i0, r0); /* |im11a|0|t|i| */ @@ -921,9 +921,9 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; assert(!(i0 & 7)); if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 14)) FSTDL(r0, i0, _R0_REGNO); @@ -936,9 +936,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 >= -16 && i0 <= 15) FSTDI(r1, i0, r0); /* |im10a|m|a|1|i| */ @@ -959,7 +959,7 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) static jit_word_t _bcmpr_f(jit_state_t *_jit, jit_word_t c, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_S_(r0, r1, c); @@ -972,10 +972,10 @@ _bcmpr_f(jit_state_t *_jit, jit_word_t c, static jit_word_t _bcmpi_f(jit_state_t *_jit, jit_word_t c, - jit_word_t i0, jit_int32_t r0, jit_float32_t *i1) + jit_word_t i0, int32_t r0, jit_float32_t *i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi_f(rn(reg), i1); FCMP_S_(r0, rn(reg), c); @@ -989,7 +989,7 @@ _bcmpi_f(jit_state_t *_jit, jit_word_t c, static jit_word_t _bcmpr_d(jit_state_t *_jit, jit_word_t c, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_D_(r0, r1, c); @@ -1002,10 +1002,10 @@ _bcmpr_d(jit_state_t *_jit, jit_word_t c, static jit_word_t _bcmpi_d(jit_state_t *_jit, jit_word_t c, - jit_word_t i0, jit_int32_t r0, jit_float64_t *i1) + jit_word_t i0, int32_t r0, jit_float64_t *i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi_d(rn(reg), i1); FCMP_D_(r0, rn(reg), c); @@ -1018,9 +1018,9 @@ _bcmpi_d(jit_state_t *_jit, jit_word_t c, } static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function->self.call & jit_call_varargs); diff --git a/libguile/lightning/lib/jit_hppa.c b/libguile/lightning/jit/hppa.c index 558524b41..38c75e0ca 100644 --- a/libguile/lightning/lib/jit_hppa.c +++ b/libguile/lightning/jit/hppa.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2017 Free Software Foundation, Inc. + * Copyright (C) 2013-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -17,14 +17,11 @@ * Paulo Cesar Pereira de Andrade */ -#include <lightning.h> -#include <lightning/jit_private.h> - #define jit_arg_reg_p(i) (i >= 0 && i < 4) #define PROTO 1 -# include "jit_hppa-cpu.c" -# include "jit_hppa-fpu.c" +# include "hppa-cpu.c" +# include "hppa-fpu.c" #undef PROTO /* @@ -44,7 +41,7 @@ extern void __clear_cache(void *, void *); /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { 0, "r0" }, /* Zero */ /* Not register starved, so, avoid allocating r1 and rp * due to being implicit target of ADDIL and B,L */ @@ -141,7 +138,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -161,7 +158,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = alloca_offset; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -180,10 +177,10 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { - jit_int32_t offset; + int32_t offset; assert(_jitc->function); switch (length) { case 0: case 1: @@ -208,13 +205,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -240,7 +237,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); jit_movr(JIT_RET, u); @@ -258,7 +255,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); jit_movr_f(JIT_FRET, u); @@ -276,7 +273,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); jit_movr_d(JIT_FRET, u); @@ -330,7 +327,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -341,7 +338,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); _jitc->function->self.size -= sizeof(jit_word_t); if (jit_arg_reg_p(_jitc->function->self.argi)) @@ -358,7 +355,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); _jitc->function->self.size -= sizeof(jit_word_t); if (jit_arg_reg_p(_jitc->function->self.argi)) @@ -375,7 +372,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (_jitc->function->self.argi & 1) { ++_jitc->function->self.argi; @@ -399,7 +396,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -411,7 +408,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -423,7 +420,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -435,7 +432,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -447,7 +444,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -459,7 +456,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -473,7 +470,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (v->u.w >= 0) @@ -488,7 +485,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -500,7 +497,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -514,7 +511,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (v->u.w >= 0) @@ -529,7 +526,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -541,7 +538,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -555,7 +552,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (v->u.w >= 0) @@ -570,7 +567,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr, u); @@ -588,7 +585,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -607,7 +604,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_f, u); @@ -634,7 +631,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -663,7 +660,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_d, u); @@ -700,7 +697,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -737,9 +734,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { if (spec & jit_class_gpr) { @@ -757,7 +754,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function); @@ -788,7 +785,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, JIT_RET); @@ -796,7 +793,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, JIT_RET); @@ -804,7 +801,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, JIT_RET); @@ -812,7 +809,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, JIT_RET); @@ -820,7 +817,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); jit_movr(r0, JIT_RET); @@ -828,7 +825,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_f, r0); jit_movr_f(r0, JIT_FRET); @@ -836,7 +833,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); jit_movr_d(r0, JIT_FRET); @@ -849,15 +846,15 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t patch_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1453,8 +1450,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_hppa-cpu.c" -# include "jit_hppa-fpu.c" +# include "hppa-cpu.c" +# include "hppa-fpu.c" #undef CODE void @@ -1565,7 +1562,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_fpr_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_hppa.h b/libguile/lightning/jit/hppa.h index b26e4bd68..b26e4bd68 100644 --- a/libguile/lightning/include/lightning/jit_hppa.h +++ b/libguile/lightning/jit/hppa.h diff --git a/libguile/lightning/lib/jit_ia64-cpu.c b/libguile/lightning/jit/ia64-cpu.c index 8372b2438..160f640bb 100644 --- a/libguile/lightning/lib/jit_ia64-cpu.c +++ b/libguile/lightning/jit/ia64-cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2017 Free Software Foundation, Inc. + * Copyright (C) 2013-2017, 2019 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -238,7 +238,7 @@ static void _sync(jit_state_t*); #define flush() _flush(_jit) static void _flush(jit_state_t*); #define inst(w, t) _inst(_jit, w, t) -static void _inst(jit_state_t*, jit_word_t, jit_uint8_t); +static void _inst(jit_state_t*, jit_word_t, uint8_t); #define A1(x4,x2,r3,r2,r1) _A1(_jit,0,x4,x2,r3,r2,r1) static void _A1(jit_state_t*, jit_word_t, jit_word_t,jit_word_t,jit_word_t,jit_word_t,jit_word_t); @@ -1177,146 +1177,146 @@ static void _X5(jit_state_t*,jit_word_t, #define addr(r0,r1,r2) ADD(r0,r1,r2) #define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); #define addcr(r0, r1, r2) _addcr(_jit, r0, r1, r2) -static void _addcr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _addcr(jit_state_t*, int32_t, int32_t, int32_t); #define addci(r0, r1, i0) _addci(_jit, r0, r1, i0) -static void _addci(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _addci(jit_state_t*, int32_t, int32_t, jit_word_t); # define addxr(r0, r1, r2) _addxr(_jit, r0, r1, r2) -static void _addxr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _addxr(jit_state_t*, int32_t, int32_t, int32_t); # define addxi(r0, r1, i0) _addxi(_jit, r0, r1, i0) -static void _addxi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _addxi(jit_state_t*, int32_t, int32_t, jit_word_t); #define subr(r0,r1,r2) SUB(r0,r1,r2) #define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0, r1, r2) _subcr(_jit, r0, r1, r2) -static void _subcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subcr(jit_state_t*,int32_t,int32_t,int32_t); # define subci(r0, r1, i0) _subci(_jit, r0, r1, i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0, r1, r2) _subxr(_jit, r0, r1, r2) -static void _subxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subxr(jit_state_t*,int32_t,int32_t,int32_t); # define subxi(r0, r1, i0) _subxi(_jit, r0, r1, i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); #define mulr(r0,r1,r2) _mulr(_jit,r0,r1,r2) -static void _mulr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr(jit_state_t*,int32_t,int32_t,int32_t); #define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); #define divr(r0,r1,r2) _divr(_jit,r0,r1,r2) -static void _divr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr(jit_state_t*,int32_t,int32_t,int32_t); #define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); #define divr_u(r0,r1,r2) _divr_u(_jit,r0,r1,r2) -static void _divr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_u(jit_state_t*,int32_t,int32_t,int32_t); #define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); #define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); #define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); #define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define mulh(r0,r1,r2,sign) _mulh(_jit,r0,r1,r2,sign) -static void _mulh(jit_state_t*,jit_bool_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulh(jit_state_t*,jit_bool_t,int32_t,int32_t,int32_t); #define qmulr(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,1) #define qmulr_u(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,0) #define iqmulr(r0,r1,r2,r3,sign) _iqmulr(_jit,r0,r1,r2,r3,sign) -static void _iqmulr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqmulr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); #define qmuli(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,1) #define qmuli_u(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,0) #define iqmuli(r0,r1,r2,i0,sign) _iqmuli(_jit,r0,r1,r2,i0,sign) -static void _iqmuli(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqmuli(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); #define qdivr(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,1) #define qdivr_u(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,0) #define iqdivr(r0,r1,r2,r3,sign) _iqdivr(_jit,r0,r1,r2,r3,sign) -static void _iqdivr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqdivr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); #define qdivi(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,1) #define qdivi_u(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,0) #define iqdivi(r0,r1,r2,i0,sign) _iqdivi(_jit,r0,r1,r2,i0,sign) -static void _iqdivi(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqdivi(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); #define andr(r0,r1,r2) AND(r0,r1,r2) #define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); #define orr(r0,r1,r2) OR(r0,r1,r2) #define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); #define xorr(r0,r1,r2) XOR(r0,r1,r2) #define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); #define lshr(r0,r1,r2) SHL(r0,r1,r2) #define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); #define rshr(r0,r1,r2) SHR(r0,r1,r2) #define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); #define rshr_u(r0,r1,r2) SHR_U(r0,r1,r2) #define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define ltr(r0,r1,r2) _ltr(_jit,r0,r1,r2) -static void _ltr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr(jit_state_t*,int32_t,int32_t,int32_t); #define lti(r0,r1,i0) _lti(_jit,r0,r1,i0) -static void _lti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti(jit_state_t*,int32_t,int32_t,jit_word_t); #define ltr_u(r0,r1,r2) _ltr_u(_jit,r0,r1,r2) -static void _ltr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_u(jit_state_t*,int32_t,int32_t,int32_t); #define lti_u(r0,r1,i0) _lti_u(_jit,r0,r1,i0) -static void _lti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define ler(r0,r1,r2) _ler(_jit,r0,r1,r2) -static void _ler(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler(jit_state_t*,int32_t,int32_t,int32_t); #define lei(r0,r1,i0) _lei(_jit,r0,r1,i0) -static void _lei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei(jit_state_t*,int32_t,int32_t,jit_word_t); #define ler_u(r0,r1,r2) _ler_u(_jit,r0,r1,r2) -static void _ler_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_u(jit_state_t*,int32_t,int32_t,int32_t); #define lei_u(r0,r1,i0) _lei_u(_jit,r0,r1,i0) -static void _lei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define eqr(r0,r1,r2) _eqr(_jit,r0,r1,r2) -static void _eqr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr(jit_state_t*,int32_t,int32_t,int32_t); #define eqi(r0,r1,i0) _eqi(_jit,r0,r1,i0) -static void _eqi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _eqi(jit_state_t*,int32_t,int32_t,jit_word_t); #define ger(r0,r1,r2) _ger(_jit,r0,r1,r2) -static void _ger(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger(jit_state_t*,int32_t,int32_t,int32_t); #define gei(r0,r1,i0) _gei(_jit,r0,r1,i0) -static void _gei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei(jit_state_t*,int32_t,int32_t,jit_word_t); #define ger_u(r0,r1,r2) _ger_u(_jit,r0,r1,r2) -static void _ger_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_u(jit_state_t*,int32_t,int32_t,int32_t); #define gei_u(r0,r1,i0) _gei_u(_jit,r0,r1,i0) -static void _gei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define gtr(r0,r1,r2) _gtr(_jit,r0,r1,r2) -static void _gtr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr(jit_state_t*,int32_t,int32_t,int32_t); #define gti(r0,r1,i0) _gti(_jit,r0,r1,i0) -static void _gti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti(jit_state_t*,int32_t,int32_t,jit_word_t); #define gtr_u(r0,r1,r2) _gtr_u(_jit,r0,r1,r2) -static void _gtr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_u(jit_state_t*,int32_t,int32_t,int32_t); #define gti_u(r0,r1,i0) _gti_u(_jit,r0,r1,i0) -static void _gti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define ner(r0,r1,r2) _ner(_jit,r0,r1,r2) -static void _ner(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner(jit_state_t*,int32_t,int32_t,int32_t); #define nei(r0,r1,i0) _nei(_jit,r0,r1,i0) -static void _nei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _nei(jit_state_t*,int32_t,int32_t,jit_word_t); #define negr(r0,r1) subr(r0,0,r1) #define comr(r0,r1) ANDCMI(r0,-1,r1) #define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); #define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); #define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); #if __BYTE_ORDER == __LITTLE_ENDIAN -# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ul(r0,r1) MUX1(r0,r1,MUX_REV) +# define bswapr_us(r0,r1) _bswapr_us(_jit,r0,r1) +static void _bswapr_us(jit_state_t*,int32_t,int32_t); +# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1) +static void _bswapr_ui(jit_state_t*,int32_t,int32_t); +# define bswapr_ul(r0,r1) MUX1(r0,r1,MUX_REV) #else -# define htonr_us(r0,r1) extr_us(r0,r1) -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr_ul(r0,r1) movr(r0,r1) #endif #define extr_c(r0,r1) SXT1(r0,r1) #define extr_uc(r0,r1) ZXT1(r0,r1) @@ -1325,77 +1325,77 @@ static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); #define extr_i(r0,r1) SXT4(r0,r1) #define extr_ui(r0,r1) ZXT4(r0,r1) #define bltr(i0,r0,r1) _bltr(_jit,i0,r0,r1) -static jit_word_t _bltr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr(jit_state_t*,jit_word_t,int32_t,int32_t); #define blti(i0,r0,i1) _blti(_jit,i0,r0,i1) -static jit_word_t _blti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bltr_u(i0,r0,r1) _bltr_u(_jit,i0,r0,r1) -static jit_word_t _bltr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define blti_u(i0,r0,i1) _blti_u(_jit,i0,r0,i1) -static jit_word_t _blti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bler(i0,r0,r1) _bler(_jit,i0,r0,r1) -static jit_word_t _bler(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler(jit_state_t*,jit_word_t,int32_t,int32_t); #define blei(i0,r0,i1) _blei(_jit,i0,r0,i1) -static jit_word_t _blei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bler_u(i0,r0,r1) _bler_u(_jit,i0,r0,r1) -static jit_word_t _bler_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define blei_u(i0,r0,i1) _blei_u(_jit,i0,r0,i1) -static jit_word_t _blei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define beqr(i0,r0,r1) _beqr(_jit,i0,r0,r1) -static jit_word_t _beqr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr(jit_state_t*,jit_word_t,int32_t,int32_t); #define beqi(i0,r0,i1) _beqi(_jit,i0,r0,i1) -static jit_word_t _beqi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _beqi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bger(i0,r0,r1) _bger(_jit,i0,r0,r1) -static jit_word_t _bger(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgei(i0,r0,i1) _bgei(_jit,i0,r0,i1) -static jit_word_t _bgei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bger_u(i0,r0,r1) _bger_u(_jit,i0,r0,r1) -static jit_word_t _bger_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgei_u(i0,r0,i1) _bgei_u(_jit,i0,r0,i1) -static jit_word_t _bgei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgtr(i0,r0,r1) _bgtr(_jit,i0,r0,r1) -static jit_word_t _bgtr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgti(i0,r0,i1) _bgti(_jit,i0,r0,i1) -static jit_word_t _bgti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgtr_u(i0,r0,r1) _bgtr_u(_jit,i0,r0,r1) -static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgti_u(i0,r0,i1) _bgti_u(_jit,i0,r0,i1) -static jit_word_t _bgti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bner(i0,r0,r1) _bner(_jit,i0,r0,r1) -static jit_word_t _bner(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner(jit_state_t*,jit_word_t,int32_t,int32_t); #define bnei(i0,r0,i1) _bnei(_jit,i0,r0,i1) -static jit_word_t _bnei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bnei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bmsr(i0,r0,r1) _bmsr(_jit,i0,r0,r1) -static jit_word_t _bmsr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmsr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bmsi(i0,r0,i1) _bmsi(_jit,i0,r0,i1) -static jit_word_t _bmsi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmsi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bmcr(i0,r0,r1) _bmcr(_jit,i0,r0,r1) -static jit_word_t _bmcr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmcr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bmci(i0,r0,i1) _bmci(_jit,i0,r0,i1) -static jit_word_t _bmci(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmci(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define baddr(i0,r0,r1,cc) _baddr(_jit,i0,r0,r1,cc) static jit_word_t _baddr(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_bool_t); + int32_t,int32_t,jit_bool_t); #define baddi(i0,r0,i1,cc) _baddi(_jit,i0,r0,i1,cc) static jit_word_t _baddi(jit_state_t*,jit_word_t, - jit_int32_t,jit_word_t,jit_bool_t); + int32_t,jit_word_t,jit_bool_t); #define baddr_u(i0,r0,r1,cc) _baddr_u(_jit,i0,r0,r1,cc) static jit_word_t _baddr_u(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_bool_t); + int32_t,int32_t,jit_bool_t); #define baddi_u(i0,r0,i1,cc) _baddi_u(_jit,i0,r0,i1,cc) static jit_word_t _baddi_u(jit_state_t*,jit_word_t, - jit_int32_t,jit_word_t,jit_bool_t); + int32_t,jit_word_t,jit_bool_t); #define bsubr(i0,r0,r1,cc) _bsubr(_jit,i0,r0,r1,cc) static jit_word_t _bsubr(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_bool_t); + int32_t,int32_t,jit_bool_t); #define bsubi(i0,r0,i1,cc) _bsubi(_jit,i0,r0,i1,cc) static jit_word_t _bsubi(jit_state_t*,jit_word_t, - jit_int32_t,jit_word_t,jit_bool_t); + int32_t,jit_word_t,jit_bool_t); #define bsubr_u(i0,r0,r1,cc) _bsubr_u(_jit,i0,r0,r1,cc) static jit_word_t _bsubr_u(jit_state_t*,jit_word_t, - jit_int32_t,jit_int32_t,jit_bool_t); + int32_t,int32_t,jit_bool_t); #define bsubi_u(i0,r0,i1,cc) _bsubi_u(_jit,i0,r0,i1,cc) static jit_word_t _bsubi_u(jit_state_t*,jit_word_t, - jit_int32_t,jit_word_t,jit_bool_t); + int32_t,jit_word_t,jit_bool_t); #define boaddr(i0,r0,r1) baddr(i0,r0,r1,1) #define boaddi(i0,r0,i1) baddi(i0,r0,i1,1) #define boaddr_u(i0,r0,r1) baddr_u(i0,r0,r1,1) @@ -1413,93 +1413,93 @@ static jit_word_t _bsubi_u(jit_state_t*,jit_word_t, #define bxsubr_u(i0,r0,r1) bsubr_u(i0,r0,r1,0) #define bxsubi_u(i0,r0,i1) bsubi_u(i0,r0,i1,0) #define ldr_c(r0,r1) _ldr_c(_jit,r0,r1) -static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_c(jit_state_t*,int32_t,int32_t); #define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); #define ldr_uc(r0,r1) LD1(r0,r1) #define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); #define ldr_s(r0,r1) _ldr_s(_jit,r0,r1) -static void _ldr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_s(jit_state_t*,int32_t,int32_t); #define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); #define ldr_us(r0,r1) LD2(r0,r1) #define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); #define ldr_i(r0,r1) _ldr_i(_jit,r0,r1) -static void _ldr_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_i(jit_state_t*,int32_t,int32_t); #define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); #define ldr_ui(r0,r1) LD4(r0,r1) #define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); #define ldr_l(r0,r1) LD8(r0,r1) #define ldi_l(r0,i0) _ldi_l(_jit,r0,i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); #define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldxr_s(r0,r1,r2) _ldxr_s(_jit,r0,r1,r2) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldxr_us(r0,r1,r2) _ldxr_us(_jit,r0,r1,r2) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldxr_i(r0,r1,r2) _ldxr_i(_jit,r0,r1,r2) -static void _ldxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_i(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldxr_ui(r0,r1,r2) _ldxr_ui(_jit,r0,r1,r2) -static void _ldxr_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_ui(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldxr_l(r0,r1,r2) _ldxr_l(_jit,r0,r1,r2) -static void _ldxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_l(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_l(r0,r1,i0) _ldxi_l(_jit,r0,r1,i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); #define str_c(r0,r1) ST1(r0,r1) #define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); #define str_s(r0,r1) ST2(r0,r1) #define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); #define str_i(r0,r1) ST4(r0,r1) #define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); #define str_l(r0,r1) ST8(r0,r1) #define sti_l(i0,r0) _sti_l(_jit,i0,r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); #define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); #define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); #define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); #define stxr_l(r0,r1,r2) _stxr_l(_jit,r0,r1,r2) -static void _stxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_l(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); #define jmpr(r0) _jmpr(_jit,r0) -static void _jmpr(jit_state_t*,jit_int32_t); +static void _jmpr(jit_state_t*,int32_t); #define jmpi(i0) _jmpi(_jit,i0) static void _jmpi(jit_state_t*,jit_word_t); #define jmpi_p(i0) _jmpi_p(_jit,i0) static jit_word_t _jmpi_p(jit_state_t*,jit_word_t); #define callr(r0) _callr(_jit,r0) -static void _callr(jit_state_t*,jit_int32_t); +static void _callr(jit_state_t*,int32_t); #define calli(i0) _calli(_jit,i0) static void _calli(jit_state_t*,jit_word_t); #define calli_p(i0) _calli_p(_jit,i0) @@ -1509,9 +1509,9 @@ static void _prolog(jit_state_t*,jit_node_t*); #define epilog(node) _epilog(_jit,node) static void _epilog(jit_state_t*,jit_node_t*); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); #define patch_at(node,instr,label) _patch_at(_jit,node,instr,label) static void _patch_at(jit_state_t*,jit_code_t,jit_word_t,jit_word_t); #endif @@ -2116,7 +2116,7 @@ _flush(jit_state_t *_jit) } static void -_inst(jit_state_t *_jit, jit_word_t i, jit_uint8_t t) +_inst(jit_state_t *_jit, jit_word_t i, uint8_t t) { if (_jitc->ioff > 2) flush(); @@ -2685,7 +2685,7 @@ static void _I24(jit_state_t *_jit, jit_word_t _p, jit_word_t im) { - jit_uint8_t cc = INST_I; + uint8_t cc = INST_I; assert(!(_p & ~0x3fL)); assert(!(im & ~0xfffffffL)); TSTPRED(_p); @@ -2817,7 +2817,7 @@ static void _M3(jit_state_t *_jit, jit_word_t _p, jit_word_t x6, jit_word_t ht, jit_word_t r3, jit_word_t im, jit_word_t r1) { - jit_uint8_t cc = INST_M; + uint8_t cc = INST_M; assert(!(_p & ~0x3fL)); assert(!(x6 & ~0x3fL)); assert(!(ht & ~0x3L)); @@ -3451,7 +3451,7 @@ _X5(jit_state_t *_jit, jit_word_t _p, } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { /* patch pushargr */ if (r0 >= 120) @@ -3461,7 +3461,7 @@ _movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { /* patch pushargi */ if (r0 >= 120) @@ -3474,7 +3474,7 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; sync(); @@ -3484,9 +3484,9 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -8192 && i0 <= 8191) ADDS(r0, i0, r1); else if (!(r1 & ~3) && i0 >= -2097152 && i0 <= 2097151) @@ -3500,9 +3500,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -3519,9 +3519,9 @@ _addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -3538,9 +3538,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -3550,9 +3550,9 @@ _addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -3562,9 +3562,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); subr(r0, r1, rn(reg)); @@ -3572,9 +3572,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -3591,9 +3591,9 @@ _subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -3610,9 +3610,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -3622,9 +3622,9 @@ _subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -3634,9 +3634,9 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -128 && i0 <= 127) SUBI(r0, i0, r1); else if (!(r1 & ~3) && i0 >= -2097151 && i0 <= 2097152) @@ -3650,9 +3650,9 @@ _rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t f0, f1; + int32_t f0, f1; f0 = jit_get_reg(jit_class_fpr); f1 = jit_get_reg(jit_class_fpr); SETF_SIG(rn(f0), r1); @@ -3664,9 +3664,9 @@ _mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); mulr(r0, r1, rn(reg)); @@ -3700,7 +3700,7 @@ __umoddi3(unsigned long u, unsigned long v) #endif static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MOV(_jitc->rout, r1); MOV(_jitc->rout + 1, r2); @@ -3709,9 +3709,9 @@ _divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; switch (i0) { case 1: movr(r0, r1); @@ -3734,7 +3734,7 @@ _divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MOV(_jitc->rout, r1); MOV(_jitc->rout + 1, r2); @@ -3743,9 +3743,9 @@ _divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 1) { movr(r0, r1); return; @@ -3762,7 +3762,7 @@ _divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MOV(_jitc->rout, r1); MOV(_jitc->rout + 1, r2); @@ -3771,9 +3771,9 @@ _remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 1 || i0 == -1) { MOV(r0, GR_0); return; @@ -3785,7 +3785,7 @@ _remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MOV(_jitc->rout, r1); MOV(_jitc->rout + 1, r2); @@ -3794,9 +3794,9 @@ _remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 1) { MOV(r0, GR_0); return; @@ -3813,9 +3813,9 @@ _remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) static void _mulh(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_bool_t sign) + int32_t r0, int32_t r1, int32_t r2, jit_bool_t sign) { - jit_int32_t f0, f1; + int32_t f0, f1; f0 = jit_get_reg(jit_class_fpr); f1 = jit_get_reg(jit_class_fpr); SETF_SIG(rn(f0), r1); @@ -3830,10 +3830,10 @@ _mulh(jit_state_t *_jit, } static void -_iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; if (r0 == r2 || r0 == r3) { reg = jit_get_reg(jit_class_gpr); mulr(rn(reg), r2, r3); @@ -3848,10 +3848,10 @@ _iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqmulr(r0, r1, r2, rn(reg), sign); @@ -3859,11 +3859,11 @@ _iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { - jit_int32_t sv0, rg0; - jit_int32_t sv1, rg1; + int32_t sv0, rg0; + int32_t sv1, rg1; if (r0 == r2 || r0 == r3) { sv0 = jit_get_reg(jit_class_gpr); @@ -3895,10 +3895,10 @@ _iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqdivr(r0, r1, r2, rn(reg), sign); @@ -3906,9 +3906,9 @@ _iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -128 && i0 <= 127) ANDI(r0, i0, r1); else if (~i0 >= -128 && ~i0 <= 127) @@ -3922,9 +3922,9 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -128 && i0 <= 127) ORI(r0, i0, r1); else { @@ -3936,9 +3936,9 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -128 && i0 <= 127) XORI(r0, i0, r1); else { @@ -3951,9 +3951,9 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #if __BYTE_ORDER == __LITTLE_ENDIAN static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr); rshi(rn(t0), r1, 8); andi(r0, r1, 0xff); @@ -3964,11 +3964,11 @@ _htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr); t2 = jit_get_reg(jit_class_gpr); @@ -3992,9 +3992,9 @@ _htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) #endif static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); lshr(r0, r1, rn(reg)); @@ -4002,9 +4002,9 @@ _lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); rshr(r0, r1, rn(reg)); @@ -4012,9 +4012,9 @@ _rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); rshr_u(r0, r1, rn(reg)); @@ -4022,7 +4022,7 @@ _rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ltr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LT(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -4030,9 +4030,9 @@ _ltr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -127 && i0 <= 128) CMPI_LT(PR_7, PR_6, i0 - 1, r1); else { @@ -4046,7 +4046,7 @@ _lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ltr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LTU(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -4054,9 +4054,9 @@ _ltr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -127 && i0 <= 128) CMPI_LTU(PR_7, PR_6, i0 - 1, r1); else { @@ -4070,7 +4070,7 @@ _lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ler(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LT(PR_6, PR_7, r2, r1); MOV_p(r0, GR_0, PR_6); @@ -4078,9 +4078,9 @@ _ler(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ler(r0, r1, rn(reg)); @@ -4088,7 +4088,7 @@ _lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ler_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LTU(PR_6, PR_7, r2, r1); MOV_p(r0, GR_0, PR_6); @@ -4096,9 +4096,9 @@ _ler_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ler_u(r0, r1, rn(reg)); @@ -4106,7 +4106,7 @@ _lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_EQ(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -4114,9 +4114,9 @@ _eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_eqi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -128 && i0 <= 127) CMPI_EQ(PR_6, PR_7, i0, r1); else { @@ -4130,7 +4130,7 @@ _eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ger(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LT(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -4138,9 +4138,9 @@ _ger(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -127 && i0 <= 128) CMPI_LT(PR_7, PR_6, i0 - 1, r1); else { @@ -4154,7 +4154,7 @@ _gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ger_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LTU(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -4162,9 +4162,9 @@ _ger_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -127 && i0 <= 128) CMPI_LTU(PR_7, PR_6, i0 - 1, r1); else { @@ -4178,7 +4178,7 @@ _gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gtr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LT(PR_6, PR_7, r2, r1); MOVI_p(r0, 1, PR_6); @@ -4186,9 +4186,9 @@ _gtr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); gtr(r0, r1, rn(reg)); @@ -4196,7 +4196,7 @@ _gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gtr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_LTU(PR_6, PR_7, r2, r1); MOVI_p(r0, 1, PR_6); @@ -4204,9 +4204,9 @@ _gtr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); gtr_u(r0, r1, rn(reg)); @@ -4214,7 +4214,7 @@ _gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMP_EQ(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -4222,9 +4222,9 @@ _ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_nei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 >= -128 && i0 <= 127) CMPI_EQ(PR_6, PR_7, i0, r1); else { @@ -4238,16 +4238,16 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_uc(r0, r1); extr_c(r0, r0); } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_c(r0, rn(reg)); @@ -4255,9 +4255,9 @@ _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_uc(r0, rn(reg)); @@ -4265,16 +4265,16 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_us(r0, r1); extr_s(r0, r0); } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_s(r0, rn(reg)); @@ -4282,9 +4282,9 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_us(r0, rn(reg)); @@ -4292,16 +4292,16 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_i(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_ui(r0, r1); extr_i(r0, r0); } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_i(r0, rn(reg)); @@ -4309,9 +4309,9 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_ui(r0, rn(reg)); @@ -4319,9 +4319,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_l(r0, rn(reg)); @@ -4329,9 +4329,9 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_c(r0, rn(reg)); @@ -4339,9 +4339,9 @@ _ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4353,9 +4353,9 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_uc(r0, rn(reg)); @@ -4363,9 +4363,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4377,9 +4377,9 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_s(r0, rn(reg)); @@ -4387,9 +4387,9 @@ _ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4401,9 +4401,9 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_us(r0, rn(reg)); @@ -4411,9 +4411,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4425,9 +4425,9 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_i(r0, rn(reg)); @@ -4435,9 +4435,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4449,9 +4449,9 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_ui(r0, rn(reg)); @@ -4459,9 +4459,9 @@ _ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4473,9 +4473,9 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_l(r0, rn(reg)); @@ -4483,9 +4483,9 @@ _ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -4497,9 +4497,9 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_c(rn(reg), r0); @@ -4507,9 +4507,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_s(rn(reg), r0); @@ -4517,9 +4517,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_i(rn(reg), r0); @@ -4527,9 +4527,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_l(rn(reg), r0); @@ -4537,9 +4537,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_c(rn(reg), r2); @@ -4547,9 +4547,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r0, i0); @@ -4561,9 +4561,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_s(rn(reg), r2); @@ -4571,9 +4571,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r0, i0); @@ -4585,9 +4585,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_i(rn(reg), r2); @@ -4595,9 +4595,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r0, i0); @@ -4609,9 +4609,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_l(rn(reg), r2); @@ -4619,9 +4619,9 @@ _stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r0, i0); @@ -4633,7 +4633,7 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LT(PR_6, PR_7, r0, r1); @@ -4644,10 +4644,10 @@ _bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -127 && i1 <= 128) CMPI_LT(PR_7, PR_6, i1 - 1, r0); else { @@ -4663,7 +4663,7 @@ _blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LTU(PR_6, PR_7, r0, r1); @@ -4674,10 +4674,10 @@ _bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -127 && i1 <= 128) CMPI_LTU(PR_7, PR_6, i1 - 1, r0); else { @@ -4693,7 +4693,7 @@ _blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LT(PR_6, PR_7, r1, r0); @@ -4704,10 +4704,10 @@ _bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bler(i0, r0, rn(reg)); @@ -4716,7 +4716,7 @@ _blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LTU(PR_6, PR_7, r1, r0); @@ -4727,10 +4727,10 @@ _bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bler_u(i0, r0, rn(reg)); @@ -4739,7 +4739,7 @@ _blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_EQ(PR_6, PR_7, r0, r1); @@ -4750,10 +4750,10 @@ _beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_beqi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -128 && i1 <= 127) CMPI_EQ(PR_6, PR_7, i1, r0); else { @@ -4769,7 +4769,7 @@ _beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LT(PR_6, PR_7, r0, r1); @@ -4780,10 +4780,10 @@ _bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -127 && i1 <= 128) CMPI_LT(PR_7, PR_6, i1 - 1, r0); else { @@ -4799,7 +4799,7 @@ _bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LTU(PR_6, PR_7, r0, r1); @@ -4810,10 +4810,10 @@ _bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -127 && i1 <= 128) CMPI_LTU(PR_7, PR_6, i1 - 1, r0); else { @@ -4829,7 +4829,7 @@ _bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LT(PR_6, PR_7, r1, r0); @@ -4840,10 +4840,10 @@ _bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bgtr(i0, r0, rn(reg)); @@ -4852,7 +4852,7 @@ _bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_LTU(PR_6, PR_7, r1, r0); @@ -4863,10 +4863,10 @@ _bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bgtr_u(i0, r0, rn(reg)); @@ -4875,7 +4875,7 @@ _bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_EQ(PR_6, PR_7, r0, r1); @@ -4886,10 +4886,10 @@ _bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bnei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 >= -128 && i1 <= 127) CMPI_EQ(PR_6, PR_7, i1, r0); else { @@ -4905,10 +4905,10 @@ _bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmsr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); andr(rn(reg), r0, r1); CMPI_EQ(PR_6, PR_7, 0, rn(reg)); @@ -4920,10 +4920,10 @@ _bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmsi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i1); andr(rn(reg), r0, rn(reg)); @@ -4936,10 +4936,10 @@ _bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmcr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); andr(rn(reg), r0, r1); CMPI_EQ(PR_6, PR_7, 0, rn(reg)); @@ -4951,10 +4951,10 @@ _bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmci(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i1); andr(rn(reg), r0, rn(reg)); @@ -4967,13 +4967,13 @@ _bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_baddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_baddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; /* t1 = r0 + r1; overflow = r1 < 0 ? r0 < t1 : t1 < r0 */ t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -4996,11 +4996,11 @@ _baddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_baddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_baddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = baddr(i0, r0, rn(reg), carry); @@ -5009,12 +5009,12 @@ _baddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_baddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_baddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); addr(rn(t0), r0, r1); @@ -5030,11 +5030,11 @@ _baddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_baddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_baddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = baddr_u(i0, r0, rn(reg), carry); @@ -5043,13 +5043,13 @@ _baddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_bsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_bsubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; /* t1 = r0 - r1; overflow = 0 < r1 ? r0 < t1 : t1 < r0 */ t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -5072,11 +5072,11 @@ _bsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_bsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_bsubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bsubr(i0, r0, rn(reg), carry); @@ -5085,12 +5085,12 @@ _bsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static jit_word_t -_bsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, +_bsubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1, jit_bool_t carry) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); subr(rn(t0), r0, r1); @@ -5106,11 +5106,11 @@ _bsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1, } static jit_word_t -_bsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, +_bsubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1, jit_bool_t carry) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bsubr_u(i0, r0, rn(reg), carry); @@ -5119,7 +5119,7 @@ _bsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1, } static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) +_jmpr(jit_state_t *_jit, int32_t r0) { MOV_br_rn(BR_6, r0); BR(BR_6); @@ -5149,9 +5149,9 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); LD8_inc(rn(reg), r0, 8); MOV_br_rn(BR_6, rn(reg)); @@ -5163,7 +5163,7 @@ _callr(jit_state_t *_jit, jit_int32_t r0) static void _calli(jit_state_t *_jit, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); callr(rn(reg)); @@ -5174,7 +5174,7 @@ static jit_word_t _calli_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); w = movi_p(rn(reg), i0); callr(rn(reg)); @@ -5185,10 +5185,10 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t reg, ruse, rout; + int32_t reg, ruse, rout; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -5312,7 +5312,7 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { assert(_jitc->function->self.call & jit_call_varargs); /* Initialize va_list to the first stack argument. */ @@ -5323,7 +5323,7 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); /* Load argument. */ diff --git a/libguile/lightning/lib/jit_ia64-fpu.c b/libguile/lightning/jit/ia64-fpu.c index e152671f4..9c3146ffe 100644 --- a/libguile/lightning/lib/jit_ia64-fpu.c +++ b/libguile/lightning/jit/ia64-fpu.c @@ -432,298 +432,298 @@ static void F16_(jit_state_t*,jit_word_t, #define movr_f(r0,r1) movr_d(r0,r1) #define movr_d(r0,r1) MOVF(r0,r1) #define movi_f(r0,i0) _movi_f(_jit,r0,i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t*); #define movi_d(r0,i0) _movi_d(_jit,r0,i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t*); #define movr_w_f(r0,r1) _movr_w_f(_jit,r0,r1) -static void _movr_w_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_w_f(jit_state_t*,int32_t,int32_t); #define movr_f_w(r0,r1) _movr_f_w(_jit,r0,r1) -static void _movr_f_w(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_f_w(jit_state_t*,int32_t,int32_t); #define movr_w_d(r0,r1) _movr_w_d(_jit,r0,r1) -static void _movr_w_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_w_d(jit_state_t*,int32_t,int32_t); #define movr_d_w(r0,r1) _movr_d_w(_jit,r0,r1) -static void _movr_d_w(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_d_w(jit_state_t*,int32_t,int32_t); #define movi_f_w(r0,i0) _movi_f_w(_jit,r0,i0) -static void _movi_f_w(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f_w(jit_state_t*,int32_t,jit_float32_t*); #define movi_d_w(r0,i0) _movi_d_w(_jit,r0,i0) -static void _movi_d_w(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d_w(jit_state_t*,int32_t,jit_float64_t*); #define absr_f(r0,r1) absr_d(r0,r1) #define absr_d(r0,r1) FABS(r0,r1) #define negr_f(r0,r1) negr_d(r0,r1) #define negr_d(r0,r1) FNEG(r0,r1) #define sqrtr_f(r0,r1) _sqrtr_f(_jit,r0,r1) -static void _sqrtr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _sqrtr_f(jit_state_t*,int32_t,int32_t); #define sqrtr_d(r0,r1) _sqrtr_d(_jit,r0,r1) -static void _sqrtr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _sqrtr_d(jit_state_t*,int32_t,int32_t); #define extr_f_d(r0,r1) FNORM_D(r0,r1) #define extr_d_f(r0,r1) FNORM_S(r0,r1) #define extr_f(r0,r1) _extr_f(_jit,r0,r1) -static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_f(jit_state_t*,int32_t,int32_t); #define extr_d(r0,r1) _extr_d(_jit,r0,r1) -static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_d(jit_state_t*,int32_t,int32_t); #define truncr_f_i(r0,r1) truncr_d_l(r0,r1) #define truncr_d_i(r0,r1) truncr_d_l(r0,r1) #define truncr_f_l(r0,r1) truncr_d_l(r0,r1) #define truncr_d_l(r0,r1) _truncr_d_l(_jit,r0,r1) -static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_l(jit_state_t*,int32_t,int32_t); #define addr_f(r0,r1,r2) FADD_S(r0,r1,r2) #define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0) -static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define addr_d(r0,r1,r2) FADD_D(r0,r1,r2) #define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0) -static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define subr_f(r0,r1,r2) FSUB_S(r0,r1,r2) #define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0) -static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define subr_d(r0,r1,r2) FSUB_D(r0,r1,r2) #define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0) -static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1) #define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0) -static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1) #define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0) -static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define mulr_f(r0,r1,r2) FMPY_S(r0,r1,r2) #define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0) -static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define mulr_d(r0,r1,r2) FMPY_D(r0,r1,r2) #define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0) -static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define divr_f(r0,r1,r2) _divr_f(_jit,r0,r1,r2) -static void _divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_f(jit_state_t*,int32_t,int32_t,int32_t); #define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0) -static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define divr_d(r0,r1,r2) _divr_d(_jit,r0,r1,r2) -static void _divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_d(jit_state_t*,int32_t,int32_t,int32_t); #define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0) -static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ltr_f(r0,r1,r2) ltr_d(r0,r1,r2) #define ltr_d(r0,r1,r2) _ltr_d(_jit,r0,r1,r2) -static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_d(jit_state_t*,int32_t,int32_t,int32_t); #define lti_f(r0,r1,i0) _lti_f(_jit,r0,r1,i0) -static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define lti_d(r0,r1,i0) _lti_d(_jit,r0,r1,i0) -static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ler_f(r0,r1,r2) ler_d(r0,r1,r2) #define ler_d(r0,r1,r2) _ler_d(_jit,r0,r1,r2) -static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_d(jit_state_t*,int32_t,int32_t,int32_t); #define lei_f(r0,r1,i0) _lei_f(_jit,r0,r1,i0) -static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define lei_d(r0,r1,i0) _lei_d(_jit,r0,r1,i0) -static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define eqr_f(r0,r1,r2) eqr_d(r0,r1,r2) #define eqr_d(r0,r1,r2) _eqr_d(_jit,r0,r1,r2) -static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr_d(jit_state_t*,int32_t,int32_t,int32_t); #define eqi_f(r0,r1,i0) _eqi_f(_jit,r0,r1,i0) -static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define eqi_d(r0,r1,i0) _eqi_d(_jit,r0,r1,i0) -static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ger_f(r0,r1,r2) ger_d(r0,r1,r2) #define ger_d(r0,r1,r2) _ger_d(_jit,r0,r1,r2) -static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_d(jit_state_t*,int32_t,int32_t,int32_t); #define gei_f(r0,r1,i0) _gei_f(_jit,r0,r1,i0) -static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define gei_d(r0,r1,i0) _gei_d(_jit,r0,r1,i0) -static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define gtr_f(r0,r1,r2) gtr_d(r0,r1,r2) #define gtr_d(r0,r1,r2) _gtr_d(_jit,r0,r1,r2) -static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_d(jit_state_t*,int32_t,int32_t,int32_t); #define gti_f(r0,r1,i0) _gti_f(_jit,r0,r1,i0) -static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define gti_d(r0,r1,i0) _gti_d(_jit,r0,r1,i0) -static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ner_f(r0,r1,r2) ner_d(r0,r1,r2) #define ner_d(r0,r1,r2) _ner_d(_jit,r0,r1,r2) -static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner_d(jit_state_t*,int32_t,int32_t,int32_t); #define nei_f(r0,r1,i0) _nei_f(_jit,r0,r1,i0) -static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define nei_d(r0,r1,i0) _nei_d(_jit,r0,r1,i0) -static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define unltr_f(r0,r1,r2) unltr_d(r0,r1,r2) #define unltr_d(r0,r1,r2) _unltr_d(_jit,r0,r1,r2) -static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unltr_d(jit_state_t*,int32_t,int32_t,int32_t); #define unlti_f(r0,r1,i0) _unlti_f(_jit,r0,r1,i0) -static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define unlti_d(r0,r1,i0) _unlti_d(_jit,r0,r1,i0) -static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define unler_f(r0,r1,r2) unler_d(r0,r1,r2) #define unler_d(r0,r1,r2) _unler_d(_jit,r0,r1,r2) -static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unler_d(jit_state_t*,int32_t,int32_t,int32_t); #define unlei_f(r0,r1,i0) _unlei_f(_jit,r0,r1,i0) -static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define unlei_d(r0,r1,i0) _unlei_d(_jit,r0,r1,i0) -static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define uneqr_f(r0,r1,r2) uneqr_d(r0,r1,r2) #define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2) -static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); #define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0) -static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0) -static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define unger_f(r0,r1,r2) unger_d(r0,r1,r2) #define unger_d(r0,r1,r2) _unger_d(_jit,r0,r1,r2) -static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unger_d(jit_state_t*,int32_t,int32_t,int32_t); #define ungei_f(r0,r1,i0) _ungei_f(_jit,r0,r1,i0) -static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define ungei_d(r0,r1,i0) _ungei_d(_jit,r0,r1,i0) -static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ungtr_f(r0,r1,r2) ungtr_d(r0,r1,r2) #define ungtr_d(r0,r1,r2) _ungtr_d(_jit,r0,r1,r2) -static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ungtr_d(jit_state_t*,int32_t,int32_t,int32_t); #define ungti_f(r0,r1,i0) _ungti_f(_jit,r0,r1,i0) -static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define ungti_d(r0,r1,i0) _ungti_d(_jit,r0,r1,i0) -static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ltgtr_f(r0,r1,r2) ltgtr_d(r0,r1,r2) #define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2) -static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); #define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0) -static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0) -static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ordr_f(r0,r1,r2) ordr_d(r0,r1,r2) #define ordr_d(r0,r1,r2) _ordr_d(_jit,r0,r1,r2) -static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ordr_d(jit_state_t*,int32_t,int32_t,int32_t); #define ordi_f(r0,r1,i0) _ordi_f(_jit,r0,r1,i0) -static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define ordi_d(r0,r1,i0) _ordi_d(_jit,r0,r1,i0) -static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define unordr_f(r0,r1,r2) unordr_d(r0,r1,r2) #define unordr_d(r0,r1,r2) _unordr_d(_jit,r0,r1,r2) -static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unordr_d(jit_state_t*,int32_t,int32_t,int32_t); #define unordi_f(r0,r1,i0) _unordi_f(_jit,r0,r1,i0) -static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); #define unordi_d(r0,r1,i0) _unordi_d(_jit,r0,r1,i0) -static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define ldr_f(r0,r1) LDFS(r0,r1) #define ldi_f(r0,i0) _ldi_f(_jit,r0,i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); #define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); #define ldr_d(r0,r1) LDFD(r0,r1) #define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); #define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2) -static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); #define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); #define str_f(r0,r1) STFS(r0,r1) #define sti_f(i0,r0) _sti_f(_jit,i0,r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); #define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); #define str_d(r0,r1) STFD(r0,r1) #define sti_d(i0,r0) _sti_d(_jit,i0,r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); #define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); #define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bltr_f(i0,r0,r1) bltr_d(i0,r0,r1) #define bltr_d(i0,r0,r1) _bltr_d(_jit,i0,r0,r1) -static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define blti_f(i0,r0,i1) _blti_f(_jit,i0,r0,i1) -static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _blti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define blti_d(i0,r0,i1) _blti_d(_jit,i0,r0,i1) -static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _blti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bler_f(i0,r0,r1) bler_d(i0,r0,r1) #define bler_d(i0,r0,r1) _bler_d(_jit,i0,r0,r1) -static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define blei_f(i0,r0,i1) _blei_f(_jit,i0,r0,i1) -static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _blei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define blei_d(i0,r0,i1) _blei_d(_jit,i0,r0,i1) -static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _blei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define beqr_f(i0,r0,r1) beqr_d(i0,r0,r1) #define beqr_d(i0,r0,r1) _beqr_d(_jit,i0,r0,r1) -static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define beqi_f(i0,r0,i1) _beqi_f(_jit,i0,r0,i1) -static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _beqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define beqi_d(i0,r0,i1) _beqi_d(_jit,i0,r0,i1) -static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _beqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bger_f(i0,r0,r1) bger_d(i0,r0,r1) #define bger_d(i0,r0,r1) _bger_d(_jit,i0,r0,r1) -static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgei_f(i0,r0,i1) _bgei_f(_jit,i0,r0,i1) -static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bgei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bgei_d(i0,r0,i1) _bgei_d(_jit,i0,r0,i1) -static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bgei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bgtr_f(i0,r0,r1) bgtr_d(i0,r0,r1) #define bgtr_d(i0,r0,r1) _bgtr_d(_jit,i0,r0,r1) -static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgti_f(i0,r0,i1) _bgti_f(_jit,i0,r0,i1) -static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bgti_d(i0,r0,i1) _bgti_d(_jit,i0,r0,i1) -static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bner_f(i0,r0,r1) bner_d(i0,r0,r1) #define bner_d(i0,r0,r1) _bner_d(_jit,i0,r0,r1) -static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bnei_f(i0,r0,i1) _bnei_f(_jit,i0,r0,i1) -static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bnei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bnei_d(i0,r0,i1) _bnei_d(_jit,i0,r0,i1) -static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bnei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bunltr_f(i0,r0,r1) bunltr_d(i0,r0,r1) #define bunltr_d(i0,r0,r1) _bunltr_d(_jit,i0,r0,r1) -static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bunlti_f(i0,r0,i1) _bunlti_f(_jit,i0,r0,i1) -static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bunlti_d(i0,r0,i1) _bunlti_d(_jit,i0,r0,i1) -static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bunler_f(i0,r0,r1) bunler_d(i0,r0,r1) #define bunler_d(i0,r0,r1) _bunler_d(_jit,i0,r0,r1) -static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunler_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bunlei_f(i0,r0,i1) _bunlei_f(_jit,i0,r0,i1) -static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bunlei_d(i0,r0,i1) _bunlei_d(_jit,i0,r0,i1) -static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define buneqr_f(i0,r0,r1) buneqr_d(i0,r0,r1) #define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1) -static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1) -static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1) -static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bunger_f(i0,r0,r1) bunger_d(i0,r0,r1) #define bunger_d(i0,r0,r1) _bunger_d(_jit,i0,r0,r1) -static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunger_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bungei_f(i0,r0,i1) _bungei_f(_jit,i0,r0,i1) -static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bungei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bungei_d(i0,r0,i1) _bungei_d(_jit,i0,r0,i1) -static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bungei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bungtr_f(i0,r0,r1) bungtr_d(i0,r0,r1) #define bungtr_d(i0,r0,r1) _bungtr_d(_jit,i0,r0,r1) -static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bungti_f(i0,r0,i1) _bungti_f(_jit,i0,r0,i1) -static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bungti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bungti_d(i0,r0,i1) _bungti_d(_jit,i0,r0,i1) -static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bungti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bltgtr_f(i0,r0,r1) bltgtr_d(i0,r0,r1) #define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1) -static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1) -static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1) -static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bordr_f(i0,r0,r1) bordr_d(i0,r0,r1) #define bordr_d(i0,r0,r1) _bordr_d(_jit,i0,r0,r1) -static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bordi_f(i0,r0,i1) _bordi_f(_jit,i0,r0,i1) -static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bordi_d(i0,r0,i1) _bordi_d(_jit,i0,r0,i1) -static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); #define bunordr_f(i0,r0,r1) bunordr_d(i0,r0,r1) #define bunordr_d(i0,r0,r1) _bunordr_d(_jit,i0,r0,r1) -static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); #define bunordi_f(i0,r0,i1) _bunordi_f(_jit,i0,r0,i1) -static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); #define bunordi_d(i0,r0,i1) _bunordi_d(_jit,i0,r0,i1) -static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE @@ -1014,13 +1014,13 @@ F16_(jit_state_t* _jit, jit_word_t _p, } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.f = *i0; @@ -1034,13 +1034,13 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { jit_word_t w; jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.d = *i0; @@ -1054,7 +1054,7 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) } static void -_movr_w_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_w_f(jit_state_t *_jit, int32_t r0, int32_t r1) { /* Should be used only in this case (with out0 == 120) */ if (r1 >= 120) @@ -1063,7 +1063,7 @@ _movr_w_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movr_f_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_f_w(jit_state_t *_jit, int32_t r0, int32_t r1) { /* Should actually be used only in this case (with out0 == 120) */ if (r0 >= 120) @@ -1072,7 +1072,7 @@ _movr_f_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f_w(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { jit_data_t data; @@ -1088,7 +1088,7 @@ _movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_movr_w_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_w_d(jit_state_t *_jit, int32_t r0, int32_t r1) { /* Should be used only in this case (with out0 == 120) */ if (r1 >= 120) @@ -1097,7 +1097,7 @@ _movr_w_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movr_d_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d_w(jit_state_t *_jit, int32_t r0, int32_t r1) { /* Should be used only in this case (with out0 == 120) */ if (r0 >= 120) @@ -1106,7 +1106,7 @@ _movr_d_w(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d_w(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { jit_word_t w; @@ -1127,10 +1127,10 @@ _movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) #define fpr_opi(name, type, size) \ static void \ _##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ + int32_t r0, int32_t r1, \ jit_float##size##_t *i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_##type(rn(reg), i0); \ name##r_##type(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -1138,11 +1138,11 @@ _##name##i_##type(jit_state_t *_jit, \ #define fpr_bopi(name, type, size) \ static jit_word_t \ _b##name##i_##type(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, \ + jit_word_t i0, int32_t r0, \ jit_float##size##_t *i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ movi_##type(rn(reg), i1); \ word = b##name##r_##type(i0, r0, rn(reg)); \ @@ -1167,9 +1167,9 @@ dopi(div) /* translation from gcc -O0 */ static void -_divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0, t1, t2; + int32_t t0, t1, t2; t0 = jit_get_reg(jit_class_fpr); t1 = jit_get_reg(jit_class_fpr); t2 = jit_get_reg(jit_class_fpr); @@ -1189,9 +1189,9 @@ _divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0, t1, t2; + int32_t t0, t1, t2; t0 = jit_get_reg(jit_class_fpr); t1 = jit_get_reg(jit_class_fpr); t2 = jit_get_reg(jit_class_fpr); @@ -1211,9 +1211,9 @@ _divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); SETF_SIG(rn(reg), r1); FCVT_XF(r0, rn(reg)); @@ -1222,9 +1222,9 @@ _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); SETF_SIG(rn(reg), r1); FCVT_XF(r0, rn(reg)); @@ -1233,9 +1233,9 @@ _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); FCVT_FX_TRUNC(rn(reg), r1); GETF_SIG(r0, rn(reg)); @@ -1244,7 +1244,7 @@ _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LT(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -1254,7 +1254,7 @@ fopi(lt) dopi(lt) static void -_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LE(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -1264,7 +1264,7 @@ fopi(le) dopi(le) static void -_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_EQ(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -1274,7 +1274,7 @@ fopi(eq) dopi(eq) static void -_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LE(PR_6, PR_7, r2, r1); MOVI_p(r0, 1, PR_6); @@ -1284,7 +1284,7 @@ fopi(ge) dopi(ge) static void -_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LT(PR_6, PR_7, r2, r1); MOVI_p(r0, 1, PR_6); @@ -1294,7 +1294,7 @@ fopi(gt) dopi(gt) static void -_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_EQ(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -1304,7 +1304,7 @@ fopi(ne) dopi(ne) static void -_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LE(PR_6, PR_7, r2, r1); MOV_p(r0, GR_0, PR_6); @@ -1314,7 +1314,7 @@ fopi(unlt) dopi(unlt) static void -_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LT(PR_6, PR_7, r2, r1); MOV_p(r0, GR_0, PR_6); @@ -1324,7 +1324,7 @@ fopi(unle) dopi(unle) static void -_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MOVI(r0, 1); FCMP_LT(PR_8, PR_9, r1, r2); @@ -1336,7 +1336,7 @@ fopi(uneq) dopi(uneq) static void -_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LT(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -1346,7 +1346,7 @@ fopi(unge) dopi(unge) static void -_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ungtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_LE(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -1356,7 +1356,7 @@ fopi(ungt) dopi(ungt) static void -_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { MOVI(r0, 1); FCMP_EQ(PR_8, PR_9, r1, r2); @@ -1368,7 +1368,7 @@ fopi(ltgt) dopi(ltgt) static void -_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_UNORD(PR_6, PR_7, r1, r2); MOV_p(r0, GR_0, PR_6); @@ -1378,7 +1378,7 @@ fopi(ord) dopi(ord) static void -_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMP_UNORD(PR_6, PR_7, r1, r2); MOVI_p(r0, 1, PR_6); @@ -1388,9 +1388,9 @@ fopi(unord) dopi(unord) static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_f(r0, rn(reg)); @@ -1398,9 +1398,9 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_f(r0, rn(reg)); @@ -1408,9 +1408,9 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (r0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r1, i0); @@ -1422,9 +1422,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ldr_d(r0, rn(reg)); @@ -1432,9 +1432,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_d(r0, rn(reg)); @@ -1442,9 +1442,9 @@ _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (r0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r1, i0); @@ -1456,9 +1456,9 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_f(rn(reg), r0); @@ -1466,9 +1466,9 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_f(rn(reg), r2); @@ -1476,9 +1476,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r0, i0); @@ -1490,9 +1490,9 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); str_d(rn(reg), r0); @@ -1500,9 +1500,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_d(rn(reg), r2); @@ -1510,9 +1510,9 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0) { reg = jit_get_reg(jit_class_gpr); addi(rn(reg), r0, i0); @@ -1524,7 +1524,7 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_sqrtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { movr_f(GR_8, r1); calli((jit_word_t)sqrtf); @@ -1532,7 +1532,7 @@ _sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_sqrtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { movr_d(GR_8, r1); calli((jit_word_t)sqrt); @@ -1540,7 +1540,7 @@ _sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LT(PR_6, PR_7, r0, r1); @@ -1553,7 +1553,7 @@ fbopi(lt) dbopi(lt) static jit_word_t -_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LE(PR_6, PR_7, r0, r1); @@ -1566,7 +1566,7 @@ fbopi(le) dbopi(le) static jit_word_t -_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_EQ(PR_6, PR_7, r0, r1); @@ -1579,7 +1579,7 @@ fbopi(eq) dbopi(eq) static jit_word_t -_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LE(PR_6, PR_7, r1, r0); @@ -1592,7 +1592,7 @@ fbopi(ge) dbopi(ge) static jit_word_t -_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LT(PR_6, PR_7, r1, r0); @@ -1605,7 +1605,7 @@ fbopi(gt) dbopi(gt) static jit_word_t -_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_EQ(PR_6, PR_7, r0, r1); @@ -1618,7 +1618,7 @@ fbopi(ne) dbopi(ne) static jit_word_t -_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LE(PR_6, PR_7, r1, r0); @@ -1631,7 +1631,7 @@ fbopi(unlt) dbopi(unlt) static jit_word_t -_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunler_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LT(PR_6, PR_7, r1, r0); @@ -1644,7 +1644,7 @@ fbopi(unle) dbopi(unle) static jit_word_t -_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; jit_word_t junord, jne; @@ -1672,7 +1672,7 @@ fbopi(uneq) dbopi(uneq) static jit_word_t -_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LT(PR_6, PR_7, r0, r1); @@ -1685,7 +1685,7 @@ fbopi(unge) dbopi(unge) static jit_word_t -_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bungtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_LE(PR_6, PR_7, r0, r1); @@ -1698,7 +1698,7 @@ fbopi(ungt) dbopi(ungt) static jit_word_t -_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; jit_word_t jeq, junord; @@ -1725,7 +1725,7 @@ fbopi(ltgt) dbopi(ltgt) static jit_word_t -_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_UNORD(PR_6, PR_7, r0, r1); @@ -1738,7 +1738,7 @@ fbopi(ord) dbopi(ord) static jit_word_t -_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMP_UNORD(PR_6, PR_7, r0, r1); @@ -1751,7 +1751,7 @@ fbopi(unord) dbopi(unord) static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); /* Load argument. */ diff --git a/libguile/lightning/lib/jit_ia64.c b/libguile/lightning/jit/ia64.c index 6b756bfcc..185d41cbf 100644 --- a/libguile/lightning/lib/jit_ia64.c +++ b/libguile/lightning/jit/ia64.c @@ -17,9 +17,6 @@ * Paulo Cesar Pereira de Andrade */ -#include <lightning.h> -#include <lightning/jit_private.h> - #define jit_arg_reg_p(i) ((i) >= 0 && (i) < 8) #if __BYTE_ORDER == __LITTLE_ENDIAN # define C_DISP 0 @@ -27,9 +24,9 @@ # define I_DISP 0 # define F_DISP 0 #else -# define C_DISP 8 - sizeof(jit_int8_t) -# define S_DISP 8 - sizeof(jit_int16_t) -# define I_DISP 8 - sizeof(jit_int32_t) +# define C_DISP 8 - sizeof(int8_t) +# define S_DISP 8 - sizeof(int16_t) +# define I_DISP 8 - sizeof(int32_t) # define F_DISP 8 - sizeof(jit_float32_t) #endif @@ -50,14 +47,14 @@ extern void __clear_cache(void *, void *); #endif #define PROTO 1 -# include "jit_ia64-cpu.c" -# include "jit_ia64-fpu.c" +# include "ia64-cpu.c" +# include "ia64-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { /* Always 0 */ { 0, "r0" }, /* Global Pointer */ @@ -251,7 +248,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -273,7 +270,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = _jitc->function->self.alen = 0; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -292,8 +289,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -311,13 +308,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -344,7 +341,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); jit_movr(JIT_RET, u); @@ -362,7 +359,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); jit_movr_f(JIT_FRET, u); @@ -380,7 +377,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); jit_movr_d(JIT_FRET, u); @@ -433,7 +430,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -444,7 +441,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -462,7 +459,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_reg_p(_jitc->function->self.argi)) { if (!(_jitc->function->self.call & jit_call_varargs)) @@ -485,7 +482,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_reg_p(_jitc->function->self.argi)) { if (!(_jitc->function->self.call & jit_call_varargs)) @@ -505,7 +502,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -517,7 +514,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -529,7 +526,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -541,7 +538,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -553,7 +550,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -565,7 +562,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_ui, u, v); @@ -577,7 +574,7 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_l, u, v); @@ -589,7 +586,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -603,7 +600,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_arg_reg_p(v->u.w)) @@ -618,7 +615,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -632,7 +629,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -648,7 +645,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (jit_arg_reg_p(v->u.w)) @@ -665,7 +662,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -679,7 +676,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -695,7 +692,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (jit_arg_reg_p(v->u.w)) @@ -712,7 +709,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr, u); @@ -731,7 +728,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -750,7 +747,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_f, u); @@ -775,7 +772,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -800,7 +797,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_d, u); @@ -824,7 +821,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -848,14 +845,14 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { /* Argument registers are allocated from the pool of unused registers */ return (0); } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function); @@ -890,7 +887,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, JIT_RET); @@ -898,7 +895,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, JIT_RET); @@ -906,7 +903,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, JIT_RET); @@ -914,7 +911,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, JIT_RET); @@ -922,7 +919,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); jit_extr_i(r0, JIT_RET); @@ -930,7 +927,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_ui, r0); jit_extr_ui(r0, JIT_RET); @@ -938,7 +935,7 @@ _jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_l, r0); jit_movr(r0, JIT_RET); @@ -946,7 +943,7 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_l, r0); jit_movr_f(r0, JIT_FRET); @@ -954,7 +951,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); jit_movr_d(r0, JIT_FRET); @@ -967,15 +964,15 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t patch_offset; + int32_t patch_offset; jit_word_t prolog_offset; } undo; #if DEVEL_DISASSEMBLER @@ -1099,6 +1096,9 @@ _emit_code(jit_state_t *_jit) return (NULL); value = jit_classify(node->code); +#if GET_JIT_SIZE + sync(); +#endif #if DEVEL_DISASSEMBLER /* FIXME DEVEL_DISASSEMBLER should become DISASSEMBLER, * but a "real" DEVEL_DISASSEMBLER should be required @@ -1645,6 +1645,9 @@ _emit_code(jit_state_t *_jit) break; } } +#if GET_JIT_SIZE + sync(); +#endif jit_regarg_clr(node, value); if (jit_carry == _NOREG) assert(jit_regset_cmp_ui(&_jitc->regarg, 0) == 0); @@ -1682,8 +1685,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_ia64-cpu.c" -# include "jit_ia64-fpu.c" +# include "ia64-cpu.c" +# include "ia64-fpu.c" #undef CODE void @@ -1745,7 +1748,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_fpr_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_ia64.h b/libguile/lightning/jit/ia64.h index 4723e70ce..4723e70ce 100644 --- a/libguile/lightning/include/lightning/jit_ia64.h +++ b/libguile/lightning/jit/ia64.h diff --git a/libguile/lightning/jit/jit.c b/libguile/lightning/jit/jit.c new file mode 100644 index 000000000..666b1dfec --- /dev/null +++ b/libguile/lightning/jit/jit.c @@ -0,0 +1,490 @@ +/* + * Copyright (C) 2012-2019 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include <assert.h> +#include <fcntl.h> +#include <limits.h> +#include <stdio.h> +#include <sys/mman.h> + +#include "../jit.h" + +#if defined(__GNUC__) +# define maybe_unused __attribute__ ((unused)) +#else +# define maybe_unused /**/ +#endif + +#define rc(value) jit_class_##value +#define rn(reg) (jit_regno(_rvs[jit_regno(reg.bits)].spec)) + +#if defined(__i386__) || defined(__x86_64__) +# define JIT_SP JIT_GPR(_RSP) +# define JIT_RET JIT_GPR(_RAX) +# if __X32 +# define JIT_FRET JIT_FPR(_ST0) +# else +# if __CYGWIN__ +# define JIT_RA0 JIT_GPR(_RCX) +# else +# define JIT_RA0 JIT_GPR(_RDI) +# endif +# define JIT_FA0 JIT_FPR(_XMM0) +# define JIT_FRET JIT_FPR(_XMM0) +# endif +#elif defined(__mips__) +# define JIT_RA0 JIT_GPR(_A0) +# define JIT_FA0 JIT_FPR(_F12) +# define JIT_SP JIT_GPR(_SP) +# define JIT_RET JIT_GPR(_V0) +# define JIT_FRET JIT_FPR(_F0) +#elif defined(__arm__) +# define JIT_RA0 JIT_GPR(_R0) +# define JIT_FA0 JIT_FPR(_D0) +# define JIT_SP JIT_GPR(_R13) +# define JIT_RET JIT_GPR(_R0) +# if defined(__ARM_PCS_VFP) +# define JIT_FRET JIT_FPR(_D0) +# else +# define JIT_FRET JIT_FPR(_R0) +# endif +#elif defined(__ppc__) || defined(__powerpc__) +# define JIT_RA0 JIT_GPR(_R3) +# define JIT_FA0 JIT_FPR(_F1) +# define JIT_SP JIT_GPR(_R1) +# define JIT_RET JIT_GPR(_R3) +# define JIT_FRET JIT_FPR(_F1) +#elif defined(__sparc__) +# define JIT_SP JIT_GPR(_SP) +# define JIT_RET JIT_GPR(_I0) +# define JIT_FRET JIT_FPR(_F0) +#elif defined(__ia64__) +# define JIT_SP JIT_GPR(_R12) +# define JIT_RET JIT_GPR(_R8) +# define JIT_FRET JIT_FPR(_F8) +#elif defined(__hppa__) +# define JIT_SP JIT_GPR(_R30) +# define JIT_RET JIT_GPR(_R28) +# define JIT_FRET JIT_FPR(_F4) +#elif defined(__aarch64__) +# define JIT_RA0 JIT_GPR(_R0) +# define JIT_FA0 JIT_FPR(_V0) +# define JIT_SP JIT_GPR(_SP) +# define JIT_RET JIT_GPR(_R0) +# define JIT_FRET JIT_FPR(_V0) +#elif defined(__s390__) || defined(__s390x__) +# define JIT_SP JIT_GPR(_R15) +# define JIT_RET JIT_GPR(_R2) +# define JIT_FRET JIT_FPR(_F0) +#elif defined(__alpha__) +# define JIT_SP JIT_GPR(_SP) +# define JIT_RET JIT_GPR(_V0) +# define JIT_FRET JIT_FPR(_F0) +#endif + +/* + * Private jit_class bitmasks + */ +#define jit_class_named 0x00400000 /* hit must be the named reg */ +#define jit_class_nospill 0x00800000 /* hint to fail if need spill */ +#define jit_class_sft 0x01000000 /* not a hardware register */ +#define jit_class_rg8 0x04000000 /* x86 8 bits */ +#define jit_class_xpr 0x80000000 /* float / vector */ +/* Used on sparc64 where %f0-%f31 can be encode for single float + * but %f32 to %f62 only as double precision */ +#define jit_class_sng 0x10000000 /* Single precision float */ +#define jit_class_dbl 0x20000000 /* Only double precision float */ +#define jit_regno_patch 0x00008000 /* this is a register + * returned by a "user" call + * to jit_get_reg() */ + +union jit_pc +{ + uint8_t *uc; + uint16_t *us; + uint32_t *ui; + uint64_t *ul; + intptr_t w; + uintptr_t uw; +}; + +struct jit_state +{ + union jit_pc pc; + uint8_t *start; + uint8_t *last_instruction_start; + uint8_t *limit; + uint8_t temp_gpr_saved; + uint8_t temp_fpr_saved; + uint8_t overflow; +}; + +enum jit_reloc_flags +{ + JIT_RELOC_CAN_SHORTEN = 1<<0 +}; + +struct jit_register +{ + jit_reg_t spec; + char *name; +}; + +typedef struct jit_register jit_register_t; + +static const jit_register_t _rvs[]; + +#define jit_regload_reload 0 /* convert to reload */ +#define jit_regload_delete 1 /* just remove node */ +#define jit_regload_isdead 2 /* delete and unset live bit */ + +#define ASSERT(x) do { if (!(x)) abort(); } while (0) +#if defined(__GNUC__) +# define UNLIKELY(exprn) __builtin_expect(exprn, 0) +#else +# define UNLIKELY(exprn) exprn +#endif + +static jit_bool_t jit_get_cpu(void); +static jit_bool_t jit_init(jit_state_t *); +static void jit_flush(void *fptr, void *tptr); +static void jit_try_shorten(jit_state_t *_jit, jit_reloc_t reloc); + +jit_bool_t +init_jit(void) +{ + return jit_get_cpu (); +} + +jit_state_t * +jit_new_state(void) +{ + jit_state_t *_jit = malloc (sizeof (*_jit)); + if (!_jit) + abort (); + + memset(_jit, 0, sizeof (*_jit)); + + if (!jit_init (_jit)); + + return _jit; +} + +void +jit_destroy_state(jit_state_t *_jit) +{ + free (_jit); +} + +jit_pointer_t +jit_address(jit_state_t *_jit) +{ + return _jit->pc.uc; +} + +void +jit_begin(jit_state_t *_jit, uint8_t* buf, size_t length) +{ + ASSERT (!_jit->start); + + _jit->start = buf; + _jit->limit = buf + length; + jit_reset(_jit); +} + +jit_bool_t +jit_has_overflow(jit_state_t *_jit) +{ + ASSERT (_jit->start); + return _jit->overflow; +} + +void +jit_reset(jit_state_t *_jit) +{ + ASSERT (_jit->start); + _jit->pc.uc = _jit->start; + _jit->overflow = 0; +} + +void* +jit_end(jit_state_t *_jit, size_t *length) +{ + uint8_t *code = _jit->start; + uint8_t *end = _jit->pc.uc; + + ASSERT (code); + ASSERT (code <= end); + ASSERT (end <= _jit->limit); + ASSERT (!_jit->overflow); + + jit_flush (code, end); + + if (length) { + *length = end - code; + } + + _jit->pc.uc = _jit->start = _jit->limit = NULL; + _jit->overflow = 0; + + return code; +} + +static int +is_power_of_two (unsigned x) +{ + return x && !(x & (x-1)); +} + +void +jit_align(jit_state_t *_jit, unsigned align) +{ + ASSERT (is_power_of_two (align)); + uintptr_t here = _jit->pc.w; + uintptr_t there = (here + align - 1) & ~(align - 1); + if (there - here) + jit_nop(_jit, there - here); +} + +static inline void emit_u8(jit_state_t *_jit, uint8_t u8) { + if (UNLIKELY(_jit->pc.uc + 1 > _jit->limit)) { + _jit->overflow = 1; + } else { + *_jit->pc.uc++ = u8; + } +} + +static inline void emit_u16(jit_state_t *_jit, uint16_t u16) { + if (UNLIKELY(_jit->pc.us + 1 > (uint16_t*)_jit->limit)) { + _jit->overflow = 1; + } else { + *_jit->pc.us++ = u16; + } +} + +static inline void emit_u32(jit_state_t *_jit, uint32_t u32) { + if (UNLIKELY(_jit->pc.ui + 1 > (uint32_t*)_jit->limit)) { + _jit->overflow = 1; + } else { + *_jit->pc.ui++ = u32; + } +} + +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; + } else { + *_jit->pc.ul++ = u64; + } +} + +static inline jit_reloc_t +jit_reloc (jit_state_t *_jit, enum jit_reloc_kind kind, + uint8_t inst_start_offset, uint16_t flags) +{ + jit_reloc_t ret; + + ret.kind = kind; + ret.inst_start_offset = inst_start_offset; + ret.flags = 0; + ret.offset = _jit->pc.uc - _jit->start; + + switch (kind) + { + case JIT_RELOC_ABSOLUTE: + if (sizeof(intptr_t) == 4) + emit_u32 (_jit, 0); + else + emit_u64 (_jit, 0); + break; + case JIT_RELOC_REL8: + emit_u8 (_jit, 0); + break; + case JIT_RELOC_REL16: + emit_u16 (_jit, 0); + break; + case JIT_RELOC_REL32: + emit_u32 (_jit, 0); + break; + case JIT_RELOC_REL64: + emit_u64 (_jit, 0); + break; + default: + abort (); + } + + return ret; +} + +void +jit_patch_here(jit_state_t *_jit, jit_reloc_t reloc) +{ + jit_patch_there (_jit, reloc, jit_address (_jit)); +} + +void +jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr) +{ + if (_jit->overflow) + return; + union jit_pc loc; + loc.uc = _jit->start + reloc.offset; + ptrdiff_t diff; + + switch (reloc.kind) + { + case JIT_RELOC_ABSOLUTE: + if (sizeof(diff) == 4) + *loc.ui = (uintptr_t)addr; + else + *loc.ul = (uintptr_t)addr; + if (loc.uc + sizeof(diff) == _jit->pc.uc && + (reloc.flags & JIT_RELOC_CAN_SHORTEN)) + jit_try_shorten (_jit, reloc); + break; + case JIT_RELOC_REL8: + diff = ((uint8_t*)addr) - (loc.uc + 1); + ASSERT (INT8_MIN <= diff && diff <= INT8_MAX); + *loc.uc = diff; + break; + case JIT_RELOC_REL16: + diff = ((uint8_t*)addr) - (loc.uc + 2); + ASSERT (INT16_MIN <= diff && diff <= INT16_MAX); + *loc.us = diff; + if ((loc.uc + 1) == _jit->pc.uc && (reloc.flags & JIT_RELOC_CAN_SHORTEN)) + jit_try_shorten (_jit, reloc); + break; + case JIT_RELOC_REL32: + diff = ((uint8_t*)addr) - (loc.uc + 4); + ASSERT (INT32_MIN <= diff && diff <= INT32_MAX); + *loc.ui = diff; + if ((loc.ui + 1) == _jit->pc.ui && (reloc.flags & JIT_RELOC_CAN_SHORTEN)) + jit_try_shorten (_jit, reloc); + break; + case JIT_RELOC_REL64: + diff = ((uint8_t*)addr) - (loc.uc + 8); + *loc.ul = diff; + if ((loc.ul + 1) == _jit->pc.ul && (reloc.flags & JIT_RELOC_CAN_SHORTEN)) + jit_try_shorten (_jit, reloc); + break; + default: + abort (); + } +} + +#if defined(__i386__) || defined(__x86_64__) +# include "x86.c" +#elif defined(__mips__) +# include "mips.c" +#elif defined(__arm__) +# include "arm.c" +#elif defined(__ppc__) || defined(__powerpc__) +# include "ppc.c" +#elif defined(__sparc__) +# include "sparc.c" +#elif defined(__ia64__) +# include "ia64.c" +#elif defined(__hppa__) +# include "hppa.c" +#elif defined(__aarch64__) +# include "aarch64.c" +#elif defined(__s390__) || defined(__s390x__) +# include "s390.c" +#elif defined(__alpha__) +# include "alpha.c" +#endif + +#define JIT_IMPL_0(stem, ret) \ + ret jit_##stem (jit_state_t* _jit) \ + { \ + return stem(_jit); \ + } +#define JIT_IMPL_1(stem, ret, ta) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a) \ + { \ + return stem(_jit, unwrap_##ta(a)); \ + } +#define JIT_IMPL_2(stem, ret, ta, tb) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a, jit_##tb##_t b) \ + { \ + return stem(_jit, unwrap_##ta(a), unwrap_##tb(b)); \ + } +#define JIT_IMPL_3(stem, ret, ta, tb, tc) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a, jit_##tb##_t b, jit_##tc##_t c) \ + { \ + return stem(_jit, unwrap_##ta(a), unwrap_##tb(b), unwrap_##tc(c)); \ + } +#define JIT_IMPL_4(stem, ret, ta, tb, tc, td) \ + ret jit_##stem (jit_state_t* _jit, jit_##ta##_t a, jit_##tb##_t b, jit_##tc##_t c, jit_##td##_t d) \ + { \ + return stem(_jit, unwrap_##ta(a), unwrap_##tb(b), unwrap_##tc(c), unwrap_##td(d)); \ + } + +#define JIT_IMPL_RFF__(stem) JIT_IMPL_2(stem, jit_reloc_t, fpr, fpr) +#define JIT_IMPL_RGG__(stem) JIT_IMPL_2(stem, jit_reloc_t, gpr, gpr) +#define JIT_IMPL_RG___(stem) JIT_IMPL_1(stem, jit_reloc_t, gpr) +#define JIT_IMPL_RGi__(stem) JIT_IMPL_2(stem, jit_reloc_t, gpr, imm) +#define JIT_IMPL_RGu__(stem) JIT_IMPL_2(stem, jit_reloc_t, gpr, uimm) +#define JIT_IMPL_R____(stem) JIT_IMPL_0(stem, jit_reloc_t) +#define JIT_IMPL__FFF_(stem) JIT_IMPL_3(stem, void, fpr, fpr, fpr) +#define JIT_IMPL__FF__(stem) JIT_IMPL_2(stem, void, fpr, fpr) +#define JIT_IMPL__FGG_(stem) JIT_IMPL_3(stem, void, fpr, gpr, gpr) +#define JIT_IMPL__FG__(stem) JIT_IMPL_2(stem, void, fpr, gpr) +#define JIT_IMPL__FGo_(stem) JIT_IMPL_3(stem, void, fpr, gpr, off) +#define JIT_IMPL__F___(stem) JIT_IMPL_1(stem, void, fpr) +#define JIT_IMPL__Fd__(stem) JIT_IMPL_2(stem, void, fpr, float64) +#define JIT_IMPL__Ff__(stem) JIT_IMPL_2(stem, void, fpr, float32) +#define JIT_IMPL__Fp__(stem) JIT_IMPL_2(stem, void, fpr, pointer) +#define JIT_IMPL__GF__(stem) JIT_IMPL_2(stem, void, gpr, fpr) +#define JIT_IMPL__GGF_(stem) JIT_IMPL_3(stem, void, gpr, gpr, fpr) +#define JIT_IMPL__GGGG(stem) JIT_IMPL_4(stem, void, gpr, gpr, gpr, gpr) +#define JIT_IMPL__GGG_(stem) JIT_IMPL_3(stem, void, gpr, gpr, gpr) +#define JIT_IMPL__GGGi(stem) JIT_IMPL_4(stem, void, gpr, gpr, gpr, imm) +#define JIT_IMPL__GGGu(stem) JIT_IMPL_4(stem, void, gpr, gpr, gpr, uimm) +#define JIT_IMPL__GG__(stem) JIT_IMPL_2(stem, void, gpr, gpr) +#define JIT_IMPL__GGi_(stem) JIT_IMPL_3(stem, void, gpr, gpr, imm) +#define JIT_IMPL__GGo_(stem) JIT_IMPL_3(stem, void, gpr, gpr, off) +#define JIT_IMPL__GGu_(stem) JIT_IMPL_3(stem, void, gpr, gpr, uimm) +#define JIT_IMPL__G___(stem) JIT_IMPL_1(stem, void, gpr) +#define JIT_IMPL__Gi__(stem) JIT_IMPL_2(stem, void, gpr, imm) +#define JIT_IMPL__Gp__(stem) JIT_IMPL_2(stem, void, gpr, pointer) +#define JIT_IMPL______(stem) JIT_IMPL_0(stem, void) +#define JIT_IMPL__i___(stem) JIT_IMPL_1(stem, void, imm) +#define JIT_IMPL__oGF_(stem) JIT_IMPL_3(stem, void, off, gpr, fpr) +#define JIT_IMPL__oGG_(stem) JIT_IMPL_3(stem, void, off, gpr, gpr) +#define JIT_IMPL__pF__(stem) JIT_IMPL_2(stem, void, pointer, fpr) +#define JIT_IMPL__pG__(stem) JIT_IMPL_2(stem, void, pointer, gpr) +#define JIT_IMPL__p___(stem) JIT_IMPL_1(stem, void, pointer) + +#define unwrap_gpr(r) rn(r) +#define unwrap_fpr(r) rn(r) +#define unwrap_imm(i) i +#define unwrap_uimm(u) u +#define unwrap_off(o) o +#define unwrap_pointer(p) ((uintptr_t) p) +#define unwrap_float32(f) f +#define unwrap_float64(d) d + +#define IMPL_INSTRUCTION(kind, stem) JIT_IMPL_##kind(stem) +FOR_EACH_INSTRUCTION(IMPL_INSTRUCTION) +#undef IMPL_INSTRUCTION diff --git a/libguile/lightning/lib/jit_mips-cpu.c b/libguile/lightning/jit/mips-cpu.c index f68040f35..7ab58b873 100644 --- a/libguile/lightning/lib/jit_mips-cpu.c +++ b/libguile/lightning/jit/mips-cpu.c @@ -20,37 +20,37 @@ #if PROTO typedef union { #if __BYTE_ORDER == __LITTLE_ENDIAN - struct { jit_uint32_t _:26; jit_uint32_t b : 6; } hc; - struct { jit_uint32_t _:21; jit_uint32_t b : 5; } rs; - struct { jit_uint32_t _:21; jit_uint32_t b : 5; } fm; - struct { jit_uint32_t _:16; jit_uint32_t b : 5; } rt; - struct { jit_uint32_t _:16; jit_uint32_t b : 5; } ft; - struct { jit_uint32_t _:11; jit_uint32_t b : 5; } rd; - struct { jit_uint32_t _:11; jit_uint32_t b : 5; } fs; - struct { jit_uint32_t _: 6; jit_uint32_t b : 5; } ic; - struct { jit_uint32_t _: 6; jit_uint32_t b : 5; } fd; - struct { jit_uint32_t _: 6; jit_uint32_t b : 10; } tr; - struct { jit_uint32_t _: 6; jit_uint32_t b : 20; } br; - struct { jit_uint32_t b : 6; } tc; - struct { jit_uint32_t b : 11; } cc; - struct { jit_uint32_t b : 16; } is; - struct { jit_uint32_t b : 26; } ii; + struct { uint32_t _:26; uint32_t b : 6; } hc; + struct { uint32_t _:21; uint32_t b : 5; } rs; + struct { uint32_t _:21; uint32_t b : 5; } fm; + struct { uint32_t _:16; uint32_t b : 5; } rt; + struct { uint32_t _:16; uint32_t b : 5; } ft; + struct { uint32_t _:11; uint32_t b : 5; } rd; + struct { uint32_t _:11; uint32_t b : 5; } fs; + struct { uint32_t _: 6; uint32_t b : 5; } ic; + struct { uint32_t _: 6; uint32_t b : 5; } fd; + struct { uint32_t _: 6; uint32_t b : 10; } tr; + struct { uint32_t _: 6; uint32_t b : 20; } br; + struct { uint32_t b : 6; } tc; + struct { uint32_t b : 11; } cc; + struct { uint32_t b : 16; } is; + struct { uint32_t b : 26; } ii; #else - struct { jit_uint32_t b : 6; } hc; - struct { jit_uint32_t _: 6; jit_uint32_t b : 5; } rs; - struct { jit_uint32_t _: 6; jit_uint32_t b : 5; } fm; - struct { jit_uint32_t _:11; jit_uint32_t b : 5; } rt; - struct { jit_uint32_t _:11; jit_uint32_t b : 5; } ft; - struct { jit_uint32_t _:16; jit_uint32_t b : 5; } rd; - struct { jit_uint32_t _:16; jit_uint32_t b : 5; } fs; - struct { jit_uint32_t _:21; jit_uint32_t b : 5; } ic; - struct { jit_uint32_t _:21; jit_uint32_t b : 5; } fd; - struct { jit_uint32_t _:21; jit_uint32_t b : 10; } tr; - struct { jit_uint32_t _:21; jit_uint32_t b : 20; } br; - struct { jit_uint32_t _:26; jit_uint32_t b : 6; } tc; - struct { jit_uint32_t _:21; jit_uint32_t b : 11; } cc; - struct { jit_uint32_t _:16; jit_uint32_t b : 16; } is; - struct { jit_uint32_t _: 6; jit_uint32_t b : 26; } ii; + struct { uint32_t b : 6; } hc; + struct { uint32_t _: 6; uint32_t b : 5; } rs; + struct { uint32_t _: 6; uint32_t b : 5; } fm; + struct { uint32_t _:11; uint32_t b : 5; } rt; + struct { uint32_t _:11; uint32_t b : 5; } ft; + struct { uint32_t _:16; uint32_t b : 5; } rd; + struct { uint32_t _:16; uint32_t b : 5; } fs; + struct { uint32_t _:21; uint32_t b : 5; } ic; + struct { uint32_t _:21; uint32_t b : 5; } fd; + struct { uint32_t _:21; uint32_t b : 10; } tr; + struct { uint32_t _:21; uint32_t b : 20; } br; + struct { uint32_t _:26; uint32_t b : 6; } tc; + struct { uint32_t _:21; uint32_t b : 11; } cc; + struct { uint32_t _:16; uint32_t b : 16; } is; + struct { uint32_t _: 6; uint32_t b : 26; } ii; #endif int op; } jit_instr_t; @@ -296,18 +296,18 @@ typedef union { # define MIPS_SDBPP 0x3f # define ii(i) *_jit->pc.ui++ = i static void -_hrrrit(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t); +_hrrrit(jit_state_t*,int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t); # define hrrrit(hc,rs,rt,rd,im,tc) _hrrrit(_jit,hc,rs,rt,rd,im,tc) # define hrrr_t(hc,rs,rt,rd,tc) hrrrit(hc,rs,rt,rd,0,tc) # define rrr_t(rs,rt,rd,tc) hrrr_t(0,rs,rt,rd,tc) # define hrri(hc,rs,rt,im) _hrri(_jit,hc,rs,rt,im) -static void _hrri(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _hrri(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define hi(hc,im) _hi(_jit,hc,im) -static void _hi(jit_state_t*,jit_int32_t,jit_int32_t); +static void _hi(jit_state_t*,int32_t,int32_t); # define NOP(i0) ii(0) # define nop(i0) _nop(_jit,i0) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); # define h_ri(hc,rt,im) _hrri(_jit,hc,0,rt,im) # define rrit(rt,rd,im,tc) _hrrrit(_jit,0,0,rt,rd,im,tc) # define LUI(rt,im) h_ri(MIPS_LUI,rt,im) @@ -402,67 +402,67 @@ static void _nop(jit_state_t*,jit_int32_t); # define divu(rs,rt) DDIVU(rs,rt) # endif # define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); #define addcr(r0,r1,r2) _addcr(_jit,r0,r1,r2) -static void _addcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addcr(jit_state_t*,int32_t,int32_t,int32_t); #define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); # define addxr(r0,r1,r2) _addxr(_jit,r0,r1,r2) -static void _addxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addxr(jit_state_t*,int32_t,int32_t,int32_t); # define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0,r1,r2) _subcr(_jit,r0,r1,r2) -static void _subcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subcr(jit_state_t*,int32_t,int32_t,int32_t); # define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0,r1,r2) _subxr(_jit,r0,r1,r2) -static void _subxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subxr(jit_state_t*,int32_t,int32_t,int32_t); # define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); # define mulr(r0,r1,r2) _mulr(_jit,r0,r1,r2) -static void _mulr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr(jit_state_t*,int32_t,int32_t,int32_t); # define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); # define qmulr(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,1) # define qmulr_u(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,0) # define iqmulr(r0,r1,r2,r3,cc) _iqmulr(_jit,r0,r1,r2,r3,cc) -static void _iqmulr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqmulr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qmuli(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,1) # define qmuli_u(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,0) # define iqmuli(r0,r1,r2,i0,cc) _iqmuli(_jit,r0,r1,r2,i0,cc) -static void _iqmuli(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqmuli(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # define divr(r0,r1,r2) _divr(_jit,r0,r1,r2) -static void _divr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr(jit_state_t*,int32_t,int32_t,int32_t); # define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); # define divr_u(r0,r1,r2) _divr_u(_jit,r0,r1,r2) -static void _divr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_u(jit_state_t*,int32_t,int32_t,int32_t); # define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define qdivr(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,1) # define qdivr_u(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,0) # define iqdivr(r0,r1,r2,r3,cc) _iqdivr(_jit,r0,r1,r2,r3,cc) -static void _iqdivr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqdivr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qdivi(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,1) # define qdivi_u(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,0) # define iqdivi(r0,r1,r2,i0,cc) _iqdivi(_jit,r0,r1,r2,i0,cc) -static void _iqdivi(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqdivi(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); # define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); # define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); # define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define lshr(r0,r1,r2) SLLV(r0,r1,r2) # define lshi(r0,r1,i0) SLL(r0,r1,i0) @@ -473,264 +473,264 @@ static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); # else # define lshr(r0,r1,r2) DSLLV(r0,r1,r2) # define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr(r0,r1,r2) DSRAV(r0,r1,r2) # define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rshr_u(r0,r1,r2) DSRLV(r0,r1,r2) # define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # endif # define andr(r0,r1,r2) AND(r0,r1,r2) # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); # define orr(r0,r1,r2) OR(r0,r1,r2) # define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); # define xorr(r0,r1,r2) XOR(r0,r1,r2) # define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); # define movr(r0,r1) orr(r0,r1,_ZERO_REGNO) # define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); # define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); # define ldr_c(r0,r1) LB(r0,0,r1) # define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldr_uc(r0,r1) LBU(r0,0,r1) # define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldr_s(r0,r1) LH(r0,0,r1) # define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldr_us(r0,r1) LHU(r0,0,r1) # define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # define ldr_i(r0,r1) LW(r0,0,r1) # define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # if __WORDSIZE == 64 # define ldr_ui(r0,r1) LWU(r0,0,r1) # define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); # define ldr_l(r0,r1) LD(r0,0,r1) # define ldi_l(r0,i0) _ldi_l(_jit,r0,i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); # endif # define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_s(r0,r1,r2) _ldxr_s(_jit,r0,r1,r2) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_us(r0,r1,r2) _ldxr_us(_jit,r0,r1,r2) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_i(r0,r1,r2) _ldxr_i(_jit,r0,r1,r2) -static void _ldxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 64 # define ldxr_ui(r0,r1,r2) _ldxr_ui(_jit,r0,r1,r2) -static void _ldxr_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_ui(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_l(r0,r1,r2) _ldxr_l(_jit,r0,r1,r2) -static void _ldxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_l(r0,r1,i0) _ldxi_l(_jit,r0,r1,i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); # endif # define str_c(r0,r1) SB(r1,0,r0) # define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define str_s(r0,r1) SH(r1,0,r0) # define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # define str_i(r0,r1) SW(r1,0,r0) # define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # if __WORDSIZE == 64 # define str_l(r0,r1) SD(r1,0,r0) # define sti_l(i0,r0) _sti_l(_jit,i0,r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); # endif # define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # if __WORDSIZE == 64 # define stxr_l(r0,r1,r2) _stxr_l(_jit,r0,r1,r2) -static void _stxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); # endif # if __BYTE_ORDER == __LITTLE_ENDIAN -# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +# define bswapr_us(r0,r1) _bswapr_us(_jit,r0,r1) +static void _bswapr_us(jit_state_t*,int32_t,int32_t); +# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1) +static void _bswapr_ui(jit_state_t*,int32_t,int32_t); # if __WORDSIZE == 64 -# define htonr_ul(r0,r1) _htonr_ul(_jit,r0,r1) -static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t); +# define bswapr_ul(r0,r1) _bswapr_ul(_jit,r0,r1) +static void _bswapr_ul(jit_state_t*,int32_t,int32_t); # endif # else -# define htonr_us(r0,r1) extr_us(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) # if __WORDSIZE == 32 -# define htonr_ui(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) movr(r0,r1) # else -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr_ul(r0,r1) movr(r0,r1) # endif # endif # define extr_c(r0,r1) _extr_c(_jit,r0,r1) -static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_c(jit_state_t*,int32_t,int32_t); # define extr_uc(r0,r1) ANDI(r0,r1,0xff) # define extr_s(r0,r1) _extr_s(_jit,r0,r1) -static void _extr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_s(jit_state_t*,int32_t,int32_t); # define extr_us(r0,r1) ANDI(r0,r1,0xffff) # if __WORDSIZE == 64 # define extr_i(r0,r1) SLL(r0,r1,0) # define extr_ui(r0,r1) _extr_ui(_jit,r0,r1) -static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_ui(jit_state_t*,int32_t,int32_t); # endif # define ltr(r0,r1,r2) SLT(r0,r1,r2) # define lti(r0,r1,i0) _lti(_jit,r0,r1,i0) -static void _lti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti(jit_state_t*,int32_t,int32_t,jit_word_t); # define ltr_u(r0,r1,r2) SLTU(r0,r1,r2) # define lti_u(r0,r1,i0) _lti_u(_jit,r0,r1,i0) -static void _lti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define ler(r0,r1,r2) _ler(_jit,r0,r1,r2) -static void _ler(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler(jit_state_t*,int32_t,int32_t,int32_t); #define lei(r0,r1,i0) _lei(_jit,r0,r1,i0) -static void _lei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei(jit_state_t*,int32_t,int32_t,jit_word_t); #define ler_u(r0,r1,r2) _ler_u(_jit,r0,r1,r2) -static void _ler_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_u(jit_state_t*,int32_t,int32_t,int32_t); #define lei_u(r0,r1,i0) _lei_u(_jit,r0,r1,i0) -static void _lei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define eqr(r0,r1,r2) _eqr(_jit,r0,r1,r2) -static void _eqr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr(jit_state_t*,int32_t,int32_t,int32_t); #define eqi(r0,r1,i0) _eqi(_jit,r0,r1,i0) -static void _eqi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _eqi(jit_state_t*,int32_t,int32_t,jit_word_t); #define ger(r0,r1,r2) _ger(_jit,r0,r1,r2) -static void _ger(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger(jit_state_t*,int32_t,int32_t,int32_t); #define gei(r0,r1,i0) _gei(_jit,r0,r1,i0) -static void _gei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei(jit_state_t*,int32_t,int32_t,jit_word_t); #define ger_u(r0,r1,i0) _ger_u(_jit,r0,r1,i0) -static void _ger_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_u(jit_state_t*,int32_t,int32_t,int32_t); #define gei_u(r0,r1,i0) _gei_u(_jit,r0,r1,i0) -static void _gei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define gtr(r0,r1,r2) SLT(r0,r2,r1) #define gti(r0,r1,i0) _gti(_jit,r0,r1,i0) -static void _gti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti(jit_state_t*,int32_t,int32_t,jit_word_t); # define gtr_u(r0,r1,r2) SLTU(r0,r2,r1) # define gti_u(r0,r1,i0) _gti_u(_jit,r0,r1,i0) -static void _gti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti_u(jit_state_t*,int32_t,int32_t,jit_word_t); #define ner(r0,r1,r2) _ner(_jit,r0,r1,r2) -static void _ner(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner(jit_state_t*,int32_t,int32_t,int32_t); #define nei(r0,r1,i0) _nei(_jit,r0,r1,i0) -static void _nei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _nei(jit_state_t*,int32_t,int32_t,jit_word_t); #define bltr(i0,r0,r1) _bltr(_jit,i0,r0,r1) -static jit_word_t _bltr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bltr_u(i0,r0,r1) _bltr_u(_jit,i0,r0,r1) -static jit_word_t _bltr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define blti(i0,r0,i1) _blti(_jit,i0,r0,i1) -static jit_word_t _blti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define blti_u(i0,r0,i1) _blti_u(_jit,i0,r0,i1) -static jit_word_t _blti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bler(i0,r0,r1) _bler(_jit,i0,r0,r1) -static jit_word_t _bler(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler(jit_state_t*,jit_word_t,int32_t,int32_t); #define bler_u(i0,r0,r1) _bler_u(_jit,i0,r0,r1) -static jit_word_t _bler_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define blei(i0,r0,i1) _blei(_jit,i0,r0,i1) -static jit_word_t _blei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define blei_u(i0,r0,i1) _blei_u(_jit,i0,r0,i1) -static jit_word_t _blei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define beqr(i0,r0,r1) _beqr(_jit,i0,r0,r1) -static jit_word_t _beqr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr(jit_state_t*,jit_word_t,int32_t,int32_t); #define beqi(i0,r0,i1) _beqi(_jit,i0,r0,i1) -static jit_word_t _beqi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _beqi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bger(i0,r0,r1) _bger(_jit,i0,r0,r1) -static jit_word_t _bger(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger(jit_state_t*,jit_word_t,int32_t,int32_t); #define bger_u(i0,r0,r1) _bger_u(_jit,i0,r0,r1) -static jit_word_t _bger_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgei(i0,r0,i1) _bgei(_jit,i0,r0,i1) -static jit_word_t _bgei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgei_u(i0,r0,i1) _bgei_u(_jit,i0,r0,i1) -static jit_word_t _bgei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgtr(i0,r0,r1) _bgtr(_jit,i0,r0,r1) -static jit_word_t _bgtr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgtr_u(i0,r0,r1) _bgtr_u(_jit,i0,r0,r1) -static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgti(i0,r0,i1) _bgti(_jit,i0,r0,i1) -static jit_word_t _bgti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgti_u(i0,r0,i1) _bgti_u(_jit,i0,r0,i1) -static jit_word_t _bgti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bner(i0,r0,r1) _bner(_jit,i0,r0,r1) -static jit_word_t _bner(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner(jit_state_t*,jit_word_t,int32_t,int32_t); #define bnei(i0,r0,i1) _bnei(_jit,i0,r0,i1) -static jit_word_t _bnei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bnei(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define jmpr(r0) _jmpr(_jit,r0) -static void _jmpr(jit_state_t*,jit_int32_t); +static void _jmpr(jit_state_t*,int32_t); # define jmpi(i0) _jmpi(_jit,i0) static jit_word_t _jmpi(jit_state_t*,jit_word_t); # define boaddr(i0,r0,r1) _boaddr(_jit,i0,r0,r1) -static jit_word_t _boaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _boaddr(jit_state_t*,jit_word_t,int32_t,int32_t); # define boaddi(i0,r0,i1) _boaddi(_jit,i0,r0,i1) -static jit_word_t _boaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _boaddi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define boaddr_u(i0,r0,r1) _boaddr_u(_jit,i0,r0,r1) -static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define boaddi_u(i0,r0,i1) _boaddi_u(_jit,i0,r0,i1) -static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bxaddr(i0,r0,r1) _bxaddr(_jit,i0,r0,r1) -static jit_word_t _bxaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxaddr(jit_state_t*,jit_word_t,int32_t,int32_t); # define bxaddi(i0,r0,i1) _bxaddi(_jit,i0,r0,i1) -static jit_word_t _bxaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxaddi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bxaddr_u(i0,r0,r1) _bxaddr_u(_jit,i0,r0,r1) -static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define bxaddi_u(i0,r0,i1) _bxaddi_u(_jit,i0,r0,i1) -static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bosubr(i0,r0,r1) _bosubr(_jit,i0,r0,r1) -static jit_word_t _bosubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bosubr(jit_state_t*,jit_word_t,int32_t,int32_t); # define bosubi(i0,r0,i1) _bosubi(_jit,i0,r0,i1) -static jit_word_t _bosubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bosubi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bosubr_u(i0,r0,r1) _bosubr_u(_jit,i0,r0,r1) -static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define bosubi_u(i0,r0,i1) _bosubi_u(_jit,i0,r0,i1) -static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bxsubr(i0,r0,r1) _bxsubr(_jit,i0,r0,r1) -static jit_word_t _bxsubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxsubr(jit_state_t*,jit_word_t,int32_t,int32_t); # define bxsubi(i0,r0,i1) _bxsubi(_jit,i0,r0,i1) -static jit_word_t _bxsubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxsubi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bxsubr_u(i0,r0,r1) _bxsubr_u(_jit,i0,r0,r1) -static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,int32_t,int32_t); # define bxsubi_u(i0,r0,i1) _bxsubi_u(_jit,i0,r0,i1) -static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bmsr(i0,r0,r1) _bmsr(_jit,i0,r0,r1) -static jit_word_t _bmsr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmsr(jit_state_t*,jit_word_t,int32_t,int32_t); # define bmsi(i0,r0,i1) _bmsi(_jit,i0,r0,i1) -static jit_word_t _bmsi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmsi(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define bmcr(i0,r0,r1) _bmcr(_jit,i0,r0,r1) -static jit_word_t _bmcr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmcr(jit_state_t*,jit_word_t,int32_t,int32_t); # define bmci(i0,r0,i1) _bmci(_jit,i0,r0,i1) -static jit_word_t _bmci(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmci(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define callr(r0) _callr(_jit,r0) -static void _callr(jit_state_t*,jit_int32_t); +static void _callr(jit_state_t*,int32_t); # define calli(i0) _calli(_jit,i0) static void _calli(jit_state_t*,jit_word_t); # define calli_p(i0) _calli_p(_jit,i0) @@ -740,9 +740,9 @@ static void _prolog(jit_state_t*,jit_node_t*); # define epilog(node) _epilog(_jit,node) static void _epilog(jit_state_t*,jit_node_t*); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); #define patch_abs(instr,label) _patch_abs(_jit,instr,label) static void _patch_abs(jit_state_t*,jit_word_t,jit_word_t); #define patch_at(jump,label) _patch_at(_jit,jump,label) @@ -751,9 +751,9 @@ static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #if CODE static void -_hrrrit(jit_state_t *_jit,jit_int32_t hc, - jit_int32_t rs, jit_int32_t rt, jit_int32_t rd, - jit_int32_t ic, jit_int32_t tc) +_hrrrit(jit_state_t *_jit,int32_t hc, + int32_t rs, int32_t rt, int32_t rd, + int32_t ic, int32_t tc) { jit_instr_t i; i.tc.b = tc; @@ -766,8 +766,8 @@ _hrrrit(jit_state_t *_jit,jit_int32_t hc, } static void -_hrri(jit_state_t *_jit, jit_int32_t hc, - jit_int32_t rs, jit_int32_t rt, jit_int32_t im) +_hrri(jit_state_t *_jit, int32_t hc, + int32_t rs, int32_t rt, int32_t im) { jit_instr_t i; i.op = 0; @@ -779,7 +779,7 @@ _hrri(jit_state_t *_jit, jit_int32_t hc, } static void -_hi(jit_state_t *_jit, jit_int32_t hc, jit_int32_t im) +_hi(jit_state_t *_jit, int32_t hc, int32_t im) { jit_instr_t i; i.ii.b = im; @@ -788,7 +788,7 @@ _hi(jit_state_t *_jit, jit_int32_t hc, jit_int32_t im) } static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { for (; i0 > 0; i0 -= 4) NOP(); @@ -796,9 +796,9 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) movr(r0, r1); else if (can_sign_extend_short_p(i0)) @@ -812,9 +812,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0; + int32_t t0; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); @@ -832,9 +832,9 @@ _addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t t0; + int32_t t0; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); @@ -862,9 +862,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0; + int32_t t0; assert(jit_carry != _NOREG); t0 = jit_get_reg(jit_class_gpr); @@ -875,9 +875,9 @@ _addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t t0; + int32_t t0; assert(jit_carry != _NOREG); t0 = jit_get_reg(jit_class_gpr); @@ -888,9 +888,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) movr(r0, r1); else if (can_sign_extend_short_p(i0) && (i0 & 0xffff) != 0x8000) @@ -904,9 +904,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0; + int32_t t0; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); @@ -924,9 +924,9 @@ _subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t t0; + int32_t t0; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); @@ -954,9 +954,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t t0; + int32_t t0; assert(jit_carry != _NOREG); t0 = jit_get_reg(jit_class_gpr); @@ -967,9 +967,9 @@ _subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t t0; + int32_t t0; assert(jit_carry != _NOREG); t0 = jit_get_reg(jit_class_gpr); @@ -980,23 +980,23 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { multu(r1, r2); MFLO(r0); } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -1005,8 +1005,8 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { if (sign) mult(r2, r3); @@ -1017,10 +1017,10 @@ _iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqmulr(r0, r1, r2, rn(reg), sign); @@ -1028,16 +1028,16 @@ _iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { div(r1, r2); MFLO(r0); } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr(r0, r1, rn(reg)); @@ -1045,16 +1045,16 @@ _divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { divu(r1, r2); MFLO(r0); } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr_u(r0, r1, rn(reg)); @@ -1062,8 +1062,8 @@ _divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { if (sign) div(r2, r3); @@ -1074,10 +1074,10 @@ _iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqdivr(r0, r1, r2, rn(reg), sign); @@ -1085,16 +1085,16 @@ _iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { div(r1, r2); MFHI(r0); } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr(r0, r1, rn(reg)); @@ -1102,16 +1102,16 @@ _remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { divu(r1, r2); MFHI(r0); } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr_u(r0, r1, rn(reg)); @@ -1120,7 +1120,7 @@ _remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #if __WORDSIZE == 64 static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 <= 63); if (i0 < 32) @@ -1130,7 +1130,7 @@ _lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 <= 63); if (i0 < 32) @@ -1140,7 +1140,7 @@ _rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { assert(i0 >= 0 && i0 <= 63); if (i0 < 32) @@ -1151,9 +1151,9 @@ _rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #endif static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) ANDI(r0, r1, i0); else { @@ -1165,9 +1165,9 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) ORI(r0, r1, i0); else { @@ -1179,9 +1179,9 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) XORI(r0, r1, i0); else { @@ -1193,7 +1193,7 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { if (i0 == 0) OR(r0, _ZERO_REGNO, _ZERO_REGNO); @@ -1228,7 +1228,7 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; @@ -1249,9 +1249,9 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LB(r0, i0, _ZERO_REGNO); else { @@ -1263,9 +1263,9 @@ _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LBU(r0, i0, _ZERO_REGNO); else { @@ -1277,9 +1277,9 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LH(r0, i0, _ZERO_REGNO); else { @@ -1291,9 +1291,9 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LHU(r0, i0, _ZERO_REGNO); else { @@ -1305,9 +1305,9 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LW(r0, i0, _ZERO_REGNO); else { @@ -1320,9 +1320,9 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) #if __WORDSIZE == 64 static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LWU(r0, i0, _ZERO_REGNO); else { @@ -1334,9 +1334,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LD(r0, i0, _ZERO_REGNO); else { @@ -1349,9 +1349,9 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) #endif static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_c(r0, rn(reg)); @@ -1359,9 +1359,9 @@ _ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LB(r0, i0, r1); else { @@ -1373,9 +1373,9 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_uc(r0, rn(reg)); @@ -1383,9 +1383,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LBU(r0, i0, r1); else { @@ -1397,9 +1397,9 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_s(r0, rn(reg)); @@ -1407,9 +1407,9 @@ _ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LH(r0, i0, r1); else { @@ -1421,9 +1421,9 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_us(r0, rn(reg)); @@ -1431,9 +1431,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LHU(r0, i0, r1); else { @@ -1445,9 +1445,9 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_i(r0, rn(reg)); @@ -1455,9 +1455,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LW(r0, i0, r1); else { @@ -1470,9 +1470,9 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #if __WORDSIZE == 64 static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_ui(r0, rn(reg)); @@ -1480,9 +1480,9 @@ _ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LWU(r0, i0, r1); else { @@ -1494,9 +1494,9 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_l(r0, rn(reg)); @@ -1504,9 +1504,9 @@ _ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LD(r0, i0, r1); else { @@ -1519,9 +1519,9 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #endif static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SB(r0, i0, _ZERO_REGNO); else { @@ -1533,9 +1533,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SH(r0, i0, _ZERO_REGNO); else { @@ -1547,9 +1547,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SW(r0, i0, _ZERO_REGNO); else { @@ -1562,9 +1562,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) #if __WORDSIZE == 64 static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SD(r0, i0, _ZERO_REGNO); else { @@ -1577,9 +1577,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) #endif static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_c(rn(reg), r2); @@ -1587,9 +1587,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SB(r1, i0, r0); else { @@ -1601,9 +1601,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_s(rn(reg), r2); @@ -1611,9 +1611,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SH(r1, i0, r0); else { @@ -1625,9 +1625,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_i(rn(reg), r2); @@ -1635,9 +1635,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SW(r1, i0, r0); else { @@ -1650,9 +1650,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) #if __WORDSIZE == 64 static void -_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) +_stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1 ,int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_l(rn(reg), r2); @@ -1660,9 +1660,9 @@ _stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1 ,jit_int32_t r2) } static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SD(r1, i0, r0); else { @@ -1676,9 +1676,9 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) # if __BYTE_ORDER == __LITTLE_ENDIAN static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr); rshi(rn(t0), r1, 8); andi(r0, r1, 0xff); @@ -1689,11 +1689,11 @@ _htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; t0 = jit_get_reg(jit_class_gpr); t1 = jit_get_reg(jit_class_gpr); t2 = jit_get_reg(jit_class_gpr); @@ -1716,13 +1716,13 @@ _htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ul(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); rshi_u(rn(reg), r1, 32); - htonr_ui(r0, r1); - htonr_ui(rn(reg), rn(reg)); + bswapr_ui(r0, r1); + bswapr, 2019_ui(rn(reg), rn(reg)); lshi(r0, r0, 32); orr(r0, r0, rn(reg)); jit_unget_reg(reg); @@ -1730,7 +1730,7 @@ _htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_mips2_p()) SEB(r0, r1); @@ -1741,7 +1741,7 @@ _extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_extr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { if (jit_mips2_p()) SEH(r0, r1); @@ -1753,7 +1753,7 @@ _extr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_extr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, 32); rshi_u(r0, r0, 32); @@ -1761,9 +1761,9 @@ _extr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SLTI(r0, r1, i0); @@ -1776,9 +1776,9 @@ _lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SLTIU(r0, r1, i0); @@ -1791,16 +1791,16 @@ _lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ler(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { SLT(r0, r2, r1); XORI(r0, r0, 1); } static void -_lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) { SLT(r0, _ZERO_REGNO, r1); @@ -1815,16 +1815,16 @@ _lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ler_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { SLTU(r0, r2, r1); XORI(r0, r0, 1); } static void -_lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) { SLTU(r0, _ZERO_REGNO, r1); @@ -1839,7 +1839,7 @@ _lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { subr(r0, r1, r2); SLTU(r0, _ZERO_REGNO, r0); @@ -1847,7 +1847,7 @@ _eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_eqi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0) { subi(r0, r1, i0); @@ -1859,16 +1859,16 @@ _eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ger(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { SLT(r0, r1, r2); XORI(r0, r0, 1); } static void -_gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -1877,16 +1877,16 @@ _gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ger_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { SLTU(r0, r1, r2); XORI(r0, r0, 1); } static void -_gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -1895,9 +1895,9 @@ _gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) SLT(r0, _ZERO_REGNO, r1); @@ -1910,9 +1910,9 @@ _gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) SLTU(r0, _ZERO_REGNO, r1); @@ -1925,14 +1925,14 @@ _gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { subr(r0, r1, r2); SLTU(r0, _ZERO_REGNO, r0); } static void -_nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_nei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0) { subi(r0, r1, i0); @@ -1943,10 +1943,10 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static jit_word_t -_bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); SLT(rn(reg), r0, r1); @@ -1959,10 +1959,10 @@ _bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLTU(rn(reg), r0, r1); @@ -1975,11 +1975,11 @@ _bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; jit_bool_t zero_p; if (!(zero_p = i1 == 0)) @@ -2006,10 +2006,10 @@ _blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); if (can_sign_extend_short_p(i1)) { @@ -2028,10 +2028,10 @@ _blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLT(rn(reg), r1, r0); @@ -2044,10 +2044,10 @@ _bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLTU(rn(reg), r1, r0); @@ -2060,10 +2060,10 @@ _bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; @@ -2081,10 +2081,10 @@ _blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; @@ -2102,7 +2102,7 @@ _blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; @@ -2114,10 +2114,10 @@ _beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_beqi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; @@ -2135,10 +2135,10 @@ _beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLT(rn(reg), r0, r1); @@ -2151,10 +2151,10 @@ _bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLTU(rn(reg), r0, r1); @@ -2167,11 +2167,11 @@ _bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; jit_word_t d; - jit_int32_t reg; + int32_t reg; jit_bool_t zero_p; if (!(zero_p = i1 == 0)) @@ -2198,10 +2198,10 @@ _bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); if (can_sign_extend_short_p(i1)) { @@ -2220,10 +2220,10 @@ _bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLT(rn(reg), r1, r0); @@ -2236,10 +2236,10 @@ _bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); SLTU(rn(reg), r1, r0); @@ -2252,10 +2252,10 @@ _bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; @@ -2273,10 +2273,10 @@ _bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; @@ -2294,7 +2294,7 @@ _bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; @@ -2306,10 +2306,10 @@ _bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bnei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (i1 == 0) { w = _jit->pc.w; @@ -2327,7 +2327,7 @@ _bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) +_jmpr(jit_state_t *_jit, int32_t r0) { JR(r0); NOP(1); @@ -2337,10 +2337,10 @@ static jit_word_t _jmpi(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; w = _jit->pc.w; - if (((w + sizeof(jit_int32_t)) & 0xf0000000) == (i0 & 0xf0000000)) { + if (((w + sizeof(int32_t)) & 0xf0000000) == (i0 & 0xf0000000)) { J((i0 & ~0xf0000000) >> 2); NOP(1); } @@ -2355,12 +2355,12 @@ _jmpi(jit_state_t *_jit, jit_word_t i0) } static jit_word_t -_boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_boaddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; /* t1 = r0 + r1; overflow = r1 < 0 ? r0 < t1 : t1 < r0 */ t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2383,12 +2383,12 @@ _boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_boaddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; if (can_sign_extend_short_p(i1)) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2417,11 +2417,11 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_boaddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2437,11 +2437,11 @@ _boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_boaddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; if (can_sign_extend_short_p(i0)) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2465,12 +2465,12 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxaddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; /* t1 = r0 + r1; overflow = r1 < 0 ? r0 < t1 : t1 < r0 */ t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2493,12 +2493,12 @@ _bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxaddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; if (can_sign_extend_short_p(i1)) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2527,11 +2527,11 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxaddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2547,11 +2547,11 @@ _bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxaddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; if (can_sign_extend_short_p(i0)) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2575,12 +2575,12 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bosubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; /* t1 = r0 - r1; overflow = 0 < r1 ? r0 < t1 : t1 < r0 */ t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2603,12 +2603,12 @@ _bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bosubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; if (can_sign_extend_short_p(i1) && (i1 & 0xffff) != 0x8000) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2637,11 +2637,11 @@ _bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bosubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2657,11 +2657,11 @@ _bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bosubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; if (can_sign_extend_short_p(i0) && (i0 & 0xffff) != 0x8000) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2685,12 +2685,12 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxsubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; /* t1 = r0 - r1; overflow = 0 < r1 ? r0 < t1 : t1 < r0 */ t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2713,12 +2713,12 @@ _bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxsubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; - jit_int32_t t2; + int32_t t0; + int32_t t1; + int32_t t2; if (can_sign_extend_short_p(i1) && (i1 & 0xffff) != 0x8000) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2747,11 +2747,11 @@ _bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxsubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); t1 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2767,11 +2767,11 @@ _bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxsubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; - jit_int32_t t1; + int32_t t0; + int32_t t1; if (can_sign_extend_short_p(i0) && (i0 & 0xffff) != 0x8000) { t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); @@ -2795,10 +2795,10 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmsr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); AND(rn(t0), r0, r1); w = _jit->pc.w; @@ -2809,10 +2809,10 @@ _bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmsi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); if (can_zero_extend_short_p(i1)) { ANDI(rn(t0), r0, i1); @@ -2829,10 +2829,10 @@ _bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmcr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); AND(rn(t0), r0, r1); w = _jit->pc.w; @@ -2843,10 +2843,10 @@ _bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmci(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr|jit_class_nospill); if (can_zero_extend_short_p(i1)) { ANDI(rn(t0), r0, i1); @@ -2863,7 +2863,7 @@ _bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { if (r0 != _T9_REGNO) movr(_T9_REGNO, r0); @@ -2892,24 +2892,24 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) return (word); } -static jit_int32_t fregs[] = { +static int32_t fregs[] = { _F30, _F28, _F26, _F24, _F22, _F20, #if !NEW_ABI _F18, _F16, #endif }; -static jit_int32_t iregs[] = { +static int32_t iregs[] = { _S7, _S6, _S5, _S4, _S3, _S2, _S1, _S0, }; static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t index; - jit_int32_t offset; + int32_t index; + int32_t offset; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -2981,8 +2981,8 @@ _prolog(jit_state_t *_jit, jit_node_t *node) static void _epilog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t index; - jit_int32_t offset; + int32_t index; + int32_t offset; if (_jitc->function->assume_frame) return; /* callee save registers */ @@ -3012,21 +3012,21 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { assert(_jitc->function->self.call & jit_call_varargs); /* Initialize va_list to the first stack argument. */ #if NEW_ABI if (jit_arg_reg_p(_jitc->function->vagp)) addi(r0, _BP_REGNO, stack_framesize + _jitc->function->vagp * - sizeof(jit_int64_t)); + sizeof(int64_t)); else #endif addi(r0, _BP_REGNO, _jitc->function->self.size); } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { /* Load argument. */ #if WORD_ADJUST @@ -3044,7 +3044,7 @@ _patch_abs(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { jit_instr_t i; union { - jit_int32_t *i; + int32_t *i; jit_word_t w; } u; @@ -3085,7 +3085,7 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { jit_instr_t i; union { - jit_int32_t *i; + int32_t *i; jit_word_t w; } u; @@ -3139,7 +3139,7 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) case MIPS_J: case MIPS_JAL: case MIPS_JALX: - assert(((instr + sizeof(jit_int32_t)) & 0xf0000000) == + assert(((instr + sizeof(int32_t)) & 0xf0000000) == (label & 0xf0000000)); i.ii.b = (label & ~0xf0000000) >> 2; u.i[0] = i.op; diff --git a/libguile/lightning/lib/jit_mips-fpu.c b/libguile/lightning/jit/mips-fpu.c index 35fdf8e3d..cc9be6c66 100644 --- a/libguile/lightning/lib/jit_mips-fpu.c +++ b/libguile/lightning/jit/mips-fpu.c @@ -181,38 +181,38 @@ # define C_UGT_PS(fs,ft) c_cond_fmt(MIPS_fmt_PS,ft,fs,MIPS_cond_UGT) # define c_cond_fmt(fm,ft,fs,cc) _c_cond_fmt(_jit,fm,ft,fs,cc) static void -_c_cond_fmt(jit_state_t *_jit, jit_int32_t fm, - jit_int32_t ft, jit_int32_t fs, jit_int32_t cc); +_c_cond_fmt(jit_state_t *_jit, int32_t fm, + int32_t ft, int32_t fs, int32_t cc); # define addr_f(r0,r1,r2) ADD_S(r0,r1,r2) # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0) -static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define addr_d(r0,r1,r2) ADD_D(r0,r1,r2) # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0) -static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define subr_f(r0,r1,r2) SUB_S(r0,r1,r2) # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0) -static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define subr_d(r0,r1,r2) SUB_D(r0,r1,r2) # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0) -static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1) # define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0) -static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1) # define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0) -static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define mulr_f(r0,r1,r2) MUL_S(r0,r1,r2) # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0) -static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define mulr_d(r0,r1,r2) MUL_D(r0,r1,r2) # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0) -static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define divr_f(r0,r1,r2) DIV_S(r0,r1,r2) # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0) -static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define divr_d(r0,r1,r2) DIV_D(r0,r1,r2) # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0) -static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define absr_f(r0,r1) ABS_S(r0,r1) # define absr_d(r0,r1) ABS_D(r0,r1) # define negr_f(r0,r1) NEG_S(r0,r1) @@ -222,342 +222,342 @@ static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); # define movr_w_f(r0, r1) MTC1(r1, r0) # define movr_f_w(r0, r1) MFC1(r1, r0) # define movi_f_w(r0, i0) _movi_f_w(_jit, r0, i0) -static void _movi_f_w(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f_w(jit_state_t*,int32_t,jit_float32_t*); # define extr_f(r0, r1) _extr_f(_jit, r0, r1) -static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_f(jit_state_t*,int32_t,int32_t); # define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1) -static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_f_i(jit_state_t*,int32_t,int32_t); # if __WORDSIZE == 64 # define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1) -static void _truncr_f_l(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_f_l(jit_state_t*,int32_t,int32_t); # endif # define extr_d_f(r0, r1) CVT_S_D(r0, r1) # define ldr_f(r0, r1) LWC1(r0, 0, r1) # define ldi_f(r0, i0) _ldi_f(_jit, r0, i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); # define ldxr_f(r0, r1, r2) _ldxr_f(_jit, r0, r1, r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_f(r0, r1) SWC1(r1, 0, r0) # define sti_f(i0, r0) _sti_f(_jit, i0, r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); # define stxr_f(r0, r1, r2) _stxr_f(_jit, r0, r1, r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_f(i0, r0, r1) _stxi_f(_jit, i0, r0, r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define movr_f(r0, r1) _movr_f(_jit, r0, r1) -static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_f(jit_state_t*,int32_t,int32_t); # define movi_f(r0, i0) _movi_f(_jit, r0, i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t*); # if NEW_ABI # if __WORDSIZE == 32 # define movi64(r0, i0) _movi64(_jit, r0, i0) -static void _movi64(jit_state_t*,jit_int32_t,jit_int64_t); +static void _movi64(jit_state_t*,int32_t,int64_t); # else # define movi64(r0, i0) movi(r0, i0) # endif # define movr_w_d(r0, r1) DMTC1(r1, r0) # define movr_d_w(r0, r1) DMFC1(r0, r1) # define movi_d_w(r0, i0) _movi_d_w(_jit,r0,i0) -static void _movi_d_w(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d_w(jit_state_t*,int32_t,jit_float64_t*); # else # define movr_ww_d(r0, r1, r2) _movr_ww_d(_jit, r0, r1, r2) -static void _movr_ww_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _movr_ww_d(jit_state_t*,int32_t,int32_t,int32_t); # define movr_d_ww(r0, r1, r2) _movr_d_ww(_jit, r0, r1, r2) -static void _movr_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _movr_d_ww(jit_state_t*,int32_t,int32_t,int32_t); # define movi_d_ww(r0, r1, i0) _movi_d_ww(_jit, r0, r1, i0) -static void _movi_d_ww(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _movi_d_ww(jit_state_t*,int32_t,int32_t,jit_float64_t*); # endif # define extr_d(r0, r1) _extr_d(_jit, r0, r1) -static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_d(jit_state_t*,int32_t,int32_t); # define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1) -static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_i(jit_state_t*,int32_t,int32_t); # if __WORDSIZE == 64 # define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1) -static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_l(jit_state_t*,int32_t,int32_t); # endif # define ldr_d(r0, r1) _ldr_d(_jit, r0, r1) -static void _ldr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_d(jit_state_t*,int32_t,int32_t); # define ldi_d(r0, i0) _ldi_d(_jit, r0, i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); # define ldxr_d(r0, r1, r2) _ldxr_d(_jit, r0, r1, r2) -static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_d(r0, r1) _str_d(_jit, r0, r1) -static void _str_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_d(jit_state_t*,int32_t,int32_t); # define sti_d(i0, r0) _sti_d(_jit, i0, r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); # define stxr_d(r0, r1, r2) _stxr_d(_jit, r0, r1, r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_d(i0, r0, r1) _stxi_d(_jit, i0, r0, r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define movr_d(r0, r1) _movr_d(_jit, r0, r1) -static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_d(jit_state_t*,int32_t,int32_t); # define movi_d(r0, i0) _movi_d(_jit, r0, i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t*); # define ltr_f(r0, r1, r2) _ltr_f(_jit, r0, r1, r2) -static void _ltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_f(jit_state_t*,int32_t,int32_t,int32_t); # define lti_f(r0, r1, i2) _lti_f(_jit, r0, r1, i2) -static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ler_f(r0, r1, r2) _ler_f(_jit, r0, r1, r2) -static void _ler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_f(jit_state_t*,int32_t,int32_t,int32_t); # define lei_f(r0, r1, i2) _lei_f(_jit, r0, r1, i2) -static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define eqr_f(r0, r1, r2) _eqr_f(_jit, r0, r1, r2) -static void _eqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr_f(jit_state_t*,int32_t,int32_t,int32_t); # define eqi_f(r0, r1, i2) _eqi_f(_jit, r0, r1, i2) -static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ger_f(r0, r1, r2) _ger_f(_jit, r0, r1, r2) -static void _ger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_f(jit_state_t*,int32_t,int32_t,int32_t); # define gei_f(r0, r1, i2) _gei_f(_jit, r0, r1, i2) -static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define gtr_f(r0, r1, r2) _gtr_f(_jit, r0, r1, r2) -static void _gtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define gti_f(r0, r1, i2) _gti_f(_jit, r0, r1, i2) -static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ner_f(r0, r1, r2) _ner_f(_jit, r0, r1, r2) -static void _ner_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner_f(jit_state_t*,int32_t,int32_t,int32_t); # define nei_f(r0, r1, i2) _nei_f(_jit, r0, r1, i2) -static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unltr_f(r0, r1, r2) _unltr_f(_jit, r0, r1, r2) -static void _unltr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unltr_f(jit_state_t*,int32_t,int32_t,int32_t); # define unlti_f(r0, r1, i2) _unlti_f(_jit, r0, r1, i2) -static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unler_f(r0, r1, r2) _unler_f(_jit, r0, r1, r2) -static void _unler_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unler_f(jit_state_t*,int32_t,int32_t,int32_t); # define unlei_f(r0, r1, i2) _unlei_f(_jit, r0, r1, i2) -static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define uneqr_f(r0, r1, r2) _uneqr_f(_jit, r0, r1, r2) -static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_f(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_f(r0, r1, i2) _uneqi_f(_jit, r0, r1, i2) -static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unger_f(r0, r1, r2) _unger_f(_jit, r0, r1, r2) -static void _unger_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unger_f(jit_state_t*,int32_t,int32_t,int32_t); # define ungei_f(r0, r1, i2) _ungei_f(_jit, r0, r1, i2) -static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ungtr_f(r0, r1, r2) _ungtr_f(_jit, r0, r1, r2) -static void _ungtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ungtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ungti_f(r0, r1, i2) _ungti_f(_jit, r0, r1, i2) -static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ltgtr_f(r0, r1, r2) _ltgtr_f(_jit, r0, r1, r2) -static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_f(r0, r1, i2) _ltgti_f(_jit, r0, r1, i2) -static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ordr_f(r0, r1, r2) _ordr_f(_jit, r0, r1, r2) -static void _ordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ordr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ordi_f(r0, r1, i2) _ordi_f(_jit, r0, r1, i2) -static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unordr_f(r0, r1, r2) _unordr_f(_jit, r0, r1, r2) -static void _unordr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unordr_f(jit_state_t*,int32_t,int32_t,int32_t); # define unordi_f(r0, r1, i2) _unordi_f(_jit, r0, r1, i2) -static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define bltr_f(i0, r0, r1) _bltr_f(_jit, i0, r0, r1) -static jit_word_t _bltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define blti_f(i0, r0, i1) _blti_f(_jit, i0, r0, i1) static jit_word_t -_blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_blti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bler_f(i0, r0, r1) _bler_f(_jit, i0, r0, r1) -static jit_word_t _bler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define blei_f(i0, r0, i1) _blei_f(_jit, i0, r0, i1) static jit_word_t -_blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_blei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define beqr_f(i0, r0, r1) _beqr_f(_jit, i0, r0, r1) -static jit_word_t _beqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define beqi_f(i0, r0, i1) _beqi_f(_jit, i0, r0, i1) static jit_word_t -_beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_beqi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bger_f(i0, r0, r1) _bger_f(_jit, i0, r0, r1) -static jit_word_t _bger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgei_f(i0, r0, i1) _bgei_f(_jit, i0, r0, i1) static jit_word_t -_bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bgei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bgtr_f(i0, r0, r1) _bgtr_f(_jit, i0, r0, r1) -static jit_word_t _bgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgti_f(i0, r0, i1) _bgti_f(_jit, i0, r0, i1) static jit_word_t -_bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bgti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bner_f(i0, r0, r1) _bner_f(_jit, i0, r0, r1) -static jit_word_t _bner_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bnei_f(i0, r0, i1) _bnei_f(_jit, i0, r0, i1) static jit_word_t -_bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bnei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bunltr_f(i0, r0, r1) _bunltr_f(_jit, i0, r0, r1) -static jit_word_t _bunltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunltr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlti_f(i0, r0, i1) _bunlti_f(_jit, i0, r0, i1) static jit_word_t -_bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bunlti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bunler_f(i0, r0, r1) _bunler_f(_jit, i0, r0, r1) -static jit_word_t _bunler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunler_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlei_f(i0, r0, i1) _bunlei_f(_jit, i0, r0, i1) static jit_word_t -_bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bunlei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define buneqr_f(i0, r0, r1) _buneqr_f(_jit, i0, r0, r1) -static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define buneqi_f(i0, r0, i1) _buneqi_f(_jit, i0, r0, i1) static jit_word_t -_buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_buneqi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bunger_f(i0, r0, r1) _bunger_f(_jit, i0, r0, r1) -static jit_word_t _bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunger_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungei_f(i0, r0, i1) _bungei_f(_jit, i0, r0, i1) static jit_word_t -_bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bungei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bungtr_f(i0, r0, r1) _bungtr_f(_jit, i0, r0, r1) -static jit_word_t _bungtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bungtr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungti_f(i0, r0, i1) _bungti_f(_jit, i0, r0, i1) static jit_word_t -_bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bungti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bltgtr_f(i0, r0, r1) _bltgtr_f(_jit, i0, r0, r1) -static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bltgti_f(i0, r0, i1) _bltgti_f(_jit, i0, r0, i1) static jit_word_t -_bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bltgti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bordr_f(i0, r0, r1) _bordr_f(_jit, i0, r0, r1) -static jit_word_t _bordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bordr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bordi_f(i0, r0, i1) _bordi_f(_jit, i0, r0, i1) static jit_word_t -_bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bordi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define bunordr_f(i0, r0, r1) _bunordr_f(_jit, i0, r0, r1) -static jit_word_t _bunordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunordr_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunordi_f(i0, r0, i1) _bunordi_f(_jit, i0, r0, i1) static jit_word_t -_bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_bunordi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define extr_f_d(r0, r1) CVT_D_S(r0, r1) # define ltr_d(r0, r1, r2) _ltr_d(_jit, r0, r1, r2) -static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_d(jit_state_t*,int32_t,int32_t,int32_t); # define lti_d(r0, r1, i2) _lti_d(_jit, r0, r1, i2) -static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ler_d(r0, r1, r2) _ler_d(_jit, r0, r1, r2) -static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_d(jit_state_t*,int32_t,int32_t,int32_t); # define lei_d(r0, r1, i2) _lei_d(_jit, r0, r1, i2) -static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define eqr_d(r0, r1, r2) _eqr_d(_jit, r0, r1, r2) -static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define eqi_d(r0, r1, i2) _eqi_d(_jit, r0, r1, i2) -static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ger_d(r0, r1, r2) _ger_d(_jit, r0, r1, r2) -static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_d(jit_state_t*,int32_t,int32_t,int32_t); # define gei_d(r0, r1, i2) _gei_d(_jit, r0, r1, i2) -static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define gtr_d(r0, r1, r2) _gtr_d(_jit, r0, r1, r2) -static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define gti_d(r0, r1, i2) _gti_d(_jit, r0, r1, i2) -static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ner_d(r0, r1, r2) _ner_d(_jit, r0, r1, r2) -static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner_d(jit_state_t*,int32_t,int32_t,int32_t); # define nei_d(r0, r1, i2) _nei_d(_jit, r0, r1, i2) -static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unltr_d(r0, r1, r2) _unltr_d(_jit, r0, r1, r2) -static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unltr_d(jit_state_t*,int32_t,int32_t,int32_t); # define unlti_d(r0, r1, i2) _unlti_d(_jit, r0, r1, i2) -static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unler_d(r0, r1, r2) _unler_d(_jit, r0, r1, r2) -static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unler_d(jit_state_t*,int32_t,int32_t,int32_t); # define unlei_d(r0, r1, i2) _unlei_d(_jit, r0, r1, i2) -static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define uneqr_d(r0, r1, r2) _uneqr_d(_jit, r0, r1, r2) -static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_d(r0, r1, i2) _uneqi_d(_jit, r0, r1, i2) -static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unger_d(r0, r1, r2) _unger_d(_jit, r0, r1, r2) -static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unger_d(jit_state_t*,int32_t,int32_t,int32_t); # define ungei_d(r0, r1, i2) _ungei_d(_jit, r0, r1, i2) -static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ungtr_d(r0, r1, r2) _ungtr_d(_jit, r0, r1, r2) -static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ungtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ungti_d(r0, r1, i2) _ungti_d(_jit, r0, r1, i2) -static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ltgtr_d(r0, r1, r2) _ltgtr_d(_jit, r0, r1, r2) -static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_d(r0, r1, i2) _ltgti_d(_jit, r0, r1, i2) -static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ordr_d(r0, r1, r2) _ordr_d(_jit, r0, r1, r2) -static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ordi_d(r0, r1, i2) _ordi_d(_jit, r0, r1, i2) -static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unordr_d(r0, r1, r2) _unordr_d(_jit, r0, r1, r2) -static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define unordi_d(r0, r1, i2) _unordi_d(_jit, r0, r1, i2) -static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define bltr_d(i0, r0, r1) _bltr_d(_jit, i0, r0, r1) -static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define blti_d(i0, r0, i1) _blti_d(_jit, i0, r0, i1) static jit_word_t -_blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_blti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bler_d(i0, r0, r1) _bler_d(_jit, i0, r0, r1) -static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define blei_d(i0, r0, i1) _blei_d(_jit, i0, r0, i1) static jit_word_t -_blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_blei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define beqr_d(i0, r0, r1) _beqr_d(_jit, i0, r0, r1) -static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define beqi_d(i0, r0, i1) _beqi_d(_jit, i0, r0, i1) static jit_word_t -_beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_beqi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bger_d(i0, r0, r1) _bger_d(_jit, i0, r0, r1) -static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgei_d(i0, r0, i1) _bgei_d(_jit, i0, r0, i1) static jit_word_t -_bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bgei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bgtr_d(i0, r0, r1) _bgtr_d(_jit, i0, r0, r1) -static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgti_d(i0, r0, i1) _bgti_d(_jit, i0, r0, i1) static jit_word_t -_bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bgti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bner_d(i0, r0, r1) _bner_d(_jit, i0, r0, r1) -static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bnei_d(i0, r0, i1) _bnei_d(_jit, i0, r0, i1) static jit_word_t -_bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bnei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bunltr_d(i0, r0, r1) _bunltr_d(_jit, i0, r0, r1) -static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlti_d(i0, r0, i1) _bunlti_d(_jit, i0, r0, i1) static jit_word_t -_bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bunlti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bunler_d(i0, r0, r1) _bunler_d(_jit, i0, r0, r1) -static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunler_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlei_d(i0, r0, i1) _bunlei_d(_jit, i0, r0, i1) static jit_word_t -_bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bunlei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define buneqr_d(i0, r0, r1) _buneqr_d(_jit, i0, r0, r1) -static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define buneqi_d(i0, r0, i1) _buneqi_d(_jit, i0, r0, i1) static jit_word_t -_buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_buneqi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bunger_d(i0, r0, r1) _bunger_d(_jit, i0, r0, r1) -static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungei_d(i0, r0, i1) _bungei_d(_jit, i0, r0, i1) static jit_word_t -_bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bungei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bungtr_d(i0, r0, r1) _bungtr_d(_jit, i0, r0, r1) -static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungti_d(i0, r0, i1) _bungti_d(_jit, i0, r0, i1) static jit_word_t -_bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bungti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bltgtr_d(i0, r0, r1) _bltgtr_d(_jit, i0, r0, r1) -static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bltgti_d(i0, r0, i1) _bltgti_d(_jit, i0, r0, i1) static jit_word_t -_bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bltgti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bordr_d(i0, r0, r1) _bordr_d(_jit, i0, r0, r1) -static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bordi_d(i0, r0, i1) _bordi_d(_jit, i0, r0, i1) static jit_word_t -_bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bordi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define bunordr_d(i0, r0, r1) _bunordr_d(_jit, i0, r0, r1) -static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunordi_d(i0, r0, i1) _bunordi_d(_jit, i0, r0, i1) static jit_word_t -_bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_bunordi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE static void -_c_cond_fmt(jit_state_t *_jit, jit_int32_t fm, - jit_int32_t ft, jit_int32_t fs, jit_int32_t cc) +_c_cond_fmt(jit_state_t *_jit, int32_t fm, + int32_t ft, int32_t fs, int32_t cc) { jit_instr_t i; i.cc.b = cc; @@ -571,10 +571,10 @@ _c_cond_fmt(jit_state_t *_jit, jit_int32_t fm, # define fpr_opi(name, type, size) \ static void \ _##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ + int32_t r0, int32_t r1, \ jit_float##size##_t *i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_##type(rn(reg), i0); \ name##r_##type(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -582,11 +582,11 @@ _##name##i_##type(jit_state_t *_jit, \ # define fpr_bopi(name, type, size) \ static jit_word_t \ _b##name##i_##type(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, \ + jit_word_t i0, int32_t r0, \ jit_float##size##_t *i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ movi_##type(rn(reg), i1); \ word = b##name##r_##type(i0, r0, rn(reg)); \ @@ -605,10 +605,10 @@ fopi(mul) fopi(div) static void -_movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f_w(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; @@ -617,9 +617,9 @@ _movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_fpr); # if __WORDSIZE == 32 MTC1(r1, rn(t0)); @@ -632,9 +632,9 @@ _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_fpr); TRUNC_W_S(rn(t0), r1); MFC1(r0, rn(t0)); @@ -643,9 +643,9 @@ _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_f_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_fpr); TRUNC_L_S(rn(t0), r1); DMFC1(r0, rn(t0)); @@ -654,9 +654,9 @@ _truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LWC1(r0, i0, _ZERO_REGNO); else { @@ -668,9 +668,9 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_f(r0, rn(reg)); @@ -678,9 +678,9 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) LWC1(r0, i0, r1); else { @@ -692,9 +692,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SWC1(r0, i0, _ZERO_REGNO); else { @@ -706,9 +706,9 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_f(rn(reg), r2); @@ -716,9 +716,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) SWC1(r1, i0, r0); else { @@ -730,20 +730,20 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) MOV_S(r0, r1); } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; data.f = *i0; if (data.i) { @@ -769,7 +769,7 @@ dopi(div) #if NEW_ABI /* n32 abi requires 64 bit cpu */ static void -_movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0) +_movi64(jit_state_t *_jit, int32_t r0, int64_t i0) { if (i0 == 0) OR(r0, _ZERO_REGNO, _ZERO_REGNO); @@ -802,11 +802,11 @@ _movi64(jit_state_t *_jit, jit_int32_t r0, jit_int64_t i0) } static void -_movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d_w(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { jit_word_t w; union { - jit_int64_t l; + int64_t l; jit_float64_t d; } data; if (_jitc->no_data) { @@ -826,7 +826,7 @@ _movi_d_w(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) #else static void -_movr_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_movr_ww_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { assert(r1 == r2 - 1); MTC1(r1, r0 + BE_P); @@ -834,7 +834,7 @@ _movr_ww_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_movr_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_movr_d_ww(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { assert(r0 == r1 - 1); MFC1(r0, r2 + BE_P); @@ -842,11 +842,11 @@ _movr_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) +_movi_d_ww(jit_state_t *_jit, int32_t r0, int32_t r1, jit_float64_t *i0) { union { - jit_int32_t i[2]; - jit_int64_t l; + int32_t i[2]; + int64_t l; jit_float64_t d; } data; @@ -857,9 +857,9 @@ _movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) #endif static void -_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_fpr); # if __WORDSIZE == 32 MTC1(r1, rn(t0)); @@ -872,9 +872,9 @@ _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_fpr); TRUNC_W_D(rn(t0), r1); MFC1(r0, rn(t0)); @@ -883,9 +883,9 @@ _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_fpr); TRUNC_L_D(rn(t0), r1); DMFC1(r0, rn(t0)); @@ -894,7 +894,7 @@ _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { # if __WORDSIZE == 64 || NEW_ABI LDC1(r0, 0, r1); @@ -905,9 +905,9 @@ _ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 || NEW_ABI if (can_sign_extend_short_p(i0)) LDC1(r0, i0, _ZERO_REGNO); @@ -933,9 +933,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); ldr_d(r0, rn(reg)); @@ -943,9 +943,9 @@ _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 || NEW_ABI if (can_sign_extend_short_p(i0)) LDC1(r0, i0, r1); @@ -964,7 +964,7 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_str_d(jit_state_t *_jit,jit_int32_t r0, jit_int32_t r1) +_str_d(jit_state_t *_jit,int32_t r0, int32_t r1) { # if __WORDSIZE == 64 || NEW_ABI SDC1(r1, 0, r0); @@ -975,9 +975,9 @@ _str_d(jit_state_t *_jit,jit_int32_t r0, jit_int32_t r1) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 || NEW_ABI if (can_sign_extend_short_p(i0)) SDC1(r0, i0, _ZERO_REGNO); @@ -996,9 +996,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); str_d(rn(reg), r2); @@ -1006,9 +1006,9 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 || NEW_ABI if (can_sign_extend_short_p(i0)) SDC1(r1, i0, r0); @@ -1027,21 +1027,21 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) MOV_D(r0, r1); } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { - jit_int32_t i[2]; - jit_int64_t l; + int32_t i[2]; + int64_t l; jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; data.d = *i0; # if __WORDSIZE == 64 || NEW_ABI @@ -1086,7 +1086,7 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) } static void -_ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_S(r1, r2); @@ -1100,7 +1100,7 @@ _ltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(lt) static void -_ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_S(r1, r2); @@ -1114,7 +1114,7 @@ _ler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(le) static void -_eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_S(r1, r2); @@ -1128,7 +1128,7 @@ _eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(eq) static void -_ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_S(r1, r2); @@ -1142,7 +1142,7 @@ _ger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ge) static void -_gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_S(r1, r2); @@ -1156,7 +1156,7 @@ _gtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(gt) static void -_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_S(r1, r2); @@ -1170,7 +1170,7 @@ _ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ne) static void -_unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unltr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_S(r1, r2); @@ -1184,7 +1184,7 @@ _unltr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(unlt) static void -_unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unler_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_S(r1, r2); @@ -1198,7 +1198,7 @@ _unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(unle) static void -_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_S(r1, r2); @@ -1212,7 +1212,7 @@ _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(uneq) static void -_unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unger_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_S(r1, r2); @@ -1226,7 +1226,7 @@ _unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(unge) static void -_ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ungtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_S(r1, r2); @@ -1240,7 +1240,7 @@ _ungtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ungt) static void -_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_S(r1, r2); @@ -1254,7 +1254,7 @@ _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ltgt) static void -_ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_S(r1, r2); @@ -1268,7 +1268,7 @@ _ordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(ord) static void -_unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unordr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_S(r1, r2); @@ -1282,7 +1282,7 @@ _unordr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) fopi(unord) static jit_word_t -_bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bltr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_S(r1, r2); @@ -1294,7 +1294,7 @@ _bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(lt) static jit_word_t -_bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bler_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_S(r1, r2); @@ -1306,7 +1306,7 @@ _bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(le) static jit_word_t -_beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_beqr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_S(r1, r2); @@ -1318,7 +1318,7 @@ _beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(eq) static jit_word_t -_bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bger_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_S(r1, r2); @@ -1330,7 +1330,7 @@ _bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(ge) static jit_word_t -_bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bgtr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_S(r1, r2); @@ -1342,7 +1342,7 @@ _bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(gt) static jit_word_t -_bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bner_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_S(r1, r2); @@ -1354,7 +1354,7 @@ _bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(ne) static jit_word_t -_bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunltr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_S(r1, r2); @@ -1366,7 +1366,7 @@ _bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(unlt) static jit_word_t -_bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunler_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_S(r1, r2); @@ -1378,7 +1378,7 @@ _bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(unle) static jit_word_t -_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_buneqr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_S(r1, r2); @@ -1390,7 +1390,7 @@ _buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(uneq) static jit_word_t -_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunger_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_S(r1, r2); @@ -1402,7 +1402,7 @@ _bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(unge) static jit_word_t -_bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bungtr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_S(r1, r2); @@ -1414,7 +1414,7 @@ _bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(ungt) static jit_word_t -_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bltgtr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_S(r1, r2); @@ -1426,7 +1426,7 @@ _bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(ltgt) static jit_word_t -_bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bordr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_S(r1, r2); @@ -1438,7 +1438,7 @@ _bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(ord) static jit_word_t -_bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunordr_f(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_S(r1, r2); @@ -1450,7 +1450,7 @@ _bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) fbopi(unord) static void -_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_D(r1, r2); @@ -1464,7 +1464,7 @@ _ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(lt) static void -_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_D(r1, r2); @@ -1478,7 +1478,7 @@ _ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(le) static void -_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_D(r1, r2); @@ -1492,7 +1492,7 @@ _eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(eq) static void -_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_D(r1, r2); @@ -1506,7 +1506,7 @@ _ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ge) static void -_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_D(r1, r2); @@ -1520,7 +1520,7 @@ _gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(gt) static void -_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_D(r1, r2); @@ -1534,7 +1534,7 @@ _ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ne) static void -_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_D(r1, r2); @@ -1548,7 +1548,7 @@ _unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(unlt) static void -_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_D(r1, r2); @@ -1562,7 +1562,7 @@ _unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(unle) static void -_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_D(r1, r2); @@ -1576,7 +1576,7 @@ _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(uneq) static void -_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_D(r1, r2); @@ -1590,7 +1590,7 @@ _unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(unge) static void -_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ungtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_D(r1, r2); @@ -1604,7 +1604,7 @@ _ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ungt) static void -_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_D(r1, r2); @@ -1618,7 +1618,7 @@ _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ltgt) static void -_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_D(r1, r2); @@ -1632,7 +1632,7 @@ _ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(ord) static void -_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_D(r1, r2); @@ -1646,7 +1646,7 @@ _unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(unord) static jit_word_t -_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_D(r1, r2); @@ -1658,7 +1658,7 @@ _bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(lt) static jit_word_t -_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bler_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_D(r1, r2); @@ -1670,7 +1670,7 @@ _bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(le) static jit_word_t -_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_beqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_D(r1, r2); @@ -1682,7 +1682,7 @@ _beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(eq) static jit_word_t -_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bger_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_D(r1, r2); @@ -1694,7 +1694,7 @@ _bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(ge) static jit_word_t -_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_D(r1, r2); @@ -1706,7 +1706,7 @@ _bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(gt) static jit_word_t -_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bner_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_EQ_D(r1, r2); @@ -1718,7 +1718,7 @@ _bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(ne) static jit_word_t -_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULT_D(r1, r2); @@ -1730,7 +1730,7 @@ _bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(unlt) static jit_word_t -_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunler_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_ULE_D(r1, r2); @@ -1742,7 +1742,7 @@ _bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(unle) static jit_word_t -_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_D(r1, r2); @@ -1754,7 +1754,7 @@ _buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(uneq) static jit_word_t -_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLT_D(r1, r2); @@ -1766,7 +1766,7 @@ _bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(unge) static jit_word_t -_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bungtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_OLE_D(r1, r2); @@ -1778,7 +1778,7 @@ _bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(ungt) static jit_word_t -_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UEQ_D(r1, r2); @@ -1790,7 +1790,7 @@ _bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(ltgt) static jit_word_t -_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_D(r1, r2); @@ -1802,7 +1802,7 @@ _bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(ord) static jit_word_t -_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) +_bunordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r1, int32_t r2) { jit_word_t w; C_UN_D(r1, r2); @@ -1814,10 +1814,10 @@ _bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r1, jit_int32_t r2) dbopi(unord) static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { #if !NEW_ABI - jit_int32_t reg; + int32_t reg; #endif assert(_jitc->function->self.call & jit_call_varargs); #if !NEW_ABI diff --git a/libguile/lightning/lib/jit_mips.c b/libguile/lightning/jit/mips.c index cca3d76d9..70b2d94ea 100644 --- a/libguile/lightning/lib/jit_mips.c +++ b/libguile/lightning/jit/mips.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -41,9 +41,9 @@ # define S_DISP 0 # define I_DISP 0 #else -# define C_DISP STACK_SLOT - sizeof(jit_int8_t) -# define S_DISP STACK_SLOT - sizeof(jit_int16_t) -# define I_DISP STACK_SLOT - sizeof(jit_int32_t) +# define C_DISP STACK_SLOT - sizeof(int8_t) +# define S_DISP STACK_SLOT - sizeof(int16_t) +# define I_DISP STACK_SLOT - sizeof(int32_t) #endif /* @@ -64,15 +64,15 @@ static jit_node_t *_jit_make_arg_d(jit_state_t*,jit_node_t*); static void _patch(jit_state_t*,jit_word_t,jit_node_t*); #define PROTO 1 -# include "jit_rewind.c" -# include "jit_mips-cpu.c" -# include "jit_mips-fpu.c" +# include "rewind.c" +# include "mips-cpu.c" +# include "mips-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { rc(gpr) | 0x01, "at" }, { rc(gpr) | 0x02, "v0" }, { rc(gpr) | 0x03, "v1" }, @@ -169,7 +169,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -188,7 +188,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = _jitc->function->self.alen = 0; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -207,8 +207,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -226,13 +226,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -259,7 +259,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); if (JIT_RET != u) @@ -279,7 +279,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); if (JIT_FRET != u) @@ -300,7 +300,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); if (JIT_FRET != u) @@ -345,7 +345,7 @@ _jit_arg_register_p(jit_state_t *_jit, jit_node_t *u) static jit_node_t * _jit_make_arg(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t offset; + int32_t offset; #if NEW_ABI if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -373,7 +373,7 @@ _jit_make_arg(jit_state_t *_jit, jit_node_t *node) static jit_node_t * _jit_make_arg_f(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t offset; + int32_t offset; #if NEW_ABI if (jit_arg_reg_p(_jitc->function->self.argi)) { offset = _jitc->function->self.argi++; @@ -416,7 +416,7 @@ _jit_make_arg_f(jit_state_t *_jit, jit_node_t *node) static jit_node_t * _jit_make_arg_d(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t offset; + int32_t offset; #if NEW_ABI if (jit_arg_reg_p(_jitc->function->self.argi)) { offset = _jitc->function->self.argi++; @@ -490,7 +490,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -519,7 +519,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -531,7 +531,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -543,7 +543,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -555,7 +555,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -567,7 +567,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -585,7 +585,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) #if __WORDSIZE == 64 void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_ui, u, v); @@ -597,7 +597,7 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_l, u, v); @@ -610,7 +610,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) #endif void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { jit_inc_synth_wp(putargr, u, v); assert(v->code == jit_code_arg); @@ -624,7 +624,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_arg_reg_p(v->u.w)) @@ -639,7 +639,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -660,7 +660,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -683,7 +683,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); #if NEW_ABI @@ -715,7 +715,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -736,7 +736,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -759,7 +759,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); #if NEW_ABI @@ -791,7 +791,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(pushargr, u); jit_link_prepare(); @@ -822,7 +822,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; #if !NEW_ABI jit_word_t offset; #endif @@ -858,7 +858,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { #if !NEW_ABI jit_word_t offset; @@ -899,7 +899,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; #if !NEW_ABI jit_word_t offset; #endif @@ -944,7 +944,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { #if !NEW_ABI jit_bool_t adjust; @@ -992,7 +992,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; #if !NEW_ABI jit_bool_t adjust; jit_word_t offset; @@ -1044,9 +1044,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { @@ -1066,7 +1066,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function); @@ -1112,31 +1112,31 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_extr_c(r0, JIT_RET); } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_extr_uc(r0, JIT_RET); } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_extr_s(r0, JIT_RET); } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_extr_us(r0, JIT_RET); } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { #if __WORDSIZE == 32 if (r0 != JIT_RET) @@ -1148,13 +1148,13 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) #if __WORDSIZE == 64 void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_extr_ui(r0, JIT_RET); } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { if (r0 != JIT_RET) jit_movr(r0, JIT_RET); @@ -1162,14 +1162,14 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) #endif void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { if (r0 != JIT_FRET) jit_movr_f(r0, JIT_FRET); } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { if (r0 != JIT_FRET) jit_movr_d(r0, JIT_FRET); @@ -1181,15 +1181,15 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t patch_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1864,9 +1864,9 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_rewind.c" -# include "jit_mips-cpu.c" -# include "jit_mips-fpu.c" +# include "rewind.c" +# include "mips-cpu.c" +# include ", 2018mips-fpu.c" #undef CODE void @@ -1883,25 +1883,25 @@ jit_flush(void *fptr, void *tptr) } void -_emit_ldxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi(rn(r0), rn(r1), i0); } void -_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi(i0, rn(r0), rn(r1)); } void -_emit_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_d(rn(r0), rn(r1), i0); } void -_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi_d(i0, rn(r0), rn(r1)); } @@ -1909,7 +1909,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_mips.h b/libguile/lightning/jit/mips.h index e669966aa..e669966aa 100644 --- a/libguile/lightning/include/lightning/jit_mips.h +++ b/libguile/lightning/jit/mips.h diff --git a/libguile/lightning/lib/jit_ppc-cpu.c b/libguile/lightning/jit/ppc-cpu.c index 0fb695989..6f911dd1f 100644 --- a/libguile/lightning/lib/jit_ppc-cpu.c +++ b/libguile/lightning/jit/ppc-cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2017, 2019 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -308,7 +308,7 @@ error handler to be invoked # define MCRXR(d) FX(31,d<<2,0,0,512) # else # define MCRXR(cr) _MCRXR(_jit,cr); -static void _MCRXR(jit_state_t*, jit_int32_t); +static void _MCRXR(jit_state_t*, int32_t); # endif # define MFCR(d) FX(31,d,0,0,19) # define MFMSR(d) FX(31,d,0,0,83) @@ -492,13 +492,13 @@ static void _MCRXR(jit_state_t*, jit_int32_t); # define XORI(s,a,u) FDu(26,a,s,u) # define XORIS(s,a,u) FDu(27,a,s,u) # define nop(c) _nop(_jit,c) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); # define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); # define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); # define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); # define negr(r0,r1) NEG(r0,r1) # define comr(r0,r1) NOT(r0,r1) # define extr_c(r0,r1) EXTSB(r0,r1) @@ -510,43 +510,43 @@ static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); # define extr_ui(r0,r1) CLRLDI(r0,r1,32) # endif # if __BYTE_ORDER == __BIG_ENDIAN -# define htonr_us(r0,r1) extr_us(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) # if __WORDSIZE == 32 -# define htonr_ui(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) movr(r0,r1) # else -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr_ul(r0,r1) movr(r0,r1) # endif # else -# define htonr_us(r0,r1) _htonr_us(_jit,r0,r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0,r1) _htonr_ui(_jit,r0,r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +# define bswapr_us(r0,r1) _bswapr_us(_jit,r0,r1) +static void _bswapr_us(jit_state_t*,int32_t,int32_t); +# define bswapr_ui(r0,r1) _bswapr_ui(_jit,r0,r1) +static void _bswapr_ui(jit_state_t*,int32_t,int32_t); # if __WORDSIZE == 64 -# define htonr_ul(r0,r1) _htonr_ul(_jit,r0,r1) -static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t); +# define bswapr_ul(r0,r1) _bswapr_ul(_jit,r0,r1) +static void _bswapr_ul(jit_state_t*,int32_t,int32_t); # endif # endif # define addr(r0,r1,r2) ADD(r0,r1,r2) # define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); # define addcr(r0,r1,r2) ADDC(r0,r1,r2) # define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); # define addxr(r0,r1,r2) ADDE(r0,r1,r2) # define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subr(r0,r1,r2) SUB(r0,r1,r2) # define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0,r1,r2) SUBC(r0,r1,r2) # define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0,r1,r2) SUBFE(r0,r2,r1) # define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define mulr(r0,r1,r2) MULLW(r0,r1,r2) # define mullr(r0,r1,r2) MULLW(r0,r1,r2) @@ -559,293 +559,293 @@ static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); # define mulhr_u(r0,r1,r2) MULHDU(r0,r1,r2) # endif # define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); # define qmulr(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,1) # define qmulr_u(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,0) # define iqmulr(r0,r1,r2,r3,cc) _iqmulr(_jit,r0,r1,r2,r3,cc) -static void _iqmulr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqmulr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qmuli(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,1) # define qmuli_u(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,0) # define iqmuli(r0,r1,r2,i0,cc) _iqmuli(_jit,r0,r1,r2,i0,cc) -static void _iqmuli(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqmuli(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # if __WORDSIZE == 32 # define divr(r0,r1,r2) DIVW(r0,r1,r2) # else # define divr(r0,r1,r2) DIVD(r0,r1,r2) # endif # define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define divr_u(r0,r1,r2) DIVWU(r0,r1,r2) # else # define divr_u(r0,r1,r2) DIVDU(r0,r1,r2) # endif # define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define qdivr(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,1) # define qdivr_u(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,0) # define iqdivr(r0,r1,r2,r3,cc) _iqdivr(_jit,r0,r1,r2,r3,cc) -static void _iqdivr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqdivr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qdivi(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,1) # define qdivi_u(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,0) # define iqdivi(r0,r1,r2,i0,cc) _iqdivi(_jit,r0,r1,r2,i0,cc) -static void _iqdivi(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqdivi(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); # define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); # define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); # define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define andr(r0,r1,r2) AND(r0,r1,r2) # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); # define orr(r0,r1,r2) OR(r0,r1,r2) # define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); # define xorr(r0,r1,r2) XOR(r0,r1,r2) # define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define lshr(r0,r1,r2) SLW(r0,r1,r2) # else # define lshr(r0,r1,r2) SLD(r0,r1,r2) # endif # define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define rshr(r0,r1,r2) SRAW(r0,r1,r2) # else # define rshr(r0,r1,r2) SRAD(r0,r1,r2) # endif # define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define rshr_u(r0,r1,r2) SRW(r0,r1,r2) # else # define rshr_u(r0,r1,r2) SRD(r0,r1,r2) # endif # define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define ltr(r0,r1,r2) _ltr(_jit,r0,r1,r2) -static void _ltr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr(jit_state_t*,int32_t,int32_t,int32_t); # define lti(r0,r1,i0) _lti(_jit,r0,r1,i0) -static void _lti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti(jit_state_t*,int32_t,int32_t,jit_word_t); # define ltr_u(r0,r1,r2) _ltr_u(_jit,r0,r1,r2) -static void _ltr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_u(jit_state_t*,int32_t,int32_t,int32_t); # define lti_u(r0,r1,i0) _lti_u(_jit,r0,r1,i0) -static void _lti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lti_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define ler(r0,r1,r2) _ler(_jit,r0,r1,r2) -static void _ler(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler(jit_state_t*,int32_t,int32_t,int32_t); # define lei(r0,r1,i0) _lei(_jit,r0,r1,i0) -static void _lei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei(jit_state_t*,int32_t,int32_t,jit_word_t); # define ler_u(r0,r1,r2) _ler_u(_jit,r0,r1,r2) -static void _ler_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_u(jit_state_t*,int32_t,int32_t,int32_t); # define lei_u(r0,r1,i0) _lei_u(_jit,r0,r1,i0) -static void _lei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lei_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define eqr(r0,r1,r2) _eqr(_jit,r0,r1,r2) -static void _eqr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr(jit_state_t*,int32_t,int32_t,int32_t); # define eqi(r0,r1,i0) _eqi(_jit,r0,r1,i0) -static void _eqi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _eqi(jit_state_t*,int32_t,int32_t,jit_word_t); # define ger(r0,r1,r2) _ger(_jit,r0,r1,r2) -static void _ger(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger(jit_state_t*,int32_t,int32_t,int32_t); # define gei(r0,r1,i0) _gei(_jit,r0,r1,i0) -static void _gei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei(jit_state_t*,int32_t,int32_t,jit_word_t); # define ger_u(r0,r1,r2) _ger_u(_jit,r0,r1,r2) -static void _ger_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_u(jit_state_t*,int32_t,int32_t,int32_t); # define gei_u(r0,r1,i0) _gei_u(_jit,r0,r1,i0) -static void _gei_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gei_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define gtr(r0,r1,r2) _gtr(_jit,r0,r1,r2) -static void _gtr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr(jit_state_t*,int32_t,int32_t,int32_t); # define gti(r0,r1,i0) _gti(_jit,r0,r1,i0) -static void _gti(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti(jit_state_t*,int32_t,int32_t,jit_word_t); # define gtr_u(r0,r1,r2) _gtr_u(_jit,r0,r1,r2) -static void _gtr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_u(jit_state_t*,int32_t,int32_t,int32_t); # define gti_u(r0,r1,i0) _gti_u(_jit,r0,r1,i0) -static void _gti_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _gti_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define ner(r0,r1,r2) _ner(_jit,r0,r1,r2) -static void _ner(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner(jit_state_t*,int32_t,int32_t,int32_t); # define nei(r0,r1,i0) _nei(_jit,r0,r1,i0) -static void _nei(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _nei(jit_state_t*,int32_t,int32_t,jit_word_t); #define bltr(i0,r0,r1) _bltr(_jit,i0,r0,r1) -static jit_word_t _bltr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr(jit_state_t*,jit_word_t,int32_t,int32_t); #define blti(i0,r0,i1) _blti(_jit,i0,r0,i1) -static jit_word_t _blti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bltr_u(i0,r0,r1) _bltr_u(_jit,i0,r0,r1) -static jit_word_t _bltr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define blti_u(i0,r0,i1) _blti_u(_jit,i0,r0,i1) -static jit_word_t _blti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bler(i0,r0,r1) _bler(_jit,i0,r0,r1) -static jit_word_t _bler(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler(jit_state_t*,jit_word_t,int32_t,int32_t); #define blei(i0,r0,i1) _blei(_jit,i0,r0,i1) -static jit_word_t _blei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bler_u(i0,r0,r1) _bler_u(_jit,i0,r0,r1) -static jit_word_t _bler_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define blei_u(i0,r0,i1) _blei_u(_jit,i0,r0,i1) -static jit_word_t _blei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _blei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define beqr(i0,r0,r1) _beqr(_jit,i0,r0,r1) -static jit_word_t _beqr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr(jit_state_t*,jit_word_t,int32_t,int32_t); #define beqi(i0,r0,i1) _beqi(_jit,i0,r0,i1) -static jit_word_t _beqi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _beqi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bger(i0,r0,r1) _bger(_jit,i0,r0,r1) -static jit_word_t _bger(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgei(i0,r0,i1) _bgei(_jit,i0,r0,i1) -static jit_word_t _bgei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bger_u(i0,r0,r1) _bger_u(_jit,i0,r0,r1) -static jit_word_t _bger_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgei_u(i0,r0,i1) _bgei_u(_jit,i0,r0,i1) -static jit_word_t _bgei_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgei_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgtr(i0,r0,r1) _bgtr(_jit,i0,r0,r1) -static jit_word_t _bgtr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgti(i0,r0,i1) _bgti(_jit,i0,r0,i1) -static jit_word_t _bgti(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bgtr_u(i0,r0,r1) _bgtr_u(_jit,i0,r0,r1) -static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bgti_u(i0,r0,i1) _bgti_u(_jit,i0,r0,i1) -static jit_word_t _bgti_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bgti_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bner(i0,r0,r1) _bner(_jit,i0,r0,r1) -static jit_word_t _bner(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner(jit_state_t*,jit_word_t,int32_t,int32_t); #define bnei(i0,r0,i1) _bnei(_jit,i0,r0,i1) -static jit_word_t _bnei(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bnei(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bmsr(i0,r0,r1) _bmsr(_jit,i0,r0,r1) -static jit_word_t _bmsr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmsr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bmsi(i0,r0,i1) _bmsi(_jit,i0,r0,i1) -static jit_word_t _bmsi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmsi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bmcr(i0,r0,r1) _bmcr(_jit,i0,r0,r1) -static jit_word_t _bmcr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmcr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bmci(i0,r0,i1) _bmci(_jit,i0,r0,i1) -static jit_word_t _bmci(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmci(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define boaddr(i0,r0,r1) _boaddr(_jit,i0,r0,r1) -static jit_word_t _boaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _boaddr(jit_state_t*,jit_word_t,int32_t,int32_t); #define boaddi(i0,r0,i1) _boaddi(_jit,i0,r0,i1) -static jit_word_t _boaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _boaddi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxaddr(i0,r0,r1) _bxaddr(_jit,i0,r0,r1) -static jit_word_t _bxaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxaddr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxaddi(i0,r0,i1) _bxaddi(_jit,i0,r0,i1) -static jit_word_t _bxaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxaddi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bosubr(i0,r0,r1) _bosubr(_jit,i0,r0,r1) -static jit_word_t _bosubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bosubr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bosubi(i0,r0,i1) _bosubi(_jit,i0,r0,i1) -static jit_word_t _bosubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bosubi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxsubr(i0,r0,r1) _bxsubr(_jit,i0,r0,r1) -static jit_word_t _bxsubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxsubr(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxsubi(i0,r0,i1) _bxsubi(_jit,i0,r0,i1) -static jit_word_t _bxsubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxsubi(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define boaddr_u(i0,r0,r1) _boaddr_u(_jit,i0,r0,r1) -static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define boaddi_u(i0,r0,i1) _boaddi_u(_jit,i0,r0,i1) -static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxaddr_u(i0,r0,r1) _bxaddr_u(_jit,i0,r0,r1) -static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxaddi_u(i0,r0,i1) _bxaddi_u(_jit,i0,r0,i1) -static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bosubr_u(i0,r0,r1) _bosubr_u(_jit,i0,r0,r1) -static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bosubi_u(i0,r0,i1) _bosubi_u(_jit,i0,r0,i1) -static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); #define bxsubr_u(i0,r0,r1) _bxsubr_u(_jit,i0,r0,r1) -static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,int32_t,int32_t); #define bxsubi_u(i0,r0,i1) _bxsubi_u(_jit,i0,r0,i1) -static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,int32_t,jit_word_t); # define ldr_c(r0,r1) _ldr_c(_jit,r0,r1) -static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_c(jit_state_t*,int32_t,int32_t); # define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldxr_c(r0,r1,i0) _ldxr_c(_jit,r0,r1,i0) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_uc(r0,r1) LBZX(r0, _R0_REGNO, r1) # define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_s(r0,r1) LHAX(r0, _R0_REGNO, r1) # define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldxr_s(r0,r1,i0) _ldxr_s(_jit,r0,r1,i0) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_us(r0,r1) LHZX(r0, _R0_REGNO, r1) # define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # define ldxr_us(r0,r1,i0) _ldxr_us(_jit,r0,r1,i0) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ldr_i(r0,r1) LWZX(r0, _R0_REGNO, r1) # else # define ldr_i(r0,r1) LWAX(r0, _R0_REGNO, r1) # endif # define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # define ldxr_i(r0,r1,i0) _ldxr_i(_jit,r0,r1,i0) -static void _ldxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 64 # define ldr_ui(r0,r1) LWZX(r0, _R0_REGNO, r1) # define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); # define ldxr_ui(r0,r1,i0) _ldxr_ui(_jit,r0,r1,i0) -static void _ldxr_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_ui(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_l(r0,r1) LDX(r0, _R0_REGNO, r1) # define ldi_l(r0,i0) _ldi_l(_jit,r0,i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); # define ldxr_l(r0,r1,i0) _ldxr_l(_jit,r0,r1,i0) -static void _ldxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_l(r0,r1,i0) _ldxi_l(_jit,r0,r1,i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); # endif # define str_c(r0,r1) STBX(r1, _R0_REGNO, r0) # define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define str_s(r0,r1) STHX(r1, _R0_REGNO, r0) # define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # define str_i(r0,r1) STWX(r1, _R0_REGNO, r0) # define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # if __WORDSIZE == 64 # define str_l(r0,r1) STDX(r1, _R0_REGNO, r0) # define sti_l(i0,r0) _sti_l(_jit,i0,r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); # define stxr_l(r0,r1,r2) _stxr_l(_jit,r0,r1,r2) -static void _stxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); # endif # define jmpr(r0) _jmpr(_jit,r0) -static void _jmpr(jit_state_t*,jit_int32_t); +static void _jmpr(jit_state_t*,int32_t); # define jmpi(i0) _jmpi(_jit,i0) static jit_word_t _jmpi(jit_state_t*,jit_word_t); # define jmpi_p(i0) _jmpi_p(_jit,i0) static jit_word_t _jmpi_p(jit_state_t*,jit_word_t) maybe_unused; # define callr(r0) _callr(_jit,r0) -static void _callr(jit_state_t*,jit_int32_t); +static void _callr(jit_state_t*,int32_t); # define calli(i0) _calli(_jit,i0) static void _calli(jit_state_t*,jit_word_t); # define calli_p(i0) _calli_p(_jit,i0) @@ -855,9 +855,9 @@ static void _prolog(jit_state_t*, jit_node_t*); # define epilog(node) _epilog(_jit, node) static void _epilog(jit_state_t*, jit_node_t*); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); # define patch_at(i,l) _patch_at(_jit,i,l) static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #endif @@ -1043,9 +1043,9 @@ _FXS(jit_state_t *_jit, int o, int s, int a, int h, int x, int i, int r) * http://tenfourfox.blogspot.com/2011/04/attention-g5-owners-your-javascript-no.html */ static void -_MCRXR(jit_state_t *_jit, jit_int32_t cr) +_MCRXR(jit_state_t *_jit, int32_t cr) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); MFXER(rn(reg)); MTCRF(128, rn(reg)); @@ -1056,7 +1056,7 @@ _MCRXR(jit_state_t *_jit, jit_int32_t cr) #endif static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { for (; i0 > 0; i0 -= 4) NOP(); @@ -1064,32 +1064,32 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) MR(r0, r1); } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { if (can_sign_extend_short_p(i0)) LI(r0, i0); else { if (can_sign_extend_int_p(i0)) - LIS(r0, (jit_int16_t)(i0 >> 16)); + LIS(r0, (int16_t)(i0 >> 16)); else if (can_zero_extend_int_p(i0)) { if (i0 & 0xffff0000) { - ORI(r0, r0, (jit_uint16_t)(i0 >> 16)); + ORI(r0, r0, (uint16_t)(i0 >> 16)); SLWI(r0, r0, 16); } } # if __WORDSIZE == 64 else { - movi(r0, (jit_uint32_t)(i0 >> 32)); + movi(r0, (uint32_t)(i0 >> 32)); if (i0 & 0xffff0000) { SLDI(r0, r0, 16); - ORI(r0, r0, (jit_uint16_t)(i0 >> 16)); + ORI(r0, r0, (uint16_t)(i0 >> 16)); SLDI(r0, r0, 16); } else @@ -1097,33 +1097,33 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } # endif if (i0 & 0xffff) - ORI(r0, r0, (jit_uint16_t)i0); + ORI(r0, r0, (uint16_t)i0); } } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t word = _jit->pc.w; # if __WORDSIZE == 32 - LIS(r0, (jit_int16_t)(i0 >> 16)); - ORI(r0, r0, (jit_uint16_t)i0); + LIS(r0, (int16_t)(i0 >> 16)); + ORI(r0, r0, (uint16_t)i0); # else - LIS(r0, (jit_int16_t)(i0 >> 48)); - ORI(r0, r0, (jit_uint16_t)(i0 >> 32)); + LIS(r0, (int16_t)(i0 >> 48)); + ORI(r0, r0, (uint16_t)(i0 >> 32)); SLDI(r0, r0, 16); - ORI(r0, r0, (jit_uint16_t)(i0 >> 16)); + ORI(r0, r0, (uint16_t)(i0 >> 16)); SLDI(r0, r0, 16); - ORI(r0, r0, (jit_uint16_t)i0); + ORI(r0, r0, (uint16_t)i0); # endif return (word); } # if __BYTE_ORDER == __LITTLE_ENDIAN static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0; + int32_t t0; t0 = jit_get_reg(jit_class_gpr); rshi(rn(t0), r1, 8); andi(r0, r1, 0xff); @@ -1134,9 +1134,9 @@ _htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); ROTLWI(rn(reg), r1, 8); RLWIMI(rn(reg), r1, 24, 0, 7); @@ -1147,13 +1147,13 @@ _htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_bswapr_ul(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); rshi_u(rn(reg), r1, 32); - htonr_ui(r0, r1); - htonr_ui(rn(reg), rn(reg)); + bswapr_ui(r0, r1); + bswapr_ui(rn(reg), rn(reg)); lshi(r0, r0, 32); orr(r0, r0, rn(reg)); jit_unget_reg(reg); @@ -1162,9 +1162,9 @@ _htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) ADDI(r0, r1, i0); else if (can_zero_extend_int_p(i0) && !(i0 & 0x0000ffff)) @@ -1178,9 +1178,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) ADDIC(r0, r1, i0); else { @@ -1192,9 +1192,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); ADDE(r0, r1, rn(reg)); @@ -1202,9 +1202,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t ni0 = -i0; if (can_sign_extend_short_p(ni0)) ADDI(r0, r1, ni0); @@ -1219,9 +1219,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); SUBC(r0, r1, rn(reg)); @@ -1229,9 +1229,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); SUBE(r0, r1, rn(reg)); @@ -1239,16 +1239,16 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) MULLI(r0, r1, i0); else { @@ -1260,10 +1260,10 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; if (r0 == r2 || r0 == r3) { reg = jit_get_reg(jit_class_gpr); mullr(rn(reg), r2, r3); @@ -1281,10 +1281,10 @@ _iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqmulr(r0, r1, r2, rn(reg), sign); @@ -1292,9 +1292,9 @@ _iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr(r0, r1, rn(reg)); @@ -1302,9 +1302,9 @@ _divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); divr_u(r0, r1, rn(reg)); @@ -1312,11 +1312,11 @@ _divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { - jit_int32_t sv0, rg0; - jit_int32_t sv1, rg1; + int32_t sv0, rg0; + int32_t sv1, rg1; if (r0 == r2 || r0 == r3) { sv0 = jit_get_reg(jit_class_gpr); @@ -1348,10 +1348,10 @@ _iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqdivr(r0, r1, r2, rn(reg), sign); @@ -1359,9 +1359,9 @@ _iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); divr(rn(reg), r1, r2); @@ -1377,9 +1377,9 @@ _remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr(r0, r1, rn(reg)); @@ -1387,9 +1387,9 @@ _remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); divr_u(rn(reg), r1, r2); @@ -1405,9 +1405,9 @@ _remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr_u(r0, r1, rn(reg)); @@ -1415,9 +1415,9 @@ _remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) ANDI_(r0, r1, i0); else if (can_zero_extend_int_p(i0) && !(i0 & 0x0000ffff)) @@ -1431,9 +1431,9 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) ORI(r0, r1, i0); else if (can_zero_extend_int_p(i0) && !(i0 & 0x0000ffff)) @@ -1447,9 +1447,9 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) XORI(r0, r1, i0); else if (can_zero_extend_int_p(i0) && !(i0 & 0x0000ffff)) @@ -1463,7 +1463,7 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0 == 0) movr(r0, r1); @@ -1477,7 +1477,7 @@ _lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0 == 0) movr(r0, r1); @@ -1491,7 +1491,7 @@ _rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { if (i0 == 0) movr(r0, r1); @@ -1505,7 +1505,7 @@ _rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ltr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPW(r1, r2); MFCR(r0); @@ -1513,9 +1513,9 @@ _ltr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) CMPWI(r1, i0); else { @@ -1529,7 +1529,7 @@ _lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ltr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPLW(r1, r2); MFCR(r0); @@ -1537,9 +1537,9 @@ _ltr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) CMPLWI(r1, i0); else { @@ -1553,7 +1553,7 @@ _lti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ler(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPW(r1, r2); CRNOT(CR_GT, CR_GT); @@ -1562,9 +1562,9 @@ _ler(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) CMPWI(r1, i0); else { @@ -1579,7 +1579,7 @@ _lei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ler_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPLW(r1, r2); CRNOT(CR_GT, CR_GT); @@ -1588,9 +1588,9 @@ _ler_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) CMPLWI(r1, i0); else { @@ -1605,7 +1605,7 @@ _lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPW(r1, r2); MFCR(r0); @@ -1613,9 +1613,9 @@ _eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_eqi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) CMPWI(r1, i0); else if (can_zero_extend_short_p(i0)) @@ -1631,7 +1631,7 @@ _eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ger(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPW(r1, r2); CRNOT(CR_LT, CR_LT); @@ -1640,9 +1640,9 @@ _ger(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) CMPWI(r1, i0); else { @@ -1657,7 +1657,7 @@ _gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ger_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPLW(r1, r2); CRNOT(CR_LT, CR_LT); @@ -1666,9 +1666,9 @@ _ger_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gei_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) CMPLWI(r1, i0); else { @@ -1683,7 +1683,7 @@ _gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gtr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPW(r1, r2); MFCR(r0); @@ -1691,9 +1691,9 @@ _gtr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) CMPWI(r1, i0); else { @@ -1707,7 +1707,7 @@ _gti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_gtr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPLW(r1, r2); MFCR(r0); @@ -1715,9 +1715,9 @@ _gtr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_gti_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_zero_extend_short_p(i0)) CMPLWI(r1, i0); else { @@ -1731,7 +1731,7 @@ _gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { CMPW(r1, r2); CRNOT(CR_EQ, CR_EQ); @@ -1740,9 +1740,9 @@ _ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_nei(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_short_p(i0)) CMPWI(r1, i0); else if (can_zero_extend_short_p(i0)) @@ -1759,7 +1759,7 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static jit_word_t -_bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPW(r0, r1); @@ -1770,9 +1770,9 @@ _bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) CMPWI(r0, i1); @@ -1789,7 +1789,7 @@ _blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPLW(r0, r1); @@ -1800,9 +1800,9 @@ _bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_zero_extend_short_p(i1)) CMPLWI(r0, i1); @@ -1819,7 +1819,7 @@ _blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPW(r0, r1); @@ -1830,9 +1830,9 @@ _bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) CMPWI(r0, i1); @@ -1849,7 +1849,7 @@ _blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPLW(r0, r1); @@ -1860,9 +1860,9 @@ _bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_blei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_zero_extend_short_p(i1)) CMPLWI(r0, i1); @@ -1879,7 +1879,7 @@ _blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPW(r0, r1); @@ -1890,9 +1890,9 @@ _beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_beqi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) CMPWI(r0, i1); @@ -1911,7 +1911,7 @@ _beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPW(r0, r1); @@ -1922,9 +1922,9 @@ _bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) CMPWI(r0, i1); @@ -1941,7 +1941,7 @@ _bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPLW(r0, r1); @@ -1952,9 +1952,9 @@ _bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgei_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_zero_extend_short_p(i1)) CMPLWI(r0, i1); @@ -1971,7 +1971,7 @@ _bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPW(r0, r1); @@ -1982,9 +1982,9 @@ _bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) CMPWI(r0, i1); @@ -2001,7 +2001,7 @@ _bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPLW(r0, r1); @@ -2012,9 +2012,9 @@ _bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bgti_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_zero_extend_short_p(i1)) CMPLWI(r0, i1); @@ -2031,7 +2031,7 @@ _bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; CMPW(r0, r1); @@ -2042,9 +2042,9 @@ _bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bnei(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) CMPWI(r0, i1); @@ -2063,10 +2063,10 @@ _bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmsr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); andr(rn(reg), r0, r1); w = bnei(i0, rn(reg), 0); @@ -2075,10 +2075,10 @@ _bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmsi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); andi(rn(reg), r0, i1); w = bnei(i0, rn(reg), 0); @@ -2087,10 +2087,10 @@ _bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmcr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); andr(rn(reg), r0, r1); w = beqi(i0, rn(reg), 0); @@ -2099,10 +2099,10 @@ _bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmci(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); andi(rn(reg), r0, i1); w = beqi(i0, rn(reg), 0); @@ -2111,7 +2111,7 @@ _bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_boaddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; ADDO(r0, r0, r1); @@ -2123,10 +2123,10 @@ _boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_boaddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = boaddr(i0, r0, rn(reg)); @@ -2135,7 +2135,7 @@ _boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxaddr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; ADDO(r0, r0, r1); @@ -2147,10 +2147,10 @@ _bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxaddi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bxaddr(i0, r0, rn(reg)); @@ -2159,7 +2159,7 @@ _bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bosubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; SUBO(r0, r0, r1); @@ -2171,10 +2171,10 @@ _bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bosubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bosubr(i0, r0, rn(reg)); @@ -2183,7 +2183,7 @@ _bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxsubr(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; SUBO(r0, r0, r1); @@ -2195,10 +2195,10 @@ _bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxsubi(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bxsubr(i0, r0, rn(reg)); @@ -2207,7 +2207,7 @@ _bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_boaddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; ADDC(r0, r0, r1); @@ -2219,9 +2219,9 @@ _boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_boaddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) { ADDIC(r0, r0, i1); @@ -2239,7 +2239,7 @@ _boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxaddr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; ADDC(r0, r0, r1); @@ -2251,9 +2251,9 @@ _bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxaddi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; jit_word_t d, w; if (can_sign_extend_short_p(i1)) { ADDIC(r0, r0, i1); @@ -2271,7 +2271,7 @@ _bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bosubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; SUBC(r0, r0, r1); @@ -2283,10 +2283,10 @@ _bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bosubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bosubr_u(i0, r0, rn(reg)); @@ -2295,7 +2295,7 @@ _bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static jit_word_t -_bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bxsubr_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; SUBC(r0, r0, r1); @@ -2307,10 +2307,10 @@ _bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bxsubi_u(jit_state_t *_jit, jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bxsubr_u(i0, r0, rn(reg)); @@ -2319,44 +2319,44 @@ _bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) } static void -_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { ldr_uc(r0, r1); extr_c(r0, r0); } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { ldi_uc(r0, i0); extr_c(r0, r0); } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { ldxr_uc(r0, r1, r2); extr_c(r0, r0); } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_uc(r0, r1, i0); extr_c(r0, r0); } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LBZ(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2373,9 +2373,9 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LBZX(r0, r2, r1); @@ -2391,9 +2391,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_uc(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2415,16 +2415,16 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LHA(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2441,9 +2441,9 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LHAX(r0, r2, r1); @@ -2459,9 +2459,9 @@ _ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_s(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2483,16 +2483,16 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LHZ(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2509,9 +2509,9 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LHZX(r0, r2, r1); @@ -2527,9 +2527,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_us(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2552,16 +2552,16 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 32 static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LWZ(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2578,9 +2578,9 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LWZX(r0, r2, r1); @@ -2596,9 +2596,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_i(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2621,16 +2621,16 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # else static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LWA(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2647,9 +2647,9 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LWZX(r0, r2, r1); @@ -2665,9 +2665,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_i(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2689,16 +2689,16 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LWZ(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2715,9 +2715,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LWZX(r0, r2, r1); @@ -2733,9 +2733,9 @@ _ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_i(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2757,16 +2757,16 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LD(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2783,9 +2783,9 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LDX(r0, r2, r1); @@ -2801,9 +2801,9 @@ _ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_l(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2826,16 +2826,16 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # endif static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) STB(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2852,9 +2852,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == _R0_REGNO) { if (r1 != _R0_REGNO) STBX(r2, r1, r0); @@ -2870,9 +2870,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) str_c(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2894,16 +2894,16 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) STH(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2920,9 +2920,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == _R0_REGNO) { if (r1 != _R0_REGNO) STHX(r2, r1, r0); @@ -2938,9 +2938,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) str_s(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -2962,16 +2962,16 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) STW(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -2988,9 +2988,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == _R0_REGNO) { if (r1 != _R0_REGNO) STWX(r2, r1, r0); @@ -3006,9 +3006,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) str_i(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -3031,16 +3031,16 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) STD(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -3057,9 +3057,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == _R0_REGNO) { if (r1 != _R0_REGNO) STDX(r2, r1, r0); @@ -3075,9 +3075,9 @@ _stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) str_l(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -3100,7 +3100,7 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) # endif static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) +_jmpr(jit_state_t *_jit, int32_t r0) { #if 0 MTLR(r0); @@ -3115,7 +3115,7 @@ _jmpr(jit_state_t *_jit, jit_int32_t r0) static jit_word_t _jmpi(jit_state_t *_jit, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; jit_word_t w, d; w = _jit->pc.w; d = (i0 - w) & ~3; @@ -3135,7 +3135,7 @@ static jit_word_t _jmpi_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); w = movi_p(rn(reg), i0); jmpr(rn(reg)); @@ -3144,7 +3144,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { # if __powerpc__ # if ABI_ELFv2 @@ -3180,7 +3180,7 @@ _calli(jit_state_t *_jit, jit_word_t i0) # if __ppc__ jit_word_t d; # endif - jit_int32_t reg; + int32_t reg; # if __ppc__ d = (i0 - _jit->pc.w) & ~3; if (can_sign_extend_jump_p(d)) @@ -3200,7 +3200,7 @@ static jit_word_t _calli_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); w = movi_p(rn(reg), i0); callr(rn(reg)); @@ -3210,7 +3210,7 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) # if __powerpc__ /* order is not guaranteed to be sequential */ -static jit_int32_t save[] = { +static int32_t save[] = { _R14, _R15, _R16, _R17, _R18, _R19, _R20, _R21, _R22, _R23, _R24, _R25, _R26, _R27, _R28, _R29, _R30, _R31, }; @@ -3223,7 +3223,7 @@ _prolog(jit_state_t *_jit, jit_node_t *node) jit_word_t offset; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -3340,7 +3340,7 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { assert(_jitc->function->self.call & jit_call_varargs); @@ -3349,7 +3349,7 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); @@ -3365,7 +3365,7 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { jit_word_t d; union { - jit_int32_t *i; + int32_t *i; jit_word_t w; } u; u.w = instr; diff --git a/libguile/lightning/lib/jit_ppc-fpu.c b/libguile/lightning/jit/ppc-fpu.c index 8db839a1f..da7ac0cbe 100644 --- a/libguile/lightning/lib/jit_ppc-fpu.c +++ b/libguile/lightning/jit/ppc-fpu.c @@ -117,25 +117,25 @@ static void _FXFL(jit_state_t*,int,int,int,int,int) maybe_unused; # define STFSX(s,a,b) FX(31,s,a,b,663) # define movr_f(r0,r1) movr_d(r0,r1) # define movr_d(r0,r1) _movr_d(_jit,r0,r1) -static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_d(jit_state_t*,int32_t,int32_t); # define movi_f(r0,i0) _movi_f(_jit,r0,i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t*); # define movi_d(r0,i0) _movi_d(_jit,r0,i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t*); # define extr_f(r0,r1) extr_d(r0,r1) # define extr_d(r0,r1) _extr_d(_jit,r0,r1) -static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_d(jit_state_t*,int32_t,int32_t); # define truncr_f(r0,r1) truncr_d(r0,r1) # define truncr_f_i(r0,r1) truncr_d_i(r0,r1) # define truncr_d_i(r0,r1) _truncr_d_i(_jit,r0,r1) -static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_i(jit_state_t*,int32_t,int32_t); # if __WORDSIZE == 32 # define truncr_d(r0,r1) truncr_d_i(r0,r1) # else # define truncr_d(r0,r1) truncr_d_l(r0,r1) # define truncr_f_l(r0,r1) truncr_d_l(r0,r1) # define truncr_d_l(r0,r1) _truncr_d_l(_jit,r0,r1) -static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t); +static void _truncr_d_l(jit_state_t*,int32_t,int32_t); # endif # define extr_d_f(r0,r1) FRSP(r0,r1) # define extr_f_d(r0,r1) movr_d(r0,r1) @@ -148,259 +148,259 @@ static void _truncr_d_l(jit_state_t*,jit_int32_t,jit_int32_t); # define addr_f(r0,r1,r2) FADDS(r0,r1,r2) # define addr_d(r0,r1,r2) FADD(r0,r1,r2) # define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0) -static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0) -static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define subr_f(r0,r1,r2) FSUBS(r0,r1,r2) # define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0) -static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define subr_d(r0,r1,r2) FSUB(r0,r1,r2) # define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0) -static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1) # define rsbi_f(r0,r1,i0) _rsbi_f(_jit,r0,r1,i0) -static void _rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1) # define rsbi_d(r0,r1,i0) _rsbi_d(_jit,r0,r1,i0) -static void _rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define mulr_f(r0,r1,r2) FMULS(r0,r1,r2) # define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0) -static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define mulr_d(r0,r1,r2) FMUL(r0,r1,r2) # define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0) -static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define divr_f(r0,r1,r2) FDIVS(r0,r1,r2) # define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0) -static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define divr_d(r0,r1,r2) FDIV(r0,r1,r2) # define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0) -static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ltr_f(r0,r1,r2) ltr_d(r0,r1,r2) # define ltr_d(r0,r1,r2) _ltr_d(_jit,r0,r1,r2) -static void _ltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltr_d(jit_state_t*,int32_t,int32_t,int32_t); # define lti_f(r0,r1,i0) _lti_f(_jit,r0,r1,i0) -static void _lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define lti_d(r0,r1,i0) _lti_d(_jit,r0,r1,i0) -static void _lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ler_f(r0,r1,r2) ler_d(r0,r1,r2) # define ler_d(r0,r1,r2) _ler_d(_jit,r0,r1,r2) -static void _ler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ler_d(jit_state_t*,int32_t,int32_t,int32_t); # define lei_f(r0,r1,i0) _lei_f(_jit,r0,r1,i0) -static void _lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define lei_d(r0,r1,i0) _lei_d(_jit,r0,r1,i0) -static void _lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define eqr_f(r0,r1,r2) eqr_d(r0,r1,r2) # define eqr_d(r0,r1,r2) _eqr_d(_jit,r0,r1,r2) -static void _eqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _eqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define eqi_f(r0,r1,i0) _eqi_f(_jit,r0,r1,i0) -static void _eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define eqi_d(r0,r1,i0) _eqi_d(_jit,r0,r1,i0) -static void _eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ger_f(r0,r1,r2) ger_d(r0,r1,r2) # define ger_d(r0,r1,r2) _ger_d(_jit,r0,r1,r2) -static void _ger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ger_d(jit_state_t*,int32_t,int32_t,int32_t); # define gei_f(r0,r1,i0) _gei_f(_jit,r0,r1,i0) -static void _gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define gei_d(r0,r1,i0) _gei_d(_jit,r0,r1,i0) -static void _gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define gtr_f(r0,r1,r2) gtr_d(r0,r1,r2) # define gtr_d(r0,r1,r2) _gtr_d(_jit,r0,r1,r2) -static void _gtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _gtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define gti_f(r0,r1,i0) _gti_f(_jit,r0,r1,i0) -static void _gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define gti_d(r0,r1,i0) _gti_d(_jit,r0,r1,i0) -static void _gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ner_f(r0,r1,r2) ner_d(r0,r1,r2) # define ner_d(r0,r1,r2) _ner_d(_jit,r0,r1,r2) -static void _ner_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ner_d(jit_state_t*,int32_t,int32_t,int32_t); # define nei_f(r0,r1,i0) _nei_f(_jit,r0,r1,i0) -static void _nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define nei_d(r0,r1,i0) _nei_d(_jit,r0,r1,i0) -static void _nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unltr_f(r0,r1,r2) unltr_d(r0,r1,r2) # define unltr_d(r0,r1,r2) _unltr_d(_jit,r0,r1,r2) -static void _unltr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unltr_d(jit_state_t*,int32_t,int32_t,int32_t); # define unlti_f(r0,r1,i0) _unlti_f(_jit,r0,r1,i0) -static void _unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unlti_d(r0,r1,i0) _unlti_d(_jit,r0,r1,i0) -static void _unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unler_f(r0,r1,r2) unler_d(r0,r1,r2) # define unler_d(r0,r1,r2) _unler_d(_jit,r0,r1,r2) -static void _unler_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unler_d(jit_state_t*,int32_t,int32_t,int32_t); # define unlei_f(r0,r1,i0) _unlei_f(_jit,r0,r1,i0) -static void _unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unlei_d(r0,r1,i0) _unlei_d(_jit,r0,r1,i0) -static void _unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define uneqr_f(r0,r1,r2) uneqr_d(r0,r1,r2) # define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2) -static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_f(r0,r1,i0) _uneqi_f(_jit,r0,r1,i0) -static void _uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define uneqi_d(r0,r1,i0) _uneqi_d(_jit,r0,r1,i0) -static void _uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unger_f(r0,r1,r2) unger_d(r0,r1,r2) # define unger_d(r0,r1,r2) _unger_d(_jit,r0,r1,r2) -static void _unger_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unger_d(jit_state_t*,int32_t,int32_t,int32_t); # define ungei_f(r0,r1,i0) _ungei_f(_jit,r0,r1,i0) -static void _ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ungei_d(r0,r1,i0) _ungei_d(_jit,r0,r1,i0) -static void _ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ungtr_f(r0,r1,r2) ungtr_d(r0,r1,r2) # define ungtr_d(r0,r1,r2) _ungtr_d(_jit,r0,r1,r2) -static void _ungtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ungtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ungti_f(r0,r1,i0) _ungti_f(_jit,r0,r1,i0) -static void _ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ungti_d(r0,r1,i0) _ungti_d(_jit,r0,r1,i0) -static void _ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ltgtr_f(r0,r1,r2) ltgtr_d(r0,r1,r2) # define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2) -static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_f(r0,r1,i0) _ltgti_f(_jit,r0,r1,i0) -static void _ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ltgti_d(r0,r1,i0) _ltgti_d(_jit,r0,r1,i0) -static void _ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define ordr_f(r0,r1,r2) ordr_d(r0,r1,r2) # define ordr_d(r0,r1,r2) _ordr_d(_jit,r0,r1,r2) -static void _ordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ordi_f(r0,r1,i0) _ordi_f(_jit,r0,r1,i0) -static void _ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define ordi_d(r0,r1,i0) _ordi_d(_jit,r0,r1,i0) -static void _ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define unordr_f(r0,r1,r2) unordr_d(r0,r1,r2) # define unordr_d(r0,r1,r2) _unordr_d(_jit,r0,r1,r2) -static void _unordr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _unordr_d(jit_state_t*,int32_t,int32_t,int32_t); # define unordi_f(r0,r1,i0) _unordi_f(_jit,r0,r1,i0) -static void _unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define unordi_d(r0,r1,i0) _unordi_d(_jit,r0,r1,i0) -static void _unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define bltr_f(i0,r0,r1) bltr_d(i0,r0,r1) # define bltr_d(i0,r0,r1) _bltr_d(_jit,i0,r0,r1) -static jit_word_t _bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define blti_f(i0,r0,i1) _blti_f(_jit,i0,r0,i1) -static jit_word_t _blti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _blti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define blti_d(i0,r0,i1) _blti_d(_jit,i0,r0,i1) -static jit_word_t _blti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _blti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bler_f(i0,r0,r1) bler_d(i0,r0,r1) # define bler_d(i0,r0,r1) _bler_d(_jit,i0,r0,r1) -static jit_word_t _bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bler_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define blei_f(i0,r0,i1) _blei_f(_jit,i0,r0,i1) -static jit_word_t _blei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _blei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define blei_d(i0,r0,i1) _blei_d(_jit,i0,r0,i1) -static jit_word_t _blei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _blei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define beqr_f(i0,r0,r1) beqr_d(i0,r0,r1) # define beqr_d(i0,r0,r1) _beqr_d(_jit,i0,r0,r1) -static jit_word_t _beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _beqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define beqi_f(i0,r0,i1) _beqi_f(_jit,i0,r0,i1) -static jit_word_t _beqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _beqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define beqi_d(i0,r0,i1) _beqi_d(_jit,i0,r0,i1) -static jit_word_t _beqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _beqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bger_f(i0,r0,r1) bger_d(i0,r0,r1) # define bger_d(i0,r0,r1) _bger_d(_jit,i0,r0,r1) -static jit_word_t _bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgei_f(i0,r0,i1) _bgei_f(_jit,i0,r0,i1) -static jit_word_t _bgei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bgei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bgei_d(i0,r0,i1) _bgei_d(_jit,i0,r0,i1) -static jit_word_t _bgei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bgei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bgtr_f(i0,r0,r1) bgtr_d(i0,r0,r1) # define bgtr_d(i0,r0,r1) _bgtr_d(_jit,i0,r0,r1) -static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bgti_f(i0,r0,i1) _bgti_f(_jit,i0,r0,i1) -static jit_word_t _bgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bgti_d(i0,r0,i1) _bgti_d(_jit,i0,r0,i1) -static jit_word_t _bgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bner_f(i0,r0,r1) bner_d(i0,r0,r1) # define bner_d(i0,r0,r1) _bner_d(_jit,i0,r0,r1) -static jit_word_t _bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bner_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bnei_f(i0,r0,i1) _bnei_f(_jit,i0,r0,i1) -static jit_word_t _bnei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bnei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bnei_d(i0,r0,i1) _bnei_d(_jit,i0,r0,i1) -static jit_word_t _bnei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bnei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunltr_f(i0,r0,r1) bunltr_d(i0,r0,r1) # define bunltr_d(i0,r0,r1) _bunltr_d(_jit,i0,r0,r1) -static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunltr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlti_f(i0,r0,i1) _bunlti_f(_jit,i0,r0,i1) -static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunlti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bunlti_d(i0,r0,i1) _bunlti_d(_jit,i0,r0,i1) -static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunlti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunler_f(i0,r0,r1) bunler_d(i0,r0,r1) # define bunler_d(i0,r0,r1) _bunler_d(_jit,i0,r0,r1) -static jit_word_t _bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunler_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunlei_f(i0,r0,i1) _bunlei_f(_jit,i0,r0,i1) -static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunlei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bunlei_d(i0,r0,i1) _bunlei_d(_jit,i0,r0,i1) -static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunlei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define buneqr_f(i0,r0,r1) buneqr_d(i0,r0,r1) # define buneqr_d(i0,r0,r1) _buneqr_d(_jit,i0,r0,r1) -static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define buneqi_f(i0,r0,i1) _buneqi_f(_jit,i0,r0,i1) -static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _buneqi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define buneqi_d(i0,r0,i1) _buneqi_d(_jit,i0,r0,i1) -static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _buneqi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunger_f(i0,r0,r1) bunger_d(i0,r0,r1) # define bunger_d(i0,r0,r1) _bunger_d(_jit,i0,r0,r1) -static jit_word_t _bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunger_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungei_f(i0,r0,i1) _bungei_f(_jit,i0,r0,i1) -static jit_word_t _bungei_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bungei_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bungei_d(i0,r0,i1) _bungei_d(_jit,i0,r0,i1) -static jit_word_t _bungei_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bungei_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bungtr_f(i0,r0,r1) bungtr_d(i0,r0,r1) # define bungtr_d(i0,r0,r1) _bungtr_d(_jit,i0,r0,r1) -static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bungtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bungti_f(i0,r0,i1) _bungti_f(_jit,i0,r0,i1) -static jit_word_t _bungti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bungti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bungti_d(i0,r0,i1) _bungti_d(_jit,i0,r0,i1) -static jit_word_t _bungti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bungti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bltgtr_f(i0,r0,r1) bltgtr_d(i0,r0,r1) # define bltgtr_d(i0,r0,r1) _bltgtr_d(_jit,i0,r0,r1) -static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bltgti_f(i0,r0,i1) _bltgti_f(_jit,i0,r0,i1) -static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bltgti_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bltgti_d(i0,r0,i1) _bltgti_d(_jit,i0,r0,i1) -static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bltgti_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bordr_f(i0,r0,r1) bordr_d(i0,r0,r1) # define bordr_d(i0,r0,r1) _bordr_d(_jit,i0,r0,r1) -static jit_word_t _bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bordi_f(i0,r0,i1) _bordi_f(_jit,i0,r0,i1) -static jit_word_t _bordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bordi_d(i0,r0,i1) _bordi_d(_jit,i0,r0,i1) -static jit_word_t _bordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define bunordr_f(i0,r0,r1) bunordr_d(i0,r0,r1) # define bunordr_d(i0,r0,r1) _bunordr_d(_jit,i0,r0,r1) -static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bunordr_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define bunordi_f(i0,r0,i1) _bunordi_f(_jit,i0,r0,i1) -static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bunordi_f(jit_state_t*,jit_word_t,int32_t,jit_float32_t*); # define bunordi_d(i0,r0,i1) _bunordi_d(_jit,i0,r0,i1) -static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bunordi_d(jit_state_t*,jit_word_t,int32_t,jit_float64_t*); # define ldr_f(r0,r1) LFSX(r0, _R0_REGNO, r1) # define ldi_f(r0,i0) _ldi_f(_jit,r0,i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); # define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_f(r0,r1) STFSX(r1, _R0_REGNO, r0) # define sti_f(i0,r0) _sti_f(_jit,i0,r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); # define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define ldr_d(r0,r1) LFDX(r0, _R0_REGNO, r1) # define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); # define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2) -static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_d(r0,r1) STFDX(r1, _R0_REGNO, r0) # define sti_d(i0,r0) _sti_d(_jit,i0,r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); # define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE @@ -430,20 +430,20 @@ _FXFL(jit_state_t *_jit, int o, int m, int b, int x, int r) } static void -_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) FMR(r0,r1); } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.f = *i0; @@ -458,14 +458,14 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { - jit_int32_t i[2]; + int32_t i[2]; jit_word_t w; jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.d = *i0; @@ -488,10 +488,10 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) /* should only work on newer ppc (fcfid is a ppc64 instruction) */ static void -_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { # if __WORDSIZE == 32 - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); rshi(rn(reg), r1, 31); /* use reserved 8 bytes area */ @@ -506,9 +506,9 @@ _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); FCTIWZ(rn(reg), r1); /* use reserved 8 bytes area */ @@ -519,9 +519,9 @@ _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); FCTIDZ(rn(reg), r1); /* use reserved 8 bytes area */ @@ -534,10 +534,10 @@ _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # define fpr_opi(name, type, size) \ static void \ _##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ + int32_t r0, int32_t r1, \ jit_float##size##_t *i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ movi_##type(rn(reg), i0); \ name##r_##type(r0, r1, rn(reg)); \ jit_unget_reg(reg); \ @@ -545,11 +545,11 @@ _##name##i_##type(jit_state_t *_jit, \ # define fpr_bopi(name, type, size) \ static jit_word_t \ _b##name##i_##type(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, \ + jit_word_t i0, int32_t r0, \ jit_float##size##_t *i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ movi_##type(rn(reg), i1); \ word = b##name##r_##type(i0, r0, rn(reg)); \ @@ -573,7 +573,7 @@ fopi(div) dopi(div) static void -_ltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPO(CR_0, r1, r2); MFCR(r0); @@ -583,7 +583,7 @@ fopi(lt) dopi(lt) static void -_ler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPO(CR_0, r1, r2); CREQV(CR_GT, CR_GT, CR_UN); @@ -594,7 +594,7 @@ fopi(le) dopi(le) static void -_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_eqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPO(CR_0, r1, r2); MFCR(r0); @@ -604,7 +604,7 @@ fopi(eq) dopi(eq) static void -_ger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPO(CR_0, r1, r2); CREQV(CR_LT, CR_LT, CR_UN); @@ -615,7 +615,7 @@ fopi(ge) dopi(ge) static void -_gtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_gtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPO(CR_0, r1, r2); MFCR(r0); @@ -625,7 +625,7 @@ fopi(gt) dopi(gt) static void -_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPO(CR_0, r1, r2); CRNOT(CR_EQ, CR_EQ); @@ -636,7 +636,7 @@ fopi(ne) dopi(ne) static void -_unltr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unltr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CROR(CR_LT, CR_LT, CR_UN); @@ -647,7 +647,7 @@ fopi(unlt) dopi(unlt) static void -_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unler_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CRNOT(CR_GT, CR_GT); @@ -658,7 +658,7 @@ fopi(unle) dopi(unle) static void -_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CROR(CR_EQ, CR_EQ, CR_UN); @@ -669,7 +669,7 @@ fopi(uneq) dopi(uneq) static void -_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unger_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CRNOT(CR_LT, CR_LT); @@ -680,7 +680,7 @@ fopi(unge) dopi(unge) static void -_ungtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ungtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CROR(CR_GT, CR_GT, CR_UN); @@ -691,7 +691,7 @@ fopi(ungt) dopi(ungt) static void -_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CROR(CR_GT, CR_GT, CR_LT); @@ -702,7 +702,7 @@ fopi(ltgt) dopi(ltgt) static void -_ordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); CRNOT(CR_UN, CR_UN); @@ -713,7 +713,7 @@ fopi(ord) dopi(ord) static void -_unordr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_unordr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { FCMPU(CR_0, r1, r2); MFCR(r0); @@ -723,7 +723,7 @@ fopi(unord) dopi(unord) static jit_word_t -_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPO(CR_0, r0, r1); @@ -736,7 +736,7 @@ fbopi(lt) dbopi(lt) static jit_word_t -_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bler_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPO(CR_0, r0, r1); @@ -750,7 +750,7 @@ fbopi(le) dbopi(le) static jit_word_t -_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_beqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPO(CR_0, r0, r1); @@ -763,7 +763,7 @@ fbopi(eq) dbopi(eq) static jit_word_t -_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPO(CR_0, r0, r1); @@ -777,7 +777,7 @@ fbopi(ge) dbopi(ge) static jit_word_t -_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPO(CR_0, r0, r1); @@ -790,7 +790,7 @@ fbopi(gt) dbopi(gt) static jit_word_t -_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bner_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPO(CR_0, r0, r1); @@ -803,7 +803,7 @@ fbopi(ne) dbopi(ne) static jit_word_t -_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunltr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -817,7 +817,7 @@ fbopi(unlt) dbopi(unlt) static jit_word_t -_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunler_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -830,7 +830,7 @@ fbopi(unle) dbopi(unle) static jit_word_t -_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_buneqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -844,7 +844,7 @@ fbopi(uneq) dbopi(uneq) static jit_word_t -_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunger_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -857,7 +857,7 @@ fbopi(unge) dbopi(unge) static jit_word_t -_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bungtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -871,7 +871,7 @@ fbopi(ungt) dbopi(ungt) static jit_word_t -_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltgtr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -885,7 +885,7 @@ fbopi(ltgt) dbopi(ltgt) static jit_word_t -_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -898,7 +898,7 @@ fbopi(ord) dbopi(ord) static jit_word_t -_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bunordr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; FCMPU(CR_0, r0, r1); @@ -911,16 +911,16 @@ fbopi(unord) dbopi(unord) static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LFS(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -937,16 +937,16 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) LFD(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -963,9 +963,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LFSX(r0, r2, r1); @@ -981,9 +981,9 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r1 == _R0_REGNO) { if (r2 != _R0_REGNO) LFDX(r0, r2, r1); @@ -999,9 +999,9 @@ _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_f(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -1023,9 +1023,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) ldr_d(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -1047,16 +1047,16 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) STFS(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -1073,16 +1073,16 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { jit_bool_t inv; - jit_int32_t reg; + int32_t reg; jit_word_t lo, hi; if (can_sign_extend_short_p(i0)) STFD(r0, _R0_REGNO, i0); else if (can_sign_extend_int_p(i0)) { - hi = (jit_int16_t)((i0 >> 16) + ((jit_uint16_t)i0 >> 15)); - lo = (jit_int16_t)(i0 - (hi << 16)); + hi = (int16_t)((i0 >> 16) + ((uint16_t)i0 >> 15)); + lo = (int16_t)(i0 - (hi << 16)); reg = jit_get_reg(jit_class_gpr); if ((inv = reg == _R0)) reg = jit_get_reg(jit_class_gpr); LIS(rn(reg), hi); @@ -1099,9 +1099,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == _R0_REGNO) { if (r1 != _R0_REGNO) STFSX(r2, r1, r0); @@ -1117,9 +1117,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == _R0_REGNO) { if (r1 != _R0_REGNO) STFDX(r2, r1, r0); @@ -1135,9 +1135,9 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) str_f(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -1159,9 +1159,9 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (i0 == 0) str_d(r0, r1); else if (can_sign_extend_short_p(i0)) { @@ -1183,7 +1183,7 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { /* Load argument. */ ldr_d(r0, r1); diff --git a/libguile/lightning/lib/jit_ppc.c b/libguile/lightning/jit/ppc.c index 68db716aa..a6502cbac 100644 --- a/libguile/lightning/lib/jit_ppc.c +++ b/libguile/lightning/jit/ppc.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -25,9 +25,9 @@ # define I_DISP 0 # define F_DISP 0 #else -# define C_DISP (__WORDSIZE >> 3) - sizeof(jit_int8_t) -# define S_DISP (__WORDSIZE >> 3) - sizeof(jit_int16_t) -# define I_DISP (__WORDSIZE >> 3) - sizeof(jit_int32_t) +# define C_DISP (__WORDSIZE >> 3) - sizeof(int8_t) +# define S_DISP (__WORDSIZE >> 3) - sizeof(int16_t) +# define I_DISP (__WORDSIZE >> 3) - sizeof(int32_t) # define F_DISP (__WORDSIZE >> 3) - sizeof(jit_float32_t) #endif @@ -46,14 +46,14 @@ static void _patch(jit_state_t*,jit_word_t,jit_node_t*); extern void __clear_cache(void *, void *); #define PROTO 1 -# include "jit_ppc-cpu.c" -# include "jit_ppc-fpu.c" +# include "ppc-cpu.c" +# include "ppc-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { rc(gpr) | 0, "r0" }, #if __ppc__ { rc(gpr) | 11, "r11" }, @@ -145,7 +145,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -166,7 +166,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = alloca_offset - 8; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -185,8 +185,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -204,13 +204,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t r0, r1; + int32_t r0, r1; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } r0 = jit_get_reg(jit_class_gpr); @@ -241,7 +241,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); if (JIT_RET != u) @@ -261,7 +261,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); if (JIT_RET != u) @@ -282,7 +282,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); if (JIT_FRET != u) @@ -341,7 +341,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -352,7 +352,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -369,7 +369,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_f_reg_p(_jitc->function->self.argf)) offset = _jitc->function->self.argf++; @@ -393,7 +393,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_f_reg_p(_jitc->function->self.argf)) offset = _jitc->function->self.argf++; @@ -414,7 +414,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -426,7 +426,7 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -438,7 +438,7 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -450,7 +450,7 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -462,7 +462,7 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -480,7 +480,7 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) #if __WORDSIZE == 64 void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_ui, u, v); @@ -492,7 +492,7 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_l, u, v); @@ -505,7 +505,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) #endif void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -519,7 +519,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; jit_inc_synth_wp(putargi, u, v); assert(v->code == jit_code_arg); if (jit_arg_reg_p(v->u.w)) @@ -534,7 +534,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -546,7 +546,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -560,7 +560,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -575,7 +575,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -587,7 +587,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -601,7 +601,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -616,7 +616,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr, u); @@ -634,7 +634,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -653,7 +653,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_f, u); @@ -699,7 +699,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -745,7 +745,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_d, u); @@ -796,7 +796,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -852,9 +852,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { if (spec & jit_class_gpr) { @@ -872,7 +872,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function); @@ -905,7 +905,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_c); jit_extr_c(r0, JIT_RET); @@ -913,7 +913,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_uc); jit_extr_uc(r0, JIT_RET); @@ -921,7 +921,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_s); jit_extr_s(r0, JIT_RET); @@ -929,7 +929,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_us); jit_extr_us(r0, JIT_RET); @@ -937,7 +937,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_i); #if __WORDSIZE == 32 @@ -951,7 +951,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) #if __WORDSIZE == 64 void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_ui); jit_extr_ui(r0, JIT_RET); @@ -959,7 +959,7 @@ _jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_l); if (r0 != JIT_RET) @@ -969,7 +969,7 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) #endif void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_f); jit_retval_d(r0); @@ -977,7 +977,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth(retval_d); if (r0 != JIT_FRET) @@ -991,8 +991,8 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; jit_word_t word; @@ -1673,8 +1673,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_ppc-cpu.c" -# include "jit_ppc-fpu.c" +# include "ppc-cpu.c" +# include ", 2018ppc-fpu.c" #undef CODE void @@ -1691,7 +1691,7 @@ jit_flush(void *fptr, void *tptr) } void -_emit_ldxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { #if __WORDSIZE == 32 ldxi_i(rn(r0), rn(r1), i0); @@ -1701,7 +1701,7 @@ _emit_ldxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } void -_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { #if __WORDSIZE == 32 stxi_i(i0, rn(r0), rn(r1)); @@ -1711,13 +1711,13 @@ _emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } void -_emit_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_emit_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { ldxi_d(rn(r0), rn(r1), i0); } void -_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { stxi_d(i0, rn(r0), rn(r1)); } @@ -1725,7 +1725,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_ppc.h b/libguile/lightning/jit/ppc.h index 72b33bdd8..72b33bdd8 100644 --- a/libguile/lightning/include/lightning/jit_ppc.h +++ b/libguile/lightning/jit/ppc.h diff --git a/libguile/lightning/lib/jit_s390-cpu.c b/libguile/lightning/jit/s390-cpu.c index 824a2c6e3..02f2675ec 100644 --- a/libguile/lightning/lib/jit_s390-cpu.c +++ b/libguile/lightning/jit/s390-cpu.c @@ -114,8 +114,8 @@ SLGR: # define CC_NH 0xD # define CC_NO 0xE # define CC_AL 0xF -# define _us jit_uint16_t -# define _ui jit_uint32_t +# define _us uint16_t +# define _ui uint32_t # define E_(Op) _E(_jit,Op) static void _E(jit_state_t*,_ui); # define I_(Op,I) _I(_jit,Op,I) @@ -160,7 +160,7 @@ static void _SSE(jit_state_t*,_ui,_ui,_ui,_ui,_ui); # undef _us # undef _ui # define nop(c) _nop(_jit,c) -static void _nop(jit_state_t*,jit_int32_t); +static void _nop(jit_state_t*,int32_t); # if __WORDSIZE == 32 # define ADD_(r0,r1) AR(r0,r1) # define ADDI_(r0,i0) AHI(r0,i0) @@ -881,210 +881,210 @@ static void _nop(jit_state_t*,jit_int32_t); /* TEST SUBCHANNEL */ # define TSCH(D2,B2) S_(0xB235,B2,D2) # define xdivr(r0,r1) _xdivr(_jit,r0,r1) -static jit_int32_t _xdivr(jit_state_t*,jit_int32_t,jit_int32_t); +static int32_t _xdivr(jit_state_t*,int32_t,int32_t); # define xdivr_u(r0,r1) _xdivr_u(_jit,r0,r1) -static jit_int32_t _xdivr_u(jit_state_t*,jit_int32_t,jit_int32_t); +static int32_t _xdivr_u(jit_state_t*,int32_t,int32_t); # define xdivi(r0,i0) _xdivi(_jit,r0,i0) -static jit_int32_t _xdivi(jit_state_t*,jit_int32_t,jit_word_t); +static int32_t _xdivi(jit_state_t*,int32_t,jit_word_t); # define xdivi_u(r0,i0) _xdivi_u(_jit,r0,i0) -static jit_int32_t _xdivi_u(jit_state_t*,jit_int32_t,jit_word_t); +static int32_t _xdivi_u(jit_state_t*,int32_t,jit_word_t); # define crr(cc,r0,r1,r2) _crr(_jit,cc,r0,r1,r2) static void _crr(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); # define cri(cc,r0,r1,i0) _cri(_jit,cc,r0,r1,i0) static void _cri(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); # define crr_u(cc,r0,r1,r2) _crr_u(_jit,cc,r0,r1,r2) static void _crr_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t); # define cri_u(cc,r0,r1,i0) _cri_u(_jit,cc,r0,r1,i0) static void _cri_u(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); + int32_t,int32_t,int32_t,jit_word_t); # define brr(cc,i0,r0,r1) _brr(_jit,cc,i0,r0,r1) -static void _brr(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _brr(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define brr_p(cc,i0,r0,r1) _brr_p(_jit,cc,i0,r0,r1) -static jit_word_t _brr_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _brr_p(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bri(cc,i0,r0,i1) _bri(_jit,cc,i0,r0,i1) -static void _bri(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static void _bri(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define bri_p(cc,i0,r0,i1) _bri_p(_jit,cc,i0,r0,i1) -static jit_word_t _bri_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bri_p(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define brr_u(cc,i0,r0,r1) _brr_u(_jit,cc,i0,r0,r1) -static void _brr_u(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _brr_u(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define brr_u_p(cc,i0,r0,r1) _brr_u_p(_jit,cc,i0,r0,r1) -static jit_word_t _brr_u_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _brr_u_p(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bri_u(cc,i0,r0,i1) _bri_u(_jit,cc,i0,r0,i1) -static void _bri_u(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static void _bri_u(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define bri_u_p(cc,i0,r0,i1) _bri_u_p(_jit,cc,i0,r0,i1) -static jit_word_t _bri_u_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bri_u_p(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define baddr(c,s,i0,r0,r1) _baddr(_jit,c,s,i0,r0,r1) -static void _baddr(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _baddr(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,int32_t); # define baddr_p(c,s,i0,r0,r1) _baddr_p(_jit,c,s,i0,r0,r1) -static jit_word_t _baddr_p(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _baddr_p(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,int32_t); # define baddi(c,s,i0,r0,i1) _baddi(_jit,c,s,i0,r0,i1) -static void _baddi(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_word_t); +static void _baddi(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,jit_word_t); # define baddi_p(c,s,i0,r0,i1) _baddi_p(_jit,c,s,i0,r0,i1) -static jit_word_t _baddi_p(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _baddi_p(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,jit_word_t); # define bsubr(c,s,i0,r0,r1) _bsubr(_jit,c,s,i0,r0,r1) -static void _bsubr(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _bsubr(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,int32_t); # define bsubr_p(c,s,i0,r0,r1) _bsubr_p(_jit,c,s,i0,r0,r1) -static jit_word_t _bsubr_p(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bsubr_p(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,int32_t); # define bsubi(c,s,i0,r0,i1) _bsubi(_jit,c,s,i0,r0,i1) -static void _bsubi(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_word_t); +static void _bsubi(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,jit_word_t); # define bsubi_p(c,s,i0,r0,i1) _bsubi_p(_jit,c,s,i0,r0,i1) -static jit_word_t _bsubi_p(jit_state_t*,jit_int32_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bsubi_p(jit_state_t*,int32_t,jit_bool_t, + jit_word_t,int32_t,jit_word_t); # define bmxr(cc,i0,r0,r1) _bmxr(_jit,cc,i0,r0,r1) -static void _bmxr(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _bmxr(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bmxr_p(cc,i0,r0,r1) _bmxr_p(_jit,cc,i0,r0,r1) -static jit_word_t _bmxr_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bmxr_p(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bmxi(cc,i0,r0,i1) _bmxi(_jit,cc,i0,r0,i1) -static void _bmxi(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static void _bmxi(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define bmxi_p(cc,i0,r0,i1) _bmxi_p(_jit,cc,i0,r0,i1) -static jit_word_t _bmxi_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bmxi_p(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define movr(r0,r1) _movr(_jit,r0,r1) -static void _movr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr(jit_state_t*,int32_t,int32_t); # define movi(r0,i0) _movi(_jit,r0,i0) -static void _movi(jit_state_t*,jit_int32_t,jit_word_t); +static void _movi(jit_state_t*,int32_t,jit_word_t); # define movi_p(r0,i0) _movi_p(_jit,r0,i0) -static jit_word_t _movi_p(jit_state_t*,jit_int32_t,jit_word_t); +static jit_word_t _movi_p(jit_state_t*,int32_t,jit_word_t); # define addr(r0,r1,r2) _addr(_jit,r0,r1,r2) -static void _addr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addr(jit_state_t*,int32_t,int32_t,int32_t); # define addi(r0,r1,i0) _addi(_jit,r0,r1,i0) -static void _addi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addi(jit_state_t*,int32_t,int32_t,jit_word_t); # define addcr(r0,r1,r2) _addcr(_jit,r0,r1,r2) -static void _addcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addcr(jit_state_t*,int32_t,int32_t,int32_t); # define addci(r0,r1,i0) _addci(_jit,r0,r1,i0) -static void _addci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addci(jit_state_t*,int32_t,int32_t,jit_word_t); # define addxr(r0,r1,r2) _addxr(_jit,r0,r1,r2) -static void _addxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addxr(jit_state_t*,int32_t,int32_t,int32_t); # define addxi(r0,r1,i0) _addxi(_jit,r0,r1,i0) -static void _addxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _addxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subr(r0,r1,r2) _subr(_jit,r0,r1,r2) -static void _subr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subr(jit_state_t*,int32_t,int32_t,int32_t); # define subi(r0,r1,i0) _subi(_jit,r0,r1,i0) -static void _subi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subi(jit_state_t*,int32_t,int32_t,jit_word_t); # define subcr(r0,r1,r2) _subcr(_jit,r0,r1,r2) -static void _subcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subcr(jit_state_t*,int32_t,int32_t,int32_t); # define subci(r0,r1,i0) _subci(_jit,r0,r1,i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subci(jit_state_t*,int32_t,int32_t,jit_word_t); # define subxr(r0,r1,r2) _subxr(_jit,r0,r1,r2) -static void _subxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subxr(jit_state_t*,int32_t,int32_t,int32_t); # define subxi(r0,r1,i0) _subxi(_jit,r0,r1,i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _subxi(jit_state_t*,int32_t,int32_t,jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); # define mulr(r0,r1,r2) _mulr(_jit,r0,r1,r2) -static void _mulr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr(jit_state_t*,int32_t,int32_t,int32_t); # define muli(r0,r1,i0) _muli(_jit,r0,r1,i0) -static void _muli(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _muli(jit_state_t*,int32_t,int32_t,jit_word_t); # define qmulr(r0,r1,r2,r3) _qmulr(_jit,r0,r1,r2,r3) -static void _qmulr(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qmulr(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qmuli(r0,r1,r2,i0) _qmuli(_jit,r0,r1,r2,i0) -static void _qmuli(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qmuli(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define qmulr_u(r0,r1,r2,r3) _qmulr_u(_jit,r0,r1,r2,r3) -static void _qmulr_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qmulr_u(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qmuli_u(r0,r1,r2,i0) _qmuli_u(_jit,r0,r1,r2,i0) -static void _qmuli_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qmuli_u(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define divr(r0,r1,r2) _divr(_jit,r0,r1,r2) -static void _divr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr(jit_state_t*,int32_t,int32_t,int32_t); # define divi(r0,r1,i0) _divi(_jit,r0,r1,i0) -static void _divi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi(jit_state_t*,int32_t,int32_t,jit_word_t); # define divr_u(r0,r1,r2) _divr_u(_jit,r0,r1,r2) -static void _divr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_u(jit_state_t*,int32_t,int32_t,int32_t); # define divi_u(r0,r1,i0) _divi_u(_jit,r0,r1,i0) -static void _divi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _divi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define remr(r0,r1,r2) _remr(_jit,r0,r1,r2) -static void _remr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr(jit_state_t*,int32_t,int32_t,int32_t); # define remi(r0,r1,i0) _remi(_jit,r0,r1,i0) -static void _remi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi(jit_state_t*,int32_t,int32_t,jit_word_t); # define remr_u(r0,r1,r2) _remr_u(_jit,r0,r1,r2) -static void _remr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _remr_u(jit_state_t*,int32_t,int32_t,int32_t); # define remi_u(r0,r1,i0) _remi_u(_jit,r0,r1,i0) -static void _remi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _remi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # define qdivr(r0,r1,r2,r3) _qdivr(_jit,r0,r1,r2,r3) -static void _qdivr(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qdivr(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qdivi(r0,r1,r2,i0) _qdivi(_jit,r0,r1,r2,i0) -static void _qdivi(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qdivi(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # define qdivr_u(r0,r1,r2,r3) _qdivr_u(_jit,r0,r1,r2,r3) -static void _qdivr_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _qdivr_u(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define qdivi_u(r0,r1,r2,i0) _qdivi_u(_jit,r0,r1,r2,i0) -static void _qdivi_u(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_word_t); +static void _qdivi_u(jit_state_t*,int32_t, + int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define lshr(r0,r1,r2) _lshr(_jit,r0,r1,r2) -static void _lshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _lshr(jit_state_t*,int32_t,int32_t,int32_t); # else # define lshr(r0,r1,r2) SLLG(r0,r1,0,r2) # endif # define lshi(r0,r1,i0) _lshi(_jit,r0,r1,i0) -static void _lshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _lshi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define rshr(r0,r1,r2) _rshr(_jit,r0,r1,r2) -static void _rshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _rshr(jit_state_t*,int32_t,int32_t,int32_t); # else # define rshr(r0,r1,r2) SRAG(r0,r1,0,r2) # endif # define rshi(r0,r1,i0) _rshi(_jit,r0,r1,i0) -static void _rshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define rshr_u(r0,r1,r2) _rshr_u(_jit,r0,r1,r2) -static void _rshr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _rshr_u(jit_state_t*,int32_t,int32_t,int32_t); # else # define rshr_u(r0,r1,r2) SRLG(r0,r1,0,r2) # endif # define rshi_u(r0,r1,i0) _rshi_u(_jit,r0,r1,i0) -static void _rshi_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rshi_u(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define negr(r0,r1) LCR(r0,r1) # else # define negr(r0,r1) LCGR(r0,r1) # endif # define comr(r0,r1) _comr(_jit,r0,r1) -static void _comr(jit_state_t*,jit_int32_t,jit_int32_t); +static void _comr(jit_state_t*,int32_t,int32_t); # define andr(r0,r1,r2) _andr(_jit,r0,r1,r2) -static void _andr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _andr(jit_state_t*,int32_t,int32_t,int32_t); # define andi(r0,r1,i0) _andi(_jit,r0,r1,i0) -static void _andi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _andi(jit_state_t*,int32_t,int32_t,jit_word_t); # define orr(r0,r1,r2) _orr(_jit,r0,r1,r2) -static void _orr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _orr(jit_state_t*,int32_t,int32_t,int32_t); # define ori(r0,r1,i0) _ori(_jit,r0,r1,i0) -static void _ori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ori(jit_state_t*,int32_t,int32_t,jit_word_t); # define xorr(r0,r1,r2) _xorr(_jit,r0,r1,r2) -static void _xorr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _xorr(jit_state_t*,int32_t,int32_t,int32_t); # define xori(r0,r1,i0) _xori(_jit,r0,r1,i0) -static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); -# define htonr_us(r0,r1) extr_us(r0,r1) +static void _xori(jit_state_t*,int32_t,int32_t,jit_word_t); +# define bswapr_us(r0,r1) extr_us(r0,r1) # if __WORDSIZE == 32 -# define htonr_ui(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) movr(r0,r1) # else -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr, 2019_ul(r0,r1) movr(r0,r1) # endif # define extr_c(r0,r1) LGBR(r0,r1) # define extr_uc(r0,r1) LLGCR(r0,r1) @@ -1096,92 +1096,92 @@ static void _xori(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); # endif # define ldr_c(r0,r1) LGB(r0,0,0,r1) # define ldi_c(r0,i0) _ldi_c(_jit,r0,i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldxr_c(r0,r1,r2) _ldxr_c(_jit,r0,r1,r2) -static void _ldxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_c(r0,r1,i0) _ldxi_c(_jit,r0,r1,i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_uc(r0,r1) LLGC(r0,0,0,r1) # define ldi_uc(r0,i0) _ldi_uc(_jit,r0,i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldxr_uc(r0,r1,r2) _ldxr_uc(_jit,r0,r1,r2) -static void _ldxr_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_uc(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_uc(r0,r1,i0) _ldxi_uc(_jit,r0,r1,i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ldr_s(r0,r1) LH(r0,0,0,r1) # else # define ldr_s(r0,r1) LGH(r0,0,0,r1) # endif # define ldi_s(r0,i0) _ldi_s(_jit,r0,i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldxr_s(r0,r1,r2) _ldxr_s(_jit,r0,r1,r2) -static void _ldxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_s(r0,r1,i0) _ldxi_s(_jit,r0,r1,i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_us(r0,r1) LLGH(r0,0,0,r1) # define ldi_us(r0,i0) _ldi_us(_jit,r0,i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # define ldxr_us(r0,r1,r2) _ldxr_us(_jit,r0,r1,r2) -static void _ldxr_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_us(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_us(r0,r1,i0) _ldxi_us(_jit,r0,r1,i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ldr_i(r0,r1) LLGF(r0,0,0,r1) # else # define ldr_i(r0,r1) LGF(r0,0,0,r1) # endif # define ldi_i(r0,i0) _ldi_i(_jit,r0,i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # define ldxr_i(r0,r1,r2) _ldxr_i(_jit,r0,r1,r2) -static void _ldxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_i(r0,r1,i0) _ldxi_i(_jit,r0,r1,i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 64 # define ldr_ui(r0,r1) LLGF(r0,0,0,r1) # define ldi_ui(r0,i0) _ldi_ui(_jit,r0,i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); # define ldxr_ui(r0,r1,r2) _ldxr_ui(_jit,r0,r1,r2) -static void _ldxr_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_ui(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_ui(r0,r1,i0) _ldxi_ui(_jit,r0,r1,i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldr_l(r0,r1) LG(r0,0,0,r1) # define ldi_l(r0,i0) _ldi_l(_jit,r0,i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); # define ldxr_l(r0,r1,r2) _ldxr_l(_jit,r0,r1,r2) -static void _ldxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_l(r0,r1,i0) _ldxi_l(_jit,r0,r1,i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); # endif # define str_c(r0,r1) STC(r1,0,0,r0) # define sti_c(i0,r0) _sti_c(_jit,i0,r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define stxr_c(r0,r1,r2) _stxr_c(_jit,r0,r1,r2) -static void _stxr_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_c(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_c(i0,r0,r1) _stxi_c(_jit,i0,r0,r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define str_s(r0,r1) STH(r1,0,0,r0) # define sti_s(i0,r0) _sti_s(_jit,i0,r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # define stxr_s(r0,r1,r2) _stxr_s(_jit,r0,r1,r2) -static void _stxr_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_s(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_s(i0,r0,r1) _stxi_s(_jit,i0,r0,r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # define str_i(r0,r1) ST(r1,0,0,r0) # define sti_i(i0,r0) _sti_i(_jit,i0,r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # define stxr_i(r0,r1,r2) _stxr_i(_jit,r0,r1,r2) -static void _stxr_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_i(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_i(i0,r0,r1) _stxi_i(_jit,i0,r0,r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # if __WORDSIZE == 64 # define str_l(r0,r1) STG(r1,0,0,r0) # define sti_l(i0,r0) _sti_l(_jit,i0,r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); # define stxr_l(r0,r1,r2) _stxr_l(_jit,r0,r1,r2) -static void _stxr_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_l(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_l(i0,r0,r1) _stxi_l(_jit,i0,r0,r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); # endif # define ltr(r0,r1,r2) crr(CC_L,r0,r1,r2) # define lti(r0,r1,i0) cri(CC_L,r0,r1,i0) @@ -1298,16 +1298,16 @@ static void _prolog(jit_state_t*,jit_node_t*); # define epilog(i0) _epilog(_jit,i0) static void _epilog(jit_state_t*,jit_node_t*); # define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); # define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); # define patch_at(instr,label) _patch_at(_jit,instr,label) static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #endif #if CODE -# define _us jit_uint16_t -# define _ui jit_uint32_t +# define _us uint16_t +# define _ui uint32_t static void _E(jit_state_t *_jit, _ui Op) { @@ -1938,7 +1938,7 @@ _SSE(jit_state_t *_jit, _ui Op, _ui B1, _ui D1, _ui B2, _ui D2) # undef _ui static void -_nop(jit_state_t *_jit, jit_int32_t c) +_nop(jit_state_t *_jit, int32_t c) { assert(c >= 0 && !(c & 1)); while (c) { @@ -1947,10 +1947,10 @@ _nop(jit_state_t *_jit, jit_int32_t c) } } -static jit_int32_t -_xdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +static int32_t +_xdivr(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t regno; + int32_t regno; regno = jit_get_reg_pair(); #if __WORDSIZE == 32 movr(rn(regno), r0); @@ -1963,10 +1963,10 @@ _xdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) return (regno); } -static jit_int32_t -_xdivr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +static int32_t +_xdivr_u(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t regno; + int32_t regno; regno = jit_get_reg_pair(); #if __WORDSIZE == 32 movr(rn(regno), r0); @@ -1980,10 +1980,10 @@ _xdivr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) return (regno); } -static jit_int32_t -_xdivi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +static int32_t +_xdivi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t imm, regno; + int32_t imm, regno; regno = jit_get_reg_pair(); imm = jit_get_reg(jit_class_gpr); #if __WORDSIZE == 32 @@ -1999,11 +1999,11 @@ _xdivi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) return (regno); } -static jit_int32_t -_xdivi_u(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +static int32_t +_xdivi_u(jit_state_t *_jit, int32_t r0, jit_word_t i0) { /* cannot overlap because operand is 128-bit */ - jit_int32_t imm, regno; + int32_t imm, regno; regno = jit_get_reg_pair(); imm = jit_get_reg(jit_class_gpr); #if __WORDSIZE == 32 @@ -2021,11 +2021,11 @@ _xdivi_u(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_crr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_crr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; - jit_int32_t reg, rg; + int32_t reg, rg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); rg = rn(reg); @@ -2045,10 +2045,10 @@ _crr(jit_state_t *_jit, jit_int32_t cc, } static void -_cri(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_cri(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); crr(cc, r0, r1, rn(reg)); @@ -2056,11 +2056,11 @@ _cri(jit_state_t *_jit, jit_int32_t cc, } static void -_crr_u(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_crr_u(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; - jit_int32_t reg, rg; + int32_t reg, rg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); rg = rn(reg); @@ -2080,10 +2080,10 @@ _crr_u(jit_state_t *_jit, jit_int32_t cc, } static void -_cri_u(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_cri_u(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); crr_u(cc, r0, r1, rn(reg)); @@ -2091,8 +2091,8 @@ _cri_u(jit_state_t *_jit, jit_int32_t cc, } static void -_brr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_brr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; CMP_(r0, r1); @@ -2106,8 +2106,8 @@ _brr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_brr_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_brr_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP_(r0, r1); @@ -2117,10 +2117,10 @@ _brr_p(jit_state_t *_jit, jit_int32_t cc, } static void -_bri(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bri(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); brr(cc, i0, r0, rn(reg)); @@ -2128,11 +2128,11 @@ _bri(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bri_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bri_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = brr_p(cc, i0, r0, rn(reg)); @@ -2141,8 +2141,8 @@ _bri_p(jit_state_t *_jit, jit_int32_t cc, } static void -_brr_u(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_brr_u(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; CMPU_(r0, r1); @@ -2156,8 +2156,8 @@ _brr_u(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_brr_u_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_brr_u_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMPU_(r0, r1); @@ -2167,10 +2167,10 @@ _brr_u_p(jit_state_t *_jit, jit_int32_t cc, } static void -_bri_u(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bri_u(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); brr_u(cc, i0, r0, rn(reg)); @@ -2178,11 +2178,11 @@ _bri_u(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bri_u_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bri_u_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = brr_u_p(cc, i0, r0, rn(reg)); @@ -2191,8 +2191,8 @@ _bri_u_p(jit_state_t *_jit, jit_int32_t cc, } static void -_baddr(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_baddr(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; if (s) addr(r0, r0, r1); @@ -2207,10 +2207,10 @@ _baddr(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static void -_baddi(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_baddi(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); baddr(c, s, i0, r0, rn(reg)); @@ -2218,8 +2218,8 @@ _baddi(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static jit_word_t -_baddr_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_baddr_p(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; if (s) addr(r0, r0, r1); @@ -2231,11 +2231,11 @@ _baddr_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static jit_word_t -_baddi_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_baddi_p(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = baddr_p(c, s, i0, r0, rn(reg)); @@ -2244,8 +2244,8 @@ _baddi_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static void -_bsubr(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bsubr(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; if (s) subr(r0, r0, r1); @@ -2260,10 +2260,10 @@ _bsubr(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static void -_bsubi(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bsubi(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, jit_word_t i1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); bsubr(c, s, i0, r0, rn(reg)); @@ -2271,8 +2271,8 @@ _bsubi(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static jit_word_t -_bsubr_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bsubr_p(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d, w; if (s) subr(r0, r0, r1); @@ -2284,11 +2284,11 @@ _bsubr_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static jit_word_t -_bsubi_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bsubi_p(jit_state_t *_jit, int32_t c, jit_bool_t s, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi(rn(reg), i1); w = bsubr_p(c, s, i0, r0, rn(reg)); @@ -2297,11 +2297,11 @@ _bsubi_p(jit_state_t *_jit, jit_int32_t c, jit_bool_t s, } static void -_bmxr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmxr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movr(rn(reg), r0); andr(rn(reg), rn(reg), r1); @@ -2317,11 +2317,11 @@ _bmxr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bmxr_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bmxr_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movr(rn(reg), r0); andr(rn(reg), rn(reg), r1); @@ -2333,11 +2333,11 @@ _bmxr_p(jit_state_t *_jit, jit_int32_t cc, } static void -_bmxi(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmxi(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t d; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i1); andr(rn(reg), rn(reg), r0); @@ -2353,11 +2353,11 @@ _bmxi(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bmxi_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bmxi_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i1); andr(rn(reg), rn(reg), r0); @@ -2369,7 +2369,7 @@ _bmxi_p(jit_state_t *_jit, jit_int32_t cc, } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { #if __WORDSIZE == 32 if (r0 != r1) @@ -2381,11 +2381,11 @@ _movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t d; #if __WORDSIZE == 64 - jit_int32_t bits; + int32_t bits; #endif d = (i0 - _jit->pc.w) >> 1; if (s16_p(i0)) { @@ -2425,7 +2425,7 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; w = _jit->pc.w; @@ -2443,7 +2443,7 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) ADD_(r0, r1); @@ -2454,9 +2454,9 @@ _addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 && s16_p(i0)) ADDI_(r0, x16(i0)); #if __WORDSIZE == 64 @@ -2472,7 +2472,7 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) ADDC_(r0, r1); @@ -2483,9 +2483,9 @@ _addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); addcr(r0, r1, rn(reg)); @@ -2493,7 +2493,7 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) ADDX_(r0, r1); @@ -2504,9 +2504,9 @@ _addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); addxr(r0, r1, rn(reg)); @@ -2514,9 +2514,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_gpr); movr(rn(reg), r2); @@ -2531,9 +2531,9 @@ _subr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 && s16_p(-i0)) ADDI_(r0, x16(-i0)); #if __WORDSIZE == 64 @@ -2549,9 +2549,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_gpr); movr(rn(reg), r2); @@ -2566,9 +2566,9 @@ _subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); subcr(r0, r1, rn(reg)); @@ -2576,9 +2576,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_gpr); movr(rn(reg), r2); @@ -2593,9 +2593,9 @@ _subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); subxr(r0, r1, rn(reg)); @@ -2603,14 +2603,14 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) MUL_(r0, r1); @@ -2621,9 +2621,9 @@ _mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s16_p(i0)) { movr(r0, r1); MULI_(r0, x16(i0)); @@ -2638,11 +2638,11 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) static void _qmulr(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t reg; + int32_t reg; /* The only invalid condition is r0 == r1 */ - jit_int32_t t2, t3, s2, s3; + int32_t t2, t3, s2, s3; if (r2 == r0 || r2 == r1) { s2 = jit_get_reg(jit_class_gpr); t2 = rn(s2); @@ -2676,9 +2676,9 @@ _qmulr(jit_state_t *_jit, static void _qmuli(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); qmulr(r0, r1, r2, rn(reg)); @@ -2687,9 +2687,9 @@ _qmuli(jit_state_t *_jit, static void _qmulr_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t regno; + int32_t regno; regno = jit_get_reg_pair(); movr(rn(regno) + 1, r2); MULU_(rn(regno), r3); @@ -2700,9 +2700,9 @@ _qmulr_u(jit_state_t *_jit, static void _qmuli_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = jit_get_reg_pair(); movr(rn(regno) + 1, r2); movi(rn(regno), i0); @@ -2713,74 +2713,74 @@ _qmuli_u(jit_state_t *_jit, } static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t regno; + int32_t regno; regno = xdivr(r1, r2); movr(r0, rn(regno) + 1); } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = xdivi(r1, i0); movr(r0, rn(regno) + 1); } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t regno; + int32_t regno; regno = xdivr_u(r1, r2); movr(r0, rn(regno) + 1); } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = xdivi_u(r1, i0); movr(r0, rn(regno) + 1); } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t regno; + int32_t regno; regno = xdivr(r1, r2); movr(r0, rn(regno)); } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = xdivi(r1, i0); movr(r0, rn(regno)); } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t regno; + int32_t regno; regno = xdivr_u(r1, r2); movr(r0, rn(regno)); } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = xdivi_u(r1, i0); movr(r0, rn(regno)); } static void _qdivr(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t regno; + int32_t regno; regno = xdivr(r2, r3); movr(r0, rn(regno) + 1); movr(r1, rn(regno)); @@ -2788,9 +2788,9 @@ _qdivr(jit_state_t *_jit, static void _qdivi(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = xdivi(r2, i0); movr(r0, rn(regno) + 1); movr(r1, rn(regno)); @@ -2798,9 +2798,9 @@ _qdivi(jit_state_t *_jit, static void _qdivr_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3) + int32_t r0, int32_t r1, int32_t r2, int32_t r3) { - jit_int32_t regno; + int32_t regno; regno = xdivr_u(r2, r3); movr(r0, rn(regno) + 1); movr(r1, rn(regno)); @@ -2808,9 +2808,9 @@ _qdivr_u(jit_state_t *_jit, static void _qdivi_u(jit_state_t *_jit, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_word_t i0) + int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) { - jit_int32_t regno; + int32_t regno; regno = xdivi_u(r2, i0); movr(r0, rn(regno) + 1); movr(r1, rn(regno)); @@ -2818,9 +2818,9 @@ _qdivi_u(jit_state_t *_jit, # if __WORDSIZE == 32 static void -_lshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_lshr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg_but_zero(0); movr(rn(reg), r2); @@ -2836,9 +2836,9 @@ _lshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) #endif static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); lshr(r0, r1, rn(reg)); @@ -2847,9 +2847,9 @@ _lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 32 static void -_rshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_rshr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg_but_zero(0); movr(rn(reg), r2); @@ -2865,9 +2865,9 @@ _rshr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) #endif static void -_rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); rshr(r0, r1, rn(reg)); @@ -2876,9 +2876,9 @@ _rshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 32 static void -_rshr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_rshr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg_but_zero(0); movr(rn(reg), r2); @@ -2894,9 +2894,9 @@ _rshr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) #endif static void -_rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); rshr_u(r0, r1, rn(reg)); @@ -2904,9 +2904,9 @@ _rshi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_comr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_comr(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), -1); movr(r0, r1); @@ -2915,7 +2915,7 @@ _comr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_andr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_andr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) AND_(r0, r1); @@ -2926,7 +2926,7 @@ _andr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(r0, r1); NILL(r0, x16(i0)); @@ -2938,7 +2938,7 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_orr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_orr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) OR_(r0, r1); @@ -2949,7 +2949,7 @@ _orr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { movr(r0, r1); OILL(r0, x16(i0)); @@ -2961,7 +2961,7 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xorr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_xorr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) XOR_(r0, r1); @@ -2972,9 +2972,9 @@ _xorr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); xorr(r0, r1, rn(reg)); @@ -2982,14 +2982,14 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_c(r0, r0); } static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3003,9 +3003,9 @@ _ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) { #if __WORDSIZE == 32 LB(r0, x20(i0), 0, r1); @@ -3028,14 +3028,14 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_uc(r0, r0); } static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3049,9 +3049,9 @@ _ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) LLGC(r0, x20(i0), 0, r1); else if (r0 != r1) { @@ -3069,14 +3069,14 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_s(r0, r0); } static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3090,9 +3090,9 @@ _ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; #if __WORDSIZE == 32 if (u12_p(i0)) LH(r0, i0, 0, r1); @@ -3120,14 +3120,14 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_us(r0, r0); } static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3141,9 +3141,9 @@ _ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) LLGH(r0, x20(i0), 0, r1); else if (r0 != r1) { @@ -3161,14 +3161,14 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_i(r0, r0); } static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3182,9 +3182,9 @@ _ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) LGF(r0, x20(i0), 0, r1); else if (r0 != r1) { @@ -3203,14 +3203,14 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #if __WORDSIZE == 64 static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_ui(r0, r0); } static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3224,9 +3224,9 @@ _ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) LLGF(r0, x20(i0), 0, r1); else if (r0 != r1) { @@ -3244,14 +3244,14 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { movi(r0, i0); ldr_l(r0, r0); } static void -_ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) { addr(r0, r0, r1); @@ -3265,9 +3265,9 @@ _ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) LG(r0, x20(i0), 0, r1); else if (r0 != r1) { @@ -3286,9 +3286,9 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) #endif static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); str_c(rn(reg), r0); @@ -3296,9 +3296,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r0); addr(rn(reg), rn(reg), r1); @@ -3307,9 +3307,9 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) STC(r1, i0, 0, r0); else if (s20_p(i0)) @@ -3323,9 +3323,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); str_s(rn(reg), r0); @@ -3333,9 +3333,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r0); addr(rn(reg), rn(reg), r1); @@ -3344,9 +3344,9 @@ _stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) STH(r1, i0, 0, r0); else if (s20_p(i0)) @@ -3360,9 +3360,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); str_i(rn(reg), r0); @@ -3370,9 +3370,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r0); addr(rn(reg), rn(reg), r1); @@ -3381,9 +3381,9 @@ _stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) ST(r1, i0, 0, r0); else if (s20_p(i0)) @@ -3398,9 +3398,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) #if __WORDSIZE == 64 static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); str_l(rn(reg), r0); @@ -3408,9 +3408,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r0); addr(rn(reg), rn(reg), r1); @@ -3419,9 +3419,9 @@ _stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s20_p(i0)) STG(r1, x20(i0), 0, r0); else { @@ -3437,7 +3437,7 @@ static void _jmpi(jit_state_t *_jit, jit_word_t i0) { jit_word_t d; - jit_int32_t reg; + int32_t reg; d = (i0 - _jit->pc.w) >> 1; if (s16_p(d)) J(x16(d)); @@ -3455,7 +3455,7 @@ static jit_word_t _jmpi_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(jit_class_nospill); w = movi_p(rn(reg), i0); jmpr(rn(reg)); @@ -3467,7 +3467,7 @@ static void _calli(jit_state_t *_jit, jit_word_t i0) { jit_word_t d; - jit_int32_t reg; + int32_t reg; d = (i0 - _jit->pc.w) >> 1; if (s32_p(d)) BRASL(_R14_REGNO, d); @@ -3483,7 +3483,7 @@ static jit_word_t _calli_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); w = movi_p(rn(reg), i0); callr(rn(reg)); @@ -3491,7 +3491,7 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) return (w); } -static jit_int32_t gprs[] = { +static int32_t gprs[] = { _R2, _R3, _R4, _R5, _R6, _R7, _R8, _R9, _R10, _R11, _R12, _R13 }; @@ -3499,9 +3499,9 @@ static jit_int32_t gprs[] = { static void _prolog(jit_state_t *_jit, jit_node_t *i0) { - jit_int32_t regno, offset; + int32_t regno, offset; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -3602,7 +3602,7 @@ _prolog(jit_state_t *_jit, jit_node_t *i0) static void _epilog(jit_state_t *_jit, jit_node_t *i0) { - jit_int32_t regno, offset; + int32_t regno, offset; if (_jitc->function->assume_frame) return; if ((_jitc->function->self.call & jit_call_varargs) && @@ -3670,9 +3670,9 @@ _epilog(jit_state_t *_jit, jit_node_t *i0) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function->self.call & jit_call_varargs); @@ -3699,11 +3699,11 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t rg0; - jit_int32_t rg1; - jit_int32_t rg2; + int32_t rg0; + int32_t rg1; + int32_t rg2; jit_word_t ge_code; jit_word_t lt_code; @@ -3771,30 +3771,30 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { jit_word_t d; union { - jit_uint16_t *s; + uint16_t *s; jit_word_t w; } u; u.w = instr; union { struct { - jit_uint16_t op : 8; - jit_uint16_t r1 : 4; - jit_uint16_t r3 : 4; + uint16_t op : 8; + uint16_t r1 : 4; + uint16_t r3 : 4; } b; - jit_uint16_t s; + uint16_t s; } i0; union { struct { - jit_uint16_t i2; + uint16_t i2; } b; - jit_uint16_t s; + uint16_t s; } i1; union { struct { - jit_uint32_t ih : 16; - jit_uint32_t il : 16; + uint32_t ih : 16; + uint32_t il : 16; } b; - jit_uint32_t i; + uint32_t i; } i12; i0.s = u.s[0]; /* movi_p */ diff --git a/libguile/lightning/lib/jit_s390-fpu.c b/libguile/lightning/jit/s390-fpu.c index cb35241df..386664369 100644 --- a/libguile/lightning/lib/jit_s390-fpu.c +++ b/libguile/lightning/jit/s390-fpu.c @@ -286,66 +286,66 @@ # define TCXB(R1,D2,X2,B2) RXE_(0xED,R1,X2,B2,D2,0x12) # define fp(code,r0,r1,i0) _fp(_jit,jit_code_##code##i_f,r0,r1,i0) static void _fp(jit_state_t*,jit_code_t, - jit_int32_t,jit_int32_t,jit_float32_t*); + int32_t,int32_t,jit_float32_t*); # define dp(code,r0,r1,i0) _dp(_jit,jit_code_##code##i_d,r0,r1,i0) static void _dp(jit_state_t*,jit_code_t, - jit_int32_t,jit_int32_t,jit_float64_t*); + int32_t,int32_t,jit_float64_t*); # define fr(cc,r0,r1,r2) _fr(_jit,cc,r0,r1,r2) -static void _fr(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _fr(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define dr(cc,r0,r1,r2) _dr(_jit,cc,r0,r1,r2) -static void _dr(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +static void _dr(jit_state_t*,int32_t, + int32_t,int32_t,int32_t); # define fi(cc,r0,r1,i0) _fi(_jit,cc,r0,r1,i0) -static void _fi(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_float32_t*); +static void _fi(jit_state_t*,int32_t, + int32_t,int32_t,jit_float32_t*); # define di(cc,r0,r1,i0) _di(_jit,cc,r0,r1,i0) -static void _di(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_float64_t*); +static void _di(jit_state_t*,int32_t, + int32_t,int32_t,jit_float64_t*); # define bfr(cc,i0,r0,r1) _bfr(_jit,cc,i0,r0,r1) -static void _bfr(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _bfr(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bdr(cc,i0,r0,r1) _bdr(_jit,cc,i0,r0,r1) -static void _bdr(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static void _bdr(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bfr_p(cc,i0,r0,r1) _bfr_p(_jit,cc,i0,r0,r1) -static jit_word_t _bfr_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bfr_p(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bdr_p(cc,i0,r0,r1) _bdr_p(_jit,cc,i0,r0,r1) -static jit_word_t _bdr_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bdr_p(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bfi(cc,i0,r0,i1) _bfi(_jit,cc,i0,r0,i1) -static void _bfi(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_float32_t*); +static void _bfi(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_float32_t*); # define bdi(cc,i0,r0,i1) _bdi(_jit,cc,i0,r0,i1) -static void _bdi(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_float64_t*); +static void _bdi(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_float64_t*); # define bfi_p(cc,i0,r0,i1) _bfi_p(_jit,cc,i0,r0,i1) -static jit_word_t _bfi_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_float32_t*); +static jit_word_t _bfi_p(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_float32_t*); # define bdi_p(cc,i0,r0,i1) _bdi_p(_jit,cc,i0,r0,i1) -static jit_word_t _bdi_p(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_float64_t*); +static jit_word_t _bdi_p(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_float64_t*); # define buneqr(db,i0,r0,r1) _buneqr(_jit,db,i0,r0,r1) -static jit_word_t _buneqr(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _buneqr(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define buneqi(db,i0,r0,i1) _buneqi(_jit,db,i0,r0,(jit_word_t)i1) -static jit_word_t _buneqi(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _buneqi(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define bltgtr(db,i0,r0,r1) _bltgtr(_jit,db,i0,r0,r1) -static jit_word_t _bltgtr(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_int32_t); +static jit_word_t _bltgtr(jit_state_t*,int32_t, + jit_word_t,int32_t,int32_t); # define bltgti(db,i0,r0,i1) _bltgti(_jit,db,i0,r0,(jit_word_t)i1) -static jit_word_t _bltgti(jit_state_t*,jit_int32_t, - jit_word_t,jit_int32_t,jit_word_t); +static jit_word_t _bltgti(jit_state_t*,int32_t, + jit_word_t,int32_t,jit_word_t); # define movr_f(r0,r1) _movr_f(_jit,r0,r1) -static void _movr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_f(jit_state_t*,int32_t,int32_t); # define movi_f(r0,i0) _movi_f(_jit,r0,i0) -static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*); +static void _movi_f(jit_state_t*,int32_t,jit_float32_t*); # define movr_d(r0,r1) _movr_d(_jit,r0,r1) -static void _movr_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _movr_d(jit_state_t*,int32_t,int32_t); # define movi_d(r0,i0) _movi_d(_jit,r0,i0) -static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); +static void _movi_d(jit_state_t*,int32_t,jit_float64_t*); # define absr_f(r0,r1) LPEBR(r0,r1) # define absr_d(r0,r1) LPDBR(r0,r1) # define negr_f(r0,r1) LCEBR(r0,r1) @@ -368,61 +368,61 @@ static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*); # define extr_d_f(r0,r1) LEDBR(r0,r1) # define extr_f_d(r0,r1) LDEBR(r0,r1) # define addr_f(r0,r1,r2) _addr_f(_jit,r0,r1,r2) -static void _addr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addr_f(jit_state_t*,int32_t,int32_t,int32_t); # define addi_f(r0,r1,i0) fp(add,r0,r1,i0) # define addr_d(r0,r1,r2) _addr_d(_jit,r0,r1,r2) -static void _addr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _addr_d(jit_state_t*,int32_t,int32_t,int32_t); # define addi_d(r0,r1,i0) dp(add,r0,r1,i0) # define subr_f(r0,r1,r2) _subr_f(_jit,r0,r1,r2) -static void _subr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subr_f(jit_state_t*,int32_t,int32_t,int32_t); # define subi_f(r0,r1,i0) fp(sub,r0,r1,i0) # define subr_d(r0,r1,r2) _subr_d(_jit,r0,r1,r2) -static void _subr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _subr_d(jit_state_t*,int32_t,int32_t,int32_t); # define subi_d(r0,r1,i0) dp(sub,r0,r1,i0) # define rsbr_f(r0,r1,r2) subr_f(r0,r2,r1) # define rsbi_f(r0,r1,i0) fp(rsb,r0,r1,i0) # define rsbr_d(r0,r1,r2) subr_d(r0,r2,r1) # define rsbi_d(r0,r1,i0) dp(rsb,r0,r1,i0) # define mulr_f(r0,r1,r2) _mulr_f(_jit,r0,r1,r2) -static void _mulr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr_f(jit_state_t*,int32_t,int32_t,int32_t); # define muli_f(r0,r1,i0) fp(mul,r0,r1,i0) # define mulr_d(r0,r1,r2) _mulr_d(_jit,r0,r1,r2) -static void _mulr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _mulr_d(jit_state_t*,int32_t,int32_t,int32_t); # define muli_d(r0,r1,i0) dp(mul,r0,r1,i0) # define divr_f(r0,r1,r2) _divr_f(_jit,r0,r1,r2) -static void _divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_f(jit_state_t*,int32_t,int32_t,int32_t); # define divi_f(r0,r1,i0) fp(div,r0,r1,i0) # define divr_d(r0,r1,r2) _divr_d(_jit,r0,r1,r2) -static void _divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _divr_d(jit_state_t*,int32_t,int32_t,int32_t); # define divi_d(r0,r1,i0) dp(div,r0,r1,i0) # define ldr_f(r0,r1) LE(r0,0,0,r1) # define ldr_d(r0,r1) LD(r0,0,0,r1) # define ldi_f(r0,i0) _ldi_f(_jit,r0,i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); # define ldi_d(r0,i0) _ldi_d(_jit,r0,i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); # define ldxr_f(r0,r1,r2) _ldxr_f(_jit,r0,r1,r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ldxr_d(r0,r1,r2) _ldxr_d(_jit,r0,r1,r2) -static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,jit_word_t); # define str_f(r0,r1) STE(r1,0,0,r0) # define str_d(r0,r1) STD(r1,0,0,r0) # define sti_f(i0,r0) _sti_f(_jit,i0,r0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); # define sti_d(i0,r0) _sti_d(_jit,i0,r0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); # define stxr_f(r0,r1,r2) _stxr_f(_jit,r0,r1,r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define stxr_d(r0,r1,r2) _stxr_d(_jit,r0,r1,r2) -static void _stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1) -static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define ltr_f(r0,r1,r2) fr(CC_L,r0,r1,r2) # define ltr_d(r0,r1,r2) dr(CC_L,r0,r1,r2) # define lti_f(r0,r1,i0) fi(CC_L,r0,r1,i0) @@ -456,9 +456,9 @@ static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); # define unlei_f(r0,r1,i0) fi(CC_NH,r0,r1,i0) # define unlei_d(r0,r1,i0) di(CC_NH,r0,r1,i0) # define uneqr_f(r0,r1,r2) _uneqr_f(_jit,r0,r1,r2) -static void _uneqr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_f(jit_state_t*,int32_t,int32_t,int32_t); # define uneqr_d(r0,r1,r2) _uneqr_d(_jit,r0,r1,r2) -static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _uneqr_d(jit_state_t*,int32_t,int32_t,int32_t); # define uneqi_f(r0,r1,i0) fp(uneq,r0,r1,i0) # define uneqi_d(r0,r1,i0) dp(uneq,r0,r1,i0) # define unger_f(r0,r1,r2) fr(CC_NL,r0,r1,r2) @@ -470,9 +470,9 @@ static void _uneqr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); # define ungti_f(r0,r1,i0) fi(CC_NLE,r0,r1,i0) # define ungti_d(r0,r1,i0) di(CC_NLE,r0,r1,i0) # define ltgtr_f(r0,r1,r2) _ltgtr_f(_jit,r0,r1,r2) -static void _ltgtr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_f(jit_state_t*,int32_t,int32_t,int32_t); # define ltgtr_d(r0,r1,r2) _ltgtr_d(_jit,r0,r1,r2) -static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ltgtr_d(jit_state_t*,int32_t,int32_t,int32_t); # define ltgti_f(r0,r1,i0) fp(ltgt,r0,r1,i0) # define ltgti_d(r0,r1,i0) dp(ltgt,r0,r1,i0) # define ordr_f(r0,r1,r2) fr(CC_NO,r0,r1,r2) @@ -596,15 +596,15 @@ static void _ltgtr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); # define bunordi_f_p(i0,r0,i1) bfi_p(CC_O,i0,r0,i1) # define bunordi_d_p(i0,r0,i1) bdi_p(CC_O,i0,r0,i1) # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE static void _fp(jit_state_t *_jit, jit_code_t code, - jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0) + int32_t r0, int32_t r1, jit_float32_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); movi_f(rn(reg), i0); switch (code) { @@ -622,9 +622,9 @@ _fp(jit_state_t *_jit, jit_code_t code, static void _dp(jit_state_t *_jit, jit_code_t code, - jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) + int32_t r0, int32_t r1, jit_float64_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr); movi_d(rn(reg), i0); switch (code) { @@ -641,8 +641,8 @@ _dp(jit_state_t *_jit, jit_code_t code, } static void -_fr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_fr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; LGHI(r0, 1); @@ -654,8 +654,8 @@ _fr(jit_state_t *_jit, jit_int32_t cc, } static void -_dr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_dr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { jit_word_t w; LGHI(r0, 1); @@ -667,10 +667,10 @@ _dr(jit_state_t *_jit, jit_int32_t cc, } static void -_fi(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0) +_fi(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_float32_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi_f(rn(reg), i0); fr(cc, r0, r1, rn(reg)); @@ -678,10 +678,10 @@ _fi(jit_state_t *_jit, jit_int32_t cc, } static void -_di(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) +_di(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_float64_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); movi_d(rn(reg), i0); dr(cc, r0, r1, rn(reg)); @@ -690,8 +690,8 @@ _di(jit_state_t *_jit, jit_int32_t cc, static void -_bfr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bfr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; CEBR(r0, r1); @@ -705,8 +705,8 @@ _bfr(jit_state_t *_jit, jit_int32_t cc, } static void -_bdr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bdr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t d; CDBR(r0, r1); @@ -720,8 +720,8 @@ _bdr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bfr_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bfr_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CEBR(r0, r1); @@ -731,8 +731,8 @@ _bfr_p(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bdr_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bdr_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CDBR(r0, r1); @@ -742,10 +742,10 @@ _bdr_p(jit_state_t *_jit, jit_int32_t cc, } static void -_bfi(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float32_t *i1) +_bfi(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float32_t *i1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi_f(rn(reg), i1); bfr(cc, i0, r0, rn(reg)); @@ -753,10 +753,10 @@ _bfi(jit_state_t *_jit, jit_int32_t cc, } static void -_bdi(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float64_t *i1) +_bdi(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float64_t *i1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi_d(rn(reg), i1); bdr(cc, i0, r0, rn(reg)); @@ -764,11 +764,11 @@ _bdi(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bfi_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float32_t *i1) +_bfi_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float32_t *i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi_f(rn(reg), i1); w = bfr_p(cc, i0, r0, rn(reg)); @@ -777,11 +777,11 @@ _bfi_p(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bdi_p(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float64_t *i1) +_bdi_p(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float64_t *i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); movi_d(rn(reg), i1); w = bdr_p(cc, i0, r0, rn(reg)); @@ -790,8 +790,8 @@ _bdi_p(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_buneqr(jit_state_t *_jit, jit_int32_t db, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_buneqr(jit_state_t *_jit, int32_t db, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t unord, ne, w; if (db) CDBR(r0, r1); @@ -808,11 +808,11 @@ _buneqr(jit_state_t *_jit, jit_int32_t db, } static jit_word_t -_buneqi(jit_state_t *_jit, jit_int32_t db, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_buneqi(jit_state_t *_jit, int32_t db, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); if (db) movi_d(rn(reg), (jit_float64_t *)i1); @@ -824,8 +824,8 @@ _buneqi(jit_state_t *_jit, jit_int32_t db, } static jit_word_t -_bltgtr(jit_state_t *_jit, jit_int32_t db, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_bltgtr(jit_state_t *_jit, int32_t db, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t unord, eq, w; if (db) CDBR(r0, r1); @@ -842,11 +842,11 @@ _bltgtr(jit_state_t *_jit, jit_int32_t db, } static jit_word_t -_bltgti(jit_state_t *_jit, jit_int32_t db, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bltgti(jit_state_t *_jit, int32_t db, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_fpr|jit_class_nospill); if (db) movi_d(rn(reg), (jit_float64_t *)i1); @@ -858,22 +858,22 @@ _bltgti(jit_state_t *_jit, jit_int32_t db, } static void -_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) LER(r0, r1); } static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; - if (*(jit_int32_t *)i0 == 0) + if (*(int32_t *)i0 == 0) LZER(r0); else if (_jitc->no_data) { data.f = *i0; @@ -888,26 +888,26 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) LDR(r0, r1); } static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { #if __WORDSIZE == 32 - jit_int32_t i[2]; + int32_t i[2]; #else - jit_int64_t l; + int64_t l; #endif jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; - if (*(jit_int64_t *)i0 == 0) + if (*(int64_t *)i0 == 0) LZDR(r0); else if (_jitc->no_data) { data.d = *i0; @@ -929,7 +929,7 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) } static void -_addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) AEBR(r0, r1); @@ -940,7 +940,7 @@ _addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) ADBR(r0, r1); @@ -951,9 +951,9 @@ _addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_fpr); movr_f(rn(reg), r2); @@ -968,9 +968,9 @@ _subr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_fpr); movr_d(rn(reg), r2); @@ -985,7 +985,7 @@ _subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) MEEBR(r0, r1); @@ -996,7 +996,7 @@ _mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_mulr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r2) MDBR(r0, r1); @@ -1007,9 +1007,9 @@ _mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_fpr); movr_f(rn(reg), r2); @@ -1024,9 +1024,9 @@ _divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r2) { reg = jit_get_reg(jit_class_fpr); movr_d(rn(reg), r2); @@ -1041,9 +1041,9 @@ _divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); ldr_f(r0, rn(reg)); @@ -1051,9 +1051,9 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); ldr_d(r0, rn(reg)); @@ -1061,9 +1061,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r1); addr(rn(reg), rn(reg), r2); @@ -1072,9 +1072,9 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r1); addr(rn(reg), rn(reg), r2); @@ -1083,9 +1083,9 @@ _ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) LE(r0, i0, 0, r1); else if (s20_p(i0)) @@ -1100,9 +1100,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) LD(r0, i0, 0, r1); else if (s20_p(i0)) @@ -1117,9 +1117,9 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); str_f(rn(reg), r0); @@ -1127,9 +1127,9 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movi(rn(reg), i0); str_d(rn(reg), r0); @@ -1137,9 +1137,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r0); addr(rn(reg), rn(reg), r1); @@ -1148,9 +1148,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg_but_zero(0); movr(rn(reg), r0); addr(rn(reg), rn(reg), r1); @@ -1159,9 +1159,9 @@ _stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) STE(r1, i0, 0, r0); else if (s20_p(i0)) @@ -1176,9 +1176,9 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (u12_p(i0)) STD(r1, i0, 0, r0); else if (s20_p(i0)) @@ -1193,7 +1193,7 @@ _stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t unord, eq; movi(r0, 1); /* set to one */ @@ -1208,7 +1208,7 @@ _uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_uneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t unord, eq; movi(r0, 1); /* set to one */ @@ -1223,7 +1223,7 @@ _uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t unord, eq; movi(r0, 0); /* set to zero */ @@ -1238,7 +1238,7 @@ _ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_word_t unord, eq; movi(r0, 0); /* set to zero */ @@ -1253,11 +1253,11 @@ _ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t rg0; - jit_int32_t rg1; - jit_int32_t rg2; + int32_t rg0; + int32_t rg1; + int32_t rg2; jit_word_t ge_code; jit_word_t lt_code; diff --git a/libguile/lightning/lib/jit_s390.c b/libguile/lightning/jit/s390.c index 27e887100..0dc109a9f 100644 --- a/libguile/lightning/lib/jit_s390.c +++ b/libguile/lightning/jit/s390.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2017 Free Software Foundation, Inc. + * Copyright (C) 2013-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -17,9 +17,6 @@ * Paulo Cesar Pereira de Andrade */ -#include <lightning.h> -#include <lightning/jit_private.h> - #if __WORDSIZE == 32 # define NUM_FLOAT_REG_ARGS 2 #else @@ -73,11 +70,11 @@ type = struct __va_list_tag { * Prototypes */ #define jit_get_reg_pair() _jit_get_reg_pair(_jit) -static jit_int32_t _jit_get_reg_pair(jit_state_t*); +static int32_t _jit_get_reg_pair(jit_state_t*); #define jit_unget_reg_pair(regno) _jit_unget_reg_pair(_jit,regno) -static void _jit_unget_reg_pair(jit_state_t*,jit_int32_t); +static void _jit_unget_reg_pair(jit_state_t*,int32_t); #define jit_get_reg_but_zero(flags) _jit_get_reg_but_zero(_jit,flags) -static jit_int32_t _jit_get_reg_but_zero(jit_state_t*,jit_int32_t); +static int32_t _jit_get_reg_but_zero(jit_state_t*,int32_t); #define jit_unget_reg_but_zero(reg) jit_unget_reg(reg) #define patch(instr, node) _patch(_jit, instr, node) static void _patch(jit_state_t*,jit_word_t,jit_node_t*); @@ -86,14 +83,14 @@ static void _patch(jit_state_t*,jit_word_t,jit_node_t*); extern void __clear_cache(void *, void *); #define PROTO 1 -# include "jit_s390-cpu.c" -# include "jit_s390-fpu.c" +# include "s390-cpu.c" +# include "s390-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { rc(gpr) | 0x0, "%r0" }, { rc(gpr) | 0x1, "%r1" }, { rc(gpr) | rc(sav) | 0xc, "%r12" }, @@ -147,7 +144,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -169,7 +166,7 @@ _jit_prolog(jit_state_t *_jit) _jitc->function->self.aoff = -8; _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -188,8 +185,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -207,13 +204,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -240,7 +237,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); jit_movr(JIT_RET, u); @@ -258,7 +255,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); jit_movr_f(JIT_FRET, u); @@ -276,7 +273,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); jit_movr_d(JIT_FRET, u); @@ -344,7 +341,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -355,7 +352,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -373,7 +370,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_f_reg_p(_jitc->function->self.argf)) offset = _jitc->function->self.argf++; @@ -391,7 +388,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_f_reg_p(_jitc->function->self.argf)) offset = _jitc->function->self.argf++; @@ -406,7 +403,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -414,12 +411,12 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_c(u, _R2 - v->u.w); else jit_ldxi_c(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int8_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int8_t)); jit_dec_synth(); } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -427,12 +424,12 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_uc(u, _R2 - v->u.w); else jit_ldxi_uc(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_uint8_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(uint8_t)); jit_dec_synth(); } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -440,12 +437,12 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_s(u, _R2 - v->u.w); else jit_ldxi_s(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int16_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int16_t)); jit_dec_synth(); } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -453,12 +450,12 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_us(u, _R2 - v->u.w); else jit_ldxi_us(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_uint16_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(uint16_t)); jit_dec_synth(); } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -471,13 +468,13 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } else jit_ldxi_i(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int32_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int32_t)); jit_dec_synth(); } #if __WORDSIZE == 64 void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_ui, u, v); @@ -485,12 +482,12 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_ui(u, _R2 - v->u.w); else jit_ldxi_ui(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_uint32_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(uint32_t)); jit_dec_synth(); } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_l, u, v); @@ -503,7 +500,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) #endif void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -517,7 +514,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_arg_reg_p(v->u.w)) @@ -532,7 +529,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(getarg_f, u, v); @@ -549,7 +546,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -567,7 +564,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -586,7 +583,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(getarg_d, u, v); @@ -598,7 +595,7 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); @@ -612,7 +609,7 @@ _jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); if (jit_arg_f_reg_p(v->u.w)) @@ -627,7 +624,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr, u); @@ -646,7 +643,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_w(pushargi, u); jit_link_prepare(); @@ -665,7 +662,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_f, u); @@ -688,7 +685,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); @@ -711,7 +708,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { assert(_jitc->function); jit_inc_synth_w(pushargr_d, u); @@ -730,7 +727,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; assert(_jitc->function); jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); @@ -749,9 +746,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if (spec & jit_class_arg) { regno = _R2 - regno; @@ -767,7 +764,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function); @@ -802,7 +799,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, JIT_RET); @@ -810,7 +807,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, JIT_RET); @@ -818,7 +815,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, JIT_RET); @@ -826,7 +823,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, JIT_RET); @@ -834,7 +831,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); #if __WORDSIZE == 64 @@ -847,7 +844,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) #if __WORDSIZE == 64 void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_ui, r0); jit_extr_ui(r0, JIT_RET); @@ -855,7 +852,7 @@ _jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_l, r0); jit_movr(r0, JIT_RET); @@ -864,7 +861,7 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) #endif void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_f, r0); jit_movr_f(r0, JIT_FRET); @@ -872,7 +869,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); jit_movr_d(r0, JIT_FRET); @@ -885,15 +882,15 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t patch_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1549,8 +1546,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_s390-cpu.c" -# include "jit_s390-fpu.c" +# include "s390-cpu.c" +# include "s390-fpu.c" #undef CODE void @@ -1590,10 +1587,10 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_fpr_t r1) stxi_d(i0, rn(r0), rn(r1)); } -static jit_int32_t +static int32_t _jit_get_reg_pair(jit_state_t *_jit) { - jit_int32_t r1, r2; + int32_t r1, r2; /* Try to find a register pair for use with operations that * require a odd based register pair. Search for the best * match to avoid spills or at least a valid operation. @@ -1638,9 +1635,9 @@ _jit_get_reg_pair(jit_state_t *_jit) } static void -_jit_unget_reg_pair(jit_state_t *_jit, jit_int32_t reg) +_jit_unget_reg_pair(jit_state_t *_jit, int32_t reg) { - jit_int32_t r1, r2; + int32_t r1, r2; r1 = reg; switch (r1) { case _R0: r2 = _R1; break; @@ -1655,10 +1652,10 @@ _jit_unget_reg_pair(jit_state_t *_jit, jit_int32_t reg) jit_unget_reg(r2); } -static jit_int32_t -_jit_get_reg_but_zero(jit_state_t *_jit, jit_int32_t flags) +static int32_t +_jit_get_reg_but_zero(jit_state_t *_jit, int32_t flags) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); if (reg == _R0) { reg = jit_get_reg(jit_class_gpr|flags); @@ -1670,7 +1667,7 @@ _jit_get_reg_but_zero(jit_state_t *_jit, jit_int32_t flags) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_s390.h b/libguile/lightning/jit/s390.h index 0e74b2e25..0e74b2e25 100644 --- a/libguile/lightning/include/lightning/jit_s390.h +++ b/libguile/lightning/jit/s390.h diff --git a/libguile/lightning/lib/jit_sparc-cpu.c b/libguile/lightning/jit/sparc-cpu.c index a4d88d1ca..81f92ce23 100644 --- a/libguile/lightning/lib/jit_sparc-cpu.c +++ b/libguile/lightning/jit/sparc-cpu.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2017 Free Software Foundation, Inc. + * Copyright (C) 2013-2017, 2019 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -49,32 +49,32 @@ */ # define stack_framesize ((16 + (__WORDSIZE == 32) + 6) * sizeof(jit_word_t)) typedef union { - struct { jit_uint32_t b: 2; } op; - struct { jit_uint32_t _: 2; jit_uint32_t b: 1; } a; - struct { jit_uint32_t _: 2; jit_uint32_t b: 5; } rd; - struct { jit_uint32_t _: 2; jit_uint32_t b: 30; } disp30; - struct { jit_uint32_t _: 3; jit_uint32_t b: 4; } cond; - struct { jit_uint32_t _: 7; jit_uint32_t b: 3; } op2; - struct { jit_uint32_t _: 7; jit_uint32_t b: 6; } op3; - struct { jit_uint32_t _: 10; jit_uint32_t b: 1; } cc1; - struct { jit_uint32_t _: 10; jit_uint32_t b: 22; } imm22; - struct { jit_uint32_t _: 10; jit_uint32_t b: 22; } disp22; - struct { jit_uint32_t _: 11; jit_uint32_t b: 1; } cc0; - struct { jit_uint32_t _: 12; jit_uint32_t b: 1; } p; - struct { jit_uint32_t _: 13; jit_uint32_t b: 19; } disp19; - struct { jit_uint32_t _: 13; jit_uint32_t b: 5; } rs1; - struct { jit_uint32_t _: 18; jit_uint32_t b: 1; } i; - struct { jit_uint32_t _: 18; jit_uint32_t b: 9; } opf; - struct { jit_uint32_t _: 19; jit_uint32_t b: 1; } x; - struct { jit_uint32_t _: 19; jit_uint32_t b: 8; } asi; - struct { jit_uint32_t _: 19; jit_uint32_t b: 6; } res; - struct { jit_uint32_t _: 19; jit_uint32_t b: 13; } simm13; - struct { jit_uint32_t _: 20; jit_uint32_t b: 7; } asix; - struct { jit_uint32_t _: 20; jit_uint32_t b: 6; } asis; - struct { jit_uint32_t _: 26; jit_uint32_t b: 6; } shim; - struct { jit_uint32_t _: 25; jit_uint32_t b: 7; } imm7; - struct { jit_uint32_t _: 27; jit_uint32_t b: 5; } rs2; - jit_int32_t v; + struct { uint32_t b: 2; } op; + struct { uint32_t _: 2; uint32_t b: 1; } a; + struct { uint32_t _: 2; uint32_t b: 5; } rd; + struct { uint32_t _: 2; uint32_t b: 30; } disp30; + struct { uint32_t _: 3; uint32_t b: 4; } cond; + struct { uint32_t _: 7; uint32_t b: 3; } op2; + struct { uint32_t _: 7; uint32_t b: 6; } op3; + struct { uint32_t _: 10; uint32_t b: 1; } cc1; + struct { uint32_t _: 10; uint32_t b: 22; } imm22; + struct { uint32_t _: 10; uint32_t b: 22; } disp22; + struct { uint32_t _: 11; uint32_t b: 1; } cc0; + struct { uint32_t _: 12; uint32_t b: 1; } p; + struct { uint32_t _: 13; uint32_t b: 19; } disp19; + struct { uint32_t _: 13; uint32_t b: 5; } rs1; + struct { uint32_t _: 18; uint32_t b: 1; } i; + struct { uint32_t _: 18; uint32_t b: 9; } opf; + struct { uint32_t _: 19; uint32_t b: 1; } x; + struct { uint32_t _: 19; uint32_t b: 8; } asi; + struct { uint32_t _: 19; uint32_t b: 6; } res; + struct { uint32_t _: 19; uint32_t b: 13; } simm13; + struct { uint32_t _: 20; uint32_t b: 7; } asix; + struct { uint32_t _: 20; uint32_t b: 6; } asis; + struct { uint32_t _: 26; uint32_t b: 6; } shim; + struct { uint32_t _: 25; uint32_t b: 7; } imm7; + struct { uint32_t _: 27; uint32_t b: 5; } rs2; + int32_t v; } jit_instr_t; # define ii(i) *_jit->pc.ui++ = i # define s7_p(imm) ((imm) <= 63 && (imm) >= -64) @@ -83,39 +83,39 @@ typedef union { # define s22_p(imm) ((imm) <= 2097151 && (imm) >= -20971512) # define s30_p(imm) ((imm) <= 536870911 && (imm) >= -536870912) # define f1(op, disp30) _f1(_jit, op, disp30) -static void _f1(jit_state_t*,jit_int32_t,jit_int32_t); +static void _f1(jit_state_t*,int32_t,int32_t); # define f2r(op, rd, op2, imm22) _f2r(_jit, op, rd, op2, imm22) -static void _f2r(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _f2r(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define f2b(op, a, cond, op2, disp22) _f2b(_jit, op, a, cond, op2, disp22) static void -_f2b(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +_f2b(jit_state_t*,int32_t,int32_t,int32_t,int32_t,int32_t); # if __WORDSIZE == 64 # define f2bp(op,a,cond,op2,cc1,cc0,p,disp19) \ _f2bp(_jit,op,a,cond,op2,cc1,cc0,p,disp19) static void -_f2bp(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t); +_f2bp(jit_state_t*,int32_t,int32_t,int32_t,int32_t,int32_t, + int32_t,int32_t,int32_t); # endif # define f3r(op, rd, op3, rs1, rs2) _f3r(_jit, op, rd, op3, rs1, rs2) static void _f3r(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t,int32_t); # if __WORDSIZE == 64 # define f3rx(op, rd, op3, rs1, rs2) _f3rx(_jit, op, rd, op3, rs1, rs2) static void _f3rx(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t,int32_t); # endif # define f3i(op, rd, op3, rs1, simm13) _f3i(_jit, op, rd, op3, rs1, simm13) static void _f3i(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t,int32_t); # define f3s(op, rd, op3, rs1, simm13) _f3s(_jit, op, rd, op3, rs1, simm13) static void _f3s(jit_state_t*, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); + int32_t,int32_t,int32_t,int32_t,int32_t); # define f3t(cond, rs1, i, ri) _f3t(_jit, cond, rs1, i, ri) -static void _f3t(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) +static void _f3t(jit_state_t*,int32_t,int32_t,int32_t,int32_t) maybe_unused; # define f3a(op, rd, op3, rs1, rs2) _f3a(_jit, op, rd, op3, rs1, asi, rs2) -static void _f3a(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) +static void _f3a(jit_state_t*,int32_t, + int32_t,int32_t,int32_t,int32_t,int32_t) maybe_unused; # define LDSB(rs1, rs2, rd) f3r(3, rd, 9, rs1, rs2) # define LDSBI(rs1, imm, rd) f3i(3, rd, 9, rs1, imm) @@ -538,122 +538,122 @@ static void _f3a(jit_state_t*,jit_int32_t, # define FLUSH(rs1, rs2) f3r(2, 0, 59, rs1, rs2) # define FLUSHI(rs1, im) f3i(2, 0, 59, rs1, imm) # define nop(i0) _nop(_jit, i0) -static void _nop(jit_state_t*, jit_int32_t); +static void _nop(jit_state_t*, int32_t); # define movr(r0, r1) _movr(_jit, r0, r1) -static void _movr(jit_state_t*, jit_int32_t, jit_int32_t); +static void _movr(jit_state_t*, int32_t, int32_t); # define movi(r0, i0) _movi(_jit, r0, i0) -static void _movi(jit_state_t*, jit_int32_t, jit_word_t); +static void _movi(jit_state_t*, int32_t, jit_word_t); # define movi_p(r0, i0) _movi_p(_jit, r0, i0) -static jit_word_t _movi_p(jit_state_t*, jit_int32_t, jit_word_t); +static jit_word_t _movi_p(jit_state_t*, int32_t, jit_word_t); # define comr(r0, r1) XNOR(r1, 0, r0) # define negr(r0, r1) NEG(r1, r0) # define addr(r0, r1, r2) ADD(r1, r2, r0) # define addi(r0, r1, i0) _addi(_jit, r0, r1, i0) -static void _addi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _addi(jit_state_t*, int32_t, int32_t, jit_word_t); # if __WORDSIZE == 32 # define addcr(r0, r1, r2) ADDcc(r1, r2, r0) # else # define addcr(r0, r1, r2) _addcr(_jit, r0, r1, r2) -static void _addcr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _addcr(jit_state_t*, int32_t, int32_t, int32_t); # endif # define addci(r0, r1, i0) _addci(_jit, r0, r1, i0) -static void _addci(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _addci(jit_state_t*, int32_t, int32_t, jit_word_t); # if __WORDSIZE == 32 # define addxr(r0, r1, r2) ADDXcc(r1, r2, r0) # else # define addxr(r0, r1, r2) _addxr(_jit, r0, r1, r2) -static void _addxr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _addxr(jit_state_t*, int32_t, int32_t, int32_t); # endif # define addxi(r0, r1, i0) _addxi(_jit, r0, r1, i0) -static void _addxi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _addxi(jit_state_t*, int32_t, int32_t, jit_word_t); # define subr(r0, r1, r2) SUB(r1, r2, r0) # define subi(r0, r1, i0) _subi(_jit, r0, r1, i0) -static void _subi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _subi(jit_state_t*, int32_t, int32_t, jit_word_t); # if __WORDSIZE == 32 # define subcr(r0, r1, r2) SUBcc(r1, r2, r0) # else # define subcr(r0, r1, r2) _subcr(_jit, r0, r1, r2) -static void _subcr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _subcr(jit_state_t*, int32_t, int32_t, int32_t); # endif # define subci(r0, r1, i0) _subci(_jit, r0, r1, i0) -static void _subci(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _subci(jit_state_t*, int32_t, int32_t, jit_word_t); # if __WORDSIZE == 32 # define subxr(r0, r1, r2) SUBXcc(r1, r2, r0) # else # define subxr(r0, r1, r2) _subxr(_jit, r0, r1, r2) -static void _subxr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _subxr(jit_state_t*, int32_t, int32_t, int32_t); # endif # define subxi(r0, r1, i0) _subxi(_jit, r0, r1, i0) -static void _subxi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _subxi(jit_state_t*, int32_t, int32_t, jit_word_t); # define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define mulr(r0, r1, r2) UMUL(r1, r2, r0) # else # define mulr(r0, r1, r2) MULX(r1, r2, r0) # endif # define muli(r0, r1, i0) _muli(_jit, r0, r1, i0) -static void _muli(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _muli(jit_state_t*, int32_t, int32_t, jit_word_t); # if __WORDSIZE == 32 # define qmulr(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,1) # define qmulr_u(r0,r1,r2,r3) iqmulr(r0,r1,r2,r3,0) # define iqmulr(r0,r1,r2,r3,cc) _iqmulr(_jit,r0,r1,r2,r3,cc) -static void _iqmulr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqmulr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qmuli(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,1) # define qmuli_u(r0,r1,r2,i0) iqmuli(r0,r1,r2,i0,0) # define iqmuli(r0,r1,r2,i0,cc) _iqmuli(_jit,r0,r1,r2,i0,cc) -static void _iqmuli(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqmuli(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # else # define qmulr(r0,r1,r2,r3) _qmulr(_jit,r0,r1,r2,r3) -static void _qmulr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t); +static void _qmulr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t); # define qmuli(r0,r1,r2,i0) _qmuli(_jit,r0,r1,r2,i0) -static void _qmuli(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t); +static void _qmuli(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t); # define qmulr_u(r0,r1,r2,r3) _qmulr_u(_jit,r0,r1,r2,r3) -static void _qmulr_u(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t); +static void _qmulr_u(jit_state_t*,int32_t,int32_t, + int32_t,int32_t); # define qmuli_u(r0,r1,r2,i0) _qmuli_u(_jit,r0,r1,r2,i0) -static void _qmuli_u(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t); +static void _qmuli_u(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t); # endif # define divr(r0, r1, r2) _divr(_jit, r0, r1, r2) -static void _divr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _divr(jit_state_t*, int32_t, int32_t, int32_t); # define divi(r0, r1, i0) _divi(_jit, r0, r1, i0) -static void _divi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _divi(jit_state_t*, int32_t, int32_t, jit_word_t); # define divr_u(r0, r1, r2) _divr_u(_jit, r0, r1, r2) -static void _divr_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _divr_u(jit_state_t*, int32_t, int32_t, int32_t); # define divi_u(r0, r1, i0) _divi_u(_jit, r0, r1, i0) -static void _divi_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _divi_u(jit_state_t*, int32_t, int32_t, jit_word_t); # define qdivr(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,1) # define qdivr_u(r0,r1,r2,r3) iqdivr(r0,r1,r2,r3,0) # define iqdivr(r0,r1,r2,r3,cc) _iqdivr(_jit,r0,r1,r2,r3,cc) -static void _iqdivr(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_int32_t,jit_bool_t); +static void _iqdivr(jit_state_t*,int32_t,int32_t, + int32_t,int32_t,jit_bool_t); # define qdivi(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,1) # define qdivi_u(r0,r1,r2,i0) iqdivi(r0,r1,r2,i0,0) # define iqdivi(r0,r1,r2,i0,cc) _iqdivi(_jit,r0,r1,r2,i0,cc) -static void _iqdivi(jit_state_t*,jit_int32_t,jit_int32_t, - jit_int32_t,jit_word_t,jit_bool_t); +static void _iqdivi(jit_state_t*,int32_t,int32_t, + int32_t,jit_word_t,jit_bool_t); # define remr(r0, r1, r2) _remr(_jit, r0, r1, r2) -static void _remr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _remr(jit_state_t*, int32_t, int32_t, int32_t); # define remi(r0, r1, i0) _remi(_jit, r0, r1, i0) -static void _remi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _remi(jit_state_t*, int32_t, int32_t, jit_word_t); # define remr_u(r0, r1, r2) _remr_u(_jit, r0, r1, r2) -static void _remr_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _remr_u(jit_state_t*, int32_t, int32_t, int32_t); # define remi_u(r0, r1, i0) _remi_u(_jit, r0, r1, i0) -static void _remi_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _remi_u(jit_state_t*, int32_t, int32_t, jit_word_t); # define andr(r0, r1, r2) AND(r1, r2, r0) # define andi(r0, r1, i0) _andi(_jit, r0, r1, i0) -static void _andi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _andi(jit_state_t*, int32_t, int32_t, jit_word_t); # define orr(r0, r1, r2) OR(r1, r2, r0) # define ori(r0, r1, i0) _ori(_jit, r0, r1, i0) -static void _ori(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _ori(jit_state_t*, int32_t, int32_t, jit_word_t); # define xorr(r0, r1, r2) XOR(r1, r2, r0) # define xori(r0, r1, i0) _xori(_jit, r0, r1, i0) -static void _xori(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _xori(jit_state_t*, int32_t, int32_t, jit_word_t); # if __WORDSIZE == 32 # define lshr(r0, r1, r2) SLL(r1, r2, r0) # define lshi(r0, r1, i0) SLLI(r1, i0, r0) @@ -669,28 +669,28 @@ static void _xori(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); # define rshr_u(r0, r1, r2) SRLX(r1, r2, r0) # define rshi_u(r0, r1, i0) SRLXI(r1, i0, r0) # endif -# define htonr_us(r0,r1) extr_us(r0,r1) +# define bswapr_us(r0,r1) extr_us(r0,r1) # define extr_c(r0,r1) _extr_c(_jit,r0,r1) -static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_c(jit_state_t*,int32_t,int32_t); # define extr_uc(r0,r1) andi(r0, r1, 0xff) # define extr_s(r0,r1) _extr_s(_jit,r0,r1) -static void _extr_s(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_s(jit_state_t*,int32_t,int32_t); # define extr_us(r0,r1) _extr_us(_jit,r0,r1) -static void _extr_us(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_us(jit_state_t*,int32_t,int32_t); # if __WORDSIZE == 32 -# define htonr_ui(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) movr(r0,r1) # else -# define htonr_ui(r0,r1) extr_ui(r0,r1) -# define htonr_ul(r0,r1) movr(r0,r1) +# define bswapr_ui(r0,r1) extr_ui(r0,r1) +# define bswapr_ul(r0,r1) movr(r0,r1) # define extr_i(r0,r1) _extr_i(_jit,r0,r1) -static void _extr_i(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_i(jit_state_t*,int32_t,int32_t); # define extr_ui(r0,r1) _extr_ui(_jit,r0,r1) -static void _extr_ui(jit_state_t*,jit_int32_t,jit_int32_t); +static void _extr_ui(jit_state_t*,int32_t,int32_t); # endif # define cr(cc, r0, r1, r2) _cr(_jit, cc, r0, r1, r2) -static void _cr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _cr(jit_state_t*,int32_t,int32_t,int32_t,int32_t); # define cw(cc, r0, r1, i0) _cw(_jit, cc, r0, r1, i0) -static void _cw(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); +static void _cw(jit_state_t*,int32_t,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ltr(r0, r1, r2) cr(SPARC_BL, r0, r1, r2) # define lti(r0, r1, i0) cw(SPARC_BL, r0, r1, i0) @@ -736,16 +736,16 @@ static void _cw(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); # endif # define ldr_c(r0, r1) LDSB(r1, 0, r0) # define ldi_c(r0, i0) _ldi_c(_jit, r0, i0) -static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_c(jit_state_t*,int32_t,jit_word_t); # define ldr_uc(r0, r1) LDUB(r1, 0, r0) # define ldi_uc(r0, i0) _ldi_uc(_jit, r0, i0) -static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_uc(jit_state_t*,int32_t,jit_word_t); # define ldr_s(r0, r1) LDSH(r1, 0, r0) # define ldi_s(r0, i0) _ldi_s(_jit, r0, i0) -static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_s(jit_state_t*,int32_t,jit_word_t); # define ldr_us(r0, r1) LDUH(r1, 0, r0) # define ldi_us(r0, i0) _ldi_us(_jit, r0, i0) -static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_us(jit_state_t*,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ldr_i(r0, r1) LD(r1, 0, r0) # define ldr(u, v) ldr_i(u, v) @@ -758,25 +758,25 @@ static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t); # define ldi(u, v) ldi_l(u, v) # endif # define ldi_i(r0, i0) _ldi_i(_jit, r0, i0) -static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_i(jit_state_t*,int32_t,jit_word_t); # if __WORDSIZE == 64 # define ldi_ui(r0, i0) _ldi_ui(_jit, r0, i0) -static void _ldi_ui(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_ui(jit_state_t*,int32_t,jit_word_t); # define ldi_l(r0, i0) _ldi_l(_jit, r0, i0) -static void _ldi_l(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_l(jit_state_t*,int32_t,jit_word_t); # endif # define ldxr_c(r0, r1, r2) LDSB(r1, r2, r0) # define ldxi_c(r0, r1, i0) _ldxi_c(_jit, r0, r1, i0) -static void _ldxi_c(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_uc(r0, r1, r2) LDUB(r1, r2, r0) # define ldxi_uc(r0, r1, i0) _ldxi_uc(_jit, r0, r1, i0) -static void _ldxi_uc(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_s(r0, r1, r2) LDSH(r1, r2, r0) # define ldxi_s(r0, r1, i0) _ldxi_s(_jit, r0, r1, i0) -static void _ldxi_s(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxr_us(r0, r1, r2) LDUH(r1, r2, r0) # define ldxi_us(r0, r1, i0) _ldxi_us(_jit, r0, r1, i0) -static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ldxr(u, v, w) ldxr_i(u, v, w) # define ldxr_i(r0, r1, r2) LD(r1, r2, r0) @@ -789,19 +789,19 @@ static void _ldxi_us(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); # define ldxi(u, v, w) ldxi_l(u, v, w) # endif # define ldxi_i(r0, r1, i0) _ldxi_i(_jit, r0, r1, i0) -static void _ldxi_i(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 64 # define ldxi_ui(r0, r1, i0) _ldxi_ui(_jit, r0, r1, i0) -static void _ldxi_ui(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t); # define ldxi_l(r0, r1, i0) _ldxi_l(_jit, r0, r1, i0) -static void _ldxi_l(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t); # endif # define str_c(r0, r1) STB(r1, r0, 0) # define sti_c(i0, r0) _sti_c(_jit, i0, r0) -static void _sti_c(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_c(jit_state_t*,jit_word_t,int32_t); # define str_s(r0, r1) STH(r1, r0, 0) # define sti_s(i0, r0) _sti_s(_jit, i0, r0) -static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_s(jit_state_t*,jit_word_t,int32_t); # if __WORDSIZE == 32 # define str(u, v) str_i(u, v) # define str_i(r0, r1) STI(r1, r0, 0) @@ -813,17 +813,17 @@ static void _sti_s(jit_state_t*,jit_word_t,jit_int32_t); # define sti(u, v) sti_l(u, v) # endif # define sti_i(i0, r0) _sti_i(_jit, i0, r0) -static void _sti_i(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_i(jit_state_t*,jit_word_t,int32_t); # if __WORDSIZE == 64 # define sti_l(i0, r0) _sti_l(_jit, i0, r0) -static void _sti_l(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_l(jit_state_t*,jit_word_t,int32_t); # endif # define stxr_c(r0, r1, r2) STB(r2, r1, r0) # define stxi_c(i0, r0, r1) _stxi_c(_jit, i0, r0, r1) -static void _stxi_c(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t); # define stxr_s(r0, r1, r2) STH(r2, r1, r0) # define stxi_s(i0, r0, r1) _stxi_s(_jit, i0, r0, r1) -static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t); # if __WORDSIZE == 32 # define stxr(u, v, w) stxr_i(u, v, w) # define stxr_i(r0, r1, r2) ST(r2, r1, r0) @@ -835,17 +835,17 @@ static void _stxi_s(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); # define stxr_l(r0, r1, r2) STX(r2, r1, r0) # endif # define stxi_i(i0, r0, r1) _stxi_i(_jit, i0, r0, r1) -static void _stxi_i(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t); # if __WORDSIZE == 64 # define stxi_l(i0, r0, r1) _stxi_l(_jit, i0, r0, r1) -static void _stxi_l(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t); # endif # define br(cc, i0, r0, r1) _br(_jit, cc, i0, r0, r1) static jit_word_t -_br(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_br(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define bw(cc, i0, r0, i1) _bw(_jit, cc, i0, r0, i1) static jit_word_t -_bw(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); +_bw(jit_state_t*,int32_t,jit_word_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define bltr(i0, r0, r1) br(SPARC_BL, i0, r0, r1) # define blti(i0, r0, i1) bw(SPARC_BL, i0, r0, i1) @@ -892,11 +892,11 @@ _bw(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); # define b_asr(jif,add,sgn,i0,r0,r1) _b_asr(_jit,jif,add,sgn,i0,r0,r1) static jit_word_t _b_asr(jit_state_t*,jit_bool_t,jit_bool_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_int32_t); + jit_word_t,int32_t,int32_t); # define b_asw(jif,add,sgn,i0,r0,i1) _b_asw(_jit,jif,add,sgn,i0,r0,i1) static jit_word_t _b_asw(jit_state_t*,jit_bool_t,jit_bool_t,jit_bool_t, - jit_word_t,jit_int32_t,jit_word_t); + jit_word_t,int32_t,jit_word_t); # define boaddr(i0, r0, r1) b_asr(1, 1, 1, i0, r0, r1) # define boaddi(i0, r0, i1) b_asw(1, 1, 1, i0, r0, i1) # define boaddr_u(i0, r0, r1) b_asr(1, 1, 0, i0, r0, r1) @@ -915,22 +915,22 @@ _b_asw(jit_state_t*,jit_bool_t,jit_bool_t,jit_bool_t, # define bxsubi_u(i0, r0, i1) b_asw(0, 0, 0, i0, r0, i1) # define bm_r(set, i0, r0, r1) _bm_r(_jit,set,i0,r0,r1) static jit_word_t -_bm_r(jit_state_t*,jit_bool_t,jit_word_t,jit_int32_t,jit_int32_t); +_bm_r(jit_state_t*,jit_bool_t,jit_word_t,int32_t,int32_t); # define bm_w(set,i0,r0,i1) _bm_w(_jit,set,i0,r0,i1) static jit_word_t -_bm_w(jit_state_t*,jit_bool_t,jit_word_t,jit_int32_t,jit_word_t); +_bm_w(jit_state_t*,jit_bool_t,jit_word_t,int32_t,jit_word_t); # define bmsr(i0, r0, r1) bm_r(1, i0, r0, r1) # define bmsi(i0, r0, i1) bm_w(1, i0, r0, i1) # define bmcr(i0, r0, r1) bm_r(0, i0, r0, r1) # define bmci(i0, r0, i1) bm_w(0, i0, r0, i1) # define jmpr(r0) _jmpr(_jit, r0) -static void _jmpr(jit_state_t*,jit_int32_t); +static void _jmpr(jit_state_t*,int32_t); # define jmpi(i0) _jmpi(_jit, i0) static void _jmpi(jit_state_t*,jit_word_t); # define jmpi_p(i0) _jmpi_p(_jit, i0) static jit_word_t _jmpi_p(jit_state_t*,jit_word_t); # define callr(r0) _callr(_jit, r0) -static void _callr(jit_state_t*,jit_int32_t); +static void _callr(jit_state_t*,int32_t); # define calli(i0) _calli(_jit, i0) static void _calli(jit_state_t*,jit_word_t); # define calli_p(i0) _calli_p(_jit, i0) @@ -940,9 +940,9 @@ static void _prolog(jit_state_t*,jit_node_t*); # define epilog(node) _epilog(_jit, node) static void _epilog(jit_state_t*,jit_node_t*); #define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); +static void _vastart(jit_state_t*, int32_t); #define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg(jit_state_t*, int32_t, int32_t); #define patch_at(jump, label) _patch_at(_jit, jump, label) static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #endif @@ -950,7 +950,7 @@ static void _patch_at(jit_state_t*,jit_word_t,jit_word_t); #if CODE static void _f2r(jit_state_t *_jit, - jit_int32_t op, jit_int32_t rd, jit_int32_t op2, jit_int32_t imm22) + int32_t op, int32_t rd, int32_t op2, int32_t imm22) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -966,8 +966,8 @@ _f2r(jit_state_t *_jit, static void _f2b(jit_state_t *_jit, - jit_int32_t op, jit_int32_t a, jit_int32_t cond, jit_int32_t op2, - jit_int32_t disp22) + int32_t op, int32_t a, int32_t cond, int32_t op2, + int32_t disp22) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -986,8 +986,8 @@ _f2b(jit_state_t *_jit, # if __WORDSIZE == 64 static void _f2bp(jit_state_t *_jit, - jit_int32_t op, jit_int32_t a, jit_int32_t cond, jit_int32_t op2, - jit_int32_t cc1, jit_int32_t cc0, jit_int32_t p, jit_int32_t disp19) + int32_t op, int32_t a, int32_t cond, int32_t op2, + int32_t cc1, int32_t cc0, int32_t p, int32_t disp19) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1008,8 +1008,8 @@ _f2bp(jit_state_t *_jit, # endif static void -_f3r(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, - jit_int32_t op3, jit_int32_t rs1, jit_int32_t rs2) +_f3r(jit_state_t *_jit, int32_t op, int32_t rd, + int32_t op3, int32_t rs1, int32_t rs2) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1029,8 +1029,8 @@ _f3r(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, # if __WORDSIZE == 64 static void -_f3rx(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, - jit_int32_t op3, jit_int32_t rs1, jit_int32_t rs2) +_f3rx(jit_state_t *_jit, int32_t op, int32_t rd, + int32_t op3, int32_t rs1, int32_t rs2) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1050,8 +1050,8 @@ _f3rx(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, } static void -_f3s(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, - jit_int32_t op3, jit_int32_t rs1, jit_int32_t shim) +_f3s(jit_state_t *_jit, int32_t op, int32_t rd, + int32_t op3, int32_t rs1, int32_t shim) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1072,8 +1072,8 @@ _f3s(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, # endif static void -_f3i(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, - jit_int32_t op3, jit_int32_t rs1, jit_int32_t simm13) +_f3i(jit_state_t *_jit, int32_t op, int32_t rd, + int32_t op3, int32_t rs1, int32_t simm13) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1091,8 +1091,8 @@ _f3i(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, } static void -_f3t(jit_state_t *_jit, jit_int32_t cond, - jit_int32_t rs1, jit_int32_t i, jit_int32_t rs2_imm7) +_f3t(jit_state_t *_jit, int32_t cond, + int32_t rs1, int32_t i, int32_t rs2_imm7) { jit_instr_t v; assert(!(cond & 0xfffffff0)); @@ -1116,8 +1116,8 @@ _f3t(jit_state_t *_jit, jit_int32_t cond, } static void -_f3a(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, - jit_int32_t op3, jit_int32_t rs1, jit_int32_t asi, jit_int32_t rs2) +_f3a(jit_state_t *_jit, int32_t op, int32_t rd, + int32_t op3, int32_t rs1, int32_t asi, int32_t rs2) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1137,7 +1137,7 @@ _f3a(jit_state_t *_jit, jit_int32_t op, jit_int32_t rd, } static void -_f1(jit_state_t *_jit, jit_int32_t op, jit_int32_t disp30) +_f1(jit_state_t *_jit, int32_t op, int32_t disp30) { jit_instr_t v; assert(!(op & 0xfffffffc)); @@ -1148,7 +1148,7 @@ _f1(jit_state_t *_jit, jit_int32_t op, jit_int32_t disp30) } static void -_nop(jit_state_t *_jit, jit_int32_t i0) +_nop(jit_state_t *_jit, int32_t i0) { for (; i0 > 0; i0 -= 4) NOP(); @@ -1156,21 +1156,21 @@ _nop(jit_state_t *_jit, jit_int32_t i0) } static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) ORI(r1, 0, r0); } static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) { if (s13_p(i0)) ORI(0, i0, r0); else { # if __WORDSIZE == 64 if (i0 & 0xffffffff00000000) { - jit_int32_t reg = jit_get_reg(jit_class_gpr); + int32_t reg = jit_get_reg(jit_class_gpr); movi(rn(reg), (i0 >> 32) & 0xffffffff); movi(r0, i0 & 0xffffffff); lshi(rn(reg), rn(reg), 32); @@ -1189,11 +1189,11 @@ _movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0) { jit_word_t w; # if __WORDSIZE == 64 - jit_int32_t reg; + int32_t reg; # endif w = _jit->pc.w; # if __WORDSIZE == 64 @@ -1214,9 +1214,9 @@ _movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) ADDI(r1, i0, r0); else { @@ -1229,9 +1229,9 @@ _addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 64 static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -1249,10 +1249,10 @@ _addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) # endif static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { # if __WORDSIZE == 32 - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) ADDIcc(r1, i0, r0); else { @@ -1262,7 +1262,7 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) jit_unget_reg(reg); } # else - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -1281,9 +1281,9 @@ _addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 64 static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -1294,10 +1294,10 @@ _addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) # endif static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { # if __WORDSIZE == 32 - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) ADDXIcc(r1, i0, r0); else { @@ -1307,7 +1307,7 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) jit_unget_reg(reg); } # else - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -1318,9 +1318,9 @@ _addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) SUBI(r1, i0, r0); else { @@ -1333,9 +1333,9 @@ _subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 64 static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -1353,10 +1353,10 @@ _subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) # endif static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { # if __WORDSIZE == 32 - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) SUBIcc(r1, i0, r0); else { @@ -1366,7 +1366,7 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) jit_unget_reg(reg); } # else - jit_int32_t reg; + int32_t reg; if (jit_carry == _NOREG) jit_carry = jit_get_reg(jit_class_gpr); if (r0 == r1) { @@ -1385,9 +1385,9 @@ _subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 64 static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -1398,10 +1398,10 @@ _subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) #endif static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { # if __WORDSIZE == 32 - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) SUBXIcc(r1, i0, r0); else { @@ -1411,7 +1411,7 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) jit_unget_reg(reg); } # else - jit_int32_t reg; + int32_t reg; assert(jit_carry != _NOREG); reg = jit_get_reg(jit_class_gpr); movr(rn(reg), rn(jit_carry)); @@ -1422,16 +1422,16 @@ _subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { subi(r0, r1, i0); negr(r0, r0); } static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 32 UMULI(r1, i0, r0); @@ -1449,8 +1449,8 @@ _muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 32 static void -_iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { if (sign) SMUL(r2, r3, r0); @@ -1460,10 +1460,10 @@ _iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { if (sign) SMULI(r2, i0, r0); @@ -1510,8 +1510,8 @@ static __int128_t __llmul(jit_word_t a, jit_word_t b) } while (0) static void -_qmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3) +_qmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3) { QMUL_PROLOG(); movr(_O0_REGNO, r3); @@ -1523,8 +1523,8 @@ _qmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_qmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0) +_qmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0) { QMUL_PROLOG(); movi(_O0_REGNO, i0); @@ -1541,8 +1541,8 @@ static __uint128_t __ullmul(jit_uword_t a, jit_uword_t b) } static void -_qmulr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3) +_qmulr_u(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3) { QMUL_PROLOG(); movr(_O0_REGNO, r3); @@ -1554,8 +1554,8 @@ _qmulr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_qmuli_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0) +_qmuli_u(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0) { QMUL_PROLOG(); movi(_O0_REGNO, i0); @@ -1568,10 +1568,10 @@ _qmuli_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, # endif static void -_divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { # if __WORDSIZE == 32 - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); rshi(rn(reg), r1, 31); WRY(rn(reg), 0); @@ -1583,9 +1583,9 @@ _divr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 32 reg = jit_get_reg(jit_class_gpr); # endif @@ -1614,7 +1614,7 @@ _divi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { # if __WORDSIZE == 32 WRYI(0, 0); @@ -1625,9 +1625,9 @@ _divr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 32 WRYI(0, 0); @@ -1645,11 +1645,11 @@ _divi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) +_iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) { - jit_int32_t sv0, rg0; - jit_int32_t sv1, rg1; + int32_t sv0, rg0; + int32_t sv1, rg1; if (r0 == r2 || r0 == r3) { sv0 = jit_get_reg(jit_class_gpr); @@ -1681,10 +1681,10 @@ _iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) +_iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); iqdivr(r0, r1, r2, rn(reg), sign); @@ -1692,9 +1692,9 @@ _iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, } static void -_remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); divr(rn(reg), r1, r2); @@ -1710,9 +1710,9 @@ _remr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr(r0, r1, rn(reg)); @@ -1720,9 +1720,9 @@ _remi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (r0 == r1 || r0 == r2) { reg = jit_get_reg(jit_class_gpr); divr_u(rn(reg), r1, r2); @@ -1738,9 +1738,9 @@ _remr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); remr_u(r0, r1, rn(reg)); @@ -1748,9 +1748,9 @@ _remi_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) ANDI(r1, i0, r0); else { @@ -1762,9 +1762,9 @@ _andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) ORI(r1, i0, r0); else { @@ -1776,9 +1776,9 @@ _ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) XORI(r1, i0, r0); else { @@ -1790,21 +1790,21 @@ _xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_c(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, __WORDSIZE - 8); rshi(r0, r0, __WORDSIZE - 8); } static void -_extr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_s(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, __WORDSIZE - 16); rshi(r0, r0, __WORDSIZE - 16); } static void -_extr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_us(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, __WORDSIZE - 16); rshi_u(r0, r0, __WORDSIZE - 16); @@ -1812,14 +1812,14 @@ _extr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) #if __WORDSIZE == 64 static void -_extr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_i(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, __WORDSIZE - 32); rshi(r0, r0, __WORDSIZE - 32); } static void -_extr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) { lshi(r0, r1, __WORDSIZE - 32); rshi_u(r0, r0, __WORDSIZE - 32); @@ -1827,8 +1827,8 @@ _extr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) #endif static void -_cr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_cr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { CMP(r1, r2); # if __WORDSIZE == 32 @@ -1841,10 +1841,10 @@ _cr(jit_state_t *_jit, jit_int32_t cc, } static void -_cw(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_cw(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { CMPI(r1, i0); # if __WORDSIZE == 32 @@ -1864,9 +1864,9 @@ _cw(jit_state_t *_jit, jit_int32_t cc, } static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDSBI(0, i0, r0); else { @@ -1878,9 +1878,9 @@ _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDUBI(0, i0, r0); else { @@ -1892,9 +1892,9 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDSHI(0, i0, r0); else { @@ -1906,9 +1906,9 @@ _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDUHI(0, i0, r0); else { @@ -1920,9 +1920,9 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 32 LDI(0, i0, r0); @@ -1940,9 +1940,9 @@ _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) # if __WORDSIZE == 64 static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDUWI(0, i0, r0); else { @@ -1954,9 +1954,9 @@ _ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDXI(0, i0, r0); else { @@ -1969,9 +1969,9 @@ _ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) # endif static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDSBI(r1, i0, r0); else { @@ -1983,9 +1983,9 @@ _ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDUBI(r1, i0, r0); else { @@ -1997,9 +1997,9 @@ _ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDSHI(r1, i0, r0); else { @@ -2011,9 +2011,9 @@ _ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDUHI(r1, i0, r0); else { @@ -2025,9 +2025,9 @@ _ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 32 LDI(r1, i0, r0); @@ -2045,9 +2045,9 @@ _ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 64 static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDUWI(r1, i0, r0); else { @@ -2059,9 +2059,9 @@ _ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDXI(r1, i0, r0); else { @@ -2074,9 +2074,9 @@ _ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # endif static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STBI(r0, 0, i0); else { @@ -2088,9 +2088,9 @@ _sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STHI(r0, 0, i0); else { @@ -2102,9 +2102,9 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 32 STI(r0, 0, i0); @@ -2122,9 +2122,9 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) # if __WORDSIZE == 64 static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STXI(r0, 0, i0); else { @@ -2137,9 +2137,9 @@ _sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) # endif static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STBI(r1, r0, i0); else { @@ -2151,9 +2151,9 @@ _stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STHI(r1, r0, i0); else { @@ -2165,9 +2165,9 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 32 STI(r1, r0, i0); @@ -2185,9 +2185,9 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STXI(r1, r0, i0); else { @@ -2200,8 +2200,8 @@ _stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) # endif static jit_word_t -_br(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_br(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; CMP(r0, r1); @@ -2216,11 +2216,11 @@ _br(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_bw(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) +_bw(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (s13_p(i1)) { CMPI(r0, i1); w = _jit->pc.w; @@ -2242,7 +2242,7 @@ _bw(jit_state_t *_jit, jit_int32_t cc, static jit_word_t _b_asr(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; if (add) @@ -2267,10 +2267,10 @@ _b_asr(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn, static jit_word_t _b_asw(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (s13_p(i1)) { if (add) ADDIcc(r0, i1, r0); @@ -2301,7 +2301,7 @@ _b_asw(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn, static jit_word_t _bm_r(jit_state_t *_jit, jit_bool_t set, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; BTST(r0, r1); @@ -2317,10 +2317,10 @@ _bm_r(jit_state_t *_jit, jit_bool_t set, static jit_word_t _bm_w(jit_state_t *_jit, jit_bool_t set, - jit_word_t i0, jit_int32_t r0, jit_word_t i1) + jit_word_t i0, int32_t r0, jit_word_t i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; if (s13_p(i1)) { BTSTI(r0, i1); w = _jit->pc.w; @@ -2341,7 +2341,7 @@ _bm_w(jit_state_t *_jit, jit_bool_t set, } static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) +_jmpr(jit_state_t *_jit, int32_t r0) { JMPL(0, r0, 0); NOP(); @@ -2351,7 +2351,7 @@ static void _jmpi(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; w = (i0 - _jit->pc.w) >> 2; if (s22_p(w)) { BA(w); @@ -2369,7 +2369,7 @@ static jit_word_t _jmpi_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr|jit_class_nospill); w = movi_p(rn(reg), i0); jmpr(rn(reg)); @@ -2378,7 +2378,7 @@ _jmpi_p(jit_state_t *_jit, jit_word_t i0) } static void -_callr(jit_state_t *_jit, jit_int32_t r0) +_callr(jit_state_t *_jit, int32_t r0) { CALL(r0); NOP(); @@ -2397,7 +2397,7 @@ static jit_word_t _calli_p(jit_state_t *_jit, jit_word_t i0) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); w = movi_p(rn(reg), i0); callr(rn(reg)); @@ -2409,9 +2409,9 @@ _calli_p(jit_state_t *_jit, jit_word_t i0) static void _prolog(jit_state_t *_jit, jit_node_t *node) { - jit_int32_t reg; + int32_t reg; if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; + int32_t frame = -_jitc->function->frame; assert(_jitc->function->self.aoff >= frame); if (_jitc->function->assume_frame) return; @@ -2488,7 +2488,7 @@ _epilog(jit_state_t *_jit, jit_node_t *node) } static void -_vastart(jit_state_t *_jit, jit_int32_t r0) +_vastart(jit_state_t *_jit, int32_t r0) { /* Initialize stack pointer to the first stack argument. */ if (jit_arg_reg_p(_jitc->function->vagp)) @@ -2500,7 +2500,7 @@ _vastart(jit_state_t *_jit, jit_int32_t r0) } static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); @@ -2516,7 +2516,7 @@ _patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label) { jit_instr_t i; union { - jit_int32_t *i; + int32_t *i; jit_word_t w; } u; diff --git a/libguile/lightning/lib/jit_sparc-fpu.c b/libguile/lightning/jit/sparc-fpu.c index c56b211e9..3305b4deb 100644 --- a/libguile/lightning/lib/jit_sparc-fpu.c +++ b/libguile/lightning/jit/sparc-fpu.c @@ -92,7 +92,7 @@ # define FPop2(rd, rs1, opf, rs2) f3f(rd, 53, rs1, opf, rs2) # define f3f(rd, op3, rs1, opf, rs2) _f3f(_jit, rd, op3, rs1, opf, rs2) static void -_f3f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, jit_int32_t,jit_int32_t); +_f3f(jit_state_t*,int32_t,int32_t,int32_t, int32_t,int32_t); # define FITOS(rs2, rd) FPop1(rd, 0, 196, rs2) # define FITOD(rs2, rd) FPop1(rd, 0, 200, rs2) # define FITOQ(rs2, rd) FPop1(rd, 0, 204, rs2) @@ -168,7 +168,7 @@ _f3f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, jit_int32_t,jit_int32_t); # define CPop1(rd, rs1, opc, rs2) f3f(rd, 54, rs1, opf, rs2) # define CPop2(rd, rs1, opc, rs2) f3f(rd, 55, rs1, opf, rs2) # define extr_f(r0, r1) _extr_f(_jit, r0, r1) -static void _extr_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _extr_f(jit_state_t*, int32_t, int32_t); # if __WORDSIZSE == 32 # define truncr_f(r0, r1) truncr_f_i(r0, r1) # define truncr_d(r0, r1) truncr_d_i(r0, r1) @@ -177,60 +177,60 @@ static void _extr_f(jit_state_t*, jit_int32_t, jit_int32_t); # define truncr_d(r0, r1) truncr_d_l(r0, r1) # endif # define truncr_f_i(r0, r1) _truncr_f_i(_jit, r0, r1) -static void _truncr_f_i(jit_state_t*, jit_int32_t, jit_int32_t); +static void _truncr_f_i(jit_state_t*, int32_t, int32_t); # if __WORDSIZE == 64 # define truncr_f_l(r0, r1) _truncr_f_l(_jit, r0, r1) -static void _truncr_f_l(jit_state_t*, jit_int32_t, jit_int32_t); +static void _truncr_f_l(jit_state_t*, int32_t, int32_t); # endif # if __WORDSIZE == 32 # define extr_d_f(r0, r1) FDTOS(r1, r0) # else # define extr_d_f(r0, r1) _extr_d_f(_jit, r0, r1) -static void _extr_d_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _extr_d_f(jit_state_t*, int32_t, int32_t); # endif # define movi_f(r0, i0) _movi_f(_jit, r0, i0) # if __WORDSIZE == 32 # define movr_f(r0, r1) FMOVS(r1, r0) # else # define movr_f(r0, r1) _movr_f(_jit, r0, r1) -static void _movr_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _movr_f(jit_state_t*, int32_t, int32_t); # endif -static void _movi_f(jit_state_t*, jit_int32_t, jit_float32_t*); +static void _movi_f(jit_state_t*, int32_t, jit_float32_t*); # if __WORDSIZE == 32 # define negr_f(r0, r1) FNEGS(r1, r0) # define absr_f(r0, r1) FABSS(r1, r0) # define sqrtr_f(r0, r1) FSQRTS(r1, r0) # else # define negr_f(r0, r1) _negr_f(_jit, r0, r1) -static void _negr_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _negr_f(jit_state_t*, int32_t, int32_t); # define absr_f(r0, r1) _absr_f(_jit, r0, r1) -static void _absr_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _absr_f(jit_state_t*, int32_t, int32_t); # define sqrtr_f(r0, r1) _sqrtr_f(_jit, r0, r1) -static void _sqrtr_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _sqrtr_f(jit_state_t*, int32_t, int32_t); # endif # define extr_d(r0, r1) _extr_d(_jit, r0, r1) -static void _extr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _extr_d(jit_state_t*, int32_t, int32_t); # define truncr_d_i(r0, r1) _truncr_d_i(_jit, r0, r1) -static void _truncr_d_i(jit_state_t*, jit_int32_t, jit_int32_t); +static void _truncr_d_i(jit_state_t*, int32_t, int32_t); # if __WORDSIZE == 64 # define truncr_d_l(r0, r1) _truncr_d_l(_jit, r0, r1) -static void _truncr_d_l(jit_state_t*, jit_int32_t, jit_int32_t); +static void _truncr_d_l(jit_state_t*, int32_t, int32_t); # endif # if __WORDSIZE == 32 # define extr_f_d(r0, r1) FSTOD(r1, r0) # else # define extr_f_d(r0, r1) _extr_f_d(_jit, r0, r1) -static void _extr_f_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _extr_f_d(jit_state_t*, int32_t, int32_t); # endif # define movi_d(r0, i0) _movi_d(_jit, r0, i0) -static void _movi_d(jit_state_t*, jit_int32_t, jit_float64_t*); +static void _movi_d(jit_state_t*, int32_t, jit_float64_t*); # if __WORDSIZE == 32 # define movr_d(r0, r1) _movr_d(_jit, r0, r1) -static void _movr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _movr_d(jit_state_t*, int32_t, int32_t); # define negr_d(r0, r1) _negr_d(_jit, r0, r1) -static void _negr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _negr_d(jit_state_t*, int32_t, int32_t); # define absr_d(r0, r1) _absr_d(_jit, r0, r1) -static void _absr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _absr_d(jit_state_t*, int32_t, int32_t); # else # define movr_d(r0, r1) FMOVD(r1, r0) # define negr_d(r0, r1) FNEGD(r1, r0) @@ -238,17 +238,17 @@ static void _absr_d(jit_state_t*, jit_int32_t, jit_int32_t); # endif # define sqrtr_d(r0, r1) FSQRTD(r1, r0) # define fop1f(op, r0, r1, i0) _fop1f(_jit, op, r0, r1, i0) -static void _fop1f(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_float32_t*); +static void _fop1f(jit_state_t*,int32_t, + int32_t,int32_t,jit_float32_t*); # define rfop1f(op, r0, r1, i0) _rfop1f(_jit, op, r0, r1, i0) -static void _rfop1f(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_float32_t*); +static void _rfop1f(jit_state_t*,int32_t, + int32_t,int32_t,jit_float32_t*); # define fop1d(op, r0, r1, i0) _fop1d(_jit, op, r0, r1, i0) -static void _fop1d(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_float64_t*); +static void _fop1d(jit_state_t*,int32_t, + int32_t,int32_t,jit_float64_t*); # define rfop1d(op, r0, r1, i0) _rfop1d(_jit, op, r0, r1, i0) -static void _rfop1d(jit_state_t*,jit_int32_t, - jit_int32_t,jit_int32_t,jit_float64_t*); +static void _rfop1d(jit_state_t*,int32_t, + int32_t,int32_t,jit_float64_t*); # if __WORDSIZE == 32 # define addr_f(r0, r1, r2) FADDS(r1, r2, r0) # define subr_f(r0, r1, r2) FSUBS(r1, r2, r0) @@ -256,8 +256,8 @@ static void _rfop1d(jit_state_t*,jit_int32_t, # define divr_f(r0, r1, r2) FDIVS(r1, r2, r0) # else # define fop2f(op, r0, r1, r2) _fop2f(_jit, op, r0, r1, r2) -static void _fop2f(jit_state_t*, jit_int32_t, - jit_int32_t, jit_int32_t, jit_int32_t); +static void _fop2f(jit_state_t*, int32_t, + int32_t, int32_t, int32_t); # define addr_f(r0, r1, r2) fop2f(SPARC_FADDS, r0, r1, r2) # define subr_f(r0, r1, r2) fop2f(SPARC_FSUBS, r0, r1, r2) # define mulr_f(r0, r1, r2) fop2f(SPARC_FMULS, r0, r1, r2) @@ -282,10 +282,10 @@ static void _fop2f(jit_state_t*, jit_int32_t, # define divr_d(r0, r1, r2) FDIVD(r1, r2, r0) # define divi_d(r0, r1, i0) fop1d(SPARC_FDIVD, r0, r1, i0) #define fcr(cc, r0, r1, r2) _fcr(_jit, cc, r0, r1, r2) -static void _fcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _fcr(jit_state_t*,int32_t,int32_t,int32_t,int32_t); #define fcw(cc, r0, r1, i0) _fcw(_jit, cc, r0, r1, i0) static void -_fcw(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_float32_t*); +_fcw(jit_state_t*,int32_t,int32_t,int32_t,jit_float32_t*); # define ltr_f(r0, r1, r2) fcr(SPARC_FBL, r0, r1, r2) # define lti_f(r0, r1, i0) fcw(SPARC_FBL, r0, r1, i0) # define ler_f(r0, r1, r2) fcr(SPARC_FBLE, r0, r1, r2) @@ -315,10 +315,10 @@ _fcw(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_float32_t*); # define unordr_f(r0, r1, r2) fcr(SPARC_FBU, r0, r1, r2) # define unordi_f(r0, r1, i0) fcw(SPARC_FBU, r0, r1, i0) #define dcr(cc, r0, r1, r2) _dcr(_jit, cc, r0, r1, r2) -static void _dcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); +static void _dcr(jit_state_t*,int32_t,int32_t,int32_t,int32_t); #define dcw(cc, r0, r1, i0) _dcw(_jit, cc, r0, r1, i0) static void -_dcw(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_float64_t*); +_dcw(jit_state_t*,int32_t,int32_t,int32_t,jit_float64_t*); # define ltr_d(r0, r1, r2) dcr(SPARC_FBL, r0, r1, r2) # define lti_d(r0, r1, i0) dcw(SPARC_FBL, r0, r1, i0) # define ler_d(r0, r1, r2) dcr(SPARC_FBLE, r0, r1, r2) @@ -351,52 +351,52 @@ _dcw(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_float64_t*); # define ldr_f(r0, r1) LDF(r1, 0, r0) # else # define ldr_f(r0, r1) _ldr_f(_jit, r0, r1) -static void _ldr_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _ldr_f(jit_state_t*,int32_t,int32_t); # endif # define ldi_f(r0, i0) _ldi_f(_jit, r0, i0) -static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_f(jit_state_t*,int32_t,jit_word_t); # if __WORDSIZE == 32 # define ldxr_f(r0, r1, r2) LDF(r1, r2, r0) # else # define ldxr_f(r0, r1, r2) _ldxr_f(_jit, r0, r1, r2) -static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t); # endif # define ldxi_f(r0, r1, i0) _ldxi_f(_jit, r0, r1, i0) -static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); +static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t); # if __WORDSIZE == 32 # define str_f(r0, r1) STF(r1, r0, 0) # else # define str_f(r0, r1) _str_f(_jit, r0, r1) -static void _str_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _str_f(jit_state_t*,int32_t,int32_t); # endif # define sti_f(r0, i0) _sti_f(_jit, r0, i0) -static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_f(jit_state_t*,jit_word_t,int32_t); # if __WORDSIZE == 32 # define stxr_f(r0, r1, r2) STF(r2, r1, r0) # else # define stxr_f(r0, r1, r2) _stxr_f(_jit, r0, r1, r2) -static void _stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # endif # define stxi_f(r0, r1, i0) _stxi_f(_jit, r0, r1, i0) -static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define ldr_d(r0, r1) LDDF(r1, 0, r0) # define ldi_d(r0, i0) _ldi_d(_jit, r0, i0) -static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t); +static void _ldi_d(jit_state_t*,int32_t,jit_word_t); # define ldxr_d(r0, r1, r2) LDDF(r1, r2, r0) # define ldxi_d(r0, r1, i0) _ldxi_d(_jit, r0, r1, i0) -static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _ldxi_d(jit_state_t*,int32_t,int32_t,int32_t); # define str_d(r0, r1) STDF(r1, r0, 0) # define sti_d(r0, i0) _sti_d(_jit, r0, i0) -static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _sti_d(jit_state_t*,jit_word_t,int32_t); # define stxr_d(r0, r1, r2) STDF(r2, r1, r0) # define stxi_d(r0, r1, i0) _stxi_d(_jit, r0, r1, i0) -static void _stxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _stxi_d(jit_state_t*,int32_t,int32_t,int32_t); # define fbr(cc, i0, r0, r1) _fbr(_jit, cc, i0, r0, r1) static jit_word_t -_fbr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_fbr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define fbw(cc, i0, r0, i1) _fbw(_jit, cc, i0, r0, i1) static jit_word_t -_fbw(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float32_t*); +_fbw(jit_state_t*,int32_t,jit_word_t,int32_t,jit_float32_t*); # define bltr_f(i0, r0, r1) fbr(SPARC_FBL, i0, r0, r1) # define blti_f(i0, r0, i1) fbw(SPARC_FBL, i0, r0, i1) # define bler_f(i0, r0, r1) fbr(SPARC_FBLE, i0, r0, r1) @@ -427,10 +427,10 @@ _fbw(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float32_t*); # define bunordi_f(i0, r0, i1) fbw(SPARC_FBU, i0, r0, i1) # define dbr(cc, i0, r0, r1) _dbr(_jit, cc, i0, r0, r1) static jit_word_t -_dbr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); +_dbr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t); # define dbw(cc, i0, r0, i1) _dbw(_jit, cc, i0, r0, i1) static jit_word_t -_dbw(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float64_t*); +_dbw(jit_state_t*,int32_t,jit_word_t,int32_t,jit_float64_t*); # define bltr_d(i0, r0, r1) dbr(SPARC_FBL, i0, r0, r1) # define blti_d(i0, r0, i1) dbw(SPARC_FBL, i0, r0, i1) # define bler_d(i0, r0, r1) dbr(SPARC_FBLE, i0, r0, r1) @@ -460,13 +460,13 @@ _dbw(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_float64_t*); # define bunordr_d(i0, r0, r1) dbr(SPARC_FBU, i0, r0, r1) # define bunordi_d(i0, r0, i1) dbw(SPARC_FBU, i0, r0, i1) # define vaarg_d(r0, r1) _vaarg_d(_jit, r0, r1) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _vaarg_d(jit_state_t*, int32_t, int32_t); #endif #if CODE static void -_f3f(jit_state_t *_jit, jit_int32_t rd, - jit_int32_t op3, jit_int32_t rs1, jit_int32_t opf, jit_int32_t rs2) +_f3f(jit_state_t *_jit, int32_t rd, + int32_t op3, int32_t rs1, int32_t opf, int32_t rs2) { jit_instr_t v; # if __WORDSIZE == 64 @@ -499,9 +499,9 @@ _f3f(jit_state_t *_jit, jit_int32_t rd, # if __WORDSIZE == 64 static void -_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0, t1; + int32_t t0, t1; if (r0 != r1) { if (single_precision_p(r0)) { if (single_precision_p(r1)) @@ -532,9 +532,9 @@ _movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_negr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_negr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0, t1; + int32_t t0, t1; if (single_precision_p(r0)) { if (single_precision_p(r1)) FNEGS(r1, r0); @@ -563,9 +563,9 @@ _negr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_absr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_absr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0, t1; + int32_t t0, t1; if (single_precision_p(r0)) { if (single_precision_p(r1)) FABSS(r1, r0); @@ -594,9 +594,9 @@ _absr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_sqrtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t t0, t1; + int32_t t0, t1; if (single_precision_p(r0)) { if (single_precision_p(r1)) FSQRTS(r1, r0); @@ -627,9 +627,9 @@ _sqrtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (!single_precision_p(r0)) { reg = jit_get_reg(CLASS_SNG); movr_d(rn(reg), r0); @@ -643,13 +643,13 @@ _extr_d_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.f = *i0; @@ -665,9 +665,9 @@ _movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) # if __WORDSIZE == 64 static void -_extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_f_d(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (!single_precision_p(r1)) { reg = jit_get_reg(CLASS_SNG); movr_d(rn(reg), r1); @@ -680,17 +680,17 @@ _extr_f_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { # if __WORDSIZE == 32 - jit_int32_t i[2]; + int32_t i[2]; # else jit_word_t w; # endif jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; if (_jitc->no_data) { data.d = *i0; @@ -714,7 +714,7 @@ _movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) # if __WORDSIZE == 32 static void -_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(!(r0 & 1)); assert(!(r1 & 1)); @@ -725,7 +725,7 @@ _movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_negr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(!(r0 & 1)); assert(!(r1 & 1)); @@ -735,7 +735,7 @@ _negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_absr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(!(r0 & 1)); assert(!(r1 & 1)); @@ -748,9 +748,9 @@ _absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 # define single_rrr(NAME, CODE) \ static void \ -NAME(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) \ +NAME(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) \ { \ - jit_int32_t x0, t0, x1, t1, x2, t2, mask = 0; \ + int32_t x0, t0, x1, t1, x2, t2, mask = 0; \ if (!single_precision_p(r0)) { \ mask |= 1; \ t0 = jit_get_reg(CLASS_SNG); \ @@ -802,10 +802,10 @@ NAME(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) \ } static void -_fop2f(jit_state_t *_jit, jit_int32_t op, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_fop2f(jit_state_t *_jit, int32_t op, + int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t x0, t0, x1, t1, x2, t2, mask = 0; + int32_t x0, t0, x1, t1, x2, t2, mask = 0; if (!single_precision_p(r0)) { mask |= 1; t0 = jit_get_reg(CLASS_SNG); @@ -858,12 +858,12 @@ _fop2f(jit_state_t *_jit, jit_int32_t op, # endif static void -_fop1f(jit_state_t *_jit, jit_int32_t op, - jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0) +_fop1f(jit_state_t *_jit, int32_t op, + int32_t r0, int32_t r1, jit_float32_t *i0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 - jit_int32_t x0, t0, x1, t1, mask = 0; + int32_t x0, t0, x1, t1, mask = 0; # endif reg = jit_get_reg(CLASS_SNG); movi_f(rn(reg), i0); @@ -903,12 +903,12 @@ _fop1f(jit_state_t *_jit, jit_int32_t op, } static void -_rfop1f(jit_state_t *_jit, jit_int32_t op, - jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0) +_rfop1f(jit_state_t *_jit, int32_t op, + int32_t r0, int32_t r1, jit_float32_t *i0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 - jit_int32_t x0, t0, x1, t1, mask = 0; + int32_t x0, t0, x1, t1, mask = 0; # endif reg = jit_get_reg(CLASS_SNG); movi_f(rn(reg), i0); @@ -948,10 +948,10 @@ _rfop1f(jit_state_t *_jit, jit_int32_t op, } static void -_fop1d(jit_state_t *_jit, jit_int32_t op, - jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) +_fop1d(jit_state_t *_jit, int32_t op, + int32_t r0, int32_t r1, jit_float64_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_DBL); movi_d(rn(reg), i0); FPop1(r0, r1, op, rn(reg)); @@ -959,10 +959,10 @@ _fop1d(jit_state_t *_jit, jit_int32_t op, } static void -_rfop1d(jit_state_t *_jit, jit_int32_t op, - jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) +_rfop1d(jit_state_t *_jit, int32_t op, + int32_t r0, int32_t r1, jit_float64_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_DBL); movi_d(rn(reg), i0); FPop1(r0, rn(reg), op, r1); @@ -970,7 +970,7 @@ _rfop1d(jit_state_t *_jit, jit_int32_t op, } static void -_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi(BIAS(-8), _FP_REGNO, r1); # if __WORDSIZE == 32 @@ -979,7 +979,7 @@ _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # else ldxi_d(r0, _FP_REGNO, BIAS(-8)); if (!single_precision_p(r0)) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_SNG); movr_d(rn(reg), r0); FXTOS(rn(reg), rn(reg)); @@ -992,9 +992,9 @@ _extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_SNG); # if __WORDSIZE == 64 if (!single_precision_p(r1)) { @@ -1011,9 +1011,9 @@ _truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_f_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_SNG); # if __WORDSIZE == 64 if (!single_precision_p(r1)) { @@ -1030,11 +1030,11 @@ _truncr_f_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_fcr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_fcr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { # if __WORDSIZE == 64 - jit_int32_t x0, t0, x1, t1, mask = 0; + int32_t x0, t0, x1, t1, mask = 0; if (!single_precision_p(r1)) { mask |= 1; t0 = jit_get_reg(CLASS_SNG); @@ -1067,12 +1067,12 @@ _fcr(jit_state_t *_jit, jit_int32_t cc, } static void -_fcw(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0) +_fcw(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_float32_t *i0) { - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 - jit_int32_t x0, t0, mask = 0; + int32_t x0, t0, mask = 0; if (!single_precision_p(r1)) { mask |= 1; t0 = jit_get_reg(CLASS_SNG); @@ -1098,8 +1098,8 @@ _fcw(jit_state_t *_jit, jit_int32_t cc, } static void -_dcr(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_dcr(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, int32_t r2) { FCMPD(r1, r2); FBa(cc, 3); @@ -1108,10 +1108,10 @@ _dcr(jit_state_t *_jit, jit_int32_t cc, } static void -_dcw(jit_state_t *_jit, jit_int32_t cc, - jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0) +_dcw(jit_state_t *_jit, int32_t cc, + int32_t r0, int32_t r1, jit_float64_t *i0) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_DBL); movi_d(rn(reg), i0); FCMPD(r1, rn(reg)); @@ -1123,9 +1123,9 @@ _dcw(jit_state_t *_jit, jit_int32_t cc, # if __WORDSIZE == 64 static void -_ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (!single_precision_p(r0)) { reg = jit_get_reg(CLASS_SNG); LDF(r1, 0, rn(reg)); @@ -1138,9 +1138,9 @@ _ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 64 if (!single_precision_p(r0)) { @@ -1163,9 +1163,9 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) # if __WORDSIZE == 64 static void -_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (!single_precision_p(r0)) { reg = jit_get_reg(CLASS_SNG); LDF(r1, r2, rn(reg)); @@ -1178,9 +1178,9 @@ _ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) # endif static void -_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 64 if (!single_precision_p(r0)) { @@ -1203,9 +1203,9 @@ _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) # if __WORDSIZE == 64 static void -_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_str_f(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (!single_precision_p(r1)) { reg = jit_get_reg(CLASS_SNG); movr_d(rn(reg), r1); @@ -1218,9 +1218,9 @@ _str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 64 if (!single_precision_p(r0)) { @@ -1243,9 +1243,9 @@ _sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) # if __WORDSIZE == 64 static void -_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { - jit_int32_t reg; + int32_t reg; if (!single_precision_p(r2)) { reg = jit_get_reg(CLASS_SNG); movr_d(rn(reg), r2); @@ -1258,9 +1258,9 @@ _stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) # endif static void -_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) { # if __WORDSIZE == 64 if (!single_precision_p(r1)) { @@ -1282,7 +1282,7 @@ _stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi(BIAS(-8), _FP_REGNO, r1); # if __WORDSIZE == 32 @@ -1297,9 +1297,9 @@ _extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_SNG); # if __WORDSIZE == 64 if (!single_precision_p(r1)) { @@ -1316,9 +1316,9 @@ _truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __WORDSIZE == 64 static void -_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_DBL); FDTOX(r1, rn(reg)); stxi_d(BIAS(-8), _FP_REGNO, rn(reg)); @@ -1328,9 +1328,9 @@ _truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDDFI(0, i0, r0); else { @@ -1342,9 +1342,9 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t i0) +_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t i0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) LDDFI(r1, i0, r0); else { @@ -1356,9 +1356,9 @@ _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t i0) } static void -_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STDFI(r0, 0, i0); else { @@ -1370,9 +1370,9 @@ _sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_stxi_d(jit_state_t *_jit, jit_int32_t i0, jit_int32_t r0, jit_int32_t r1) +_stxi_d(jit_state_t *_jit, int32_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (s13_p(i0)) STDFI(r1, r0, i0); else { @@ -1384,11 +1384,11 @@ _stxi_d(jit_state_t *_jit, jit_int32_t i0, jit_int32_t r0, jit_int32_t r1) } static jit_word_t -_fbr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0,jit_int32_t r1) +_fbr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0,int32_t r1) { # if __WORDSIZE == 64 - jit_int32_t x0, t0, x1, t1, mask = 0; + int32_t x0, t0, x1, t1, mask = 0; # endif jit_word_t w; # if __WORDSIZE == 64 @@ -1425,13 +1425,13 @@ _fbr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_fbw(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float32_t *i1) +_fbw(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float32_t *i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; # if __WORDSIZE == 64 - jit_int32_t x0, t0, mask = 0; + int32_t x0, t0, mask = 0; if (!single_precision_p(r0)) { mask |= 1; t0 = jit_get_reg(CLASS_SNG); @@ -1458,8 +1458,8 @@ _fbw(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_dbr(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_dbr(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, int32_t r1) { jit_word_t w; FCMPD(r0, r1); @@ -1470,11 +1470,11 @@ _dbr(jit_state_t *_jit, jit_int32_t cc, } static jit_word_t -_dbw(jit_state_t *_jit, jit_int32_t cc, - jit_word_t i0, jit_int32_t r0, jit_float64_t *i1) +_dbw(jit_state_t *_jit, int32_t cc, + jit_word_t i0, int32_t r0, jit_float64_t *i1) { jit_word_t w; - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(CLASS_DBL); movi_d(rn(reg), i1); FCMPD(r0, rn(reg)); @@ -1486,7 +1486,7 @@ _dbw(jit_state_t *_jit, jit_int32_t cc, } static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1) { assert(_jitc->function->self.call & jit_call_varargs); diff --git a/libguile/lightning/lib/jit_sparc.c b/libguile/lightning/jit/sparc.c index 3ac80d489..10aac8528 100644 --- a/libguile/lightning/lib/jit_sparc.c +++ b/libguile/lightning/jit/sparc.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2017 Free Software Foundation, Inc. + * Copyright (C) 2013-2018 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -38,14 +38,14 @@ typedef jit_pointer_t jit_va_list_t; static void _patch(jit_state_t*,jit_word_t,jit_node_t*); #define PROTO 1 -# include "jit_sparc-cpu.c" -# include "jit_sparc-fpu.c" +# include "sparc-cpu.c" +# include "sparc-fpu.c" #undef PROTO /* * Initialization */ -jit_register_t _rvs[] = { +static const jit_register_t _rvs[] = { { 0x00, "%g0" }, { 0x01, "%g1" }, { rc(gpr) | 0x02, "%g2" }, @@ -168,7 +168,7 @@ _jit_init(jit_state_t *_jit) void _jit_prolog(jit_state_t *_jit) { - jit_int32_t offset; + int32_t offset; if (_jitc->function) jit_epilog(); @@ -194,7 +194,7 @@ _jit_prolog(jit_state_t *_jit) # endif _jitc->function->self.call = jit_call_default; jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); + _jitc->reglen * sizeof(int32_t)); /* _no_link here does not mean the jit_link() call can be removed * by rewriting as: @@ -213,8 +213,8 @@ _jit_prolog(jit_state_t *_jit) jit_regset_new(&_jitc->function->regset); } -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) +int32_t +_jit_allocai(jit_state_t *_jit, int32_t length) { assert(_jitc->function); switch (length) { @@ -232,13 +232,13 @@ _jit_allocai(jit_state_t *_jit, jit_int32_t length) } void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) +_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v) { - jit_int32_t reg; + int32_t reg; assert(_jitc->function); jit_inc_synth_ww(allocar, u, v); if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); + _jitc->function->aoffoff = jit_allocai(sizeof(int32_t)); _jitc->function->allocar = 1; } reg = jit_get_reg(jit_class_gpr); @@ -265,7 +265,7 @@ _jit_ret(jit_state_t *_jit) } void -_jit_retr(jit_state_t *_jit, jit_int32_t u) +_jit_retr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr, u); if (JIT_RET != u) @@ -285,7 +285,7 @@ _jit_reti(jit_state_t *_jit, jit_word_t u) } void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) +_jit_retr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_f, u); if (JIT_FRET != u) @@ -306,7 +306,7 @@ _jit_reti_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) +_jit_retr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(retr_d, u); if (JIT_FRET != u) @@ -371,7 +371,7 @@ _jit_ellipsis(jit_state_t *_jit) } void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) +_jit_va_push(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(va_push, u); jit_pushargr(u); @@ -382,7 +382,7 @@ jit_node_t * _jit_arg(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; assert(_jitc->function); if (jit_arg_reg_p(_jitc->function->self.argi)) offset = _jitc->function->self.argi++; @@ -404,7 +404,7 @@ jit_node_t * _jit_arg_f(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; # if __WORDSIZE == 64 jit_bool_t inc; # endif @@ -435,7 +435,7 @@ jit_node_t * _jit_arg_d(jit_state_t *_jit) { jit_node_t *node; - jit_int32_t offset; + int32_t offset; # if __WORDSIZE == 64 jit_bool_t inc; # endif @@ -469,7 +469,7 @@ _jit_arg_d(jit_state_t *_jit) } void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_c, u, v); @@ -477,12 +477,12 @@ _jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_c(u, _I0 + v->u.w); else jit_ldxi_c(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int8_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int8_t)); jit_dec_synth(); } void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_uc, u, v); @@ -490,12 +490,12 @@ _jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_uc(u, _I0 + v->u.w); else jit_ldxi_uc(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_uint8_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(uint8_t)); jit_dec_synth(); } void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_s, u, v); @@ -503,12 +503,12 @@ _jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_s(u, _I0 + v->u.w); else jit_ldxi_s(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int16_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int16_t)); jit_dec_synth(); } void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_us, u, v); @@ -516,12 +516,12 @@ _jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_us(u, _I0 + v->u.w); else jit_ldxi_us(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_uint16_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(uint16_t)); jit_dec_synth(); } void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -534,13 +534,13 @@ _jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } else jit_ldxi_i(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int32_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int32_t)); jit_dec_synth(); } # if __WORDSIZE == 64 void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -548,12 +548,12 @@ _jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) jit_extr_ui(u, _I0 + v->u.w); else jit_ldxi_ui(u, JIT_FP, - v->u.w + (__WORDSIZE >> 3) - sizeof(jit_int32_t)); + v->u.w + (__WORDSIZE >> 3) - sizeof(int32_t)); jit_dec_synth(); } void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(getarg_i, u, v); @@ -566,7 +566,7 @@ _jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) # endif void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg); jit_inc_synth_wp(putargr, u, v); @@ -580,7 +580,7 @@ _jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg); jit_inc_synth_wp(putargi, u, v); if (jit_arg_reg_p(v->u.w)) @@ -595,7 +595,7 @@ _jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) } void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); assert(_jitc->function); @@ -618,7 +618,7 @@ _jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_f); jit_inc_synth_wp(putargr_f, u, v); @@ -642,7 +642,7 @@ _jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) void _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_f); jit_inc_synth_fp(putargi_f, u, v); # if __WORDSIZE == 32 @@ -672,7 +672,7 @@ _jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) } void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { assert(v->code == jit_code_arg_d); assert(_jitc->function); @@ -705,9 +705,9 @@ _jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) } void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) +_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v) { - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_wp(putargr_d, u, v); # if __WORDSIZE == 32 @@ -748,9 +748,9 @@ void _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) { # if __WORDSIZE == 32 - jit_int32_t gpr; + int32_t gpr; # endif - jit_int32_t regno; + int32_t regno; assert(v->code == jit_code_arg_d); jit_inc_synth_dp(putargi_d, u, v); # if __WORDSIZE == 32 @@ -795,7 +795,7 @@ _jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) } void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(pushargr, u); jit_link_prepare(); @@ -818,7 +818,7 @@ _jit_pushargr(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi(jit_state_t *_jit, jit_word_t u) { - jit_int32_t regno; + int32_t regno; jit_inc_synth_w(pushargi, u); jit_link_prepare(); if (jit_arg_reg_p(_jitc->function->call.argi)) { @@ -841,7 +841,7 @@ _jit_pushargi(jit_state_t *_jit, jit_word_t u) } void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_f(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(pushargr_f, u); jit_link_prepare(); @@ -884,7 +884,7 @@ _jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) { - jit_int32_t regno; + int32_t regno; jit_inc_synth_f(pushargi_f, u); jit_link_prepare(); # if __WORDSIZE == 32 @@ -933,7 +933,7 @@ _jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) } void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) +_jit_pushargr_d(jit_state_t *_jit, int32_t u) { jit_inc_synth_w(pushargr_d, u); jit_link_prepare(); @@ -984,7 +984,7 @@ _jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) void _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) { - jit_int32_t regno; + int32_t regno; jit_inc_synth_d(pushargi_d, u); jit_link_prepare(); # if __WORDSIZE == 32 @@ -1041,9 +1041,9 @@ _jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) } jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) +_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno) { - jit_int32_t spec; + int32_t spec; spec = jit_class(_rvs[regno].spec); if ((spec & (jit_class_arg|jit_class_gpr)) == @@ -1065,7 +1065,7 @@ _jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) } void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) +_jit_finishr(jit_state_t *_jit, int32_t r0) { jit_node_t *call; assert(_jitc->function); @@ -1100,7 +1100,7 @@ _jit_finishi(jit_state_t *_jit, jit_pointer_t i0) } void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_c(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_c, r0); jit_extr_c(r0, _O0); @@ -1108,7 +1108,7 @@ _jit_retval_c(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_uc(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_uc, r0); jit_extr_uc(r0, _O0); @@ -1116,7 +1116,7 @@ _jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_s(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_s, r0); jit_extr_s(r0, _O0); @@ -1124,7 +1124,7 @@ _jit_retval_s(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_us(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_us, r0); jit_extr_us(r0, _O0); @@ -1132,7 +1132,7 @@ _jit_retval_us(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_i(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); # if __WORDSIZE == 32 @@ -1146,7 +1146,7 @@ _jit_retval_i(jit_state_t *_jit, jit_int32_t r0) # if __WORDSIZE == 64 void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_ui(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); if (r0 != _O0) @@ -1155,7 +1155,7 @@ _jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_l(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_i, r0); if (r0 != _O0) @@ -1165,7 +1165,7 @@ _jit_retval_l(jit_state_t *_jit, jit_int32_t r0) # endif void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_f(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_f, r0); if (r0 != JIT_FRET) @@ -1174,7 +1174,7 @@ _jit_retval_f(jit_state_t *_jit, jit_int32_t r0) } void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) +_jit_retval_d(jit_state_t *_jit, int32_t r0) { jit_inc_synth_w(retval_d, r0); if (r0 != JIT_FRET) @@ -1188,15 +1188,15 @@ _emit_code(jit_state_t *_jit) jit_node_t *node; jit_node_t *temp; jit_word_t word; - jit_int32_t value; - jit_int32_t offset; + int32_t value; + int32_t offset; struct { jit_node_t *node; jit_word_t word; #if DEVEL_DISASSEMBLER jit_word_t prevw; #endif - jit_int32_t patch_offset; + int32_t patch_offset; } undo; #if DEVEL_DISASSEMBLER jit_word_t prevw; @@ -1868,8 +1868,8 @@ _emit_code(jit_state_t *_jit) } #define CODE 1 -# include "jit_sparc-cpu.c" -# include "jit_sparc-fpu.c" +# include "sparc-cpu.c" +# include ", 2018sparc-fpu.c" #undef CODE void @@ -1904,7 +1904,7 @@ _emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_fpr_t r1) static void _patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) { - jit_int32_t flag; + int32_t flag; assert(node->flag & jit_flag_node); if (node->code == jit_code_movi) diff --git a/libguile/lightning/include/lightning/jit_sparc.h b/libguile/lightning/jit/sparc.h index f74f5ff30..f74f5ff30 100644 --- a/libguile/lightning/include/lightning/jit_sparc.h +++ b/libguile/lightning/jit/sparc.h diff --git a/libguile/lightning/jit/x86-cpu.c b/libguile/lightning/jit/x86-cpu.c new file mode 100644 index 000000000..1c1da2b4f --- /dev/null +++ b/libguile/lightning/jit/x86-cpu.c @@ -0,0 +1,2762 @@ +/* + * Copyright (C) 2012-2019 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + */ + +/* avoid using it due to partial stalls */ +#define USE_INC_DEC 0 + +#if __X32 || __X64_32 +# define WIDE 0 +# define IF_WIDE(wide, narrow) narrow +#else +# define WIDE 1 +# define IF_WIDE(wide, narrow) wide +#endif + +#define _RAX_REGNO 0 +#define _RCX_REGNO 1 +#define _RDX_REGNO 2 +#define _RBX_REGNO 3 +#define _RSP_REGNO 4 +#define _RBP_REGNO 5 +#define _RSI_REGNO 6 +#define _RDI_REGNO 7 +#define _R8_REGNO 8 +#define _R9_REGNO 9 +#define _R10_REGNO 10 +#define _R11_REGNO 11 +#define _R12_REGNO 12 +#define _R13_REGNO 13 +#define _R14_REGNO 14 +#define _R15_REGNO 15 +#define r7(reg) ((reg) & 7) +#define r8(reg) ((reg) & 15) +#if __X32 || __CYGWIN__ || __X64_32 +# define reg8_p(rn) ((rn) >= _RAX_REGNO && (rn) <= _RBX_REGNO) +#else +# define reg8_p(rn) 1 +#endif + +#define can_sign_extend_int_p(im) \ + IF_WIDE((((im) >= 0 && (long long)(im) <= 0x7fffffffLL) || \ + ((im) < 0 && (long long)(im) > -0x80000000LL)), \ + 1) +#define can_zero_extend_int_p(im) \ + IF_WIDE(((im) >= 0 && (im) < 0x80000000LL), \ + 1) +#define fits_uint32_p(im) \ + IF_WIDE((((im) & 0xffffffff00000000LL) == 0), \ + 1) + +#define _SCL1 0x00 +#define _SCL2 0x01 +#define _SCL4 0x02 +#define _SCL8 0x03 + +#define X86_ADD 0 +#define X86_OR 1 << 3 +#define X86_ADC 2 << 3 +#define X86_SBB 3 << 3 +#define X86_AND 4 << 3 +#define X86_SUB 5 << 3 +#define X86_XOR 6 << 3 +#define X86_CMP 7 << 3 +#define X86_ROL 0 +#define X86_ROR 1 +#define X86_RCL 2 +#define X86_RCR 3 +#define X86_SHL 4 +#define X86_SHR 5 +#define X86_SAR 7 +#define X86_NOT 2 +#define X86_NEG 3 +#define X86_MUL 4 +#define X86_IMUL 5 +#define X86_DIV 6 +#define X86_IDIV 7 + +#define FOR_EACH_CC(M) \ + M(o, O, 0x0) \ + M(no, NO, 0x1) \ + M(nae, NAE, 0x2) \ + M(b, B, 0x2) \ + M(c, C, 0x2) \ + M(ae, AE, 0x3) \ + M(nb, NB, 0x3) \ + M(nc, NC, 0x3) \ + M(e, E, 0x4) \ + M(z, Z, 0x4) \ + M(ne, NE, 0x5) \ + M(nz, NZ, 0x5) \ + M(be, BE, 0x6) \ + M(na, NA, 0x6) \ + M(a, A, 0x7) \ + M(nbe, NBE, 0x7) \ + M(s, S, 0x8) \ + M(ns, NS, 0x9) \ + M(p, P, 0xa) \ + M(pe, PE, 0xa) \ + M(np, NP, 0xb) \ + M(po, PO, 0xb) \ + M(l, L, 0xc) \ + M(nge, NGE, 0xc) \ + M(ge, GE, 0xd) \ + M(nl_, NL, 0xd) \ + M(le, LE, 0xe) \ + M(ng, NG, 0xe) \ + M(g, G, 0xf) \ + M(nle, NLE, 0xf) \ + /* EOL */ + +enum x86_cc +{ +#define DEFINE_ENUM(cc, CC, code) X86_CC_##CC = code, + FOR_EACH_CC(DEFINE_ENUM) +#undef DEFINE_ENUM +}; + +static inline void +mrm(jit_state_t *_jit, uint8_t md, uint8_t r, uint8_t m) +{ + emit_u8(_jit, (md<<6) | (r<<3) | m); +} + +static inline void +sib(jit_state_t *_jit, uint8_t sc, uint8_t i, uint8_t b) +{ + emit_u8(_jit, (sc<<6) | (i<<3) | b); +} + +static inline void +ic(jit_state_t *_jit, uint8_t c) +{ + emit_u8(_jit, c); +} + +static inline void +is(jit_state_t *_jit, uint16_t s) +{ + emit_u16(_jit, s); +} + +static inline void +ii(jit_state_t *_jit, uint32_t i) +{ + emit_u32(_jit, i); +} + +static inline void +il(jit_state_t *_jit, unsigned long l) +{ +#if __X64 && !__X64_32 + emit_u64(_jit, l); +#else + ii(_jit, l); +#endif +} + +static void +rex(jit_state_t *_jit, int32_t l, int32_t w, + int32_t r, int32_t x, int32_t b) +{ +#if __X64 + int32_t v = 0x40 | (w << 3); + + if (r != _NOREG) + v |= (r & 8) >> 1; + if (x != _NOREG) + v |= (x & 8) >> 2; + if (b != _NOREG) + v |= (b & 8) >> 3; + if (l || v != 0x40) + ic(_jit, v); +#endif +} + +static void +rx(jit_state_t *_jit, int32_t rd, int32_t md, + int32_t rb, int32_t ri, int32_t ms) +{ + if (ri == _NOREG) { + if (rb == _NOREG) { +#if __X32 + mrm(_jit, 0x00, r7(rd), 0x05); +#else + mrm(_jit, 0x00, r7(rd), 0x04); + sib(_jit, _SCL1, 0x04, 0x05); +#endif + ii(_jit, md); + } else if (r7(rb) == _RSP_REGNO) { + if (md == 0) { + mrm(_jit, 0x00, r7(rd), 0x04); + sib(_jit, ms, 0x04, 0x04); + } + else if ((int8_t)md == md) { + mrm(_jit, 0x01, r7(rd), 0x04); + sib(_jit, ms, 0x04, 0x04); + ic(_jit, md); + } else { + mrm(_jit, 0x02, r7(rd), 0x04); + sib(_jit, ms, 0x04, 0x04); + ii(_jit, md); + } + } else { + if (md == 0 && r7(rb) != _RBP_REGNO) + mrm(_jit, 0x00, r7(rd), r7(rb)); + else if ((int8_t)md == md) { + mrm(_jit, 0x01, r7(rd), r7(rb)); + ic(_jit, md); + } else { + mrm(_jit, 0x02, r7(rd), r7(rb)); + ii(_jit, md); + } + } + } + else if (rb == _NOREG) { + mrm(_jit, 0x00, r7(rd), 0x04); + sib(_jit, ms, r7(ri), 0x05); + ii(_jit, md); + } + else if (r8(ri) != _RSP_REGNO) { + if (md == 0 && r7(rb) != _RBP_REGNO) { + mrm(_jit, 0x00, r7(rd), 0x04); + sib(_jit, ms, r7(ri), r7(rb)); + } else if ((int8_t)md == md) { + mrm(_jit, 0x01, r7(rd), 0x04); + sib(_jit, ms, r7(ri), r7(rb)); + ic(_jit, md); + } else { + mrm(_jit, 0x02, r7(rd), 0x04); + sib(_jit, ms, r7(ri), r7(rb)); + ic(_jit, md); + } + } else { + fprintf(stderr, "illegal index register"); + abort(); + } +} + +static void +pushr(jit_state_t *_jit, int32_t r0) +{ + rex(_jit, 0, WIDE, 0, 0, r0); + ic(_jit, 0x50 | r7(r0)); +} + +static void +popr(jit_state_t *_jit, int32_t r0) +{ + rex(_jit, 0, WIDE, 0, 0, r0); + ic(_jit, 0x58 | r7(r0)); +} + +static jit_gpr_t +get_temp_gpr(jit_state_t *_jit) +{ + ASSERT(!_jit->temp_gpr_saved); + _jit->temp_gpr_saved = 1; +#if __X32 + pushr(_jit, _RBP_REGNO); + return JIT_GPR(_RBP); +#else + return JIT_GPR(_R8); +#endif +} + +static void +unget_temp_gpr(jit_state_t *_jit) +{ + ASSERT(_jit->temp_gpr_saved); + _jit->temp_gpr_saved = 0; +#if __X32 + popr(_jit, _RBP_REGNO); +#endif +} + +static void +nop(jit_state_t *_jit, int32_t count) +{ + switch (count) { + case 0: + break; + case 1: /* NOP */ + ic(_jit, 0x90); + break; + case 2: /* 66 NOP */ + ic(_jit, 0x66); ic(_jit, 0x90); + break; + case 3: /* NOP DWORD ptr [EAX] */ + ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x00); + break; + case 4: /* NOP DWORD ptr [EAX + 00H] */ + ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x40); ic(_jit, 0x00); + break; + case 5: /* NOP DWORD ptr [EAX + EAX*1 + 00H] */ + ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x44); ic(_jit, 0x00); + ic(_jit, 0x00); + break; + case 6: /* 66 NOP DWORD ptr [EAX + EAX*1 + 00H] */ + ic(_jit, 0x66); ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x44); + ic(_jit, 0x00); ic(_jit, 0x00); + break; + case 7: /* NOP DWORD ptr [EAX + 00000000H] */ + ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x80); ii(_jit, 0x0000); + break; + case 8: /* NOP DWORD ptr [EAX + EAX*1 + 00000000H] */ + ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x84); ic(_jit, 0x00); + ii(_jit, 0x0000); + break; + case 9: /* 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] */ + ic(_jit, 0x66); ic(_jit, 0x0f); ic(_jit, 0x1f); ic(_jit, 0x84); + ic(_jit, 0x00); ii(_jit, 0x0000); + break; + default: + abort(); + } +} + +static void +movr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (r0 != r1) { + rex(_jit, 0, 1, r1, _NOREG, r0); + ic(_jit, 0x89); + ic(_jit, 0xc0 | (r1 << 3) | r7(r0)); + } +} + +static void +movcr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xbe); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +movcr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xb6); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +movsr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xbf); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +movsr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xb7); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +#if __X64 +static void +movir(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 1, r0, _NOREG, r1); + ic(_jit, 0x63); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +movir_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x89); + ic(_jit, 0xc0 | (r1 << 3) | r7(r0)); +} +#endif + +static jit_reloc_t +mov_addr(jit_state_t *_jit, int32_t r0) +{ + uint8_t *pc_start = _jit->pc.uc; + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + ic(_jit, 0xb8 | r7(r0)); + ptrdiff_t inst_start = _jit->pc.uc - pc_start; + return jit_reloc(_jit, JIT_RELOC_ABSOLUTE, inst_start, 0); +} + +static void +imovi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ +#if __X64 +# if !__X64_32 + if (fits_uint32_p(i0)) { +# endif + rex(_jit, 0, 0, _NOREG, _NOREG, r0); + ic(_jit, 0xb8 | r7(r0)); + ii(_jit, i0); +# if !__X64_32 + } else { + rex(_jit, 0, 1, _NOREG, _NOREG, r0); + ic(_jit, 0xb8 | r7(r0)); + il(_jit, i0); + } +# endif +#else + ic(_jit, 0xb8 | r7(r0)); + ii(_jit, i0); +#endif +} + +static void +alur(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r1, _NOREG, r0); + ic(_jit, code | 0x01); + mrm(_jit, 0x03, r7(r1), r7(r0)); +} + +static inline void +icmpr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_CMP, r0, r1); +} +static inline void +iaddr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_ADD, r0, r1); +} +static inline void +iaddxr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_ADC, r0, r1); +} +static inline void +isubr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_SUB, r0, r1); +} +static inline void +isubxr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_SBB, r0, r1); +} +static inline void +iandr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_AND, r0, r1); +} +static inline void +iorr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_OR, r0, r1); +} +static inline void +ixorr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return alur(_jit, X86_XOR, r0, r1); +} + +static void +movi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (i0) + imovi(_jit, r0, i0); + else + ixorr(_jit, r0, r0); +} + +static void +alui(jit_state_t *_jit, int32_t code, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + if ((int8_t)i0 == i0) { + ic(_jit, 0x83); + ic(_jit, 0xc0 | code | r7(r0)); + ic(_jit, i0); + } else { + if (r0 == _RAX_REGNO) { + ic(_jit, code | 0x05); + } else { + ic(_jit, 0x81); + ic(_jit, 0xc0 | code | r7(r0)); + } + ii(_jit, i0); + } + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + alur(_jit, code, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static inline void +icmpi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_CMP, r0, i0); +} +static inline void +iaddi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_ADD, r0, i0); +} +static inline void +iaddxi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_ADC, r0, i0); +} +static inline void +isubi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_SUB, r0, i0); +} +static inline void +isubxi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_SBB, r0, i0); +} +static inline void +iandi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_AND, r0, i0); +} +static inline void +iori(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_OR, r0, i0); +} +static inline void +ixori(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + return alui(_jit, X86_XOR, r0, i0); +} + +static void +unr(jit_state_t *_jit, int32_t code, int32_t r0) +{ + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + ic(_jit, 0xf7); + mrm(_jit, 0x03, code, r7(r0)); +} + +static inline void +umulr(jit_state_t *_jit, int32_t r0) +{ + return unr(_jit, X86_IMUL, r0); +} +static inline void +umulr_u(jit_state_t *_jit, int32_t r0) +{ + return unr(_jit, X86_MUL, r0); +} +static inline void +idivr(jit_state_t *_jit, int32_t r0) +{ + return unr(_jit, X86_IDIV, r0); +} +static inline void +idivr_u(jit_state_t *_jit, int32_t r0) +{ + return unr(_jit, X86_DIV, r0); +} +static inline void +inegr(jit_state_t *_jit, int32_t r0) +{ + return unr(_jit, X86_NEG, r0); +} +static inline void +icomr(jit_state_t *_jit, int32_t r0) +{ + return unr(_jit, X86_NOT, r0); +} + +#if USE_INC_DEC +static void +incr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movr(_jit, r0, r1); +# if __X64 + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + ic(_jit, 0xff); + ic(_jit, 0xc0 | r7(r0)); +# else + ic(_jit, 0x40 | r7(r0)); +# endif +} + +static void +decr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movr(_jit, r0, r1); +# if __X64 + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + ic(_jit, 0xff); + ic(_jit, 0xc8 | r7(r0)); +# else + ic(_jit, 0x48 | r7(r0)); +# endif +} +#endif + +static void +lea(jit_state_t *_jit, int32_t md, int32_t rb, + int32_t ri, int32_t ms, int32_t rd) +{ + rex(_jit, 0, WIDE, rd, ri, rb); + ic(_jit, 0x8d); + rx(_jit, rd, md, rb, ri, ms); +} + +static void +xchgr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r1, _NOREG, r0); + ic(_jit, 0x87); + mrm(_jit, 0x03, r7(r1), r7(r0)); +} + +static void +testr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r1, _NOREG, r0); + ic(_jit, 0x85); + mrm(_jit, 0x03, r7(r1), r7(r0)); +} + +static void +testi(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + if (r0 == _RAX_REGNO) { + ic(_jit, 0xa9); + } else { + ic(_jit, 0xf7); + mrm(_jit, 0x03, 0x00, r7(r0)); + } + ii(_jit, i0); +} + +static void +cc(jit_state_t *_jit, int32_t code, int32_t r0) +{ + rex(_jit, 0, 0, _NOREG, _NOREG, r0); + ic(_jit, 0x0f); + ic(_jit, 0x90 | code); + mrm(_jit, 0x03, 0x00, r7(r0)); +} + +static void +negr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (r0 == r1) { + inegr(_jit, r0); + } else { + ixorr(_jit, r0, r0); + isubr(_jit, r0, r1); + } +} + +static void +addr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + iaddr(_jit, r0, r2); + else if (r0 == r2) + iaddr(_jit, r0, r1); + else + lea(_jit, 0, r1, r2, _SCL1, r0); +} + +static void +addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (i0 == 0) + movr(_jit, r0, r1); +#if USE_INC_DEC + else if (i0 == 1) + incr(_jit, r0, r1); + else if (i0 == -1) + decr(_jit, r0, r1); +#endif + else if (can_sign_extend_int_p(i0)) { + if (r0 == r1) + iaddi(_jit, r0, i0); + else + lea(_jit, i0, r1, _NOREG, _SCL1, r0); + } + else if (r0 != r1) { + movi(_jit, r0, i0); + iaddr(_jit, r0, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + iaddr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r2) { + iaddr(_jit, r0, r1); + } else { + movr(_jit, r0, r1); + iaddr(_jit, r0, r2); + } +} + +static void +addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + movr(_jit, r0, r1); + iaddi(_jit, r0, i0); + } + else if (r0 == r1) { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + iaddr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } else { + movi(_jit, r0, i0); + iaddr(_jit, r0, r1); + } +} + +static void +addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r2) { + iaddxr(_jit, r0, r1); + } else { + movr(_jit, r0, r1); + iaddxr(_jit, r0, r2); + } +} + +static void +addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + movr(_jit, r0, r1); + iaddxi(_jit, r0, i0); + } + else if (r0 == r1) { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + iaddxr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } else { + movi(_jit, r0, i0); + iaddxr(_jit, r0, r1); + } +} + +static void +subr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r1 == r2) + ixorr(_jit, r0, r0); + else if (r0 == r2) { + isubr(_jit, r0, r1); + inegr(_jit, r0); + } else { + movr(_jit, r0, r1); + isubr(_jit, r0, r2); + } +} + +static void +subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (i0 == 0) + movr(_jit, r0, r1); +#if USE_INC_DEC + else if (i0 == 1) + decr(_jit, r0, r1); + else if (i0 == -1) + incr(_jit, r0, r1); +#endif + else if (can_sign_extend_int_p(i0)) { + if (r0 == r1) + isubi(_jit, r0, i0); + else + lea(_jit, -i0, r1, _NOREG, _SCL1, r0); + } + else if (r0 != r1) { + movi(_jit, r0, -i0); + iaddr(_jit, r0, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + isubr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r2 && r0 != r1) { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r0); + movr(_jit, r0, r1); + isubr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } else { + movr(_jit, r0, r1); + isubr(_jit, r0, r2); + } +} + +static void +subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + movr(_jit, r0, r1); + if (can_sign_extend_int_p(i0)) { + isubi(_jit, r0, i0); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + isubr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r2 && r0 != r1) { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r0); + movr(_jit, r0, r1); + isubxr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } else { + movr(_jit, r0, r1); + isubxr(_jit, r0, r2); + } +} + +static void +subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + movr(_jit, r0, r1); + if (can_sign_extend_int_p(i0)) { + isubxi(_jit, r0, i0); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + imovi(_jit, rn(reg), i0); + isubxr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +irotshr(jit_state_t *_jit, int32_t code, int32_t r0) +{ + rex(_jit, 0, WIDE, _RCX_REGNO, _NOREG, r0); + ic(_jit, 0xd3); + mrm(_jit, 0x03, code, r7(r0)); +} + +static void +rotshr(jit_state_t *_jit, int32_t code, + int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == _RCX_REGNO) { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r1); + if (r2 != _RCX_REGNO) + movr(_jit, _RCX_REGNO, r2); + irotshr(_jit, code, rn(reg)); + movr(_jit, _RCX_REGNO, rn(reg)); + unget_temp_gpr(_jit); + } else if (r2 != _RCX_REGNO) { + /* Already know that R0 isn't RCX. */ + pushr(_jit, _RCX_REGNO); + if (r1 == _RCX_REGNO) { + if (r0 == r2) + xchgr(_jit, r0, _RCX_REGNO); + else { + movr(_jit, r0, r1); + movr(_jit, _RCX_REGNO, r2); + } + } else { + movr(_jit, _RCX_REGNO, r2); + movr(_jit, r0, r1); + } + irotshr(_jit, code, r0); + popr(_jit, _RCX_REGNO); + } else { + movr(_jit, r0, r1); + irotshr(_jit, code, r0); + } +} + +static void +irotshi(jit_state_t *_jit, int32_t code, int32_t r0, jit_word_t i0) +{ + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + if (i0 == 1) { + ic(_jit, 0xd1); + mrm(_jit, 0x03, code, r7(r0)); + } else { + ic(_jit, 0xc1); + mrm(_jit, 0x03, code, r7(r0)); + ic(_jit, i0); + } +} + +static void +rotshi(jit_state_t *_jit, int32_t code, + int32_t r0, int32_t r1, jit_word_t i0) +{ + movr(_jit, r0, r1); + if (i0) + irotshi(_jit, code, r0, i0); +} + +static void +lshi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (i0 == 0) + movr(_jit, r0, r1); + else if (i0 <= 3) + lea(_jit, 0, _NOREG, r1, i0 == 1 ? _SCL2 : i0 == 2 ? _SCL4 : _SCL8, r0); + else + rotshi(_jit, X86_SHL, r0, r1, i0); +} + +static void +lshr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return rotshr(_jit, X86_SHL, r0, r1, r2); +} + +static void +rshr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return rotshr(_jit, X86_SAR, r0, r1, r2); +} + +static void +rshi(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t i0) +{ + return rotshi(_jit, X86_SAR, r0, r1, i0); +} + +static void +rshr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return rotshr(_jit, X86_SHR, r0, r1, r2); +} + +static void +rshi_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t i0) +{ + return rotshi(_jit, X86_SHR, r0, r1, i0); +} + +static void +imulr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xaf); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +imuli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, r1); + if ((int8_t)i0 == i0) { + ic(_jit, 0x6b); + mrm(_jit, 0x03, r7(r0), r7(r1)); + ic(_jit, i0); + } else { + ic(_jit, 0x69); + mrm(_jit, 0x03, r7(r0), r7(r1)); + ii(_jit, i0); + } + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + imulr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +mulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + imulr(_jit, r0, r2); + else if (r0 == r2) { + imulr(_jit, r0, r1); + } else { + movr(_jit, r0, r1); + imulr(_jit, r0, r2); + } +} + +static int +ffsw(jit_word_t i) +{ + if (sizeof(int) == sizeof(i)) + return ffs(i); + int bit = ffs((int)i); + if (bit == 0) { + bit = ffs((int)((unsigned long)i >> 32)); + if (bit) + bit += 32; + } + return bit; +} + +static void +muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + switch (i0) { + case 0: + ixorr(_jit, r0, r0); + break; + case 1: + movr(_jit, r0, r1); + break; + case -1: + negr(_jit, r0, r1); + break; + case 2: + lea(_jit, 0, _NOREG, r1, _SCL2, r0); + break; + case 4: + lea(_jit, 0, _NOREG, r1, _SCL4, r0); + break; + case 8: + lea(_jit, 0, _NOREG, r1, _SCL8, r0); + break; + default: + if (i0 > 0 && !(i0 & (i0 - 1))) + lshi(_jit, r0, r1, ffsw(i0) - 1); + else if (can_sign_extend_int_p(i0)) + imuli(_jit, r0, r1, i0); + else if (r0 != r1) { + movi(_jit, r0, i0); + imulr(_jit, r0, r1); + } + else + imuli(_jit, r0, r0, i0); + break; + } +} + +static void +iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) +{ + if (r0 != _RAX_REGNO && r1 != _RAX_REGNO) + pushr(_jit, _RAX_REGNO); + if (r0 != _RDX_REGNO && r1 != _RDX_REGNO) + pushr(_jit, _RDX_REGNO); + + int32_t mul; + if (r3 == _RAX_REGNO) { + mul = r2; + } else { + mul = r3; + movr(_jit, _RAX_REGNO, r2); + } + if (sign) + umulr(_jit, mul); + else + umulr_u(_jit, mul); + + if (r0 == _RDX_REGNO && r1 == _RAX_REGNO) { + xchgr(_jit, _RAX_REGNO, _RDX_REGNO); + } else { + if (r0 != _RDX_REGNO) + movr(_jit, r0, _RAX_REGNO); + movr(_jit, r1, _RDX_REGNO); + if (r0 == _RDX_REGNO) + movr(_jit, r0, _RAX_REGNO); + } + + if (r0 != _RDX_REGNO && r1 != _RDX_REGNO) + popr(_jit, _RDX_REGNO); + if (r0 != _RAX_REGNO && r1 != _RAX_REGNO) + popr(_jit, _RAX_REGNO); +} + +static void +qmulr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, int32_t r3) +{ + return iqmulr(_jit, r0, r1, r2, r3, 1); +} + +static void +qmulr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, int32_t r3) +{ + return iqmulr(_jit, r0, r1, r2, r3, 0); +} + +static void +iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) +{ + if (i0 == 0) { + ixorr(_jit, r0, r0); + ixorr(_jit, r1, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + if (sign) + qmulr(_jit, r0, r1, r2, rn(reg)); + else + qmulr_u(_jit, r0, r1, r2, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +qmuli(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) +{ + return iqmuli(_jit, r0, r1, r2, i0, 1); +} + +static void +qmuli_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) +{ + return iqmuli(_jit, r0, r1, r2, i0, 0); +} + +static void +sign_extend_rdx_rax(jit_state_t *_jit) +{ + rex(_jit, 0, WIDE, 0, 0, 0); + ic(_jit, 0x99); +} + +static void +divremr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, + jit_bool_t sign, jit_bool_t divide) +{ + if (r0 != _RAX_REGNO) + pushr(_jit, _RAX_REGNO); + if (r0 != _RDX_REGNO) + pushr(_jit, _RDX_REGNO); + + int tmp_divisor = 0; + if (r2 == _RAX_REGNO || r2 == _RDX_REGNO) { + jit_gpr_t tmp = get_temp_gpr(_jit); + movr(_jit, rn(tmp), r2); + r2 = rn(tmp); + tmp_divisor = 1; + } + + movr(_jit, _RAX_REGNO, r1); + + if (sign) { + sign_extend_rdx_rax(_jit); + idivr(_jit, r2); + } else { + ixorr(_jit, _RDX_REGNO, _RDX_REGNO); + idivr_u(_jit, r2); + } + + if (divide) + movr(_jit, r0, _RAX_REGNO); + else + movr(_jit, r0, _RDX_REGNO); + + if (tmp_divisor) + unget_temp_gpr(_jit); + + if (r0 != _RDX_REGNO) + popr(_jit, _RDX_REGNO); + if (r0 != _RAX_REGNO) + popr(_jit, _RAX_REGNO); +} + +static void +divremi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0, + jit_bool_t sign, jit_bool_t divide) +{ + jit_gpr_t tmp = get_temp_gpr(_jit); + movi(_jit, rn(tmp), i0); + + divremr(_jit, r0, r1, rn(tmp), sign, divide); +} + +static void +divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return divremr(_jit, r0, r1, r2, 1, 1); +} + +static void +divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + return divremi(_jit, r0, r1, i0, 1, 1); +} + +static void +divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return divremr(_jit, r0, r1, r2, 0, 1); +} + +static void +divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + return divremi(_jit, r0, r1, i0, 0, 1); +} + + +static void +remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return divremr(_jit, r0, r1, r2, 1, 0); +} + +static void +remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + return divremi(_jit, r0, r1, i0, 1, 0); +} + +static void +remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + return divremr(_jit, r0, r1, r2, 0, 0); +} + +static void +remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + return divremi(_jit, r0, r1, i0, 0, 0); +} + +static void +iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, int32_t r3, jit_bool_t sign) +{ + if (r0 != _RAX_REGNO && r1 != _RAX_REGNO) + pushr(_jit, _RAX_REGNO); + if (r0 != _RDX_REGNO && r1 != _RDX_REGNO) + pushr(_jit, _RDX_REGNO); + + int tmp_divisor = 0; + if (r3 == _RAX_REGNO || r3 == _RDX_REGNO) { + jit_gpr_t tmp = get_temp_gpr(_jit); + movr(_jit, rn(tmp), r3); + r3 = rn(tmp); + tmp_divisor = 1; + } + + movr(_jit, _RAX_REGNO, r2); + + if (sign) { + sign_extend_rdx_rax(_jit); + idivr(_jit, r3); + } else { + ixorr(_jit, _RDX_REGNO, _RDX_REGNO); + idivr_u(_jit, r3); + } + + if (r0 == _RDX_REGNO && r1 == _RAX_REGNO) { + xchgr(_jit, _RAX_REGNO, _RDX_REGNO); + } else { + if (r0 != _RDX_REGNO) + movr(_jit, r0, _RAX_REGNO); + movr(_jit, r1, _RDX_REGNO); + if (r0 == _RDX_REGNO) + movr(_jit, r0, _RAX_REGNO); + } + + if (tmp_divisor) + unget_temp_gpr(_jit); + + if (r0 != _RDX_REGNO && r1 != _RDX_REGNO) + popr(_jit, _RDX_REGNO); + if (r0 != _RAX_REGNO && r1 != _RAX_REGNO) + popr(_jit, _RAX_REGNO); +} + +static void +qdivr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, int32_t r3) +{ + return iqdivr(_jit, r0, r1, r2, r3, 1); +} + +static void +qdivr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, int32_t r3) +{ + return iqdivr(_jit, r0, r1, r2, r3, 0); +} + +static void +iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1, + int32_t r2, jit_word_t i0, jit_bool_t sign) +{ + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + if (sign) + qdivr(_jit, r0, r1, r2, rn(reg)); + else + qdivr_u(_jit, r0, r1, r2, rn(reg)); + unget_temp_gpr(_jit); +} + +static void +qdivi(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) +{ + return iqdivi(_jit, r0, r1, r2, i0, 1); +} + +static void +qdivi_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2, jit_word_t i0) +{ + return iqdivi(_jit, r0, r1, r2, i0, 0); +} + +static void +comr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movr(_jit, r0, r1); + icomr(_jit, r0); +} + +static void +andr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r1 == r2) + movr(_jit, r0, r1); + else if (r0 == r1) + iandr(_jit, r0, r2); + else if (r0 == r2) { + iandr(_jit, r0, r1); + } else { + movr(_jit, r0, r1); + iandr(_jit, r0, r2); + } +} + +static void +andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + + if (i0 == 0) + ixorr(_jit, r0, r0); + else if (i0 == -1) + movr(_jit, r0, r1); + else if (r0 == r1) { + if (can_sign_extend_int_p(i0)) { + iandi(_jit, r0, i0); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + iandr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } + } else { + movi(_jit, r0, i0); + iandr(_jit, r0, r1); + } +} + +static void +orr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r1 == r2) + movr(_jit, r0, r1); + else if (r0 == r1) + iorr(_jit, r0, r2); + else if (r0 == r2) { + iorr(_jit, r0, r1); + } else { + movr(_jit, r0, r1); + iorr(_jit, r0, r2); + } +} + +static void +ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (i0 == 0) + movr(_jit, r0, r1); + else if (i0 == -1) + movi(_jit, r0, -1); + else if (can_sign_extend_int_p(i0)) { + movr(_jit, r0, r1); + iori(_jit, r0, i0); + } + else if (r0 != r1) { + movi(_jit, r0, i0); + iorr(_jit, r0, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + iorr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +xorr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r1 == r2) + ixorr(_jit, r0, r0); + else if (r0 == r1) + ixorr(_jit, r0, r2); + else if (r0 == r2) { + ixorr(_jit, r0, r1); + } else { + movr(_jit, r0, r1); + ixorr(_jit, r0, r2); + } +} + +static void +xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (i0 == 0) + movr(_jit, r0, r1); + else if (i0 == -1) + comr(_jit, r0, r1); + else if (can_sign_extend_int_p(i0)) { + movr(_jit, r0, r1); + ixori(_jit, r0, i0); + } + else if (r0 != r1) { + movi(_jit, r0, i0); + ixorr(_jit, r0, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ixorr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +cr(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1, int32_t r2) +{ + if (reg8_p(r0)) { + jit_bool_t same = r0 == r1 || r0 == r2; + if (!same) + ixorr(_jit, r0, r0); + icmpr(_jit, r1, r2); + if (same) + imovi(_jit, r0, 0); + cc(_jit, code, r0); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + ixorr(_jit, rn(reg), rn(reg)); + icmpr(_jit, r1, r2); + cc(_jit, code, rn(reg)); + movr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ci(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (reg8_p(r0)) { + jit_bool_t same = r0 == r1; + if (!same) + ixorr(_jit, r0, r0); + icmpi(_jit, r1, i0); + if (same) + imovi(_jit, r0, 0); + cc(_jit, code, r0); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + ixorr(_jit, rn(reg), rn(reg)); + icmpi(_jit, r1, i0); + cc(_jit, code, rn(reg)); + movr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ci0(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1) +{ + if (reg8_p(r0)) { + jit_bool_t same = r0 == r1; + if (!same) + ixorr(_jit, r0, r0); + testr(_jit, r1, r1); + if (same) + imovi(_jit, r0, 0); + cc(_jit, code, r0); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + ixorr(_jit, rn(reg), rn(reg)); + testr(_jit, r1, r1); + cc(_jit, code, rn(reg)); + movr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +extr_c(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (reg8_p(r1)) { + movcr(_jit, r0, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r1); + movcr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +extr_uc(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (reg8_p(r1)) { + movcr_u(_jit, r0, r1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r1); + movcr_u(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +extr_s(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return movsr(_jit, r0, r1); +} + +static void +extr_us(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return movsr_u(_jit, r0, r1); +} + +#if __X64 && !__X64_32 +static void +extr_i(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return movir(_jit, r0, r1); +} +static void +extr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return movir_u(_jit, r0, r1); +} +#endif + +static void +bswapr_us(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + extr_us(_jit, r0, r1); + ic(_jit, 0x66); + rex(_jit, 0, 0, _NOREG, _NOREG, r0); + ic(_jit, 0xc1); + mrm(_jit, 0x03, X86_ROR, r7(r0)); + ic(_jit, 8); +} + +static void +bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movr(_jit, r0, r1); + rex(_jit, 0, 0, _NOREG, _NOREG, r0); + ic(_jit, 0x0f); + ic(_jit, 0xc8 | r7(r0)); +} + +#if __X64 && !__X64_32 +static void +bswapr_ul(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movr(_jit, r0, r1); + rex(_jit, 0, 1, _NOREG, _NOREG, r0); + ic(_jit, 0x0f); + ic(_jit, 0xc8 | r7(r0)); +} +#endif + +static void +ldr_c(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xbe); + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, _NOREG); + ic(_jit, 0x0f); + ic(_jit, 0xbe); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_c(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldr_uc(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xb6); + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, _NOREG); + ic(_jit, 0x0f); + ic(_jit, 0xb6); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_uc(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldr_s(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xbf); + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, _NOREG); + ic(_jit, 0x0f); + ic(_jit, 0xbf); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_s(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldr_us(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xb7); + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, _NOREG); + ic(_jit, 0x0f); + ic(_jit, 0xb7); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_us(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +#if __X32 || !__X64_32 +static void +ldr_i(jit_state_t *_jit, int32_t r0, int32_t r1) +{ +#if __X64 + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x63); +#else + ic(_jit, 0x8b); +#endif + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { +#if __X64 + rex(_jit, 0, WIDE, r0, _NOREG, _NOREG); + ic(_jit, 0x63); +#else + ic(_jit, 0x8b); +#endif + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_i(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} +#endif + +#if __X64 +static void +ldr_ui(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 0, r0, _NOREG, r1); + ic(_jit, 0x63); + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 0, r0, _NOREG, _NOREG); + ic(_jit, 0x63); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_ui(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +# if !__X64_32 +static void +ldr_l(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 1, r0, _NOREG, r1); + ic(_jit, 0x8b); + rx(_jit, r0, 0, r1, _NOREG, _SCL1); +} + +static void +ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 1, r0, _NOREG, _NOREG); + ic(_jit, 0x8b); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_l(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} +# endif +#endif + +static void +ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + addr(_jit, r0, r1, r2); + ldr_c(r0, r0); +#else + rex(_jit, 0, WIDE, r0, r1, r2); + ic(_jit, 0x0f); + ic(_jit, 0xbe); + rx(_jit, r0, 0, r2, r1, _SCL1); +#endif +} + +static void +ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xbe); + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_c(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + addr(_jit, r0, r1, r2); + ldr_uc(_jit, r0, r0); +#else + rex(_jit, 0, WIDE, r0, r1, r2); + ic(_jit, 0x0f); + ic(_jit, 0xb6); + rx(_jit, r0, 0, r2, r1, _SCL1); +#endif +} + +static void +ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xb6); + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_uc(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + addr(_jit, r0, r1, r2); + ldr_s(_jit, r0, r0); +#else + rex(_jit, 0, WIDE, r0, r1, r2); + ic(_jit, 0x0f); + ic(_jit, 0xbf); + rx(_jit, r0, 0, r2, r1, _SCL1); +#endif +} + +static void +ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xbf); + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_s(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + addr(_jit, r0, r1, r2); + ldr_us(_jit, r0, r0); +#else + rex(_jit, 0, WIDE, r0, r1, r2); + ic(_jit, 0x0f); + ic(_jit, 0xb7); + rx(_jit, r0, 0, r2, r1, _SCL1); +#endif +} + +static void +ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x0f); + ic(_jit, 0xb7); + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_us(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} + +#if __X64 || !__X64_32 +static void +ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64 + rex(_jit, 0, WIDE, r0, r1, r2); + ic(_jit, 0x63); +#else + ic(_jit, 0x8b); +#endif + rx(_jit, r0, 0, r2, r1, _SCL1); +} + +static void +ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { +#if __X64 + rex(_jit, 0, WIDE, r0, _NOREG, r1); + ic(_jit, 0x63); +#else + ic(_jit, 0x8b); +#endif + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_i(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} +#endif + +#if __X64 +static void +ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + addr(_jit, r0, r1, r2); + /* to avoid confusion with macro renames */ + _ldr_ui(_jit, r0, r0); +#else + rex(_jit, 0, 0, r0, r1, r2); + ic(_jit, 0x8b); + rx(_jit, r0, 0, r2, r1, _SCL1); +#endif +} + +static void +ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 0, r0, _NOREG, r1); + ic(_jit, 0x8b); + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_ui(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} + +# if !__X64_32 +static void +ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + rex(_jit, 0, 1, r0, r1, r2); + ic(_jit, 0x8b); + rx(_jit, r0, 0, r2, r1, _SCL1); +} + +static void +ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 1, r0, _NOREG, r1); + ic(_jit, 0x8b); + rx(_jit, r0, i0, r1, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldxr_l(_jit, r0, r1, rn(reg)); + unget_temp_gpr(_jit); + } +} +# endif +#endif + +static void +str_c(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (reg8_p(r1)) { + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x88); + rx(_jit, r1, 0, r0, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r1); + rex(_jit, 0, 0, rn(reg), _NOREG, r0); + ic(_jit, 0x88); + rx(_jit, rn(reg), 0, r0, _NOREG, _SCL1); + unget_temp_gpr(_jit); + } +} + +static void +sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0) +{ + if (can_sign_extend_int_p(i0)) { + if (reg8_p(r0)) { + rex(_jit, 0, 0, r0, _NOREG, _NOREG); + ic(_jit, 0x88); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r0); + rex(_jit, 0, 0, rn(reg), _NOREG, _NOREG); + ic(_jit, 0x88); + rx(_jit, rn(reg), i0, _NOREG, _NOREG, _SCL1); + unget_temp_gpr(_jit); + } + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + str_c(_jit, rn(reg), r0); + unget_temp_gpr(_jit); + } +} + +static void +str_s(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ic(_jit, 0x66); + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x89); + rx(_jit, r1, 0, r0, _NOREG, _SCL1); +} + +static void +sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0) +{ + if (can_sign_extend_int_p(i0)) { + ic(_jit, 0x66); + rex(_jit, 0, 0, r0, _NOREG, _NOREG); + ic(_jit, 0x89); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + str_s(_jit, rn(reg), r0); + unget_temp_gpr(_jit); + } +} + +static void +str_i(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x89); + rx(_jit, r1, 0, r0, _NOREG, _SCL1); +} + +static void +sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 0, r0, _NOREG, _NOREG); + ic(_jit, 0x89); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + str_i(_jit, rn(reg), r0); + unget_temp_gpr(_jit); + } +} + +#if __X64 && !__X64_32 +static void +str_l(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 1, r1, _NOREG, r0); + ic(_jit, 0x89); + rx(_jit, r1, 0, r0, _NOREG, _SCL1); +} + +static void +sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 1, r0, _NOREG, _NOREG); + ic(_jit, 0x89); + rx(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + str_l(_jit, rn(reg), r0); + unget_temp_gpr(_jit); + } +} +#endif + +static void +stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r0, r1); + str_c(_jit, rn(reg), r2); + unget_temp_gpr(_jit); +#else + if (reg8_p(r2)) { + rex(_jit, 0, 0, r2, r1, r0); + ic(_jit, 0x88); + rx(_jit, r2, 0, r0, r1, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r2); + rex(_jit, 0, 0, rn(reg), r1, r0); + ic(_jit, 0x88); + rx(_jit, rn(reg), 0, r0, r1, _SCL1); + unget_temp_gpr(_jit); + } +#endif +} + +static void +stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) +{ + if (can_sign_extend_int_p(i0)) { + if (reg8_p(r1)) { + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x88); + rx(_jit, r1, i0, r0, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movr(_jit, rn(reg), r1); + rex(_jit, 0, 0, rn(reg), _NOREG, r0); + ic(_jit, 0x88); + rx(_jit, rn(reg), i0, r0, _NOREG, _SCL1); + unget_temp_gpr(_jit); + } + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + stxr_c(_jit, rn(reg), r0, r1); + unget_temp_gpr(_jit); + } +} + +static void +stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r0, r1); + str_s(_jit, rn(reg), r2); + unget_temp_gpr(_jit); +#else + ic(_jit, 0x66); + rex(_jit, 0, 0, r2, r1, r0); + ic(_jit, 0x89); + rx(_jit, r2, 0, r0, r1, _SCL1); +#endif +} + +static void +stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) +{ + if (can_sign_extend_int_p(i0)) { + ic(_jit, 0x66); + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x89); + rx(_jit, r1, i0, r0, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + stxr_s(_jit, rn(reg), r0, r1); + unget_temp_gpr(_jit); + } +} + +static void +stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r0, r1); + str_i(rn(reg), r2); + unget_temp_gpr(_jit); +#else + rex(_jit, 0, 0, r2, r1, r0); + ic(_jit, 0x89); + rx(_jit, r2, 0, r0, r1, _SCL1); +#endif +} + +static void +stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 0, r1, _NOREG, r0); + ic(_jit, 0x89); + rx(_jit, r1, i0, r0, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + stxr_i(_jit, rn(reg), r0, r1); + unget_temp_gpr(_jit); + } +} + +#if __X64 && !__X64_32 +static void +stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + rex(_jit, 0, 1, r2, r1, r0); + ic(_jit, 0x89); + rx(_jit, r2, 0, r0, r1, _SCL1); +} + +static void +stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) +{ + if (can_sign_extend_int_p(i0)) { + rex(_jit, 0, 1, r1, _NOREG, r0); + ic(_jit, 0x89); + rx(_jit, r1, i0, r0, _NOREG, _SCL1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + stxr_l(_jit, rn(reg), r0, r1); + unget_temp_gpr(_jit); + } +} +#endif + +static jit_reloc_t +jccs(jit_state_t *_jit, int32_t code) +{ + ic(_jit, 0x70 | code); + return jit_reloc(_jit, JIT_RELOC_REL8, 1, 0); +} + +static jit_reloc_t +jcc(jit_state_t *_jit, int32_t code) +{ + ic(_jit, 0x0f); + ic(_jit, 0x80 | code); + return jit_reloc(_jit, JIT_RELOC_REL32, 2, 0); +} + +#define DEFINE_JUMPS(cc, CC, code) \ + static inline jit_reloc_t j##cc(jit_state_t *_jit) \ + { \ + return jcc(_jit, X86_CC_##CC); \ + } \ + static inline jit_reloc_t j##cc##s(jit_state_t *_jit) \ + { \ + return jccs(_jit, X86_CC_##CC); \ + } +FOR_EACH_CC(DEFINE_JUMPS) +#undef DEFINE_JUMPS + +static jit_reloc_t +jcr(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1) +{ + alur(_jit, X86_CMP, r0, r1); + return jcc(_jit, code); +} + +static jit_reloc_t +jci(jit_state_t *_jit, int32_t code, int32_t r0, jit_word_t i0) +{ + alui(_jit, X86_CMP, r0, i0); + return jcc(_jit, code); +} + +static jit_reloc_t +jci0(jit_state_t *_jit, int32_t code, int32_t r0) +{ + testr(_jit, r0, r0); + return jcc(_jit, code); +} + +static jit_reloc_t +bltr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr(_jit, X86_CC_L, r0, r1); +} + +static jit_reloc_t +blti(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_L, r0, i1); + else return jci0(_jit, X86_CC_S, r0); +} + +static jit_reloc_t +bltr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr(_jit, X86_CC_B, r0, r1); +} + +static jit_reloc_t +blti_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_B, r0, i1); + else return jci0(_jit, X86_CC_B, r0); +} + +static jit_reloc_t +bler(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr (_jit, X86_CC_LE, r0, r1); +} + +static jit_reloc_t +blei(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_LE, r0, i1); + else return jci0(_jit, X86_CC_LE, r0); +} + +static jit_reloc_t +bler_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr (_jit, X86_CC_BE, r0, r1); +} + +static jit_reloc_t +blei_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_BE, r0, i1); + else return jci0(_jit, X86_CC_BE, r0); +} + +static jit_reloc_t +beqr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr (_jit, X86_CC_E, r0, r1); +} + +static jit_reloc_t +beqi(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_E, r0, i1); + else return jci0(_jit, X86_CC_E, r0); +} + +static jit_reloc_t +bger(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr (_jit, X86_CC_GE, r0, r1); +} + +static jit_reloc_t +bgei(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_GE, r0, i1); + else return jci0(_jit, X86_CC_NS, r0); +} + +static jit_reloc_t +bger_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr (_jit, X86_CC_AE, r0, r1); +} + +static jit_reloc_t +bgei_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + return jci (_jit, X86_CC_AE, r0, i1); +} + +static jit_reloc_t +bgtr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr(_jit, X86_CC_G, r0, r1); +} + +static jit_reloc_t +bgti(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + return jci(_jit, X86_CC_G, r0, i1); +} + +static jit_reloc_t +bgtr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr(_jit, X86_CC_A, r0, r1); +} + +static jit_reloc_t +bgti_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_A, r0, i1); + else return jci0(_jit, X86_CC_NE, r0); +} + +static jit_reloc_t +bner(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + return jcr(_jit, X86_CC_NE, r0, r1); +} + +static jit_reloc_t +bnei(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (i1) return jci (_jit, X86_CC_NE, r0, i1); + else return jci0(_jit, X86_CC_NE, r0); +} + +static jit_reloc_t +bmsr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + testr(_jit, r0, r1); + return jnz(_jit); +} + +static jit_reloc_t +bmsi(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_zero_extend_int_p(i1)) { + testi(_jit, r0, i1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + testr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } + return jnz(_jit); +} + +static jit_reloc_t +bmcr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + testr(_jit, r0, r1); + return jz(_jit); +} + +static jit_reloc_t +bmci(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_zero_extend_int_p(i1)) { + testi(_jit, r0, i1); + } else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + testr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } + return jz(_jit); +} + +static jit_reloc_t +boaddr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + iaddr(_jit, r0, r1); + return jo(_jit); +} + +static jit_reloc_t +boaddi(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + iaddi(_jit, r0, i1); + return jo(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return boaddr(_jit, r0, rn(reg)); +} + +static jit_reloc_t +boaddr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + iaddr(_jit, r0, r1); + return jc(_jit); +} + +static jit_reloc_t +boaddi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + iaddi(_jit, r0, i1); + return jc(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return boaddr_u(_jit, r0, rn(reg)); +} + +static jit_reloc_t +bxaddr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + iaddr(_jit, r0, r1); + return jno(_jit); +} + +static jit_reloc_t +bxaddi(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + iaddi(_jit, r0, i1); + return jno(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return bxaddr(_jit, r0, rn(reg)); +} + +static jit_reloc_t +bxaddr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + iaddr(_jit, r0, r1); + return jnc(_jit); +} + +static jit_reloc_t +bxaddi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + iaddi(_jit, r0, i1); + return jnc(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return bxaddr_u(_jit, r0, rn(reg)); +} + +static jit_reloc_t +bosubr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + isubr(_jit, r0, r1); + return jo(_jit); +} + +static jit_reloc_t +bosubi(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + isubi(_jit, r0, i1); + return jo(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return bosubr(_jit, r0, rn(reg)); +} + +static jit_reloc_t +bosubr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + isubr(_jit, r0, r1); + return jc(_jit); +} + +static jit_reloc_t +bosubi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + isubi(_jit, r0, i1); + return jc(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return bosubr_u(_jit, r0, rn(reg)); +} + +static jit_reloc_t +bxsubr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + isubr(_jit, r0, r1); + return jno(_jit); +} + +static jit_reloc_t +bxsubi(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + isubi(_jit, r0, i1); + return jno(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return bxsubr(_jit, r0, rn(reg)); +} + +static jit_reloc_t +bxsubr_u(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + isubr(_jit, r0, r1); + return jnc(_jit); +} + +static jit_reloc_t +bxsubi_u(jit_state_t *_jit, int32_t r0, jit_word_t i1) +{ + if (can_sign_extend_int_p(i1)) { + isubi(_jit, r0, i1); + return jnc(_jit); + } + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i1); + unget_temp_gpr(_jit); + return bxsubr_u(_jit, r0, rn(reg)); +} + +static void +callr(jit_state_t *_jit, int32_t r0) +{ + rex(_jit, 0, 0, _NOREG, _NOREG, r0); + ic(_jit, 0xff); + mrm(_jit, 0x03, 0x02, r7(r0)); +} + +static void +calli(jit_state_t *_jit, jit_word_t i0) +{ + ptrdiff_t rel32 = i0 - (_jit->pc.w + 4); + if (INT32_MIN <= rel32 && rel32 <= INT32_MAX) + { + ic(_jit, 0xe8); + ii(_jit, rel32); + } + else + { + jit_gpr_t reg = get_temp_gpr(_jit); + jit_patch_there(_jit, mov_addr(_jit, rn(reg)), (void*)i0); + callr(_jit, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +jmpr(jit_state_t *_jit, int32_t r0) +{ + rex(_jit, 0, WIDE, _NOREG, _NOREG, r0); + ic(_jit, 0xff); + mrm(_jit, 0x03, 0x04, r7(r0)); +} + +static void +jmpi(jit_state_t *_jit, jit_word_t i0) +{ + ptrdiff_t rel32 = i0 - (_jit->pc.w + 4); + if (INT32_MIN <= rel32 && rel32 <= INT32_MAX) + { + ic(_jit, 0xe9); + ii(_jit, rel32); + } + else + { + jit_gpr_t reg = get_temp_gpr(_jit); + jit_patch_there(_jit, mov_addr(_jit, rn(reg)), (void*)i0); + jmpr(_jit, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static jit_reloc_t +jmp(jit_state_t *_jit) +{ + ic(_jit, 0xe9); + return jit_reloc(_jit, JIT_RELOC_REL32, 1, 0); +} + +static jit_reloc_t +jmpsi(jit_state_t *_jit) +{ + ic(_jit, 0xeb); + return jit_reloc(_jit, JIT_RELOC_REL8, 1, 0); +} + +static void +ret(jit_state_t *_jit) +{ + ic(_jit, 0xc3); +} + +static void +retr(jit_state_t *_jit, int32_t r0) +{ + movr(_jit, _RAX_REGNO, r0); + ret(_jit); +} + +static void +reti(jit_state_t *_jit, jit_word_t i0) +{ + movi(_jit, _RAX_REGNO, i0); + ret(_jit); +} + +static void +retval_c(jit_state_t *_jit, int32_t r0) +{ + extr_c(_jit, r0, rn(JIT_RET)); +} + +static void +retval_uc(jit_state_t *_jit, int32_t r0) +{ + extr_uc(_jit, r0, rn(JIT_RET)); +} + +static void +retval_s(jit_state_t *_jit, int32_t r0) +{ + extr_s(_jit, r0, rn(JIT_RET)); +} + +static void +retval_us(jit_state_t *_jit, int32_t r0) +{ + extr_us(_jit, r0, rn(JIT_RET)); +} + +static void +retval_i(jit_state_t *_jit, int32_t r0) +{ +#if __X32 || __X64_32 + movr(_jit, r0, rn(JIT_RET)); +#else + extr_i(_jit, r0, rn(JIT_RET)); +#endif +} + +#if __X64 && !__X64_32 +static void +retval_ui(jit_state_t *_jit, int32_t r0) +{ + extr_ui(_jit, r0, rn(JIT_RET)); +} + +static void +retval_l(jit_state_t *_jit, int32_t r0) +{ + movr(_jit, r0, rn(JIT_RET)); +} +#endif diff --git a/libguile/lightning/jit/x86-sse.c b/libguile/lightning/jit/x86-sse.c new file mode 100644 index 000000000..44d990545 --- /dev/null +++ b/libguile/lightning/jit/x86-sse.c @@ -0,0 +1,1036 @@ +/* + * Copyright (C) 2012-2017, 2019 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + */ + +#define _XMM0_REGNO 0 +#define _XMM1_REGNO 1 +#define _XMM2_REGNO 2 +#define _XMM3_REGNO 3 +#define _XMM4_REGNO 4 +#define _XMM5_REGNO 5 +#define _XMM6_REGNO 6 +#define _XMM7_REGNO 7 +#define _XMM8_REGNO 8 +#define _XMM9_REGNO 9 +#define _XMM10_REGNO 10 +#define _XMM11_REGNO 11 +#define _XMM12_REGNO 12 +#define _XMM13_REGNO 13 +#define _XMM14_REGNO 14 +#define _XMM15_REGNO 15 +#define X86_SSE_MOV 0x10 +#define X86_SSE_MOV1 0x11 +#define X86_SSE_MOVLP 0x12 +#define X86_SSE_MOVHP 0x16 +#define X86_SSE_MOVA 0x28 +#define X86_SSE_CVTIS 0x2a +#define X86_SSE_CVTTSI 0x2c +#define X86_SSE_CVTSI 0x2d +#define X86_SSE_UCOMI 0x2e +#define X86_SSE_COMI 0x2f +#define X86_SSE_ROUND 0x3a +#define X86_SSE_SQRT 0x51 +#define X86_SSE_RSQRT 0x52 +#define X86_SSE_RCP 0x53 +#define X86_SSE_AND 0x54 +#define X86_SSE_ANDN 0x55 +#define X86_SSE_OR 0x56 +#define X86_SSE_XOR 0x57 +#define X86_SSE_ADD 0x58 +#define X86_SSE_MUL 0x59 +#define X86_SSE_CVTSD 0x5a +#define X86_SSE_CVTDT 0x5b +#define X86_SSE_SUB 0x5c +#define X86_SSE_MIN 0x5d +#define X86_SSE_DIV 0x5e +#define X86_SSE_MAX 0x5f +#define X86_SSE_X2G 0x6e +#define X86_SSE_EQB 0x74 +#define X86_SSE_EQW 0x75 +#define X86_SSE_EQD 0x76 +#define X86_SSE_G2X 0x7e +#define X86_SSE_MOV2 0xd6 + +static void +sser(jit_state_t *_jit, int32_t c, int32_t r0, int32_t r1) +{ + rex(_jit, 0, 0, r0, 0, r1); + ic(_jit, 0x0f); + ic(_jit, c); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +ssexr(jit_state_t *_jit, int32_t p, int32_t c, + int32_t r0, int32_t r1) +{ + ic(_jit, p); + rex(_jit, 0, 0, r0, 0, r1); + ic(_jit, 0x0f); + ic(_jit, c); + mrm(_jit, 0x03, r7(r0), r7(r1)); +} + +static void +ssexi(jit_state_t *_jit, int32_t c, int32_t r0, + int32_t m, int32_t i) +{ + ic(_jit, 0x66); + rex(_jit, 0, 0, 0, 0, r0); + ic(_jit, 0x0f); + ic(_jit, c); + mrm(_jit, 0x03, r7(m), r7(r0)); + ic(_jit, i); +} + +static void +sselxr(jit_state_t *_jit, int32_t p, int32_t c, int32_t r0, int32_t r1) +{ + if (__X64 && !__X64_32) { + ic(_jit, p); + rex(_jit, 0, 1, r0, 0, r1); + ic(_jit, 0x0f); + ic(_jit, c); + mrm(_jit, 0x03, r7(r0), r7(r1)); + } else { + ssexr(_jit, p, c, r0, r1); + } +} + +static void +ssexrx(jit_state_t *_jit, int32_t px, int32_t code, int32_t md, + int32_t rb, int32_t ri, int32_t ms, int32_t rd) +{ + ic(_jit, px); + rex(_jit, 0, 0, rd, ri, rb); + ic(_jit, 0x0f); + ic(_jit, code); + rx(_jit, rd, md, rb, ri, ms); +} + +static void +movdlxr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0x66, X86_SSE_X2G, r0, r1); +} +static void +movdqxr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sselxr(_jit, 0x66, X86_SSE_X2G, r0, r1); +} + +static void +movssmr(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms, int32_t rd) +{ + ssexrx(_jit, 0xf3, X86_SSE_MOV, md, rb, ri, ms, rd); +} +static void +movsdmr(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms, int32_t rd) +{ + ssexrx(_jit, 0xf2, X86_SSE_MOV, md, rb, ri, ms, rd); +} +static void +movssrm(jit_state_t *_jit, int32_t rs, int32_t md, int32_t mb, int32_t mi, int32_t ms) +{ + ssexrx(_jit, 0xf3, X86_SSE_MOV1, md, mb, mi, ms, rs); +} +static void +movsdrm(jit_state_t *_jit, int32_t rs, int32_t md, int32_t mb, int32_t mi, int32_t ms) +{ + ssexrx(_jit, 0xf2, X86_SSE_MOV1, md, mb, mi, ms, rs); +} + +static void +movr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (r0 != r1) + ssexr(_jit, 0xf3, X86_SSE_MOV, r0, r1); +} + +static void +movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (r0 != r1) + ssexr(_jit, 0xf2, X86_SSE_MOV, r0, r1); +} + +static void +pushr_d(jit_state_t *_jit, int32_t r0) +{ + jit_gpr_t tmp = get_temp_gpr(_jit); + movdqxr(_jit, rn(tmp), r0); + pushr(_jit, rn(tmp)); + unget_temp_gpr(_jit); +} + +static void +popr_d(jit_state_t *_jit, int32_t r0) +{ + jit_gpr_t tmp = get_temp_gpr(_jit); + popr(_jit, rn(tmp)); + ssexr(_jit, 0x66, X86_SSE_G2X, r0, rn(tmp)); + unget_temp_gpr(_jit); +} + +static jit_fpr_t +get_temp_xpr(jit_state_t *_jit) +{ + /* Reserve XMM7 for the JIT. */ + ASSERT(!_jit->temp_fpr_saved); + _jit->temp_fpr_saved = 1; + return JIT_FPR(_XMM7); +} + +static void +unget_temp_xpr(jit_state_t *_jit) +{ + ASSERT(_jit->temp_fpr_saved); + _jit->temp_fpr_saved = 0; +} + +static void +addssr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_ADD, r0, r1); +} +static void +addsdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_ADD, r0, r1); +} +static void +subssr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_SUB, r0, r1); +} +static void +subsdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_SUB, r0, r1); +} +static void +mulssr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_MUL, r0, r1); +} +static void +mulsdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_MUL, r0, r1); +} +static void +divssr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_DIV, r0, r1); +} +static void +divsdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_DIV, r0, r1); +} +static void +andpsr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sser(_jit, X86_SSE_AND, r0, r1); +} +static void +andpdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0x66, X86_SSE_AND, r0, r1); +} +static void +truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_CVTTSI, r0, r1); +} +static void +truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_CVTTSI, r0, r1); +} +#if __X64 +static void +truncr_f_l(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sselxr(_jit, 0xf3, X86_SSE_CVTTSI, r0, r1); +} +static void +truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sselxr(_jit, 0xf2, X86_SSE_CVTTSI, r0, r1); +} +#endif +static void +extr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sselxr(_jit, 0xf3, X86_SSE_CVTIS, r0, r1); +} +static void +extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sselxr(_jit, 0xf2, X86_SSE_CVTIS, r0, r1); +} + +static void +extr_f_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_CVTSD, r0, r1); +} +static void +extr_d_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_CVTSD, r0, r1); +} +static void +ucomissr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sser(_jit, X86_SSE_UCOMI, r0, r1); +} +static void +ucomisdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0x66, X86_SSE_UCOMI, r0, r1); +} +static void +xorpsr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + sser(_jit, X86_SSE_XOR, r0, r1); +} +static void +xorpdr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0x66, X86_SSE_XOR, r0, r1); +} +static void +pcmpeqlr(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0x66, X86_SSE_EQD, r0, r1); +} +static void +psrl(jit_state_t *_jit, int32_t r0, int32_t i0) +{ + ssexi(_jit, 0x72, r0, 0x02, i0); +} +static void +psrq(jit_state_t *_jit, int32_t r0, int32_t i0) +{ + ssexi(_jit, 0x73, r0, 0x02, i0); +} +static void +pslq(jit_state_t *_jit, int32_t r0, int32_t i0) +{ + ssexi(_jit, 0x73, r0, 0x06, i0); +} +static void +sqrtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf3, X86_SSE_SQRT, r0, r1); +} +static void +sqrtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ssexr(_jit, 0xf2, X86_SSE_SQRT, r0, r1); +} +static void +ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movssmr(_jit, 0, r1, _NOREG, _SCL1, r0); +} +static void +str_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movssrm(_jit, r1, 0, r0, _NOREG, _SCL1); +} +static void +ldr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movsdmr(_jit, 0, r1, _NOREG, _SCL1, r0); +} +static void +str_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + movsdrm(_jit, r1, 0, r0, _NOREG, _SCL1); +} + +static void +movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t i0) +{ + union { + int32_t i; + jit_float32_t f; + } data; + + data.f = i0; + if (data.f == 0.0 && !(data.i & 0x80000000)) + xorpsr(_jit, r0, r0); + else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), data.i); + movdlxr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0) +{ + union { + int32_t ii[2]; + jit_word_t w; + jit_float64_t d; + } data; + + data.d = i0; + if (data.d == 0.0 && !(data.ii[1] & 0x80000000)) + xorpdr(_jit, r0, r0); + else { + jit_gpr_t reg = get_temp_gpr(_jit); +#if __X64 && !__X64_32 + movi(_jit, rn(reg), data.w); + movdqxr(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); +#else + movi(_jit, rn(reg), data.ii[0]); + stxi_i(CVT_OFFSET, _RBP_REGNO, rn(reg)); + movi(_jit, rn(reg), data.ii[1]); + stxi_i(CVT_OFFSET + 4, _RBP_REGNO, rn(reg)); + unget_temp_gpr(_jit); + ldxi_d(_jit, r0, _RBP_REGNO, CVT_OFFSET); +#endif + } +} + +static void +retval_f(jit_state_t *_jit, int32_t r0) +{ +#if __X64 + movr_f(_jit, r0, rn(JIT_FRET)); +#endif +} + +static void +retval_d(jit_state_t *_jit, int32_t r0) +{ +#if __X64 + movr_d(_jit, r0, rn(JIT_FRET)); +#endif +} + +static void +retr_f(jit_state_t *_jit, int32_t u) +{ + movr_f(_jit, rn(JIT_FRET), u); + ret(_jit); +} + +static void +retr_d(jit_state_t *_jit, int32_t u) +{ + movr_d(_jit, rn(JIT_FRET), u); + ret(_jit); +} + +static void +addr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + addssr(_jit, r0, r2); + else if (r0 == r2) + addssr(_jit, r0, r1); + else { + movr_f(_jit, r0, r1); + addssr(_jit, r0, r2); + } +} + +static void +addr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + addsdr(_jit, r0, r2); + else if (r0 == r2) + addsdr(_jit, r0, r1); + else { + movr_d(_jit, r0, r1); + addsdr(_jit, r0, r2); + } +} + +static void +subr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + subssr(_jit, r0, r2); + else if (r0 == r2) { + jit_fpr_t reg = get_temp_xpr(_jit); + movr_f(_jit, rn(reg), r0); + movr_f(_jit, r0, r1); + subssr(_jit, r0, rn(reg)); + unget_temp_xpr(_jit); + } + else { + movr_f(_jit, r0, r1); + subssr(_jit, r0, r2); + } +} + +static void +subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + subsdr(_jit, r0, r2); + else if (r0 == r2) { + jit_fpr_t reg = get_temp_xpr(_jit); + movr_d(_jit, rn(reg), r0); + movr_d(_jit, r0, r1); + subsdr(_jit, r0, rn(reg)); + unget_temp_xpr(_jit); + } + else { + movr_d(_jit, r0, r1); + subsdr(_jit, r0, r2); + } +} + +static void +mulr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + mulssr(_jit, r0, r2); + else if (r0 == r2) + mulssr(_jit, r0, r1); + else { + movr_f(_jit, r0, r1); + mulssr(_jit, r0, r2); + } +} + +static void +mulr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + mulsdr(_jit, r0, r2); + else if (r0 == r2) + mulsdr(_jit, r0, r1); + else { + movr_d(_jit, r0, r1); + mulsdr(_jit, r0, r2); + } +} + +static void +divr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + divssr(_jit, r0, r2); + else if (r0 == r2) { + jit_fpr_t reg = get_temp_xpr(_jit); + movr_f(_jit, rn(reg), r0); + movr_f(_jit, r0, r1); + divssr(_jit, r0, rn(reg)); + unget_temp_xpr(_jit); + } + else { + movr_f(_jit, r0, r1); + divssr(_jit, r0, r2); + } +} + +static void +divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ + if (r0 == r1) + divsdr(_jit, r0, r2); + else if (r0 == r2) { + jit_fpr_t reg = get_temp_xpr(_jit); + movr_d(_jit, rn(reg), r0); + movr_d(_jit, r0, r1); + divsdr(_jit, r0, rn(reg)); + unget_temp_xpr(_jit); + } + else { + movr_d(_jit, r0, r1); + divsdr(_jit, r0, r2); + } +} + +static void +absr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (r0 == r1) { + jit_fpr_t reg = get_temp_xpr(_jit); + pcmpeqlr(_jit, rn(reg), rn(reg)); + psrl(_jit, rn(reg), 1); + andpsr(_jit, r0, rn(reg)); + unget_temp_xpr(_jit); + } + else { + pcmpeqlr(_jit, r0, r0); + psrl(_jit, r0, 1); + andpsr(_jit, r0, r1); + } +} + +static void +absr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + if (r0 == r1) { + jit_fpr_t reg = get_temp_xpr(_jit); + pcmpeqlr(_jit, rn(reg), rn(reg)); + psrq(_jit, rn(reg), 1); + andpdr(_jit, r0, rn(reg)); + unget_temp_xpr(_jit); + } + else { + pcmpeqlr(_jit, r0, r0); + psrq(_jit, r0, 1); + andpdr(_jit, r0, r1); + } +} + +static void +negr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + jit_gpr_t ireg = get_temp_gpr(_jit); + imovi(_jit, rn(ireg), 0x80000000); + if (r0 == r1) { + jit_fpr_t freg = get_temp_xpr(_jit); + movdlxr(_jit, rn(freg), rn(ireg)); + xorpsr(_jit, r0, rn(freg)); + unget_temp_xpr(_jit); + } else { + movdlxr(_jit, r0, rn(ireg)); + xorpsr(_jit, r0, r1); + } + unget_temp_gpr(_jit); +} + +static void +negr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + jit_gpr_t ireg = get_temp_gpr(_jit); + imovi(_jit, rn(ireg), 0x80000000); + if (r0 == r1) { + jit_fpr_t freg = get_temp_xpr(_jit); + movdlxr(_jit, rn(freg), rn(ireg)); + pslq(_jit, rn(freg), 32); + xorpdr(_jit, r0, rn(freg)); + unget_temp_xpr(_jit); + } else { + movdlxr(_jit, r0, rn(ireg)); + pslq(_jit, r0, 32); + xorpdr(_jit, r0, r1); + } + unget_temp_gpr(_jit); +} + +#if __X32 +# define sse_address_p(i0) 1 +#elif __X64_32 +# define sse_address_p(i0) ((jit_word_t)(i0) >= 0) +# else +# define sse_address_p(i0) can_sign_extend_int_p(i0) +#endif + +static void +ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (sse_address_p(i0)) + movssmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0); + else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_f(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r1, r2); + ldr_f(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); +#else + movssmr(_jit, 0, r1, r2, _SCL1, r0); +#endif +} + +static void +ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) + movssmr(_jit, i0, r1, _NOREG, _SCL1, r0); + else { + jit_gpr_t reg = get_temp_gpr(_jit); +#if __X64_32 + addi(rn(reg), r1, i0); + ldr_f(_jit, r0, rn(reg)); +#else + movi(_jit, rn(reg), i0); + ldxr_f(_jit, r0, r1, rn(reg)); +#endif + unget_temp_gpr(_jit); + } +} + +static void +sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) +{ + if (sse_address_p(i0)) + movssrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + str_f(_jit, rn(reg), r0); + unget_temp_gpr(_jit); + } +} + +static void +stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r0, r1); + str_f(_jit, rn(reg), r2); + unget_temp_gpr(_jit); +#else + movssrm(_jit, r2, 0, r0, r1, _SCL1); +#endif +} + +static void +stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) +{ + if (can_sign_extend_int_p(i0)) + movssrm(_jit, r1, i0, r0, _NOREG, _SCL1); + else { + jit_gpr_t reg = get_temp_gpr(_jit); +#if __X64_32 + addi(rn(reg), r0, i0); + str_f(_jit, rn(reg), r1); +#else + movi(_jit, rn(reg), i0); + stxr_f(_jit, rn(reg), r0, r1); +#endif + unget_temp_gpr(_jit); + } +} + +static jit_reloc_t +bltr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r1, r0); + return ja(_jit); +} + +static jit_reloc_t +bler_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r1, r0); + return jae(_jit); +} + +static jit_reloc_t +beqr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + jit_reloc_t pos = jps(_jit); + jit_reloc_t ret = je(_jit); + jit_patch_here(_jit, pos); + return ret; +} + +static jit_reloc_t +bger_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return jae(_jit); +} + +static jit_reloc_t +bgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return ja(_jit); +} + +static jit_reloc_t +bner_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + jit_reloc_t pos = jps(_jit); + jit_reloc_t zero = jzs(_jit); + jit_patch_here(_jit, pos); + jit_reloc_t ret = jmp(_jit); + jit_patch_here(_jit, zero); + return ret; +} + +static jit_reloc_t +bunltr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return jnae(_jit); +} + +static jit_reloc_t +bunler_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return jna(_jit); +} + +static jit_reloc_t +buneqr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return je(_jit); +} + +static jit_reloc_t +bunger_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r1, r0); + return jna(_jit); +} + +static jit_reloc_t +bungtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r1, r0); + return jnae(_jit); +} + +static jit_reloc_t +bltgtr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return jne(_jit); +} + +static jit_reloc_t +bordr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return jnp(_jit); +} + +static jit_reloc_t +bunordr_f(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomissr(_jit, r0, r1); + return jp(_jit); +} + +static void +ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) +{ + if (sse_address_p(i0)) + movsdmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0); + else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + ldr_d(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); + } +} + +static void +ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r1, r2); + ldr_d(_jit, r0, rn(reg)); + unget_temp_gpr(_jit); +#else + movsdmr(_jit, 0, r1, r2, _SCL1, r0); +#endif +} + +static void +ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) +{ + if (can_sign_extend_int_p(i0)) + movsdmr(_jit, i0, r1, _NOREG, _SCL1, r0); + else { + jit_gpr_t reg = get_temp_gpr(_jit); +#if __X64_32 + addi(rn(reg), r1, i0); + ldr_d(_jit, r0, rn(reg)); +#else + movi(_jit, rn(reg), i0); + ldxr_d(_jit, r0, r1, rn(reg)); +#endif + unget_temp_gpr(_jit); + } +} + +static void +sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) +{ + if (sse_address_p(i0)) + movsdrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1); + else { + jit_gpr_t reg = get_temp_gpr(_jit); + movi(_jit, rn(reg), i0); + str_d(_jit, rn(reg), r0); + unget_temp_gpr(_jit); + } +} + +static void +stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) +{ +#if __X64_32 + jit_gpr_t reg = get_temp_gpr(_jit); + addr(_jit, rn(reg), r0, r1); + str_d(_jit, rn(reg), r2); + unget_temp_gpr(_jit); +#else + movsdrm(_jit, r2, 0, r0, r1, _SCL1); +#endif +} + +static void +stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) +{ + if (can_sign_extend_int_p(i0)) + movsdrm(_jit, r1, i0, r0, _NOREG, _SCL1); + else { + jit_gpr_t reg = get_temp_gpr(_jit); +#if __X64_32 + addi(rn(reg), r0, i0); + str_d(_jit, rn(reg), r1); +#else + movi(_jit, rn(reg), i0); + stxr_d(_jit, rn(reg), r0, r1); +#endif + unget_temp_gpr(_jit); + } +} + +static jit_reloc_t +bltr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r1, r0); + return ja(_jit); +} + +static jit_reloc_t +bler_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r1, r0); + return jae(_jit); +} + +static jit_reloc_t +beqr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + jit_reloc_t pos = jps(_jit); + jit_reloc_t ret = je(_jit); + jit_patch_here(_jit, pos); + return ret; +} + +static jit_reloc_t +bger_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return jae(_jit); +} + +static jit_reloc_t +bgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return ja(_jit); +} + +static jit_reloc_t +bner_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + jit_reloc_t pos = jps(_jit); + jit_reloc_t zero = jzs(_jit); + jit_patch_here(_jit, pos); + jit_reloc_t ret = jmp(_jit); + jit_patch_here(_jit, zero); + return ret; +} + +static jit_reloc_t +bunltr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return jnae(_jit); +} + +static jit_reloc_t +bunler_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return jna(_jit); +} + +static jit_reloc_t +buneqr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return je(_jit); +} + +static jit_reloc_t +bunger_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r1, r0); + return jna(_jit); +} + +static jit_reloc_t +bungtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r1, r0); + return jnae(_jit); +} + +static jit_reloc_t +bltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return jne(_jit); +} + +static jit_reloc_t +bordr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return jnp(_jit); +} + +static jit_reloc_t +bunordr_d(jit_state_t *_jit, int32_t r0, int32_t r1) +{ + ucomisdr(_jit, r0, r1); + return jp(_jit); +} diff --git a/libguile/lightning/lib/jit_x86-x87.c b/libguile/lightning/jit/x86-x87.c index f6fc8831c..e6f8be5f4 100644 --- a/libguile/lightning/lib/jit_x86-x87.c +++ b/libguile/lightning/jit/x86-x87.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2018 Free Software Foundation, Inc. + * Copyright (C) 2012-2017 Free Software Foundation, Inc. * * This file is part of GNU lightning. * @@ -37,10 +37,8 @@ # define x87rx(code, md, rb, ri, ms) _x87rx(_jit, code, md, rb, ri, ms) # define fldcwm(md, rb, ri, ms) x87rx(015, md, rb, ri, ms) # define fstcwm(md, rb, ri, ms) _fstcwm(_jit, md, rb, ri, ms) -#if defined(sun) static void -_fstcwm(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); -#endif +_fstcwm(jit_state_t*, int32_t, int32_t, int32_t, int32_t); # define fldsm(md, rb, ri, ms) x87rx(010, md, rb, ri, ms) # define fstsm(md, rb, ri, ms) x87rx(012, md, rb, ri, ms) # define fldlm(md, rb, ri, ms) x87rx(050, md, rb, ri, ms) @@ -51,8 +49,8 @@ _fstcwm(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); # define fildlm(md, rb, ri, ms) x87rx(030, md, rb,ri, ms) # define fildqm(md, rb, ri, ms) x87rx(075, md, rb,ri, ms) static void -_x87rx(jit_state_t*, jit_int32_t, jit_int32_t, - jit_int32_t, jit_int32_t, jit_int32_t); +_x87rx(jit_state_t*, int32_t, int32_t, + int32_t, int32_t, int32_t); # define x87ri(cc,r0) _x87ri(_jit,cc,r0) # define fchs_() x87ri(014, 0) # define fabs_() x87ri(014, 1) @@ -70,7 +68,7 @@ _x87rx(jit_state_t*, jit_int32_t, jit_int32_t, # define fstpr(r0) x87ri(053, r0) # define fucomir(r0) x87ri(035, r0) # define fucomipr(r0) x87ri(075, r0) -static void _x87ri(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87ri(jit_state_t*, int32_t, int32_t); # define faddr(r0, r1) x87rri(000, r0, r1) # define fmulr(r0, r1) x87rri(001, r0, r1) # define fsubr(r0, r1) x87rri(004, r0, r1) @@ -78,327 +76,327 @@ static void _x87ri(jit_state_t*, jit_int32_t, jit_int32_t); # define fdivr(r0, r1) x87rri(006, r0, r1) # define fdivrr(r0, r1) x87rri(007, r0, r1) # define x87rri(cc, r0, r1) _x87rri(_jit, cc, r0, r1) -static void _x87rri(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87rri(jit_state_t*, int32_t, int32_t, int32_t); # define x87_addr_f(r0, r1, r2) _x87_addr_d(_jit, r0, r1, r2) # define x87_addi_f(r0, r1, i0) _x87_addi_f(_jit, r0, r1, i0) -static void _x87_addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_addr_d(r0, r1, r2) _x87_addr_d(_jit, r0, r1, r2) -static void _x87_addr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_addr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_addi_d(r0, r1, i0) _x87_addi_d(_jit, r0, r1, i0) -static void _x87_addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_subr_f(r0, r1, r2) _x87_subr_d(_jit, r0, r1, r2) # define x87_subi_f(r0, r1, i0) _x87_subi_f(_jit, r0, r1, i0) -static void _x87_subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_subr_d(r0, r1, r2) _x87_subr_d(_jit, r0, r1, r2) -static void _x87_subr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_subr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_subi_d(r0, r1, i0) _x87_subi_d(_jit, r0, r1, i0) -static void _x87_subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_rsbr_f(r0, r1, r2) x87_subr_f(r0, r2, r1) # define x87_rsbi_f(r0, r1, i0) _x87_rsbi_f(_jit, r0, r1, i0) -static void _x87_rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_rsbr_d(r0, r1, r2) x87_subr_d(r0, r2, r1) # define x87_rsbi_d(r0, r1, i0) _x87_rsbi_d(_jit, r0, r1, i0) -static void _x87_rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_mulr_f(r0, r1, r2) _x87_mulr_d(_jit, r0, r1, r2) # define x87_muli_f(r0, r1, i0) _x87_muli_f(_jit, r0, r1, i0) -static void _x87_muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_mulr_d(r0, r1, r2) _x87_mulr_d(_jit, r0, r1, r2) -static void _x87_mulr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_mulr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_muli_d(r0, r1, i0) _x87_muli_d(_jit, r0, r1, i0) -static void _x87_muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_divr_f(r0, r1, r2) _x87_divr_d(_jit, r0, r1, r2) # define x87_divi_f(r0, r1, i0) _x87_divi_f(_jit, r0, r1, i0) -static void _x87_divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_divr_d(r0, r1, r2) _x87_divr_d(_jit, r0, r1, r2) -static void _x87_divr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_divr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_divi_d(r0, r1, i0) _x87_divi_d(_jit, r0, r1, i0) -static void _x87_divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_absr_f(r0, r1) _x87_absr_d(_jit, r0, r1) # define x87_absr_d(r0, r1) _x87_absr_d(_jit, r0, r1) -static void _x87_absr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_absr_d(jit_state_t*, int32_t, int32_t); # define x87_negr_f(r0, r1) _x87_negr_d(_jit, r0, r1) # define x87_negr_d(r0, r1) _x87_negr_d(_jit, r0, r1) -static void _x87_negr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_negr_d(jit_state_t*, int32_t, int32_t); # define x87_sqrtr_f(r0, r1) _x87_sqrtr_d(_jit, r0, r1) # define x87_sqrtr_d(r0, r1) _x87_sqrtr_d(_jit, r0, r1) -static void _x87_sqrtr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_sqrtr_d(jit_state_t*, int32_t, int32_t); # define x87_truncr_f_i(r0, r1) _x87_truncr_d_i(_jit, r0, r1) # define x87_truncr_d_i(r0, r1) _x87_truncr_d_i(_jit, r0, r1) -static void _x87_truncr_d_i(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_truncr_d_i(jit_state_t*, int32_t, int32_t); # if __X64 # define x87_truncr_f_l(r0, r1) _x87_truncr_d_l(_jit, r0, r1) # define x87_truncr_d_l(r0, r1) _x87_truncr_d_l(_jit, r0, r1) -static void _x87_truncr_d_l(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_truncr_d_l(jit_state_t*, int32_t, int32_t); # endif # define x87_extr_f(r0, r1) _x87_extr_d(_jit, r0, r1) # define x87_extr_d(r0, r1) _x87_extr_d(_jit, r0, r1) # define x87_extr_f_d(r0, r1) x87_movr_d(r0, r1) # define x87_extr_d_f(r0, r1) x87_movr_d(r0, r1) -static void _x87_extr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_extr_d(jit_state_t*, int32_t, int32_t); # define x87cmp(code, r0, r1, r2) _x87cmp(_jit, code, r0, r1, r2) static void -_x87cmp(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); +_x87cmp(jit_state_t*, int32_t, int32_t, int32_t, int32_t); # define x87cmp2(code, r0, r1, r2) _x87cmp2(_jit, code, r0, r1, r2) static void -_x87cmp2(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); +_x87cmp2(jit_state_t*, int32_t, int32_t, int32_t, int32_t); # define x87jcc(code, i0, r0, r1) _x87jcc(_jit, code, i0, r0, r1) static jit_word_t -_x87jcc(jit_state_t*, jit_int32_t, jit_word_t, jit_int32_t, jit_int32_t); +_x87jcc(jit_state_t*, int32_t, jit_word_t, int32_t, int32_t); # define x87jcc2(code, i0, r0, r1) _x87jcc2(_jit, code, i0, r0, r1) static jit_word_t -_x87jcc2(jit_state_t*, jit_int32_t, jit_word_t, jit_int32_t, jit_int32_t); +_x87jcc2(jit_state_t*, int32_t, jit_word_t, int32_t, int32_t); #define x87_movi_f(r0,i0) _x87_movi_f(_jit,r0,i0) -static void _x87_movi_f(jit_state_t*, jit_int32_t, jit_float32_t*); +static void _x87_movi_f(jit_state_t*, int32_t, jit_float32_t*); # define x87_ldr_f(r0, r1) _x87_ldr_f(_jit, r0, r1) -static void _x87_ldr_f(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_ldr_f(jit_state_t*, int32_t, int32_t); # define x87_ldi_f(r0, i0) _x87_ldi_f(_jit, r0, i0) -static void _x87_ldi_f(jit_state_t*, jit_int32_t, jit_word_t); +static void _x87_ldi_f(jit_state_t*, int32_t, jit_word_t); # define x87_ldxr_f(r0, r1, r2) _x87_ldxr_f(_jit, r0, r1, r2) -static void _x87_ldxr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_ldxr_f(jit_state_t*, int32_t, int32_t, int32_t); # define x87_ldxi_f(r0, r1, i0) _x87_ldxi_f(_jit, r0, r1, i0) -static void _x87_ldxi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _x87_ldxi_f(jit_state_t*, int32_t, int32_t, jit_word_t); # define x87_str_f(r0, r1) _x87_str_f(_jit, r0, r1) -static void _x87_str_f(jit_state_t*,jit_int32_t,jit_int32_t); +static void _x87_str_f(jit_state_t*,int32_t,int32_t); # define x87_sti_f(i0, r0) _x87_sti_f(_jit, i0, r0) -static void _x87_sti_f(jit_state_t*,jit_word_t, jit_int32_t); +static void _x87_sti_f(jit_state_t*,jit_word_t, int32_t); # define x87_stxr_f(r0, r1, r2) _x87_stxr_f(_jit, r0, r1, r2) -static void _x87_stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _x87_stxr_f(jit_state_t*,int32_t,int32_t,int32_t); # define x87_stxi_f(i0, r0, r1) _x87_stxi_f(_jit, i0, r0, r1) -static void _x87_stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _x87_stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t); # define x87_ltr_f(r0, r1, r2) x87cmp(X86_CC_A, r0, r2, r1) # define x87_lti_f(r0, r1, i0) _x87_lti_f(_jit, r0, r1, i0) -static void _x87_lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ler_f(r0, r1, r2) x87cmp(X86_CC_AE, r0, r2, r1) # define x87_lei_f(r0, r1, i0) _x87_lei_f(_jit, r0, r1, i0) -static void _x87_lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_eqr_f(r0, r1, r2) x87_eqr_d(r0, r2, r1) # define x87_eqi_f(r0, r1, i0) _x87_eqi_f(_jit, r0, r1, i0) -static void _x87_eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ger_f(r0, r1, r2) x87cmp(X86_CC_AE, r0, r1, r2) # define x87_gei_f(r0, r1, i0) _x87_gei_f(_jit, r0, r1, i0) -static void _x87_gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_gtr_f(r0, r1, r2) x87cmp(X86_CC_A, r0, r1, r2) # define x87_gti_f(r0, r1, i0) _x87_gti_f(_jit, r0, r1, i0) -static void _x87_gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ner_f(r0, r1, r2) x87_ner_d(r0, r2, r1) # define x87_nei_f(r0, r1, i0) _x87_nei_f(_jit, r0, r1, i0) -static void _x87_nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_unltr_f(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r1, r2) # define x87_unlti_f(r0, r1, i0) _x87_unlti_f(_jit, r0, r1, i0) -static void _x87_unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_unler_f(r0, r1, r2) x87cmp(X86_CC_NA, r0, r1, r2) # define x87_unlei_f(r0, r1, i0) _x87_unlei_f(_jit, r0, r1, i0) -static void _x87_unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_uneqr_f(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r2) # define x87_uneqi_f(r0, r1, i0) _x87_uneqi_f(_jit, r0, r1, i0) -static void _x87_uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_unger_f(r0, r1, r2) x87cmp(X86_CC_NA, r0, r2, r1) # define x87_ungei_f(r0, r1, i0) _x87_ungei_f(_jit, r0, r1, i0) -static void _x87_ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ungtr_f(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r2, r1) # define x87_ungti_f(r0, r1, i0) _x87_ungti_f(_jit, r0, r1, i0) -static void _x87_ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ltgtr_f(r0, r1, r2) x87_ltgtr_d(r0, r1, r2) # define x87_ltgti_f(r0, r1, i0) _x87_ltgti_f(_jit, r0, r1, i0) -static void _x87_ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ordr_f(r0, r1, r2) x87cmp2(X86_CC_NP, r0, r2, r1) # define x87_ordi_f(r0, r1, i0) _x87_ordi_f(_jit, r0, r1, i0) -static void _x87_ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_unordr_f(r0, r1, r2) x87cmp2(X86_CC_P, r0, r2, r1) # define x87_unordi_f(r0, r1, i0) _x87_unordi_f(_jit, r0, r1, i0) -static void _x87_unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); +static void _x87_unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*); # define x87_ltr_d(r0, r1, r2) x87cmp(X86_CC_A, r0, r2, r1) # define x87_lti_d(r0, r1, i0) _x87_lti_d(_jit, r0, r1, i0) -static void _x87_lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_ler_d(r0, r1, r2) x87cmp(X86_CC_AE, r0, r2, r1) # define x87_lei_d(r0, r1, i0) _x87_lei_d(_jit, r0, r1, i0) -static void _x87_lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_eqr_d(r0, r1, r2) _x87_eqr_d(_jit, r0, r2, r1) -static void _x87_eqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_eqr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_eqi_d(r0, r1, i0) _x87_eqi_d(_jit, r0, r1, i0) -static void _x87_eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_ger_d(r0, r1, r2) x87cmp(X86_CC_AE, r0, r1, r2) # define x87_gei_d(r0, r1, i0) _x87_gei_d(_jit, r0, r1, i0) -static void _x87_gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_gtr_d(r0, r1, r2) x87cmp(X86_CC_A, r0, r1, r2) # define x87_gti_d(r0, r1, i0) _x87_gti_d(_jit, r0, r1, i0) -static void _x87_gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_ner_d(r0, r1, r2) _x87_ner_d(_jit, r0, r2, r1) -static void _x87_ner_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_ner_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_nei_d(r0, r1, i0) _x87_nei_d(_jit, r0, r1, i0) -static void _x87_nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_unltr_d(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r1, r2) # define x87_unlti_d(r0, r1, i0) _x87_unlti_d(_jit, r0, r1, i0) -static void _x87_unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_unler_d(r0, r1, r2) x87cmp(X86_CC_NA, r0, r1, r2) # define x87_unlei_d(r0, r1, i0) _x87_unlei_d(_jit, r0, r1, i0) -static void _x87_unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_uneqr_d(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r2) # define x87_uneqi_d(r0, r1, i0) _x87_uneqi_d(_jit, r0, r1, i0) -static void _x87_uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_unger_d(r0, r1, r2) x87cmp(X86_CC_NA, r0, r2, r1) # define x87_ungei_d(r0, r1, i0) _x87_ungei_d(_jit, r0, r1, i0) -static void _x87_ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_ungtr_d(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r2, r1) # define x87_ungti_d(r0, r1, i0) _x87_ungti_d(_jit, r0, r1, i0) -static void _x87_ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_ltgtr_d(r0, r1, r2) _x87_ltgtr_d(_jit, r0, r1, r2) -static void _x87_ltgtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_ltgtr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_ltgti_d(r0, r1, i0) _x87_ltgti_d(_jit, r0, r1, i0) -static void _x87_ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_ordr_d(r0, r1, r2) x87cmp2(X86_CC_NP, r0, r2, r1) # define x87_ordi_d(r0, r1, i0) _x87_ordi_d(_jit, r0, r1, i0) -static void _x87_ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); # define x87_unordr_d(r0, r1, r2) x87cmp2(X86_CC_P, r0, r2, r1) # define x87_unordi_d(r0, r1, i0) _x87_unordi_d(_jit, r0, r1, i0) -static void _x87_unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); +static void _x87_unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*); #define x87_movr_f(r0,r1) _x87_movr_d(_jit,r0,r1) #define x87_movr_d(r0,r1) _x87_movr_d(_jit,r0,r1) -static void _x87_movr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_movr_d(jit_state_t*, int32_t, int32_t); #define x87_movi_d(r0,i0) _x87_movi_d(_jit,r0,i0) -static void _x87_movi_d(jit_state_t*, jit_int32_t, jit_float64_t*); +static void _x87_movi_d(jit_state_t*, int32_t, jit_float64_t*); # define x87_ldr_d(r0, r1) _x87_ldr_d(_jit, r0, r1) -static void _x87_ldr_d(jit_state_t*, jit_int32_t, jit_int32_t); +static void _x87_ldr_d(jit_state_t*, int32_t, int32_t); # define x87_ldi_d(r0, i0) _x87_ldi_d(_jit, r0, i0) -static void _x87_ldi_d(jit_state_t*, jit_int32_t, jit_word_t); +static void _x87_ldi_d(jit_state_t*, int32_t, jit_word_t); # define x87_ldxr_d(r0, r1, r2) _x87_ldxr_d(_jit, r0, r1, r2) -static void _x87_ldxr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); +static void _x87_ldxr_d(jit_state_t*, int32_t, int32_t, int32_t); # define x87_ldxi_d(r0, r1, i0) _x87_ldxi_d(_jit, r0, r1, i0) -static void _x87_ldxi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); +static void _x87_ldxi_d(jit_state_t*, int32_t, int32_t, jit_word_t); # define x87_str_d(r0, r1) _x87_str_d(_jit, r0, r1) -static void _x87_str_d(jit_state_t*,jit_int32_t,jit_int32_t); +static void _x87_str_d(jit_state_t*,int32_t,int32_t); # define x87_sti_d(i0, r0) _x87_sti_d(_jit, i0, r0) -static void _x87_sti_d(jit_state_t*,jit_word_t,jit_int32_t); +static void _x87_sti_d(jit_state_t*,jit_word_t,int32_t); # define x87_stxr_d(r0, r1, r2) _x87_stxr_d(_jit, r0, r1, r2) -static void _x87_stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); +static void _x87_stxr_d(jit_state_t*,int32_t,int32_t,int32_t); # define x87_stxi_d(i0, r0, r1) _x87_stxi_d(_jit, i0, r0, r1) -static void _x87_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); +static void _x87_stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t); # define x87_bltr_f(i0, r0, r1) x87jcc(X86_CC_A, i0, r1, r0) # define x87_blti_f(i0, r0, i1) _x87_blti_f(_jit, i0, r0, i1) static jit_word_t -_x87_blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_blti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bler_f(i0, r0, r1) x87jcc(X86_CC_AE, i0, r1, r0) # define x87_blei_f(i0, r0, i1) _x87_blei_f(_jit, i0, r0, i1) static jit_word_t -_x87_blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_blei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_beqr_f(i0, r0, r1) _x87_beqr_d(_jit, i0, r0, r1) # define x87_beqi_f(i0, r0, i1) _x87_beqi_f(_jit, i0, r0, i1) static jit_word_t -_x87_beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_beqi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bger_f(i0, r0, r1) x87jcc(X86_CC_AE, i0, r0, r1) # define x87_bgei_f(i0, r0, i1) _x87_bgei_f(_jit, i0, r0, i1) static jit_word_t -_x87_bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bgei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bgtr_f(i0, r0, r1) x87jcc(X86_CC_A, i0, r0, r1) # define x87_bgti_f(i0, r0, i1) _x87_bgti_f(_jit, i0, r0, i1) static jit_word_t -_x87_bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bgti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bner_f(i0, r0, r1) _x87_bner_d(_jit, i0, r0, r1) # define x87_bnei_f(i0, r0, i1) _x87_bnei_f(_jit, i0, r0, i1) static jit_word_t -_x87_bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bnei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bunltr_f(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r0, r1) # define x87_bunlti_f(i0, r0, i1) _x87_bunlti_f(_jit, i0, r0, i1) static jit_word_t -_x87_bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bunlti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bunler_f(i0, r0, r1) x87jcc(X86_CC_NA, i0, r0, r1) # define x87_bunlei_f(i0, r0, i1) _x87_bunlei_f(_jit, i0, r0, i1) static jit_word_t -_x87_bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bunlei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_buneqr_f(i0, r0, r1) x87jcc2(X86_CC_E, i0, r0, r1) # define x87_buneqi_f(i0, r0, i1) _x87_buneqi_f(_jit, i0, r0, i1) static jit_word_t -_x87_buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_buneqi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bunger_f(i0, r0, r1) x87jcc(X86_CC_NA, i0, r1, r0) # define x87_bungei_f(i0, r0, i1) _x87_bungei_f(_jit, i0, r0, i1) static jit_word_t -_x87_bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bungei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bungtr_f(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r1, r0) # define x87_bungti_f(i0, r0, i1) _x87_bungti_f(_jit, i0, r0, i1) static jit_word_t -_x87_bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bungti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bltgtr_f(i0, r0, r1) x87jcc2(X86_CC_NE, i0, r0, r1) # define x87_bltgti_f(i0, r0, i1) _x87_bltgti_f(_jit, i0, r0, i1) static jit_word_t -_x87_bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bltgti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bordr_f(i0, r0, r1) x87jcc2(X86_CC_NP, i0, r0, r1) # define x87_bordi_f(i0, r0, i1) _x87_bordi_f(_jit, i0, r0, i1) static jit_word_t -_x87_bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bordi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bunordr_f(i0, r0, r1) x87jcc2(X86_CC_P, i0, r0, r1) # define x87_bunordi_f(i0, r0, i1) _x87_bunordi_f(_jit, i0, r0, i1) static jit_word_t -_x87_bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); +_x87_bunordi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*); # define x87_bltr_d(i0, r0, r1) x87jcc(X86_CC_A, i0, r1, r0) # define x87_blti_d(i0, r0, i1) _x87_blti_d(_jit, i0, r0, i1) static jit_word_t -_x87_blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_blti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bler_d(i0, r0, r1) x87jcc(X86_CC_AE, i0, r1, r0) # define x87_blei_d(i0, r0, i1) _x87_blei_d(_jit, i0, r0, i1) static jit_word_t -_x87_blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_blei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_beqr_d(i0, r0, r1) _x87_beqr_d(_jit, i0, r0, r1) static jit_word_t -_x87_beqr_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); +_x87_beqr_d(jit_state_t*, jit_word_t, int32_t, int32_t); # define x87_beqi_d(i0, r0, i1) _x87_beqi_d(_jit, i0, r0, i1) static jit_word_t -_x87_beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_beqi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bger_d(i0, r0, r1) x87jcc(X86_CC_AE, i0, r0, r1) # define x87_bgei_d(i0, r0, i1) _x87_bgei_d(_jit, i0, r0, i1) static jit_word_t -_x87_bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bgei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bgtr_d(i0, r0, r1) x87jcc(X86_CC_A, i0, r0, r1) # define x87_bgti_d(i0, r0, i1) _x87_bgti_d(_jit, i0, r0, i1) static jit_word_t -_x87_bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bgti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bner_d(i0, r0, r1) _x87_bner_d(_jit, i0, r0, r1) static jit_word_t -_x87_bner_d(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); +_x87_bner_d(jit_state_t*, jit_word_t, int32_t, int32_t); # define x87_bnei_d(i0, r0, i1) _x87_bnei_d(_jit, i0, r0, i1) static jit_word_t -_x87_bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bnei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bunltr_d(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r0, r1) # define x87_bunlti_d(i0, r0, i1) _x87_bunlti_d(_jit, i0, r0, i1) static jit_word_t -_x87_bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bunlti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bunler_d(i0, r0, r1) x87jcc(X86_CC_NA, i0, r0, r1) # define x87_bunlei_d(i0, r0, i1) _x87_bunlei_d(_jit, i0, r0, i1) static jit_word_t -_x87_bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bunlei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_buneqr_d(i0, r0, r1) x87jcc2(X86_CC_E, i0, r0, r1) # define x87_buneqi_d(i0, r0, i1) _x87_buneqi_d(_jit, i0, r0, i1) static jit_word_t -_x87_buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_buneqi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bunger_d(i0, r0, r1) x87jcc(X86_CC_NA, i0, r1, r0) # define x87_bungei_d(i0, r0, i1) _x87_bungei_d(_jit, i0, r0, i1) static jit_word_t -_x87_bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bungei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bungtr_d(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r1, r0) # define x87_bungti_d(i0, r0, i1) _x87_bungti_d(_jit, i0, r0, i1) static jit_word_t -_x87_bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bungti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bltgtr_d(i0, r0, r1) x87jcc2(X86_CC_NE, i0, r0, r1) # define x87_bltgti_d(i0, r0, i1) _x87_bltgti_d(_jit, i0, r0, i1) static jit_word_t -_x87_bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bltgti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bordr_d(i0, r0, r1) x87jcc2(X86_CC_NP, i0, r0, r1) # define x87_bordi_d(i0, r0, i1) _x87_bordi_d(_jit, i0, r0, i1) static jit_word_t -_x87_bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bordi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); # define x87_bunordr_d(i0, r0, r1) x87jcc2(X86_CC_P, i0, r0, r1) # define x87_bunordi_d(i0, r0, i1) _x87_bunordi_d(_jit, i0, r0, i1) static jit_word_t -_x87_bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); +_x87_bunordi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*); #endif #if CODE # define fpr_opi(name, type, size) \ static void \ _x87_##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ + int32_t r0, int32_t r1, \ jit_float##size##_t *i0) \ { \ - jit_int32_t reg = jit_get_reg(jit_class_fpr); \ + int32_t reg = jit_get_reg(jit_class_fpr); \ assert(jit_x87_reg_p(reg)); \ x87_movi_##type(rn(reg), i0); \ x87_##name##r_##type(r0, r1, rn(reg)); \ @@ -407,11 +405,11 @@ _x87_##name##i_##type(jit_state_t *_jit, \ # define fpr_bopi(name, type, size) \ static jit_word_t \ _x87_b##name##i_##type(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, \ + jit_word_t i0, int32_t r0, \ jit_float##size##_t *i1) \ { \ jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr| \ + int32_t reg = jit_get_reg(jit_class_fpr| \ jit_class_nospill); \ assert(jit_x87_reg_p(reg)); \ x87_movi_##type(rn(reg), i1); \ @@ -424,20 +422,18 @@ _x87_b##name##i_##type(jit_state_t *_jit, \ # define dopi(name) fpr_opi(name, d, 64) # define dbopi(name) fpr_bopi(name, d, 64) -#if defined(sun) static void -_fstcwm(jit_state_t *_jit, jit_int32_t md, - jit_int32_t rb, jit_int32_t ri, jit_int32_t ms) +_fstcwm(jit_state_t *_jit, int32_t md, + int32_t rb, int32_t ri, int32_t ms) { ic(0x9b); rex(0, 1, rb, ri, _NOREG); x87rx(017, md, rb, ri, ms); } -#endif static void -_x87rx(jit_state_t *_jit, jit_int32_t code, jit_int32_t md, - jit_int32_t rb, jit_int32_t ri, jit_int32_t ms) +_x87rx(jit_state_t *_jit, int32_t code, int32_t md, + int32_t rb, int32_t ri, int32_t ms) { rex(0, 1, rb, ri, _NOREG); ic(0xd8 | (code >> 3)); @@ -445,14 +441,14 @@ _x87rx(jit_state_t *_jit, jit_int32_t code, jit_int32_t md, } static void -_x87ri(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0) +_x87ri(jit_state_t *_jit, int32_t code, int32_t r0) { ic(0xd8 | (code >> 3)); mrm(0x03, (code & 7), r0); } static void -_x87rri(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0, jit_int32_t r1) +_x87rri(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1) { if (r1 == _ST0_REGNO) x87ri(code | 040, r0); @@ -469,7 +465,7 @@ fopi(mul) fopi(div) static void -_x87_addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_addr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r1) { if (r2 == _ST0_REGNO) @@ -503,7 +499,7 @@ _x87_addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(add) static void -_x87_subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r1) { if (r2 == _ST0_REGNO) @@ -539,7 +535,7 @@ dopi(sub) dopi(rsb) static void -_x87_mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_mulr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r1) { if (r2 == _ST0_REGNO) @@ -573,7 +569,7 @@ _x87_mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(mul) static void -_x87_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r0 == r1) { if (r2 == _ST0_REGNO) @@ -607,7 +603,7 @@ _x87_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) dopi(div) static void -_x87_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_absr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 == r1) { if (r1 == _ST0_REGNO) @@ -626,7 +622,7 @@ _x87_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_negr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 == r1) { if (r1 == _ST0_REGNO) @@ -645,7 +641,7 @@ _x87_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87_sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_sqrtr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 == r1) { if (r1 == _ST0_REGNO) @@ -664,7 +660,7 @@ _x87_sqrtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1) { #if defined(sun) /* for the sake of passing test cases in x87 mode, otherwise only sse @@ -694,7 +690,7 @@ _x87_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # if __X64 static void -_x87_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1) { fldr(r1); fisttpqm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1); @@ -703,7 +699,7 @@ _x87_truncr_d_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) # endif static void -_x87_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { stxi(CVT_OFFSET, _RBP_REGNO, r1); # if __X32 @@ -715,11 +711,11 @@ _x87_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87cmp(jit_state_t *_jit, jit_int32_t code, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87cmp(jit_state_t *_jit, int32_t code, + int32_t r0, int32_t r1, int32_t r2) { jit_bool_t rc; - jit_int32_t reg; + int32_t reg; if ((rc = reg8_p(r0))) reg = r0; else { @@ -739,12 +735,12 @@ _x87cmp(jit_state_t *_jit, jit_int32_t code, } static void -_x87cmp2(jit_state_t *_jit, jit_int32_t code, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87cmp2(jit_state_t *_jit, int32_t code, + int32_t r0, int32_t r1, int32_t r2) { jit_bool_t rc; - jit_int32_t reg; - jit_int32_t f1, f2; + int32_t reg; + int32_t f1, f2; if (r2 == _ST0_REGNO) f1 = r2, f2 = r1; else f1 = r1, f2 = r2; if ((rc = reg8_p(r0))) @@ -766,8 +762,8 @@ _x87cmp2(jit_state_t *_jit, jit_int32_t code, } static jit_word_t -_x87jcc(jit_state_t *_jit, jit_int32_t code, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_x87jcc(jit_state_t *_jit, int32_t code, + jit_word_t i0, int32_t r0, int32_t r1) { if (r0 == _ST0_REGNO) fucomir(r1); @@ -780,10 +776,10 @@ _x87jcc(jit_state_t *_jit, jit_int32_t code, } static jit_word_t -_x87jcc2(jit_state_t *_jit, jit_int32_t code, - jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_x87jcc2(jit_state_t *_jit, int32_t code, + jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t f0, f1; + int32_t f0, f1; if (r1 == _ST0_REGNO) f0 = r1, f1 = r0; else f0 = r0, f1 = r1; if (f0 == _ST0_REGNO) @@ -826,13 +822,13 @@ fbopi(ord) fbopi(unord) static void -_x87_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) +_x87_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0) { union { - jit_int32_t i; + int32_t i; jit_float32_t f; } data; - jit_int32_t reg; + int32_t reg; data.f = *i0; if (data.f == 0.0 && !(data.i & 0x80000000)) @@ -865,16 +861,16 @@ _x87_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) } static void -_x87_ldr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1) { fldsm(0, r1, _NOREG, _SCL1); fstpr(r0 + 1); } static void -_x87_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_x87_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (x87_address_p(i0)) { fldsm(i0, _NOREG, _NOREG, _SCL1); fstpr(r0 + 1); @@ -888,10 +884,10 @@ _x87_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_x87_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { #if __X64_32 - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); x87_ldr_f(r0, rn(reg)); @@ -903,9 +899,9 @@ _x87_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_x87_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_x87_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_int_p(i0)) { fldsm(i0, r1, _NOREG, _SCL1); fstpr(r0 + 1); @@ -924,7 +920,7 @@ _x87_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_x87_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_str_f(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r1 == _ST0_REGNO) fstsm(0, r0, _NOREG, _SCL1); @@ -936,9 +932,9 @@ _x87_str_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_x87_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (!x87_address_p(i0)) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -955,10 +951,10 @@ _x87_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_x87_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { #if __X64_32 - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); x87_str_f(rn(reg), r2); @@ -975,9 +971,9 @@ _x87_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_x87_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_x87_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (!can_sign_extend_int_p(i0)) { reg = jit_get_reg(jit_class_gpr); #if __X64_32 @@ -999,7 +995,7 @@ _x87_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) } static void -_x87_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r0 != r1) { if (r1 == _ST0) @@ -1016,14 +1012,14 @@ _x87_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) +_x87_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0) { union { - jit_int32_t ii[2]; + int32_t ii[2]; jit_word_t w; jit_float64_t d; } data; - jit_int32_t reg; + int32_t reg; data.d = *i0; if (data.d == 0.0 && !(data.ii[1] & 0x80000000)) @@ -1066,11 +1062,11 @@ dopi(lt) dopi(le) static void -_x87_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_eqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_bool_t rc; jit_word_t jp_code; - jit_int32_t reg, f1, f2; + int32_t reg, f1, f2; if (r2 == _ST0_REGNO) f1 = r2, f2 = r1; else f1 = r1, f2 = r2; if ((rc = reg8_p(r0))) @@ -1099,11 +1095,11 @@ dopi(ge) dopi(gt) static void -_x87_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { jit_bool_t rc; jit_word_t jp_code; - jit_int32_t reg, f1, f2; + int32_t reg, f1, f2; if (r2 == _ST0_REGNO) f1 = r2, f2 = r1; else f1 = r1, f2 = r2; if ((rc = reg8_p(r0))) @@ -1135,7 +1131,7 @@ dopi(unge) dopi(ungt) static void -_x87_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { if (r1 == r2) movi(r0, 1); @@ -1148,16 +1144,16 @@ dopi(ord) dopi(unord) static void -_x87_ldr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_ldr_d(jit_state_t *_jit, int32_t r0, int32_t r1) { fldlm(0, r1, _NOREG, _SCL1); fstpr(r0 + 1); } static void -_x87_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) +_x87_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (x87_address_p(i0)) { fldlm(i0, _NOREG, _NOREG, _SCL1); fstpr(r0 + 1); @@ -1171,10 +1167,10 @@ _x87_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) } static void -_x87_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { #if __X64_32 - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r1, r2); x87_ldr_d(r0, rn(reg)); @@ -1186,9 +1182,9 @@ _x87_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_x87_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) +_x87_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0) { - jit_int32_t reg; + int32_t reg; if (can_sign_extend_int_p(i0)) { fldlm(i0, r1, _NOREG, _SCL1); fstpr(r0 + 1); @@ -1207,7 +1203,7 @@ _x87_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) } static void -_x87_str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) +_x87_str_d(jit_state_t *_jit, int32_t r0, int32_t r1) { if (r1 == _ST0_REGNO) fstlm(0, r0, _NOREG, _SCL1); @@ -1219,9 +1215,9 @@ _x87_str_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) } static void -_x87_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) +_x87_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0) { - jit_int32_t reg; + int32_t reg; if (!x87_address_p(i0)) { reg = jit_get_reg(jit_class_gpr); movi(rn(reg), i0); @@ -1238,10 +1234,10 @@ _x87_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) } static void -_x87_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) +_x87_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2) { #if __X64_32 - jit_int32_t reg; + int32_t reg; reg = jit_get_reg(jit_class_gpr); addr(rn(reg), r0, r1); x87_str_d(rn(reg), r2); @@ -1258,9 +1254,9 @@ _x87_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) } static void -_x87_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_x87_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t reg; + int32_t reg; if (!can_sign_extend_int_p(i0)) { reg = jit_get_reg(jit_class_gpr); #if __X64_32 @@ -1285,9 +1281,9 @@ dbopi(lt) dbopi(le) static jit_word_t -_x87_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_x87_beqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t f0, f1; + int32_t f0, f1; jit_word_t jp_code; if (r1 == _ST0_REGNO) f0 = r1, f1 = r0; else f0 = r0, f1 = r1; @@ -1308,9 +1304,9 @@ dbopi(ge) dbopi(gt) static jit_word_t -_x87_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) +_x87_bner_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1) { - jit_int32_t f0, f1; + int32_t f0, f1; jit_word_t jp_code; jit_word_t jz_code; if (r1 == _ST0_REGNO) f0 = r1, f1 = r0; diff --git a/libguile/lightning/jit/x86.c b/libguile/lightning/jit/x86.c new file mode 100644 index 000000000..16bb5187a --- /dev/null +++ b/libguile/lightning/jit/x86.c @@ -0,0 +1,832 @@ +/* + * Copyright (C) 2012-2019 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + */ + +#if __X32 +# define jit_arg_reg_p(i) 0 +# define jit_arg_f_reg_p(i) 0 +# define stack_framesize 20 +# define stack_adjust 12 +# define CVT_OFFSET -12 +# define REAL_WORDSIZE 4 +# define va_gp_increment 4 +# define va_fp_increment 8 +#else +# if __CYGWIN__ +# define jit_arg_reg_p(i) ((i) >= 0 && (i) < 4) +# define jit_arg_f_reg_p(i) jit_arg_reg_p(i) +# define stack_framesize 152 +# define va_fp_increment 8 +# else +# define jit_arg_reg_p(i) ((i) >= 0 && (i) < 6) +# define jit_arg_f_reg_p(i) ((i) >= 0 && (i) < 8) +# define stack_framesize 56 +# define first_gp_argument rdi +# define first_gp_offset offsetof(jit_va_list_t, rdi) +# define first_gp_from_offset(gp) ((gp) / 8) +# define last_gp_argument r9 +# define va_gp_max_offset \ + (offsetof(jit_va_list_t, r9) - offsetof(jit_va_list_t, rdi) + 8) +# define first_fp_argument xmm0 +# define first_fp_offset offsetof(jit_va_list_t, xmm0) +# define last_fp_argument xmm7 +# define va_fp_max_offset \ + (offsetof(jit_va_list_t, xmm7) - offsetof(jit_va_list_t, rdi) + 16) +# define va_fp_increment 16 +# define first_fp_from_offset(fp) (((fp) - va_gp_max_offset) / 16) +# endif +# define va_gp_increment 8 +# define stack_adjust 8 +# define CVT_OFFSET -8 +# define REAL_WORDSIZE 8 +#endif + +/* + * Types + */ +#if __X32 || __CYGWIN__ +typedef jit_pointer_t jit_va_list_t; +#else +typedef struct jit_va_list { + int32_t gpoff; + int32_t fpoff; + jit_pointer_t over; + jit_pointer_t save; + /* Declared explicitly as int64 for the x32 abi */ + int64_t rdi; + int64_t rsi; + int64_t rdx; + int64_t rcx; + int64_t r8; + int64_t r9; + jit_float64_t xmm0; + jit_float64_t _up0; + jit_float64_t xmm1; + jit_float64_t _up1; + jit_float64_t xmm2; + jit_float64_t _up2; + jit_float64_t xmm3; + jit_float64_t _up3; + jit_float64_t xmm4; + jit_float64_t _up4; + jit_float64_t xmm5; + jit_float64_t _up5; + jit_float64_t xmm6; + jit_float64_t _up6; + jit_float64_t xmm7; + jit_float64_t _up7; +} jit_va_list_t; +#endif + +jit_cpu_t jit_cpu; +static const jit_register_t _rvs[] = { +#if __X32 + { rc(gpr) | rc(rg8) | 0, "%eax" }, + { rc(gpr) | rc(rg8) | 1, "%ecx" }, + { rc(gpr) | rc(rg8) | 2, "%edx" }, + { rc(sav) | rc(rg8) | rc(gpr) | 3, "%ebx" }, + { rc(sav) | rc(gpr) | 6, "%esi" }, + { rc(sav) | rc(gpr) | 7, "%edi" }, + { rc(sav) | 4, "%esp" }, + { rc(sav) | 5, "%ebp" }, + { rc(xpr) | rc(fpr) | 0, "%xmm0" }, + { rc(xpr) | rc(fpr) | 1, "%xmm1" }, + { rc(xpr) | rc(fpr) | 2, "%xmm2" }, + { rc(xpr) | rc(fpr) | 3, "%xmm3" }, + { rc(xpr) | rc(fpr) | 4, "%xmm4" }, + { rc(xpr) | rc(fpr) | 5, "%xmm5" }, + { rc(xpr) | rc(fpr) | 6, "%xmm6" }, + { rc(xpr) | rc(fpr) | 7, "%xmm7" }, +#elif __CYGWIN__ + { rc(gpr) | rc(rg8) | 0, "%rax" }, + { rc(gpr) | rc(rg8) | rc(rg8) | 10, "%r10" }, + { rc(gpr) | rc(rg8) | rc(rg8) | 11, "%r11" }, + { rc(sav) | rc(rg8) | rc(gpr) | 3, "%rbx" }, + { rc(sav) | rc(gpr) | 7, "%rdi" }, + { rc(sav) | rc(gpr) | 6, "%rsi" }, + { rc(sav) | rc(gpr) | 12, "%r12" }, + { rc(sav) | rc(gpr) | 13, "%r13" }, + { rc(sav) | rc(gpr) | 14, "%r14" }, + { rc(sav) | rc(gpr) | 15, "%r15" }, + { rc(arg) | rc(rg8) | rc(gpr) | 9, "%r9" }, + { rc(arg) | rc(rg8) | rc(gpr) | 8, "%r8" }, + { rc(arg) | rc(rg8) | rc(gpr) | 2, "%rdx" }, + { rc(arg) | rc(rg8) | rc(gpr) | 1, "%rcx" }, + { rc(sav) | 4, "%rsp" }, + { rc(sav) | 5, "%rbp" }, + { rc(xpr) | rc(fpr) | 4, "%xmm4" }, + { rc(xpr) | rc(fpr) | 5, "%xmm5" }, + { rc(sav) | rc(xpr) | rc(fpr) | 6, "%xmm6" }, + { rc(sav) | rc(xpr) | rc(fpr) | 7, "%xmm7" }, + { rc(sav) | rc(xpr) | rc(fpr) | 8, "%xmm8" }, + { rc(sav) | rc(xpr) | rc(fpr) | 9, "%xmm9" }, + { rc(sav) | rc(xpr) | rc(fpr) | 10, "%xmm10" }, + { rc(sav) | rc(xpr) | rc(fpr) | 11, "%xmm11" }, + { rc(sav) | rc(xpr) | rc(fpr) | 12, "%xmm12" }, + { rc(sav) | rc(xpr) | rc(fpr) | 13, "%xmm13" }, + { rc(sav) | rc(xpr) | rc(fpr) | 14, "%xmm14" }, + { rc(sav) | rc(xpr) | rc(fpr) | 15, "%xmm15" }, + { rc(xpr) | rc(arg) | rc(fpr) | 3, "%xmm3" }, + { rc(xpr) | rc(arg) | rc(fpr) | 2, "%xmm2" }, + { rc(xpr) | rc(arg) | rc(fpr) | 1, "%xmm1" }, + { rc(xpr) | rc(arg) | rc(fpr) | 0, "%xmm0" }, +#else + /* %rax is a pseudo flag argument for varargs functions */ + { rc(arg) | rc(gpr) | rc(rg8) | 0, "%rax" }, + { rc(gpr) | rc(rg8) | 10, "%r10" }, + { rc(gpr) | rc(rg8) | 11, "%r11" }, + { rc(gpr) | rc(rg8) | 12, "%r12" }, + { rc(sav) | rc(rg8) | rc(gpr) | 3, "%rbx" }, + { rc(sav) | rc(rg8) | rc(gpr) | 13, "%r13" }, + { rc(sav) | rc(rg8) | rc(gpr) | 14, "%r14" }, + { rc(sav) | rc(rg8) | rc(gpr) | 15, "%r15" }, + { rc(arg) | rc(rg8) | rc(gpr) | 9, "%r9" }, + { rc(arg) | rc(rg8) | rc(gpr) | 8, "%r8" }, + { rc(arg) | rc(rg8) | rc(gpr) | 1, "%rcx" }, + { rc(arg) | rc(rg8) | rc(gpr) | 2, "%rdx" }, + { rc(arg) | rc(rg8) | rc(gpr) | 6, "%rsi" }, + { rc(arg) | rc(rg8) | rc(gpr) | 7, "%rdi" }, + { rc(sav) | 4, "%rsp" }, + { rc(sav) | 5, "%rbp" }, + { rc(xpr) | rc(fpr) | 8, "%xmm8" }, + { rc(xpr) | rc(fpr) | 9, "%xmm9" }, + { rc(xpr) | rc(fpr) | 10, "%xmm10" }, + { rc(xpr) | rc(fpr) | 11, "%xmm11" }, + { rc(xpr) | rc(fpr) | 12, "%xmm12" }, + { rc(xpr) | rc(fpr) | 13, "%xmm13" }, + { rc(xpr) | rc(fpr) | 14, "%xmm14" }, + { rc(xpr) | rc(fpr) | 15, "%xmm15" }, + { rc(xpr) | rc(arg) | rc(fpr) | 7, "%xmm7" }, + { rc(xpr) | rc(arg) | rc(fpr) | 6, "%xmm6" }, + { rc(xpr) | rc(arg) | rc(fpr) | 5, "%xmm5" }, + { rc(xpr) | rc(arg) | rc(fpr) | 4, "%xmm4" }, + { rc(xpr) | rc(arg) | rc(fpr) | 3, "%xmm3" }, + { rc(xpr) | rc(arg) | rc(fpr) | 2, "%xmm2" }, + { rc(xpr) | rc(arg) | rc(fpr) | 1, "%xmm1" }, + { rc(xpr) | rc(arg) | rc(fpr) | 0, "%xmm0" }, +#endif + { _NOREG, "<none>" }, +}; + +#include "x86-cpu.c" +#include "x86-sse.c" + +jit_bool_t +jit_get_cpu(void) +{ + union { + struct { + uint32_t sse3 : 1; + uint32_t pclmulqdq : 1; + uint32_t dtes64 : 1; /* amd reserved */ + uint32_t monitor : 1; + uint32_t ds_cpl : 1; /* amd reserved */ + uint32_t vmx : 1; /* amd reserved */ + uint32_t smx : 1; /* amd reserved */ + uint32_t est : 1; /* amd reserved */ + uint32_t tm2 : 1; /* amd reserved */ + uint32_t ssse3 : 1; + uint32_t cntx_id : 1; /* amd reserved */ + uint32_t __reserved0 : 1; + uint32_t fma : 1; + uint32_t cmpxchg16b : 1; + uint32_t xtpr : 1; /* amd reserved */ + uint32_t pdcm : 1; /* amd reserved */ + uint32_t __reserved1 : 1; + uint32_t pcid : 1; /* amd reserved */ + uint32_t dca : 1; /* amd reserved */ + uint32_t sse4_1 : 1; + uint32_t sse4_2 : 1; + uint32_t x2apic : 1; /* amd reserved */ + uint32_t movbe : 1; /* amd reserved */ + uint32_t popcnt : 1; + uint32_t tsc : 1; /* amd reserved */ + uint32_t aes : 1; + uint32_t xsave : 1; + uint32_t osxsave : 1; + uint32_t avx : 1; + uint32_t __reserved2 : 1; /* amd F16C */ + uint32_t __reserved3 : 1; + uint32_t __alwayszero : 1; /* amd RAZ */ + } bits; + jit_uword_t cpuid; + } ecx; + union { + struct { + uint32_t fpu : 1; + uint32_t vme : 1; + uint32_t de : 1; + uint32_t pse : 1; + uint32_t tsc : 1; + uint32_t msr : 1; + uint32_t pae : 1; + uint32_t mce : 1; + uint32_t cmpxchg8b : 1; + uint32_t apic : 1; + uint32_t __reserved0 : 1; + uint32_t sep : 1; + uint32_t mtrr : 1; + uint32_t pge : 1; + uint32_t mca : 1; + uint32_t cmov : 1; + uint32_t pat : 1; + uint32_t pse36 : 1; + uint32_t psn : 1; /* amd reserved */ + uint32_t clfsh : 1; + uint32_t __reserved1 : 1; + uint32_t ds : 1; /* amd reserved */ + uint32_t acpi : 1; /* amd reserved */ + uint32_t mmx : 1; + uint32_t fxsr : 1; + uint32_t sse : 1; + uint32_t sse2 : 1; + uint32_t ss : 1; /* amd reserved */ + uint32_t htt : 1; + uint32_t tm : 1; /* amd reserved */ + uint32_t __reserved2 : 1; + uint32_t pbe : 1; /* amd reserved */ + } bits; + jit_uword_t cpuid; + } edx; +#if __X32 + int ac, flags; +#endif + jit_uword_t eax, ebx; + +#if __X32 + /* adapted from glibc __sysconf */ + __asm__ volatile ("pushfl;\n\t" + "popl %0;\n\t" + "movl $0x240000, %1;\n\t" + "xorl %0, %1;\n\t" + "pushl %1;\n\t" + "popfl;\n\t" + "pushfl;\n\t" + "popl %1;\n\t" + "xorl %0, %1;\n\t" + "pushl %0;\n\t" + "popfl" + : "=r" (flags), "=r" (ac)); + + /* i386 or i486 without cpuid */ + if ((ac & (1 << 21)) == 0) + /* probably without x87 as well */ + return false; +#endif + + /* query %eax = 1 function */ + __asm__ volatile ( +#if __X32 || __X64_32 + "xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" +#else + "xchgq %%rbx, %1; cpuid; xchgq %%rbx, %1" +#endif + : "=a" (eax), "=r" (ebx), + "=c" (ecx.cpuid), "=d" (edx.cpuid) + : "0" (1)); + + jit_cpu.fpu = edx.bits.fpu; + jit_cpu.cmpxchg8b = edx.bits.cmpxchg8b; + jit_cpu.cmov = edx.bits.cmov; + jit_cpu.mmx = edx.bits.mmx; + jit_cpu.sse = edx.bits.sse; + jit_cpu.sse2 = edx.bits.sse2; + jit_cpu.sse3 = ecx.bits.sse3; + jit_cpu.pclmulqdq = ecx.bits.pclmulqdq; + jit_cpu.ssse3 = ecx.bits.ssse3; + jit_cpu.fma = ecx.bits.fma; + jit_cpu.cmpxchg16b = ecx.bits.cmpxchg16b; + jit_cpu.sse4_1 = ecx.bits.sse4_1; + jit_cpu.sse4_2 = ecx.bits.sse4_2; + jit_cpu.movbe = ecx.bits.movbe; + jit_cpu.popcnt = ecx.bits.popcnt; + jit_cpu.aes = ecx.bits.aes; + jit_cpu.avx = ecx.bits.avx; + + /* query %eax = 0x80000001 function */ + __asm__ volatile ( +#if __X64 +# if __X64_32 + "xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" +# else + "xchgq %%rbx, %1; cpuid; xchgq %%rbx, %1" +# endif + : "=a" (eax), "=r" (ebx), + "=c" (ecx.cpuid), "=d" (edx.cpuid) + : "0" (0x80000001)); + jit_cpu.lahf = ecx.cpuid & 1; +#endif + + return jit_cpu.sse2; +} + +jit_bool_t +jit_init(jit_state_t *_jit) +{ + return jit_cpu.sse2; +} + +void +jit_epilog(jit_state_t *_jit) +{ + /* TODO: Restore registers. */ +} + +static jit_bool_t +is_fpr_arg(jit_arg_abi_t arg) +{ + switch (arg) + { + case JIT_ARG_ABI_UINT8: + case JIT_ARG_ABI_INT8: + case JIT_ARG_ABI_UINT16: + case JIT_ARG_ABI_INT16: + case JIT_ARG_ABI_UINT32: + case JIT_ARG_ABI_INT32: + case JIT_ARG_ABI_UINT64: + case JIT_ARG_ABI_INT64: + case JIT_ARG_ABI_POINTER: + return 0; + case JIT_ARG_ABI_FLOAT: + case JIT_ARG_ABI_DOUBLE: + return 1; + default: + abort(); + } +} + +static jit_bool_t +is_gpr_arg(jit_arg_abi_t arg) +{ + return !is_fpr_arg(arg); +} + +static const jit_gpr_t abi_gpr_args[] = { +#if __X32 + /* No GPRs in args. */ +#elif __CYGWIN__ + JIT_GPR(_RCX), JIT_GPR(_RDX), JIT_GPR(_R8), JIT_GPR(_R9) +#else + JIT_GPR(_RDI), JIT_GPR(_RSI), JIT_GPR(_RDX), JIT_GPR(_RCX), JIT_GPR(_R8), JIT_GPR(_R9) +#endif +}; + +static const jit_fpr_t abi_fpr_args[] = { +#if __X32 + /* No FPRs in args. */ +#elif __CYGWIN__ + JIT_FPR(_XMM0), JIT_FPR(_XMM1), JIT_FPR(_XMM2), JIT_FPR(_XMM3) +#else + JIT_FPR(_XMM0), JIT_FPR(_XMM1), JIT_FPR(_XMM2), JIT_FPR(_XMM3), JIT_FPR(_XMM4), JIT_FPR(_XMM5), JIT_FPR(_XMM6), JIT_FPR(_XMM7) +#endif +}; + +static const int abi_gpr_arg_count = sizeof(abi_gpr_args) / sizeof(abi_gpr_args[0]); +static const int abi_fpr_arg_count = sizeof(abi_fpr_args) / sizeof(abi_fpr_args[0]); + +struct abi_arg_iterator +{ + const jit_arg_abi_t *abi; + size_t argc; + + size_t arg_idx; + size_t gpr_idx; + size_t fpr_idx; + size_t stack_size; +}; + +static void +next_abi_arg(struct abi_arg_iterator *iter, jit_arg_t *arg) +{ + ASSERT(iter->arg_idx < iter->argc); + jit_arg_abi_t abi = iter->abi[iter->arg_idx]; + if (is_gpr_arg(abi)) { + if (iter->gpr_idx < abi_gpr_arg_count) { + arg->kind = JIT_ARG_LOC_GPR; + arg->loc.gpr = abi_gpr_args[iter->gpr_idx++]; +#ifdef __CYGWIN__ + iter->fpr_idx++; +#endif + } else { + abort(); + } + } else { + ASSERT(is_fpr_arg(abi)); + if (iter->fpr_idx < abi_fpr_arg_count) { + arg->kind = JIT_ARG_LOC_FPR; + arg->loc.fpr = abi_fpr_args[iter->fpr_idx++]; +#ifdef __CYGWIN__ + iter->gpr_idx++; +#endif + } else { + abort(); + } + } + iter->arg_idx++; +} + +static void +abi_gpr_to_mem(jit_state_t *_jit, jit_arg_abi_t abi, + jit_gpr_t src, jit_gpr_t base, ptrdiff_t offset) +{ + switch (abi) { + case JIT_ARG_ABI_UINT8: + case JIT_ARG_ABI_INT8: + jit_stxi_c(_jit, offset, base, src); + break; + case JIT_ARG_ABI_UINT16: + case JIT_ARG_ABI_INT16: + jit_stxi_s(_jit, offset, base, src); + break; + case JIT_ARG_ABI_UINT32: + case JIT_ARG_ABI_INT32: +#if __WORDSIZE == 32 + case JIT_ARG_ABI_POINTER: +#endif + jit_stxi_i(_jit, offset, base, src); + break; +#if __WORDSIZE == 64 + case JIT_ARG_ABI_UINT64: + case JIT_ARG_ABI_INT64: + case JIT_ARG_ABI_POINTER: + jit_stxi_l(_jit, offset, base, src); + break; +#endif + default: + abort(); + } +} + +static void +abi_fpr_to_mem(jit_state_t *_jit, jit_arg_abi_t abi, + jit_fpr_t src, jit_gpr_t base, ptrdiff_t offset) +{ + switch (abi) { + case JIT_ARG_ABI_FLOAT: + jit_stxi_f(_jit, offset, base, src); + break; + case JIT_ARG_ABI_DOUBLE: + jit_stxi_d(_jit, offset, base, src); + break; + default: + abort(); + } +} + +static void +abi_mem_to_gpr(jit_state_t *_jit, jit_arg_abi_t abi, + jit_gpr_t dst, jit_gpr_t base, ptrdiff_t offset) +{ + switch (abi) { + case JIT_ARG_ABI_UINT8: + jit_ldxi_uc(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_INT8: + jit_ldxi_c(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_UINT16: + jit_ldxi_us(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_INT16: + jit_ldxi_s(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_UINT32: + jit_ldxi_ui(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_INT32: + jit_ldxi_i(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_UINT64: + jit_ldxi_l(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_INT64: + jit_ldxi_l(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_POINTER: + jit_ldxi_l(_jit, dst, base, offset); + break; + default: + abort(); + } +} + +static void +abi_mem_to_fpr(jit_state_t *_jit, jit_arg_abi_t abi, + jit_fpr_t dst, jit_gpr_t base, ptrdiff_t offset) +{ + switch (abi) { + case JIT_ARG_ABI_FLOAT: + jit_ldxi_f(_jit, dst, base, offset); + break; + case JIT_ARG_ABI_DOUBLE: + jit_ldxi_d(_jit, dst, base, offset); + break; + default: + abort(); + } +} + +static void +store_mem_abi_arg(jit_state_t *_jit, jit_arg_abi_t abi, + jit_arg_t *arg, jit_gpr_t base, ptrdiff_t offset) +{ + switch (arg->kind) { + case JIT_ARG_LOC_GPR: + abi_gpr_to_mem(_jit, abi, arg->loc.gpr, base, offset); + break; + + case JIT_ARG_LOC_FPR: + abi_fpr_to_mem(_jit, abi, arg->loc.fpr, base, offset); + break; + + case JIT_ARG_LOC_MEM: + if (is_gpr_arg(abi)) { + jit_gpr_t tmp = get_temp_gpr(_jit); + abi_mem_to_gpr(_jit, abi, tmp, arg->loc.mem.base, arg->loc.mem.offset); + abi_gpr_to_mem(_jit, abi, tmp, base, offset); + unget_temp_gpr(_jit); + } else { + jit_fpr_t tmp = get_temp_xpr(_jit); + abi_mem_to_fpr(_jit, abi, tmp, arg->loc.mem.base, arg->loc.mem.offset); + abi_fpr_to_mem(_jit, abi, tmp, base, offset); + unget_temp_xpr(_jit); + } + break; + + default: + abort(); + } + + arg->kind = JIT_ARG_LOC_MEM; + arg->loc.mem.base = base; + arg->loc.mem.offset = offset; +} + +static void +shuffle_gpr_arg(jit_state_t *_jit, jit_gpr_t dst, size_t argc, + jit_arg_t *args, size_t idx) +{ + ASSERT(args[idx].kind == JIT_ARG_LOC_GPR); + + if (rn(args[idx].loc.gpr) == rn(dst)) + return; + + /* Arg in a reg but it's not the right one. See if this reg + holds some other arg, and swap if so. */ + for (size_t j=idx+1; j<argc; j++) + if (args[j].kind == JIT_ARG_LOC_GPR && rn(args[j].loc.gpr) == rn(dst)) + { + xchgr(_jit, rn(args[idx].loc.gpr), rn(dst)); + args[j].loc.gpr = args[idx].loc.gpr; + args[idx].loc.gpr = dst; + /* Could be this register holds a value for more than one argument; + update subsequent args if any. */ + for (size_t k=j+1; k<argc; k++) + if (args[k].kind == JIT_ARG_LOC_GPR && rn(args[k].loc.gpr) == rn(dst)) + args[k].loc.gpr = args[j].loc.gpr; + return; + } + + /* Arg in reg, but it's not the right one, and the desired reg + is free. */ + jit_movr(_jit, dst, args[idx].loc.gpr); + args[idx].loc.gpr = dst; +} + +static void +shuffle_fpr_arg(jit_state_t *_jit, jit_fpr_t dst, size_t argc, + jit_arg_t *args, size_t idx) +{ + ASSERT(args[idx].kind == JIT_ARG_LOC_FPR); + + if (rn(args[idx].loc.fpr) == rn(dst)) + return; + + /* Arg in a reg but it's not the right one. See if this reg + holds some other arg, and swap if so. */ + for (size_t j=idx+1; j<argc; j++) + if (args[j].kind == JIT_ARG_LOC_FPR && rn(args[j].loc.fpr) == rn(dst)) + { + jit_fpr_t tmp = get_temp_xpr(_jit); + jit_movr_d (_jit, tmp, args[idx].loc.fpr); + jit_movr_d (_jit, args[idx].loc.fpr, dst); + jit_movr_d (_jit, dst, tmp); + unget_temp_xpr(_jit); + args[j].loc.fpr = args[idx].loc.fpr; + args[idx].loc.fpr = dst; + /* Could be this register holds a value for more than one argument; + update subsequent args if any. */ + for (size_t k=j+1; k<argc; k++) + if (args[k].kind == JIT_ARG_LOC_FPR && rn(args[k].loc.fpr) == rn(dst)) + args[k].loc.fpr = args[j].loc.fpr; + return; + } + + /* Arg in reg, but it's not the right one, and the desired reg + is free. */ + jit_movr_d(_jit, dst, args[idx].loc.fpr); + args[idx].loc.fpr = dst; +} + +static void +reset_abi_arg_iterator(struct abi_arg_iterator *iter, size_t argc, + const jit_arg_abi_t *abi) +{ + memset(iter, 0, sizeof *iter); + iter->argc = argc; + iter->abi = abi; +} + +static void +prepare_args(jit_state_t *_jit, size_t argc, const jit_arg_abi_t abi[], + jit_arg_t args[]) +{ + jit_arg_t scratch; + struct abi_arg_iterator iter; + + // Compute stack arg size. + reset_abi_arg_iterator(&iter, argc, abi); + for (size_t i = 0; i < argc; i++) + next_abi_arg(&iter, &scratch); + + // Put all ABI memory arguments in place. We do this first because it might + // free up some registers. + if (iter.stack_size) + { + size_t stack_size = iter.stack_size; + subi(_jit, _RSP_REGNO, _RSP_REGNO, stack_size); + reset_abi_arg_iterator(&iter, argc, abi); + for (size_t i = 0; i < argc; i++) { + next_abi_arg(&iter, &scratch); + if (scratch.kind == JIT_ARG_LOC_MEM) + store_mem_abi_arg(_jit, abi[i], &args[i], + scratch.loc.mem.base, scratch.loc.mem.offset); + } + } + + // We move on now to the ABI register arguments. All args whose values are in + // registers are ABI register arguments, but they might not be the right + // register for the correponding ABI argument. Note that there may be ABI + // register arguments whose values are still in memory; we will load them + // later. + reset_abi_arg_iterator(&iter, argc, abi); + for (size_t i = 0; i < argc; i++) + { + next_abi_arg(&iter, &scratch); + switch (scratch.kind) { + case JIT_ARG_LOC_GPR: + if (args[i].kind == JIT_ARG_LOC_GPR) + shuffle_gpr_arg(_jit, scratch.loc.gpr, argc, args, i); + break; + + case JIT_ARG_LOC_FPR: + if (args[i].kind == JIT_ARG_LOC_FPR) + shuffle_fpr_arg(_jit, scratch.loc.fpr, argc, args, i); + break; + + default: + break; + } + } + + // The only thing that's left is ABI register arguments whose values are still + // in memory; load them now. + reset_abi_arg_iterator(&iter, argc, abi); + for (size_t i = 0; i < argc; i++) + { + next_abi_arg(&iter, &scratch); + switch (scratch.kind) { + case JIT_ARG_LOC_GPR: + if (args[i].kind == JIT_ARG_LOC_MEM) { + abi_mem_to_gpr(_jit, abi[i], scratch.loc.gpr, args[i].loc.mem.base, + args[i].loc.mem.offset); + args[i].kind = JIT_ARG_LOC_GPR; + args[i].loc.gpr = scratch.loc.gpr; + } + break; + + case JIT_ARG_LOC_FPR: + if (args[i].kind == JIT_ARG_LOC_MEM) { + abi_mem_to_fpr(_jit, abi[i], scratch.loc.fpr, args[i].loc.mem.base, + args[i].loc.mem.offset); + args[i].kind = JIT_ARG_LOC_FPR; + args[i].loc.fpr = scratch.loc.fpr; + } + break; + + default: + break; + } + } +} + +static void +cleanup_stack_after_call(jit_state_t *_jit, size_t argc, + const jit_arg_abi_t abi[]) +{ + jit_arg_t scratch; + struct abi_arg_iterator iter; + + // Compute stack arg size. + reset_abi_arg_iterator(&iter, argc, abi); + for (size_t i = 0; i < argc; i++) + next_abi_arg(&iter, &scratch); + + if (iter.stack_size) + jit_addi(_jit, JIT_SP, JIT_SP, iter.stack_size); +} + +void +jit_calli(jit_state_t *_jit, jit_pointer_t f, + size_t argc, const jit_arg_abi_t abi[], jit_arg_t args[]) +{ + prepare_args(_jit, argc, abi, args); + + calli(_jit, (jit_word_t)f); + + cleanup_stack_after_call(_jit, argc, abi); +} + +void +jit_callr(jit_state_t *_jit, jit_gpr_t f, + size_t argc, const jit_arg_abi_t abi[], jit_arg_t args[]) +{ + prepare_args(_jit, argc, abi, args); + + callr(_jit, rn(f)); + + cleanup_stack_after_call(_jit, argc, abi); +} + +void +jit_receive(jit_state_t *_jit, + size_t argc, const jit_arg_abi_t abi[], jit_arg_t args[]) +{ + struct abi_arg_iterator iter; + + reset_abi_arg_iterator(&iter, argc, abi); + for (size_t i = 0; i < argc; i++) + next_abi_arg(&iter, &args[i]); +} + +void +jit_load_args(jit_state_t *_jit, size_t argc, + const jit_arg_abi_t abi[], jit_arg_t args[], + const jit_anyreg_t regs[]) +{ + /* First shuffle any arguments that are already in registers into + position. */ + for (size_t i = 0; i < argc; i++) { + switch (args[i].kind) { + case JIT_ARG_LOC_IMM: + abort(); + case JIT_ARG_LOC_GPR: + shuffle_gpr_arg(_jit, regs[i].gpr, argc, args, i); + break; + case JIT_ARG_LOC_FPR: + shuffle_fpr_arg(_jit, regs[i].fpr, argc, args, i); + break; + case JIT_ARG_LOC_MEM: + break; + default: + abort(); + } + } + + /* Now load spilled arguments from memory into registers. */ + for (size_t i = 0; i < argc; i++) { + if (args[i].kind == JIT_ARG_LOC_MEM) { + if (is_gpr_arg(abi[i])) + abi_mem_to_gpr(_jit, abi[i], regs[i].gpr, args[i].loc.mem.base, + args[i].loc.mem.offset); + else + abi_mem_to_fpr(_jit, abi[i], regs[i].fpr, args[i].loc.mem.base, + args[i].loc.mem.offset); + } + } +} + +void +jit_flush(void *fptr, void *tptr) +{ +} + +static void +jit_try_shorten(jit_state_t *_jit, jit_reloc_t reloc) +{ +} diff --git a/libguile/lightning/jit/x86.h b/libguile/lightning/jit/x86.h new file mode 100644 index 000000000..b275e5e8b --- /dev/null +++ b/libguile/lightning/jit/x86.h @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2012-2019 Free Software Foundation, Inc. + * + * This file is part of GNU lightning. + * + * GNU lightning is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU lightning is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * Authors: + * Paulo Cesar Pereira de Andrade + */ + +#ifndef _jit_x86_h +#define _jit_x86_h + +#define JIT_HASH_CONSTS 1 +#define JIT_NUM_OPERANDS 2 + +/* + * Types + */ +#define jit_sse2_p() jit_cpu.sse2 +#define jit_x87_reg_p(reg) ((reg) >= _ST0 && (reg) <= _ST6) +#if __WORDSIZE == 32 +# if defined(__x86_64__) +# define __X64 1 +# define __X64_32 1 +# define __X32 0 +# else +# define __X64 0 +# define __X64_32 0 +# define __X32 1 +# endif +#else +# define __X64 1 +# define __X64_32 0 +# define __X32 0 +#endif + +#define JIT_FP JIT_GPR(_RBP) +typedef enum { +#if __X32 +# define jit_r(i) (_RAX + (i)) +# define jit_r_num() 3 +# define jit_v(i) (_RBX + (i)) +# define jit_v_num() 3 +# define jit_f(i) (jit_cpu.sse2 ? _XMM0 + (i) : _ST0 + (i)) +# define jit_f_num() (jit_cpu.sse2 ? 8 : 6) +# define JIT_R0 JIT_GPR(_RAX) +# define JIT_R1 JIT_GPR(_RCX) +# define JIT_R2 JIT_GPR(_RDX) + _RAX, _RCX, _RDX, +# define JIT_V0 JIT_GPR(_RBX) +# define JIT_V1 JIT_GPR(_RSI) +# define JIT_V2 JIT_GPR(_RDI) + _RBX, _RSI, _RDI, + _RSP, _RBP, +# define JIT_F0 JIT_FPR(_XMM0) +# define JIT_F1 JIT_FPR(_XMM1) +# define JIT_F2 JIT_FPR(_XMM2) +# define JIT_F3 JIT_FPR(_XMM3) +# define JIT_F4 JIT_FPR(_XMM4) +# define JIT_F5 JIT_FPR(_XMM5) +# define JIT_F6 JIT_FPR(_XMM6) + _XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7, +# define jit_sse_reg_p(reg) ((reg) >= _XMM0 && (reg) <= _XMM7) +#else +# if __CYGWIN__ +# define jit_r(i) (_RAX + (i)) +# define jit_r_num() 3 +# define jit_v(i) (_RBX + (i)) +# define jit_v_num() 7 +# define jit_f(index) (_XMM4 + (index)) +# define jit_f_num() 12 +# define JIT_R0 JIT_GPR(_RAX) +# define JIT_R1 JIT_GPR(_R10) +# define JIT_R2 JIT_GPR(_R11) +# define JIT_V0 JIT_GPR(_RBX) +# define JIT_V1 JIT_GPR(_RDI) +# define JIT_V2 JIT_GPR(_RSI) +# define JIT_V3 JIT_GPR(_R12) +# define JIT_V4 JIT_GPR(_R13) +# define JIT_V5 JIT_GPR(_R14) +# define JIT_V6 JIT_GPR(_R15) + /* Volatile - Return value register */ + _RAX, + /* Volatile */ + _R10, _R11, + /* Nonvolatile */ + _RBX, _RDI, _RSI, + _R12, _R13, _R14, _R15, + /* Volatile - Integer arguments (4 to 1) */ + _R9, _R8, _RDX, _RCX, + /* Nonvolatile */ + _RSP, _RBP, +# define JIT_F0 JIT_FPR(_XMM0) +# define JIT_F1 JIT_FPR(_XMM1) +# define JIT_F2 JIT_FPR(_XMM2) +# define JIT_F3 JIT_FPR(_XMM3) +# define JIT_F4 JIT_FPR(_XMM4) +# define JIT_F5 JIT_FPR(_XMM5) +# define JIT_F6 JIT_FPR(_XMM6) +# define JIT_F7 JIT_FPR(_XMM7) +# define JIT_F8 JIT_FPR(_XMM8) +# define JIT_F9 JIT_FPR(_XMM9) +# define JIT_F10 JIT_FPR(_XMM10) +# define JIT_F11 JIT_FPR(_XMM11) +# define JIT_F12 JIT_FPR(_XMM12) +# define JIT_F13 JIT_FPR(_XMM13) +# define JIT_F14 JIT_FPR(_XMM14) +# define JIT_F15 JIT_FPR(_XMM15) + /* Volatile */ + _XMM4, _XMM5, + /* Nonvolatile */ + _XMM6, _XMM7, _XMM8, _XMM9, _XMM10, + _XMM11, _XMM12, _XMM13, _XMM14, _XMM15, + /* Volatile - FP arguments (4 to 1) */ + _XMM3, _XMM2, _XMM1, _XMM0, +# define jit_sse_reg_p(reg) ((reg) >= _XMM4 && (reg) <= _XMM0) +# else +# define jit_r(i) (_RAX + (i)) +# define jit_r_num() 4 +# define jit_v(i) (_RBX + (i)) +# define jit_v_num() 4 +# define jit_f(index) (_XMM8 + (index)) +# define jit_f_num() 8 +# define JIT_R0 JIT_GPR(_RAX) +# define JIT_R1 JIT_GPR(_R10) +# define JIT_R2 JIT_GPR(_R11) +# define JIT_R3 JIT_GPR(_R12) + _RAX, _R10, _R11, _R12, +# define JIT_V0 JIT_GPR(_RBX) +# define JIT_V1 JIT_GPR(_R13) +# define JIT_V2 JIT_GPR(_R14) +# define JIT_V3 JIT_GPR(_R15) + _RBX, _R13, _R14, _R15, + _R9, _R8, _RCX, _RDX, _RSI, _RDI, + _RSP, _RBP, +# define JIT_F0 JIT_FPR(_XMM0) +# define JIT_F1 JIT_FPR(_XMM1) +# define JIT_F2 JIT_FPR(_XMM2) +# define JIT_F3 JIT_FPR(_XMM3) +# define JIT_F4 JIT_FPR(_XMM4) +# define JIT_F5 JIT_FPR(_XMM5) +# define JIT_F6 JIT_FPR(_XMM6) +# define JIT_F7 JIT_FPR(_XMM7) +# define JIT_F8 JIT_FPR(_XMM8) +# define JIT_F9 JIT_FPR(_XMM9) +# define JIT_F10 JIT_FPR(_XMM10) +# define JIT_F11 JIT_FPR(_XMM11) +# define JIT_F12 JIT_FPR(_XMM12) +# define JIT_F13 JIT_FPR(_XMM13) +# define JIT_F14 JIT_FPR(_XMM14) +# define JIT_F15 JIT_FPR(_XMM15) + _XMM8, _XMM9, _XMM10, _XMM11, _XMM12, _XMM13, _XMM14, _XMM15, + _XMM7, _XMM6, _XMM5, _XMM4, _XMM3, _XMM2, _XMM1, _XMM0, +# define jit_sse_reg_p(reg) ((reg) >= _XMM8 && (reg) <= _XMM0) +# endif +#endif +# define JIT_NOREG _NOREG + _NOREG, +} jit_reg_t; + +typedef struct { + /* x87 present */ + uint32_t fpu : 1; + /* cmpxchg8b instruction */ + uint32_t cmpxchg8b : 1; + /* cmov and fcmov branchless conditional mov */ + uint32_t cmov : 1; + /* mmx registers/instructions available */ + uint32_t mmx : 1; + /* sse registers/instructions available */ + uint32_t sse : 1; + /* sse2 registers/instructions available */ + uint32_t sse2 : 1; + /* sse3 instructions available */ + uint32_t sse3 : 1; + /* pcmulqdq instruction */ + uint32_t pclmulqdq : 1; + /* ssse3 suplemental sse3 instructions available */ + uint32_t ssse3 : 1; + /* fused multiply/add using ymm state */ + uint32_t fma : 1; + /* cmpxchg16b instruction */ + uint32_t cmpxchg16b : 1; + /* sse4.1 instructions available */ + uint32_t sse4_1 : 1; + /* sse4.2 instructions available */ + uint32_t sse4_2 : 1; + /* movbe instruction available */ + uint32_t movbe : 1; + /* popcnt instruction available */ + uint32_t popcnt : 1; + /* aes instructions available */ + uint32_t aes : 1; + /* avx instructions available */ + uint32_t avx : 1; + /* lahf/sahf available in 64 bits mode */ + uint32_t lahf : 1; +} jit_cpu_t; + +/* + * Initialization + */ +JIT_API jit_cpu_t jit_cpu; + +#endif /* _jit_x86_h */ diff --git a/libguile/lightning/lib/jit_aarch64-sz.c b/libguile/lightning/lib/jit_aarch64-sz.c deleted file mode 100644 index 7e22e0e7b..000000000 --- a/libguile/lightning/lib/jit_aarch64-sz.c +++ /dev/null @@ -1,402 +0,0 @@ - -#if __WORDSIZE == 64 -#define JIT_INSTR_MAX 120 - 0, /* data */ - 0, /* live */ - 4, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 120, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 44, /* va_start */ - 64, /* va_arg */ - 72, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 20, /* addi */ - 4, /* addcr */ - 12, /* addci */ - 4, /* addxr */ - 8, /* addxi */ - 4, /* subr */ - 20, /* subi */ - 4, /* subcr */ - 12, /* subci */ - 4, /* subxr */ - 8, /* subxi */ - 24, /* rsbi */ - 4, /* mulr */ - 20, /* muli */ - 12, /* qmulr */ - 20, /* qmuli */ - 12, /* qmulr_u */ - 20, /* qmuli_u */ - 4, /* divr */ - 20, /* divi */ - 4, /* divr_u */ - 12, /* divi_u */ - 20, /* qdivr */ - 16, /* qdivi */ - 20, /* qdivr_u */ - 16, /* qdivi_u */ - 12, /* remr */ - 28, /* remi */ - 12, /* remr_u */ - 20, /* remi_u */ - 4, /* andr */ - 20, /* andi */ - 4, /* orr */ - 20, /* ori */ - 4, /* xorr */ - 20, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 8, /* ltr */ - 8, /* lti */ - 8, /* ltr_u */ - 8, /* lti_u */ - 8, /* ler */ - 8, /* lei */ - 8, /* ler_u */ - 8, /* lei_u */ - 8, /* eqr */ - 8, /* eqi */ - 8, /* ger */ - 8, /* gei */ - 8, /* ger_u */ - 8, /* gei_u */ - 8, /* gtr */ - 8, /* gti */ - 8, /* gtr_u */ - 8, /* gti_u */ - 8, /* ner */ - 8, /* nei */ - 4, /* movr */ - 16, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 4, /* extr_i */ - 4, /* extr_ui */ - 8, /* htonr_us */ - 8, /* htonr_ui */ - 4, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 4, /* ldr_ui */ - 12, /* ldi_ui */ - 4, /* ldr_l */ - 12, /* ldi_l */ - 8, /* ldxr_c */ - 20, /* ldxi_c */ - 4, /* ldxr_uc */ - 20, /* ldxi_uc */ - 4, /* ldxr_s */ - 16, /* ldxi_s */ - 4, /* ldxr_us */ - 16, /* ldxi_us */ - 4, /* ldxr_i */ - 20, /* ldxi_i */ - 4, /* ldxr_ui */ - 16, /* ldxi_ui */ - 4, /* ldxr_l */ - 20, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 4, /* str_l */ - 12, /* sti_l */ - 4, /* stxr_c */ - 20, /* stxi_c */ - 4, /* stxr_s */ - 20, /* stxi_s */ - 4, /* stxr_i */ - 20, /* stxi_i */ - 4, /* stxr_l */ - 20, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 8, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 8, /* blei_u */ - 8, /* beqr */ - 24, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 24, /* bnei */ - 8, /* bmsr */ - 8, /* bmsi */ - 8, /* bmcr */ - 8, /* bmci */ - 8, /* boaddr */ - 8, /* boaddi */ - 8, /* boaddr_u */ - 8, /* boaddi_u */ - 8, /* bxaddr */ - 8, /* bxaddi */ - 8, /* bxaddr_u */ - 8, /* bxaddi_u */ - 8, /* bosubr */ - 8, /* bosubi */ - 8, /* bosubr_u */ - 8, /* bosubi_u */ - 8, /* bxsubr */ - 8, /* bxsubi */ - 8, /* bxsubr_u */ - 8, /* bxsubi_u */ - 4, /* jmpr */ - 20, /* jmpi */ - 4, /* callr */ - 20, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 96, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 12, /* addi_f */ - 4, /* subr_f */ - 12, /* subi_f */ - 12, /* rsbi_f */ - 4, /* mulr_f */ - 12, /* muli_f */ - 4, /* divr_f */ - 12, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 8, /* ltr_f */ - 16, /* lti_f */ - 8, /* ler_f */ - 16, /* lei_f */ - 8, /* eqr_f */ - 16, /* eqi_f */ - 8, /* ger_f */ - 16, /* gei_f */ - 8, /* gtr_f */ - 16, /* gti_f */ - 8, /* ner_f */ - 16, /* nei_f */ - 8, /* unltr_f */ - 16, /* unlti_f */ - 8, /* unler_f */ - 16, /* unlei_f */ - 16, /* uneqr_f */ - 24, /* uneqi_f */ - 8, /* unger_f */ - 16, /* ungei_f */ - 8, /* ungtr_f */ - 16, /* ungti_f */ - 16, /* ltgtr_f */ - 24, /* ltgti_f */ - 8, /* ordr_f */ - 16, /* ordi_f */ - 8, /* unordr_f */ - 16, /* unordi_f */ - 8, /* truncr_f_i */ - 4, /* truncr_f_l */ - 4, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 8, /* movi_f */ - 8, /* ldr_f */ - 16, /* ldi_f */ - 8, /* ldxr_f */ - 24, /* ldxi_f */ - 8, /* str_f */ - 16, /* sti_f */ - 8, /* stxr_f */ - 24, /* stxi_f */ - 8, /* bltr_f */ - 16, /* blti_f */ - 8, /* bler_f */ - 16, /* blei_f */ - 8, /* beqr_f */ - 16, /* beqi_f */ - 8, /* bger_f */ - 16, /* bgei_f */ - 8, /* bgtr_f */ - 16, /* bgti_f */ - 8, /* bner_f */ - 16, /* bnei_f */ - 8, /* bunltr_f */ - 16, /* bunlti_f */ - 8, /* bunler_f */ - 16, /* bunlei_f */ - 16, /* buneqr_f */ - 24, /* buneqi_f */ - 8, /* bunger_f */ - 16, /* bungei_f */ - 8, /* bungtr_f */ - 16, /* bungti_f */ - 16, /* bltgtr_f */ - 24, /* bltgti_f */ - 8, /* bordr_f */ - 16, /* bordi_f */ - 8, /* bunordr_f */ - 16, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 12, /* addi_d */ - 4, /* subr_d */ - 12, /* subi_d */ - 12, /* rsbi_d */ - 4, /* mulr_d */ - 12, /* muli_d */ - 4, /* divr_d */ - 12, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 8, /* ltr_d */ - 16, /* lti_d */ - 8, /* ler_d */ - 16, /* lei_d */ - 8, /* eqr_d */ - 16, /* eqi_d */ - 8, /* ger_d */ - 16, /* gei_d */ - 8, /* gtr_d */ - 16, /* gti_d */ - 8, /* ner_d */ - 16, /* nei_d */ - 8, /* unltr_d */ - 16, /* unlti_d */ - 8, /* unler_d */ - 16, /* unlei_d */ - 16, /* uneqr_d */ - 24, /* uneqi_d */ - 8, /* unger_d */ - 16, /* ungei_d */ - 8, /* ungtr_d */ - 16, /* ungti_d */ - 16, /* ltgtr_d */ - 24, /* ltgti_d */ - 8, /* ordr_d */ - 16, /* ordi_d */ - 8, /* unordr_d */ - 16, /* unordi_d */ - 8, /* truncr_d_i */ - 4, /* truncr_d_l */ - 4, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 12, /* movi_d */ - 8, /* ldr_d */ - 16, /* ldi_d */ - 8, /* ldxr_d */ - 24, /* ldxi_d */ - 8, /* str_d */ - 16, /* sti_d */ - 8, /* stxr_d */ - 24, /* stxi_d */ - 8, /* bltr_d */ - 16, /* blti_d */ - 8, /* bler_d */ - 16, /* blei_d */ - 8, /* beqr_d */ - 20, /* beqi_d */ - 8, /* bger_d */ - 16, /* bgei_d */ - 8, /* bgtr_d */ - 16, /* bgti_d */ - 8, /* bner_d */ - 16, /* bnei_d */ - 8, /* bunltr_d */ - 16, /* bunlti_d */ - 8, /* bunler_d */ - 16, /* bunlei_d */ - 16, /* buneqr_d */ - 24, /* buneqi_d */ - 8, /* bunger_d */ - 16, /* bungei_d */ - 8, /* bungtr_d */ - 16, /* bungti_d */ - 16, /* bltgtr_d */ - 24, /* bltgti_d */ - 8, /* bordr_d */ - 16, /* bordi_d */ - 8, /* bunordr_d */ - 16, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_alpha-sz.c b/libguile/lightning/lib/jit_alpha-sz.c deleted file mode 100644 index e1a572aab..000000000 --- a/libguile/lightning/lib/jit_alpha-sz.c +++ /dev/null @@ -1,402 +0,0 @@ - -#if __WORDSIZE == 64 -#define JIT_INSTR_MAX 76 - 0, /* data */ - 0, /* live */ - 4, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 76, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 0, /* va_start */ - 0, /* va_arg */ - 0, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 32, /* addi */ - 12, /* addcr */ - 40, /* addci */ - 28, /* addxr */ - 28, /* addxi */ - 4, /* subr */ - 32, /* subi */ - 12, /* subcr */ - 40, /* subci */ - 28, /* subxr */ - 28, /* subxi */ - 36, /* rsbi */ - 4, /* mulr */ - 32, /* muli */ - 44, /* qmulr */ - 56, /* qmuli */ - 12, /* qmulr_u */ - 32, /* qmuli_u */ - 48, /* divr */ - 72, /* divi */ - 48, /* divr_u */ - 72, /* divi_u */ - 56, /* qdivr */ - 56, /* qdivi */ - 56, /* qdivr_u */ - 56, /* qdivi_u */ - 48, /* remr */ - 72, /* remi */ - 48, /* remr_u */ - 72, /* remi_u */ - 4, /* andr */ - 32, /* andi */ - 4, /* orr */ - 32, /* ori */ - 4, /* xorr */ - 32, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 4, /* ltr */ - 4, /* lti */ - 4, /* ltr_u */ - 8, /* lti_u */ - 4, /* ler */ - 8, /* lei */ - 4, /* ler_u */ - 4, /* lei_u */ - 4, /* eqr */ - 4, /* eqi */ - 4, /* ger */ - 8, /* gei */ - 4, /* ger_u */ - 8, /* gei_u */ - 4, /* gtr */ - 8, /* gti */ - 4, /* gtr_u */ - 8, /* gti_u */ - 8, /* ner */ - 12, /* nei */ - 4, /* movr */ - 32, /* movi */ - 8, /* extr_c */ - 8, /* extr_uc */ - 8, /* extr_s */ - 8, /* extr_us */ - 8, /* extr_i */ - 8, /* extr_ui */ - 16, /* htonr_us */ - 36, /* htonr_ui */ - 36, /* htonr_ul */ - 12, /* ldr_c */ - 40, /* ldi_c */ - 4, /* ldr_uc */ - 32, /* ldi_uc */ - 12, /* ldr_s */ - 40, /* ldi_s */ - 4, /* ldr_us */ - 32, /* ldi_us */ - 4, /* ldr_i */ - 32, /* ldi_i */ - 12, /* ldr_ui */ - 40, /* ldi_ui */ - 4, /* ldr_l */ - 32, /* ldi_l */ - 16, /* ldxr_c */ - 12, /* ldxi_c */ - 8, /* ldxr_uc */ - 4, /* ldxi_uc */ - 16, /* ldxr_s */ - 12, /* ldxi_s */ - 8, /* ldxr_us */ - 4, /* ldxi_us */ - 8, /* ldxr_i */ - 4, /* ldxi_i */ - 16, /* ldxr_ui */ - 12, /* ldxi_ui */ - 8, /* ldxr_l */ - 4, /* ldxi_l */ - 4, /* str_c */ - 32, /* sti_c */ - 4, /* str_s */ - 32, /* sti_s */ - 4, /* str_i */ - 32, /* sti_i */ - 4, /* str_l */ - 32, /* sti_l */ - 8, /* stxr_c */ - 4, /* stxi_c */ - 8, /* stxr_s */ - 4, /* stxi_s */ - 8, /* stxr_i */ - 4, /* stxi_i */ - 8, /* stxr_l */ - 4, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 12, /* blti_u */ - 8, /* bler */ - 12, /* blei */ - 8, /* bler_u */ - 12, /* blei_u */ - 8, /* beqr */ - 40, /* beqi */ - 8, /* bger */ - 12, /* bgei */ - 8, /* bger_u */ - 12, /* bgei_u */ - 8, /* bgtr */ - 12, /* bgti */ - 8, /* bgtr_u */ - 12, /* bgti_u */ - 8, /* bner */ - 36, /* bnei */ - 8, /* bmsr */ - 8, /* bmsi */ - 8, /* bmcr */ - 8, /* bmci */ - 28, /* boaddr */ - 32, /* boaddi */ - 16, /* boaddr_u */ - 16, /* boaddi_u */ - 28, /* bxaddr */ - 32, /* bxaddi */ - 16, /* bxaddr_u */ - 16, /* bxaddi_u */ - 28, /* bosubr */ - 32, /* bosubi */ - 16, /* bosubr_u */ - 16, /* bosubi_u */ - 28, /* bxsubr */ - 32, /* bxsubi */ - 16, /* bxsubr_u */ - 16, /* bxsubi_u */ - 0, /* jmpr */ - 36, /* jmpi */ - 8, /* callr */ - 36, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 68, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 8, /* addr_f */ - 32, /* addi_f */ - 8, /* subr_f */ - 32, /* subi_f */ - 32, /* rsbi_f */ - 8, /* mulr_f */ - 32, /* muli_f */ - 8, /* divr_f */ - 32, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 8, /* sqrtr_f */ - 32, /* ltr_f */ - 56, /* lti_f */ - 32, /* ler_f */ - 56, /* lei_f */ - 32, /* eqr_f */ - 56, /* eqi_f */ - 32, /* ger_f */ - 56, /* gei_f */ - 32, /* gtr_f */ - 56, /* gti_f */ - 32, /* ner_f */ - 56, /* nei_f */ - 32, /* unltr_f */ - 56, /* unlti_f */ - 32, /* unler_f */ - 56, /* unlei_f */ - 32, /* uneqr_f */ - 56, /* uneqi_f */ - 32, /* unger_f */ - 56, /* ungei_f */ - 32, /* ungtr_f */ - 56, /* ungti_f */ - 32, /* ltgtr_f */ - 56, /* ltgti_f */ - 20, /* ordr_f */ - 44, /* ordi_f */ - 20, /* unordr_f */ - 44, /* unordi_f */ - 16, /* truncr_f_i */ - 16, /* truncr_f_l */ - 12, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 24, /* movi_f */ - 4, /* ldr_f */ - 32, /* ldi_f */ - 8, /* ldxr_f */ - 4, /* ldxi_f */ - 4, /* str_f */ - 32, /* sti_f */ - 8, /* stxr_f */ - 4, /* stxi_f */ - 24, /* bltr_f */ - 48, /* blti_f */ - 24, /* bler_f */ - 48, /* blei_f */ - 24, /* beqr_f */ - 48, /* beqi_f */ - 24, /* bger_f */ - 48, /* bgei_f */ - 24, /* bgtr_f */ - 48, /* bgti_f */ - 28, /* bner_f */ - 52, /* bnei_f */ - 28, /* bunltr_f */ - 52, /* bunlti_f */ - 28, /* bunler_f */ - 52, /* bunlei_f */ - 28, /* buneqr_f */ - 52, /* buneqi_f */ - 28, /* bunger_f */ - 52, /* bungei_f */ - 28, /* bungtr_f */ - 52, /* bungti_f */ - 28, /* bltgtr_f */ - 52, /* bltgti_f */ - 12, /* bordr_f */ - 36, /* bordi_f */ - 12, /* bunordr_f */ - 36, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 8, /* addr_d */ - 28, /* addi_d */ - 8, /* subr_d */ - 28, /* subi_d */ - 28, /* rsbi_d */ - 8, /* mulr_d */ - 28, /* muli_d */ - 8, /* divr_d */ - 28, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 8, /* sqrtr_d */ - 32, /* ltr_d */ - 52, /* lti_d */ - 32, /* ler_d */ - 52, /* lei_d */ - 32, /* eqr_d */ - 52, /* eqi_d */ - 32, /* ger_d */ - 52, /* gei_d */ - 32, /* gtr_d */ - 52, /* gti_d */ - 32, /* ner_d */ - 52, /* nei_d */ - 32, /* unltr_d */ - 52, /* unlti_d */ - 32, /* unler_d */ - 52, /* unlei_d */ - 32, /* uneqr_d */ - 52, /* uneqi_d */ - 32, /* unger_d */ - 52, /* ungei_d */ - 32, /* ungtr_d */ - 52, /* ungti_d */ - 32, /* ltgtr_d */ - 52, /* ltgti_d */ - 20, /* ordr_d */ - 40, /* ordi_d */ - 20, /* unordr_d */ - 40, /* unordi_d */ - 16, /* truncr_d_i */ - 16, /* truncr_d_l */ - 12, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 20, /* movi_d */ - 4, /* ldr_d */ - 32, /* ldi_d */ - 8, /* ldxr_d */ - 4, /* ldxi_d */ - 4, /* str_d */ - 32, /* sti_d */ - 8, /* stxr_d */ - 4, /* stxi_d */ - 24, /* bltr_d */ - 44, /* blti_d */ - 24, /* bler_d */ - 44, /* blei_d */ - 24, /* beqr_d */ - 44, /* beqi_d */ - 24, /* bger_d */ - 44, /* bgei_d */ - 24, /* bgtr_d */ - 44, /* bgti_d */ - 28, /* bner_d */ - 48, /* bnei_d */ - 28, /* bunltr_d */ - 48, /* bunlti_d */ - 28, /* bunler_d */ - 48, /* bunlei_d */ - 28, /* buneqr_d */ - 48, /* buneqi_d */ - 28, /* bunger_d */ - 48, /* bungei_d */ - 28, /* bungtr_d */ - 48, /* bungti_d */ - 28, /* bltgtr_d */ - 48, /* bltgti_d */ - 12, /* bordr_d */ - 32, /* bordi_d */ - 12, /* bunordr_d */ - 32, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_arm-sz.c b/libguile/lightning/lib/jit_arm-sz.c deleted file mode 100644 index 9f0d01282..000000000 --- a/libguile/lightning/lib/jit_arm-sz.c +++ /dev/null @@ -1,808 +0,0 @@ - -#if __WORDSIZE == 32 -#if defined(__ARM_PCS_VFP) -#define JIT_INSTR_MAX 48 - 0, /* data */ - 0, /* live */ - 2, /* align */ - 0, /* save */ - 0, /* load */ - 2, /* #name */ - 0, /* #note */ - 0, /* label */ - 34, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 16, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 4, /* addcr */ - 8, /* addci */ - 4, /* addxr */ - 4, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 4, /* subcr */ - 8, /* subci */ - 4, /* subxr */ - 4, /* subxi */ - 16, /* rsbi */ - 4, /* mulr */ - 12, /* muli */ - 4, /* qmulr */ - 12, /* qmuli */ - 4, /* qmulr_u */ - 8, /* qmuli_u */ - 40, /* divr */ - 48, /* divi */ - 40, /* divr_u */ - 44, /* divi_u */ - 34, /* qdivr */ - 38, /* qdivi */ - 34, /* qdivr_u */ - 38, /* qdivi_u */ - 40, /* remr */ - 48, /* remi */ - 40, /* remr_u */ - 44, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 14, /* ltr */ - 14, /* lti */ - 14, /* ltr_u */ - 14, /* lti_u */ - 14, /* ler */ - 14, /* lei */ - 14, /* ler_u */ - 14, /* lei_u */ - 14, /* eqr */ - 14, /* eqi */ - 14, /* ger */ - 14, /* gei */ - 14, /* ger_u */ - 14, /* gei_u */ - 14, /* gtr */ - 14, /* gti */ - 14, /* gtr_u */ - 14, /* gti_u */ - 14, /* ner */ - 14, /* nei */ - 4, /* movr */ - 8, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 8, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 4, /* ldxr_c */ - 12, /* ldxi_c */ - 4, /* ldxr_uc */ - 12, /* ldxi_uc */ - 4, /* ldxr_s */ - 12, /* ldxi_s */ - 4, /* ldxr_us */ - 12, /* ldxi_us */ - 4, /* ldxr_i */ - 12, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 4, /* stxr_c */ - 12, /* stxi_c */ - 4, /* stxr_s */ - 12, /* stxi_s */ - 4, /* stxr_i */ - 12, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 8, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 8, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 8, /* bmsr */ - 8, /* bmsi */ - 8, /* bmcr */ - 8, /* bmci */ - 8, /* boaddr */ - 8, /* boaddi */ - 8, /* boaddr_u */ - 8, /* boaddi_u */ - 8, /* bxaddr */ - 8, /* bxaddi */ - 8, /* bxaddr_u */ - 8, /* bxaddi_u */ - 8, /* bosubr */ - 8, /* bosubi */ - 8, /* bosubr_u */ - 8, /* bosubi_u */ - 8, /* bxsubr */ - 8, /* bxsubi */ - 8, /* bxsubr_u */ - 8, /* bxsubi_u */ - 4, /* jmpr */ - 8, /* jmpi */ - 4, /* callr */ - 20, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 24, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 8, /* addi_f */ - 4, /* subr_f */ - 8, /* subi_f */ - 8, /* rsbi_f */ - 4, /* mulr_f */ - 8, /* muli_f */ - 4, /* divr_f */ - 8, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 18, /* ltr_f */ - 30, /* lti_f */ - 20, /* ler_f */ - 32, /* lei_f */ - 18, /* eqr_f */ - 30, /* eqi_f */ - 18, /* ger_f */ - 30, /* gei_f */ - 18, /* gtr_f */ - 30, /* gti_f */ - 18, /* ner_f */ - 30, /* nei_f */ - 18, /* unltr_f */ - 30, /* unlti_f */ - 18, /* unler_f */ - 30, /* unlei_f */ - 24, /* uneqr_f */ - 36, /* uneqi_f */ - 18, /* unger_f */ - 30, /* ungei_f */ - 18, /* ungtr_f */ - 30, /* ungti_f */ - 24, /* ltgtr_f */ - 36, /* ltgti_f */ - 18, /* ordr_f */ - 30, /* ordi_f */ - 18, /* unordr_f */ - 30, /* unordi_f */ - 8, /* truncr_f_i */ - 0, /* truncr_f_l */ - 8, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 12, /* movi_f */ - 4, /* ldr_f */ - 12, /* ldi_f */ - 8, /* ldxr_f */ - 16, /* ldxi_f */ - 4, /* str_f */ - 12, /* sti_f */ - 8, /* stxr_f */ - 16, /* stxi_f */ - 12, /* bltr_f */ - 24, /* blti_f */ - 12, /* bler_f */ - 24, /* blei_f */ - 12, /* beqr_f */ - 24, /* beqi_f */ - 12, /* bger_f */ - 24, /* bgei_f */ - 12, /* bgtr_f */ - 24, /* bgti_f */ - 12, /* bner_f */ - 24, /* bnei_f */ - 16, /* bunltr_f */ - 28, /* bunlti_f */ - 16, /* bunler_f */ - 28, /* bunlei_f */ - 20, /* buneqr_f */ - 32, /* buneqi_f */ - 16, /* bunger_f */ - 28, /* bungei_f */ - 12, /* bungtr_f */ - 24, /* bungti_f */ - 20, /* bltgtr_f */ - 32, /* bltgti_f */ - 12, /* bordr_f */ - 24, /* bordi_f */ - 12, /* bunordr_f */ - 24, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 20, /* addi_d */ - 4, /* subr_d */ - 20, /* subi_d */ - 20, /* rsbi_d */ - 4, /* mulr_d */ - 20, /* muli_d */ - 4, /* divr_d */ - 20, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 18, /* ltr_d */ - 34, /* lti_d */ - 20, /* ler_d */ - 36, /* lei_d */ - 18, /* eqr_d */ - 34, /* eqi_d */ - 18, /* ger_d */ - 34, /* gei_d */ - 18, /* gtr_d */ - 34, /* gti_d */ - 18, /* ner_d */ - 34, /* nei_d */ - 18, /* unltr_d */ - 34, /* unlti_d */ - 18, /* unler_d */ - 34, /* unlei_d */ - 24, /* uneqr_d */ - 40, /* uneqi_d */ - 18, /* unger_d */ - 34, /* ungei_d */ - 18, /* ungtr_d */ - 34, /* ungti_d */ - 24, /* ltgtr_d */ - 40, /* ltgti_d */ - 18, /* ordr_d */ - 34, /* ordi_d */ - 18, /* unordr_d */ - 34, /* unordi_d */ - 8, /* truncr_d_i */ - 0, /* truncr_d_l */ - 8, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 16, /* movi_d */ - 4, /* ldr_d */ - 12, /* ldi_d */ - 8, /* ldxr_d */ - 16, /* ldxi_d */ - 4, /* str_d */ - 12, /* sti_d */ - 8, /* stxr_d */ - 16, /* stxi_d */ - 12, /* bltr_d */ - 28, /* blti_d */ - 12, /* bler_d */ - 28, /* blei_d */ - 12, /* beqr_d */ - 28, /* beqi_d */ - 12, /* bger_d */ - 28, /* bgei_d */ - 12, /* bgtr_d */ - 28, /* bgti_d */ - 12, /* bner_d */ - 28, /* bnei_d */ - 16, /* bunltr_d */ - 32, /* bunlti_d */ - 16, /* bunler_d */ - 32, /* bunlei_d */ - 20, /* buneqr_d */ - 36, /* buneqi_d */ - 16, /* bunger_d */ - 32, /* bungei_d */ - 12, /* bungtr_d */ - 28, /* bungti_d */ - 20, /* bltgtr_d */ - 36, /* bltgti_d */ - 12, /* bordr_d */ - 28, /* bordi_d */ - 12, /* bunordr_d */ - 28, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 4, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 4, /* movr_d_ww */ - 12, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __ARM_PCS_VFP */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 32 -#if !defined(__ARM_PCS_VFP) -#define JIT_INSTR_MAX 160 - 0, /* data */ - 0, /* live */ - 2, /* align */ - 0, /* save */ - 0, /* load */ - 2, /* #name */ - 0, /* #note */ - 0, /* label */ - 30, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 28, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 4, /* addcr */ - 8, /* addci */ - 4, /* addxr */ - 4, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 4, /* subcr */ - 8, /* subci */ - 4, /* subxr */ - 4, /* subxi */ - 16, /* rsbi */ - 8, /* mulr */ - 12, /* muli */ - 4, /* qmulr */ - 12, /* qmuli */ - 4, /* qmulr_u */ - 8, /* qmuli_u */ - 40, /* divr */ - 48, /* divi */ - 40, /* divr_u */ - 44, /* divi_u */ - 34, /* qdivr */ - 38, /* qdivi */ - 34, /* qdivr_u */ - 38, /* qdivi_u */ - 40, /* remr */ - 48, /* remi */ - 40, /* remr_u */ - 44, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 14, /* ltr */ - 14, /* lti */ - 14, /* ltr_u */ - 14, /* lti_u */ - 14, /* ler */ - 14, /* lei */ - 14, /* ler_u */ - 14, /* lei_u */ - 14, /* eqr */ - 14, /* eqi */ - 14, /* ger */ - 14, /* gei */ - 14, /* ger_u */ - 14, /* gei_u */ - 14, /* gtr */ - 14, /* gti */ - 14, /* gtr_u */ - 14, /* gti_u */ - 14, /* ner */ - 14, /* nei */ - 4, /* movr */ - 8, /* movi */ - 8, /* extr_c */ - 4, /* extr_uc */ - 8, /* extr_s */ - 8, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 20, /* htonr_us */ - 16, /* htonr_ui */ - 0, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 4, /* ldxr_c */ - 12, /* ldxi_c */ - 4, /* ldxr_uc */ - 12, /* ldxi_uc */ - 4, /* ldxr_s */ - 12, /* ldxi_s */ - 4, /* ldxr_us */ - 12, /* ldxi_us */ - 4, /* ldxr_i */ - 12, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 4, /* stxr_c */ - 12, /* stxi_c */ - 4, /* stxr_s */ - 12, /* stxi_s */ - 4, /* stxr_i */ - 12, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 8, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 8, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 8, /* bmsr */ - 8, /* bmsi */ - 8, /* bmcr */ - 8, /* bmci */ - 8, /* boaddr */ - 8, /* boaddi */ - 8, /* boaddr_u */ - 8, /* boaddi_u */ - 8, /* bxaddr */ - 8, /* bxaddi */ - 8, /* bxaddr_u */ - 8, /* bxaddi_u */ - 8, /* bosubr */ - 8, /* bosubi */ - 8, /* bosubr_u */ - 8, /* bosubi_u */ - 8, /* bxsubr */ - 8, /* bxsubi */ - 8, /* bxsubr_u */ - 8, /* bxsubi_u */ - 12, /* jmpr */ - 72, /* jmpi */ - 4, /* callr */ - 20, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 160, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 40, /* addr_f */ - 40, /* addi_f */ - 40, /* subr_f */ - 40, /* subi_f */ - 40, /* rsbi_f */ - 40, /* mulr_f */ - 40, /* muli_f */ - 40, /* divr_f */ - 40, /* divi_f */ - 12, /* negr_f */ - 12, /* absr_f */ - 36, /* sqrtr_f */ - 40, /* ltr_f */ - 44, /* lti_f */ - 40, /* ler_f */ - 44, /* lei_f */ - 40, /* eqr_f */ - 44, /* eqi_f */ - 40, /* ger_f */ - 44, /* gei_f */ - 40, /* gtr_f */ - 44, /* gti_f */ - 44, /* ner_f */ - 48, /* nei_f */ - 72, /* unltr_f */ - 80, /* unlti_f */ - 72, /* unler_f */ - 80, /* unlei_f */ - 72, /* uneqr_f */ - 80, /* uneqi_f */ - 72, /* unger_f */ - 80, /* ungei_f */ - 72, /* ungtr_f */ - 80, /* ungti_f */ - 76, /* ltgtr_f */ - 84, /* ltgti_f */ - 44, /* ordr_f */ - 48, /* ordi_f */ - 72, /* unordr_f */ - 80, /* unordi_f */ - 36, /* truncr_f_i */ - 0, /* truncr_f_l */ - 36, /* extr_f */ - 38, /* extr_d_f */ - 8, /* movr_f */ - 12, /* movi_f */ - 8, /* ldr_f */ - 16, /* ldi_f */ - 8, /* ldxr_f */ - 16, /* ldxi_f */ - 8, /* str_f */ - 16, /* sti_f */ - 8, /* stxr_f */ - 16, /* stxi_f */ - 44, /* bltr_f */ - 48, /* blti_f */ - 44, /* bler_f */ - 48, /* blei_f */ - 44, /* beqr_f */ - 52, /* beqi_f */ - 44, /* bger_f */ - 48, /* bgei_f */ - 44, /* bgtr_f */ - 48, /* bgti_f */ - 44, /* bner_f */ - 48, /* bnei_f */ - 44, /* bunltr_f */ - 48, /* bunlti_f */ - 44, /* bunler_f */ - 48, /* bunlei_f */ - 76, /* buneqr_f */ - 84, /* buneqi_f */ - 44, /* bunger_f */ - 48, /* bungei_f */ - 44, /* bungtr_f */ - 48, /* bungti_f */ - 76, /* bltgtr_f */ - 84, /* bltgti_f */ - 44, /* bordr_f */ - 48, /* bordi_f */ - 44, /* bunordr_f */ - 48, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 50, /* addr_d */ - 52, /* addi_d */ - 50, /* subr_d */ - 52, /* subi_d */ - 52, /* rsbi_d */ - 50, /* mulr_d */ - 52, /* muli_d */ - 50, /* divr_d */ - 52, /* divi_d */ - 20, /* negr_d */ - 20, /* absr_d */ - 42, /* sqrtr_d */ - 44, /* ltr_d */ - 48, /* lti_d */ - 44, /* ler_d */ - 48, /* lei_d */ - 44, /* eqr_d */ - 48, /* eqi_d */ - 44, /* ger_d */ - 48, /* gei_d */ - 44, /* gtr_d */ - 48, /* gti_d */ - 48, /* ner_d */ - 52, /* nei_d */ - 82, /* unltr_d */ - 88, /* unlti_d */ - 82, /* unler_d */ - 88, /* unlei_d */ - 82, /* uneqr_d */ - 88, /* uneqi_d */ - 82, /* unger_d */ - 88, /* ungei_d */ - 82, /* ungtr_d */ - 88, /* ungti_d */ - 86, /* ltgtr_d */ - 92, /* ltgti_d */ - 48, /* ordr_d */ - 52, /* ordi_d */ - 82, /* unordr_d */ - 88, /* unordi_d */ - 36, /* truncr_d_i */ - 0, /* truncr_d_l */ - 36, /* extr_d */ - 38, /* extr_f_d */ - 16, /* movr_d */ - 20, /* movi_d */ - 16, /* ldr_d */ - 24, /* ldi_d */ - 20, /* ldxr_d */ - 28, /* ldxi_d */ - 16, /* str_d */ - 24, /* sti_d */ - 20, /* stxr_d */ - 28, /* stxi_d */ - 48, /* bltr_d */ - 52, /* blti_d */ - 48, /* bler_d */ - 52, /* blei_d */ - 48, /* beqr_d */ - 60, /* beqi_d */ - 48, /* bger_d */ - 52, /* bgei_d */ - 48, /* bgtr_d */ - 52, /* bgti_d */ - 48, /* bner_d */ - 52, /* bnei_d */ - 48, /* bunltr_d */ - 52, /* bunlti_d */ - 48, /* bunler_d */ - 52, /* bunlei_d */ - 84, /* buneqr_d */ - 92, /* buneqi_d */ - 48, /* bunger_d */ - 52, /* bungei_d */ - 48, /* bungtr_d */ - 52, /* bungti_d */ - 84, /* bltgtr_d */ - 92, /* bltgti_d */ - 48, /* bordr_d */ - 52, /* bordi_d */ - 48, /* bunordr_d */ - 52, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 4, /* movr_w_f */ - 8, /* movr_ww_d */ - 0, /* movr_w_d */ - 8, /* movr_f_w */ - 8, /* movi_f_w */ - 16, /* movr_d_ww */ - 12, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __ARM_PCS_VFP */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_hppa-sz.c b/libguile/lightning/lib/jit_hppa-sz.c deleted file mode 100644 index 3c04f6372..000000000 --- a/libguile/lightning/lib/jit_hppa-sz.c +++ /dev/null @@ -1,402 +0,0 @@ - -#if __WORDSIZE == 32 -#define JIT_INSTR_MAX 64 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 64, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 0, /* va_start */ - 0, /* va_arg */ - 0, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 4, /* addcr */ - 12, /* addci */ - 4, /* addxr */ - 8, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 4, /* subcr */ - 12, /* subci */ - 4, /* subxr */ - 8, /* subxi */ - 16, /* rsbi */ - 28, /* mulr */ - 36, /* muli */ - 40, /* qmulr */ - 44, /* qmuli */ - 32, /* qmulr_u */ - 40, /* qmuli_u */ - 36, /* divr */ - 40, /* divi */ - 36, /* divr_u */ - 40, /* divi_u */ - 40, /* qdivr */ - 40, /* qdivi */ - 40, /* qdivr_u */ - 40, /* qdivi_u */ - 36, /* remr */ - 40, /* remi */ - 36, /* remr_u */ - 40, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 12, /* lshr */ - 4, /* lshi */ - 12, /* rshr */ - 4, /* rshi */ - 12, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 8, /* ltr */ - 8, /* lti */ - 8, /* ltr_u */ - 8, /* lti_u */ - 8, /* ler */ - 8, /* lei */ - 8, /* ler_u */ - 8, /* lei_u */ - 8, /* eqr */ - 12, /* eqi */ - 8, /* ger */ - 8, /* gei */ - 8, /* ger_u */ - 8, /* gei_u */ - 8, /* gtr */ - 8, /* gti */ - 8, /* gtr_u */ - 8, /* gti_u */ - 8, /* ner */ - 8, /* nei */ - 4, /* movr */ - 8, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_l */ - 8, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 8, /* ldi_uc */ - 8, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 8, /* ldi_us */ - 4, /* ldr_i */ - 8, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 8, /* ldxr_c */ - 8, /* ldxi_c */ - 4, /* ldxr_uc */ - 4, /* ldxi_uc */ - 8, /* ldxr_s */ - 8, /* ldxi_s */ - 4, /* ldxr_us */ - 4, /* ldxi_us */ - 4, /* ldxr_i */ - 4, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 8, /* sti_c */ - 4, /* str_s */ - 8, /* sti_s */ - 4, /* str_i */ - 8, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 8, /* stxr_c */ - 4, /* stxi_c */ - 8, /* stxr_s */ - 4, /* stxi_s */ - 8, /* stxr_i */ - 4, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 8, /* blti_u */ - 8, /* bler */ - 12, /* blei */ - 8, /* bler_u */ - 8, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 12, /* bmsr */ - 16, /* bmsi */ - 12, /* bmcr */ - 16, /* bmci */ - 8, /* boaddr */ - 8, /* boaddi */ - 8, /* boaddr_u */ - 8, /* boaddi_u */ - 8, /* bxaddr */ - 8, /* bxaddi */ - 8, /* bxaddr_u */ - 8, /* bxaddi_u */ - 12, /* bosubr */ - 16, /* bosubi */ - 16, /* bosubr_u */ - 20, /* bosubi_u */ - 12, /* bxsubr */ - 16, /* bxsubi */ - 16, /* bxsubr_u */ - 20, /* bxsubi_u */ - 0, /* jmpr */ - 12, /* jmpi */ - 40, /* callr */ - 44, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 64, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 16, /* addi_f */ - 4, /* subr_f */ - 16, /* subi_f */ - 16, /* rsbi_f */ - 4, /* mulr_f */ - 16, /* muli_f */ - 4, /* divr_f */ - 16, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 28, /* lti_f */ - 16, /* ler_f */ - 28, /* lei_f */ - 16, /* eqr_f */ - 28, /* eqi_f */ - 16, /* ger_f */ - 28, /* gei_f */ - 16, /* gtr_f */ - 28, /* gti_f */ - 16, /* ner_f */ - 28, /* nei_f */ - 16, /* unltr_f */ - 28, /* unlti_f */ - 16, /* unler_f */ - 28, /* unlei_f */ - 16, /* uneqr_f */ - 28, /* uneqi_f */ - 16, /* unger_f */ - 28, /* ungei_f */ - 16, /* ungtr_f */ - 28, /* ungti_f */ - 16, /* ltgtr_f */ - 28, /* ltgti_f */ - 16, /* ordr_f */ - 28, /* ordi_f */ - 16, /* unordr_f */ - 28, /* unordi_f */ - 12, /* truncr_f_i */ - 0, /* truncr_f_l */ - 12, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 12, /* movi_f */ - 4, /* ldr_f */ - 12, /* ldi_f */ - 4, /* ldxr_f */ - 4, /* ldxi_f */ - 4, /* str_f */ - 12, /* sti_f */ - 8, /* stxr_f */ - 4, /* stxi_f */ - 16, /* bltr_f */ - 28, /* blti_f */ - 16, /* bler_f */ - 28, /* blei_f */ - 16, /* beqr_f */ - 28, /* beqi_f */ - 16, /* bger_f */ - 28, /* bgei_f */ - 16, /* bgtr_f */ - 28, /* bgti_f */ - 16, /* bner_f */ - 28, /* bnei_f */ - 16, /* bunltr_f */ - 28, /* bunlti_f */ - 16, /* bunler_f */ - 28, /* bunlei_f */ - 16, /* buneqr_f */ - 28, /* buneqi_f */ - 16, /* bunger_f */ - 28, /* bungei_f */ - 16, /* bungtr_f */ - 28, /* bungti_f */ - 16, /* bltgtr_f */ - 28, /* bltgti_f */ - 16, /* bordr_f */ - 28, /* bordi_f */ - 16, /* bunordr_f */ - 28, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 24, /* addi_d */ - 4, /* subr_d */ - 24, /* subi_d */ - 24, /* rsbi_d */ - 4, /* mulr_d */ - 24, /* muli_d */ - 4, /* divr_d */ - 24, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 36, /* lti_d */ - 16, /* ler_d */ - 36, /* lei_d */ - 16, /* eqr_d */ - 36, /* eqi_d */ - 16, /* ger_d */ - 36, /* gei_d */ - 16, /* gtr_d */ - 36, /* gti_d */ - 16, /* ner_d */ - 36, /* nei_d */ - 16, /* unltr_d */ - 36, /* unlti_d */ - 16, /* unler_d */ - 36, /* unlei_d */ - 16, /* uneqr_d */ - 36, /* uneqi_d */ - 16, /* unger_d */ - 36, /* ungei_d */ - 16, /* ungtr_d */ - 36, /* ungti_d */ - 16, /* ltgtr_d */ - 36, /* ltgti_d */ - 16, /* ordr_d */ - 36, /* ordi_d */ - 16, /* unordr_d */ - 36, /* unordi_d */ - 12, /* truncr_d_i */ - 0, /* truncr_d_l */ - 12, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 20, /* movi_d */ - 4, /* ldr_d */ - 12, /* ldi_d */ - 4, /* ldxr_d */ - 4, /* ldxi_d */ - 4, /* str_d */ - 12, /* sti_d */ - 8, /* stxr_d */ - 4, /* stxi_d */ - 16, /* bltr_d */ - 36, /* blti_d */ - 16, /* bler_d */ - 36, /* blei_d */ - 16, /* beqr_d */ - 36, /* beqi_d */ - 16, /* bger_d */ - 36, /* bgei_d */ - 16, /* bgtr_d */ - 36, /* bgti_d */ - 16, /* bner_d */ - 36, /* bnei_d */ - 16, /* bunltr_d */ - 36, /* bunlti_d */ - 16, /* bunler_d */ - 36, /* bunlei_d */ - 16, /* buneqr_d */ - 36, /* buneqi_d */ - 16, /* bunger_d */ - 36, /* bungei_d */ - 16, /* bungtr_d */ - 36, /* bungti_d */ - 16, /* bltgtr_d */ - 36, /* bltgti_d */ - 16, /* bordr_d */ - 36, /* bordi_d */ - 16, /* bunordr_d */ - 36, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_ia64-sz.c b/libguile/lightning/lib/jit_ia64-sz.c deleted file mode 100644 index 59826d99d..000000000 --- a/libguile/lightning/lib/jit_ia64-sz.c +++ /dev/null @@ -1,402 +0,0 @@ - -#if __WORDSIZE == 64 -#define JIT_INSTR_MAX 224 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 224, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 16, /* va_start */ - 32, /* va_arg */ - 32, /* va_arg_d */ - 0, /* va_end */ - 16, /* addr */ - 32, /* addi */ - 32, /* addcr */ - 48, /* addci */ - 64, /* addxr */ - 64, /* addxi */ - 16, /* subr */ - 32, /* subi */ - 32, /* subcr */ - 48, /* subci */ - 64, /* subxr */ - 64, /* subxi */ - 32, /* rsbi */ - 48, /* mulr */ - 64, /* muli */ - 112, /* qmulr */ - 112, /* qmuli */ - 112, /* qmulr_u */ - 112, /* qmuli_u */ - 80, /* divr */ - 96, /* divi */ - 80, /* divr_u */ - 96, /* divi_u */ - 144, /* qdivr */ - 144, /* qdivi */ - 144, /* qdivr_u */ - 144, /* qdivi_u */ - 80, /* remr */ - 96, /* remi */ - 80, /* remr_u */ - 96, /* remi_u */ - 16, /* andr */ - 32, /* andi */ - 16, /* orr */ - 32, /* ori */ - 16, /* xorr */ - 32, /* xori */ - 16, /* lshr */ - 16, /* lshi */ - 16, /* rshr */ - 16, /* rshi */ - 16, /* rshr_u */ - 16, /* rshi_u */ - 16, /* negr */ - 16, /* comr */ - 32, /* ltr */ - 32, /* lti */ - 32, /* ltr_u */ - 32, /* lti_u */ - 32, /* ler */ - 32, /* lei */ - 32, /* ler_u */ - 32, /* lei_u */ - 32, /* eqr */ - 32, /* eqi */ - 32, /* ger */ - 32, /* gei */ - 32, /* ger_u */ - 32, /* gei_u */ - 32, /* gtr */ - 32, /* gti */ - 32, /* gtr_u */ - 32, /* gti_u */ - 32, /* ner */ - 32, /* nei */ - 16, /* movr */ - 16, /* movi */ - 16, /* extr_c */ - 16, /* extr_uc */ - 16, /* extr_s */ - 16, /* extr_us */ - 16, /* extr_i */ - 16, /* extr_ui */ - 64, /* htonr_us */ - 160, /* htonr_ui */ - 16, /* htonr_ul */ - 16, /* ldr_c */ - 32, /* ldi_c */ - 16, /* ldr_uc */ - 32, /* ldi_uc */ - 16, /* ldr_s */ - 32, /* ldi_s */ - 16, /* ldr_us */ - 32, /* ldi_us */ - 16, /* ldr_i */ - 32, /* ldi_i */ - 16, /* ldr_ui */ - 32, /* ldi_ui */ - 16, /* ldr_l */ - 32, /* ldi_l */ - 32, /* ldxr_c */ - 48, /* ldxi_c */ - 16, /* ldxr_uc */ - 32, /* ldxi_uc */ - 32, /* ldxr_s */ - 48, /* ldxi_s */ - 16, /* ldxr_us */ - 32, /* ldxi_us */ - 32, /* ldxr_i */ - 48, /* ldxi_i */ - 16, /* ldxr_ui */ - 32, /* ldxi_ui */ - 16, /* ldxr_l */ - 32, /* ldxi_l */ - 16, /* str_c */ - 32, /* sti_c */ - 16, /* str_s */ - 32, /* sti_s */ - 16, /* str_i */ - 32, /* sti_i */ - 16, /* str_l */ - 32, /* sti_l */ - 16, /* stxr_c */ - 32, /* stxi_c */ - 16, /* stxr_s */ - 32, /* stxi_s */ - 16, /* stxr_i */ - 32, /* stxi_i */ - 16, /* stxr_l */ - 32, /* stxi_l */ - 32, /* bltr */ - 32, /* blti */ - 32, /* bltr_u */ - 32, /* blti_u */ - 32, /* bler */ - 32, /* blei */ - 32, /* bler_u */ - 32, /* blei_u */ - 32, /* beqr */ - 48, /* beqi */ - 32, /* bger */ - 32, /* bgei */ - 32, /* bger_u */ - 32, /* bgei_u */ - 32, /* bgtr */ - 32, /* bgti */ - 32, /* bgtr_u */ - 32, /* bgti_u */ - 32, /* bner */ - 48, /* bnei */ - 32, /* bmsr */ - 48, /* bmsi */ - 32, /* bmcr */ - 48, /* bmci */ - 96, /* boaddr */ - 112, /* boaddi */ - 64, /* boaddr_u */ - 64, /* boaddi_u */ - 96, /* bxaddr */ - 112, /* bxaddi */ - 64, /* bxaddr_u */ - 64, /* bxaddi_u */ - 112, /* bosubr */ - 112, /* bosubi */ - 64, /* bosubr_u */ - 64, /* bosubi_u */ - 112, /* bxsubr */ - 112, /* bxsubi */ - 64, /* bxsubr_u */ - 64, /* bxsubi_u */ - 16, /* jmpr */ - 16, /* jmpi */ - 32, /* callr */ - 48, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 128, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 16, /* addr_f */ - 48, /* addi_f */ - 16, /* subr_f */ - 48, /* subi_f */ - 48, /* rsbi_f */ - 16, /* mulr_f */ - 48, /* muli_f */ - 160, /* divr_f */ - 192, /* divi_f */ - 16, /* negr_f */ - 16, /* absr_f */ - 80, /* sqrtr_f */ - 32, /* ltr_f */ - 64, /* lti_f */ - 32, /* ler_f */ - 64, /* lei_f */ - 32, /* eqr_f */ - 64, /* eqi_f */ - 32, /* ger_f */ - 64, /* gei_f */ - 32, /* gtr_f */ - 64, /* gti_f */ - 32, /* ner_f */ - 64, /* nei_f */ - 32, /* unltr_f */ - 64, /* unlti_f */ - 32, /* unler_f */ - 64, /* unlei_f */ - 48, /* uneqr_f */ - 96, /* uneqi_f */ - 32, /* unger_f */ - 64, /* ungei_f */ - 32, /* ungtr_f */ - 64, /* ungti_f */ - 48, /* ltgtr_f */ - 96, /* ltgti_f */ - 32, /* ordr_f */ - 64, /* ordi_f */ - 32, /* unordr_f */ - 64, /* unordi_f */ - 32, /* truncr_f_i */ - 32, /* truncr_f_l */ - 48, /* extr_f */ - 16, /* extr_d_f */ - 16, /* movr_f */ - 32, /* movi_f */ - 16, /* ldr_f */ - 32, /* ldi_f */ - 16, /* ldxr_f */ - 32, /* ldxi_f */ - 16, /* str_f */ - 32, /* sti_f */ - 16, /* stxr_f */ - 32, /* stxi_f */ - 32, /* bltr_f */ - 64, /* blti_f */ - 32, /* bler_f */ - 64, /* blei_f */ - 32, /* beqr_f */ - 64, /* beqi_f */ - 32, /* bger_f */ - 64, /* bgei_f */ - 32, /* bgtr_f */ - 64, /* bgti_f */ - 32, /* bner_f */ - 64, /* bnei_f */ - 32, /* bunltr_f */ - 64, /* bunlti_f */ - 32, /* bunler_f */ - 64, /* bunlei_f */ - 80, /* buneqr_f */ - 112, /* buneqi_f */ - 32, /* bunger_f */ - 64, /* bungei_f */ - 32, /* bungtr_f */ - 64, /* bungti_f */ - 80, /* bltgtr_f */ - 112, /* bltgti_f */ - 32, /* bordr_f */ - 64, /* bordi_f */ - 32, /* bunordr_f */ - 64, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 16, /* addr_d */ - 48, /* addi_d */ - 16, /* subr_d */ - 48, /* subi_d */ - 48, /* rsbi_d */ - 16, /* mulr_d */ - 48, /* muli_d */ - 160, /* divr_d */ - 192, /* divi_d */ - 16, /* negr_d */ - 16, /* absr_d */ - 80, /* sqrtr_d */ - 32, /* ltr_d */ - 64, /* lti_d */ - 32, /* ler_d */ - 64, /* lei_d */ - 32, /* eqr_d */ - 64, /* eqi_d */ - 32, /* ger_d */ - 64, /* gei_d */ - 32, /* gtr_d */ - 64, /* gti_d */ - 32, /* ner_d */ - 64, /* nei_d */ - 32, /* unltr_d */ - 64, /* unlti_d */ - 32, /* unler_d */ - 64, /* unlei_d */ - 48, /* uneqr_d */ - 96, /* uneqi_d */ - 32, /* unger_d */ - 64, /* ungei_d */ - 32, /* ungtr_d */ - 64, /* ungti_d */ - 48, /* ltgtr_d */ - 96, /* ltgti_d */ - 32, /* ordr_d */ - 64, /* ordi_d */ - 32, /* unordr_d */ - 64, /* unordi_d */ - 32, /* truncr_d_i */ - 32, /* truncr_d_l */ - 48, /* extr_d */ - 16, /* extr_f_d */ - 16, /* movr_d */ - 32, /* movi_d */ - 16, /* ldr_d */ - 32, /* ldi_d */ - 16, /* ldxr_d */ - 32, /* ldxi_d */ - 16, /* str_d */ - 32, /* sti_d */ - 16, /* stxr_d */ - 32, /* stxi_d */ - 32, /* bltr_d */ - 64, /* blti_d */ - 32, /* bler_d */ - 64, /* blei_d */ - 32, /* beqr_d */ - 64, /* beqi_d */ - 32, /* bger_d */ - 64, /* bgei_d */ - 32, /* bgtr_d */ - 64, /* bgti_d */ - 32, /* bner_d */ - 64, /* bnei_d */ - 32, /* bunltr_d */ - 64, /* bunlti_d */ - 32, /* bunler_d */ - 64, /* bunlei_d */ - 80, /* buneqr_d */ - 112, /* buneqi_d */ - 32, /* bunger_d */ - 64, /* bungei_d */ - 32, /* bungtr_d */ - 64, /* bungti_d */ - 80, /* bltgtr_d */ - 112, /* bltgti_d */ - 32, /* bordr_d */ - 64, /* bordi_d */ - 32, /* bunordr_d */ - 64, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 16, /* movr_d_w */ - 32, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_memory.c b/libguile/lightning/lib/jit_memory.c deleted file mode 100644 index 10e0925bb..000000000 --- a/libguile/lightning/lib/jit_memory.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2013-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#define DEBUG 1 -#define DISASSEMBLER 0 - -#include <lightning.h> -#include <lightning/jit_private.h> -#include <sys/mman.h> - -/* - * Prototypes - */ -static void *jit_default_alloc_func(size_t); -static void *jit_default_realloc_func(void*, size_t); -static void jit_default_free_func(void *); - -/* - * Initialization - */ -static jit_alloc_func_ptr jit_alloc_ptr = jit_default_alloc_func; -static jit_realloc_func_ptr jit_realloc_ptr = jit_default_realloc_func; -static jit_free_func_ptr jit_free_ptr = jit_default_free_func; - -/* - * Implementation - */ -jit_pointer_t -jit_memcpy(jit_pointer_t dst, const void * src, jit_word_t size) -{ - if (size) - return (memcpy(dst, src, size)); - return (dst); -} - -jit_pointer_t -jit_memmove(jit_pointer_t dst, const void *src , jit_word_t size) -{ - if (size) - return (memmove(dst, src, size)); - return (dst); -} - -void -jit_set_memory_functions(jit_alloc_func_ptr alloc_ptr, - jit_realloc_func_ptr realloc_ptr, - jit_free_func_ptr free_ptr) -{ - if (alloc_ptr == NULL) - alloc_ptr = jit_default_alloc_func; - if (realloc_ptr == NULL) - realloc_ptr = jit_default_realloc_func; - if (free_ptr == NULL) - free_ptr = jit_default_free_func; - jit_alloc_ptr = alloc_ptr; - jit_realloc_ptr = realloc_ptr; - jit_free_ptr = free_ptr; -} - -void -jit_get_memory_functions(jit_alloc_func_ptr *alloc_ptr, - jit_realloc_func_ptr *realloc_ptr, - jit_free_func_ptr *free_ptr) -{ - *alloc_ptr = jit_alloc_ptr; - *realloc_ptr = jit_realloc_ptr; - *free_ptr = jit_free_ptr; -} - -void -jit_alloc(jit_pointer_t *ptr, jit_word_t size) -{ - *ptr = (*jit_alloc_ptr)(size); - memset(*ptr, 0, size); -} - -void -jit_realloc(jit_pointer_t *ptr, jit_word_t old_size, jit_word_t new_size) -{ - *ptr = (*jit_realloc_ptr)(*ptr, new_size); - if (old_size < new_size) - memset((jit_int8_t*)*ptr + old_size, 0, new_size - old_size); -} - -void -jit_free(jit_pointer_t *ptr) -{ - if (*ptr) { - (*jit_free_ptr)(*ptr); - *ptr = NULL; - } -} - -static void * -jit_default_alloc_func(size_t size) -{ - return (malloc(size)); -} - -static void * -jit_default_realloc_func(void *ptr, size_t size) -{ - return (realloc(ptr, size)); -} - -static void -jit_default_free_func(void *ptr) -{ - free(ptr); -} diff --git a/libguile/lightning/lib/jit_mips-sz.c b/libguile/lightning/lib/jit_mips-sz.c deleted file mode 100644 index 613aa0090..000000000 --- a/libguile/lightning/lib/jit_mips-sz.c +++ /dev/null @@ -1,1210 +0,0 @@ - -#if __WORDSIZE == 32 -#if NEW_ABI -#define JIT_INSTR_MAX 44 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 44, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 0, /* va_start */ - 0, /* va_arg */ - 0, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 12, /* addcr */ - 20, /* addci */ - 28, /* addxr */ - 28, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 12, /* subcr */ - 20, /* subci */ - 28, /* subxr */ - 28, /* subxi */ - 16, /* rsbi */ - 8, /* mulr */ - 16, /* muli */ - 12, /* qmulr */ - 20, /* qmuli */ - 12, /* qmulr_u */ - 20, /* qmuli_u */ - 8, /* divr */ - 16, /* divi */ - 8, /* divr_u */ - 16, /* divi_u */ - 12, /* qdivr */ - 16, /* qdivi */ - 12, /* qdivr_u */ - 16, /* qdivi_u */ - 8, /* remr */ - 16, /* remi */ - 8, /* remr_u */ - 16, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 8, /* comr */ - 4, /* ltr */ - 4, /* lti */ - 4, /* ltr_u */ - 4, /* lti_u */ - 8, /* ler */ - 12, /* lei */ - 8, /* ler_u */ - 12, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 8, /* ger */ - 12, /* gei */ - 8, /* ger_u */ - 12, /* gei_u */ - 4, /* gtr */ - 8, /* gti */ - 4, /* gtr_u */ - 8, /* gti_u */ - 8, /* ner */ - 8, /* nei */ - 4, /* movr */ - 8, /* movi */ - 8, /* extr_c */ - 4, /* extr_uc */ - 8, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 8, /* ldxr_c */ - 4, /* ldxi_c */ - 8, /* ldxr_uc */ - 4, /* ldxi_uc */ - 8, /* ldxr_s */ - 4, /* ldxi_s */ - 8, /* ldxr_us */ - 4, /* ldxi_us */ - 8, /* ldxr_i */ - 4, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 8, /* stxr_c */ - 4, /* stxi_c */ - 8, /* stxr_s */ - 4, /* stxi_s */ - 8, /* stxr_i */ - 4, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 12, /* bltr */ - 12, /* blti */ - 12, /* bltr_u */ - 12, /* blti_u */ - 12, /* bler */ - 16, /* blei */ - 12, /* bler_u */ - 16, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 12, /* bger */ - 12, /* bgei */ - 12, /* bger_u */ - 12, /* bgei_u */ - 12, /* bgtr */ - 16, /* bgti */ - 12, /* bgtr_u */ - 16, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 28, /* boaddr */ - 28, /* boaddi */ - 16, /* boaddr_u */ - 20, /* boaddi_u */ - 28, /* bxaddr */ - 28, /* bxaddi */ - 16, /* bxaddr_u */ - 20, /* bxaddi_u */ - 28, /* bosubr */ - 28, /* bosubi */ - 16, /* bosubr_u */ - 20, /* bosubi_u */ - 28, /* bxsubr */ - 28, /* bxsubi */ - 16, /* bxsubr_u */ - 20, /* bxsubi_u */ - 0, /* jmpr */ - 8, /* jmpi */ - 12, /* callr */ - 16, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 44, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 16, /* addi_f */ - 4, /* subr_f */ - 16, /* subi_f */ - 16, /* rsbi_f */ - 4, /* mulr_f */ - 16, /* muli_f */ - 4, /* divr_f */ - 16, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 28, /* lti_f */ - 16, /* ler_f */ - 28, /* lei_f */ - 16, /* eqr_f */ - 28, /* eqi_f */ - 16, /* ger_f */ - 28, /* gei_f */ - 16, /* gtr_f */ - 28, /* gti_f */ - 16, /* ner_f */ - 28, /* nei_f */ - 16, /* unltr_f */ - 28, /* unlti_f */ - 16, /* unler_f */ - 28, /* unlei_f */ - 16, /* uneqr_f */ - 28, /* uneqi_f */ - 16, /* unger_f */ - 28, /* ungei_f */ - 16, /* ungtr_f */ - 28, /* ungti_f */ - 16, /* ltgtr_f */ - 28, /* ltgti_f */ - 16, /* ordr_f */ - 28, /* ordi_f */ - 16, /* unordr_f */ - 28, /* unordi_f */ - 8, /* truncr_f_i */ - 0, /* truncr_f_l */ - 8, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 12, /* movi_f */ - 4, /* ldr_f */ - 12, /* ldi_f */ - 8, /* ldxr_f */ - 4, /* ldxi_f */ - 4, /* str_f */ - 12, /* sti_f */ - 8, /* stxr_f */ - 4, /* stxi_f */ - 12, /* bltr_f */ - 24, /* blti_f */ - 12, /* bler_f */ - 24, /* blei_f */ - 12, /* beqr_f */ - 24, /* beqi_f */ - 12, /* bger_f */ - 24, /* bgei_f */ - 12, /* bgtr_f */ - 24, /* bgti_f */ - 12, /* bner_f */ - 24, /* bnei_f */ - 12, /* bunltr_f */ - 24, /* bunlti_f */ - 12, /* bunler_f */ - 24, /* bunlei_f */ - 12, /* buneqr_f */ - 24, /* buneqi_f */ - 12, /* bunger_f */ - 24, /* bungei_f */ - 12, /* bungtr_f */ - 24, /* bungti_f */ - 12, /* bltgtr_f */ - 24, /* bltgti_f */ - 12, /* bordr_f */ - 24, /* bordi_f */ - 12, /* bunordr_f */ - 24, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 16, /* addi_d */ - 4, /* subr_d */ - 16, /* subi_d */ - 16, /* rsbi_d */ - 4, /* mulr_d */ - 16, /* muli_d */ - 4, /* divr_d */ - 16, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 28, /* lti_d */ - 16, /* ler_d */ - 28, /* lei_d */ - 16, /* eqr_d */ - 28, /* eqi_d */ - 16, /* ger_d */ - 28, /* gei_d */ - 16, /* gtr_d */ - 28, /* gti_d */ - 16, /* ner_d */ - 28, /* nei_d */ - 16, /* unltr_d */ - 28, /* unlti_d */ - 16, /* unler_d */ - 28, /* unlei_d */ - 16, /* uneqr_d */ - 28, /* uneqi_d */ - 16, /* unger_d */ - 28, /* ungei_d */ - 16, /* ungtr_d */ - 28, /* ungti_d */ - 16, /* ltgtr_d */ - 28, /* ltgti_d */ - 16, /* ordr_d */ - 28, /* ordi_d */ - 16, /* unordr_d */ - 28, /* unordi_d */ - 8, /* truncr_d_i */ - 0, /* truncr_d_l */ - 8, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 12, /* movi_d */ - 4, /* ldr_d */ - 12, /* ldi_d */ - 8, /* ldxr_d */ - 4, /* ldxi_d */ - 4, /* str_d */ - 12, /* sti_d */ - 8, /* stxr_d */ - 4, /* stxi_d */ - 12, /* bltr_d */ - 24, /* blti_d */ - 12, /* bler_d */ - 24, /* blei_d */ - 12, /* beqr_d */ - 24, /* beqi_d */ - 12, /* bger_d */ - 24, /* bgei_d */ - 12, /* bgtr_d */ - 24, /* bgti_d */ - 12, /* bner_d */ - 24, /* bnei_d */ - 12, /* bunltr_d */ - 24, /* bunlti_d */ - 12, /* bunler_d */ - 24, /* bunlei_d */ - 12, /* buneqr_d */ - 24, /* buneqi_d */ - 12, /* bunger_d */ - 24, /* bungei_d */ - 12, /* bungtr_d */ - 24, /* bungti_d */ - 12, /* bltgtr_d */ - 24, /* bltgti_d */ - 12, /* bordr_d */ - 24, /* bordi_d */ - 12, /* bunordr_d */ - 24, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 4, /* movr_d_w */ - 12, /* movi_d_w */ -#endif /* NEW_ABI */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 32 -#if !NEW_ABI -#define JIT_INSTR_MAX 116 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 116, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 20, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 12, /* addcr */ - 20, /* addci */ - 28, /* addxr */ - 28, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 12, /* subcr */ - 20, /* subci */ - 28, /* subxr */ - 28, /* subxi */ - 16, /* rsbi */ - 8, /* mulr */ - 16, /* muli */ - 12, /* qmulr */ - 20, /* qmuli */ - 12, /* qmulr_u */ - 20, /* qmuli_u */ - 8, /* divr */ - 16, /* divi */ - 8, /* divr_u */ - 16, /* divi_u */ - 12, /* qdivr */ - 16, /* qdivi */ - 12, /* qdivr_u */ - 16, /* qdivi_u */ - 8, /* remr */ - 16, /* remi */ - 8, /* remr_u */ - 16, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 8, /* comr */ - 4, /* ltr */ - 4, /* lti */ - 4, /* ltr_u */ - 4, /* lti_u */ - 8, /* ler */ - 12, /* lei */ - 8, /* ler_u */ - 12, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 8, /* ger */ - 12, /* gei */ - 8, /* ger_u */ - 12, /* gei_u */ - 4, /* gtr */ - 8, /* gti */ - 4, /* gtr_u */ - 8, /* gti_u */ - 8, /* ner */ - 8, /* nei */ - 4, /* movr */ - 8, /* movi */ - 8, /* extr_c */ - 4, /* extr_uc */ - 8, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 20, /* htonr_us */ - 52, /* htonr_ui */ - 0, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 8, /* ldxr_c */ - 16, /* ldxi_c */ - 8, /* ldxr_uc */ - 16, /* ldxi_uc */ - 8, /* ldxr_s */ - 16, /* ldxi_s */ - 8, /* ldxr_us */ - 16, /* ldxi_us */ - 8, /* ldxr_i */ - 16, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 8, /* stxr_c */ - 16, /* stxi_c */ - 8, /* stxr_s */ - 16, /* stxi_s */ - 8, /* stxr_i */ - 16, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 12, /* bltr */ - 12, /* blti */ - 12, /* bltr_u */ - 12, /* blti_u */ - 12, /* bler */ - 16, /* blei */ - 12, /* bler_u */ - 16, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 12, /* bger */ - 12, /* bgei */ - 12, /* bger_u */ - 12, /* bgei_u */ - 12, /* bgtr */ - 16, /* bgti */ - 12, /* bgtr_u */ - 16, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 28, /* boaddr */ - 28, /* boaddi */ - 16, /* boaddr_u */ - 20, /* boaddi_u */ - 28, /* bxaddr */ - 28, /* bxaddi */ - 16, /* bxaddr_u */ - 20, /* bxaddi_u */ - 28, /* bosubr */ - 28, /* bosubi */ - 16, /* bosubr_u */ - 20, /* bosubi_u */ - 28, /* bxsubr */ - 28, /* bxsubi */ - 16, /* bxsubr_u */ - 20, /* bxsubi_u */ - 8, /* jmpr */ - 8, /* jmpi */ - 12, /* callr */ - 16, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 116, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 16, /* addi_f */ - 4, /* subr_f */ - 16, /* subi_f */ - 16, /* rsbi_f */ - 4, /* mulr_f */ - 16, /* muli_f */ - 4, /* divr_f */ - 16, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 28, /* lti_f */ - 16, /* ler_f */ - 28, /* lei_f */ - 16, /* eqr_f */ - 28, /* eqi_f */ - 16, /* ger_f */ - 28, /* gei_f */ - 16, /* gtr_f */ - 28, /* gti_f */ - 16, /* ner_f */ - 28, /* nei_f */ - 16, /* unltr_f */ - 28, /* unlti_f */ - 16, /* unler_f */ - 28, /* unlei_f */ - 16, /* uneqr_f */ - 28, /* uneqi_f */ - 16, /* unger_f */ - 28, /* ungei_f */ - 16, /* ungtr_f */ - 28, /* ungti_f */ - 16, /* ltgtr_f */ - 28, /* ltgti_f */ - 16, /* ordr_f */ - 28, /* ordi_f */ - 16, /* unordr_f */ - 28, /* unordi_f */ - 8, /* truncr_f_i */ - 0, /* truncr_f_l */ - 8, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 12, /* movi_f */ - 4, /* ldr_f */ - 12, /* ldi_f */ - 8, /* ldxr_f */ - 16, /* ldxi_f */ - 4, /* str_f */ - 12, /* sti_f */ - 8, /* stxr_f */ - 16, /* stxi_f */ - 12, /* bltr_f */ - 24, /* blti_f */ - 12, /* bler_f */ - 24, /* blei_f */ - 12, /* beqr_f */ - 24, /* beqi_f */ - 12, /* bger_f */ - 24, /* bgei_f */ - 12, /* bgtr_f */ - 24, /* bgti_f */ - 12, /* bner_f */ - 24, /* bnei_f */ - 12, /* bunltr_f */ - 24, /* bunlti_f */ - 12, /* bunler_f */ - 24, /* bunlei_f */ - 12, /* buneqr_f */ - 24, /* buneqi_f */ - 12, /* bunger_f */ - 24, /* bungei_f */ - 12, /* bungtr_f */ - 24, /* bungti_f */ - 12, /* bltgtr_f */ - 24, /* bltgti_f */ - 12, /* bordr_f */ - 24, /* bordi_f */ - 12, /* bunordr_f */ - 24, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 20, /* addi_d */ - 4, /* subr_d */ - 20, /* subi_d */ - 20, /* rsbi_d */ - 4, /* mulr_d */ - 20, /* muli_d */ - 4, /* divr_d */ - 20, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 40, /* lti_d */ - 16, /* ler_d */ - 40, /* lei_d */ - 16, /* eqr_d */ - 40, /* eqi_d */ - 16, /* ger_d */ - 40, /* gei_d */ - 16, /* gtr_d */ - 40, /* gti_d */ - 16, /* ner_d */ - 40, /* nei_d */ - 16, /* unltr_d */ - 40, /* unlti_d */ - 16, /* unler_d */ - 40, /* unlei_d */ - 16, /* uneqr_d */ - 40, /* uneqi_d */ - 16, /* unger_d */ - 40, /* ungei_d */ - 16, /* ungtr_d */ - 40, /* ungti_d */ - 16, /* ltgtr_d */ - 40, /* ltgti_d */ - 16, /* ordr_d */ - 40, /* ordi_d */ - 16, /* unordr_d */ - 40, /* unordi_d */ - 8, /* truncr_d_i */ - 0, /* truncr_d_l */ - 8, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 24, /* movi_d */ - 8, /* ldr_d */ - 16, /* ldi_d */ - 12, /* ldxr_d */ - 20, /* ldxi_d */ - 8, /* str_d */ - 16, /* sti_d */ - 12, /* stxr_d */ - 20, /* stxi_d */ - 12, /* bltr_d */ - 28, /* blti_d */ - 12, /* bler_d */ - 28, /* blei_d */ - 12, /* beqr_d */ - 28, /* beqi_d */ - 12, /* bger_d */ - 28, /* bgei_d */ - 12, /* bgtr_d */ - 28, /* bgti_d */ - 12, /* bner_d */ - 36, /* bnei_d */ - 12, /* bunltr_d */ - 36, /* bunlti_d */ - 12, /* bunler_d */ - 36, /* bunlei_d */ - 12, /* buneqr_d */ - 36, /* buneqi_d */ - 12, /* bunger_d */ - 36, /* bungei_d */ - 12, /* bungtr_d */ - 36, /* bungti_d */ - 12, /* bltgtr_d */ - 28, /* bltgti_d */ - 12, /* bordr_d */ - 28, /* bordi_d */ - 12, /* bunordr_d */ - 36, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 4, /* movr_w_f */ - 8, /* movr_ww_d */ - 0, /* movr_w_d */ - 4, /* movr_f_w */ - 4, /* movi_f_w */ - 8, /* movr_d_ww */ - 8, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* NEW_ABI */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 64 -#define JIT_INSTR_MAX 44 - 0, /* data */ - 0, /* live */ - 4, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 44, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 0, /* va_start */ - 0, /* va_arg */ - 0, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 28, /* addi */ - 12, /* addcr */ - 36, /* addci */ - 28, /* addxr */ - 28, /* addxi */ - 4, /* subr */ - 28, /* subi */ - 12, /* subcr */ - 36, /* subci */ - 28, /* subxr */ - 28, /* subxi */ - 32, /* rsbi */ - 8, /* mulr */ - 32, /* muli */ - 12, /* qmulr */ - 32, /* qmuli */ - 12, /* qmulr_u */ - 32, /* qmuli_u */ - 8, /* divr */ - 32, /* divi */ - 8, /* divr_u */ - 32, /* divi_u */ - 12, /* qdivr */ - 16, /* qdivi */ - 12, /* qdivr_u */ - 16, /* qdivi_u */ - 8, /* remr */ - 32, /* remi */ - 8, /* remr_u */ - 32, /* remi_u */ - 4, /* andr */ - 28, /* andi */ - 4, /* orr */ - 28, /* ori */ - 4, /* xorr */ - 28, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 8, /* comr */ - 4, /* ltr */ - 4, /* lti */ - 4, /* ltr_u */ - 4, /* lti_u */ - 8, /* ler */ - 12, /* lei */ - 8, /* ler_u */ - 12, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 8, /* ger */ - 12, /* gei */ - 8, /* ger_u */ - 12, /* gei_u */ - 4, /* gtr */ - 8, /* gti */ - 4, /* gtr_u */ - 8, /* gti_u */ - 8, /* ner */ - 8, /* nei */ - 4, /* movr */ - 28, /* movi */ - 8, /* extr_c */ - 4, /* extr_uc */ - 8, /* extr_s */ - 4, /* extr_us */ - 4, /* extr_i */ - 8, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 4, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 4, /* ldr_ui */ - 12, /* ldi_ui */ - 4, /* ldr_l */ - 12, /* ldi_l */ - 8, /* ldxr_c */ - 4, /* ldxi_c */ - 8, /* ldxr_uc */ - 4, /* ldxi_uc */ - 8, /* ldxr_s */ - 4, /* ldxi_s */ - 8, /* ldxr_us */ - 4, /* ldxi_us */ - 8, /* ldxr_i */ - 4, /* ldxi_i */ - 8, /* ldxr_ui */ - 4, /* ldxi_ui */ - 8, /* ldxr_l */ - 4, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 4, /* str_l */ - 12, /* sti_l */ - 8, /* stxr_c */ - 4, /* stxi_c */ - 8, /* stxr_s */ - 4, /* stxi_s */ - 8, /* stxr_i */ - 4, /* stxi_i */ - 8, /* stxr_l */ - 4, /* stxi_l */ - 12, /* bltr */ - 12, /* blti */ - 12, /* bltr_u */ - 12, /* blti_u */ - 12, /* bler */ - 16, /* blei */ - 12, /* bler_u */ - 16, /* blei_u */ - 8, /* beqr */ - 36, /* beqi */ - 12, /* bger */ - 12, /* bgei */ - 12, /* bger_u */ - 12, /* bgei_u */ - 12, /* bgtr */ - 16, /* bgti */ - 12, /* bgtr_u */ - 16, /* bgti_u */ - 8, /* bner */ - 32, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 28, /* boaddr */ - 28, /* boaddi */ - 16, /* boaddr_u */ - 20, /* boaddi_u */ - 28, /* bxaddr */ - 28, /* bxaddi */ - 16, /* bxaddr_u */ - 20, /* bxaddi_u */ - 28, /* bosubr */ - 28, /* bosubi */ - 16, /* bosubr_u */ - 20, /* bosubi_u */ - 28, /* bxsubr */ - 28, /* bxsubi */ - 16, /* bxsubr_u */ - 20, /* bxsubi_u */ - 0, /* jmpr */ - 8, /* jmpi */ - 12, /* callr */ - 32, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 44, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 16, /* addi_f */ - 4, /* subr_f */ - 16, /* subi_f */ - 16, /* rsbi_f */ - 4, /* mulr_f */ - 16, /* muli_f */ - 4, /* divr_f */ - 16, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 28, /* lti_f */ - 16, /* ler_f */ - 28, /* lei_f */ - 16, /* eqr_f */ - 28, /* eqi_f */ - 16, /* ger_f */ - 28, /* gei_f */ - 16, /* gtr_f */ - 28, /* gti_f */ - 16, /* ner_f */ - 28, /* nei_f */ - 16, /* unltr_f */ - 28, /* unlti_f */ - 16, /* unler_f */ - 28, /* unlei_f */ - 16, /* uneqr_f */ - 28, /* uneqi_f */ - 16, /* unger_f */ - 28, /* ungei_f */ - 16, /* ungtr_f */ - 28, /* ungti_f */ - 16, /* ltgtr_f */ - 28, /* ltgti_f */ - 16, /* ordr_f */ - 28, /* ordi_f */ - 16, /* unordr_f */ - 28, /* unordi_f */ - 8, /* truncr_f_i */ - 8, /* truncr_f_l */ - 8, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 12, /* movi_f */ - 4, /* ldr_f */ - 12, /* ldi_f */ - 8, /* ldxr_f */ - 4, /* ldxi_f */ - 4, /* str_f */ - 12, /* sti_f */ - 8, /* stxr_f */ - 4, /* stxi_f */ - 12, /* bltr_f */ - 24, /* blti_f */ - 12, /* bler_f */ - 24, /* blei_f */ - 12, /* beqr_f */ - 24, /* beqi_f */ - 12, /* bger_f */ - 24, /* bgei_f */ - 12, /* bgtr_f */ - 24, /* bgti_f */ - 12, /* bner_f */ - 24, /* bnei_f */ - 12, /* bunltr_f */ - 24, /* bunlti_f */ - 12, /* bunler_f */ - 24, /* bunlei_f */ - 12, /* buneqr_f */ - 24, /* buneqi_f */ - 12, /* bunger_f */ - 24, /* bungei_f */ - 12, /* bungtr_f */ - 24, /* bungti_f */ - 12, /* bltgtr_f */ - 24, /* bltgti_f */ - 12, /* bordr_f */ - 24, /* bordi_f */ - 12, /* bunordr_f */ - 24, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 16, /* addi_d */ - 4, /* subr_d */ - 16, /* subi_d */ - 16, /* rsbi_d */ - 4, /* mulr_d */ - 16, /* muli_d */ - 4, /* divr_d */ - 16, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 28, /* lti_d */ - 16, /* ler_d */ - 28, /* lei_d */ - 16, /* eqr_d */ - 28, /* eqi_d */ - 16, /* ger_d */ - 28, /* gei_d */ - 16, /* gtr_d */ - 28, /* gti_d */ - 16, /* ner_d */ - 28, /* nei_d */ - 16, /* unltr_d */ - 28, /* unlti_d */ - 16, /* unler_d */ - 28, /* unlei_d */ - 16, /* uneqr_d */ - 28, /* uneqi_d */ - 16, /* unger_d */ - 28, /* ungei_d */ - 16, /* ungtr_d */ - 28, /* ungti_d */ - 16, /* ltgtr_d */ - 28, /* ltgti_d */ - 16, /* ordr_d */ - 28, /* ordi_d */ - 16, /* unordr_d */ - 28, /* unordi_d */ - 8, /* truncr_d_i */ - 8, /* truncr_d_l */ - 8, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 12, /* movi_d */ - 4, /* ldr_d */ - 12, /* ldi_d */ - 8, /* ldxr_d */ - 4, /* ldxi_d */ - 4, /* str_d */ - 12, /* sti_d */ - 8, /* stxr_d */ - 4, /* stxi_d */ - 12, /* bltr_d */ - 24, /* blti_d */ - 12, /* bler_d */ - 24, /* blei_d */ - 12, /* beqr_d */ - 24, /* beqi_d */ - 12, /* bger_d */ - 24, /* bgei_d */ - 12, /* bgtr_d */ - 24, /* bgti_d */ - 12, /* bner_d */ - 24, /* bnei_d */ - 12, /* bunltr_d */ - 24, /* bunlti_d */ - 12, /* bunler_d */ - 24, /* bunlei_d */ - 12, /* buneqr_d */ - 24, /* buneqi_d */ - 12, /* bunger_d */ - 24, /* bungei_d */ - 12, /* bungtr_d */ - 24, /* bungti_d */ - 12, /* bltgtr_d */ - 24, /* bltgti_d */ - 12, /* bordr_d */ - 24, /* bordi_d */ - 12, /* bunordr_d */ - 24, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 4, /* movr_d_w */ - 12, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_names.c b/libguile/lightning/lib/jit_names.c deleted file mode 100644 index ba09a6a47..000000000 --- a/libguile/lightning/lib/jit_names.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright (C) 2014-2017 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -static char *code_name[] = { - "data", - "live", "align", - "save", "load", - "#name", "#note", - "label", - "prolog", - "ellipsis", "va_push", - "allocai", "allocar", - "arg", - "getarg_c", "getarg_uc", - "getarg_s", "getarg_us", - "getarg_i", "getarg_ui", - "getarg_l", - "putargr", "putargi", - "va_start", - "va_arg", "va_arg_d", - "va_end", - "addr", "addi", - "addcr", "addci", - "addxr", "addxi", - "subr", "subi", - "subcr", "subci", - "subxr", "subxi", - "rsbi", - "mulr", "muli", - "qmulr", "qmuli", - "qmulr_u", "qmuli_u", - "divr", "divi", - "divr_u", "divi_u", - "qdivr", "qdivi", - "qdivr_u", "qdivi_u", - "remr", "remi", - "remr_u", "remi_u", - "andr", "andi", - "orr", "ori", - "xorr", "xori", - "lshr", "lshi", - "rshr", "rshi", - "rshr_u", "rshi_u", - "negr", "comr", - "ltr", "lti", - "ltr_u", "lti_u", - "ler", "lei", - "ler_u", "lei_u", - "eqr", "eqi", - "ger", "gei", - "ger_u", "gei_u", - "gtr", "gti", - "gtr_u", "gti_u", - "ner", "nei", - "movr", "movi", - "extr_c", "extr_uc", - "extr_s", "extr_us", - "extr_i", "extr_ui", - "htonr_us", - "htonr_ui", "htonr_ul", - "ldr_c", "ldi_c", - "ldr_uc", "ldi_uc", - "ldr_s", "ldi_s", - "ldr_us", "ldi_us", - "ldr_i", "ldi_i", - "ldr_ui", "ldi_ui", - "ldr_l", "ldi_l", - "ldxr_c", "ldxi_c", - "ldxr_uc", "ldxi_uc", - "ldxr_s", "ldxi_s", - "ldxr_us", "ldxi_us", - "ldxr_i", "ldxi_i", - "ldxr_ui", "ldxi_ui", - "ldxr_l", "ldxi_l", - "str_c", "sti_c", - "str_s", "sti_s", - "str_i", "sti_i", - "str_l", "sti_l", - "stxr_c", "stxi_c", - "stxr_s", "stxi_s", - "stxr_i", "stxi_i", - "stxr_l", "stxi_l", - "bltr", "blti", - "bltr_u", "blti_u", - "bler", "blei", - "bler_u", "blei_u", - "beqr", "beqi", - "bger", "bgei", - "bger_u", "bgei_u", - "bgtr", "bgti", - "bgtr_u", "bgti_u", - "bner", "bnei", - "bmsr", "bmsi", - "bmcr", "bmci", - "boaddr", "boaddi", - "boaddr_u", "boaddi_u", - "bxaddr", "bxaddi", - "bxaddr_u", "bxaddi_u", - "bosubr", "bosubi", - "bosubr_u", "bosubi_u", - "bxsubr", "bxsubi", - "bxsubr_u", "bxsubi_u", - "jmpr", "jmpi", - "callr", "calli", - "prepare", - "pushargr", "pushargi", - "finishr", "finishi", - "ret", - "retr", "reti", - "retval_c", "retval_uc", - "retval_s", "retval_us", - "retval_i", "retval_ui", - "retval_l", - "epilog", - "arg_f", "getarg_f", - "putargr_f", "putargi_f", - "addr_f", "addi_f", - "subr_f", "subi_f", - "rsbi_f", - "mulr_f", "muli_f", - "divr_f", "divi_f", - "negr_f", "absr_f", - "sqrtr_f", - "ltr_f", "lti_f", - "ler_f", "lei_f", - "eqr_f", "eqi_f", - "ger_f", "gei_f", - "gtr_f", "gti_f", - "ner_f", "nei_f", - "unltr_f", "unlti_f", - "unler_f", "unlei_f", - "uneqr_f", "uneqi_f", - "unger_f", "ungei_f", - "ungtr_f", "ungti_f", - "ltgtr_f", "ltgti_f", - "ordr_f", "ordi_f", - "unordr_f", "unordi_f", - "truncr_f_i", "truncr_f_l", - "extr_f", "extr_d_f", - "movr_f", "movi_f", - "ldr_f", "ldi_f", - "ldxr_f", "ldxi_f", - "str_f", "sti_f", - "stxr_f", "stxi_f", - "bltr_f", "blti_f", - "bler_f", "blei_f", - "beqr_f", "beqi_f", - "bger_f", "bgei_f", - "bgtr_f", "bgti_f", - "bner_f", "bnei_f", - "bunltr_f", "bunlti_f", - "bunler_f", "bunlei_f", - "buneqr_f", "buneqi_f", - "bunger_f", "bungei_f", - "bungtr_f", "bungti_f", - "bltgtr_f", "bltgti_f", - "bordr_f", "bordi_f", - "bunordr_f", "bunordi_f", - "pushargr_f", "pushargi_f", - "retr_f", "reti_f", - "retval_f", - "arg_d", "getarg_d", - "putargr_d", "putargi_d", - "addr_d", "addi_d", - "subr_d", "subi_d", - "rsbi_d", - "mulr_d", "muli_d", - "divr_d", "divi_d", - "negr_d", "absr_d", - "sqrtr_d", - "ltr_d", "lti_d", - "ler_d", "lei_d", - "eqr_d", "eqi_d", - "ger_d", "gei_d", - "gtr_d", "gti_d", - "ner_d", "nei_d", - "unltr_d", "unlti_d", - "unler_d", "unlei_d", - "uneqr_d", "uneqi_d", - "unger_d", "ungei_d", - "ungtr_d", "ungti_d", - "ltgtr_d", "ltgti_d", - "ordr_d", "ordi_d", - "unordr_d", "unordi_d", - "truncr_d_i", "truncr_d_l", - "extr_d", "extr_f_d", - "movr_d", "movi_d", - "ldr_d", "ldi_d", - "ldxr_d", "ldxi_d", - "str_d", "sti_d", - "stxr_d", "stxi_d", - "bltr_d", "blti_d", - "bler_d", "blei_d", - "beqr_d", "beqi_d", - "bger_d", "bgei_d", - "bgtr_d", "bgti_d", - "bner_d", "bnei_d", - "bunltr_d", "bunlti_d", - "bunler_d", "bunlei_d", - "buneqr_d", "buneqi_d", - "bunger_d", "bungei_d", - "bungtr_d", "bungti_d", - "bltgtr_d", "bltgti_d", - "bordr_d", "bordi_d", - "bunordr_d", "bunordi_d", - "pushargr_d", "pushargi_d", - "retr_d", "reti_d", - "retval_d", - "movr_w_f", "movr_ww_d", - "movr_w_d", - "movr_f_w", "movi_f_w", - "movr_d_ww", "movi_d_ww", - "movr_d_w", "movi_d_w", -}; diff --git a/libguile/lightning/lib/jit_note.c b/libguile/lightning/lib/jit_note.c deleted file mode 100644 index b4e75b812..000000000 --- a/libguile/lightning/lib/jit_note.c +++ /dev/null @@ -1,417 +0,0 @@ -/* - * Copyright (C) 2013-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#define DEBUG 1 -#define DISASSEMBLER 0 - -#include <lightning.h> -#include <lightning/jit_private.h> - -/* - * Prototypes - */ -#define new_note(u, v) _new_note(_jit, u, v) -static jit_note_t *_new_note(jit_state_t *, jit_uint8_t*, char*); -static void new_line(jit_int32_t,jit_note_t*,char*,jit_int32_t,jit_int32_t); -#define note_search_index(u) _note_search_index(_jit, u) -static jit_int32_t _note_search_index(jit_state_t*, jit_uint8_t*); -static jit_int32_t line_insert_index(jit_note_t*,jit_int32_t); -static jit_int32_t line_search_index(jit_note_t*,jit_int32_t); -static jit_int32_t offset_insert_index(jit_line_t*,jit_int32_t); -static jit_int32_t offset_search_index(jit_line_t*,jit_int32_t); - -/* - * Implementation - */ -void -jit_init_note(void) -{ -} - -void -jit_finish_note(void) -{ -} - -jit_node_t * -_jit_name(jit_state_t *_jit, const char *name) -{ - jit_node_t *node; - - node = jit_new_node(jit_code_name); - if (name) - node->v.n = jit_data(name, strlen(name) + 1, 1); - else - node->v.p = NULL; - if (_jitc->note.head == NULL) - _jitc->note.head = _jitc->note.tail = node; - else { - _jitc->note.tail->link = node; - _jitc->note.tail = node; - } - ++_jit->note.length; - _jitc->note.size += sizeof(jit_note_t); - /* remember previous note is invalid due to name change */ - _jitc->note.note = NULL; - return (_jitc->note.name = node); -} - -jit_node_t * -_jit_note(jit_state_t *_jit, const char *name, int line) -{ - jit_node_t *node; - - node = jit_new_node(jit_code_note); - if (name) - node->v.n = jit_data(name, strlen(name) + 1, 1); - else - node->v.p = NULL; - node->w.w = line; - if (_jitc->note.head == NULL) - _jitc->note.head = _jitc->note.tail = node; - else { - _jitc->note.tail->link = node; - _jitc->note.tail = node; - } - if (_jitc->note.note == NULL || - (name == NULL && _jitc->note.note != NULL) || - (name != NULL && _jitc->note.note == NULL) || - (name != NULL && _jitc->note.note != NULL && - strcmp(name, (char *)_jitc->data.ptr + _jitc->note.note->v.n->u.w))) - _jitc->note.size += sizeof(jit_line_t); - _jitc->note.size += sizeof(jit_int32_t) * 2; - return (_jitc->note.note = node); -} - -void -_jit_annotate(jit_state_t *_jit) -{ - jit_node_t *node; - jit_note_t *note; - jit_line_t *line; - jit_word_t length; - jit_word_t note_offset; - jit_word_t line_offset; - - /* initialize pointers in mmaped data area */ - _jit->note.ptr = (jit_note_t *)_jitc->note.base; - _jit->note.length = 0; - - note = NULL; - for (node = _jitc->note.head; node; node = node->link) { - if (node->code == jit_code_name) - note = new_note(node->u.p, node->v.p ? node->v.n->u.p : NULL); - else if (node->v.p) { - if (note == NULL) - note = new_note(node->u.p, NULL); - jit_set_note(note, node->v.n->u.p, node->w.w, - (jit_uint8_t *)node->u.p - note->code); - } - } - /* last note */ - if (note) - note->size = _jit->pc.uc - note->code; - - /* annotations may be very complex with conditions to extend - * or ignore redundant notes, as well as add entries to earlier - * notes, so, relocate the information to the data buffer, - * with likely over allocated reserved space */ - - /* relocate jit_line_t objects */ - for (note_offset = 0; note_offset < _jit->note.length; note_offset++) { - note = _jit->note.ptr + note_offset; - if ((length = sizeof(jit_line_t) * note->length) == 0) - continue; - assert(_jitc->note.base + length < _jit->data.ptr + _jit->data.length); - jit_memcpy(_jitc->note.base, note->lines, length); - jit_free((jit_pointer_t *)¬e->lines); - note->lines = (jit_line_t *)_jitc->note.base; - _jitc->note.base += length; - } - - /* relocate offset and line number information */ - for (note_offset = 0; note_offset < _jit->note.length; note_offset++) { - note = _jit->note.ptr + note_offset; - for (line_offset = 0; line_offset < note->length; line_offset++) { - line = note->lines + line_offset; - length = sizeof(jit_int32_t) * line->length; - assert(_jitc->note.base + length < - _jit->data.ptr + _jit->data.length); - jit_memcpy(_jitc->note.base, line->linenos, length); - jit_free((jit_pointer_t *)&line->linenos); - line->linenos = (jit_int32_t *)_jitc->note.base; - _jitc->note.base += length; - assert(_jitc->note.base + length < - _jit->data.ptr + _jit->data.length); - jit_memcpy(_jitc->note.base, line->offsets, length); - jit_free((jit_pointer_t *)&line->offsets); - line->offsets = (jit_int32_t *)_jitc->note.base; - _jitc->note.base += length; - } - } -} - -void -_jit_set_note(jit_state_t *_jit, jit_note_t *note, - char *file, int lineno, jit_int32_t offset) -{ - jit_line_t *line; - jit_int32_t index; - - index = line_insert_index(note, offset); - if (note->length && index == note->length && - note->lines[index - 1].file == file) - --index; - if (index >= note->length || note->lines[index].file != file) - new_line(index, note, file, lineno, offset); - else { - line = note->lines + index; - index = offset_insert_index(line, offset); - if (index < line->length && line->offsets[index] == offset) { - /* common case if no code was generated for several source lines */ - if (line->linenos[index] < lineno) - line->linenos[index] = lineno; - } - else if (index < line->length && line->linenos[index] == lineno) { - /* common case of extending entry */ - if (line->offsets[index] > offset) - line->offsets[index] = offset; - } - else { - /* line or offset changed */ - if ((line->length & 15) == 0) { - jit_realloc((jit_pointer_t *)&line->linenos, - line->length * sizeof(jit_int32_t), - (line->length + 17) * sizeof(jit_int32_t)); - jit_realloc((jit_pointer_t *)&line->offsets, - line->length * sizeof(jit_int32_t), - (line->length + 17) * sizeof(jit_int32_t)); - } - if (index < note->length) { - jit_memmove(line->linenos + index + 1, line->linenos + index, - sizeof(jit_int32_t) * (line->length - index)); - jit_memmove(line->offsets + index + 1, line->offsets + index, - sizeof(jit_int32_t) * (line->length - index)); - } - line->linenos[index] = lineno; - line->offsets[index] = offset; - ++line->length; - } - } -} - -jit_bool_t -_jit_get_note(jit_state_t *_jit, jit_pointer_t code, - char **name, char **file, jit_int32_t *lineno) -{ - jit_note_t *note; - jit_line_t *line; - jit_int32_t index; - jit_int32_t offset; - - if ((index = note_search_index((jit_uint8_t *)code)) >= _jit->note.length) - return (0); - note = _jit->note.ptr + index; - if ((jit_uint8_t *)code < note->code || - (jit_uint8_t *)code >= note->code + note->size) - return (0); - offset = (jit_uint8_t *)code - note->code; - if ((index = line_search_index(note, offset)) >= note->length) - return (0); - if (index == 0 && offset < note->lines[0].offsets[0]) - return (0); - line = note->lines + index; - if ((index = offset_search_index(line, offset)) >= line->length) - return (0); - - if (name) - *name = note->name; - if (file) - *file = line->file; - if (lineno) - *lineno = line->linenos[index]; - - return (1); -} - -static jit_note_t * -_new_note(jit_state_t *_jit, jit_uint8_t *code, char *name) -{ - jit_note_t *note; - jit_note_t *prev; - - if (_jit->note.length) { - prev = _jit->note.ptr + _jit->note.length - 1; - assert(code >= prev->code); - prev->size = code - prev->code; - } - note = (jit_note_t *)_jitc->note.base; - _jitc->note.base += sizeof(jit_note_t); - ++_jit->note.length; - note->code = code; - note->name = name; - - return (note); -} - -static void -new_line(jit_int32_t index, jit_note_t *note, - char *file, jit_int32_t lineno, jit_int32_t offset) -{ - jit_line_t *line; - - if (note->lines == NULL) - jit_alloc((jit_pointer_t *)¬e->lines, 16 * sizeof(jit_line_t)); - else if ((note->length & 15) == 15) - jit_realloc((jit_pointer_t *)¬e->lines, - note->length * sizeof(jit_line_t), - (note->length + 17) * sizeof(jit_line_t)); - - if (index < note->length) - jit_memmove(note->lines + index + 1, note->lines + index, - sizeof(jit_line_t) * (note->length - index)); - line = note->lines + index; - ++note->length; - - line->file = file; - line->length = 1; - jit_alloc((jit_pointer_t *)&line->linenos, 16 * sizeof(jit_int32_t)); - line->linenos[0] = lineno; - jit_alloc((jit_pointer_t *)&line->offsets, 16 * sizeof(jit_int32_t)); - line->offsets[0] = offset; -} - -static jit_int32_t -_note_search_index(jit_state_t *_jit, jit_uint8_t *code) -{ - jit_int32_t bot; - jit_int32_t top; - jit_int32_t index; - jit_note_t *notes; - - bot = 0; - top = _jit->note.length; - notes = _jit->note.ptr; - for (index = (bot + top) >> 1; bot < top; index = (bot + top) >> 1) { - if (code < notes[index].code) - top = index; - else if (code >= notes[index].code && - code - notes[index].code < notes[index].size) - break; - else - bot = index + 1; - } - - return (index); -} - -static jit_int32_t -line_insert_index(jit_note_t *note, jit_int32_t offset) -{ - jit_int32_t bot; - jit_int32_t top; - jit_int32_t index; - jit_line_t *lines; - - bot = 0; - top = note->length; - if ((lines = note->lines) == NULL) - return (0); - for (index = (bot + top) >> 1; bot < top; index = (bot + top) >> 1) { - if (offset < *lines[index].offsets) - top = index; - else - bot = index + 1; - } - - return ((bot + top) >> 1); -} - -static jit_int32_t -line_search_index(jit_note_t *note, jit_int32_t offset) -{ - jit_int32_t bot; - jit_int32_t top; - jit_int32_t index; - jit_line_t *lines; - - bot = 0; - top = note->length; - if ((lines = note->lines) == NULL) - return (0); - for (index = (bot + top) >> 1; bot < top; index = (bot + top) >> 1) { - if (offset < *lines[index].offsets) - top = index; - /* offset should be already verified to be in range */ - else if (index == note->length - 1 || - (offset >= *lines[index].offsets && - offset < *lines[index + 1].offsets)) - break; - else - bot = index + 1; - } - - return (index); -} - -static jit_int32_t -offset_insert_index(jit_line_t *line, jit_int32_t offset) -{ - jit_int32_t bot; - jit_int32_t top; - jit_int32_t index; - jit_int32_t *offsets; - - bot = 0; - top = line->length; - offsets = line->offsets; - for (index = (bot + top) >> 1; bot < top; index = (bot + top) >> 1) { - if (offset < offsets[index]) - top = index; - else - bot = index + 1; - } - - return ((bot + top) >> 1); -} - -static jit_int32_t -offset_search_index(jit_line_t *line, jit_int32_t offset) -{ - jit_int32_t bot; - jit_int32_t top; - jit_int32_t index; - jit_int32_t *offsets; - - bot = 0; - top = line->length; - offsets = line->offsets; - for (index = (bot + top) >> 1; bot < top; index = (bot + top) >> 1) { - if (offset < offsets[index]) - top = index; - /* offset should be already verified to be in range */ - else if (index == line->length - 1 || - (offset >= offsets[index] && offset < offsets[index + 1])) - break; - else - bot = index + 1; - } - - return (index); -} diff --git a/libguile/lightning/lib/jit_ppc-sz.c b/libguile/lightning/lib/jit_ppc-sz.c deleted file mode 100644 index 22a6e2543..000000000 --- a/libguile/lightning/lib/jit_ppc-sz.c +++ /dev/null @@ -1,1622 +0,0 @@ - -#if __WORDSIZE == 32 -#if defined(__ppc__) -#define JIT_INSTR_MAX 44 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 44, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 0, /* va_start */ - 0, /* va_arg */ - 0, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 4, /* addcr */ - 12, /* addci */ - 4, /* addxr */ - 8, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 4, /* subcr */ - 12, /* subci */ - 4, /* subxr */ - 8, /* subxi */ - 16, /* rsbi */ - 4, /* mulr */ - 12, /* muli */ - 12, /* qmulr */ - 16, /* qmuli */ - 12, /* qmulr_u */ - 16, /* qmuli_u */ - 4, /* divr */ - 12, /* divi */ - 4, /* divr_u */ - 12, /* divi_u */ - 20, /* qdivr */ - 16, /* qdivi */ - 20, /* qdivr_u */ - 16, /* qdivi_u */ - 12, /* remr */ - 20, /* remi */ - 12, /* remr_u */ - 20, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 12, /* ltr */ - 12, /* lti */ - 12, /* ltr_u */ - 16, /* lti_u */ - 16, /* ler */ - 16, /* lei */ - 16, /* ler_u */ - 16, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 16, /* ger */ - 16, /* gei */ - 16, /* ger_u */ - 16, /* gei_u */ - 12, /* gtr */ - 12, /* gti */ - 12, /* gtr_u */ - 12, /* gti_u */ - 16, /* ner */ - 16, /* nei */ - 4, /* movr */ - 8, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_ul */ - 8, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 8, /* ldi_uc */ - 4, /* ldr_s */ - 8, /* ldi_s */ - 4, /* ldr_us */ - 8, /* ldi_us */ - 4, /* ldr_i */ - 8, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 8, /* ldxr_c */ - 8, /* ldxi_c */ - 4, /* ldxr_uc */ - 4, /* ldxi_uc */ - 4, /* ldxr_s */ - 4, /* ldxi_s */ - 4, /* ldxr_us */ - 4, /* ldxi_us */ - 4, /* ldxr_i */ - 4, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 8, /* sti_c */ - 4, /* str_s */ - 8, /* sti_s */ - 4, /* str_i */ - 8, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 4, /* stxr_c */ - 4, /* stxi_c */ - 4, /* stxr_s */ - 4, /* stxi_s */ - 4, /* stxr_i */ - 4, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 12, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 12, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 12, /* boaddr */ - 16, /* boaddi */ - 12, /* boaddr_u */ - 12, /* boaddi_u */ - 12, /* bxaddr */ - 16, /* bxaddi */ - 12, /* bxaddr_u */ - 12, /* bxaddi_u */ - 12, /* bosubr */ - 16, /* bosubi */ - 12, /* bosubr_u */ - 16, /* bosubi_u */ - 12, /* bxsubr */ - 16, /* bxsubi */ - 12, /* bxsubr_u */ - 16, /* bxsubi_u */ - 0, /* jmpr */ - 4, /* jmpi */ - 8, /* callr */ - 16, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 44, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 12, /* addi_f */ - 4, /* subr_f */ - 12, /* subi_f */ - 12, /* rsbi_f */ - 4, /* mulr_f */ - 12, /* muli_f */ - 4, /* divr_f */ - 12, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 12, /* ltr_f */ - 20, /* lti_f */ - 16, /* ler_f */ - 24, /* lei_f */ - 12, /* eqr_f */ - 20, /* eqi_f */ - 16, /* ger_f */ - 24, /* gei_f */ - 12, /* gtr_f */ - 20, /* gti_f */ - 16, /* ner_f */ - 24, /* nei_f */ - 16, /* unltr_f */ - 24, /* unlti_f */ - 16, /* unler_f */ - 24, /* unlei_f */ - 16, /* uneqr_f */ - 24, /* uneqi_f */ - 16, /* unger_f */ - 24, /* ungei_f */ - 16, /* ungtr_f */ - 24, /* ungti_f */ - 16, /* ltgtr_f */ - 24, /* ltgti_f */ - 16, /* ordr_f */ - 24, /* ordi_f */ - 12, /* unordr_f */ - 20, /* unordi_f */ - 12, /* truncr_f_i */ - 0, /* truncr_f_l */ - 20, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 8, /* movi_f */ - 4, /* ldr_f */ - 8, /* ldi_f */ - 4, /* ldxr_f */ - 4, /* ldxi_f */ - 4, /* str_f */ - 8, /* sti_f */ - 4, /* stxr_f */ - 4, /* stxi_f */ - 8, /* bltr_f */ - 16, /* blti_f */ - 12, /* bler_f */ - 20, /* blei_f */ - 8, /* beqr_f */ - 16, /* beqi_f */ - 12, /* bger_f */ - 20, /* bgei_f */ - 8, /* bgtr_f */ - 16, /* bgti_f */ - 8, /* bner_f */ - 16, /* bnei_f */ - 12, /* bunltr_f */ - 20, /* bunlti_f */ - 8, /* bunler_f */ - 16, /* bunlei_f */ - 12, /* buneqr_f */ - 20, /* buneqi_f */ - 8, /* bunger_f */ - 16, /* bungei_f */ - 12, /* bungtr_f */ - 20, /* bungti_f */ - 12, /* bltgtr_f */ - 20, /* bltgti_f */ - 8, /* bordr_f */ - 16, /* bordi_f */ - 8, /* bunordr_f */ - 16, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 12, /* addi_d */ - 4, /* subr_d */ - 12, /* subi_d */ - 12, /* rsbi_d */ - 4, /* mulr_d */ - 12, /* muli_d */ - 4, /* divr_d */ - 12, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 12, /* ltr_d */ - 20, /* lti_d */ - 16, /* ler_d */ - 24, /* lei_d */ - 12, /* eqr_d */ - 20, /* eqi_d */ - 16, /* ger_d */ - 24, /* gei_d */ - 12, /* gtr_d */ - 20, /* gti_d */ - 16, /* ner_d */ - 24, /* nei_d */ - 16, /* unltr_d */ - 24, /* unlti_d */ - 16, /* unler_d */ - 24, /* unlei_d */ - 16, /* uneqr_d */ - 24, /* uneqi_d */ - 16, /* unger_d */ - 24, /* ungei_d */ - 16, /* ungtr_d */ - 24, /* ungti_d */ - 16, /* ltgtr_d */ - 24, /* ltgti_d */ - 16, /* ordr_d */ - 24, /* ordi_d */ - 12, /* unordr_d */ - 20, /* unordi_d */ - 12, /* truncr_d_i */ - 0, /* truncr_d_l */ - 20, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 8, /* movi_d */ - 4, /* ldr_d */ - 8, /* ldi_d */ - 4, /* ldxr_d */ - 4, /* ldxi_d */ - 4, /* str_d */ - 8, /* sti_d */ - 4, /* stxr_d */ - 4, /* stxi_d */ - 8, /* bltr_d */ - 16, /* blti_d */ - 12, /* bler_d */ - 20, /* blei_d */ - 8, /* beqr_d */ - 16, /* beqi_d */ - 12, /* bger_d */ - 20, /* bgei_d */ - 8, /* bgtr_d */ - 16, /* bgti_d */ - 8, /* bner_d */ - 16, /* bnei_d */ - 12, /* bunltr_d */ - 20, /* bunlti_d */ - 8, /* bunler_d */ - 16, /* bunlei_d */ - 12, /* buneqr_d */ - 20, /* buneqi_d */ - 8, /* bunger_d */ - 16, /* bungei_d */ - 12, /* bungtr_d */ - 20, /* bungti_d */ - 12, /* bltgtr_d */ - 20, /* bltgti_d */ - 8, /* bordr_d */ - 16, /* bordi_d */ - 8, /* bunordr_d */ - 16, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __ppc__ */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 32 -#if defined(__powerpc__) -#if __BYTE_ORDER == __BIG_ENDIAN -#define JIT_INSTR_MAX 136 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 136, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 8, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 4, /* addcr */ - 12, /* addci */ - 4, /* addxr */ - 8, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 4, /* subcr */ - 12, /* subci */ - 4, /* subxr */ - 8, /* subxi */ - 16, /* rsbi */ - 4, /* mulr */ - 12, /* muli */ - 12, /* qmulr */ - 16, /* qmuli */ - 12, /* qmulr_u */ - 16, /* qmuli_u */ - 4, /* divr */ - 12, /* divi */ - 4, /* divr_u */ - 12, /* divi_u */ - 20, /* qdivr */ - 16, /* qdivi */ - 20, /* qdivr_u */ - 16, /* qdivi_u */ - 12, /* remr */ - 20, /* remi */ - 12, /* remr_u */ - 20, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 12, /* ltr */ - 12, /* lti */ - 12, /* ltr_u */ - 16, /* lti_u */ - 16, /* ler */ - 16, /* lei */ - 16, /* ler_u */ - 16, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 16, /* ger */ - 16, /* gei */ - 16, /* ger_u */ - 16, /* gei_u */ - 12, /* gtr */ - 12, /* gti */ - 12, /* gtr_u */ - 12, /* gti_u */ - 16, /* ner */ - 16, /* nei */ - 4, /* movr */ - 8, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_ul */ - 8, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 8, /* ldi_uc */ - 4, /* ldr_s */ - 8, /* ldi_s */ - 4, /* ldr_us */ - 8, /* ldi_us */ - 4, /* ldr_i */ - 8, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 8, /* ldxr_c */ - 16, /* ldxi_c */ - 4, /* ldxr_uc */ - 12, /* ldxi_uc */ - 4, /* ldxr_s */ - 12, /* ldxi_s */ - 4, /* ldxr_us */ - 12, /* ldxi_us */ - 4, /* ldxr_i */ - 12, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 8, /* sti_c */ - 4, /* str_s */ - 8, /* sti_s */ - 4, /* str_i */ - 8, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 4, /* stxr_c */ - 12, /* stxi_c */ - 4, /* stxr_s */ - 12, /* stxi_s */ - 4, /* stxr_i */ - 12, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 12, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 12, /* blei_u */ - 8, /* beqr */ - 16, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 16, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 12, /* boaddr */ - 16, /* boaddi */ - 12, /* boaddr_u */ - 12, /* boaddi_u */ - 12, /* bxaddr */ - 16, /* bxaddi */ - 12, /* bxaddr_u */ - 12, /* bxaddi_u */ - 12, /* bosubr */ - 16, /* bosubi */ - 12, /* bosubr_u */ - 16, /* bosubi_u */ - 12, /* bxsubr */ - 16, /* bxsubi */ - 12, /* bxsubr_u */ - 16, /* bxsubi_u */ - 8, /* jmpr */ - 4, /* jmpi */ - 28, /* callr */ - 40, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 124, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 16, /* addi_f */ - 4, /* subr_f */ - 16, /* subi_f */ - 16, /* rsbi_f */ - 4, /* mulr_f */ - 16, /* muli_f */ - 4, /* divr_f */ - 16, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 12, /* ltr_f */ - 24, /* lti_f */ - 16, /* ler_f */ - 28, /* lei_f */ - 12, /* eqr_f */ - 24, /* eqi_f */ - 16, /* ger_f */ - 28, /* gei_f */ - 12, /* gtr_f */ - 24, /* gti_f */ - 16, /* ner_f */ - 28, /* nei_f */ - 16, /* unltr_f */ - 28, /* unlti_f */ - 16, /* unler_f */ - 28, /* unlei_f */ - 16, /* uneqr_f */ - 28, /* uneqi_f */ - 16, /* unger_f */ - 28, /* ungei_f */ - 16, /* ungtr_f */ - 28, /* ungti_f */ - 16, /* ltgtr_f */ - 28, /* ltgti_f */ - 16, /* ordr_f */ - 28, /* ordi_f */ - 12, /* unordr_f */ - 24, /* unordi_f */ - 12, /* truncr_f_i */ - 0, /* truncr_f_l */ - 20, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 12, /* movi_f */ - 4, /* ldr_f */ - 8, /* ldi_f */ - 4, /* ldxr_f */ - 12, /* ldxi_f */ - 4, /* str_f */ - 8, /* sti_f */ - 4, /* stxr_f */ - 12, /* stxi_f */ - 8, /* bltr_f */ - 20, /* blti_f */ - 12, /* bler_f */ - 24, /* blei_f */ - 8, /* beqr_f */ - 20, /* beqi_f */ - 12, /* bger_f */ - 24, /* bgei_f */ - 8, /* bgtr_f */ - 20, /* bgti_f */ - 8, /* bner_f */ - 20, /* bnei_f */ - 12, /* bunltr_f */ - 24, /* bunlti_f */ - 8, /* bunler_f */ - 20, /* bunlei_f */ - 12, /* buneqr_f */ - 24, /* buneqi_f */ - 8, /* bunger_f */ - 20, /* bungei_f */ - 12, /* bungtr_f */ - 24, /* bungti_f */ - 12, /* bltgtr_f */ - 24, /* bltgti_f */ - 8, /* bordr_f */ - 20, /* bordi_f */ - 8, /* bunordr_f */ - 20, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 24, /* addi_d */ - 4, /* subr_d */ - 24, /* subi_d */ - 24, /* rsbi_d */ - 4, /* mulr_d */ - 24, /* muli_d */ - 4, /* divr_d */ - 24, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 12, /* ltr_d */ - 32, /* lti_d */ - 16, /* ler_d */ - 36, /* lei_d */ - 12, /* eqr_d */ - 32, /* eqi_d */ - 16, /* ger_d */ - 36, /* gei_d */ - 12, /* gtr_d */ - 32, /* gti_d */ - 16, /* ner_d */ - 36, /* nei_d */ - 16, /* unltr_d */ - 36, /* unlti_d */ - 16, /* unler_d */ - 36, /* unlei_d */ - 16, /* uneqr_d */ - 36, /* uneqi_d */ - 16, /* unger_d */ - 36, /* ungei_d */ - 16, /* ungtr_d */ - 36, /* ungti_d */ - 16, /* ltgtr_d */ - 36, /* ltgti_d */ - 16, /* ordr_d */ - 36, /* ordi_d */ - 12, /* unordr_d */ - 32, /* unordi_d */ - 12, /* truncr_d_i */ - 0, /* truncr_d_l */ - 20, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 24, /* movi_d */ - 4, /* ldr_d */ - 8, /* ldi_d */ - 4, /* ldxr_d */ - 12, /* ldxi_d */ - 4, /* str_d */ - 8, /* sti_d */ - 4, /* stxr_d */ - 12, /* stxi_d */ - 8, /* bltr_d */ - 28, /* blti_d */ - 12, /* bler_d */ - 32, /* blei_d */ - 8, /* beqr_d */ - 32, /* beqi_d */ - 12, /* bger_d */ - 32, /* bgei_d */ - 8, /* bgtr_d */ - 28, /* bgti_d */ - 8, /* bner_d */ - 28, /* bnei_d */ - 12, /* bunltr_d */ - 32, /* bunlti_d */ - 8, /* bunler_d */ - 28, /* bunlei_d */ - 12, /* buneqr_d */ - 32, /* buneqi_d */ - 8, /* bunger_d */ - 28, /* bungei_d */ - 12, /* bungtr_d */ - 32, /* bungti_d */ - 12, /* bltgtr_d */ - 32, /* bltgti_d */ - 8, /* bordr_d */ - 28, /* bordi_d */ - 8, /* bunordr_d */ - 28, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __BYTEORDER */ -#endif /* __powerpc__ */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 64 -#if defined(__powerpc__) -#if __BYTE_ORDER == __BIG_ENDIAN -#define JIT_INSTR_MAX 148 - 0, /* data */ - 0, /* live */ - 4, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 148, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 8, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 28, /* addi */ - 4, /* addcr */ - 28, /* addci */ - 4, /* addxr */ - 8, /* addxi */ - 4, /* subr */ - 28, /* subi */ - 4, /* subcr */ - 28, /* subci */ - 4, /* subxr */ - 8, /* subxi */ - 44, /* rsbi */ - 4, /* mulr */ - 28, /* muli */ - 12, /* qmulr */ - 28, /* qmuli */ - 12, /* qmulr_u */ - 28, /* qmuli_u */ - 4, /* divr */ - 28, /* divi */ - 4, /* divr_u */ - 28, /* divi_u */ - 20, /* qdivr */ - 16, /* qdivi */ - 20, /* qdivr_u */ - 16, /* qdivi_u */ - 12, /* remr */ - 36, /* remi */ - 12, /* remr_u */ - 36, /* remi_u */ - 4, /* andr */ - 28, /* andi */ - 4, /* orr */ - 28, /* ori */ - 4, /* xorr */ - 28, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 12, /* ltr */ - 12, /* lti */ - 12, /* ltr_u */ - 16, /* lti_u */ - 16, /* ler */ - 16, /* lei */ - 16, /* ler_u */ - 16, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 16, /* ger */ - 16, /* gei */ - 16, /* ger_u */ - 16, /* gei_u */ - 12, /* gtr */ - 12, /* gti */ - 12, /* gtr_u */ - 12, /* gti_u */ - 16, /* ner */ - 16, /* nei */ - 4, /* movr */ - 36, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 4, /* extr_i */ - 4, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 4, /* htonr_ul */ - 8, /* ldr_c */ - 28, /* ldi_c */ - 4, /* ldr_uc */ - 24, /* ldi_uc */ - 4, /* ldr_s */ - 24, /* ldi_s */ - 4, /* ldr_us */ - 24, /* ldi_us */ - 4, /* ldr_i */ - 24, /* ldi_i */ - 4, /* ldr_ui */ - 24, /* ldi_ui */ - 4, /* ldr_l */ - 24, /* ldi_l */ - 8, /* ldxr_c */ - 16, /* ldxi_c */ - 4, /* ldxr_uc */ - 12, /* ldxi_uc */ - 4, /* ldxr_s */ - 12, /* ldxi_s */ - 4, /* ldxr_us */ - 12, /* ldxi_us */ - 4, /* ldxr_i */ - 12, /* ldxi_i */ - 4, /* ldxr_ui */ - 12, /* ldxi_ui */ - 4, /* ldxr_l */ - 12, /* ldxi_l */ - 4, /* str_c */ - 24, /* sti_c */ - 4, /* str_s */ - 24, /* sti_s */ - 4, /* str_i */ - 24, /* sti_i */ - 4, /* str_l */ - 24, /* sti_l */ - 4, /* stxr_c */ - 12, /* stxi_c */ - 4, /* stxr_s */ - 12, /* stxi_s */ - 4, /* stxr_i */ - 12, /* stxi_i */ - 4, /* stxr_l */ - 12, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 12, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 12, /* blei_u */ - 8, /* beqr */ - 44, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 36, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 12, /* boaddr */ - 16, /* boaddi */ - 12, /* boaddr_u */ - 12, /* boaddi_u */ - 12, /* bxaddr */ - 16, /* bxaddi */ - 12, /* bxaddr_u */ - 12, /* bxaddi_u */ - 12, /* bosubr */ - 16, /* bosubi */ - 12, /* bosubr_u */ - 16, /* bosubi_u */ - 12, /* bxsubr */ - 16, /* bxsubi */ - 12, /* bxsubr_u */ - 16, /* bxsubi_u */ - 8, /* jmpr */ - 4, /* jmpi */ - 28, /* callr */ - 56, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 124, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 28, /* addi_f */ - 4, /* subr_f */ - 28, /* subi_f */ - 28, /* rsbi_f */ - 4, /* mulr_f */ - 28, /* muli_f */ - 4, /* divr_f */ - 28, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 12, /* ltr_f */ - 36, /* lti_f */ - 16, /* ler_f */ - 40, /* lei_f */ - 12, /* eqr_f */ - 36, /* eqi_f */ - 16, /* ger_f */ - 40, /* gei_f */ - 12, /* gtr_f */ - 36, /* gti_f */ - 16, /* ner_f */ - 40, /* nei_f */ - 16, /* unltr_f */ - 40, /* unlti_f */ - 16, /* unler_f */ - 40, /* unlei_f */ - 16, /* uneqr_f */ - 40, /* uneqi_f */ - 16, /* unger_f */ - 40, /* ungei_f */ - 16, /* ungtr_f */ - 40, /* ungti_f */ - 16, /* ltgtr_f */ - 40, /* ltgti_f */ - 16, /* ordr_f */ - 40, /* ordi_f */ - 12, /* unordr_f */ - 36, /* unordi_f */ - 12, /* truncr_f_i */ - 12, /* truncr_f_l */ - 12, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 24, /* movi_f */ - 4, /* ldr_f */ - 24, /* ldi_f */ - 4, /* ldxr_f */ - 12, /* ldxi_f */ - 4, /* str_f */ - 24, /* sti_f */ - 4, /* stxr_f */ - 12, /* stxi_f */ - 8, /* bltr_f */ - 32, /* blti_f */ - 12, /* bler_f */ - 36, /* blei_f */ - 8, /* beqr_f */ - 32, /* beqi_f */ - 12, /* bger_f */ - 36, /* bgei_f */ - 8, /* bgtr_f */ - 32, /* bgti_f */ - 8, /* bner_f */ - 32, /* bnei_f */ - 12, /* bunltr_f */ - 36, /* bunlti_f */ - 8, /* bunler_f */ - 32, /* bunlei_f */ - 12, /* buneqr_f */ - 36, /* buneqi_f */ - 8, /* bunger_f */ - 32, /* bungei_f */ - 12, /* bungtr_f */ - 36, /* bungti_f */ - 12, /* bltgtr_f */ - 36, /* bltgti_f */ - 8, /* bordr_f */ - 32, /* bordi_f */ - 8, /* bunordr_f */ - 32, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 28, /* addi_d */ - 4, /* subr_d */ - 28, /* subi_d */ - 32, /* rsbi_d */ - 4, /* mulr_d */ - 28, /* muli_d */ - 4, /* divr_d */ - 28, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 12, /* ltr_d */ - 40, /* lti_d */ - 16, /* ler_d */ - 44, /* lei_d */ - 12, /* eqr_d */ - 40, /* eqi_d */ - 16, /* ger_d */ - 44, /* gei_d */ - 12, /* gtr_d */ - 40, /* gti_d */ - 16, /* ner_d */ - 44, /* nei_d */ - 16, /* unltr_d */ - 44, /* unlti_d */ - 16, /* unler_d */ - 44, /* unlei_d */ - 16, /* uneqr_d */ - 44, /* uneqi_d */ - 16, /* unger_d */ - 44, /* ungei_d */ - 16, /* ungtr_d */ - 44, /* ungti_d */ - 16, /* ltgtr_d */ - 44, /* ltgti_d */ - 16, /* ordr_d */ - 44, /* ordi_d */ - 12, /* unordr_d */ - 40, /* unordi_d */ - 12, /* truncr_d_i */ - 12, /* truncr_d_l */ - 12, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 32, /* movi_d */ - 4, /* ldr_d */ - 24, /* ldi_d */ - 4, /* ldxr_d */ - 12, /* ldxi_d */ - 4, /* str_d */ - 24, /* sti_d */ - 4, /* stxr_d */ - 12, /* stxi_d */ - 8, /* bltr_d */ - 32, /* blti_d */ - 12, /* bler_d */ - 36, /* blei_d */ - 8, /* beqr_d */ - 40, /* beqi_d */ - 12, /* bger_d */ - 40, /* bgei_d */ - 8, /* bgtr_d */ - 36, /* bgti_d */ - 8, /* bner_d */ - 36, /* bnei_d */ - 12, /* bunltr_d */ - 36, /* bunlti_d */ - 8, /* bunler_d */ - 32, /* bunlei_d */ - 12, /* buneqr_d */ - 36, /* buneqi_d */ - 8, /* bunger_d */ - 36, /* bungei_d */ - 12, /* bungtr_d */ - 40, /* bungti_d */ - 12, /* bltgtr_d */ - 40, /* bltgti_d */ - 8, /* bordr_d */ - 36, /* bordi_d */ - 8, /* bunordr_d */ - 32, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __BYTEORDER */ -#endif /* __powerpc__ */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 64 -#if defined(__powerpc__) -#if __BYTE_ORDER == __LITTLE_ENDIAN -#define JIT_INSTR_MAX 124 - 0, /* data */ - 0, /* live */ - 4, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 124, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 8, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 28, /* addi */ - 4, /* addcr */ - 28, /* addci */ - 4, /* addxr */ - 8, /* addxi */ - 4, /* subr */ - 28, /* subi */ - 4, /* subcr */ - 28, /* subci */ - 4, /* subxr */ - 8, /* subxi */ - 44, /* rsbi */ - 4, /* mulr */ - 28, /* muli */ - 12, /* qmulr */ - 28, /* qmuli */ - 12, /* qmulr_u */ - 28, /* qmuli_u */ - 4, /* divr */ - 28, /* divi */ - 4, /* divr_u */ - 28, /* divi_u */ - 20, /* qdivr */ - 16, /* qdivi */ - 20, /* qdivr_u */ - 16, /* qdivi_u */ - 12, /* remr */ - 36, /* remi */ - 12, /* remr_u */ - 36, /* remi_u */ - 4, /* andr */ - 28, /* andi */ - 4, /* orr */ - 28, /* ori */ - 4, /* xorr */ - 28, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 12, /* ltr */ - 12, /* lti */ - 12, /* ltr_u */ - 16, /* lti_u */ - 16, /* ler */ - 16, /* lei */ - 16, /* ler_u */ - 16, /* lei_u */ - 12, /* eqr */ - 12, /* eqi */ - 16, /* ger */ - 16, /* gei */ - 16, /* ger_u */ - 16, /* gei_u */ - 12, /* gtr */ - 12, /* gti */ - 12, /* gtr_u */ - 12, /* gti_u */ - 16, /* ner */ - 16, /* nei */ - 4, /* movr */ - 36, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 4, /* extr_i */ - 4, /* extr_ui */ - 20, /* htonr_us */ - 16, /* htonr_ui */ - 44, /* htonr_ul */ - 8, /* ldr_c */ - 28, /* ldi_c */ - 4, /* ldr_uc */ - 24, /* ldi_uc */ - 4, /* ldr_s */ - 24, /* ldi_s */ - 4, /* ldr_us */ - 24, /* ldi_us */ - 4, /* ldr_i */ - 24, /* ldi_i */ - 4, /* ldr_ui */ - 24, /* ldi_ui */ - 4, /* ldr_l */ - 24, /* ldi_l */ - 8, /* ldxr_c */ - 16, /* ldxi_c */ - 4, /* ldxr_uc */ - 12, /* ldxi_uc */ - 4, /* ldxr_s */ - 12, /* ldxi_s */ - 4, /* ldxr_us */ - 12, /* ldxi_us */ - 4, /* ldxr_i */ - 12, /* ldxi_i */ - 4, /* ldxr_ui */ - 12, /* ldxi_ui */ - 4, /* ldxr_l */ - 12, /* ldxi_l */ - 4, /* str_c */ - 24, /* sti_c */ - 4, /* str_s */ - 24, /* sti_s */ - 4, /* str_i */ - 24, /* sti_i */ - 4, /* str_l */ - 24, /* sti_l */ - 4, /* stxr_c */ - 12, /* stxi_c */ - 4, /* stxr_s */ - 12, /* stxi_s */ - 4, /* stxr_i */ - 12, /* stxi_i */ - 4, /* stxr_l */ - 12, /* stxi_l */ - 8, /* bltr */ - 8, /* blti */ - 8, /* bltr_u */ - 12, /* blti_u */ - 8, /* bler */ - 8, /* blei */ - 8, /* bler_u */ - 12, /* blei_u */ - 8, /* beqr */ - 44, /* beqi */ - 8, /* bger */ - 8, /* bgei */ - 8, /* bger_u */ - 8, /* bgei_u */ - 8, /* bgtr */ - 8, /* bgti */ - 8, /* bgtr_u */ - 8, /* bgti_u */ - 8, /* bner */ - 36, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 12, /* boaddr */ - 16, /* boaddi */ - 12, /* boaddr_u */ - 12, /* boaddi_u */ - 12, /* bxaddr */ - 16, /* bxaddi */ - 12, /* bxaddr_u */ - 12, /* bxaddi_u */ - 12, /* bosubr */ - 16, /* bosubi */ - 12, /* bosubr_u */ - 16, /* bosubi_u */ - 12, /* bxsubr */ - 16, /* bxsubi */ - 12, /* bxsubr_u */ - 16, /* bxsubi_u */ - 8, /* jmpr */ - 4, /* jmpi */ - 12, /* callr */ - 36, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 124, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 28, /* addi_f */ - 4, /* subr_f */ - 28, /* subi_f */ - 28, /* rsbi_f */ - 4, /* mulr_f */ - 28, /* muli_f */ - 4, /* divr_f */ - 28, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 12, /* ltr_f */ - 36, /* lti_f */ - 16, /* ler_f */ - 40, /* lei_f */ - 12, /* eqr_f */ - 36, /* eqi_f */ - 16, /* ger_f */ - 40, /* gei_f */ - 12, /* gtr_f */ - 36, /* gti_f */ - 16, /* ner_f */ - 40, /* nei_f */ - 16, /* unltr_f */ - 40, /* unlti_f */ - 16, /* unler_f */ - 40, /* unlei_f */ - 16, /* uneqr_f */ - 40, /* uneqi_f */ - 16, /* unger_f */ - 40, /* ungei_f */ - 16, /* ungtr_f */ - 40, /* ungti_f */ - 16, /* ltgtr_f */ - 40, /* ltgti_f */ - 16, /* ordr_f */ - 40, /* ordi_f */ - 12, /* unordr_f */ - 36, /* unordi_f */ - 12, /* truncr_f_i */ - 12, /* truncr_f_l */ - 12, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 24, /* movi_f */ - 4, /* ldr_f */ - 24, /* ldi_f */ - 4, /* ldxr_f */ - 12, /* ldxi_f */ - 4, /* str_f */ - 24, /* sti_f */ - 4, /* stxr_f */ - 12, /* stxi_f */ - 8, /* bltr_f */ - 32, /* blti_f */ - 12, /* bler_f */ - 36, /* blei_f */ - 8, /* beqr_f */ - 32, /* beqi_f */ - 12, /* bger_f */ - 36, /* bgei_f */ - 8, /* bgtr_f */ - 32, /* bgti_f */ - 8, /* bner_f */ - 32, /* bnei_f */ - 12, /* bunltr_f */ - 36, /* bunlti_f */ - 8, /* bunler_f */ - 32, /* bunlei_f */ - 12, /* buneqr_f */ - 36, /* buneqi_f */ - 8, /* bunger_f */ - 32, /* bungei_f */ - 12, /* bungtr_f */ - 36, /* bungti_f */ - 12, /* bltgtr_f */ - 36, /* bltgti_f */ - 8, /* bordr_f */ - 32, /* bordi_f */ - 8, /* bunordr_f */ - 32, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 28, /* addi_d */ - 4, /* subr_d */ - 28, /* subi_d */ - 32, /* rsbi_d */ - 4, /* mulr_d */ - 28, /* muli_d */ - 4, /* divr_d */ - 28, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 12, /* ltr_d */ - 40, /* lti_d */ - 16, /* ler_d */ - 44, /* lei_d */ - 12, /* eqr_d */ - 40, /* eqi_d */ - 16, /* ger_d */ - 44, /* gei_d */ - 12, /* gtr_d */ - 40, /* gti_d */ - 16, /* ner_d */ - 44, /* nei_d */ - 16, /* unltr_d */ - 44, /* unlti_d */ - 16, /* unler_d */ - 44, /* unlei_d */ - 16, /* uneqr_d */ - 44, /* uneqi_d */ - 16, /* unger_d */ - 44, /* ungei_d */ - 16, /* ungtr_d */ - 44, /* ungti_d */ - 16, /* ltgtr_d */ - 44, /* ltgti_d */ - 16, /* ordr_d */ - 44, /* ordi_d */ - 12, /* unordr_d */ - 40, /* unordi_d */ - 12, /* truncr_d_i */ - 12, /* truncr_d_l */ - 12, /* extr_d */ - 4, /* extr_f_d */ - 4, /* movr_d */ - 32, /* movi_d */ - 4, /* ldr_d */ - 24, /* ldi_d */ - 4, /* ldxr_d */ - 12, /* ldxi_d */ - 4, /* str_d */ - 24, /* sti_d */ - 4, /* stxr_d */ - 12, /* stxi_d */ - 8, /* bltr_d */ - 32, /* blti_d */ - 12, /* bler_d */ - 36, /* blei_d */ - 8, /* beqr_d */ - 40, /* beqi_d */ - 12, /* bger_d */ - 40, /* bgei_d */ - 8, /* bgtr_d */ - 36, /* bgti_d */ - 8, /* bner_d */ - 36, /* bnei_d */ - 12, /* bunltr_d */ - 36, /* bunlti_d */ - 8, /* bunler_d */ - 32, /* bunlei_d */ - 12, /* buneqr_d */ - 36, /* buneqi_d */ - 8, /* bunger_d */ - 36, /* bungei_d */ - 12, /* bungtr_d */ - 40, /* bungti_d */ - 12, /* bltgtr_d */ - 40, /* bltgti_d */ - 8, /* bordr_d */ - 36, /* bordi_d */ - 8, /* bunordr_d */ - 32, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __BYTE_ORDER */ -#endif /* __powerpc__ */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_print.c b/libguile/lightning/lib/jit_print.c deleted file mode 100644 index a633af365..000000000 --- a/libguile/lightning/lib/jit_print.c +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Copyright (C) 2012-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#define DEBUG 1 -#define DISASSEMBLER 0 - -#include <lightning.h> -#include <lightning/jit_private.h> - -#define print_chr(value) fputc(value, stdout) -#define print_hex(value) fprintf(stdout, "0x%lx", value) -#define print_dec(value) fprintf(stdout, "%ld", value) -#define print_flt(value) fprintf(stdout, "%g", value) -#define print_str(value) fprintf(stdout, "%s", value) -#define print_ptr(value) fprintf(stdout, "%p", value) -#define print_reg(value) \ - do { \ - if ((value) & jit_regno_patch) \ - print_chr('?'); \ - print_str(_rvs[jit_regno(value)].name); \ - } while (0) -#define print_arg(value) \ - do { \ - print_chr('#'); \ - if (value) \ - print_dec((value)->v.w); \ - else \ - print_chr('?'); \ - } while (0) - -/* - * Initialization - */ -#include "jit_names.c" - -/* - * Implementation - */ -void -_jit_print(jit_state_t *_jit) -{ - jit_node_t *node; - - if ((node = _jitc->head)) { - jit_print_node(node); - for (node = node->next; node; node = node->next) { - print_chr('\n'); - jit_print_node(node); - } - print_chr('\n'); - } -} - -void -_jit_print_node(jit_state_t *_jit, jit_node_t *node) -{ - jit_block_t *block; - jit_int32_t value; - jit_int32_t offset; - - if (node->code == jit_code_label || - node->code == jit_code_prolog || node->code == jit_code_epilog) { - print_chr('L'); - print_dec(node->v.w); - print_chr(':'); - block = _jitc->blocks.ptr + node->v.w; - for (offset = 0; offset < _jitc->reglen; offset++) { - if (jit_regset_tstbit(&block->reglive, offset)) { - print_chr(' '); - print_reg(offset); - } - } - if (node->code == jit_code_prolog || - node->code == jit_code_epilog) { - print_str(" /* "); - print_str(code_name[node->code]); - print_str(" */"); - } - return; - } - value = jit_classify(node->code) & - (jit_cc_a0_int|jit_cc_a0_flt|jit_cc_a0_dbl|jit_cc_a0_jmp| - jit_cc_a0_reg|jit_cc_a0_rlh|jit_cc_a0_arg| - jit_cc_a1_reg|jit_cc_a1_int|jit_cc_a1_flt|jit_cc_a1_dbl|jit_cc_a1_arg| - jit_cc_a2_reg|jit_cc_a2_int|jit_cc_a2_flt|jit_cc_a2_dbl); - if (!(node->flag & jit_flag_synth) && ((value & jit_cc_a0_jmp) || - node->code == jit_code_finishr || - node->code == jit_code_finishi)) - print_str(" "); - else - print_chr('\t'); - if (node->flag & jit_flag_synth) - print_str(" \\__ "); - print_str(code_name[node->code]); - switch (node->code) { - r: - print_chr(' '); print_reg(node->u.w); return; - w: - print_chr(' '); print_hex(node->u.w); return; - f: - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float32_t *)node->u.n->u.w); - else - print_flt(node->u.f); - return; - d: - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float64_t *)node->u.n->u.w); - else - print_flt(node->u.d); - return; - n: - print_chr(' '); - if (!(node->flag & jit_flag_node)) - print_ptr(node->u.p); - else { - print_chr('L'); - print_dec(node->u.n->v.w); - } - return; - a: - print_chr(' '); print_arg(node); return; - r_r: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_reg(node->v.w); return; - r_w: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_hex(node->v.w); return; - r_f: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float32_t *)node->v.n->u.w); - else - print_flt(node->v.f); - return; - r_d: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float64_t *)node->v.n->u.w); - else - print_flt(node->v.d); - return; - r_a: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_arg(node->v.n); - return; - w_r: - print_chr(' '); print_hex(node->u.w); - print_chr(' '); print_reg(node->v.w); return; - w_w: - print_chr(' '); print_hex(node->u.w); - print_chr(' '); print_hex(node->v.w); return; - w_a: - print_chr(' '); print_hex(node->u.w); - print_chr(' '); print_arg(node->v.n); - return; - f_a: - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float32_t *)node->u.n->u.w); - else - print_flt(node->u.f); - print_chr(' '); print_arg(node->v.n); - return; - d_a: - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float64_t *)node->u.n->u.w); - else - print_flt(node->u.d); - print_chr(' '); print_arg(node->v.n); - return; - r_r_r: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_reg(node->v.w); - print_chr(' '); print_reg(node->w.w); return; - r_r_w: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_reg(node->v.w); - print_chr(' '); print_hex(node->w.w); return; - q_r_r: - print_str(" ("); print_reg(node->u.q.l); - print_chr(' '); print_reg(node->u.q.h); - print_str(") "); print_reg(node->v.w); - print_chr(' '); print_reg(node->w.w); return; - q_r_w: - print_str(" ("); print_reg(node->u.q.l); - print_chr(' '); print_reg(node->u.q.h); - print_str(") "); print_reg(node->v.w); - print_chr(' '); print_hex(node->w.w); return; - r_r_f: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_reg(node->v.w); - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float32_t *)node->w.n->u.w); - else - print_flt(node->w.f); - return; - r_r_d: - print_chr(' '); print_reg(node->u.w); - print_chr(' '); print_reg(node->v.w); - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float64_t *)node->w.n->u.w); - else - print_flt(node->w.d); - return; - w_r_r: - print_chr(' '); print_hex(node->u.w); - print_chr(' '); print_reg(node->v.w); - print_chr(' '); print_reg(node->w.w); return; - n_r_r: - print_chr(' '); - if (!(node->flag & jit_flag_node)) - print_ptr(node->u.p); - else { - print_chr('L'); - print_dec(node->u.n->v.w); - } - print_chr(' '); print_reg(node->v.w); - print_chr(' '); print_reg(node->w.w); return; - n_r_w: - print_chr(' '); - if (!(node->flag & jit_flag_node)) - print_ptr(node->u.p); - else { - print_chr('L'); - print_dec(node->u.n->v.w); - } - print_chr(' '); print_reg(node->v.w); - print_chr(' '); print_hex(node->w.w); return; - n_r_f: - print_chr(' '); - if (!(node->flag & jit_flag_node)) - print_ptr(node->u.p); - else{ - print_chr('L'); - print_dec(node->u.n->v.w); - } - print_chr(' '); print_reg(node->v.w); - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float32_t *)node->w.n->u.w); - else - print_flt(node->w.f); - return; - n_r_d: - print_chr(' '); - if (!(node->flag & jit_flag_node)) - print_ptr(node->u.p); - else { - print_chr('L'); - print_dec(node->u.n->v.w); - } - print_chr(' '); print_reg(node->v.w); - print_chr(' '); - if (node->flag & jit_flag_data) - print_flt(*(jit_float64_t *)node->w.n->u.w); - else - print_flt(node->w.d); - return; - case jit_code_name: - print_chr(' '); - if (node->v.p && _jitc->emit) - print_str((char *)node->v.n->u.p); - break; - case jit_code_note: - print_chr(' '); - if (node->v.p && _jitc->emit) - print_str((char *)node->v.n->u.p); - if (node->v.p && _jitc->emit && node->w.w) - print_chr(':'); - if (node->w.w) - print_dec(node->w.w); - break; - case jit_code_data: - case jit_code_label: - case jit_code_ellipsis: - case jit_code_prolog: case jit_code_epilog: - case jit_code_ret: case jit_code_prepare: - break; - case jit_code_save: case jit_code_load: - goto r; - default: - switch (value) { - case jit_cc_a0_reg: - case jit_cc_a0_reg|jit_cc_a0_chg: - case jit_cc_a0_reg|jit_cc_a0_jmp: - goto r; - case jit_cc_a0_int: - goto w; - case jit_cc_a0_flt: - goto f; - case jit_cc_a0_dbl: - goto d; - case jit_cc_a0_jmp: - goto n; - case jit_cc_a0_int|jit_cc_a0_arg: - goto a; - case jit_cc_a0_reg|jit_cc_a1_reg: - goto r_r; - case jit_cc_a0_reg|jit_cc_a1_int: - goto r_w; - case jit_cc_a0_reg|jit_cc_a1_flt: - goto r_f; - case jit_cc_a0_reg|jit_cc_a1_dbl: - goto r_d; - case jit_cc_a0_reg|jit_cc_a1_arg: - goto r_a; - case jit_cc_a0_int|jit_cc_a1_reg: - goto w_r; - case jit_cc_a0_int|jit_cc_a1_int: - goto w_w; - case jit_cc_a0_int|jit_cc_a1_arg: - goto w_a; - case jit_cc_a0_flt|jit_cc_a1_arg: - goto f_a; - case jit_cc_a0_dbl|jit_cc_a1_arg: - goto d_a; - case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_reg: - goto r_r_r; - case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_int: - goto r_r_w; - case jit_cc_a0_reg|jit_cc_a0_rlh| - jit_cc_a1_reg|jit_cc_a2_reg: - goto q_r_r; - case jit_cc_a0_reg|jit_cc_a0_rlh| - jit_cc_a1_reg|jit_cc_a2_int: - goto q_r_w; - case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_flt: - goto r_r_f; - case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_dbl: - goto r_r_d; - case jit_cc_a0_int|jit_cc_a1_reg|jit_cc_a2_reg: - goto w_r_r; - case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_reg: - goto n_r_r; - case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_int: - goto n_r_w; - case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_flt: - goto n_r_f; - case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_dbl: - goto n_r_d; - default: - abort(); - } - break; - } -} diff --git a/libguile/lightning/lib/jit_rewind.c b/libguile/lightning/lib/jit_rewind.c deleted file mode 100644 index ea7aa838e..000000000 --- a/libguile/lightning/lib/jit_rewind.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (C) 2015-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#define DEBUG 1 -#define DISASSEMBLER 0 - -#include <lightning.h> -#include <lightning/jit_private.h> - -#if PROTO -# define free_synth_list(node) _free_synth_list(_jit,node) -static jit_node_t *_free_synth_list(jit_state_t*,jit_node_t*); -#define rewind_prolog() _rewind_prolog(_jit) -static void _rewind_prolog(jit_state_t*); -#define rewind_prepare() _rewind_prepare(_jit) -static void _rewind_prepare(jit_state_t*); -#endif - -#if CODE -/* - * Implementation - */ -static jit_node_t * -_free_synth_list(jit_state_t *_jit, jit_node_t *node) -{ - jit_node_t *next; - next = node->next; - free_node(node); - for (node = next; node && (node->flag & jit_flag_synth); node = next) { - next = node->next; - free_node(node); - } - return (next); -} - -static void -_rewind_prolog(jit_state_t *_jit) -{ - jit_node_t *node; - jit_node_t *next; - _jitc->function->self.size = stack_framesize; -#if __arm__ - assert(jit_cpu.abi); - _jitc->function->self.size += 64; -#endif -#if __mips__ && NEW_ABI - /* Only add extra stack space if there are varargs - * arguments in registers. */ - assert(jit_arg_reg_p(_jitc->function->self.argi)); - _jitc->function->self.size += 64; -#endif - _jitc->function->self.argi = - _jitc->function->self.argf = _jitc->function->self.argn = 0; - _jitc->tail = _jitc->function->prolog; - node = _jitc->tail->next; - _jitc->tail->next = (jit_node_t *)0; - _jitc->tail->link = (jit_node_t *)0; - for (; node; node = next) { - next = node->next; - switch (node->code) { - case jit_code_arg: - node->next = (jit_node_t *)0; - jit_make_arg(node); - break; - case jit_code_arg_f: - node->next = (jit_node_t *)0; - jit_make_arg_f(node); - break; - case jit_code_arg_d: - node->next = (jit_node_t *)0; - jit_make_arg_d(node); - break; - case jit_code_getarg_c: - jit_getarg_c(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_getarg_uc: - jit_getarg_uc(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_getarg_s: - jit_getarg_s(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_getarg_us: - jit_getarg_us(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_getarg_i: - jit_getarg_i(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_getarg_f: - jit_getarg_f(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_getarg_d: - jit_getarg_d(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_putargr: - jit_putargr(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_putargi: - jit_putargi(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_putargr_f: - jit_putargr_f(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_putargi_f: - jit_putargi_f(node->u.f, node->v.n); - next = free_synth_list(node); - break; - case jit_code_putargr_d: - jit_putargr_d(node->u.w, node->v.n); - next = free_synth_list(node); - break; - case jit_code_putargi_d: - jit_putargi_d(node->u.d, node->v.n); - next = free_synth_list(node); - break; - default: - node->next = (jit_node_t *)0; - link_node(node); - break; - } - } -} - -static void -_rewind_prepare(jit_state_t *_jit) -{ - jit_node_t *node; - jit_node_t *next; - _jitc->function->call.argi = - _jitc->function->call.argf = - _jitc->function->call.size = 0; - _jitc->tail = _jitc->prepare; - node = _jitc->tail->next; - _jitc->tail->next = (jit_node_t *)0; - _jitc->tail->link = (jit_node_t *)0; - for (; node; node = next) { - next = node->next; - switch (node->code) { - case jit_code_pushargr: - jit_pushargr(node->u.w); - next = free_synth_list(node); - break; - case jit_code_pushargi: - jit_pushargi(node->u.w); - next = free_synth_list(node); - break; - case jit_code_pushargr_f: - jit_pushargr_f(node->u.w); - next = free_synth_list(node); - break; - case jit_code_pushargi_f: - jit_pushargi_f(node->u.f); - next = free_synth_list(node); - break; - case jit_code_pushargr_d: - jit_pushargr_d(node->u.w); - next = free_synth_list(node); - break; - case jit_code_pushargi_d: - jit_pushargi_d(node->u.d); - next = free_synth_list(node); - break; - default: - node->next = (jit_node_t *)0; - link_node(node); - break; - } - } -} -#endif diff --git a/libguile/lightning/lib/jit_s390-sz.c b/libguile/lightning/lib/jit_s390-sz.c deleted file mode 100644 index bb8b2dc97..000000000 --- a/libguile/lightning/lib/jit_s390-sz.c +++ /dev/null @@ -1,804 +0,0 @@ - -#if __WORDSIZE == 32 -#define JIT_INSTR_MAX 104 - 0, /* data */ - 0, /* live */ - 6, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 2, /* label */ - 42, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 44, /* va_start */ - 104, /* va_arg */ - 100, /* va_arg_d */ - 0, /* va_end */ - 8, /* addr */ - 24, /* addi */ - 8, /* addcr */ - 20, /* addci */ - 8, /* addxr */ - 12, /* addxi */ - 12, /* subr */ - 24, /* subi */ - 12, /* subcr */ - 20, /* subci */ - 12, /* subxr */ - 12, /* subxi */ - 28, /* rsbi */ - 8, /* mulr */ - 24, /* muli */ - 60, /* qmulr */ - 68, /* qmuli */ - 16, /* qmulr_u */ - 32, /* qmuli_u */ - 12, /* divr */ - 28, /* divi */ - 16, /* divr_u */ - 32, /* divi_u */ - 16, /* qdivr */ - 20, /* qdivi */ - 20, /* qdivr_u */ - 24, /* qdivi_u */ - 12, /* remr */ - 28, /* remi */ - 16, /* remr_u */ - 32, /* remi_u */ - 8, /* andr */ - 20, /* andi */ - 8, /* orr */ - 20, /* ori */ - 8, /* xorr */ - 24, /* xori */ - 6, /* lshr */ - 10, /* lshi */ - 6, /* rshr */ - 10, /* rshi */ - 6, /* rshr_u */ - 10, /* rshi_u */ - 4, /* negr */ - 12, /* comr */ - 20, /* ltr */ - 24, /* lti */ - 20, /* ltr_u */ - 24, /* lti_u */ - 20, /* ler */ - 24, /* lei */ - 20, /* ler_u */ - 24, /* lei_u */ - 20, /* eqr */ - 24, /* eqi */ - 20, /* ger */ - 24, /* gei */ - 20, /* ger_u */ - 24, /* gei_u */ - 20, /* gtr */ - 24, /* gti */ - 20, /* gtr_u */ - 24, /* gti_u */ - 20, /* ner */ - 24, /* nei */ - 4, /* movr */ - 16, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 4, /* extr_i */ - 4, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 4, /* htonr_ul */ - 6, /* ldr_c */ - 18, /* ldi_c */ - 6, /* ldr_uc */ - 18, /* ldi_uc */ - 6, /* ldr_s */ - 18, /* ldi_s */ - 6, /* ldr_us */ - 18, /* ldi_us */ - 6, /* ldr_i */ - 18, /* ldi_i */ - 6, /* ldr_ui */ - 18, /* ldi_ui */ - 6, /* ldr_l */ - 18, /* ldi_l */ - 14, /* ldxr_c */ - 26, /* ldxi_c */ - 14, /* ldxr_uc */ - 26, /* ldxi_uc */ - 14, /* ldxr_s */ - 26, /* ldxi_s */ - 14, /* ldxr_us */ - 26, /* ldxi_us */ - 14, /* ldxr_i */ - 26, /* ldxi_i */ - 14, /* ldxr_ui */ - 26, /* ldxi_ui */ - 14, /* ldxr_l */ - 26, /* ldxi_l */ - 4, /* str_c */ - 16, /* sti_c */ - 4, /* str_s */ - 16, /* sti_s */ - 4, /* str_i */ - 16, /* sti_i */ - 6, /* str_l */ - 18, /* sti_l */ - 12, /* stxr_c */ - 28, /* stxi_c */ - 12, /* stxr_s */ - 28, /* stxi_s */ - 12, /* stxr_i */ - 28, /* stxi_i */ - 14, /* stxr_l */ - 30, /* stxi_l */ - 10, /* bltr */ - 14, /* blti */ - 10, /* bltr_u */ - 14, /* blti_u */ - 10, /* bler */ - 14, /* blei */ - 10, /* bler_u */ - 14, /* blei_u */ - 10, /* beqr */ - 26, /* beqi */ - 10, /* bger */ - 14, /* bgei */ - 10, /* bger_u */ - 14, /* bgei_u */ - 10, /* bgtr */ - 14, /* bgti */ - 10, /* bgtr_u */ - 14, /* bgti_u */ - 10, /* bner */ - 26, /* bnei */ - 18, /* bmsr */ - 18, /* bmsi */ - 18, /* bmcr */ - 18, /* bmci */ - 10, /* boaddr */ - 14, /* boaddi */ - 10, /* boaddr_u */ - 14, /* boaddi_u */ - 10, /* bxaddr */ - 14, /* bxaddi */ - 10, /* bxaddr_u */ - 14, /* bxaddi_u */ - 10, /* bosubr */ - 14, /* bosubi */ - 10, /* bosubr_u */ - 14, /* bosubi_u */ - 10, /* bxsubr */ - 14, /* bxsubi */ - 10, /* bxsubr_u */ - 14, /* bxsubi_u */ - 2, /* jmpr */ - 18, /* jmpi */ - 2, /* callr */ - 18, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 40, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 6, /* addr_f */ - 26, /* addi_f */ - 8, /* subr_f */ - 26, /* subi_f */ - 28, /* rsbi_f */ - 6, /* mulr_f */ - 26, /* muli_f */ - 8, /* divr_f */ - 26, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 36, /* lti_f */ - 16, /* ler_f */ - 36, /* lei_f */ - 16, /* eqr_f */ - 36, /* eqi_f */ - 16, /* ger_f */ - 36, /* gei_f */ - 16, /* gtr_f */ - 36, /* gti_f */ - 16, /* ner_f */ - 36, /* nei_f */ - 16, /* unltr_f */ - 36, /* unlti_f */ - 16, /* unler_f */ - 36, /* unlei_f */ - 20, /* uneqr_f */ - 40, /* uneqi_f */ - 16, /* unger_f */ - 36, /* ungei_f */ - 16, /* ungtr_f */ - 36, /* ungti_f */ - 20, /* ltgtr_f */ - 40, /* ltgti_f */ - 16, /* ordr_f */ - 36, /* ordi_f */ - 16, /* unordr_f */ - 36, /* unordi_f */ - 4, /* truncr_f_i */ - 4, /* truncr_f_l */ - 4, /* extr_f */ - 4, /* extr_d_f */ - 2, /* movr_f */ - 20, /* movi_f */ - 4, /* ldr_f */ - 16, /* ldi_f */ - 12, /* ldxr_f */ - 24, /* ldxi_f */ - 4, /* str_f */ - 16, /* sti_f */ - 12, /* stxr_f */ - 24, /* stxi_f */ - 10, /* bltr_f */ - 30, /* blti_f */ - 10, /* bler_f */ - 30, /* blei_f */ - 10, /* beqr_f */ - 30, /* beqi_f */ - 10, /* bger_f */ - 30, /* bgei_f */ - 10, /* bgtr_f */ - 30, /* bgti_f */ - 10, /* bner_f */ - 30, /* bnei_f */ - 10, /* bunltr_f */ - 30, /* bunlti_f */ - 10, /* bunler_f */ - 30, /* bunlei_f */ - 18, /* buneqr_f */ - 38, /* buneqi_f */ - 10, /* bunger_f */ - 30, /* bungei_f */ - 10, /* bungtr_f */ - 30, /* bungti_f */ - 18, /* bltgtr_f */ - 38, /* bltgti_f */ - 10, /* bordr_f */ - 30, /* bordi_f */ - 10, /* bunordr_f */ - 30, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 6, /* addr_d */ - 26, /* addi_d */ - 8, /* subr_d */ - 26, /* subi_d */ - 28, /* rsbi_d */ - 6, /* mulr_d */ - 26, /* muli_d */ - 8, /* divr_d */ - 26, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 36, /* lti_d */ - 16, /* ler_d */ - 36, /* lei_d */ - 16, /* eqr_d */ - 36, /* eqi_d */ - 16, /* ger_d */ - 36, /* gei_d */ - 16, /* gtr_d */ - 36, /* gti_d */ - 16, /* ner_d */ - 36, /* nei_d */ - 16, /* unltr_d */ - 36, /* unlti_d */ - 16, /* unler_d */ - 36, /* unlei_d */ - 20, /* uneqr_d */ - 40, /* uneqi_d */ - 16, /* unger_d */ - 36, /* ungei_d */ - 16, /* ungtr_d */ - 36, /* ungti_d */ - 20, /* ltgtr_d */ - 40, /* ltgti_d */ - 16, /* ordr_d */ - 36, /* ordi_d */ - 16, /* unordr_d */ - 36, /* unordi_d */ - 4, /* truncr_d_i */ - 4, /* truncr_d_l */ - 4, /* extr_d */ - 4, /* extr_f_d */ - 2, /* movr_d */ - 24, /* movi_d */ - 4, /* ldr_d */ - 16, /* ldi_d */ - 12, /* ldxr_d */ - 24, /* ldxi_d */ - 4, /* str_d */ - 16, /* sti_d */ - 12, /* stxr_d */ - 24, /* stxi_d */ - 10, /* bltr_d */ - 30, /* blti_d */ - 10, /* bler_d */ - 30, /* blei_d */ - 10, /* beqr_d */ - 34, /* beqi_d */ - 10, /* bger_d */ - 30, /* bgei_d */ - 10, /* bgtr_d */ - 30, /* bgti_d */ - 10, /* bner_d */ - 30, /* bnei_d */ - 10, /* bunltr_d */ - 30, /* bunlti_d */ - 10, /* bunler_d */ - 30, /* bunlei_d */ - 18, /* buneqr_d */ - 38, /* buneqi_d */ - 10, /* bunger_d */ - 30, /* bungei_d */ - 10, /* bungtr_d */ - 30, /* bungti_d */ - 18, /* bltgtr_d */ - 38, /* bltgti_d */ - 10, /* bordr_d */ - 30, /* bordi_d */ - 10, /* bunordr_d */ - 30, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 64 -#define JIT_INSTR_MAX 104 - 0, /* data */ - 0, /* live */ - 6, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 2, /* label */ - 42, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 44, /* va_start */ - 104, /* va_arg */ - 100, /* va_arg_d */ - 0, /* va_end */ - 8, /* addr */ - 24, /* addi */ - 8, /* addcr */ - 20, /* addci */ - 8, /* addxr */ - 12, /* addxi */ - 12, /* subr */ - 24, /* subi */ - 12, /* subcr */ - 20, /* subci */ - 12, /* subxr */ - 12, /* subxi */ - 28, /* rsbi */ - 8, /* mulr */ - 24, /* muli */ - 60, /* qmulr */ - 68, /* qmuli */ - 16, /* qmulr_u */ - 32, /* qmuli_u */ - 12, /* divr */ - 28, /* divi */ - 16, /* divr_u */ - 32, /* divi_u */ - 16, /* qdivr */ - 20, /* qdivi */ - 20, /* qdivr_u */ - 24, /* qdivi_u */ - 12, /* remr */ - 28, /* remi */ - 16, /* remr_u */ - 32, /* remi_u */ - 8, /* andr */ - 20, /* andi */ - 8, /* orr */ - 20, /* ori */ - 8, /* xorr */ - 24, /* xori */ - 6, /* lshr */ - 10, /* lshi */ - 6, /* rshr */ - 10, /* rshi */ - 6, /* rshr_u */ - 10, /* rshi_u */ - 4, /* negr */ - 12, /* comr */ - 20, /* ltr */ - 24, /* lti */ - 20, /* ltr_u */ - 24, /* lti_u */ - 20, /* ler */ - 24, /* lei */ - 20, /* ler_u */ - 24, /* lei_u */ - 20, /* eqr */ - 24, /* eqi */ - 20, /* ger */ - 24, /* gei */ - 20, /* ger_u */ - 24, /* gei_u */ - 20, /* gtr */ - 24, /* gti */ - 20, /* gtr_u */ - 24, /* gti_u */ - 20, /* ner */ - 24, /* nei */ - 4, /* movr */ - 16, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 4, /* extr_i */ - 4, /* extr_ui */ - 4, /* htonr_us */ - 4, /* htonr_ui */ - 4, /* htonr_ul */ - 6, /* ldr_c */ - 18, /* ldi_c */ - 6, /* ldr_uc */ - 18, /* ldi_uc */ - 6, /* ldr_s */ - 18, /* ldi_s */ - 6, /* ldr_us */ - 18, /* ldi_us */ - 6, /* ldr_i */ - 18, /* ldi_i */ - 6, /* ldr_ui */ - 18, /* ldi_ui */ - 6, /* ldr_l */ - 18, /* ldi_l */ - 14, /* ldxr_c */ - 26, /* ldxi_c */ - 14, /* ldxr_uc */ - 26, /* ldxi_uc */ - 14, /* ldxr_s */ - 26, /* ldxi_s */ - 14, /* ldxr_us */ - 26, /* ldxi_us */ - 14, /* ldxr_i */ - 26, /* ldxi_i */ - 14, /* ldxr_ui */ - 26, /* ldxi_ui */ - 14, /* ldxr_l */ - 26, /* ldxi_l */ - 4, /* str_c */ - 16, /* sti_c */ - 4, /* str_s */ - 16, /* sti_s */ - 4, /* str_i */ - 16, /* sti_i */ - 6, /* str_l */ - 18, /* sti_l */ - 12, /* stxr_c */ - 28, /* stxi_c */ - 12, /* stxr_s */ - 28, /* stxi_s */ - 12, /* stxr_i */ - 28, /* stxi_i */ - 14, /* stxr_l */ - 30, /* stxi_l */ - 10, /* bltr */ - 14, /* blti */ - 10, /* bltr_u */ - 14, /* blti_u */ - 10, /* bler */ - 14, /* blei */ - 10, /* bler_u */ - 14, /* blei_u */ - 10, /* beqr */ - 26, /* beqi */ - 10, /* bger */ - 14, /* bgei */ - 10, /* bger_u */ - 14, /* bgei_u */ - 10, /* bgtr */ - 14, /* bgti */ - 10, /* bgtr_u */ - 14, /* bgti_u */ - 10, /* bner */ - 26, /* bnei */ - 18, /* bmsr */ - 18, /* bmsi */ - 18, /* bmcr */ - 18, /* bmci */ - 10, /* boaddr */ - 14, /* boaddi */ - 10, /* boaddr_u */ - 14, /* boaddi_u */ - 10, /* bxaddr */ - 14, /* bxaddi */ - 10, /* bxaddr_u */ - 14, /* bxaddi_u */ - 10, /* bosubr */ - 14, /* bosubi */ - 10, /* bosubr_u */ - 14, /* bosubi_u */ - 10, /* bxsubr */ - 14, /* bxsubi */ - 10, /* bxsubr_u */ - 14, /* bxsubi_u */ - 2, /* jmpr */ - 18, /* jmpi */ - 2, /* callr */ - 18, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 40, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 6, /* addr_f */ - 26, /* addi_f */ - 8, /* subr_f */ - 26, /* subi_f */ - 28, /* rsbi_f */ - 6, /* mulr_f */ - 26, /* muli_f */ - 8, /* divr_f */ - 26, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 36, /* lti_f */ - 16, /* ler_f */ - 36, /* lei_f */ - 16, /* eqr_f */ - 36, /* eqi_f */ - 16, /* ger_f */ - 36, /* gei_f */ - 16, /* gtr_f */ - 36, /* gti_f */ - 16, /* ner_f */ - 36, /* nei_f */ - 16, /* unltr_f */ - 36, /* unlti_f */ - 16, /* unler_f */ - 36, /* unlei_f */ - 20, /* uneqr_f */ - 40, /* uneqi_f */ - 16, /* unger_f */ - 36, /* ungei_f */ - 16, /* ungtr_f */ - 36, /* ungti_f */ - 20, /* ltgtr_f */ - 40, /* ltgti_f */ - 16, /* ordr_f */ - 36, /* ordi_f */ - 16, /* unordr_f */ - 36, /* unordi_f */ - 4, /* truncr_f_i */ - 4, /* truncr_f_l */ - 4, /* extr_f */ - 4, /* extr_d_f */ - 2, /* movr_f */ - 20, /* movi_f */ - 4, /* ldr_f */ - 16, /* ldi_f */ - 12, /* ldxr_f */ - 24, /* ldxi_f */ - 4, /* str_f */ - 16, /* sti_f */ - 12, /* stxr_f */ - 24, /* stxi_f */ - 10, /* bltr_f */ - 30, /* blti_f */ - 10, /* bler_f */ - 30, /* blei_f */ - 10, /* beqr_f */ - 30, /* beqi_f */ - 10, /* bger_f */ - 30, /* bgei_f */ - 10, /* bgtr_f */ - 30, /* bgti_f */ - 10, /* bner_f */ - 30, /* bnei_f */ - 10, /* bunltr_f */ - 30, /* bunlti_f */ - 10, /* bunler_f */ - 30, /* bunlei_f */ - 18, /* buneqr_f */ - 38, /* buneqi_f */ - 10, /* bunger_f */ - 30, /* bungei_f */ - 10, /* bungtr_f */ - 30, /* bungti_f */ - 18, /* bltgtr_f */ - 38, /* bltgti_f */ - 10, /* bordr_f */ - 30, /* bordi_f */ - 10, /* bunordr_f */ - 30, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 6, /* addr_d */ - 26, /* addi_d */ - 8, /* subr_d */ - 26, /* subi_d */ - 28, /* rsbi_d */ - 6, /* mulr_d */ - 26, /* muli_d */ - 8, /* divr_d */ - 26, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 36, /* lti_d */ - 16, /* ler_d */ - 36, /* lei_d */ - 16, /* eqr_d */ - 36, /* eqi_d */ - 16, /* ger_d */ - 36, /* gei_d */ - 16, /* gtr_d */ - 36, /* gti_d */ - 16, /* ner_d */ - 36, /* nei_d */ - 16, /* unltr_d */ - 36, /* unlti_d */ - 16, /* unler_d */ - 36, /* unlei_d */ - 20, /* uneqr_d */ - 40, /* uneqi_d */ - 16, /* unger_d */ - 36, /* ungei_d */ - 16, /* ungtr_d */ - 36, /* ungti_d */ - 20, /* ltgtr_d */ - 40, /* ltgti_d */ - 16, /* ordr_d */ - 36, /* ordi_d */ - 16, /* unordr_d */ - 36, /* unordi_d */ - 4, /* truncr_d_i */ - 4, /* truncr_d_l */ - 4, /* extr_d */ - 4, /* extr_f_d */ - 2, /* movr_d */ - 24, /* movi_d */ - 4, /* ldr_d */ - 16, /* ldi_d */ - 12, /* ldxr_d */ - 24, /* ldxi_d */ - 4, /* str_d */ - 16, /* sti_d */ - 12, /* stxr_d */ - 24, /* stxi_d */ - 10, /* bltr_d */ - 30, /* blti_d */ - 10, /* bler_d */ - 30, /* blei_d */ - 10, /* beqr_d */ - 34, /* beqi_d */ - 10, /* bger_d */ - 30, /* bgei_d */ - 10, /* bgtr_d */ - 30, /* bgti_d */ - 10, /* bner_d */ - 30, /* bnei_d */ - 10, /* bunltr_d */ - 30, /* bunlti_d */ - 10, /* bunler_d */ - 30, /* bunlei_d */ - 18, /* buneqr_d */ - 38, /* buneqi_d */ - 10, /* bunger_d */ - 30, /* bungei_d */ - 10, /* bungtr_d */ - 30, /* bungti_d */ - 18, /* bltgtr_d */ - 38, /* bltgti_d */ - 10, /* bordr_d */ - 30, /* bordi_d */ - 10, /* bunordr_d */ - 30, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_size.c b/libguile/lightning/lib/jit_size.c deleted file mode 100644 index 50c8aca62..000000000 --- a/libguile/lightning/lib/jit_size.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2013-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#define DEBUG 1 -#define DISASSEMBLER 0 - -#include <lightning.h> -#include <lightning/jit_private.h> - -/* - * Initialization - */ -static jit_int16_t _szs[jit_code_last_code] = { -# if defined(__i386__) || defined(__x86_64__) -# include "jit_x86-sz.c" -# elif defined(__mips__) -# include "jit_mips-sz.c" -# elif defined(__arm__) -# include "jit_arm-sz.c" -# elif defined(__ppc__) || defined(__powerpc__) -# include "jit_ppc-sz.c" -# elif defined(__sparc__) -# include "jit_sparc-sz.c" -# elif defined(__ia64__) -# include "jit_ia64-sz.c" -# elif defined(__hppa__) -# include "jit_hppa-sz.c" -# elif defined(__aarch64__) -# include "jit_aarch64-sz.c" -# elif defined(__s390__) || defined(__s390x__) -# include "jit_s390-sz.c" -# elif defined(__alpha__) -# include "jit_alpha-sz.c" -# endif -}; - -/* - * Implementation - */ -void -jit_init_size(void) -{ -#if DEBUG - jit_word_t offset; - - for (offset = 0; offset < jit_size(_szs); offset++) - if (_szs[offset] != 0) - return; - /* Ensure data was collected */ - abort(); -#endif -} - -jit_word_t -jit_get_max_instr(void) -{ - return (JIT_INSTR_MAX >= 144 ? JIT_INSTR_MAX : 144); -} - -void -jit_finish_size(void) -{ -} diff --git a/libguile/lightning/lib/jit_sparc-sz.c b/libguile/lightning/lib/jit_sparc-sz.c deleted file mode 100644 index ac683b660..000000000 --- a/libguile/lightning/lib/jit_sparc-sz.c +++ /dev/null @@ -1,803 +0,0 @@ -#if __WORDSIZE == 32 -#define JIT_INSTR_MAX 44 - 0, /* data */ - 0, /* live */ - 0, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 0, /* label */ - 36, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 8, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 12, /* addi */ - 4, /* addcr */ - 12, /* addci */ - 4, /* addxr */ - 4, /* addxi */ - 4, /* subr */ - 12, /* subi */ - 4, /* subcr */ - 12, /* subci */ - 4, /* subxr */ - 4, /* subxi */ - 16, /* rsbi */ - 4, /* mulr */ - 12, /* muli */ - 8, /* qmulr */ - 16, /* qmuli */ - 8, /* qmulr_u */ - 16, /* qmuli_u */ - 12, /* divr */ - 20, /* divi */ - 8, /* divr_u */ - 16, /* divi_u */ - 28, /* qdivr */ - 24, /* qdivi */ - 24, /* qdivr_u */ - 20, /* qdivi_u */ - 20, /* remr */ - 28, /* remi */ - 16, /* remr_u */ - 24, /* remi_u */ - 4, /* andr */ - 12, /* andi */ - 4, /* orr */ - 12, /* ori */ - 4, /* xorr */ - 12, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 16, /* ltr */ - 16, /* lti */ - 16, /* ltr_u */ - 16, /* lti_u */ - 16, /* ler */ - 16, /* lei */ - 16, /* ler_u */ - 16, /* lei_u */ - 16, /* eqr */ - 16, /* eqi */ - 16, /* ger */ - 16, /* gei */ - 16, /* ger_u */ - 16, /* gei_u */ - 16, /* gtr */ - 16, /* gti */ - 16, /* gtr_u */ - 16, /* gti_u */ - 16, /* ner */ - 16, /* nei */ - 4, /* movr */ - 8, /* movi */ - 8, /* extr_c */ - 4, /* extr_uc */ - 8, /* extr_s */ - 8, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 8, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_ul */ - 4, /* ldr_c */ - 12, /* ldi_c */ - 4, /* ldr_uc */ - 12, /* ldi_uc */ - 4, /* ldr_s */ - 12, /* ldi_s */ - 4, /* ldr_us */ - 12, /* ldi_us */ - 4, /* ldr_i */ - 12, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 4, /* ldxr_c */ - 8, /* ldxi_c */ - 4, /* ldxr_uc */ - 8, /* ldxi_uc */ - 4, /* ldxr_s */ - 8, /* ldxi_s */ - 4, /* ldxr_us */ - 8, /* ldxi_us */ - 4, /* ldxr_i */ - 8, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 4, /* str_c */ - 12, /* sti_c */ - 4, /* str_s */ - 12, /* sti_s */ - 4, /* str_i */ - 12, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 4, /* stxr_c */ - 8, /* stxi_c */ - 4, /* stxr_s */ - 8, /* stxi_s */ - 4, /* stxr_i */ - 8, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 12, /* bltr */ - 12, /* blti */ - 12, /* bltr_u */ - 12, /* blti_u */ - 12, /* bler */ - 12, /* blei */ - 12, /* bler_u */ - 12, /* blei_u */ - 12, /* beqr */ - 20, /* beqi */ - 12, /* bger */ - 12, /* bgei */ - 12, /* bger_u */ - 12, /* bgei_u */ - 12, /* bgtr */ - 12, /* bgti */ - 12, /* bgtr_u */ - 12, /* bgti_u */ - 12, /* bner */ - 20, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 12, /* boaddr */ - 12, /* boaddi */ - 12, /* boaddr_u */ - 12, /* boaddi_u */ - 12, /* bxaddr */ - 12, /* bxaddi */ - 12, /* bxaddr_u */ - 12, /* bxaddi_u */ - 12, /* bosubr */ - 12, /* bosubi */ - 12, /* bosubr_u */ - 12, /* bosubi_u */ - 12, /* bxsubr */ - 12, /* bxsubi */ - 12, /* bxsubr_u */ - 12, /* bxsubi_u */ - 8, /* jmpr */ - 16, /* jmpi */ - 8, /* callr */ - 16, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 44, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 4, /* addr_f */ - 16, /* addi_f */ - 4, /* subr_f */ - 16, /* subi_f */ - 16, /* rsbi_f */ - 4, /* mulr_f */ - 16, /* muli_f */ - 4, /* divr_f */ - 16, /* divi_f */ - 4, /* negr_f */ - 4, /* absr_f */ - 4, /* sqrtr_f */ - 16, /* ltr_f */ - 32, /* lti_f */ - 16, /* ler_f */ - 32, /* lei_f */ - 16, /* eqr_f */ - 32, /* eqi_f */ - 16, /* ger_f */ - 32, /* gei_f */ - 16, /* gtr_f */ - 32, /* gti_f */ - 16, /* ner_f */ - 32, /* nei_f */ - 16, /* unltr_f */ - 32, /* unlti_f */ - 16, /* unler_f */ - 32, /* unlei_f */ - 16, /* uneqr_f */ - 32, /* uneqi_f */ - 16, /* unger_f */ - 32, /* ungei_f */ - 16, /* ungtr_f */ - 32, /* ungti_f */ - 16, /* ltgtr_f */ - 32, /* ltgti_f */ - 16, /* ordr_f */ - 32, /* ordi_f */ - 16, /* unordr_f */ - 32, /* unordi_f */ - 12, /* truncr_f_i */ - 0, /* truncr_f_l */ - 12, /* extr_f */ - 4, /* extr_d_f */ - 4, /* movr_f */ - 16, /* movi_f */ - 4, /* ldr_f */ - 12, /* ldi_f */ - 4, /* ldxr_f */ - 8, /* ldxi_f */ - 4, /* str_f */ - 12, /* sti_f */ - 4, /* stxr_f */ - 8, /* stxi_f */ - 12, /* bltr_f */ - 24, /* blti_f */ - 12, /* bler_f */ - 24, /* blei_f */ - 12, /* beqr_f */ - 24, /* beqi_f */ - 12, /* bger_f */ - 24, /* bgei_f */ - 12, /* bgtr_f */ - 24, /* bgti_f */ - 12, /* bner_f */ - 28, /* bnei_f */ - 12, /* bunltr_f */ - 28, /* bunlti_f */ - 12, /* bunler_f */ - 28, /* bunlei_f */ - 12, /* buneqr_f */ - 28, /* buneqi_f */ - 12, /* bunger_f */ - 28, /* bungei_f */ - 12, /* bungtr_f */ - 28, /* bungti_f */ - 12, /* bltgtr_f */ - 24, /* bltgti_f */ - 12, /* bordr_f */ - 24, /* bordi_f */ - 12, /* bunordr_f */ - 28, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 24, /* addi_d */ - 4, /* subr_d */ - 24, /* subi_d */ - 24, /* rsbi_d */ - 4, /* mulr_d */ - 24, /* muli_d */ - 4, /* divr_d */ - 24, /* divi_d */ - 8, /* negr_d */ - 8, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 40, /* lti_d */ - 16, /* ler_d */ - 40, /* lei_d */ - 16, /* eqr_d */ - 40, /* eqi_d */ - 16, /* ger_d */ - 40, /* gei_d */ - 16, /* gtr_d */ - 40, /* gti_d */ - 16, /* ner_d */ - 40, /* nei_d */ - 16, /* unltr_d */ - 40, /* unlti_d */ - 16, /* unler_d */ - 40, /* unlei_d */ - 16, /* uneqr_d */ - 40, /* uneqi_d */ - 16, /* unger_d */ - 40, /* ungei_d */ - 16, /* ungtr_d */ - 40, /* ungti_d */ - 16, /* ltgtr_d */ - 40, /* ltgti_d */ - 16, /* ordr_d */ - 40, /* ordi_d */ - 16, /* unordr_d */ - 40, /* unordi_d */ - 12, /* truncr_d_i */ - 0, /* truncr_d_l */ - 16, /* extr_d */ - 4, /* extr_f_d */ - 8, /* movr_d */ - 24, /* movi_d */ - 4, /* ldr_d */ - 12, /* ldi_d */ - 4, /* ldxr_d */ - 8, /* ldxi_d */ - 4, /* str_d */ - 12, /* sti_d */ - 4, /* stxr_d */ - 8, /* stxi_d */ - 12, /* bltr_d */ - 32, /* blti_d */ - 12, /* bler_d */ - 32, /* blei_d */ - 12, /* beqr_d */ - 32, /* beqi_d */ - 12, /* bger_d */ - 32, /* bgei_d */ - 12, /* bgtr_d */ - 32, /* bgti_d */ - 12, /* bner_d */ - 36, /* bnei_d */ - 12, /* bunltr_d */ - 36, /* bunlti_d */ - 12, /* bunler_d */ - 36, /* bunlei_d */ - 12, /* buneqr_d */ - 36, /* buneqi_d */ - 12, /* bunger_d */ - 36, /* bungei_d */ - 12, /* bungtr_d */ - 36, /* bungti_d */ - 12, /* bltgtr_d */ - 32, /* bltgti_d */ - 12, /* bordr_d */ - 32, /* bordi_d */ - 12, /* bunordr_d */ - 36, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ - -#if __WORDSIZE == 64 -#define JIT_INSTR_MAX 64 - 0, /* data */ - 0, /* live */ - 4, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 4, /* label */ - 36, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 4, /* va_start */ - 8, /* va_arg */ - 8, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 28, /* addi */ - 24, /* addcr */ - 48, /* addci */ - 52, /* addxr */ - 52, /* addxi */ - 4, /* subr */ - 28, /* subi */ - 24, /* subcr */ - 48, /* subci */ - 52, /* subxr */ - 52, /* subxi */ - 32, /* rsbi */ - 4, /* mulr */ - 28, /* muli */ - 48, /* qmulr */ - 64, /* qmuli */ - 48, /* qmulr_u */ - 64, /* qmuli_u */ - 4, /* divr */ - 28, /* divi */ - 4, /* divr_u */ - 28, /* divi_u */ - 20, /* qdivr */ - 16, /* qdivi */ - 20, /* qdivr_u */ - 16, /* qdivi_u */ - 12, /* remr */ - 36, /* remi */ - 12, /* remr_u */ - 36, /* remi_u */ - 4, /* andr */ - 28, /* andi */ - 4, /* orr */ - 28, /* ori */ - 4, /* xorr */ - 28, /* xori */ - 4, /* lshr */ - 4, /* lshi */ - 4, /* rshr */ - 4, /* rshi */ - 4, /* rshr_u */ - 4, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 16, /* ltr */ - 16, /* lti */ - 16, /* ltr_u */ - 16, /* lti_u */ - 16, /* ler */ - 16, /* lei */ - 16, /* ler_u */ - 16, /* lei_u */ - 16, /* eqr */ - 16, /* eqi */ - 16, /* ger */ - 16, /* gei */ - 16, /* ger_u */ - 16, /* gei_u */ - 16, /* gtr */ - 16, /* gti */ - 16, /* gtr_u */ - 16, /* gti_u */ - 16, /* ner */ - 16, /* nei */ - 4, /* movr */ - 24, /* movi */ - 8, /* extr_c */ - 4, /* extr_uc */ - 8, /* extr_s */ - 8, /* extr_us */ - 8, /* extr_i */ - 8, /* extr_ui */ - 8, /* htonr_us */ - 8, /* htonr_ui */ - 4, /* htonr_ul */ - 4, /* ldr_c */ - 28, /* ldi_c */ - 4, /* ldr_uc */ - 28, /* ldi_uc */ - 4, /* ldr_s */ - 28, /* ldi_s */ - 4, /* ldr_us */ - 28, /* ldi_us */ - 4, /* ldr_i */ - 28, /* ldi_i */ - 4, /* ldr_ui */ - 28, /* ldi_ui */ - 4, /* ldr_l */ - 28, /* ldi_l */ - 4, /* ldxr_c */ - 24, /* ldxi_c */ - 4, /* ldxr_uc */ - 24, /* ldxi_uc */ - 4, /* ldxr_s */ - 24, /* ldxi_s */ - 4, /* ldxr_us */ - 24, /* ldxi_us */ - 4, /* ldxr_i */ - 24, /* ldxi_i */ - 4, /* ldxr_ui */ - 24, /* ldxi_ui */ - 4, /* ldxr_l */ - 24, /* ldxi_l */ - 4, /* str_c */ - 28, /* sti_c */ - 4, /* str_s */ - 28, /* sti_s */ - 4, /* str_i */ - 28, /* sti_i */ - 4, /* str_l */ - 28, /* sti_l */ - 4, /* stxr_c */ - 24, /* stxi_c */ - 4, /* stxr_s */ - 24, /* stxi_s */ - 4, /* stxr_i */ - 24, /* stxi_i */ - 4, /* stxr_l */ - 24, /* stxi_l */ - 12, /* bltr */ - 12, /* blti */ - 12, /* bltr_u */ - 12, /* blti_u */ - 12, /* bler */ - 12, /* blei */ - 12, /* bler_u */ - 12, /* blei_u */ - 12, /* beqr */ - 36, /* beqi */ - 12, /* bger */ - 12, /* bgei */ - 12, /* bger_u */ - 12, /* bgei_u */ - 12, /* bgtr */ - 12, /* bgti */ - 12, /* bgtr_u */ - 12, /* bgti_u */ - 12, /* bner */ - 36, /* bnei */ - 12, /* bmsr */ - 12, /* bmsi */ - 12, /* bmcr */ - 12, /* bmci */ - 12, /* boaddr */ - 12, /* boaddi */ - 12, /* boaddr_u */ - 12, /* boaddi_u */ - 12, /* bxaddr */ - 12, /* bxaddi */ - 12, /* bxaddr_u */ - 12, /* bxaddi_u */ - 12, /* bosubr */ - 12, /* bosubi */ - 12, /* bosubr_u */ - 12, /* bosubi_u */ - 12, /* bxsubr */ - 12, /* bxsubi */ - 12, /* bxsubr_u */ - 12, /* bxsubi_u */ - 8, /* jmpr */ - 32, /* jmpi */ - 8, /* callr */ - 32, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 44, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 16, /* addr_f */ - 40, /* addi_f */ - 24, /* subr_f */ - 40, /* subi_f */ - 40, /* rsbi_f */ - 16, /* mulr_f */ - 40, /* muli_f */ - 16, /* divr_f */ - 40, /* divi_f */ - 12, /* negr_f */ - 12, /* absr_f */ - 12, /* sqrtr_f */ - 24, /* ltr_f */ - 48, /* lti_f */ - 24, /* ler_f */ - 48, /* lei_f */ - 24, /* eqr_f */ - 48, /* eqi_f */ - 24, /* ger_f */ - 48, /* gei_f */ - 24, /* gtr_f */ - 48, /* gti_f */ - 24, /* ner_f */ - 48, /* nei_f */ - 24, /* unltr_f */ - 48, /* unlti_f */ - 24, /* unler_f */ - 48, /* unlei_f */ - 24, /* uneqr_f */ - 48, /* uneqi_f */ - 24, /* unger_f */ - 48, /* ungei_f */ - 24, /* ungtr_f */ - 48, /* ungti_f */ - 24, /* ltgtr_f */ - 48, /* ltgti_f */ - 24, /* ordr_f */ - 48, /* ordi_f */ - 24, /* unordr_f */ - 48, /* unordi_f */ - 16, /* truncr_f_i */ - 16, /* truncr_f_l */ - 20, /* extr_f */ - 12, /* extr_d_f */ - 16, /* movr_f */ - 32, /* movi_f */ - 8, /* ldr_f */ - 32, /* ldi_f */ - 8, /* ldxr_f */ - 28, /* ldxi_f */ - 8, /* str_f */ - 32, /* sti_f */ - 8, /* stxr_f */ - 28, /* stxi_f */ - 20, /* bltr_f */ - 44, /* blti_f */ - 20, /* bler_f */ - 44, /* blei_f */ - 28, /* beqr_f */ - 60, /* beqi_f */ - 20, /* bger_f */ - 44, /* bgei_f */ - 20, /* bgtr_f */ - 44, /* bgti_f */ - 20, /* bner_f */ - 44, /* bnei_f */ - 20, /* bunltr_f */ - 44, /* bunlti_f */ - 20, /* bunler_f */ - 44, /* bunlei_f */ - 20, /* buneqr_f */ - 44, /* buneqi_f */ - 20, /* bunger_f */ - 44, /* bungei_f */ - 20, /* bungtr_f */ - 44, /* bungti_f */ - 20, /* bltgtr_f */ - 44, /* bltgti_f */ - 20, /* bordr_f */ - 44, /* bordi_f */ - 20, /* bunordr_f */ - 44, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 4, /* addr_d */ - 32, /* addi_d */ - 4, /* subr_d */ - 32, /* subi_d */ - 32, /* rsbi_d */ - 4, /* mulr_d */ - 32, /* muli_d */ - 4, /* divr_d */ - 32, /* divi_d */ - 4, /* negr_d */ - 4, /* absr_d */ - 4, /* sqrtr_d */ - 16, /* ltr_d */ - 48, /* lti_d */ - 16, /* ler_d */ - 48, /* lei_d */ - 16, /* eqr_d */ - 48, /* eqi_d */ - 16, /* ger_d */ - 48, /* gei_d */ - 16, /* gtr_d */ - 48, /* gti_d */ - 16, /* ner_d */ - 48, /* nei_d */ - 16, /* unltr_d */ - 48, /* unlti_d */ - 16, /* unler_d */ - 48, /* unlei_d */ - 16, /* uneqr_d */ - 48, /* uneqi_d */ - 16, /* unger_d */ - 48, /* ungei_d */ - 16, /* ungtr_d */ - 48, /* ungti_d */ - 16, /* ltgtr_d */ - 48, /* ltgti_d */ - 16, /* ordr_d */ - 48, /* ordi_d */ - 16, /* unordr_d */ - 48, /* unordi_d */ - 16, /* truncr_d_i */ - 12, /* truncr_d_l */ - 12, /* extr_d */ - 8, /* extr_f_d */ - 4, /* movr_d */ - 32, /* movi_d */ - 4, /* ldr_d */ - 28, /* ldi_d */ - 4, /* ldxr_d */ - 24, /* ldxi_d */ - 4, /* str_d */ - 28, /* sti_d */ - 4, /* stxr_d */ - 24, /* stxi_d */ - 12, /* bltr_d */ - 40, /* blti_d */ - 12, /* bler_d */ - 40, /* blei_d */ - 12, /* beqr_d */ - 40, /* beqi_d */ - 12, /* bger_d */ - 40, /* bgei_d */ - 12, /* bgtr_d */ - 40, /* bgti_d */ - 12, /* bner_d */ - 44, /* bnei_d */ - 12, /* bunltr_d */ - 44, /* bunlti_d */ - 12, /* bunler_d */ - 44, /* bunlei_d */ - 12, /* buneqr_d */ - 44, /* buneqi_d */ - 12, /* bunger_d */ - 44, /* bungei_d */ - 12, /* bungtr_d */ - 44, /* bungti_d */ - 12, /* bltgtr_d */ - 40, /* bltgti_d */ - 12, /* bordr_d */ - 40, /* bordi_d */ - 12, /* bunordr_d */ - 44, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __WORDSIZE */ diff --git a/libguile/lightning/lib/jit_x86-cpu.c b/libguile/lightning/lib/jit_x86-cpu.c deleted file mode 100644 index 18ace1ff8..000000000 --- a/libguile/lightning/lib/jit_x86-cpu.c +++ /dev/null @@ -1,3861 +0,0 @@ -/* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -/* avoid using it due to partial stalls */ -#define USE_INC_DEC 0 - -#if PROTO -# if __X32 || __X64_32 -# define WIDE 0 -# define ldi(u, v) ldi_i(u, v) -# define ldr(u, v) ldr_i(u, v) -# define ldxr(u, v, w) ldxr_i(u, v, w) -# define ldxi(u, v, w) ldxi_i(u, v, w) -# define sti(u, v) sti_i(u, v) -# define stxi(u, v, w) stxi_i(u, v, w) -# define can_sign_extend_int_p(im) 1 -# define can_zero_extend_int_p(im) 1 -# define fits_uint32_p(im) 1 -# else -# define WIDE 1 -# define ldi(u, v) ldi_l(u, v) -# define ldr(u, v) ldr_l(u, v) -# define ldxr(u, v, w) ldxr_l(u, v, w) -# define ldxi(u, v, w) ldxi_l(u, v, w) -# define sti(u, v) sti_l(u, v) -# define stxi(u, v, w) stxi_l(u, v, w) -# define can_sign_extend_int_p(im) \ - (((im) >= 0 && (long long)(im) <= 0x7fffffffLL) || \ - ((im) < 0 && (long long)(im) > -0x80000000LL)) -# define can_zero_extend_int_p(im) \ - ((im) >= 0 && (im) < 0x80000000LL) -# define fits_uint32_p(im) (((im) & 0xffffffff00000000LL) == 0) -# endif -# if __X32 || __CYGWIN__ || __X64_32 -# define reg8_p(rn) \ - ((rn) >= _RAX_REGNO && (rn) <= _RBX_REGNO) -# else -# define reg8_p(rn) 1 -# endif -# define _RAX_REGNO 0 -# define _RCX_REGNO 1 -# define _RDX_REGNO 2 -# define _RBX_REGNO 3 -# define _RSP_REGNO 4 -# define _RBP_REGNO 5 -# define _RSI_REGNO 6 -# define _RDI_REGNO 7 -# define _R8_REGNO 8 -# define _R9_REGNO 9 -# define _R10_REGNO 10 -# define _R11_REGNO 11 -# define _R12_REGNO 12 -# define _R13_REGNO 13 -# define _R14_REGNO 14 -# define _R15_REGNO 15 -# define r7(reg) ((reg) & 7) -# define r8(reg) ((reg) & 15) -# define _SCL1 0x00 -# define _SCL2 0x01 -# define _SCL4 0x02 -# define _SCL8 0x03 -# define X86_ADD 0 -# define X86_OR 1 << 3 -# define X86_ADC 2 << 3 -# define X86_SBB 3 << 3 -# define X86_AND 4 << 3 -# define X86_SUB 5 << 3 -# define X86_XOR 6 << 3 -# define X86_CMP 7 << 3 -# define X86_ROL 0 -# define X86_ROR 1 -# define X86_RCL 2 -# define X86_RCR 3 -# define X86_SHL 4 -# define X86_SHR 5 -# define X86_SAR 7 -# define X86_NOT 2 -# define X86_NEG 3 -# define X86_MUL 4 -# define X86_IMUL 5 -# define X86_DIV 6 -# define X86_IDIV 7 -# define X86_CC_O 0x0 -# define X86_CC_NO 0x1 -# define X86_CC_NAE 0x2 -# define X86_CC_B 0x2 -# define X86_CC_C 0x2 -# define X86_CC_AE 0x3 -# define X86_CC_NB 0x3 -# define X86_CC_NC 0x3 -# define X86_CC_E 0x4 -# define X86_CC_Z 0x4 -# define X86_CC_NE 0x5 -# define X86_CC_NZ 0x5 -# define X86_CC_BE 0x6 -# define X86_CC_NA 0x6 -# define X86_CC_A 0x7 -# define X86_CC_NBE 0x7 -# define X86_CC_S 0x8 -# define X86_CC_NS 0x9 -# define X86_CC_P 0xa -# define X86_CC_PE 0xa -# define X86_CC_NP 0xb -# define X86_CC_PO 0xb -# define X86_CC_L 0xc -# define X86_CC_NGE 0xc -# define X86_CC_GE 0xd -# define X86_CC_NL 0xd -# define X86_CC_LE 0xe -# define X86_CC_NG 0xe -# define X86_CC_G 0xf -# define X86_CC_NLE 0xf -# define mrm(md, r, m) *_jit->pc.uc++ = (md<<6) | (r<<3) | m -# define sib(sc, i, b) *_jit->pc.uc++ = (sc<<6) | (i<<3) | b -# define ic(c) *_jit->pc.uc++ = c -# define is(s) *_jit->pc.us++ = s -# define ii(i) *_jit->pc.ui++ = i -# if __X64 && !__X64_32 -# define il(l) *_jit->pc.ul++ = l -# else -# define il(l) ii(l) -# endif -# define patch_abs(instr, label) \ - *(jit_word_t *)(instr - sizeof(jit_word_t)) = label -# define patch_rel(instr, label) \ - *(jit_int32_t *)(instr - 4) = label - instr -# define patch_rel_char(instr, label) \ - *(jit_int8_t *)(instr - 1) = label - instr -# define rex(l, w, r, x, b) _rex(_jit, l, w, r, x, b) -static void -_rex(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); -# define rx(rd, md, rb, ri, ms) _rx(_jit, rd, md, rb, ri, ms) -static void -_rx(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); -# define nop(n) _nop(_jit, n) -static void _nop(jit_state_t*, jit_int32_t); -# define emms() is(0x770f) -# define lea(md, rb, ri, ms, rd) _lea(_jit, md, rb, ri, ms, rd) -static void -_lea(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); -# define pushr(r0) _pushr(_jit, r0) -static void _pushr(jit_state_t*, jit_int32_t) maybe_unused; -# define popr(r0) _popr(_jit, r0) -static void _popr(jit_state_t*, jit_int32_t) maybe_unused; -# define xchgr(r0, r1) _xchgr(_jit, r0, r1) -static void _xchgr(jit_state_t*, jit_int32_t, jit_int32_t); -# define testr(r0, r1) _testr(_jit, r0, r1) -static void _testr(jit_state_t*, jit_int32_t, jit_int32_t); -# define testi(r0, i0) _testi(_jit, r0, i0) -static void _testi(jit_state_t*, jit_int32_t, jit_word_t); -# define cc(code, r0) _cc(_jit, code, r0) -static void _cc(jit_state_t*, jit_int32_t, jit_int32_t); -# define icmpr(r0, r1) alur(X86_CMP, r0, r1) -# define alur(code, r0, r1) _alur(_jit, code, r0, r1) -static void _alur(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define icmpi(r0, i0) alui(X86_CMP, r0, i0) -# define alui(code, r0, i0) _alui(_jit, code, r0, i0) -static void _alui(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define iaddr(r0, r1) alur(X86_ADD, r0, r1) -# define save(r0) _save(_jit, r0) -static void _save(jit_state_t*, jit_int32_t); -# define load(r0) _load(_jit, r0) -static void _load(jit_state_t*, jit_int32_t); -# define addr(r0, r1, r2) _addr(_jit, r0, r1, r2) -static void _addr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define iaddi(r0, i0) alui(X86_ADD, r0, i0) -# define addi(r0, r1, i0) _addi(_jit, r0, r1, i0) -static void _addi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -#define addcr(r0, r1, r2) _addcr(_jit, r0, r1, r2) -static void _addcr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -#define addci(r0, r1, i0) _addci(_jit, r0, r1, i0) -static void _addci(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define iaddxr(r0, r1) alur(X86_ADC, r0, r1) -# define addxr(r0, r1, r2) _addxr(_jit, r0, r1, r2) -static void _addxr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define iaddxi(r0, i0) alui(X86_ADC, r0, i0) -# define addxi(r0, r1, i0) _addxi(_jit, r0, r1, i0) -static void _addxi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define isubr(r0, r1) alur(X86_SUB, r0, r1) -# define subr(r0, r1, r2) _subr(_jit, r0, r1, r2) -static void _subr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define isubi(r0, i0) alui(X86_SUB, r0, i0) -# define subi(r0, r1, i0) _subi(_jit, r0, r1, i0) -static void _subi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define subcr(r0, r1, r2) _subcr(_jit, r0, r1, r2) -static void _subcr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define subci(r0, r1, i0) _subci(_jit, r0, r1, i0) -static void _subci(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); -# define isubxr(r0, r1) alur(X86_SBB, r0, r1) -# define subxr(r0, r1, r2) _subxr(_jit, r0, r1, r2) -static void _subxr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define isubxi(r0, i0) alui(X86_SBB, r0, i0) -# define subxi(r0, r1, i0) _subxi(_jit, r0, r1, i0) -static void _subxi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); -# define rsbi(r0, r1, i0) _rsbi(_jit, r0, r1, i0) -static void _rsbi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t); -# define imulr(r0, r1) _imulr(_jit, r0, r1) -static void _imulr(jit_state_t*, jit_int32_t, jit_int32_t); -# define imuli(r0, r1, i0) _imuli(_jit, r0, r1, i0) -static void _imuli(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define mulr(r0, r1, r2) _mulr(_jit, r0, r1, r2) -static void _mulr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define muli(r0, r1, i0) _muli(_jit, r0, r1, i0) -static void _muli(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define umulr(r0) unr(X86_IMUL, r0) -# define umulr_u(r0) unr(X86_MUL, r0) -# define qmulr(r0, r1, r2, r3) _iqmulr(_jit, r0, r1, r2, r3, 1) -# define qmulr_u(r0, r1, r2, r3) _iqmulr(_jit, r0, r1, r2, r3, 0) -# define iqmulr(r0, r1, r2, r3, sign) _iqmulr(_jit, r0, r1, r2, r3, sign) -static void _iqmulr(jit_state_t*, jit_int32_t, jit_int32_t, - jit_int32_t,jit_int32_t, jit_bool_t); -# define qmuli(r0, r1, r2, i0) _iqmuli(_jit, r0, r1, r2, i0, 1) -# define qmuli_u(r0, r1, r2, i0) _iqmuli(_jit, r0, r1, r2, i0, 0) -# define iqmuli(r0, r1, r2, i0, sign) _iqmuli(_jit, r0, r1, r2, i0, sign) -static void _iqmuli(jit_state_t*, jit_int32_t, jit_int32_t, - jit_int32_t,jit_word_t, jit_bool_t); -# define sign_extend_rdx_rax() _sign_extend_rdx_rax(_jit) -static void _sign_extend_rdx_rax(jit_state_t*); -# define idivr(r0) unr(X86_IDIV, r0) -# define idivr_u(r0) unr(X86_DIV, r0) -# define divremr(r0, r1, r2, i0, i1) _divremr(_jit, r0, r1, r2, i0, i1) -static void -_divremr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t, - jit_bool_t,jit_bool_t); -# define divremi(r0, r1, i0, i1, i2) _divremi(_jit, r0, r1, i0, i1, i2) -static void -_divremi(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t,jit_bool_t,jit_bool_t); -# define divr(r0, r1, r2) divremr(r0, r1, r2, 1, 1) -# define divi(r0, r1, i0) divremi(r0, r1, i0, 1, 1) -# define divr_u(r0, r1, r2) divremr(r0, r1, r2, 0, 1) -# define divi_u(r0, r1, i0) divremi(r0, r1, i0, 0, 1) -# define qdivr(r0, r1, r2, r3) _iqdivr(_jit, r0, r1, r2, r3, 1) -# define qdivr_u(r0, r1, r2, r3) _iqdivr(_jit, r0, r1, r2, r3, 0) -# define iqdivr(r0, r1, r2, r3, sign) _iqdivr(_jit, r0, r1, r2, r3, sign) -static void _iqdivr(jit_state_t*, jit_int32_t, jit_int32_t, - jit_int32_t,jit_int32_t, jit_bool_t); -# define qdivi(r0, r1, r2, i0) _iqdivi(_jit, r0, r1, r2, i0, 1) -# define qdivi_u(r0, r1, r2, i0) _iqdivi(_jit, r0, r1, r2, i0, 0) -# define iqdivi(r0, r1, r2, i0, sign) _iqdivi(_jit, r0, r1, r2, i0, sign) -static void _iqdivi(jit_state_t*, jit_int32_t, jit_int32_t, - jit_int32_t,jit_word_t, jit_bool_t); -# define remr(r0, r1, r2) divremr(r0, r1, r2, 1, 0) -# define remi(r0, r1, i0) divremi(r0, r1, i0, 1, 0) -# define remr_u(r0, r1, r2) divremr(r0, r1, r2, 0, 0) -# define remi_u(r0, r1, i0) divremi(r0, r1, i0, 0, 0) -# define iandr(r0, r1) alur(X86_AND, r0, r1) -# define andr(r0, r1, r2) _andr(_jit, r0, r1, r2) -static void _andr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define iandi(r0, i0) alui(X86_AND, r0, i0) -# define andi(r0, r1, i0) _andi(_jit, r0, r1, i0) -static void _andi(jit_state_t*, jit_int32_t,jit_int32_t,jit_word_t); -# define iorr(r0, r1) alur(X86_OR, r0, r1) -# define orr(r0, r1, r2) _orr(_jit, r0, r1, r2) -static void _orr(jit_state_t*, jit_int32_t,jit_int32_t,jit_int32_t); -# define iori(r0, i0) alui(X86_OR, r0, i0) -# define ori(r0, r1, i0) _ori(_jit, r0, r1, i0) -static void _ori(jit_state_t*, jit_int32_t,jit_int32_t,jit_word_t); -# define ixorr(r0, r1) alur(X86_XOR, r0, r1) -# define xorr(r0, r1, r2) _xorr(_jit, r0, r1, r2) -static void _xorr(jit_state_t*, jit_int32_t,jit_int32_t,jit_int32_t); -# define ixori(r0, i0) alui(X86_XOR, r0, i0) -# define xori(r0, r1, i0) _xori(_jit, r0, r1, i0) -static void _xori(jit_state_t*, jit_int32_t,jit_int32_t,jit_word_t); -# define irotshr(code, r0) _irotshr(_jit, code, r0) -static void _irotshr(jit_state_t*, jit_int32_t, jit_int32_t); -# define rotshr(code, r0, r1, r2) _rotshr(_jit, code, r0, r1, r2) -static void -_rotshr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); -# define irotshi(code, r0, i0) _irotshi(_jit, code, r0, i0) -static void _irotshi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define rotshi(code, r0, r1, i0) _rotshi(_jit, code, r0, r1, i0) -static void -_rotshi(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_word_t); -# define lshr(r0, r1, r2) rotshr(X86_SHL, r0, r1, r2) -# define lshi(r0, r1, i0) _lshi(_jit, r0, r1, i0) -static void _lshi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define rshr(r0, r1, r2) rotshr(X86_SAR, r0, r1, r2) -# define rshi(r0, r1, i0) rotshi(X86_SAR, r0, r1, i0) -# define rshr_u(r0, r1, r2) rotshr(X86_SHR, r0, r1, r2) -# define rshi_u(r0, r1, i0) rotshi(X86_SHR, r0, r1, i0) -# define unr(code, r0) _unr(_jit, code, r0) -static void _unr(jit_state_t*, jit_int32_t, jit_int32_t); -# define inegr(r0) unr(X86_NEG, r0) -# define negr(r0, r1) _negr(_jit, r0, r1) -static void _negr(jit_state_t*, jit_int32_t, jit_int32_t); -# define icomr(r0) unr(X86_NOT, r0) -# define comr(r0, r1) _comr(_jit, r0, r1) -static void _comr(jit_state_t*, jit_int32_t, jit_int32_t); -# if USE_INC_DEC -# define incr(r0, r1) _incr(_jit, r0, r1) -static void _incr(jit_state_t*, jit_int32_t, jit_int32_t); -# define decr(r0, r1) _decr(_jit, r0, r1) -static void _decr(jit_state_t*, jit_int32_t, jit_int32_t); -# endif -# define cr(code, r0, r1, r2) _cr(_jit, code, r0, r1, r2) -static void -_cr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); -# define ci(code, r0, r1, i0) _ci(_jit, code, r0, r1, i0) -static void -_ci(jit_state_t *_jit, jit_int32_t, jit_int32_t, jit_int32_t, jit_word_t); -# define ci0(code, r0, r1) _ci0(_jit, code, r0, r1) -static void _ci0(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ltr(r0, r1, r2) _ltr(_jit, r0, r1, r2) -static void _ltr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define lti(r0, r1, i0) _lti(_jit, r0, r1, i0) -static void _lti(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ltr_u(r0, r1, r2) _ltr_u(_jit, r0, r1, r2) -static void _ltr_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define lti_u(r0, r1, i0) ci(X86_CC_B, r0, r1, i0) -# define ler(r0, r1, r2) _ler(_jit, r0, r1, r2) -static void _ler(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define lei(r0, r1, i0) ci(X86_CC_LE, r0, r1, i0) -# define ler_u(r0, r1, r2) _ler_u(_jit, r0, r1, r2) -static void _ler_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define lei_u(r0, r1, i0) _lei_u(_jit, r0, r1, i0) -static void _lei_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define eqr(r0, r1, r2) _eqr(_jit, r0, r1, r2) -static void _eqr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define eqi(r0, r1, i0) _eqi(_jit, r0, r1, i0) -static void _eqi(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ger(r0, r1, r2) _ger(_jit, r0, r1, r2) -static void _ger(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define gei(r0, r1, i0) _gei(_jit, r0, r1, i0) -static void _gei(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ger_u(r0, r1, r2) _ger_u(_jit, r0, r1, r2) -static void _ger_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define gei_u(r0, r1, i0) _gei_u(_jit, r0, r1, i0) -static void _gei_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define gtr(r0, r1, r2) _gtr(_jit, r0, r1, r2) -static void _gtr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define gti(r0, r1, i0) _ci(_jit, X86_CC_G, r0, r1, i0) -# define gtr_u(r0, r1, r2) _gtr_u(_jit, r0, r1, r2) -static void _gtr_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define gti_u(r0, r1, i0) _gti_u(_jit, r0, r1, i0) -static void _gti_u(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ner(r0, r1, r2) _ner(_jit, r0, r1, r2) -static void _ner(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define nei(r0, r1, i0) _nei(_jit, r0, r1, i0) -static void _nei(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define movr(r0, r1) _movr(_jit, r0, r1) -static void _movr(jit_state_t*, jit_int32_t, jit_int32_t); -# define imovi(r0, i0) _imovi(_jit, r0, i0) -static void _imovi(jit_state_t*, jit_int32_t, jit_word_t); -# define movi(r0, i0) _movi(_jit, r0, i0) -static void _movi(jit_state_t*, jit_int32_t, jit_word_t); -# define movi_p(r0, i0) _movi_p(_jit, r0, i0) -static jit_word_t _movi_p(jit_state_t*, jit_int32_t, jit_word_t); -# define movcr(r0, r1) _movcr(_jit, r0, r1) -static void _movcr(jit_state_t*,jit_int32_t,jit_int32_t); -# define movcr_u(r0, r1) _movcr_u(_jit, r0, r1) -static void _movcr_u(jit_state_t*,jit_int32_t,jit_int32_t); -# define movsr(r0, r1) _movsr(_jit, r0, r1) -static void _movsr(jit_state_t*,jit_int32_t,jit_int32_t); -# define movsr_u(r0, r1) _movsr_u(_jit, r0, r1) -static void _movsr_u(jit_state_t*,jit_int32_t,jit_int32_t); -# if __X64 && !__X64_32 -# define movir(r0, r1) _movir(_jit, r0, r1) -static void _movir(jit_state_t*,jit_int32_t,jit_int32_t); -# define movir_u(r0, r1) _movir_u(_jit, r0, r1) -static void _movir_u(jit_state_t*,jit_int32_t,jit_int32_t); -# endif -# define htonr_us(r0, r1) _htonr_us(_jit, r0, r1) -static void _htonr_us(jit_state_t*,jit_int32_t,jit_int32_t); -# define htonr_ui(r0, r1) _htonr_ui(_jit, r0, r1) -static void _htonr_ui(jit_state_t*,jit_int32_t,jit_int32_t); -# if __X64 && !__X64_32 -#define htonr_ul(r0, r1) _htonr_ul(_jit, r0, r1) -static void _htonr_ul(jit_state_t*,jit_int32_t,jit_int32_t); -#endif -# define extr_c(r0, r1) _extr_c(_jit, r0, r1) -static void _extr_c(jit_state_t*,jit_int32_t,jit_int32_t); -# define extr_uc(r0, r1) _extr_uc(_jit, r0, r1) -static void _extr_uc(jit_state_t*,jit_int32_t,jit_int32_t); -# define extr_s(r0, r1) movsr(r0, r1) -# define extr_us(r0, r1) movsr_u(r0, r1) -# if __X64 && !__X64_32 -# define extr_i(r0, r1) movir(r0, r1) -# define extr_ui(r0, r1) movir_u(r0, r1) -# endif -# define ldr_c(r0, r1) _ldr_c(_jit, r0, r1) -static void _ldr_c(jit_state_t*, jit_int32_t, jit_int32_t); -# define ldi_c(r0, i0) _ldi_c(_jit, r0, i0) -static void _ldi_c(jit_state_t*, jit_int32_t, jit_word_t); -# define ldr_uc(r0, r1) _ldr_uc(_jit, r0, r1) -static void _ldr_uc(jit_state_t*, jit_int32_t, jit_int32_t); -# define ldi_uc(r0, i0) _ldi_uc(_jit, r0, i0) -static void _ldi_uc(jit_state_t*, jit_int32_t, jit_word_t); -# define ldr_s(r0, r1) _ldr_s(_jit, r0, r1) -static void _ldr_s(jit_state_t*, jit_int32_t, jit_int32_t); -# define ldi_s(r0, i0) _ldi_s(_jit, r0, i0) -static void _ldi_s(jit_state_t*, jit_int32_t, jit_word_t); -# define ldr_us(r0, r1) _ldr_us(_jit, r0, r1) -static void _ldr_us(jit_state_t*, jit_int32_t, jit_int32_t); -# define ldi_us(r0, i0) _ldi_us(_jit, r0, i0) -static void _ldi_us(jit_state_t*, jit_int32_t, jit_word_t); -# if __X32 || !__X64_32 -# define ldr_i(r0, r1) _ldr_i(_jit, r0, r1) -static void _ldr_i(jit_state_t*, jit_int32_t, jit_int32_t); -# define ldi_i(r0, i0) _ldi_i(_jit, r0, i0) -static void _ldi_i(jit_state_t*, jit_int32_t, jit_word_t); -# endif -# if __X64 -# if __X64_32 -# define ldr_i(r0, r1) _ldr_ui(_jit, r0, r1) -# define ldi_i(r0, i0) _ldi_ui(_jit, r0, i0) -# else -# define ldr_ui(r0, r1) _ldr_ui(_jit, r0, r1) -# define ldi_ui(r0, i0) _ldi_ui(_jit, r0, i0) -# endif -static void _ldr_ui(jit_state_t*, jit_int32_t, jit_int32_t); -static void _ldi_ui(jit_state_t*, jit_int32_t, jit_word_t); -# if !__X64_32 -# define ldr_l(r0, r1) _ldr_l(_jit, r0, r1) -static void _ldr_l(jit_state_t*, jit_int32_t, jit_int32_t); -# define ldi_l(r0, i0) _ldi_l(_jit, r0, i0) -static void _ldi_l(jit_state_t*, jit_int32_t, jit_word_t); -# endif -# endif -# define ldxr_c(r0, r1, r2) _ldxr_c(_jit, r0, r1, r2) -static void _ldxr_c(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ldxi_c(r0, r1, i0) _ldxi_c(_jit, r0, r1, i0) -static void _ldxi_c(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ldxr_uc(r0, r1, r2) _ldxr_uc(_jit, r0, r1, r2) -static void _ldxr_uc(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ldxi_uc(r0, r1, i0) _ldxi_uc(_jit, r0, r1, i0) -static void _ldxi_uc(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ldxr_s(r0, r1, r2) _ldxr_s(_jit, r0, r1, r2) -static void _ldxr_s(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ldxi_s(r0, r1, i0) _ldxi_s(_jit, r0, r1, i0) -static void _ldxi_s(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define ldxr_us(r0, r1, r2) _ldxr_us(_jit, r0, r1, r2) -static void _ldxr_us(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ldxi_us(r0, r1, i0) _ldxi_us(_jit, r0, r1, i0) -static void _ldxi_us(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# if __X32 || !__X64_32 -# define ldxr_i(r0, r1, r2) _ldxr_i(_jit, r0, r1, r2) -static void _ldxr_i(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ldxi_i(r0, r1, i0) _ldxi_i(_jit, r0, r1, i0) -static void _ldxi_i(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# endif -# if __X64 -# if __X64_32 -# define ldxr_i(r0, r1, r2) _ldxr_ui(_jit, r0, r1, r2) -# define ldxi_i(r0, r1, i0) _ldxi_ui(_jit, r0, r1, i0) -# else -# define ldxr_ui(r0, r1, r2) _ldxr_ui(_jit, r0, r1, r2) -# define ldxi_ui(r0, r1, i0) _ldxi_ui(_jit, r0, r1, i0) -# endif -static void _ldxr_ui(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -static void _ldxi_ui(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# if !__X64_32 -# define ldxr_l(r0, r1, r2) _ldxr_l(_jit, r0, r1, r2) -static void _ldxr_l(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define ldxi_l(r0, r1, i0) _ldxi_l(_jit, r0, r1, i0) -static void _ldxi_l(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# endif -# endif -# define str_c(r0, r1) _str_c(_jit, r0, r1) -static void _str_c(jit_state_t*, jit_int32_t, jit_int32_t); -# define sti_c(i0, r0) _sti_c(_jit, i0, r0) -static void _sti_c(jit_state_t*, jit_word_t, jit_int32_t); -# define str_s(r0, r1) _str_s(_jit, r0, r1) -static void _str_s(jit_state_t*, jit_int32_t, jit_int32_t); -# define sti_s(i0, r0) _sti_s(_jit, i0, r0) -static void _sti_s(jit_state_t*, jit_word_t, jit_int32_t); -# define str_i(r0, r1) _str_i(_jit, r0, r1) -static void _str_i(jit_state_t*, jit_int32_t, jit_int32_t); -# define sti_i(i0, r0) _sti_i(_jit, i0, r0) -static void _sti_i(jit_state_t*, jit_word_t, jit_int32_t); -# if __X64 && !__X64_32 -# define str_l(r0, r1) _str_l(_jit, r0, r1) -static void _str_l(jit_state_t*, jit_int32_t, jit_int32_t); -# define sti_l(i0, r0) _sti_l(_jit, i0, r0) -static void _sti_l(jit_state_t*, jit_word_t, jit_int32_t); -# endif -# define stxr_c(r0, r1, r2) _stxr_c(_jit, r0, r1, r2) -static void _stxr_c(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define stxi_c(i0, r0, r1) _stxi_c(_jit, i0, r0, r1) -static void _stxi_c(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define stxr_s(r0, r1, r2) _stxr_s(_jit, r0, r1, r2) -static void _stxr_s(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define stxi_s(i0, r0, r1) _stxi_s(_jit, i0, r0, r1) -static void _stxi_s(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define stxr_i(r0, r1, r2) _stxr_i(_jit, r0, r1, r2) -static void _stxr_i(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define stxi_i(i0, r0, r1) _stxi_i(_jit, i0, r0, r1) -static void _stxi_i(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# if __X64 && !__X64_32 -# define stxr_l(r0, r1, r2) _stxr_l(_jit, r0, r1, r2) -static void _stxr_l(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define stxi_l(i0, r0, r1) _stxi_l(_jit, i0, r0, r1) -static void _stxi_l(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# endif -# define jcc(code, i0) _jcc(_jit, code, i0) -# define jo(i0) jcc(X86_CC_O, i0) -# define jno(i0) jcc(X86_CC_NO, i0) -# define jnae(i0) jcc(X86_CC_NAE, i0) -# define jb(i0) jcc(X86_CC_B, i0) -# define jc(i0) jcc(X86_CC_C, i0) -# define jae(i0) jcc(X86_CC_AE, i0) -# define jnb(i0) jcc(X86_CC_NB, i0) -# define jnc(i0) jcc(X86_CC_NC, i0) -# define je(i0) jcc(X86_CC_E, i0) -# define jz(i0) jcc(X86_CC_Z, i0) -# define jne(i0) jcc(X86_CC_NE, i0) -# define jnz(i0) jcc(X86_CC_NZ, i0) -# define jbe(i0) jcc(X86_CC_BE, i0) -# define jna(i0) jcc(X86_CC_NA, i0) -# define ja(i0) jcc(X86_CC_A, i0) -# define jnbe(i0) jcc(X86_CC_NBE, i0) -# define js(i0) jcc(X86_CC_S, i0) -# define jns(i0) jcc(X86_CC_NS, i0) -# define jp(i0) jcc(X86_CC_P, i0) -# define jpe(i0) jcc(X86_CC_PE, i0) -# define jnp(i0) jcc(X86_CC_NP, i0) -# define jpo(i0) jcc(X86_CC_PO, i0) -# define jl(i0) jcc(X86_CC_L, i0) -# define jnge(i0) jcc(X86_CC_NGE, i0) -# define jge(i0) jcc(X86_CC_GE, i0) -# define jnl(i0) jcc(X86_CC_NL, i0) -# define jle(i0) jcc(X86_CC_LE, i0) -# define jng(i0) jcc(X86_CC_NG, i0) -# define jg(i0) jcc(X86_CC_G, i0) -# define jnle(i0) jcc(X86_CC_NLE, i0) -static void _jcc(jit_state_t*, jit_int32_t, jit_word_t); -# define jccs(code, i0) _jccs(_jit, code, i0) -# define jos(i0) jccs(X86_CC_O, i0) -# define jnos(i0) jccs(X86_CC_NO, i0) -# define jnaes(i0) jccs(X86_CC_NAE, i0) -# define jbs(i0) jccs(X86_CC_B, i0) -# define jcs(i0) jccs(X86_CC_C, i0) -# define jaes(i0) jccs(X86_CC_AE, i0) -# define jnbs(i0) jccs(X86_CC_NB, i0) -# define jncs(i0) jccs(X86_CC_NC, i0) -# define jes(i0) jccs(X86_CC_E, i0) -# define jzs(i0) jccs(X86_CC_Z, i0) -# define jnes(i0) jccs(X86_CC_NE, i0) -# define jnzs(i0) jccs(X86_CC_NZ, i0) -# define jbes(i0) jccs(X86_CC_BE, i0) -# define jnas(i0) jccs(X86_CC_NA, i0) -# define jas(i0) jccs(X86_CC_A, i0) -# define jnbes(i0) jccs(X86_CC_NBE, i0) -# define jss(i0) jccs(X86_CC_S, i0) -# define jnss(i0) jccs(X86_CC_NS, i0) -# define jps(i0) jccs(X86_CC_P, i0) -# define jpes(i0) jccs(X86_CC_PE, i0) -# define jnps(i0) jccs(X86_CC_NP, i0) -# define jpos(i0) jccs(X86_CC_PO, i0) -# define jls(i0) jccs(X86_CC_L, i0) -# define jnges(i0) jccs(X86_CC_NGE, i0) -# define jges(i0) jccs(X86_CC_GE, i0) -# define jnls(i0) jccs(X86_CC_NL, i0) -# define jles(i0) jccs(X86_CC_LE, i0) -# define jngs(i0) jccs(X86_CC_NG, i0) -# define jgs(i0) jccs(X86_CC_G, i0) -# define jnles(i0) jccs(X86_CC_NLE, i0) -static void _jccs(jit_state_t*, jit_int32_t, jit_word_t); -# define jcr(code, i0, r0, r1) _jcr(_jit, code, i0, r0, r1) -static void _jcr(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_int32_t); -# define jci(code, i0, r0, i1) _jci(_jit, code, i0, r0, i1) -static void _jci(jit_state_t*,jit_int32_t,jit_word_t,jit_int32_t,jit_word_t); -# define jci0(code, i0, r0) _jci0(_jit, code, i0, r0) -static void _jci0(jit_state_t*, jit_int32_t, jit_word_t, jit_int32_t); -# define bltr(i0, r0, r1) _bltr(_jit, i0, r0, r1) -static jit_word_t _bltr(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define blti(i0, r0, i1) _blti(_jit, i0, r0, i1) -static jit_word_t _blti(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bltr_u(i0, r0, r1) _bltr_u(_jit, i0, r0, r1) -static jit_word_t _bltr_u(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define blti_u(i0, r0, i1) _blti_u(_jit, i0, r0, i1) -static jit_word_t _blti_u(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bler(i0, r0, r1) _bler(_jit, i0, r0, r1) -static jit_word_t _bler(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define blei(i0, r0, i1) _blei(_jit, i0, r0, i1) -static jit_word_t _blei(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bler_u(i0, r0, r1) _bler_u(_jit, i0, r0, r1) -static jit_word_t _bler_u(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define blei_u(i0, r0, i1) _blei_u(_jit, i0, r0, i1) -static jit_word_t _blei_u(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define beqr(i0, r0, r1) _beqr(_jit, i0, r0, r1) -static jit_word_t _beqr(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define beqi(i0, r0, i1) _beqi(_jit, i0, r0, i1) -static jit_word_t _beqi(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bger(i0, r0, r1) _bger(_jit, i0, r0, r1) -static jit_word_t _bger(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define bgei(i0, r0, i1) _bgei(_jit, i0, r0, i1) -static jit_word_t _bgei(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bger_u(i0, r0, r1) _bger_u(_jit, i0, r0, r1) -static jit_word_t _bger_u(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define bgei_u(i0, r0, i1) _bgei_u(_jit, i0, r0, i1) -static jit_word_t _bgei_u(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bgtr(i0, r0, r1) _bgtr(_jit, i0, r0, r1) -static jit_word_t _bgtr(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define bgti(i0, r0, i1) _bgti(_jit, i0, r0, i1) -static jit_word_t _bgti(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bgtr_u(i0, r0, r1) _bgtr_u(_jit, i0, r0, r1) -static jit_word_t _bgtr_u(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define bgti_u(i0, r0, i1) _bgti_u(_jit, i0, r0, i1) -static jit_word_t _bgti_u(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bner(i0, r0, r1) _bner(_jit, i0, r0, r1) -static jit_word_t _bner(jit_state_t*, jit_word_t, jit_int32_t, jit_int32_t); -# define bnei(i0, r0, i1) _bnei(_jit, i0, r0, i1) -static jit_word_t _bnei(jit_state_t*, jit_word_t, jit_int32_t, jit_word_t); -# define bmsr(i0, r0, r1) _bmsr(_jit, i0, r0, r1) -static jit_word_t _bmsr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bmsi(i0, r0, i1) _bmsi(_jit, i0, r0, i1) -static jit_word_t _bmsi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bmcr(i0, r0, r1) _bmcr(_jit, i0, r0, r1) -static jit_word_t _bmcr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bmci(i0, r0, i1) _bmci(_jit, i0, r0, i1) -static jit_word_t _bmci(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define boaddr(i0, r0, r1) _boaddr(_jit, i0, r0, r1) -static jit_word_t _boaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define boaddi(i0, r0, i1) _boaddi(_jit, i0, r0, i1) -static jit_word_t _boaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define boaddr_u(i0, r0, r1) _boaddr_u(_jit, i0, r0, r1) -static jit_word_t _boaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define boaddi_u(i0, r0, i1) _boaddi_u(_jit, i0, r0, i1) -static jit_word_t _boaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bxaddr(i0, r0, r1) _bxaddr(_jit, i0, r0, r1) -static jit_word_t _bxaddr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bxaddi(i0, r0, i1) _bxaddi(_jit, i0, r0, i1) -static jit_word_t _bxaddi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bxaddr_u(i0, r0, r1) _bxaddr_u(_jit, i0, r0, r1) -static jit_word_t _bxaddr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bxaddi_u(i0, r0, i1) _bxaddi_u(_jit, i0, r0, i1) -static jit_word_t _bxaddi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bosubr(i0, r0, r1) _bosubr(_jit, i0, r0, r1) -static jit_word_t _bosubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bosubi(i0, r0, i1) _bosubi(_jit, i0, r0, i1) -static jit_word_t _bosubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bosubr_u(i0, r0, r1) _bosubr_u(_jit, i0, r0, r1) -static jit_word_t _bosubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bosubi_u(i0, r0, i1) _bosubi_u(_jit, i0, r0, i1) -static jit_word_t _bosubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bxsubr(i0, r0, r1) _bxsubr(_jit, i0, r0, r1) -static jit_word_t _bxsubr(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bxsubi(i0, r0, i1) _bxsubi(_jit, i0, r0, i1) -static jit_word_t _bxsubi(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define bxsubr_u(i0, r0, r1) _bxsubr_u(_jit, i0, r0, r1) -static jit_word_t _bxsubr_u(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define bxsubi_u(i0, r0, i1) _bxsubi_u(_jit, i0, r0, i1) -static jit_word_t _bxsubi_u(jit_state_t*,jit_word_t,jit_int32_t,jit_word_t); -# define callr(r0) _callr(_jit, r0) -static void _callr(jit_state_t*, jit_int32_t); -# define calli(i0) _calli(_jit, i0) -static jit_word_t _calli(jit_state_t*, jit_word_t); -# define jmpr(r0) _jmpr(_jit, r0) -static void _jmpr(jit_state_t*, jit_int32_t); -# define jmpi(i0) _jmpi(_jit, i0) -static jit_word_t _jmpi(jit_state_t*, jit_word_t); -# define jmpsi(i0) _jmpsi(_jit, i0) -static void _jmpsi(jit_state_t*, jit_uint8_t); -# define prolog(node) _prolog(_jit, node) -static void _prolog(jit_state_t*, jit_node_t*); -# define epilog(node) _epilog(_jit, node) -static void _epilog(jit_state_t*, jit_node_t*); -# define vastart(r0) _vastart(_jit, r0) -static void _vastart(jit_state_t*, jit_int32_t); -# define vaarg(r0, r1) _vaarg(_jit, r0, r1) -static void _vaarg(jit_state_t*, jit_int32_t, jit_int32_t); -# define vaarg_d(r0, r1, i0) _vaarg_d(_jit, r0, r1, i0) -static void _vaarg_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_bool_t); -# define patch_at(node, instr, label) _patch_at(_jit, node, instr, label) -static void _patch_at(jit_state_t*, jit_node_t*, jit_word_t, jit_word_t); -# if !defined(HAVE_FFSL) -# if __X32 -# define ffsl(i) ffs(i) -# else -static int ffsl(long); -# endif -# endif -#endif - -#if CODE -static void -_rex(jit_state_t *_jit, jit_int32_t l, jit_int32_t w, - jit_int32_t r, jit_int32_t x, jit_int32_t b) -{ -#if __X64 - jit_int32_t v = 0x40 | (w << 3); - - if (r != _NOREG) - v |= (r & 8) >> 1; - if (x != _NOREG) - v |= (x & 8) >> 2; - if (b != _NOREG) - v |= (b & 8) >> 3; - if (l || v != 0x40) - ic(v); -#endif -} - -static void -_rx(jit_state_t *_jit, jit_int32_t rd, jit_int32_t md, - jit_int32_t rb, jit_int32_t ri, jit_int32_t ms) -{ - if (ri == _NOREG) { - if (rb == _NOREG) { -#if __X32 - mrm(0x00, r7(rd), 0x05); -#else - mrm(0x00, r7(rd), 0x04); - sib(_SCL1, 0x04, 0x05); -#endif - ii(md); - } - else if (r7(rb) == _RSP_REGNO) { - if (md == 0) { - mrm(0x00, r7(rd), 0x04); - sib(ms, 0x04, 0x04); - } - else if ((jit_int8_t)md == md) { - mrm(0x01, r7(rd), 0x04); - sib(ms, 0x04, 0x04); - ic(md); - } - else { - mrm(0x02, r7(rd), 0x04); - sib(ms, 0x04, 0x04); - ii(md); - } - } - else { - if (md == 0 && r7(rb) != _RBP_REGNO) - mrm(0x00, r7(rd), r7(rb)); - else if ((jit_int8_t)md == md) { - mrm(0x01, r7(rd), r7(rb)); - ic(md); - } - else { - mrm(0x02, r7(rd), r7(rb)); - ii(md); - } - } - } - else if (rb == _NOREG) { - mrm(0x00, r7(rd), 0x04); - sib(ms, r7(ri), 0x05); - ii(md); - } - else if (r8(ri) != _RSP_REGNO) { - if (md == 0 && r7(rb) != _RBP_REGNO) { - mrm(0x00, r7(rd), 0x04); - sib(ms, r7(ri), r7(rb)); - } - else if ((jit_int8_t)md == md) { - mrm(0x01, r7(rd), 0x04); - sib(ms, r7(ri), r7(rb)); - ic(md); - } - else { - mrm(0x02, r7(rd), 0x04); - sib(ms, r7(ri), r7(rb)); - ic(md); - } - } - else { - fprintf(stderr, "illegal index register"); - abort(); - } -} - -static void -_nop(jit_state_t *_jit, jit_int32_t count) -{ - switch (count) { - case 0: - break; - case 1: /* NOP */ - ic(0x90); break; - case 2: /* 66 NOP */ - ic(0x66); ic(0x90); - break; - case 3: /* NOP DWORD ptr [EAX] */ - ic(0x0f); ic(0x1f); ic(0x00); - break; - case 4: /* NOP DWORD ptr [EAX + 00H] */ - ic(0x0f); ic(0x1f); ic(0x40); ic(0x00); - break; - case 5: /* NOP DWORD ptr [EAX + EAX*1 + 00H] */ - ic(0x0f); ic(0x1f); ic(0x44); ic(0x00); - ic(0x00); - break; - case 6: /* 66 NOP DWORD ptr [EAX + EAX*1 + 00H] */ - ic(0x66); ic(0x0f); ic(0x1f); ic(0x44); - ic(0x00); ic(0x00); - break; - case 7: /* NOP DWORD ptr [EAX + 00000000H] */ - ic(0x0f); ic(0x1f); ic(0x80); ii(0x0000); - break; - case 8: /* NOP DWORD ptr [EAX + EAX*1 + 00000000H] */ - ic(0x0f); ic(0x1f); ic(0x84); ic(0x00); - ii(0x0000); - break; - case 9: /* 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] */ - ic(0x66); ic(0x0f); ic(0x1f); ic(0x84); - ic(0x00); ii(0x0000); - break; - default: - abort(); - } -} - -static void -_lea(jit_state_t *_jit, jit_int32_t md, jit_int32_t rb, - jit_int32_t ri, jit_int32_t ms, jit_int32_t rd) -{ - rex(0, WIDE, rd, ri, rb); - ic(0x8d); - rx(rd, md, rb, ri, ms); -} - -static void -_pushr(jit_state_t *_jit, jit_int32_t r0) -{ - rex(0, WIDE, 0, 0, r0); - ic(0x50 | r7(r0)); -} - -static void -_popr(jit_state_t *_jit, jit_int32_t r0) -{ - rex(0, WIDE, 0, 0, r0); - ic(0x58 | r7(r0)); -} - -static void -_xchgr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r1, _NOREG, r0); - ic(0x87); - mrm(0x03, r7(r1), r7(r0)); -} - -static void -_testr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r1, _NOREG, r0); - ic(0x85); - mrm(0x03, r7(r1), r7(r0)); -} - -static void -_testi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - rex(0, WIDE, _NOREG, _NOREG, r0); - if (r0 == _RAX_REGNO) - ic(0xa9); - else { - ic(0xf7); - mrm(0x03, 0x00, r7(r0)); - } - ii(i0); -} - -static void -_cc(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0) -{ - rex(0, 0, _NOREG, _NOREG, r0); - ic(0x0f); - ic(0x90 | code); - mrm(0x03, 0x00, r7(r0)); -} - -static void -_alur(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r1, _NOREG, r0); - ic(code | 0x01); - mrm(0x03, r7(r1), r7(r0)); -} - -static void -_alui(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, _NOREG, _NOREG, r0); - if ((jit_int8_t)i0 == i0) { - ic(0x83); - ic(0xc0 | code | r7(r0)); - ic(i0); - } - else { - if (r0 == _RAX_REGNO) - ic(code | 0x05); - else { - ic(0x81); - ic(0xc0 | code | r7(r0)); - } - ii(i0); - } - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - alur(code, r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_save(jit_state_t *_jit, jit_int32_t r0) -{ - if (!_jitc->function->regoff[r0]) { - _jitc->function->regoff[r0] = jit_allocai(sizeof(jit_word_t)); - _jitc->again = 1; - } - assert(!jit_regset_tstbit(&_jitc->regsav, r0)); - jit_regset_setbit(&_jitc->regsav, r0); - stxi(_jitc->function->regoff[r0], _RBP_REGNO, r0); -} - -static void -_load(jit_state_t *_jit, jit_int32_t r0) -{ - assert(_jitc->function->regoff[r0]); - assert(jit_regset_tstbit(&_jitc->regsav, r0)); - jit_regset_clrbit(&_jitc->regsav, r0); - ldxi(r0, _RBP_REGNO, _jitc->function->regoff[r0]); -} - -static void -_addr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r1) - iaddr(r0, r2); - else if (r0 == r2) - iaddr(r0, r1); - else - lea(0, r1, r2, _SCL1, r0); -} - -static void -_addi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (i0 == 0) - movr(r0, r1); -#if USE_INC_DEC - else if (i0 == 1) - incr(r0, r1); - else if (i0 == -1) - decr(r0, r1); -#endif - else if (can_sign_extend_int_p(i0)) { - if (r0 == r1) - iaddi(r0, i0); - else - lea(i0, r1, _NOREG, _SCL1, r0); - } - else if (r0 != r1) { - movi(r0, i0); - iaddr(r0, r1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - iaddr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_addcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r2) - iaddr(r0, r1); - else { - movr(r0, r1); - iaddr(r0, r2); - } -} - -static void -_addci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - movr(r0, r1); - iaddi(r0, i0); - } - else if (r0 == r1) { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - iaddr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - movi(r0, i0); - iaddr(r0, r1); - } -} - -static void -_addxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r2) - iaddxr(r0, r1); - else { - movr(r0, r1); - iaddxr(r0, r2); - } -} - -static void -_addxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - movr(r0, r1); - iaddxi(r0, i0); - } - else if (r0 == r1) { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - iaddxr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - movi(r0, i0); - iaddxr(r0, r1); - } -} - -static void -_subr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - ixorr(r0, r0); - else if (r0 == r2) { - isubr(r0, r1); - inegr(r0); - } - else { - movr(r0, r1); - isubr(r0, r2); - } -} - -static void -_subi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (i0 == 0) - movr(r0, r1); -#if USE_INC_DEC - else if (i0 == 1) - decr(r0, r1); - else if (i0 == -1) - incr(r0, r1); -#endif - else if (can_sign_extend_int_p(i0)) { - if (r0 == r1) - isubi(r0, i0); - else - lea(-i0, r1, _NOREG, _SCL1, r0); - } - else if (r0 != r1) { - movi(r0, -i0); - iaddr(r0, r1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - isubr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_subcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - if (r0 == r2 && r0 != r1) { - reg = jit_get_reg(jit_class_gpr); - movr(rn(reg), r0); - movr(r0, r1); - isubr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - movr(r0, r1); - isubr(r0, r2); - } -} - -static void -_subci(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - movr(r0, r1); - if (can_sign_extend_int_p(i0)) - isubi(r0, i0); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - isubr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_subxr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - if (r0 == r2 && r0 != r1) { - reg = jit_get_reg(jit_class_gpr); - movr(rn(reg), r0); - movr(r0, r1); - isubxr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - movr(r0, r1); - isubxr(r0, r2); - } -} - -static void -_subxi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - movr(r0, r1); - if (can_sign_extend_int_p(i0)) - isubxi(r0, i0); - else { - reg = jit_get_reg(jit_class_gpr); - imovi(rn(reg), i0); - isubxr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_rsbi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - subi(r0, r1, i0); - negr(r0, r0); -} - -static void -_imulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xaf); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_imuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, r1); - if ((jit_int8_t)i0 == i0) { - ic(0x6b); - mrm(0x03, r7(r0), r7(r1)); - ic(i0); - } - else { - ic(0x69); - mrm(0x03, r7(r0), r7(r1)); - ii(i0); - } - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - imulr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_mulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r1) - imulr(r0, r2); - else if (r0 == r2) - imulr(r0, r1); - else { - movr(r0, r1); - imulr(r0, r2); - } -} - -static void -_muli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - switch (i0) { - case 0: - ixorr(r0, r0); - break; - case 1: - movr(r0, r1); - break; - case -1: - negr(r0, r1); - break; - case 2: - lea(0, _NOREG, r1, _SCL2, r0); - break; - case 4: - lea(0, _NOREG, r1, _SCL4, r0); - break; - case 8: - lea(0, _NOREG, r1, _SCL8, r0); - break; - default: - if (i0 > 0 && !(i0 & (i0 - 1))) - lshi(r0, r1, ffsl(i0) - 1); - else if (can_sign_extend_int_p(i0)) - imuli(r0, r1, i0); - else if (r0 != r1) { - movi(r0, i0); - imulr(r0, r1); - } - else - imuli(r0, r0, i0); - break; - } -} - -#define savset(rn) \ - if (r0 != rn) { \ - sav |= 1 << rn; \ - if (r1 != rn && r2 != rn) \ - set |= 1 << rn; \ - } -#define isavset(rn) \ - if (r0 != rn) { \ - sav |= 1 << rn; \ - if (r1 != rn) \ - set |= 1 << rn; \ - } -#define qsavset(rn) \ - if (r0 != rn && r1 != rn) { \ - sav |= 1 << rn; \ - if (r2 != rn && r3 != rn) \ - set |= 1 << rn; \ - } -#define allocr(rn, rv) \ - if (set & (1 << rn)) \ - (void)jit_get_reg(rv|jit_class_gpr|jit_class_named); \ - if (sav & (1 << rn)) { \ - if ( jit_regset_tstbit(&_jitc->regsav, rv) || \ - !jit_regset_tstbit(&_jitc->reglive, rv)) \ - sav &= ~(1 << rn); \ - else \ - save(rv); \ - } -#define clear(rn, rv) \ - if (set & (1 << rn)) \ - jit_unget_reg(rv); \ - if (sav & (1 << rn)) \ - load(rv); -static void -_iqmulr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) -{ - jit_int32_t mul; - jit_int32_t sav; - jit_int32_t set; - - sav = set = 0; - qsavset(_RDX_REGNO); - qsavset(_RAX_REGNO); - allocr(_RDX_REGNO, _RDX); - allocr(_RAX_REGNO, _RAX); - - if (r3 == _RAX_REGNO) - mul = r2; - else { - mul = r3; - movr(_RAX_REGNO, r2); - } - if (sign) - umulr(mul); - else - umulr_u(mul); - - if (r0 == _RDX_REGNO && r1 == _RAX_REGNO) - xchgr(_RAX_REGNO, _RDX_REGNO); - else { - if (r0 != _RDX_REGNO) - movr(r0, _RAX_REGNO); - movr(r1, _RDX_REGNO); - if (r0 == _RDX_REGNO) - movr(r0, _RAX_REGNO); - } - - clear(_RDX_REGNO, _RDX); - clear(_RAX_REGNO, _RAX); -} - -static void -_iqmuli(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) -{ - jit_int32_t reg; - - if (i0 == 0) { - ixorr(r0, r0); - ixorr(r1, r1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - if (sign) - qmulr(r0, r1, r2, rn(reg)); - else - qmulr_u(r0, r1, r2, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_sign_extend_rdx_rax(jit_state_t *_jit) -{ - rex(0, WIDE, 0, 0, 0); - ic(0x99); -} - -static void -_divremr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, - jit_bool_t sign, jit_bool_t divide) -{ - jit_int32_t div; - jit_int32_t reg; - jit_int32_t set; - jit_int32_t sav; - jit_int32_t use; - - sav = set = use = 0; - savset(_RDX_REGNO); - savset(_RAX_REGNO); - allocr(_RDX_REGNO, _RDX); - allocr(_RAX_REGNO, _RAX); - - if (r2 == _RAX_REGNO) { - if (r0 == _RAX_REGNO || r0 == _RDX_REGNO) { - if ((reg = jit_get_reg(jit_class_gpr|jit_class_chk)) == JIT_NOREG) - reg = jit_get_reg((r1 == _RCX_REGNO ? _RBX : _RCX) | - jit_class_gpr|jit_class_named); - use = 1; - div = rn(reg); - movr(div, _RAX_REGNO); - if (r1 != _RAX_REGNO) - movr(_RAX_REGNO, r1); - } - else { - if (r0 == r1) - xchgr(r0, _RAX_REGNO); - else { - if (r0 != _RAX_REGNO) - movr(r0, _RAX_REGNO); - if (r1 != _RAX_REGNO) - movr(_RAX_REGNO, r1); - } - div = r0; - } - } - else if (r2 == _RDX_REGNO) { - if (r0 == _RAX_REGNO || r0 == _RDX_REGNO) { - if ((reg = jit_get_reg(jit_class_gpr|jit_class_chk)) == JIT_NOREG) - reg = jit_get_reg((r1 == _RCX_REGNO ? _RBX : _RCX) | - jit_class_gpr|jit_class_named); - use = 1; - div = rn(reg); - movr(div, _RDX_REGNO); - if (r1 != _RAX_REGNO) - movr(_RAX_REGNO, r1); - } - else { - if (r1 != _RAX_REGNO) - movr(_RAX_REGNO, r1); - movr(r0, _RDX_REGNO); - div = r0; - } - } - else { - if (r1 != _RAX_REGNO) - movr(_RAX_REGNO, r1); - div = r2; - } - - if (sign) { - sign_extend_rdx_rax(); - idivr(div); - } - else { - ixorr(_RDX_REGNO, _RDX_REGNO); - idivr_u(div); - } - - if (use) - jit_unget_reg(reg); - - if (divide) - movr(r0, _RAX_REGNO); - else - movr(r0, _RDX_REGNO); - - clear(_RDX_REGNO, _RDX); - clear(_RAX_REGNO, _RAX); -} - -static void -_divremi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0, - jit_bool_t sign, jit_bool_t divide) -{ - jit_int32_t reg; - jit_int32_t div; - jit_int32_t sav; - jit_int32_t set; - jit_int32_t use; - - if (divide) { - switch (i0) { - case 1: - movr(r0, r1); - return; - case -1: - if (sign) { - negr(r0, r1); - return; - } - break; - default: - if (i0 > 0 && !(i0 & (i0 - 1))) { - movr(r0, r1); - if (sign) - rshi(r0, r0, ffsl(i0) - 1); - else - rshi_u(r0, r0, ffsl(i0) - 1); - return; - } - break; - } - } - else if (i0 == 1 || (sign && i0 == -1)) { - ixorr(r0, r0); - return; - } - else if (!sign && i0 > 0 && !(i0 & (i0 - 1))) { - if (can_sign_extend_int_p(i0)) { - movr(r0, r1); - iandi(r0, i0 - 1); - } - else if (r0 != r1) { - movi(r0, i0 - 1); - iandr(r0, r1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0 - 1); - iandr(r0, rn(reg)); - jit_unget_reg(reg); - } - return; - } - - sav = set = use = 0; - isavset(_RDX_REGNO); - isavset(_RAX_REGNO); - allocr(_RDX_REGNO, _RDX); - allocr(_RAX_REGNO, _RAX); - - if (r0 == _RAX_REGNO || r0 == _RDX_REGNO || r0 == r1) { - if ((reg = jit_get_reg(jit_class_gpr|jit_class_chk)) == JIT_NOREG) - reg = jit_get_reg((r1 == _RCX_REGNO ? _RBX : _RCX) | - jit_class_gpr|jit_class_named); - use = 1; - div = rn(reg); - } - else - div = r0; - - movi(div, i0); - movr(_RAX_REGNO, r1); - - if (sign) { - sign_extend_rdx_rax(); - idivr(div); - } - else { - ixorr(_RDX_REGNO, _RDX_REGNO); - idivr_u(div); - } - - if (use) - jit_unget_reg(reg); - - if (divide) - movr(r0, _RAX_REGNO); - else - movr(r0, _RDX_REGNO); - - clear(_RDX_REGNO, _RDX); - clear(_RAX_REGNO, _RAX); -} - -static void -_iqdivr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_int32_t r3, jit_bool_t sign) -{ - jit_int32_t div; - jit_int32_t reg; - jit_int32_t sav; - jit_int32_t set; - jit_int32_t use; - - sav = set = use = 0; - qsavset(_RDX_REGNO); - qsavset(_RAX_REGNO); - allocr(_RDX_REGNO, _RDX); - allocr(_RAX_REGNO, _RAX); - if (r3 == _RAX_REGNO) { - if (r0 == _RAX_REGNO || r0 == _RDX_REGNO) { - if ((reg = jit_get_reg(jit_class_gpr|jit_class_chk)) == JIT_NOREG) - reg = jit_get_reg((r1 == _RCX_REGNO ? _RBX : _RCX) | - jit_class_gpr|jit_class_named); - use = 1; - div = rn(reg); - movr(div, _RAX_REGNO); - if (r2 != _RAX_REGNO) - movr(_RAX_REGNO, r2); - } - else { - if (r0 == r2) - xchgr(r0, _RAX_REGNO); - else { - if (r0 != _RAX_REGNO) - movr(r0, _RAX_REGNO); - if (r2 != _RAX_REGNO) - movr(_RAX_REGNO, r2); - } - div = r0; - } - } - else if (r3 == _RDX_REGNO) { - if (r0 == _RAX_REGNO || r0 == _RDX_REGNO) { - if ((reg = jit_get_reg(jit_class_gpr|jit_class_chk)) == JIT_NOREG) - reg = jit_get_reg((r1 == _RCX_REGNO ? _RBX : _RCX) | - jit_class_gpr|jit_class_named); - use = 1; - div = rn(reg); - movr(div, _RDX_REGNO); - if (r2 != _RAX_REGNO) - movr(_RAX_REGNO, r2); - } - else { - if (r2 != _RAX_REGNO) - movr(_RAX_REGNO, r2); - movr(r0, _RDX_REGNO); - div = r0; - } - } - else { - if (r2 != _RAX_REGNO) - movr(_RAX_REGNO, r2); - div = r3; - } - if (sign) { - sign_extend_rdx_rax(); - idivr(div); - } - else { - ixorr(_RDX_REGNO, _RDX_REGNO); - idivr_u(div); - } - if (use) - jit_unget_reg(reg); - - if (r0 == _RDX_REGNO && r1 == _RAX_REGNO) - xchgr(_RAX_REGNO, _RDX_REGNO); - else { - if (r0 != _RDX_REGNO) - movr(r0, _RAX_REGNO); - movr(r1, _RDX_REGNO); - if (r0 == _RDX_REGNO) - movr(r0, _RAX_REGNO); - } - - clear(_RDX_REGNO, _RDX); - clear(_RAX_REGNO, _RAX); -} - -static void -_iqdivi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, - jit_int32_t r2, jit_word_t i0, jit_bool_t sign) -{ - jit_int32_t reg; - - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - if (sign) - qdivr(r0, r1, r2, rn(reg)); - else - qdivr_u(r0, r1, r2, rn(reg)); - jit_unget_reg(reg); -} -#undef clear -#undef allocr -#undef savset - -static void -_andr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movr(r0, r1); - else if (r0 == r1) - iandr(r0, r2); - else if (r0 == r2) - iandr(r0, r1); - else { - movr(r0, r1); - iandr(r0, r2); - } -} - -static void -_andi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - - if (i0 == 0) - ixorr(r0, r0); - else if (i0 == -1) - movr(r0, r1); - else if (r0 == r1) { - if (can_sign_extend_int_p(i0)) - iandi(r0, i0); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - iandr(r0, rn(reg)); - jit_unget_reg(reg); - } - } - else { - movi(r0, i0); - iandr(r0, r1); - } -} - -static void -_orr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movr(r0, r1); - else if (r0 == r1) - iorr(r0, r2); - else if (r0 == r2) - iorr(r0, r1); - else { - movr(r0, r1); - iorr(r0, r2); - } -} - -static void -_ori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (i0 == 0) - movr(r0, r1); - else if (i0 == -1) - movi(r0, -1); - else if (can_sign_extend_int_p(i0)) { - movr(r0, r1); - iori(r0, i0); - } - else if (r0 != r1) { - movi(r0, i0); - iorr(r0, r1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - iorr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_xorr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - ixorr(r0, r0); - else if (r0 == r1) - ixorr(r0, r2); - else if (r0 == r2) - ixorr(r0, r1); - else { - movr(r0, r1); - ixorr(r0, r2); - } -} - -static void -_xori(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (i0 == 0) - movr(r0, r1); - else if (i0 == -1) - comr(r0, r1); - else if (can_sign_extend_int_p(i0)) { - movr(r0, r1); - ixori(r0, i0); - } - else if (r0 != r1) { - movi(r0, i0); - ixorr(r0, r1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ixorr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_irotshr(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0) -{ - rex(0, WIDE, _RCX_REGNO, _NOREG, r0); - ic(0xd3); - mrm(0x03, code, r7(r0)); -} - -static void -_rotshr(jit_state_t *_jit, jit_int32_t code, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - jit_int32_t use; - - if (r0 == _RCX_REGNO) { - reg = jit_get_reg(jit_class_gpr); - movr(rn(reg), r1); - if (r2 != _RCX_REGNO) - movr(_RCX_REGNO, r2); - irotshr(code, rn(reg)); - movr(_RCX_REGNO, rn(reg)); - jit_unget_reg(reg); - } - else if (r2 != _RCX_REGNO) { - use = !jit_reg_free_p(_RCX); - if (use) { - reg = jit_get_reg(jit_class_gpr); - movr(rn(reg), _RCX_REGNO); - } - else - reg = 0; - if (r1 == _RCX_REGNO) { - if (r0 == r2) - xchgr(r0, _RCX_REGNO); - else { - movr(r0, r1); - movr(_RCX_REGNO, r2); - } - } - else { - movr(_RCX_REGNO, r2); - movr(r0, r1); - } - irotshr(code, r0); - if (use) { - movr(_RCX_REGNO, rn(reg)); - jit_unget_reg(reg); - } - } - else { - movr(r0, r1); - irotshr(code, r0); - } -} - -static void -_irotshi(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0, jit_word_t i0) -{ - rex(0, WIDE, _NOREG, _NOREG, r0); - if (i0 == 1) { - ic(0xd1); - mrm(0x03, code, r7(r0)); - } - else { - ic(0xc1); - mrm(0x03, code, r7(r0)); - ic(i0); - } -} - -static void -_rotshi(jit_state_t *_jit, jit_int32_t code, - jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - movr(r0, r1); - if (i0) - irotshi(code, r0, i0); -} - -static void -_lshi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0 == 0) - movr(r0, r1); - else if (i0 <= 3) - lea(0, _NOREG, r1, i0 == 1 ? _SCL2 : i0 == 2 ? _SCL4 : _SCL8, r0); - else - rotshi(X86_SHL, r0, r1, i0); -} - -static void -_unr(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0) -{ - rex(0, WIDE, _NOREG, _NOREG, r0); - ic(0xf7); - mrm(0x03, code, r7(r0)); -} - -static void -_negr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - inegr(r0); - else { - ixorr(r0, r0); - isubr(r0, r1); - } -} - -static void -_comr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - movr(r0, r1); - icomr(r0); -} - -#if USE_INC_DEC -static void -_incr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - movr(r0, r1); -# if __X64 - rex(0, WIDE, _NOREG, _NOREG, r0); - ic(0xff); - ic(0xc0 | r7(r0)); -# else - ic(0x40 | r7(r0)); -# endif -} - -static void -_decr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - movr(r0, r1); -# if __X64 - rex(0, WIDE, _NOREG, _NOREG, r0); - ic(0xff); - ic(0xc8 | r7(r0)); -# else - ic(0x48 | r7(r0)); -# endif -} -#endif - -static void -_cr(jit_state_t *_jit, - jit_int32_t code, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - jit_bool_t same; - if (reg8_p(r0)) { - same = r0 == r1 || r0 == r2; - if (!same) - ixorr(r0, r0); - icmpr(r1, r2); - if (same) - imovi(r0, 0); - cc(code, r0); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - ixorr(rn(reg), rn(reg)); - icmpr(r1, r2); - cc(code, rn(reg)); - movr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ci(jit_state_t *_jit, - jit_int32_t code, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - jit_bool_t same; - if (reg8_p(r0)) { - same = r0 == r1; - if (!same) - ixorr(r0, r0); - icmpi(r1, i0); - if (same) - imovi(r0, 0); - cc(code, r0); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - ixorr(rn(reg), rn(reg)); - icmpi(r1, i0); - cc(code, rn(reg)); - movr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ci0(jit_state_t *_jit, jit_int32_t code, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - jit_bool_t same; - if (reg8_p(r0)) { - same = r0 == r1; - if (!same) - ixorr(r0, r0); - testr(r1, r1); - if (same) - imovi(r0, 0); - cc(code, r0); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - ixorr(rn(reg), rn(reg)); - testr(r1, r1); - cc(code, rn(reg)); - movr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ltr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 0); - else - cr(X86_CC_L, r0, r1, r2); -} - -static void -_lti(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_L, r0, r1, i0); - else - ci0(X86_CC_S, r0, r1); -} - -static void -_ltr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 0); - else - cr(X86_CC_B, r0, r1, r2); -} - -static void -_ler(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - cr(X86_CC_LE, r0, r1, r2); -} - -static void -_ler_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - cr(X86_CC_BE, r0, r1, r2); -} - -static void -_lei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_BE, r0, r1, i0); - else - ci0(X86_CC_E, r0, r1); -} - -static void -_eqr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - cr(X86_CC_E, r0, r1, r2); -} - -static void -_eqi(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_E, r0, r1, i0); - else - ci0(X86_CC_E, r0, r1); -} - -static void -_ger(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - cr(X86_CC_GE, r0, r1, r2); -} - -static void -_gei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_GE, r0, r1, i0); - else - ci0(X86_CC_NS, r0, r1); -} - -static void -_ger_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - cr(X86_CC_AE, r0, r1, r2); -} - -static void -_gei_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_AE, r0, r1, i0); - else - ci0(X86_CC_NB, r0, r1); -} - -static void -_gtr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 0); - else - cr(X86_CC_G, r0, r1, r2); -} - -static void -_gtr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 0); - else - cr(X86_CC_A, r0, r1, r2); -} - -static void -_gti_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_A, r0, r1, i0); - else - ci0(X86_CC_NE, r0, r1); -} - -static void -_ner(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 0); - else - cr(X86_CC_NE, r0, r1, r2); -} - -static void -_nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - if (i0) - ci(X86_CC_NE, r0, r1, i0); - else - ci0(X86_CC_NE, r0, r1); -} - -static void -_movr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 != r1) { - rex(0, 1, r1, _NOREG, r0); - ic(0x89); - ic(0xc0 | (r1 << 3) | r7(r0)); - } -} - -static void -_imovi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ -#if __X64 -# if !__X64_32 - if (fits_uint32_p(i0)) { -# endif - rex(0, 0, _NOREG, _NOREG, r0); - ic(0xb8 | r7(r0)); - ii(i0); -# if !__X64_32 - } - else { - rex(0, 1, _NOREG, _NOREG, r0); - ic(0xb8 | r7(r0)); - il(i0); - } -# endif -#else - ic(0xb8 | r7(r0)); - ii(i0); -#endif -} - -static void -_movi(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - if (i0) - imovi(r0, i0); - else - ixorr(r0, r0); -} - -static jit_word_t -_movi_p(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - rex(0, WIDE, _NOREG, _NOREG, r0); - ic(0xb8 | r7(r0)); - il(i0); - return (_jit->pc.w); -} - -static void -_movcr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xbe); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_movcr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xb6); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_movsr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xbf); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_movsr_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xb7); - mrm(0x03, r7(r0), r7(r1)); -} - -#if __X64 -static void -_movir(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 1, r0, _NOREG, r1); - ic(0x63); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_movir_u(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 0, r1, _NOREG, r0); - ic(0x89); - ic(0xc0 | (r1 << 3) | r7(r0)); -} -#endif - -static void -_htonr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - extr_us(r0, r1); - ic(0x66); - rex(0, 0, _NOREG, _NOREG, r0); - ic(0xc1); - mrm(0x03, X86_ROR, r7(r0)); - ic(8); -} - -static void -_htonr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - movr(r0, r1); - rex(0, 0, _NOREG, _NOREG, r0); - ic(0x0f); - ic(0xc8 | r7(r0)); -} - -#if __X64 && !__X64_32 -static void -_htonr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - movr(r0, r1); - rex(0, 1, _NOREG, _NOREG, r0); - ic(0x0f); - ic(0xc8 | r7(r0)); -} -#endif - -static void -_extr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (reg8_p(r1)) - movcr(r0, r1); - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - movr(rn(reg), r1); - movcr(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_extr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (reg8_p(r1)) - movcr_u(r0, r1); - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - movr(rn(reg), r1); - movcr_u(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xbe); - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, _NOREG); - ic(0x0f); - ic(0xbe); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_c(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xb6); - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, _NOREG); - ic(0x0f); - ic(0xb6); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_uc(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xbf); - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, _NOREG); - ic(0x0f); - ic(0xbf); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_s(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xb7); - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, _NOREG); - ic(0x0f); - ic(0xb7); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_us(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -#if __X32 || !__X64_32 -static void -_ldr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ -#if __X64 - rex(0, WIDE, r0, _NOREG, r1); - ic(0x63); -#else - ic(0x8b); -#endif - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { -#if __X64 - rex(0, WIDE, r0, _NOREG, _NOREG); - ic(0x63); -#else - ic(0x8b); -#endif - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_i(r0, rn(reg)); - jit_unget_reg(reg); - } -} -#endif - -#if __X64 -static void -_ldr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 0, r0, _NOREG, r1); - ic(0x63); - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_ui(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 0, r0, _NOREG, _NOREG); - ic(0x63); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_ui(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -# if !__X64_32 -static void -_ldr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 1, r0, _NOREG, r1); - ic(0x8b); - rx(r0, 0, r1, _NOREG, _SCL1); -} - -static void -_ldi_l(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 1, r0, _NOREG, _NOREG); - ic(0x8b); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldr_l(r0, rn(reg)); - jit_unget_reg(reg); - } -} -# endif -#endif - -static void -_ldxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - addr(r0, r1, r2); - ldr_c(r0, r0); -#else - rex(0, WIDE, r0, r1, r2); - ic(0x0f); - ic(0xbe); - rx(r0, 0, r2, r1, _SCL1); -#endif -} - -static void -_ldxi_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xbe); - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_c(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldxr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - addr(r0, r1, r2); - ldr_uc(r0, r0); -#else - rex(0, WIDE, r0, r1, r2); - ic(0x0f); - ic(0xb6); - rx(r0, 0, r2, r1, _SCL1); -#endif -} - -static void -_ldxi_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xb6); - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_uc(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - addr(r0, r1, r2); - ldr_s(r0, r0); -#else - rex(0, WIDE, r0, r1, r2); - ic(0x0f); - ic(0xbf); - rx(r0, 0, r2, r1, _SCL1); -#endif -} - -static void -_ldxi_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xbf); - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_s(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_ldxr_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - addr(r0, r1, r2); - ldr_us(r0, r0); -#else - rex(0, WIDE, r0, r1, r2); - ic(0x0f); - ic(0xb7); - rx(r0, 0, r2, r1, _SCL1); -#endif -} - -static void -_ldxi_us(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, WIDE, r0, _NOREG, r1); - ic(0x0f); - ic(0xb7); - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_us(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} - -#if __X64 || !__X64_32 -static void -_ldxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64 - rex(0, WIDE, r0, r1, r2); - ic(0x63); -#else - ic(0x8b); -#endif - rx(r0, 0, r2, r1, _SCL1); -} - -static void -_ldxi_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { -#if __X64 - rex(0, WIDE, r0, _NOREG, r1); - ic(0x63); -#else - ic(0x8b); -#endif - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_i(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} -#endif - -#if __X64 -static void -_ldxr_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - addr(r0, r1, r2); - /* to avoid confusion with macro renames */ - _ldr_ui(_jit, r0, r0); -#else - rex(0, 0, r0, r1, r2); - ic(0x8b); - rx(r0, 0, r2, r1, _SCL1); -#endif -} - -static void -_ldxi_ui(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 0, r0, _NOREG, r1); - ic(0x8b); - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_ui(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} - -# if !__X64_32 -static void -_ldxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - rex(0, 1, r0, r1, r2); - ic(0x8b); - rx(r0, 0, r2, r1, _SCL1); -} - -static void -_ldxi_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 1, r0, _NOREG, r1); - ic(0x8b); - rx(r0, i0, r1, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - ldxr_l(r0, r1, rn(reg)); - jit_unget_reg(reg); - } -} -# endif -#endif - -static void -_str_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (reg8_p(r1)) { - rex(0, 0, r1, _NOREG, r0); - ic(0x88); - rx(r1, 0, r0, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - movr(rn(reg), r1); - rex(0, 0, rn(reg), _NOREG, r0); - ic(0x88); - rx(rn(reg), 0, r0, _NOREG, _SCL1); - jit_unget_reg(reg); - } -} - -static void -_sti_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - if (reg8_p(r0)) { - rex(0, 0, r0, _NOREG, _NOREG); - ic(0x88); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - movr(rn(reg), r0); - rex(0, 0, rn(reg), _NOREG, _NOREG); - ic(0x88); - rx(rn(reg), i0, _NOREG, _NOREG, _SCL1); - jit_unget_reg(reg); - } - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - str_c(rn(reg), r0); - jit_unget_reg(reg); - } -} - -static void -_str_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - ic(0x66); - rex(0, 0, r1, _NOREG, r0); - ic(0x89); - rx(r1, 0, r0, _NOREG, _SCL1); -} - -static void -_sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - ic(0x66); - rex(0, 0, r0, _NOREG, _NOREG); - ic(0x89); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - str_s(rn(reg), r0); - jit_unget_reg(reg); - } -} - -static void -_str_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 0, r1, _NOREG, r0); - ic(0x89); - rx(r1, 0, r0, _NOREG, _SCL1); -} - -static void -_sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 0, r0, _NOREG, _NOREG); - ic(0x89); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - str_i(rn(reg), r0); - jit_unget_reg(reg); - } -} - -#if __X64 && !__X64_32 -static void -_str_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 1, r1, _NOREG, r0); - ic(0x89); - rx(r1, 0, r0, _NOREG, _SCL1); -} - -static void -_sti_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 1, r0, _NOREG, _NOREG); - ic(0x89); - rx(r0, i0, _NOREG, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - str_l(rn(reg), r0); - jit_unget_reg(reg); - } -} -#endif - -static void -_stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; -#if __X64_32 - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r0, r1); - str_c(rn(reg), r2); - jit_unget_reg(reg); -#else - if (reg8_p(r2)) { - rex(0, 0, r2, r1, r0); - ic(0x88); - rx(r2, 0, r0, r1, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - movr(rn(reg), r2); - rex(0, 0, rn(reg), r1, r0); - ic(0x88); - rx(rn(reg), 0, r0, r1, _SCL1); - jit_unget_reg(reg); - } -#endif -} - -static void -_stxi_c(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - if (reg8_p(r1)) { - rex(0, 0, r1, _NOREG, r0); - ic(0x88); - rx(r1, i0, r0, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr|jit_class_rg8); - movr(rn(reg), r1); - rex(0, 0, rn(reg), _NOREG, r0); - ic(0x88); - rx(rn(reg), i0, r0, _NOREG, _SCL1); - jit_unget_reg(reg); - } - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - stxr_c(rn(reg), r0, r1); - jit_unget_reg(reg); - } -} - -static void -_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - jit_int32_t reg; - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r0, r1); - str_s(rn(reg), r2); - jit_unget_reg(reg); -#else - ic(0x66); - rex(0, 0, r2, r1, r0); - ic(0x89); - rx(r2, 0, r0, r1, _SCL1); -#endif -} - -static void -_stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - ic(0x66); - rex(0, 0, r1, _NOREG, r0); - ic(0x89); - rx(r1, i0, r0, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - stxr_s(rn(reg), r0, r1); - jit_unget_reg(reg); - } -} - -static void -_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - jit_int32_t reg; - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r0, r1); - str_i(rn(reg), r2); - jit_unget_reg(reg); -#else - rex(0, 0, r2, r1, r0); - ic(0x89); - rx(r2, 0, r0, r1, _SCL1); -#endif -} - -static void -_stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 0, r1, _NOREG, r0); - ic(0x89); - rx(r1, i0, r0, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - stxr_i(rn(reg), r0, r1); - jit_unget_reg(reg); - } -} - -#if __X64 && !__X64_32 -static void -_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - rex(0, 1, r2, r1, r0); - ic(0x89); - rx(r2, 0, r0, r1, _SCL1); -} - -static void -_stxi_l(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) { - rex(0, 1, r1, _NOREG, r0); - ic(0x89); - rx(r1, i0, r0, _NOREG, _SCL1); - } - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - stxr_l(rn(reg), r0, r1); - jit_unget_reg(reg); - } -} -#endif - -static void -_jccs(jit_state_t *_jit, jit_int32_t code, jit_word_t i0) -{ - jit_word_t w; - ic(0x70 | code); - w = i0 - (_jit->pc.w + 1); - ic(w); -} - -static void -_jcc(jit_state_t *_jit, jit_int32_t code, jit_word_t i0) -{ - jit_word_t w; - ic(0x0f); - ic(0x80 | code); - w = i0 - (_jit->pc.w + 4); - ii(w); -} - -static void -_jcr(jit_state_t *_jit, - jit_int32_t code, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - alur(X86_CMP, r0, r1); - jcc(code, i0); -} - -static void -_jci(jit_state_t *_jit, - jit_int32_t code, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - alui(X86_CMP, r0, i1); - jcc(code, i0); -} - -static void -_jci0(jit_state_t *_jit, jit_int32_t code, jit_word_t i0, jit_int32_t r0) -{ - testr(r0, r0); - jcc(code, i0); -} - -static jit_word_t -_bltr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jcr(X86_CC_L, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_blti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_L, i0, r0, i1); - else jci0(X86_CC_S, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bltr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jcr(X86_CC_B, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_blti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_B, i0, r0, i1); - else jci0(X86_CC_B, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bler(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) jmpi(i0); - else jcr (X86_CC_LE, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_blei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_LE, i0, r0, i1); - else jci0(X86_CC_LE, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bler_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) jmpi(i0); - else jcr (X86_CC_BE, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_blei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_BE, i0, r0, i1); - else jci0(X86_CC_BE, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_beqr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) jmpi(i0); - else jcr (X86_CC_E, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_beqi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_E, i0, r0, i1); - else jci0(X86_CC_E, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bger(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) jmpi(i0); - else jcr (X86_CC_GE, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_bgei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_GE, i0, r0, i1); - else jci0(X86_CC_NS, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bger_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) jmpi(i0); - else jcr (X86_CC_AE, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_bgei_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_AE, i0, r0, i1); - else jmpi(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bgtr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jcr(X86_CC_G, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_bgti(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jci(X86_CC_G, i0, r0, i1); - return (_jit->pc.w); -} - -static jit_word_t -_bgtr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jcr(X86_CC_A, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_bgti_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_A, i0, r0, i1); - else jci0(X86_CC_NE, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bner(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jcr(X86_CC_NE, i0, r0, r1); - return (_jit->pc.w); -} - -static jit_word_t -_bnei(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - if (i1) jci (X86_CC_NE, i0, r0, i1); - else jci0(X86_CC_NE, i0, r0); - return (_jit->pc.w); -} - -static jit_word_t -_bmsr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - testr(r0, r1); - jnz(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bmsi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_zero_extend_int_p(i1)) - testi(r0, i1); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i1); - testr(r0, rn(reg)); - jit_unget_reg(reg); - } - jnz(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bmcr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - testr(r0, r1); - jz(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bmci(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_zero_extend_int_p(i1)) - testi(r0, i1); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i1); - testr(r0, rn(reg)); - jit_unget_reg(reg); - } - jz(i0); - return (_jit->pc.w); -} - -static jit_word_t -_boaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - iaddr(r0, r1); - jo(i0); - return (_jit->pc.w); -} - -static jit_word_t -_boaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - iaddi(r0, i1); - jo(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (boaddr(i0, r0, rn(reg))); -} - -static jit_word_t -_boaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - iaddr(r0, r1); - jc(i0); - return (_jit->pc.w); -} - -static jit_word_t -_boaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - iaddi(r0, i1); - jc(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (boaddr_u(i0, r0, rn(reg))); -} - -static jit_word_t -_bxaddr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - iaddr(r0, r1); - jno(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bxaddi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - iaddi(r0, i1); - jno(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (bxaddr(i0, r0, rn(reg))); -} - -static jit_word_t -_bxaddr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - iaddr(r0, r1); - jnc(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bxaddi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - iaddi(r0, i1); - jnc(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (bxaddr_u(i0, r0, rn(reg))); -} - -static jit_word_t -_bosubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - isubr(r0, r1); - jo(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bosubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - isubi(r0, i1); - jo(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (bosubr(i0, r0, rn(reg))); -} - -static jit_word_t -_bosubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - isubr(r0, r1); - jc(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bosubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - isubi(r0, i1); - jc(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (bosubr_u(i0, r0, rn(reg))); -} - -static jit_word_t -_bxsubr(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - isubr(r0, r1); - jno(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bxsubi(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - isubi(r0, i1); - jno(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (bxsubr(i0, r0, rn(reg))); -} - -static jit_word_t -_bxsubr_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - isubr(r0, r1); - jnc(i0); - return (_jit->pc.w); -} - -static jit_word_t -_bxsubi_u(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_word_t i1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i1)) { - isubi(r0, i1); - jnc(i0); - return (_jit->pc.w); - } - reg = jit_get_reg(jit_class_gpr|jit_class_nospill); - movi(rn(reg), i1); - jit_unget_reg(reg); - return (bxsubr_u(i0, r0, rn(reg))); -} - -static void -_callr(jit_state_t *_jit, jit_int32_t r0) -{ - rex(0, 0, _NOREG, _NOREG, r0); - ic(0xff); - mrm(0x03, 0x02, r7(r0)); -} - -static jit_word_t -_calli(jit_state_t *_jit, jit_word_t i0) -{ - jit_word_t word; -#if __X64 - jit_int32_t reg; - - reg = jit_get_reg(jit_class_gpr); - word = movi_p(rn(reg), i0); - callr(rn(reg)); - jit_unget_reg(reg); -#else - jit_word_t w; - ic(0xe8); - w = i0 - (_jit->pc.w + 4); - ii(w); - word = _jit->pc.w; -#endif - return (word); -} - -static void -_jmpr(jit_state_t *_jit, jit_int32_t r0) -{ - rex(0, WIDE, _NOREG, _NOREG, r0); - ic(0xff); - mrm(0x03, 0x04, r7(r0)); -} - -static jit_word_t -_jmpi(jit_state_t *_jit, jit_word_t i0) -{ - jit_word_t w; - ic(0xe9); - w = i0 - (_jit->pc.w + 4); - ii(w); - return (_jit->pc.w); -} - -static void -_jmpsi(jit_state_t *_jit, jit_uint8_t i0) -{ - ic(0xeb); - ic(i0); -} - -static void -_prolog(jit_state_t *_jit, jit_node_t *node) -{ - jit_int32_t reg; - if (_jitc->function->define_frame || _jitc->function->assume_frame) { - jit_int32_t frame = -_jitc->function->frame; - assert(_jitc->function->self.aoff >= frame); - if (_jitc->function->assume_frame) - return; - _jitc->function->self.aoff = frame; - } - if (_jitc->function->allocar) - _jitc->function->self.aoff &= -16; -#if __X64 && __CYGWIN__ - _jitc->function->stack = (((/* first 32 bytes must be allocated */ - (_jitc->function->self.alen > 32 ? - _jitc->function->self.alen : 32) - - /* align stack at 16 bytes */ - _jitc->function->self.aoff) + 15) & -16) + - stack_adjust; -#else - _jitc->function->stack = (((_jitc->function->self.alen - - _jitc->function->self.aoff) + 15) & -16) + - stack_adjust; -#endif - subi(_RSP_REGNO, _RSP_REGNO, stack_framesize - REAL_WORDSIZE); - /* callee save registers */ -#if __X32 - if (jit_regset_tstbit(&_jitc->function->regset, _RDI)) - stxi(12, _RSP_REGNO, _RDI_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _RSI)) - stxi( 8, _RSP_REGNO, _RSI_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _RBX)) - stxi( 4, _RSP_REGNO, _RBX_REGNO); -#else -# if __CYGWIN__ - if (jit_regset_tstbit(&_jitc->function->regset, _XMM15)) - sse_stxi_d(136, _RSP_REGNO, _XMM15_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM14)) - sse_stxi_d(128, _RSP_REGNO, _XMM14_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM13)) - sse_stxi_d(120, _RSP_REGNO, _XMM13_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM12)) - sse_stxi_d(112, _RSP_REGNO, _XMM12_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM11)) - sse_stxi_d(104, _RSP_REGNO, _XMM11_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM10)) - sse_stxi_d(96, _RSP_REGNO, _XMM10_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM9)) - sse_stxi_d(88, _RSP_REGNO, _XMM9_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM8)) - sse_stxi_d(80, _RSP_REGNO, _XMM8_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM7)) - sse_stxi_d(72, _RSP_REGNO, _XMM7_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM6)) - sse_stxi_d(64, _RSP_REGNO, _XMM6_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R15)) - stxi(56, _RSP_REGNO, _R15_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R14)) - stxi(48, _RSP_REGNO, _R14_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R13)) - stxi(40, _RSP_REGNO, _R13_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R12)) - stxi(32, _RSP_REGNO, _R12_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _RSI)) - stxi(24, _RSP_REGNO, _RSI_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _RDI)) - stxi(16, _RSP_REGNO, _RDI_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _RBX)) - stxi( 8, _RSP_REGNO, _RBX_REGNO); -# else - if (jit_regset_tstbit(&_jitc->function->regset, _RBX)) - stxi(40, _RSP_REGNO, _RBX_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R12)) - stxi(32, _RSP_REGNO, _R12_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R13)) - stxi(24, _RSP_REGNO, _R13_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R14)) - stxi(16, _RSP_REGNO, _R14_REGNO); - if (jit_regset_tstbit(&_jitc->function->regset, _R15)) - stxi( 8, _RSP_REGNO, _R15_REGNO); -# endif -#endif - stxi(0, _RSP_REGNO, _RBP_REGNO); - movr(_RBP_REGNO, _RSP_REGNO); - - /* alloca */ - subi(_RSP_REGNO, _RSP_REGNO, _jitc->function->stack); - if (_jitc->function->allocar) { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), _jitc->function->self.aoff); - stxi_i(_jitc->function->aoffoff, _RBP_REGNO, rn(reg)); - jit_unget_reg(reg); - } - -#if __X64 && !__CYGWIN__ - if (_jitc->function->self.call & jit_call_varargs) { - jit_word_t nofp_code; - - /* Save gp registers in the save area, if any is a vararg */ - for (reg = first_gp_from_offset(_jitc->function->vagp); - jit_arg_reg_p(reg); ++reg) - stxi(_jitc->function->vaoff + first_gp_offset + - reg * 8, _RBP_REGNO, rn(JIT_RA0 - reg)); - - reg = first_fp_from_offset(_jitc->function->vafp); - if (jit_arg_f_reg_p(reg)) { - /* Skip over if no float registers were passed as argument */ - /* test %al, %al */ - ic(0x84); - ic(0xc0); - jes(0); - nofp_code = _jit->pc.w; - - /* Save fp registers in the save area, if any is a vararg */ - /* Note that the full 16 byte xmm is not saved, because - * lightning only handles float and double, and, while - * attempting to provide a va_list compatible pointer as - * jit_va_start return, does not guarantee it (on all ports). */ - for (; jit_arg_f_reg_p(reg); ++reg) - sse_stxi_d(_jitc->function->vaoff + first_fp_offset + - reg * va_fp_increment, _RBP_REGNO, rn(_XMM0 - reg)); - - patch_rel_char(nofp_code, _jit->pc.w); - } - } -#endif -} - -static void -_epilog(jit_state_t *_jit, jit_node_t *node) -{ - if (_jitc->function->assume_frame) - return; - /* callee save registers */ - movr(_RSP_REGNO, _RBP_REGNO); -#if __X32 - if (jit_regset_tstbit(&_jitc->function->regset, _RDI)) - ldxi(_RDI_REGNO, _RSP_REGNO, 12); - if (jit_regset_tstbit(&_jitc->function->regset, _RSI)) - ldxi(_RSI_REGNO, _RSP_REGNO, 8); - if (jit_regset_tstbit(&_jitc->function->regset, _RBX)) - ldxi(_RBX_REGNO, _RSP_REGNO, 4); -#else -# if __CYGWIN__ - if (jit_regset_tstbit(&_jitc->function->regset, _XMM15)) - sse_ldxi_d(_XMM15_REGNO, _RSP_REGNO, 136); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM14)) - sse_ldxi_d(_XMM14_REGNO, _RSP_REGNO, 128); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM13)) - sse_ldxi_d(_XMM13_REGNO, _RSP_REGNO, 120); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM12)) - sse_ldxi_d(_XMM12_REGNO, _RSP_REGNO, 112); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM11)) - sse_ldxi_d(_XMM11_REGNO, _RSP_REGNO, 104); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM10)) - sse_ldxi_d(_XMM10_REGNO, _RSP_REGNO, 96); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM9)) - sse_ldxi_d(_XMM9_REGNO, _RSP_REGNO, 88); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM8)) - sse_ldxi_d(_XMM8_REGNO, _RSP_REGNO, 80); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM7)) - sse_ldxi_d(_XMM7_REGNO, _RSP_REGNO, 72); - if (jit_regset_tstbit(&_jitc->function->regset, _XMM6)) - sse_ldxi_d(_XMM6_REGNO, _RSP_REGNO, 64); - if (jit_regset_tstbit(&_jitc->function->regset, _R15)) - ldxi(_R15_REGNO, _RSP_REGNO, 56); - if (jit_regset_tstbit(&_jitc->function->regset, _R14)) - ldxi(_R14_REGNO, _RSP_REGNO, 48); - if (jit_regset_tstbit(&_jitc->function->regset, _R13)) - ldxi(_R13_REGNO, _RSP_REGNO, 40); - if (jit_regset_tstbit(&_jitc->function->regset, _R12)) - ldxi(_R12_REGNO, _RSP_REGNO, 32); - if (jit_regset_tstbit(&_jitc->function->regset, _RSI)) - ldxi(_RSI_REGNO, _RSP_REGNO, 24); - if (jit_regset_tstbit(&_jitc->function->regset, _RDI)) - ldxi(_RDI_REGNO, _RSP_REGNO, 16); - if (jit_regset_tstbit(&_jitc->function->regset, _RBX)) - ldxi(_RBX_REGNO, _RSP_REGNO, 8); -# else - if (jit_regset_tstbit(&_jitc->function->regset, _RBX)) - ldxi(_RBX_REGNO, _RSP_REGNO, 40); - if (jit_regset_tstbit(&_jitc->function->regset, _R12)) - ldxi(_R12_REGNO, _RSP_REGNO, 32); - if (jit_regset_tstbit(&_jitc->function->regset, _R13)) - ldxi(_R13_REGNO, _RSP_REGNO, 24); - if (jit_regset_tstbit(&_jitc->function->regset, _R14)) - ldxi(_R14_REGNO, _RSP_REGNO, 16); - if (jit_regset_tstbit(&_jitc->function->regset, _R15)) - ldxi(_R15_REGNO, _RSP_REGNO, 8); -# endif -#endif - ldxi(_RBP_REGNO, _RSP_REGNO, 0); - addi(_RSP_REGNO, _RSP_REGNO, stack_framesize - REAL_WORDSIZE); - - ic(0xc3); -} - -static void -_vastart(jit_state_t *_jit, jit_int32_t r0) -{ -#if __X32 || __CYGWIN__ - assert(_jitc->function->self.call & jit_call_varargs); - addi(r0, _RBP_REGNO, _jitc->function->self.size); -#else - jit_int32_t reg; - - assert(_jitc->function->self.call & jit_call_varargs); - - /* Return jit_va_list_t in the register argument */ - addi(r0, _RBP_REGNO, _jitc->function->vaoff); - reg = jit_get_reg(jit_class_gpr); - - /* Initialize gp offset in the save area. */ - movi(rn(reg), _jitc->function->vagp); - stxi_i(offsetof(jit_va_list_t, gpoff), r0, rn(reg)); - - /* Initialize fp offset in the save area. */ - movi(rn(reg), _jitc->function->vafp); - stxi_i(offsetof(jit_va_list_t, fpoff), r0, rn(reg)); - - /* Initialize overflow pointer to the first stack argument. */ - addi(rn(reg), _RBP_REGNO, _jitc->function->self.size); - stxi(offsetof(jit_va_list_t, over), r0, rn(reg)); - - /* Initialize register save area pointer. */ - addi(rn(reg), r0, first_gp_offset); - stxi(offsetof(jit_va_list_t, save), r0, rn(reg)); - - jit_unget_reg(reg); -#endif -} - -static void -_vaarg(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ -#if __X32 || __CYGWIN__ - assert(_jitc->function->self.call & jit_call_varargs); - ldr(r0, r1); - addi(r1, r1, va_gp_increment); -#else - jit_int32_t rg0; - jit_int32_t rg1; - jit_word_t ge_code; - jit_word_t lt_code; - - assert(_jitc->function->self.call & jit_call_varargs); - - rg0 = jit_get_reg(jit_class_gpr); - rg1 = jit_get_reg(jit_class_gpr); - - /* Load the gp offset in save area in the first temporary. */ - ldxi_i(rn(rg0), r1, offsetof(jit_va_list_t, gpoff)); - - /* Jump over if there are no remaining arguments in the save area. */ - icmpi(rn(rg0), va_gp_max_offset); - jaes(0); - ge_code = _jit->pc.w; - - /* Load the save area pointer in the second temporary. */ - ldxi(rn(rg1), r1, offsetof(jit_va_list_t, save)); - - /* Load the vararg argument in the first argument. */ - ldxr(r0, rn(rg1), rn(rg0)); - - /* Update the gp offset. */ - addi(rn(rg0), rn(rg0), 8); - stxi_i(offsetof(jit_va_list_t, gpoff), r1, rn(rg0)); - - /* Will only need one temporary register below. */ - jit_unget_reg(rg1); - - /* Jump over overflow code. */ - jmpsi(0); - lt_code = _jit->pc.w; - - /* Where to land if argument is in overflow area. */ - patch_rel_char(ge_code, _jit->pc.w); - - /* Load overflow pointer. */ - ldxi(rn(rg0), r1, offsetof(jit_va_list_t, over)); - - /* Load argument. */ - ldr(r0, rn(rg0)); - - /* Update overflow pointer. */ - addi(rn(rg0), rn(rg0), va_gp_increment); - stxi(offsetof(jit_va_list_t, over), r1, rn(rg0)); - - /* Where to land if argument is in save area. */ - patch_rel_char(lt_code, _jit->pc.w); - - jit_unget_reg(rg0); -#endif -} - -/* The x87 boolean argument tells if will put the result in a x87 - * register if non false, in a sse register otherwise. */ -static void -_vaarg_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_bool_t x87) -{ -#if __X32 || __CYGWIN__ - assert(_jitc->function->self.call & jit_call_varargs); - if (x87) - x87_ldr_d(r0, r1); - else - sse_ldr_d(r0, r1); - addi(r1, r1, 8); -#else - jit_int32_t rg0; - jit_int32_t rg1; - jit_word_t ge_code; - jit_word_t lt_code; - - assert(_jitc->function->self.call & jit_call_varargs); - - rg0 = jit_get_reg(jit_class_gpr); - rg1 = jit_get_reg(jit_class_gpr); - - /* Load the fp offset in save area in the first temporary. */ - ldxi_i(rn(rg0), r1, offsetof(jit_va_list_t, fpoff)); - - /* Jump over if there are no remaining arguments in the save area. */ - icmpi(rn(rg0), va_fp_max_offset); - jaes(0); - ge_code = _jit->pc.w; - - /* Load the save area pointer in the second temporary. */ - ldxi(rn(rg1), r1, offsetof(jit_va_list_t, save)); - - /* Load the vararg argument in the first argument. */ - if (x87) - x87_ldxr_d(r0, rn(rg1), rn(rg0)); - else - sse_ldxr_d(r0, rn(rg1), rn(rg0)); - - /* Update the fp offset. */ - addi(rn(rg0), rn(rg0), va_fp_increment); - stxi_i(offsetof(jit_va_list_t, fpoff), r1, rn(rg0)); - - /* Will only need one temporary register below. */ - jit_unget_reg(rg1); - - /* Jump over overflow code. */ - jmpsi(0); - lt_code = _jit->pc.w; - - /* Where to land if argument is in overflow area. */ - patch_rel_char(ge_code, _jit->pc.w); - - /* Load overflow pointer. */ - ldxi(rn(rg0), r1, offsetof(jit_va_list_t, over)); - - /* Load argument. */ - if (x87) - x87_ldr_d(r0, rn(rg0)); - else - sse_ldr_d(r0, rn(rg0)); - - /* Update overflow pointer. */ - addi(rn(rg0), rn(rg0), 8); - stxi(offsetof(jit_va_list_t, over), r1, rn(rg0)); - - /* Where to land if argument is in save area. */ - patch_rel_char(lt_code, _jit->pc.w); - - jit_unget_reg(rg0); -#endif -} - -static void -_patch_at(jit_state_t *_jit, jit_node_t *node, - jit_word_t instr, jit_word_t label) -{ - switch (node->code) { -# if __X64 - case jit_code_calli: -# endif - case jit_code_movi: - patch_abs(instr, label); - break; - default: - patch_rel(instr, label); - break; - } -} - -# if __X64 && !defined(HAVE_FFSL) -static int -ffsl(long i) -{ - int bit; -# if __CYGWIN__ - /* Bug workaround */ - if ((int)i == (int)0x80000000) - bit = 32; - else -# endif - if ((bit = ffs((int)i)) == 0) { - if ((bit = ffs((int)((unsigned long)i >> 32)))) - bit += 32; - } - return (bit); -} -# endif -#endif diff --git a/libguile/lightning/lib/jit_x86-sse.c b/libguile/lightning/lib/jit_x86-sse.c deleted file mode 100644 index 448c94293..000000000 --- a/libguile/lightning/lib/jit_x86-sse.c +++ /dev/null @@ -1,1569 +0,0 @@ -/* - * Copyright (C) 2012-2017 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#if PROTO -# if __X32 -# define sse_address_p(i0) 1 -# else -# if __X64_32 -# define sse_address_p(i0) ((jit_word_t)(i0) >= 0) -# else -# define sse_address_p(i0) can_sign_extend_int_p(i0) -# endif -# endif -# define _XMM6_REGNO 6 -# define _XMM7_REGNO 7 -# define _XMM8_REGNO 8 -# define _XMM9_REGNO 9 -# define _XMM10_REGNO 10 -# define _XMM11_REGNO 11 -# define _XMM12_REGNO 12 -# define _XMM13_REGNO 13 -# define _XMM14_REGNO 14 -# define _XMM15_REGNO 15 -#define X86_SSE_MOV 0x10 -#define X86_SSE_MOV1 0x11 -#define X86_SSE_MOVLP 0x12 -#define X86_SSE_MOVHP 0x16 -#define X86_SSE_MOVA 0x28 -#define X86_SSE_CVTIS 0x2a -#define X86_SSE_CVTTSI 0x2c -#define X86_SSE_CVTSI 0x2d -#define X86_SSE_UCOMI 0x2e -#define X86_SSE_COMI 0x2f -#define X86_SSE_ROUND 0x3a -#define X86_SSE_SQRT 0x51 -#define X86_SSE_RSQRT 0x52 -#define X86_SSE_RCP 0x53 -#define X86_SSE_AND 0x54 -#define X86_SSE_ANDN 0x55 -#define X86_SSE_OR 0x56 -#define X86_SSE_XOR 0x57 -#define X86_SSE_ADD 0x58 -#define X86_SSE_MUL 0x59 -#define X86_SSE_CVTSD 0x5a -#define X86_SSE_CVTDT 0x5b -#define X86_SSE_SUB 0x5c -#define X86_SSE_MIN 0x5d -#define X86_SSE_DIV 0x5e -#define X86_SSE_MAX 0x5f -#define X86_SSE_X2G 0x6e -#define X86_SSE_EQB 0x74 -#define X86_SSE_EQW 0x75 -#define X86_SSE_EQD 0x76 -#define X86_SSE_G2X 0x7e -#define X86_SSE_MOV2 0xd6 -# define sser(c,r0,r1) _sser(_jit,c,r0,r1) -static void _sser(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define ssexr(p,c,r0,r1) _ssexr(_jit,p,c,r0,r1) -static void _ssexr(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); -# define ssexi(c,r0,m,i) _ssexi(_jit,c,r0,m,i) -static void _ssexi(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t); -# define addssr(r0, r1) ssexr(0xf3, X86_SSE_ADD, r0, r1) -# define addsdr(r0, r1) ssexr(0xf2, X86_SSE_ADD, r0, r1) -# define subssr(r0, r1) ssexr(0xf3, X86_SSE_SUB, r0, r1) -# define subsdr(r0, r1) ssexr(0xf2, X86_SSE_SUB, r0, r1) -# define mulssr(r0, r1) ssexr(0xf3, X86_SSE_MUL, r0, r1) -# define mulsdr(r0, r1) ssexr(0xf2, X86_SSE_MUL, r0, r1) -# define divssr(r0, r1) ssexr(0xf3, X86_SSE_DIV, r0, r1) -# define divsdr(r0, r1) ssexr(0xf2, X86_SSE_DIV, r0, r1) -# define andpsr(r0, r1) sser( X86_SSE_AND, r0, r1) -# define andpdr(r0, r1) ssexr(0x66, X86_SSE_AND, r0, r1) -# define sse_truncr_f_i(r0, r1) ssexr(0xf3, X86_SSE_CVTTSI, r0, r1) -# define sse_truncr_d_i(r0, r1) ssexr(0xf2, X86_SSE_CVTTSI, r0, r1) -# if __X64 -# define sse_truncr_f_l(r0, r1) sselxr(0xf3, X86_SSE_CVTTSI, r0, r1) -# define sse_truncr_d_l(r0, r1) sselxr(0xf2, X86_SSE_CVTTSI, r0, r1) -# define sse_extr_f(r0, r1) sselxr(0xf3, X86_SSE_CVTIS, r0, r1) -# define sse_extr_d(r0, r1) sselxr(0xf2, X86_SSE_CVTIS, r0, r1) -# else -# define sse_extr_f(r0, r1) ssexr(0xf3, X86_SSE_CVTIS, r0, r1) -# define sse_extr_d(r0, r1) ssexr(0xf2, X86_SSE_CVTIS, r0, r1) -# endif -# define sse_extr_f_d(r0, r1) ssexr(0xf3, X86_SSE_CVTSD, r0, r1) -# define sse_extr_d_f(r0, r1) ssexr(0xf2, X86_SSE_CVTSD, r0, r1) -# define ucomissr(r0,r1) sser(X86_SSE_UCOMI,r0,r1) -# define ucomisdr(r0,r1) ssexr(0x66,X86_SSE_UCOMI,r0,r1) -# define xorpsr(r0,r1) sser(X86_SSE_XOR,r0,r1) -# define xorpdr(r0,r1) ssexr(0x66,X86_SSE_XOR,r0,r1) -# define movdlxr(r0,r1) ssexr(0x66, X86_SSE_X2G,r0,r1) -# define pcmpeqlr(r0, r1) ssexr(0x66, X86_SSE_EQD, r0, r1) -# define psrl(r0, i0) ssexi(0x72, r0, 0x02, i0) -# define psrq(r0, i0) ssexi(0x73, r0, 0x02, i0) -# define psll(r0, i0) ssexi(0x72, r0, 0x06, i0) -# define pslq(r0, i0) ssexi(0x73, r0, 0x06, i0) -# define movdqxr(r0,r1) sselxr(0x66,X86_SSE_X2G,r0,r1) -# if __X64 && !__X64_32 -# define sselxr(p,c,r0,r1) _sselxr(_jit,p,c,r0,r1) -static void -_sselxr(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); -# else -# define sselxr(p,c,r0,r1) ssexr(p,c,r0,r1) -# endif -# define ssexrx(p,c,md,rb,ri,ms,rd) _ssexrx(_jit,p,c,md,rb,ri,ms,rd) -# define movssmr(md,rb,ri,ms,rd) ssexrx(0xf3,X86_SSE_MOV,md,rb,ri,ms,rd) -# define movsdmr(md,rb,ri,ms,rd) ssexrx(0xf2,X86_SSE_MOV,md,rb,ri,ms,rd) -# define movssrm(rs,md,mb,mi,ms) ssexrx(0xf3,X86_SSE_MOV1,md,mb,mi,ms,rs) -# define movsdrm(rs,md,mb,mi,ms) ssexrx(0xf2,X86_SSE_MOV1,md,mb,mi,ms,rs) -static void -_ssexrx(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t, - jit_int32_t, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_addr_f(r0, r1, r2) _sse_addr_f(_jit, r0, r1, r2) -static void _sse_addr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_addi_f(r0, r1, i0) _sse_addi_f(_jit, r0, r1, i0) -static void _sse_addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_addr_d(r0, r1, r2) _sse_addr_d(_jit, r0, r1, r2) -static void _sse_addr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_addi_d(r0, r1, i0) _sse_addi_d(_jit, r0, r1, i0) -static void _sse_addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_subr_f(r0, r1, r2) _sse_subr_f(_jit, r0, r1, r2) -static void _sse_subr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_subi_f(r0, r1, i0) _sse_subi_f(_jit, r0, r1, i0) -static void _sse_subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_subr_d(r0, r1, r2) _sse_subr_d(_jit, r0, r1, r2) -static void _sse_subr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_subi_d(r0, r1, i0) _sse_subi_d(_jit, r0, r1, i0) -static void _sse_subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_rsbr_f(r0, r1, r2) sse_subr_f(r0, r2, r1) -# define sse_rsbi_f(r0, r1, i0) _sse_rsbi_f(_jit, r0, r1, i0) -static void _sse_rsbi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_rsbr_d(r0, r1, r2) sse_subr_d(r0, r2, r1) -# define sse_rsbi_d(r0, r1, i0) _sse_rsbi_d(_jit, r0, r1, i0) -static void _sse_rsbi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_mulr_f(r0, r1, r2) _sse_mulr_f(_jit, r0, r1, r2) -static void _sse_mulr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_muli_f(r0, r1, i0) _sse_muli_f(_jit, r0, r1, i0) -static void _sse_muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_mulr_d(r0, r1, r2) _sse_mulr_d(_jit, r0, r1, r2) -static void _sse_mulr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_muli_d(r0, r1, i0) _sse_muli_d(_jit, r0, r1, i0) -static void _sse_muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_divr_f(r0, r1, r2) _sse_divr_f(_jit, r0, r1, r2) -static void _sse_divr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_divi_f(r0, r1, i0) _sse_divi_f(_jit, r0, r1, i0) -static void _sse_divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_divr_d(r0, r1, r2) _sse_divr_d(_jit, r0, r1, r2) -static void _sse_divr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_divi_d(r0, r1, i0) _sse_divi_d(_jit, r0, r1, i0) -static void _sse_divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_absr_f(r0, r1) _sse_absr_f(_jit, r0, r1) -static void _sse_absr_f(jit_state_t*,jit_int32_t,jit_int32_t); -# define sse_absr_d(r0, r1) _sse_absr_d(_jit, r0, r1) -static void _sse_absr_d(jit_state_t*,jit_int32_t,jit_int32_t); -# define sse_negr_f(r0, r1) _sse_negr_f(_jit, r0, r1) -static void _sse_negr_f(jit_state_t*,jit_int32_t,jit_int32_t); -# define sse_negr_d(r0, r1) _sse_negr_d(_jit, r0, r1) -static void _sse_negr_d(jit_state_t*,jit_int32_t,jit_int32_t); -# define sse_sqrtr_f(r0, r1) ssexr(0xf3, X86_SSE_SQRT, r0, r1) -# define sse_sqrtr_d(r0, r1) ssexr(0xf2, X86_SSE_SQRT, r0, r1) -# define ssecmpf(code, r0, r1, r2) _ssecmp(_jit, 0, code, r0, r1, r2) -# define ssecmpd(code, r0, r1, r2) _ssecmp(_jit, 1, code, r0, r1, r2) -static void -_ssecmp(jit_state_t*, jit_bool_t, jit_int32_t, - jit_int32_t, jit_int32_t, jit_int32_t); -#define sse_movr_f(r0,r1) _sse_movr_f(_jit,r0,r1) -static void _sse_movr_f(jit_state_t*, jit_int32_t, jit_int32_t); -#define sse_movi_f(r0,i0) _sse_movi_f(_jit,r0,i0) -static void _sse_movi_f(jit_state_t*, jit_int32_t, jit_float32_t*); -# define sse_lti_f(r0, r1, i0) _sse_lti_f(_jit, r0, r1, i0) -static void _sse_lti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ltr_f(r0, r1, r2) ssecmpf(X86_CC_A, r0, r1, r2) -# define sse_lei_f(r0, r1, i0) _sse_lei_f(_jit, r0, r1, i0) -static void _sse_lei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ler_f(r0, r1, r2) ssecmpf(X86_CC_AE, r0, r1, r2) -# define sse_eqi_f(r0, r1, i0) _sse_eqi_f(_jit, r0, r1, i0) -static void _sse_eqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_eqr_f(r0, r1, r2) _sse_eqr_f(_jit, r0, r1, r2) -static void _sse_eqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_gei_f(r0, r1, i0) _sse_gei_f(_jit, r0, r1, i0) -static void _sse_gei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ger_f(r0, r1, r2) ssecmpf(X86_CC_AE, r0, r2, r1) -# define sse_gti_f(r0, r1, i0) _sse_gti_f(_jit, r0, r1, i0) -static void _sse_gti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_gtr_f(r0, r1, r2) ssecmpf(X86_CC_A, r0, r2, r1) -# define sse_nei_f(r0, r1, i0) _sse_nei_f(_jit, r0, r1, i0) -static void _sse_nei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ner_f(r0, r1, r2) _sse_ner_f(_jit, r0, r1, r2) -static void _sse_ner_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_unlti_f(r0, r1, i0) _sse_unlti_f(_jit, r0, r1, i0) -static void _sse_unlti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_unltr_f(r0, r1, r2) ssecmpf(X86_CC_NAE, r0, r2, r1) -# define sse_unlei_f(r0, r1, i0) _sse_unlei_f(_jit, r0, r1, i0) -static void _sse_unlei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_unler_f(r0, r1, r2) _sse_unler_f(_jit, r0, r1, r2) -# define sse_uneqi_f(r0, r1, i0) _sse_uneqi_f(_jit, r0, r1, i0) -static void _sse_uneqi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -static void _sse_unler_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_uneqr_f(r0, r1, r2) _sse_uneqr_f(_jit, r0, r1, r2) -static void _sse_uneqr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ungei_f(r0, r1, i0) _sse_ungei_f(_jit, r0, r1, i0) -static void _sse_ungei_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_unger_f(r0, r1, r2) _sse_unger_f(_jit, r0, r1, r2) -static void _sse_unger_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ungti_f(r0, r1, i0) _sse_ungti_f(_jit, r0, r1, i0) -static void _sse_ungti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ungtr_f(r0, r1, r2) ssecmpf(X86_CC_NAE, r0, r1, r2) -# define sse_ltgti_f(r0, r1, i0) _sse_ltgti_f(_jit, r0, r1, i0) -static void _sse_ltgti_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ltgtr_f(r0, r1, r2) _sse_ltgtr_f(_jit, r0, r1, r2) -static void _sse_ltgtr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ordi_f(r0, r1, i0) _sse_ordi_f(_jit, r0, r1, i0) -static void _sse_ordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_ordr_f(r0, r1, r2) ssecmpf(X86_CC_NP, r0, r2, r1) -# define sse_unordi_f(r0, r1, i0) _sse_unordi_f(_jit, r0, r1, i0) -static void _sse_unordi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*); -# define sse_unordr_f(r0, r1, r2) ssecmpf(X86_CC_P, r0, r2, r1) -# define sse_ldr_f(r0, r1) movssmr(0, r1, _NOREG, _SCL1, r0) -# define sse_ldi_f(r0, i0) _sse_ldi_f(_jit, r0, i0) -static void _sse_ldi_f(jit_state_t*, jit_int32_t, jit_word_t); -# define sse_ldxr_f(r0, r1, r2) _sse_ldxr_f(_jit, r0, r1, r2) -static void _sse_ldxr_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ldxi_f(r0, r1, i0) _sse_ldxi_f(_jit, r0, r1, i0) -static void _sse_ldxi_f(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define sse_str_f(r0, r1) movssrm(r1, 0, r0, _NOREG, _SCL1) -# define sse_sti_f(i0, r0) _sse_sti_f(_jit, i0, r0) -static void _sse_sti_f(jit_state_t*, jit_word_t,jit_int32_t); -# define sse_stxr_f(r0, r1, r2) _sse_stxr_f(_jit, r0, r1, r2) -static void _sse_stxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_stxi_f(i0, r0, r1) _sse_stxi_f(_jit, i0, r0, r1) -static void _sse_stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bltr_f(i0, r0, r1) _sse_bltr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_blti_f(i0, r0, i1) _sse_blti_f(_jit, i0, r0, i1) -static jit_word_t -_sse_blti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bler_f(i0, r0, r1) _sse_bler_f(_jit, i0, r0, r1) -static jit_word_t _sse_bler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_blei_f(i0, r0, i1) _sse_blei_f(_jit, i0, r0, i1) -static jit_word_t -_sse_blei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_beqr_f(i0, r0, r1) _sse_beqr_f(_jit, i0, r0, r1) -static jit_word_t _sse_beqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_beqi_f(i0, r0, i1) _sse_beqi_f(_jit, i0, r0, i1) -static jit_word_t -_sse_beqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bger_f(i0, r0, r1) _sse_bger_f(_jit, i0, r0, r1) -static jit_word_t _sse_bger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bgei_f(i0, r0, i1) _sse_bgei_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bgei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bgtr_f(i0, r0, r1) _sse_bgtr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bgti_f(i0, r0, i1) _sse_bgti_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bner_f(i0, r0, r1) _sse_bner_f(_jit, i0, r0, r1) -static jit_word_t _sse_bner_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bnei_f(i0, r0, i1) _sse_bnei_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bnei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bunltr_f(i0, r0, r1) _sse_bunltr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bunltr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bunlti_f(i0, r0, i1) _sse_bunlti_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bunlti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bunler_f(i0, r0, r1) _sse_bunler_f(_jit, i0, r0, r1) -static jit_word_t _sse_bunler_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bunlei_f(i0, r0, i1) _sse_bunlei_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bunlei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_buneqr_f(i0, r0, r1) _sse_buneqr_f(_jit, i0, r0, r1) -static jit_word_t _sse_buneqr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_buneqi_f(i0, r0, i1) _sse_buneqi_f(_jit, i0, r0, i1) -static jit_word_t -_sse_buneqi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bunger_f(i0, r0, r1) _sse_bunger_f(_jit, i0, r0, r1) -static jit_word_t _sse_bunger_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bungei_f(i0, r0, i1) _sse_bungei_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bungei_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bungtr_f(i0, r0, r1) _sse_bungtr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bungtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bungti_f(i0, r0, i1) _sse_bungti_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bungti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bltgtr_f(i0, r0, r1) _sse_bltgtr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bltgtr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bltgti_f(i0, r0, i1) _sse_bltgti_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bltgti_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bordr_f(i0, r0, r1) _sse_bordr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bordi_f(i0, r0, i1) _sse_bordi_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -# define sse_bunordr_f(i0, r0, r1) _sse_bunordr_f(_jit, i0, r0, r1) -static jit_word_t _sse_bunordr_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bunordi_f(i0, r0, i1) _sse_bunordi_f(_jit, i0, r0, i1) -static jit_word_t -_sse_bunordi_f(jit_state_t*, jit_word_t, jit_int32_t, jit_float32_t*); -#define sse_movr_d(r0,r1) _sse_movr_d(_jit,r0,r1) -static void _sse_movr_d(jit_state_t*, jit_int32_t, jit_int32_t); -#define sse_movi_d(r0,i0) _sse_movi_d(_jit,r0,i0) -static void _sse_movi_d(jit_state_t*, jit_int32_t, jit_float64_t*); -# define sse_ltr_d(r0, r1, r2) ssecmpd(X86_CC_A, r0, r1, r2) -# define sse_lti_d(r0, r1, i0) _sse_lti_d(_jit, r0, r1, i0) -static void _sse_lti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ler_d(r0, r1, r2) ssecmpd(X86_CC_AE, r0, r1, r2) -# define sse_lei_d(r0, r1, i0) _sse_lei_d(_jit, r0, r1, i0) -static void _sse_lei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_eqr_d(r0, r1, r2) _sse_eqr_d(_jit, r0, r1, r2) -static void _sse_eqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_eqi_d(r0, r1, i0) _sse_eqi_d(_jit, r0, r1, i0) -static void _sse_eqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ger_d(r0, r1, r2) ssecmpd(X86_CC_AE, r0, r2, r1) -# define sse_gei_d(r0, r1, i0) _sse_gei_d(_jit, r0, r1, i0) -static void _sse_gei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_gtr_d(r0, r1, r2) ssecmpd(X86_CC_A, r0, r2, r1) -# define sse_gti_d(r0, r1, i0) _sse_gti_d(_jit, r0, r1, i0) -static void _sse_gti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ner_d(r0, r1, r2) _sse_ner_d(_jit, r0, r1, r2) -static void _sse_ner_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_nei_d(r0, r1, i0) _sse_nei_d(_jit, r0, r1, i0) -static void _sse_nei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_unltr_d(r0, r1, r2) ssecmpd(X86_CC_NAE, r0, r2, r1) -# define sse_unlti_d(r0, r1, i0) _sse_unlti_d(_jit, r0, r1, i0) -static void _sse_unlti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_unler_d(r0, r1, r2) _sse_unler_d(_jit, r0, r1, r2) -static void _sse_unler_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_unlei_d(r0, r1, i0) _sse_unlei_d(_jit, r0, r1, i0) -static void _sse_unlei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_uneqr_d(r0, r1, r2) _sse_uneqr_d(_jit, r0, r1, r2) -static void _sse_uneqr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_uneqi_d(r0, r1, i0) _sse_uneqi_d(_jit, r0, r1, i0) -static void _sse_uneqi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_unger_d(r0, r1, r2) _sse_unger_d(_jit, r0, r1, r2) -static void _sse_unger_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ungei_d(r0, r1, i0) _sse_ungei_d(_jit, r0, r1, i0) -static void _sse_ungei_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ungtr_d(r0, r1, r2) ssecmpd(X86_CC_NAE, r0, r1, r2) -# define sse_ungti_d(r0, r1, i0) _sse_ungti_d(_jit, r0, r1, i0) -static void _sse_ungti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ltgtr_d(r0, r1, r2) _sse_ltgtr_d(_jit, r0, r1, r2) -static void _sse_ltgtr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ltgti_d(r0, r1, i0) _sse_ltgti_d(_jit, r0, r1, i0) -static void _sse_ltgti_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ordr_d(r0, r1, r2) ssecmpd(X86_CC_NP, r0, r2, r1) -# define sse_ordi_d(r0, r1, i0) _sse_ordi_d(_jit, r0, r1, i0) -static void _sse_ordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_unordr_d(r0, r1, r2) ssecmpd(X86_CC_P, r0, r2, r1) -# define sse_unordi_d(r0, r1, i0) _sse_unordi_d(_jit, r0, r1, i0) -static void _sse_unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*); -# define sse_ldr_d(r0, r1) movsdmr(0, r1, _NOREG, _SCL1, r0) -# define sse_ldi_d(r0, i0) _sse_ldi_d(_jit, r0, i0) -static void _sse_ldi_d(jit_state_t*, jit_int32_t, jit_word_t); -# define sse_ldxr_d(r0, r1, r2) _sse_ldxr_d(_jit, r0, r1, r2) -static void _sse_ldxr_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_int32_t); -# define sse_ldxi_d(r0, r1, i0) _sse_ldxi_d(_jit, r0, r1, i0) -static void _sse_ldxi_d(jit_state_t*, jit_int32_t, jit_int32_t, jit_word_t); -# define sse_bltr_d(i0, r0, r1) _sse_bltr_d(_jit, i0, r0, r1) -# define sse_str_d(r0, r1) movsdrm(r1, 0, r0, _NOREG, _SCL1) -# define sse_sti_d(i0, r0) _sse_sti_d(_jit, i0, r0) -static void _sse_sti_d(jit_state_t*, jit_word_t,jit_int32_t); -# define sse_stxr_d(r0, r1, r2) _sse_stxr_d(_jit, r0, r1, r2) -static void _sse_stxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t); -# define sse_stxi_d(i0, r0, r1) _sse_stxi_d(_jit, i0, r0, r1) -static void _sse_stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -static jit_word_t _sse_bltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_blti_d(i0, r0, i1) _sse_blti_d(_jit, i0, r0, i1) -static jit_word_t -_sse_blti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bler_d(i0, r0, r1) _sse_bler_d(_jit, i0, r0, r1) -static jit_word_t _sse_bler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_blei_d(i0, r0, i1) _sse_blei_d(_jit, i0, r0, i1) -static jit_word_t -_sse_blei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_beqr_d(i0, r0, r1) _sse_beqr_d(_jit, i0, r0, r1) -static jit_word_t _sse_beqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_beqi_d(i0, r0, i1) _sse_beqi_d(_jit, i0, r0, i1) -static jit_word_t -_sse_beqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bger_d(i0, r0, r1) _sse_bger_d(_jit, i0, r0, r1) -static jit_word_t _sse_bger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bgei_d(i0, r0, i1) _sse_bgei_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bgei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bgtr_d(i0, r0, r1) _sse_bgtr_d(_jit, i0, r0, r1) -static jit_word_t _sse_bgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bgti_d(i0, r0, i1) _sse_bgti_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bner_d(i0, r0, r1) _sse_bner_d(_jit, i0, r0, r1) -static jit_word_t _sse_bner_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bnei_d(i0, r0, i1) _sse_bnei_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bnei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bunltr_d(i0, r0, r1) _sse_bunltr_d(_jit, i0, r0, r1) -static jit_word_t _sse_bunltr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bunlti_d(i0, r0, i1) _sse_bunlti_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bunlti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bunler_d(i0, r0, r1) _sse_bunler_d(_jit, i0, r0, r1) -static jit_word_t _sse_bunler_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bunlei_d(i0, r0, i1) _sse_bunlei_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bunlei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_buneqr_d(i0, r0, r1) _sse_buneqr_d(_jit, i0, r0, r1) -static jit_word_t _sse_buneqr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_buneqi_d(i0, r0, i1) _sse_buneqi_d(_jit, i0, r0, i1) -static jit_word_t -_sse_buneqi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bunger_d(i0, r0, r1) _sse_bunger_d(_jit, i0, r0, r1) -static jit_word_t _sse_bunger_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bungei_d(i0, r0, i1) _sse_bungei_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bungei_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bungtr_d(i0, r0, r1) _sse_bungtr_d(_jit, i0, r0, r1) -static jit_word_t _sse_bungtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bungti_d(i0, r0, i1) _sse_bungti_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bungti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bltgtr_d(i0, r0, r1) _sse_bltgtr_d(_jit, i0, r0, r1) -static jit_word_t _sse_bltgtr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bltgti_d(i0, r0, i1) _sse_bltgti_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bltgti_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bordr_d(i0, r0, r1) _sse_bordr_d(_jit, i0, r0, r1) -static jit_word_t _sse_bordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bordi_d(i0, r0, i1) _sse_bordi_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -# define sse_bunordr_d(i0, r0, r1) _sse_bunordr_d(_jit, i0, r0, r1) -static jit_word_t _sse_bunordr_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t); -# define sse_bunordi_d(i0, r0, i1) _sse_bunordi_d(_jit, i0, r0, i1) -static jit_word_t -_sse_bunordi_d(jit_state_t*, jit_word_t, jit_int32_t, jit_float64_t*); -#endif - -#if CODE -# define fpr_opi(name, type, size) \ -static void \ -_sse_##name##i_##type(jit_state_t *_jit, \ - jit_int32_t r0, jit_int32_t r1, \ - jit_float##size##_t *i0) \ -{ \ - jit_int32_t reg = jit_get_reg(jit_class_fpr|jit_class_xpr); \ - assert(jit_sse_reg_p(reg)); \ - sse_movi_##type(rn(reg), i0); \ - sse_##name##r_##type(r0, r1, rn(reg)); \ - jit_unget_reg(reg); \ -} -# define fpr_bopi(name, type, size) \ -static jit_word_t \ -_sse_b##name##i_##type(jit_state_t *_jit, \ - jit_word_t i0, jit_int32_t r0, \ - jit_float##size##_t *i1) \ -{ \ - jit_word_t word; \ - jit_int32_t reg = jit_get_reg(jit_class_fpr|jit_class_xpr| \ - jit_class_nospill); \ - assert(jit_sse_reg_p(reg)); \ - sse_movi_##type(rn(reg), i1); \ - word = sse_b##name##r_##type(i0, r0, rn(reg)); \ - jit_unget_reg(reg); \ - return (word); \ -} -# define fopi(name) fpr_opi(name, f, 32) -# define fbopi(name) fpr_bopi(name, f, 32) -# define dopi(name) fpr_opi(name, d, 64) -# define dbopi(name) fpr_bopi(name, d, 64) -static void -_sser(jit_state_t *_jit, jit_int32_t c, jit_int32_t r0, jit_int32_t r1) -{ - rex(0, 0, r0, 0, r1); - ic(0x0f); - ic(c); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_ssexr(jit_state_t *_jit, jit_int32_t p, jit_int32_t c, - jit_int32_t r0, jit_int32_t r1) -{ - ic(p); - rex(0, 0, r0, 0, r1); - ic(0x0f); - ic(c); - mrm(0x03, r7(r0), r7(r1)); -} - -static void -_ssexi(jit_state_t *_jit, jit_int32_t c, jit_int32_t r0, - jit_int32_t m, jit_int32_t i) -{ - ic(0x66); - rex(0, 0, 0, 0, r0); - ic(0x0f); - ic(c); - mrm(0x03, r7(m), r7(r0)); - ic(i); -} - -#if __X64 -static void -_sselxr(jit_state_t *_jit, jit_int32_t p, jit_int32_t c, - jit_int32_t r0, jit_int32_t r1) -{ - ic(p); - rex(0, 1, r0, 0, r1); - ic(0x0f); - ic(c); - mrm(0x03, r7(r0), r7(r1)); -} -#endif - -static void -_ssexrx(jit_state_t *_jit, jit_int32_t px, jit_int32_t code, jit_int32_t md, - jit_int32_t rb, jit_int32_t ri, jit_int32_t ms, jit_int32_t rd) -{ - ic(px); - rex(0, 0, rd, ri, rb); - ic(0x0f); - ic(code); - rx(rd, md, rb, ri, ms); -} - -static void -_sse_addr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r1) - addssr(r0, r2); - else if (r0 == r2) - addssr(r0, r1); - else { - sse_movr_f(r0, r1); - addssr(r0, r2); - } -} - -fopi(add) - -static void -_sse_addr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r1) - addsdr(r0, r2); - else if (r0 == r2) - addsdr(r0, r1); - else { - sse_movr_d(r0, r1); - addsdr(r0, r2); - } -} - -dopi(add) - -static void -_sse_subr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - if (r0 == r1) - subssr(r0, r2); - else if (r0 == r2) { - reg = jit_get_reg(jit_class_fpr|jit_class_xpr); - sse_movr_f(rn(reg), r0); - sse_movr_f(r0, r1); - subssr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - sse_movr_f(r0, r1); - subssr(r0, r2); - } -} - -fopi(sub) - -static void -_sse_subr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - if (r0 == r1) - subsdr(r0, r2); - else if (r0 == r2) { - reg = jit_get_reg(jit_class_fpr|jit_class_xpr); - sse_movr_d(rn(reg), r0); - sse_movr_d(r0, r1); - subsdr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - sse_movr_d(r0, r1); - subsdr(r0, r2); - } -} - -dopi(sub) - -fopi(rsb) - -dopi(rsb) - -static void -_sse_mulr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r1) - mulssr(r0, r2); - else if (r0 == r2) - mulssr(r0, r1); - else { - sse_movr_f(r0, r1); - mulssr(r0, r2); - } -} - -fopi(mul) - -static void -_sse_mulr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r0 == r1) - mulsdr(r0, r2); - else if (r0 == r2) - mulsdr(r0, r1); - else { - sse_movr_d(r0, r1); - mulsdr(r0, r2); - } -} - -dopi(mul) - -static void -_sse_divr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - if (r0 == r1) - divssr(r0, r2); - else if (r0 == r2) { - reg = jit_get_reg(jit_class_fpr|jit_class_xpr); - sse_movr_f(rn(reg), r0); - sse_movr_f(r0, r1); - divssr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - sse_movr_f(r0, r1); - divssr(r0, r2); - } -} - -fopi(div) - -static void -_sse_divr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_int32_t reg; - if (r0 == r1) - divsdr(r0, r2); - else if (r0 == r2) { - reg = jit_get_reg(jit_class_fpr|jit_class_xpr); - sse_movr_d(rn(reg), r0); - sse_movr_d(r0, r1); - divsdr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - sse_movr_d(r0, r1); - divsdr(r0, r2); - } -} - -dopi(div) - -static void -_sse_absr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (r0 == r1) { - reg = jit_get_reg(jit_class_fpr|jit_class_xpr); - pcmpeqlr(rn(reg), rn(reg)); - psrl(rn(reg), 1); - andpsr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - pcmpeqlr(r0, r0); - psrl(r0, 1); - andpsr(r0, r1); - } -} - -static void -_sse_absr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (r0 == r1) { - reg = jit_get_reg(jit_class_fpr|jit_class_xpr); - pcmpeqlr(rn(reg), rn(reg)); - psrq(rn(reg), 1); - andpdr(r0, rn(reg)); - jit_unget_reg(reg); - } - else { - pcmpeqlr(r0, r0); - psrq(r0, 1); - andpdr(r0, r1); - } -} - -static void -_sse_negr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t freg, ireg; - ireg = jit_get_reg(jit_class_gpr); - imovi(rn(ireg), 0x80000000); - if (r0 == r1) { - freg = jit_get_reg(jit_class_fpr|jit_class_xpr); - movdlxr(rn(freg), rn(ireg)); - xorpsr(r0, rn(freg)); - jit_unget_reg(freg); - } - else { - movdlxr(r0, rn(ireg)); - xorpsr(r0, r1); - } - jit_unget_reg(ireg); -} - -static void -_sse_negr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t freg, ireg; - ireg = jit_get_reg(jit_class_gpr); - imovi(rn(ireg), 0x80000000); - if (r0 == r1) { - freg = jit_get_reg(jit_class_fpr|jit_class_xpr); - movdlxr(rn(freg), rn(ireg)); - pslq(rn(freg), 32); - xorpdr(r0, rn(freg)); - jit_unget_reg(freg); - } - else { - movdlxr(r0, rn(ireg)); - pslq(r0, 32); - xorpdr(r0, r1); - } - jit_unget_reg(ireg); -} - -static void -_ssecmp(jit_state_t *_jit, jit_bool_t d, jit_int32_t code, - jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_bool_t rc; - jit_int32_t reg; - if ((rc = reg8_p(r0))) - reg = r0; - else { - reg = _RAX_REGNO; - movr(r0, reg); - } - ixorr(reg, reg); - if (d) - ucomisdr(r2, r1); - else - ucomissr(r2, r1); - cc(code, reg); - if (!rc) - xchgr(r0, reg); -} - -static void -_sse_movr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 != r1) - ssexr(0xf3, X86_SSE_MOV, r0, r1); -} - -static void -_sse_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0) -{ - union { - jit_int32_t i; - jit_float32_t f; - } data; - jit_int32_t reg; - jit_bool_t ldi; - - data.f = *i0; - if (data.f == 0.0 && !(data.i & 0x80000000)) - xorpsr(r0, r0); - else { - ldi = !_jitc->no_data; -#if __X64 - /* if will allocate a register for offset, just use immediate */ - if (ldi && !sse_address_p(i0)) - ldi = 0; -#endif - if (ldi) - sse_ldi_f(r0, (jit_word_t)i0); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), data.i); - movdlxr(r0, rn(reg)); - jit_unget_reg(reg); - } - } -} - -fopi(lt) -fopi(le) - -static void -_sse_eqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_bool_t rc; - jit_int32_t reg; - jit_word_t jp_code; - if ((rc = reg8_p(r0))) - reg = r0; - else { - reg = _RAX_REGNO; - movr(r0, _RAX_REGNO); - } - ixorr(reg, reg); - ucomissr(r2, r1); - jpes(0); - jp_code = _jit->pc.w; - cc(X86_CC_E, reg); - patch_rel_char(jp_code, _jit->pc.w); - if (!rc) - xchgr(r0, reg); -} - -fopi(eq) -fopi(ge) -fopi(gt) - -static void -_sse_ner_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_bool_t rc; - jit_int32_t reg; - jit_word_t jp_code; - if ((rc = reg8_p(r0))) - reg = r0; - else { - reg = _RAX_REGNO; - movr(r0, _RAX_REGNO); - } - imovi(reg, 1); - ucomissr(r2, r1); - jpes(0); - jp_code = _jit->pc.w; - cc(X86_CC_NE, reg); - patch_rel_char(jp_code, _jit->pc.w); - if (!rc) - xchgr(r0, reg); -} - -fopi(ne) -fopi(unlt) - -static void -_sse_unler_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - ssecmpf(X86_CC_NA, r0, r2, r1); -} - -fopi(unle) - -static void -_sse_uneqr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - ssecmpf(X86_CC_E, r0, r1, r2); -} - -fopi(uneq) - -static void -_sse_unger_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - ssecmpf(X86_CC_NA, r0, r1, r2); -} - -fopi(unge) -fopi(ungt) - -static void -_sse_ltgtr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - ixorr(r0, r0); - else - ssecmpf(X86_CC_NE, r0, r1, r2); -} - -fopi(ltgt) -fopi(ord) -fopi(unord) - -static void -_sse_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (sse_address_p(i0)) - movssmr(i0, _NOREG, _NOREG, _SCL1, r0); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - sse_ldr_f(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_sse_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - jit_int32_t reg; - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r1, r2); - sse_ldr_f(r0, rn(reg)); - jit_unget_reg(reg); -#else - movssmr(0, r1, r2, _SCL1, r0); -#endif -} - -static void -_sse_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) - movssmr(i0, r1, _NOREG, _SCL1, r0); - else { - reg = jit_get_reg(jit_class_gpr); -#if __X64_32 - addi(rn(reg), r1, i0); - sse_ldr_f(r0, rn(reg)); -#else - movi(rn(reg), i0); - sse_ldxr_f(r0, r1, rn(reg)); -#endif - jit_unget_reg(reg); - } -} - -static void -_sse_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) -{ - jit_int32_t reg; - if (sse_address_p(i0)) - movssrm(r0, i0, _NOREG, _NOREG, _SCL1); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - sse_str_f(rn(reg), r0); - jit_unget_reg(reg); - } -} - -static void -_sse_stxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - jit_int32_t reg; - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r0, r1); - sse_str_f(rn(reg), r2); - jit_unget_reg(reg); -#else - movssrm(r2, 0, r0, r1, _SCL1); -#endif -} - -static void -_sse_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) - movssrm(r1, i0, r0, _NOREG, _SCL1); - else { - reg = jit_get_reg(jit_class_gpr); -#if __X64_32 - addi(rn(reg), r0, i0); - sse_str_f(rn(reg), r1); -#else - movi(rn(reg), i0); - sse_stxr_f(rn(reg), r0, r1); -#endif - jit_unget_reg(reg); - } -} - -static jit_word_t -_sse_bltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r1, r0); - ja(i0); - return (_jit->pc.w); -} -fbopi(lt) - -static jit_word_t -_sse_bler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r1, r0); - jae(i0); - return (_jit->pc.w); -} -fbopi(le) - -static jit_word_t -_sse_beqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_word_t jp_code; - ucomissr(r0, r1); - jps(0); - jp_code = _jit->pc.w; - je(i0); - patch_rel_char(jp_code, _jit->pc.w); - return (_jit->pc.w); -} -fbopi(eq) - -static jit_word_t -_sse_bger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r0, r1); - jae(i0); - return (_jit->pc.w); -} -fbopi(ge) - -static jit_word_t -_sse_bgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r0, r1); - ja(i0); - return (_jit->pc.w); -} -fbopi(gt) - -static jit_word_t -_sse_bner_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_word_t jp_code; - jit_word_t jz_code; - ucomissr(r0, r1); - jps(0); - jp_code = _jit->pc.w; - jzs(0); - jz_code = _jit->pc.w; - patch_rel_char(jp_code, _jit->pc.w); - jmpi(i0); - patch_rel_char(jz_code, _jit->pc.w); - return (_jit->pc.w); -} -fbopi(ne) - -static jit_word_t -_sse_bunltr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r0, r1); - jnae(i0); - return (_jit->pc.w); -} -fbopi(unlt) - -static jit_word_t -_sse_bunler_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - jmpi(i0); - else { - ucomissr(r0, r1); - jna(i0); - } - return (_jit->pc.w); -} -fbopi(unle) - -static jit_word_t -_sse_buneqr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - jmpi(i0); - else { - ucomissr(r0, r1); - je(i0); - } - return (_jit->pc.w); -} -fbopi(uneq) - -static jit_word_t -_sse_bunger_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - jmpi(i0); - else { - ucomissr(r1, r0); - jna(i0); - } - return (_jit->pc.w); -} -fbopi(unge) - -static jit_word_t -_sse_bungtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r1, r0); - jnae(i0); - return (_jit->pc.w); -} -fbopi(ungt) - -static jit_word_t -_sse_bltgtr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r0, r1); - jne(i0); - return (_jit->pc.w); -} -fbopi(ltgt) - -static jit_word_t -_sse_bordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r0, r1); - jnp(i0); - return (_jit->pc.w); -} -fbopi(ord) - -static jit_word_t -_sse_bunordr_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomissr(r0, r1); - jp(i0); - return (_jit->pc.w); -} -fbopi(unord) - -dopi(lt) -dopi(le) - -static void -_sse_eqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_bool_t rc; - jit_int32_t reg; - jit_word_t jp_code; - if ((rc = reg8_p(r0))) - reg = r0; - else { - reg = _RAX_REGNO; - movr(r0, _RAX_REGNO); - } - ixorr(reg, reg); - ucomisdr(r2, r1); - jpes(0); - jp_code = _jit->pc.w; - cc(X86_CC_E, reg); - patch_rel_char(jp_code, _jit->pc.w); - if (!rc) - xchgr(r0, reg); -} - -dopi(eq) -dopi(ge) -dopi(gt) - -static void -_sse_ner_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - jit_bool_t rc; - jit_int32_t reg; - jit_word_t jp_code; - if ((rc = reg8_p(r0))) - reg = r0; - else { - reg = _RAX_REGNO; - movr(r0, _RAX_REGNO); - } - imovi(reg, 1); - ucomisdr(r2, r1); - jpes(0); - jp_code = _jit->pc.w; - cc(X86_CC_NE, reg); - patch_rel_char(jp_code, _jit->pc.w); - if (!rc) - xchgr(r0, reg); -} - -dopi(ne) -dopi(unlt) - -static void -_sse_unler_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - ssecmpd(X86_CC_NA, r0, r2, r1); -} - -dopi(unle) - -static void -_sse_uneqr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - ssecmpd(X86_CC_E, r0, r1, r2); -} - -dopi(uneq) - -static void -_sse_unger_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - movi(r0, 1); - else - ssecmpd(X86_CC_NA, r0, r1, r2); -} - -dopi(unge) -dopi(ungt) - -static void -_sse_ltgtr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ - if (r1 == r2) - ixorr(r0, r0); - else - ssecmpd(X86_CC_NE, r0, r1, r2); -} - -dopi(ltgt) -dopi(ord) -dopi(unord) - -static void -_sse_movr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 != r1) - ssexr(0xf2, X86_SSE_MOV, r0, r1); -} - -static void -_sse_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0) -{ - union { - jit_int32_t ii[2]; - jit_word_t w; - jit_float64_t d; - } data; - jit_int32_t reg; - jit_bool_t ldi; - - data.d = *i0; - if (data.d == 0.0 && !(data.ii[1] & 0x80000000)) - xorpdr(r0, r0); - else { - ldi = !_jitc->no_data; -#if __X64 - /* if will allocate a register for offset, just use immediate */ - if (ldi && !sse_address_p(i0)) - ldi = 0; -#endif - if (ldi) - sse_ldi_d(r0, (jit_word_t)i0); - else { - reg = jit_get_reg(jit_class_gpr); -#if __X64 && !__X64_32 - movi(rn(reg), data.w); - movdqxr(r0, rn(reg)); - jit_unget_reg(reg); -#else - movi(rn(reg), data.ii[0]); - stxi_i(CVT_OFFSET, _RBP_REGNO, rn(reg)); - movi(rn(reg), data.ii[1]); - stxi_i(CVT_OFFSET + 4, _RBP_REGNO, rn(reg)); - jit_unget_reg(reg); - sse_ldxi_d(r0, _RBP_REGNO, CVT_OFFSET); -#endif - } - } -} - -static void -_sse_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0) -{ - jit_int32_t reg; - if (sse_address_p(i0)) - movsdmr(i0, _NOREG, _NOREG, _SCL1, r0); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - sse_ldr_d(r0, rn(reg)); - jit_unget_reg(reg); - } -} - -static void -_sse_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - jit_int32_t reg; - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r1, r2); - sse_ldr_d(r0, rn(reg)); - jit_unget_reg(reg); -#else - movsdmr(0, r1, r2, _SCL1, r0); -#endif -} - -static void -_sse_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) - movsdmr(i0, r1, _NOREG, _SCL1, r0); - else { - reg = jit_get_reg(jit_class_gpr); -#if __X64_32 - addi(rn(reg), r1, i0); - sse_ldr_d(r0, rn(reg)); -#else - movi(rn(reg), i0); - sse_ldxr_d(r0, r1, rn(reg)); -#endif - jit_unget_reg(reg); - } -} - -static void -_sse_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0) -{ - jit_int32_t reg; - if (sse_address_p(i0)) - movsdrm(r0, i0, _NOREG, _NOREG, _SCL1); - else { - reg = jit_get_reg(jit_class_gpr); - movi(rn(reg), i0); - sse_str_d(rn(reg), r0); - jit_unget_reg(reg); - } -} - -static void -_sse_stxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2) -{ -#if __X64_32 - jit_int32_t reg; - reg = jit_get_reg(jit_class_gpr); - addr(rn(reg), r0, r1); - sse_str_d(rn(reg), r2); - jit_unget_reg(reg); -#else - movsdrm(r2, 0, r0, r1, _SCL1); -#endif -} - -static void -_sse_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_int32_t reg; - if (can_sign_extend_int_p(i0)) - movsdrm(r1, i0, r0, _NOREG, _SCL1); - else { - reg = jit_get_reg(jit_class_gpr); -#if __X64_32 - addi(rn(reg), r0, i0); - sse_str_d(rn(reg), r1); -#else - movi(rn(reg), i0); - sse_stxr_f(rn(reg), r0, r1); -#endif - jit_unget_reg(reg); - } -} - -static jit_word_t -_sse_bltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r1, r0); - ja(i0); - return (_jit->pc.w); -} -dbopi(lt) - -static jit_word_t -_sse_bler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r1, r0); - jae(i0); - return (_jit->pc.w); -} -dbopi(le) - -static jit_word_t -_sse_beqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_word_t jp_code; - ucomisdr(r0, r1); - jps(0); - jp_code = _jit->pc.w; - je(i0); - patch_rel_char(jp_code, _jit->pc.w); - return (_jit->pc.w); -} -dbopi(eq) - -static jit_word_t -_sse_bger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r0, r1); - jae(i0); - return (_jit->pc.w); -} -dbopi(ge) - -static jit_word_t -_sse_bgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r0, r1); - ja(i0); - return (_jit->pc.w); -} -dbopi(gt) - -static jit_word_t -_sse_bner_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - jit_word_t jp_code; - jit_word_t jz_code; - ucomisdr(r0, r1); - jps(0); - jp_code = _jit->pc.w; - jzs(0); - jz_code = _jit->pc.w; - patch_rel_char(jp_code, _jit->pc.w); - jmpi(i0); - patch_rel_char(jz_code, _jit->pc.w); - return (_jit->pc.w); -} -dbopi(ne) - -static jit_word_t -_sse_bunltr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r0, r1); - jnae(i0); - return (_jit->pc.w); -} -dbopi(unlt) - -static jit_word_t -_sse_bunler_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - jmpi(i0); - else { - ucomisdr(r0, r1); - jna(i0); - } - return (_jit->pc.w); -} -dbopi(unle) - -static jit_word_t -_sse_buneqr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - jmpi(i0); - else { - ucomisdr(r0, r1); - je(i0); - } - return (_jit->pc.w); -} -dbopi(uneq) - -static jit_word_t -_sse_bunger_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - if (r0 == r1) - jmpi(i0); - else { - ucomisdr(r1, r0); - jna(i0); - } - return (_jit->pc.w); -} -dbopi(unge) - -static jit_word_t -_sse_bungtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r1, r0); - jnae(i0); - return (_jit->pc.w); -} -dbopi(ungt) - -static jit_word_t -_sse_bltgtr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r0, r1); - jne(i0); - return (_jit->pc.w); -} -dbopi(ltgt) - -static jit_word_t -_sse_bordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r0, r1); - jnp(i0); - return (_jit->pc.w); -} -dbopi(ord) - -static jit_word_t -_sse_bunordr_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1) -{ - ucomisdr(r0, r1); - jp(i0); - return (_jit->pc.w); -} -dbopi(unord) -# undef fopi -# undef fbopi -# undef bopi -# undef dbopi -# undef fpr_bopi -# undef fpr_opi -#endif diff --git a/libguile/lightning/lib/jit_x86-sz.c b/libguile/lightning/lib/jit_x86-sz.c deleted file mode 100644 index 7183e6de4..000000000 --- a/libguile/lightning/lib/jit_x86-sz.c +++ /dev/null @@ -1,1610 +0,0 @@ - -#if __X32 -#define JIT_INSTR_MAX 42 - 0, /* data */ - 0, /* live */ - 3, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 3, /* label */ - 34, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 3, /* va_start */ - 5, /* va_arg */ - 7, /* va_arg_d */ - 0, /* va_end */ - 3, /* addr */ - 6, /* addi */ - 4, /* addcr */ - 6, /* addci */ - 4, /* addxr */ - 5, /* addxi */ - 4, /* subr */ - 6, /* subi */ - 6, /* subcr */ - 6, /* subci */ - 6, /* subxr */ - 5, /* subxi */ - 8, /* rsbi */ - 5, /* mulr */ - 7, /* muli */ - 20, /* qmulr */ - 25, /* qmuli */ - 20, /* qmulr_u */ - 25, /* qmuli_u */ - 21, /* divr */ - 24, /* divi */ - 22, /* divr_u */ - 25, /* divi_u */ - 23, /* qdivr */ - 26, /* qdivi */ - 24, /* qdivr_u */ - 27, /* qdivi_u */ - 21, /* remr */ - 24, /* remi */ - 22, /* remr_u */ - 25, /* remi_u */ - 4, /* andr */ - 7, /* andi */ - 4, /* orr */ - 8, /* ori */ - 4, /* xorr */ - 8, /* xori */ - 16, /* lshr */ - 7, /* lshi */ - 16, /* rshr */ - 5, /* rshi */ - 16, /* rshr_u */ - 5, /* rshi_u */ - 4, /* negr */ - 4, /* comr */ - 15, /* ltr */ - 16, /* lti */ - 15, /* ltr_u */ - 16, /* lti_u */ - 15, /* ler */ - 16, /* lei */ - 15, /* ler_u */ - 16, /* lei_u */ - 15, /* eqr */ - 16, /* eqi */ - 15, /* ger */ - 16, /* gei */ - 15, /* ger_u */ - 16, /* gei_u */ - 15, /* gtr */ - 16, /* gti */ - 15, /* gtr_u */ - 16, /* gti_u */ - 15, /* ner */ - 16, /* nei */ - 2, /* movr */ - 5, /* movi */ - 11, /* extr_c */ - 11, /* extr_uc */ - 3, /* extr_s */ - 3, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 7, /* htonr_us */ - 4, /* htonr_ui */ - 0, /* htonr_ul */ - 3, /* ldr_c */ - 7, /* ldi_c */ - 3, /* ldr_uc */ - 7, /* ldi_uc */ - 3, /* ldr_s */ - 7, /* ldi_s */ - 3, /* ldr_us */ - 7, /* ldi_us */ - 2, /* ldr_i */ - 6, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 4, /* ldxr_c */ - 7, /* ldxi_c */ - 4, /* ldxr_uc */ - 7, /* ldxi_uc */ - 4, /* ldxr_s */ - 7, /* ldxi_s */ - 4, /* ldxr_us */ - 7, /* ldxi_us */ - 3, /* ldxr_i */ - 6, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 10, /* str_c */ - 14, /* sti_c */ - 3, /* str_s */ - 7, /* sti_s */ - 2, /* str_i */ - 6, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 11, /* stxr_c */ - 11, /* stxi_c */ - 4, /* stxr_s */ - 7, /* stxi_s */ - 3, /* stxr_i */ - 6, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 8, /* bltr */ - 9, /* blti */ - 8, /* bltr_u */ - 9, /* blti_u */ - 8, /* bler */ - 12, /* blei */ - 8, /* bler_u */ - 9, /* blei_u */ - 8, /* beqr */ - 12, /* beqi */ - 8, /* bger */ - 9, /* bgei */ - 8, /* bger_u */ - 9, /* bgei_u */ - 8, /* bgtr */ - 9, /* bgti */ - 8, /* bgtr_u */ - 9, /* bgti_u */ - 8, /* bner */ - 12, /* bnei */ - 8, /* bmsr */ - 12, /* bmsi */ - 8, /* bmcr */ - 12, /* bmci */ - 8, /* boaddr */ - 9, /* boaddi */ - 8, /* boaddr_u */ - 9, /* boaddi_u */ - 8, /* bxaddr */ - 9, /* bxaddi */ - 8, /* bxaddr_u */ - 9, /* bxaddi_u */ - 8, /* bosubr */ - 9, /* bosubi */ - 8, /* bosubr_u */ - 9, /* bosubi_u */ - 8, /* bxsubr */ - 9, /* bxsubi */ - 8, /* bxsubr_u */ - 9, /* bxsubi_u */ - 2, /* jmpr */ - 5, /* jmpi */ - 2, /* callr */ - 5, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 24, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 8, /* addr_f */ - 19, /* addi_f */ - 12, /* subr_f */ - 19, /* subi_f */ - 21, /* rsbi_f */ - 8, /* mulr_f */ - 19, /* muli_f */ - 12, /* divr_f */ - 19, /* divi_f */ - 12, /* negr_f */ - 12, /* absr_f */ - 6, /* sqrtr_f */ - 13, /* ltr_f */ - 27, /* lti_f */ - 13, /* ler_f */ - 27, /* lei_f */ - 15, /* eqr_f */ - 29, /* eqi_f */ - 13, /* ger_f */ - 27, /* gei_f */ - 13, /* gtr_f */ - 27, /* gti_f */ - 18, /* ner_f */ - 32, /* nei_f */ - 13, /* unltr_f */ - 27, /* unlti_f */ - 13, /* unler_f */ - 27, /* unlei_f */ - 13, /* uneqr_f */ - 27, /* uneqi_f */ - 13, /* unger_f */ - 27, /* ungei_f */ - 13, /* ungtr_f */ - 27, /* ungti_f */ - 13, /* ltgtr_f */ - 27, /* ltgti_f */ - 13, /* ordr_f */ - 27, /* ordi_f */ - 13, /* unordr_f */ - 27, /* unordi_f */ - 8, /* truncr_f_i */ - 0, /* truncr_f_l */ - 8, /* extr_f */ - 4, /* extr_d_f */ - 10, /* movr_f */ - 19, /* movi_f */ - 4, /* ldr_f */ - 8, /* ldi_f */ - 5, /* ldxr_f */ - 8, /* ldxi_f */ - 6, /* str_f */ - 10, /* sti_f */ - 7, /* stxr_f */ - 8, /* stxi_f */ - 10, /* bltr_f */ - 23, /* blti_f */ - 10, /* bler_f */ - 23, /* blei_f */ - 12, /* beqr_f */ - 25, /* beqi_f */ - 10, /* bger_f */ - 23, /* bgei_f */ - 10, /* bgtr_f */ - 23, /* bgti_f */ - 13, /* bner_f */ - 26, /* bnei_f */ - 10, /* bunltr_f */ - 23, /* bunlti_f */ - 10, /* bunler_f */ - 23, /* bunlei_f */ - 10, /* buneqr_f */ - 23, /* buneqi_f */ - 10, /* bunger_f */ - 23, /* bungei_f */ - 10, /* bungtr_f */ - 23, /* bungti_f */ - 10, /* bltgtr_f */ - 23, /* bltgti_f */ - 10, /* bordr_f */ - 23, /* bordi_f */ - 10, /* bunordr_f */ - 23, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 10, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 8, /* addr_d */ - 26, /* addi_d */ - 12, /* subr_d */ - 26, /* subi_d */ - 30, /* rsbi_d */ - 8, /* mulr_d */ - 26, /* muli_d */ - 12, /* divr_d */ - 26, /* divi_d */ - 18, /* negr_d */ - 13, /* absr_d */ - 6, /* sqrtr_d */ - 13, /* ltr_d */ - 37, /* lti_d */ - 13, /* ler_d */ - 37, /* lei_d */ - 15, /* eqr_d */ - 39, /* eqi_d */ - 13, /* ger_d */ - 37, /* gei_d */ - 13, /* gtr_d */ - 37, /* gti_d */ - 18, /* ner_d */ - 42, /* nei_d */ - 13, /* unltr_d */ - 37, /* unlti_d */ - 13, /* unler_d */ - 37, /* unlei_d */ - 13, /* uneqr_d */ - 37, /* uneqi_d */ - 13, /* unger_d */ - 37, /* ungei_d */ - 13, /* ungtr_d */ - 37, /* ungti_d */ - 13, /* ltgtr_d */ - 37, /* ltgti_d */ - 13, /* ordr_d */ - 37, /* ordi_d */ - 13, /* unordr_d */ - 37, /* unordi_d */ - 8, /* truncr_d_i */ - 0, /* truncr_d_l */ - 8, /* extr_d */ - 4, /* extr_f_d */ - 10, /* movr_d */ - 24, /* movi_d */ - 4, /* ldr_d */ - 8, /* ldi_d */ - 5, /* ldxr_d */ - 8, /* ldxi_d */ - 6, /* str_d */ - 10, /* sti_d */ - 7, /* stxr_d */ - 8, /* stxi_d */ - 10, /* bltr_d */ - 28, /* blti_d */ - 10, /* bler_d */ - 28, /* blei_d */ - 12, /* beqr_d */ - 30, /* beqi_d */ - 10, /* bger_d */ - 28, /* bgei_d */ - 10, /* bgtr_d */ - 28, /* bgti_d */ - 13, /* bner_d */ - 31, /* bnei_d */ - 10, /* bunltr_d */ - 28, /* bunlti_d */ - 10, /* bunler_d */ - 28, /* bunlei_d */ - 10, /* buneqr_d */ - 28, /* buneqi_d */ - 10, /* bunger_d */ - 28, /* bungei_d */ - 10, /* bungtr_d */ - 28, /* bungti_d */ - 10, /* bltgtr_d */ - 28, /* bltgti_d */ - 10, /* bordr_d */ - 28, /* bordi_d */ - 10, /* bunordr_d */ - 28, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 10, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif - -#if __X64 -#if __CYGWIN__ -#define JIT_INSTR_MAX 130 - 0, /* data */ - 0, /* live */ - 6, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 7, /* label */ - 130, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 7, /* va_start */ - 7, /* va_arg */ - 9, /* va_arg_d */ - 0, /* va_end */ - 4, /* addr */ - 13, /* addi */ - 6, /* addcr */ - 13, /* addci */ - 6, /* addxr */ - 7, /* addxi */ - 6, /* subr */ - 13, /* subi */ - 9, /* subcr */ - 13, /* subci */ - 9, /* subxr */ - 7, /* subxi */ - 16, /* rsbi */ - 7, /* mulr */ - 14, /* muli */ - 20, /* qmulr */ - 30, /* qmuli */ - 20, /* qmulr_u */ - 30, /* qmuli_u */ - 22, /* divr */ - 29, /* divi */ - 23, /* divr_u */ - 30, /* divi_u */ - 25, /* qdivr */ - 32, /* qdivi */ - 26, /* qdivr_u */ - 33, /* qdivi_u */ - 22, /* remr */ - 29, /* remi */ - 23, /* remr_u */ - 30, /* remi_u */ - 6, /* andr */ - 13, /* andi */ - 6, /* orr */ - 13, /* ori */ - 6, /* xorr */ - 13, /* xori */ - 9, /* lshr */ - 8, /* lshi */ - 9, /* rshr */ - 7, /* rshi */ - 9, /* rshr_u */ - 7, /* rshi_u */ - 6, /* negr */ - 6, /* comr */ - 13, /* ltr */ - 14, /* lti */ - 13, /* ltr_u */ - 14, /* lti_u */ - 13, /* ler */ - 14, /* lei */ - 13, /* ler_u */ - 14, /* lei_u */ - 13, /* eqr */ - 14, /* eqi */ - 13, /* ger */ - 14, /* gei */ - 13, /* ger_u */ - 14, /* gei_u */ - 13, /* gtr */ - 14, /* gti */ - 13, /* gtr_u */ - 14, /* gti_u */ - 13, /* ner */ - 14, /* nei */ - 3, /* movr */ - 10, /* movi */ - 7, /* extr_c */ - 7, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 3, /* extr_i */ - 3, /* extr_ui */ - 9, /* htonr_us */ - 6, /* htonr_ui */ - 6, /* htonr_ul */ - 4, /* ldr_c */ - 15, /* ldi_c */ - 4, /* ldr_uc */ - 15, /* ldi_uc */ - 4, /* ldr_s */ - 15, /* ldi_s */ - 4, /* ldr_us */ - 15, /* ldi_us */ - 3, /* ldr_i */ - 14, /* ldi_i */ - 3, /* ldr_ui */ - 14, /* ldi_ui */ - 3, /* ldr_l */ - 14, /* ldi_l */ - 5, /* ldxr_c */ - 8, /* ldxi_c */ - 5, /* ldxr_uc */ - 8, /* ldxi_uc */ - 5, /* ldxr_s */ - 8, /* ldxi_s */ - 5, /* ldxr_us */ - 8, /* ldxi_us */ - 4, /* ldxr_i */ - 7, /* ldxi_i */ - 4, /* ldxr_ui */ - 6, /* ldxi_ui */ - 4, /* ldxr_l */ - 7, /* ldxi_l */ - 6, /* str_c */ - 17, /* sti_c */ - 4, /* str_s */ - 15, /* sti_s */ - 3, /* str_i */ - 14, /* sti_i */ - 3, /* str_l */ - 14, /* sti_l */ - 7, /* stxr_c */ - 7, /* stxi_c */ - 5, /* stxr_s */ - 7, /* stxi_s */ - 4, /* stxr_i */ - 6, /* stxi_i */ - 4, /* stxr_l */ - 8, /* stxi_l */ - 9, /* bltr */ - 10, /* blti */ - 9, /* bltr_u */ - 10, /* blti_u */ - 9, /* bler */ - 13, /* blei */ - 9, /* bler_u */ - 10, /* blei_u */ - 9, /* beqr */ - 19, /* beqi */ - 9, /* bger */ - 10, /* bgei */ - 9, /* bger_u */ - 10, /* bgei_u */ - 9, /* bgtr */ - 10, /* bgti */ - 9, /* bgtr_u */ - 10, /* bgti_u */ - 9, /* bner */ - 19, /* bnei */ - 9, /* bmsr */ - 13, /* bmsi */ - 9, /* bmcr */ - 13, /* bmci */ - 9, /* boaddr */ - 10, /* boaddi */ - 9, /* boaddr_u */ - 10, /* boaddi_u */ - 9, /* bxaddr */ - 10, /* bxaddi */ - 9, /* bxaddr_u */ - 10, /* bxaddi_u */ - 9, /* bosubr */ - 10, /* bosubi */ - 9, /* bosubr_u */ - 10, /* bosubi_u */ - 9, /* bxsubr */ - 10, /* bxsubi */ - 9, /* bxsubr_u */ - 10, /* bxsubi_u */ - 3, /* jmpr */ - 5, /* jmpi */ - 3, /* callr */ - 13, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 124, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 10, /* addr_f */ - 21, /* addi_f */ - 15, /* subr_f */ - 21, /* subi_f */ - 27, /* rsbi_f */ - 10, /* mulr_f */ - 21, /* muli_f */ - 15, /* divr_f */ - 21, /* divi_f */ - 15, /* negr_f */ - 15, /* absr_f */ - 5, /* sqrtr_f */ - 16, /* ltr_f */ - 31, /* lti_f */ - 16, /* ler_f */ - 31, /* lei_f */ - 18, /* eqr_f */ - 33, /* eqi_f */ - 16, /* ger_f */ - 31, /* gei_f */ - 16, /* gtr_f */ - 31, /* gti_f */ - 20, /* ner_f */ - 35, /* nei_f */ - 16, /* unltr_f */ - 31, /* unlti_f */ - 16, /* unler_f */ - 31, /* unlei_f */ - 16, /* uneqr_f */ - 31, /* uneqi_f */ - 16, /* unger_f */ - 31, /* ungei_f */ - 16, /* ungtr_f */ - 31, /* ungti_f */ - 16, /* ltgtr_f */ - 31, /* ltgti_f */ - 16, /* ordr_f */ - 31, /* ordi_f */ - 16, /* unordr_f */ - 31, /* unordi_f */ - 5, /* truncr_f_i */ - 5, /* truncr_f_l */ - 5, /* extr_f */ - 5, /* extr_d_f */ - 5, /* movr_f */ - 15, /* movi_f */ - 5, /* ldr_f */ - 16, /* ldi_f */ - 6, /* ldxr_f */ - 8, /* ldxi_f */ - 5, /* str_f */ - 16, /* sti_f */ - 6, /* stxr_f */ - 9, /* stxi_f */ - 10, /* bltr_f */ - 21, /* blti_f */ - 10, /* bler_f */ - 24, /* blei_f */ - 12, /* beqr_f */ - 27, /* beqi_f */ - 10, /* bger_f */ - 25, /* bgei_f */ - 10, /* bgtr_f */ - 25, /* bgti_f */ - 13, /* bner_f */ - 28, /* bnei_f */ - 10, /* bunltr_f */ - 25, /* bunlti_f */ - 10, /* bunler_f */ - 25, /* bunlei_f */ - 10, /* buneqr_f */ - 25, /* buneqi_f */ - 10, /* bunger_f */ - 25, /* bungei_f */ - 10, /* bungtr_f */ - 25, /* bungti_f */ - 10, /* bltgtr_f */ - 25, /* bltgti_f */ - 10, /* bordr_f */ - 25, /* bordi_f */ - 10, /* bunordr_f */ - 25, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 10, /* addr_d */ - 25, /* addi_d */ - 15, /* subr_d */ - 25, /* subi_d */ - 27, /* rsbi_d */ - 10, /* mulr_d */ - 25, /* muli_d */ - 15, /* divr_d */ - 25, /* divi_d */ - 22, /* negr_d */ - 16, /* absr_d */ - 5, /* sqrtr_d */ - 17, /* ltr_d */ - 32, /* lti_d */ - 17, /* ler_d */ - 32, /* lei_d */ - 19, /* eqr_d */ - 34, /* eqi_d */ - 17, /* ger_d */ - 32, /* gei_d */ - 17, /* gtr_d */ - 32, /* gti_d */ - 21, /* ner_d */ - 36, /* nei_d */ - 17, /* unltr_d */ - 32, /* unlti_d */ - 17, /* unler_d */ - 32, /* unlei_d */ - 17, /* uneqr_d */ - 32, /* uneqi_d */ - 17, /* unger_d */ - 32, /* ungei_d */ - 17, /* ungtr_d */ - 32, /* ungti_d */ - 17, /* ltgtr_d */ - 32, /* ltgti_d */ - 17, /* ordr_d */ - 32, /* ordi_d */ - 17, /* unordr_d */ - 32, /* unordi_d */ - 5, /* truncr_d_i */ - 5, /* truncr_d_l */ - 5, /* extr_d */ - 5, /* extr_f_d */ - 5, /* movr_d */ - 15, /* movi_d */ - 5, /* ldr_d */ - 16, /* ldi_d */ - 6, /* ldxr_d */ - 8, /* ldxi_d */ - 5, /* str_d */ - 16, /* sti_d */ - 6, /* stxr_d */ - 9, /* stxi_d */ - 11, /* bltr_d */ - 26, /* blti_d */ - 11, /* bler_d */ - 26, /* blei_d */ - 13, /* beqr_d */ - 28, /* beqi_d */ - 11, /* bger_d */ - 26, /* bgei_d */ - 11, /* bgtr_d */ - 26, /* bgti_d */ - 14, /* bner_d */ - 29, /* bnei_d */ - 11, /* bunltr_d */ - 26, /* bunlti_d */ - 11, /* bunler_d */ - 26, /* bunlei_d */ - 11, /* buneqr_d */ - 26, /* buneqi_d */ - 11, /* bunger_d */ - 26, /* bungei_d */ - 11, /* bungtr_d */ - 26, /* bungti_d */ - 11, /* bltgtr_d */ - 26, /* bltgti_d */ - 11, /* bordr_d */ - 26, /* bordi_d */ - 11, /* bunordr_d */ - 26, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#else - -# if __X64_32 -#define JIT_INSTR_MAX 108 - 0, /* data */ - 0, /* live */ - 3, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 3, /* label */ - 108, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 41, /* va_start */ - 45, /* va_arg */ - 54, /* va_arg_d */ - 0, /* va_end */ - 5, /* addr */ - 7, /* addi */ - 6, /* addcr */ - 7, /* addci */ - 6, /* addxr */ - 7, /* addxi */ - 6, /* subr */ - 7, /* subi */ - 9, /* subcr */ - 7, /* subci */ - 9, /* subxr */ - 7, /* subxi */ - 10, /* rsbi */ - 7, /* mulr */ - 8, /* muli */ - 18, /* qmulr */ - 24, /* qmuli */ - 18, /* qmulr_u */ - 24, /* qmuli_u */ - 19, /* divr */ - 22, /* divi */ - 20, /* divr_u */ - 23, /* divi_u */ - 22, /* qdivr */ - 25, /* qdivi */ - 23, /* qdivr_u */ - 26, /* qdivi_u */ - 19, /* remr */ - 22, /* remi */ - 20, /* remr_u */ - 23, /* remi_u */ - 6, /* andr */ - 9, /* andi */ - 6, /* orr */ - 10, /* ori */ - 6, /* xorr */ - 10, /* xori */ - 9, /* lshr */ - 8, /* lshi */ - 9, /* rshr */ - 7, /* rshi */ - 9, /* rshr_u */ - 7, /* rshi_u */ - 6, /* negr */ - 6, /* comr */ - 13, /* ltr */ - 14, /* lti */ - 13, /* ltr_u */ - 14, /* lti_u */ - 13, /* ler */ - 14, /* lei */ - 13, /* ler_u */ - 14, /* lei_u */ - 13, /* eqr */ - 14, /* eqi */ - 13, /* ger */ - 14, /* gei */ - 13, /* ger_u */ - 14, /* gei_u */ - 13, /* gtr */ - 14, /* gti */ - 13, /* gtr_u */ - 14, /* gti_u */ - 13, /* ner */ - 14, /* nei */ - 3, /* movr */ - 6, /* movi */ - 7, /* extr_c */ - 7, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 0, /* extr_i */ - 0, /* extr_ui */ - 9, /* htonr_us */ - 6, /* htonr_ui */ - 0, /* htonr_ul */ - 5, /* ldr_c */ - 9, /* ldi_c */ - 5, /* ldr_uc */ - 9, /* ldi_uc */ - 5, /* ldr_s */ - 9, /* ldi_s */ - 5, /* ldr_us */ - 9, /* ldi_us */ - 4, /* ldr_i */ - 8, /* ldi_i */ - 0, /* ldr_ui */ - 0, /* ldi_ui */ - 0, /* ldr_l */ - 0, /* ldi_l */ - 9, /* ldxr_c */ - 7, /* ldxi_c */ - 9, /* ldxr_uc */ - 7, /* ldxi_uc */ - 9, /* ldxr_s */ - 7, /* ldxi_s */ - 9, /* ldxr_us */ - 7, /* ldxi_us */ - 8, /* ldxr_i */ - 7, /* ldxi_i */ - 0, /* ldxr_ui */ - 0, /* ldxi_ui */ - 0, /* ldxr_l */ - 0, /* ldxi_l */ - 7, /* str_c */ - 11, /* sti_c */ - 5, /* str_s */ - 9, /* sti_s */ - 4, /* str_i */ - 8, /* sti_i */ - 0, /* str_l */ - 0, /* sti_l */ - 12, /* stxr_c */ - 7, /* stxi_c */ - 10, /* stxr_s */ - 7, /* stxi_s */ - 9, /* stxr_i */ - 6, /* stxi_i */ - 0, /* stxr_l */ - 0, /* stxi_l */ - 9, /* bltr */ - 10, /* blti */ - 9, /* bltr_u */ - 10, /* blti_u */ - 9, /* bler */ - 12, /* blei */ - 9, /* bler_u */ - 10, /* blei_u */ - 9, /* beqr */ - 13, /* beqi */ - 9, /* bger */ - 10, /* bgei */ - 9, /* bger_u */ - 10, /* bgei_u */ - 9, /* bgtr */ - 10, /* bgti */ - 9, /* bgtr_u */ - 10, /* bgti_u */ - 9, /* bner */ - 13, /* bnei */ - 9, /* bmsr */ - 13, /* bmsi */ - 9, /* bmcr */ - 13, /* bmci */ - 9, /* boaddr */ - 10, /* boaddi */ - 9, /* boaddr_u */ - 10, /* boaddi_u */ - 9, /* bxaddr */ - 10, /* bxaddi */ - 9, /* bxaddr_u */ - 10, /* bxaddi_u */ - 9, /* bosubr */ - 10, /* bosubi */ - 9, /* bosubr_u */ - 10, /* bosubi_u */ - 9, /* bxsubr */ - 10, /* bxsubi */ - 9, /* bxsubr_u */ - 10, /* bxsubi_u */ - 2, /* jmpr */ - 5, /* jmpi */ - 3, /* callr */ - 9, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 34, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 10, /* addr_f */ - 21, /* addi_f */ - 15, /* subr_f */ - 21, /* subi_f */ - 26, /* rsbi_f */ - 10, /* mulr_f */ - 21, /* muli_f */ - 15, /* divr_f */ - 21, /* divi_f */ - 15, /* negr_f */ - 15, /* absr_f */ - 5, /* sqrtr_f */ - 15, /* ltr_f */ - 26, /* lti_f */ - 15, /* ler_f */ - 26, /* lei_f */ - 17, /* eqr_f */ - 28, /* eqi_f */ - 15, /* ger_f */ - 26, /* gei_f */ - 15, /* gtr_f */ - 26, /* gti_f */ - 20, /* ner_f */ - 31, /* nei_f */ - 15, /* unltr_f */ - 26, /* unlti_f */ - 15, /* unler_f */ - 26, /* unlei_f */ - 15, /* uneqr_f */ - 26, /* uneqi_f */ - 15, /* unger_f */ - 26, /* ungei_f */ - 15, /* ungtr_f */ - 26, /* ungti_f */ - 15, /* ltgtr_f */ - 26, /* ltgti_f */ - 15, /* ordr_f */ - 26, /* ordi_f */ - 15, /* unordr_f */ - 26, /* unordi_f */ - 5, /* truncr_f_i */ - 0, /* truncr_f_l */ - 5, /* extr_f */ - 5, /* extr_d_f */ - 5, /* movr_f */ - 11, /* movi_f */ - 6, /* ldr_f */ - 10, /* ldi_f */ - 11, /* ldxr_f */ - 9, /* ldxi_f */ - 6, /* str_f */ - 10, /* sti_f */ - 11, /* stxr_f */ - 9, /* stxi_f */ - 10, /* bltr_f */ - 21, /* blti_f */ - 10, /* bler_f */ - 21, /* blei_f */ - 12, /* beqr_f */ - 23, /* beqi_f */ - 10, /* bger_f */ - 21, /* bgei_f */ - 10, /* bgtr_f */ - 21, /* bgti_f */ - 13, /* bner_f */ - 24, /* bnei_f */ - 10, /* bunltr_f */ - 21, /* bunlti_f */ - 10, /* bunler_f */ - 21, /* bunlei_f */ - 10, /* buneqr_f */ - 21, /* buneqi_f */ - 10, /* bunger_f */ - 21, /* bungei_f */ - 10, /* bungtr_f */ - 21, /* bungti_f */ - 10, /* bltgtr_f */ - 21, /* bltgti_f */ - 10, /* bordr_f */ - 21, /* bordi_f */ - 10, /* bunordr_f */ - 21, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 10, /* addr_d */ - 33, /* addi_d */ - 15, /* subr_d */ - 33, /* subi_d */ - 38, /* rsbi_d */ - 10, /* mulr_d */ - 33, /* muli_d */ - 15, /* divr_d */ - 33, /* divi_d */ - 22, /* negr_d */ - 16, /* absr_d */ - 5, /* sqrtr_d */ - 16, /* ltr_d */ - 39, /* lti_d */ - 16, /* ler_d */ - 39, /* lei_d */ - 18, /* eqr_d */ - 41, /* eqi_d */ - 16, /* ger_d */ - 39, /* gei_d */ - 16, /* gtr_d */ - 39, /* gti_d */ - 21, /* ner_d */ - 44, /* nei_d */ - 16, /* unltr_d */ - 39, /* unlti_d */ - 16, /* unler_d */ - 39, /* unlei_d */ - 16, /* uneqr_d */ - 39, /* uneqi_d */ - 16, /* unger_d */ - 39, /* ungei_d */ - 16, /* ungtr_d */ - 39, /* ungti_d */ - 16, /* ltgtr_d */ - 39, /* ltgti_d */ - 16, /* ordr_d */ - 39, /* ordi_d */ - 16, /* unordr_d */ - 39, /* unordi_d */ - 5, /* truncr_d_i */ - 0, /* truncr_d_l */ - 5, /* extr_d */ - 5, /* extr_f_d */ - 5, /* movr_d */ - 23, /* movi_d */ - 6, /* ldr_d */ - 10, /* ldi_d */ - 11, /* ldxr_d */ - 9, /* ldxi_d */ - 6, /* str_d */ - 10, /* sti_d */ - 11, /* stxr_d */ - 9, /* stxi_d */ - 11, /* bltr_d */ - 34, /* blti_d */ - 11, /* bler_d */ - 34, /* blei_d */ - 13, /* beqr_d */ - 36, /* beqi_d */ - 11, /* bger_d */ - 34, /* bgei_d */ - 11, /* bgtr_d */ - 34, /* bgti_d */ - 14, /* bner_d */ - 37, /* bnei_d */ - 11, /* bunltr_d */ - 34, /* bunlti_d */ - 11, /* bunler_d */ - 34, /* bunlei_d */ - 11, /* buneqr_d */ - 34, /* buneqi_d */ - 11, /* bunger_d */ - 34, /* bungei_d */ - 11, /* bungtr_d */ - 34, /* bungti_d */ - 11, /* bltgtr_d */ - 34, /* bltgti_d */ - 11, /* bordr_d */ - 34, /* bordi_d */ - 11, /* bunordr_d */ - 34, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ - -# else -#define JIT_INSTR_MAX 115 - 0, /* data */ - 0, /* live */ - 6, /* align */ - 0, /* save */ - 0, /* load */ - 0, /* #name */ - 0, /* #note */ - 7, /* label */ - 115, /* prolog */ - 0, /* ellipsis */ - 0, /* va_push */ - 0, /* allocai */ - 0, /* allocar */ - 0, /* arg */ - 0, /* getarg_c */ - 0, /* getarg_uc */ - 0, /* getarg_s */ - 0, /* getarg_us */ - 0, /* getarg_i */ - 0, /* getarg_ui */ - 0, /* getarg_l */ - 0, /* putargr */ - 0, /* putargi */ - 42, /* va_start */ - 41, /* va_arg */ - 50, /* va_arg_d */ - 0, /* va_end */ - 5, /* addr */ - 13, /* addi */ - 6, /* addcr */ - 13, /* addci */ - 6, /* addxr */ - 7, /* addxi */ - 6, /* subr */ - 13, /* subi */ - 9, /* subcr */ - 13, /* subci */ - 9, /* subxr */ - 7, /* subxi */ - 16, /* rsbi */ - 7, /* mulr */ - 14, /* muli */ - 20, /* qmulr */ - 30, /* qmuli */ - 20, /* qmulr_u */ - 30, /* qmuli_u */ - 22, /* divr */ - 29, /* divi */ - 23, /* divr_u */ - 30, /* divi_u */ - 25, /* qdivr */ - 32, /* qdivi */ - 26, /* qdivr_u */ - 33, /* qdivi_u */ - 22, /* remr */ - 29, /* remi */ - 23, /* remr_u */ - 30, /* remi_u */ - 6, /* andr */ - 13, /* andi */ - 6, /* orr */ - 13, /* ori */ - 6, /* xorr */ - 13, /* xori */ - 9, /* lshr */ - 8, /* lshi */ - 9, /* rshr */ - 7, /* rshi */ - 9, /* rshr_u */ - 7, /* rshi_u */ - 6, /* negr */ - 6, /* comr */ - 13, /* ltr */ - 14, /* lti */ - 13, /* ltr_u */ - 14, /* lti_u */ - 13, /* ler */ - 14, /* lei */ - 13, /* ler_u */ - 14, /* lei_u */ - 13, /* eqr */ - 14, /* eqi */ - 13, /* ger */ - 14, /* gei */ - 13, /* ger_u */ - 14, /* gei_u */ - 13, /* gtr */ - 14, /* gti */ - 13, /* gtr_u */ - 14, /* gti_u */ - 13, /* ner */ - 14, /* nei */ - 3, /* movr */ - 10, /* movi */ - 4, /* extr_c */ - 4, /* extr_uc */ - 4, /* extr_s */ - 4, /* extr_us */ - 3, /* extr_i */ - 3, /* extr_ui */ - 9, /* htonr_us */ - 6, /* htonr_ui */ - 6, /* htonr_ul */ - 5, /* ldr_c */ - 9, /* ldi_c */ - 5, /* ldr_uc */ - 9, /* ldi_uc */ - 5, /* ldr_s */ - 9, /* ldi_s */ - 5, /* ldr_us */ - 9, /* ldi_us */ - 4, /* ldr_i */ - 8, /* ldi_i */ - 4, /* ldr_ui */ - 8, /* ldi_ui */ - 4, /* ldr_l */ - 8, /* ldi_l */ - 6, /* ldxr_c */ - 8, /* ldxi_c */ - 6, /* ldxr_uc */ - 8, /* ldxi_uc */ - 6, /* ldxr_s */ - 8, /* ldxi_s */ - 6, /* ldxr_us */ - 8, /* ldxi_us */ - 5, /* ldxr_i */ - 7, /* ldxi_i */ - 5, /* ldxr_ui */ - 6, /* ldxi_ui */ - 5, /* ldxr_l */ - 7, /* ldxi_l */ - 4, /* str_c */ - 8, /* sti_c */ - 5, /* str_s */ - 9, /* sti_s */ - 4, /* str_i */ - 8, /* sti_i */ - 4, /* str_l */ - 8, /* sti_l */ - 5, /* stxr_c */ - 6, /* stxi_c */ - 6, /* stxr_s */ - 7, /* stxi_s */ - 5, /* stxr_i */ - 6, /* stxi_i */ - 5, /* stxr_l */ - 7, /* stxi_l */ - 9, /* bltr */ - 10, /* blti */ - 9, /* bltr_u */ - 10, /* blti_u */ - 9, /* bler */ - 13, /* blei */ - 9, /* bler_u */ - 10, /* blei_u */ - 9, /* beqr */ - 19, /* beqi */ - 9, /* bger */ - 10, /* bgei */ - 9, /* bger_u */ - 10, /* bgei_u */ - 9, /* bgtr */ - 10, /* bgti */ - 9, /* bgtr_u */ - 10, /* bgti_u */ - 9, /* bner */ - 19, /* bnei */ - 9, /* bmsr */ - 13, /* bmsi */ - 9, /* bmcr */ - 13, /* bmci */ - 9, /* boaddr */ - 10, /* boaddi */ - 9, /* boaddr_u */ - 10, /* boaddi_u */ - 9, /* bxaddr */ - 10, /* bxaddi */ - 9, /* bxaddr_u */ - 10, /* bxaddi_u */ - 9, /* bosubr */ - 10, /* bosubi */ - 9, /* bosubr_u */ - 10, /* bosubi_u */ - 9, /* bxsubr */ - 10, /* bxsubi */ - 9, /* bxsubr_u */ - 10, /* bxsubi_u */ - 3, /* jmpr */ - 5, /* jmpi */ - 3, /* callr */ - 13, /* calli */ - 0, /* prepare */ - 0, /* pushargr */ - 0, /* pushargi */ - 0, /* finishr */ - 0, /* finishi */ - 0, /* ret */ - 0, /* retr */ - 0, /* reti */ - 0, /* retval_c */ - 0, /* retval_uc */ - 0, /* retval_s */ - 0, /* retval_us */ - 0, /* retval_i */ - 0, /* retval_ui */ - 0, /* retval_l */ - 37, /* epilog */ - 0, /* arg_f */ - 0, /* getarg_f */ - 0, /* putargr_f */ - 0, /* putargi_f */ - 10, /* addr_f */ - 21, /* addi_f */ - 15, /* subr_f */ - 21, /* subi_f */ - 30, /* rsbi_f */ - 10, /* mulr_f */ - 21, /* muli_f */ - 15, /* divr_f */ - 21, /* divi_f */ - 15, /* negr_f */ - 15, /* absr_f */ - 5, /* sqrtr_f */ - 11, /* ltr_f */ - 26, /* lti_f */ - 11, /* ler_f */ - 26, /* lei_f */ - 13, /* eqr_f */ - 28, /* eqi_f */ - 11, /* ger_f */ - 26, /* gei_f */ - 11, /* gtr_f */ - 26, /* gti_f */ - 16, /* ner_f */ - 31, /* nei_f */ - 11, /* unltr_f */ - 26, /* unlti_f */ - 11, /* unler_f */ - 26, /* unlei_f */ - 11, /* uneqr_f */ - 26, /* uneqi_f */ - 11, /* unger_f */ - 26, /* ungei_f */ - 11, /* ungtr_f */ - 26, /* ungti_f */ - 11, /* ltgtr_f */ - 26, /* ltgti_f */ - 11, /* ordr_f */ - 26, /* ordi_f */ - 11, /* unordr_f */ - 26, /* unordi_f */ - 5, /* truncr_f_i */ - 5, /* truncr_f_l */ - 5, /* extr_f */ - 5, /* extr_d_f */ - 5, /* movr_f */ - 15, /* movi_f */ - 6, /* ldr_f */ - 10, /* ldi_f */ - 7, /* ldxr_f */ - 9, /* ldxi_f */ - 6, /* str_f */ - 10, /* sti_f */ - 7, /* stxr_f */ - 9, /* stxi_f */ - 10, /* bltr_f */ - 21, /* blti_f */ - 10, /* bler_f */ - 25, /* blei_f */ - 12, /* beqr_f */ - 27, /* beqi_f */ - 10, /* bger_f */ - 25, /* bgei_f */ - 10, /* bgtr_f */ - 25, /* bgti_f */ - 13, /* bner_f */ - 28, /* bnei_f */ - 10, /* bunltr_f */ - 25, /* bunlti_f */ - 10, /* bunler_f */ - 25, /* bunlei_f */ - 10, /* buneqr_f */ - 25, /* buneqi_f */ - 10, /* bunger_f */ - 25, /* bungei_f */ - 10, /* bungtr_f */ - 25, /* bungti_f */ - 10, /* bltgtr_f */ - 25, /* bltgti_f */ - 10, /* bordr_f */ - 25, /* bordi_f */ - 10, /* bunordr_f */ - 25, /* bunordi_f */ - 0, /* pushargr_f */ - 0, /* pushargi_f */ - 0, /* retr_f */ - 0, /* reti_f */ - 0, /* retval_f */ - 0, /* arg_d */ - 0, /* getarg_d */ - 0, /* putargr_d */ - 0, /* putargi_d */ - 10, /* addr_d */ - 25, /* addi_d */ - 15, /* subr_d */ - 25, /* subi_d */ - 30, /* rsbi_d */ - 10, /* mulr_d */ - 25, /* muli_d */ - 15, /* divr_d */ - 25, /* divi_d */ - 22, /* negr_d */ - 16, /* absr_d */ - 5, /* sqrtr_d */ - 12, /* ltr_d */ - 27, /* lti_d */ - 12, /* ler_d */ - 27, /* lei_d */ - 14, /* eqr_d */ - 29, /* eqi_d */ - 12, /* ger_d */ - 27, /* gei_d */ - 12, /* gtr_d */ - 27, /* gti_d */ - 17, /* ner_d */ - 32, /* nei_d */ - 12, /* unltr_d */ - 27, /* unlti_d */ - 12, /* unler_d */ - 27, /* unlei_d */ - 12, /* uneqr_d */ - 27, /* uneqi_d */ - 12, /* unger_d */ - 27, /* ungei_d */ - 12, /* ungtr_d */ - 27, /* ungti_d */ - 12, /* ltgtr_d */ - 27, /* ltgti_d */ - 12, /* ordr_d */ - 27, /* ordi_d */ - 12, /* unordr_d */ - 27, /* unordi_d */ - 5, /* truncr_d_i */ - 5, /* truncr_d_l */ - 5, /* extr_d */ - 5, /* extr_f_d */ - 5, /* movr_d */ - 15, /* movi_d */ - 6, /* ldr_d */ - 10, /* ldi_d */ - 7, /* ldxr_d */ - 9, /* ldxi_d */ - 6, /* str_d */ - 10, /* sti_d */ - 7, /* stxr_d */ - 9, /* stxi_d */ - 11, /* bltr_d */ - 26, /* blti_d */ - 11, /* bler_d */ - 26, /* blei_d */ - 13, /* beqr_d */ - 28, /* beqi_d */ - 11, /* bger_d */ - 26, /* bgei_d */ - 11, /* bgtr_d */ - 26, /* bgti_d */ - 14, /* bner_d */ - 29, /* bnei_d */ - 11, /* bunltr_d */ - 26, /* bunlti_d */ - 11, /* bunler_d */ - 26, /* bunlei_d */ - 11, /* buneqr_d */ - 26, /* buneqi_d */ - 11, /* bunger_d */ - 26, /* bungei_d */ - 11, /* bungtr_d */ - 26, /* bungti_d */ - 11, /* bltgtr_d */ - 26, /* bltgti_d */ - 11, /* bordr_d */ - 26, /* bordi_d */ - 11, /* bunordr_d */ - 26, /* bunordi_d */ - 0, /* pushargr_d */ - 0, /* pushargi_d */ - 0, /* retr_d */ - 0, /* reti_d */ - 0, /* retval_d */ - 0, /* movr_w_f */ - 0, /* movr_ww_d */ - 0, /* movr_w_d */ - 0, /* movr_f_w */ - 0, /* movi_f_w */ - 0, /* movr_d_ww */ - 0, /* movi_d_ww */ - 0, /* movr_d_w */ - 0, /* movi_d_w */ -#endif /* __CYGWIN__ */ -# endif /* __X64_32 */ -#endif /* __X64 */ diff --git a/libguile/lightning/lib/jit_x86.c b/libguile/lightning/lib/jit_x86.c deleted file mode 100644 index 6d6a9ed12..000000000 --- a/libguile/lightning/lib/jit_x86.c +++ /dev/null @@ -1,2264 +0,0 @@ -/* - * Copyright (C) 2012-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#include <lightning.h> -#include <lightning/jit_private.h> - -#if __X32 -# define jit_arg_reg_p(i) 0 -# define jit_arg_f_reg_p(i) 0 -# define stack_framesize 20 -# define stack_adjust 12 -# define CVT_OFFSET -12 -# define REAL_WORDSIZE 4 -# define va_gp_increment 4 -# define va_fp_increment 8 -#else -# if __CYGWIN__ -# define jit_arg_reg_p(i) ((i) >= 0 && (i) < 4) -# define jit_arg_f_reg_p(i) jit_arg_reg_p(i) -# define stack_framesize 152 -# define va_fp_increment 8 -# else -# define jit_arg_reg_p(i) ((i) >= 0 && (i) < 6) -# define jit_arg_f_reg_p(i) ((i) >= 0 && (i) < 8) -# define stack_framesize 56 -# define first_gp_argument rdi -# define first_gp_offset offsetof(jit_va_list_t, rdi) -# define first_gp_from_offset(gp) ((gp) / 8) -# define last_gp_argument r9 -# define va_gp_max_offset \ - (offsetof(jit_va_list_t, r9) - offsetof(jit_va_list_t, rdi) + 8) -# define first_fp_argument xmm0 -# define first_fp_offset offsetof(jit_va_list_t, xmm0) -# define last_fp_argument xmm7 -# define va_fp_max_offset \ - (offsetof(jit_va_list_t, xmm7) - offsetof(jit_va_list_t, rdi) + 16) -# define va_fp_increment 16 -# define first_fp_from_offset(fp) (((fp) - va_gp_max_offset) / 16) -# endif -# define va_gp_increment 8 -# define stack_adjust 8 -# define CVT_OFFSET -8 -# define REAL_WORDSIZE 8 -#endif - -/* - * Types - */ -#if __X32 || __CYGWIN__ -typedef jit_pointer_t jit_va_list_t; -#else -typedef struct jit_va_list { - jit_int32_t gpoff; - jit_int32_t fpoff; - jit_pointer_t over; - jit_pointer_t save; - /* Declared explicitly as int64 for the x32 abi */ - jit_int64_t rdi; - jit_int64_t rsi; - jit_int64_t rdx; - jit_int64_t rcx; - jit_int64_t r8; - jit_int64_t r9; - jit_float64_t xmm0; - jit_float64_t _up0; - jit_float64_t xmm1; - jit_float64_t _up1; - jit_float64_t xmm2; - jit_float64_t _up2; - jit_float64_t xmm3; - jit_float64_t _up3; - jit_float64_t xmm4; - jit_float64_t _up4; - jit_float64_t xmm5; - jit_float64_t _up5; - jit_float64_t xmm6; - jit_float64_t _up6; - jit_float64_t xmm7; - jit_float64_t _up7; -} jit_va_list_t; -#endif - -/* - * Prototypes - */ -#define patch(instr, node) _patch(_jit, instr, node) -static void _patch(jit_state_t*,jit_word_t,jit_node_t*); -#define sse_from_x87_f(r0, r1) _sse_from_x87_f(_jit, r0, r1) -static void _sse_from_x87_f(jit_state_t*,jit_int32_t,jit_int32_t); -#define sse_from_x87_d(r0, r1) _sse_from_x87_d(_jit, r0, r1) -static void _sse_from_x87_d(jit_state_t*,jit_int32_t,jit_int32_t); -#define x87_from_sse_f(r0, r1) _x87_from_sse_f(_jit, r0, r1) -static void _x87_from_sse_f(jit_state_t*,jit_int32_t,jit_int32_t); -#define x87_from_sse_d(r0, r1) _x87_from_sse_d(_jit, r0, r1) -static void _x87_from_sse_d(jit_state_t*,jit_int32_t,jit_int32_t); - -#define PROTO 1 -# include "jit_x86-cpu.c" -# include "jit_x86-sse.c" -# include "jit_x86-x87.c" -#undef PROTO - -/* - * Initialization - */ -jit_cpu_t jit_cpu; -jit_register_t _rvs[] = { -#if __X32 - { rc(gpr) | rc(rg8) | 0, "%eax" }, - { rc(gpr) | rc(rg8) | 1, "%ecx" }, - { rc(gpr) | rc(rg8) | 2, "%edx" }, - { rc(sav) | rc(rg8) | rc(gpr) | 3, "%ebx" }, - { rc(sav) | rc(gpr) | 6, "%esi" }, - { rc(sav) | rc(gpr) | 7, "%edi" }, - { rc(sav) | 4, "%esp" }, - { rc(sav) | 5, "%ebp" }, - { rc(xpr) | rc(fpr) | 0, "%xmm0" }, - { rc(xpr) | rc(fpr) | 1, "%xmm1" }, - { rc(xpr) | rc(fpr) | 2, "%xmm2" }, - { rc(xpr) | rc(fpr) | 3, "%xmm3" }, - { rc(xpr) | rc(fpr) | 4, "%xmm4" }, - { rc(xpr) | rc(fpr) | 5, "%xmm5" }, - { rc(xpr) | rc(fpr) | 6, "%xmm6" }, - { rc(xpr) | rc(fpr) | 7, "%xmm7" }, - { rc(fpr) | 0, "st(0)" }, - { rc(fpr) | 1, "st(1)" }, - { rc(fpr) | 2, "st(2)" }, - { rc(fpr) | 3, "st(3)" }, - { rc(fpr) | 4, "st(4)" }, - { rc(fpr) | 5, "st(5)" }, - { rc(fpr) | 6, "st(6)" }, - { rc(fpr) | 7, "st(7)" }, -#else -# if __CYGWIN__ - { rc(gpr) | rc(rg8) | 0, "%rax" }, - { rc(gpr) | rc(rg8) | rc(rg8) | 10, "%r10" }, - { rc(gpr) | rc(rg8) | rc(rg8) | 11, "%r11" }, - { rc(sav) | rc(rg8) | rc(gpr) | 3, "%rbx" }, - { rc(sav) | rc(gpr) | 7, "%rdi" }, - { rc(sav) | rc(gpr) | 6, "%rsi" }, - { rc(sav) | rc(gpr) | 12, "%r12" }, - { rc(sav) | rc(gpr) | 13, "%r13" }, - { rc(sav) | rc(gpr) | 14, "%r14" }, - { rc(sav) | rc(gpr) | 15, "%r15" }, - { rc(arg) | rc(rg8) | rc(gpr) | 9, "%r9" }, - { rc(arg) | rc(rg8) | rc(gpr) | 8, "%r8" }, - { rc(arg) | rc(rg8) | rc(gpr) | 2, "%rdx" }, - { rc(arg) | rc(rg8) | rc(gpr) | 1, "%rcx" }, - { rc(sav) | 4, "%rsp" }, - { rc(sav) | 5, "%rbp" }, - { rc(xpr) | rc(fpr) | 4, "%xmm4" }, - { rc(xpr) | rc(fpr) | 5, "%xmm5" }, - { rc(sav) | rc(xpr) | rc(fpr) | 6, "%xmm6" }, - { rc(sav) | rc(xpr) | rc(fpr) | 7, "%xmm7" }, - { rc(sav) | rc(xpr) | rc(fpr) | 8, "%xmm8" }, - { rc(sav) | rc(xpr) | rc(fpr) | 9, "%xmm9" }, - { rc(sav) | rc(xpr) | rc(fpr) | 10, "%xmm10" }, - { rc(sav) | rc(xpr) | rc(fpr) | 11, "%xmm11" }, - { rc(sav) | rc(xpr) | rc(fpr) | 12, "%xmm12" }, - { rc(sav) | rc(xpr) | rc(fpr) | 13, "%xmm13" }, - { rc(sav) | rc(xpr) | rc(fpr) | 14, "%xmm14" }, - { rc(sav) | rc(xpr) | rc(fpr) | 15, "%xmm15" }, - { rc(xpr) | rc(arg) | rc(fpr) | 3, "%xmm3" }, - { rc(xpr) | rc(arg) | rc(fpr) | 2, "%xmm2" }, - { rc(xpr) | rc(arg) | rc(fpr) | 1, "%xmm1" }, - { rc(xpr) | rc(arg) | rc(fpr) | 0, "%xmm0" }, -#else - /* %rax is a pseudo flag argument for varargs functions */ - { rc(arg) | rc(gpr) | rc(rg8) | 0, "%rax" }, - { rc(gpr) | rc(rg8) | 10, "%r10" }, - { rc(gpr) | rc(rg8) | 11, "%r11" }, - { rc(sav) | rc(gpr) | rc(rg8) | 12, "%r12" }, - { rc(sav) | rc(rg8) | rc(gpr) | 3, "%rbx" }, - { rc(sav) | rc(rg8) | rc(gpr) | 13, "%r13" }, - { rc(sav) | rc(rg8) | rc(gpr) | 14, "%r14" }, - { rc(sav) | rc(rg8) | rc(gpr) | 15, "%r15" }, - { rc(arg) | rc(rg8) | rc(gpr) | 9, "%r9" }, - { rc(arg) | rc(rg8) | rc(gpr) | 8, "%r8" }, - { rc(arg) | rc(rg8) | rc(gpr) | 1, "%rcx" }, - { rc(arg) | rc(rg8) | rc(gpr) | 2, "%rdx" }, - { rc(arg) | rc(rg8) | rc(gpr) | 6, "%rsi" }, - { rc(arg) | rc(rg8) | rc(gpr) | 7, "%rdi" }, - { rc(sav) | 4, "%rsp" }, - { rc(sav) | 5, "%rbp" }, - { rc(xpr) | rc(fpr) | 8, "%xmm8" }, - { rc(xpr) | rc(fpr) | 9, "%xmm9" }, - { rc(xpr) | rc(fpr) | 10, "%xmm10" }, - { rc(xpr) | rc(fpr) | 11, "%xmm11" }, - { rc(xpr) | rc(fpr) | 12, "%xmm12" }, - { rc(xpr) | rc(fpr) | 13, "%xmm13" }, - { rc(xpr) | rc(fpr) | 14, "%xmm14" }, - { rc(xpr) | rc(fpr) | 15, "%xmm15" }, - { rc(xpr) | rc(arg) | rc(fpr) | 7, "%xmm7" }, - { rc(xpr) | rc(arg) | rc(fpr) | 6, "%xmm6" }, - { rc(xpr) | rc(arg) | rc(fpr) | 5, "%xmm5" }, - { rc(xpr) | rc(arg) | rc(fpr) | 4, "%xmm4" }, - { rc(xpr) | rc(arg) | rc(fpr) | 3, "%xmm3" }, - { rc(xpr) | rc(arg) | rc(fpr) | 2, "%xmm2" }, - { rc(xpr) | rc(arg) | rc(fpr) | 1, "%xmm1" }, - { rc(xpr) | rc(arg) | rc(fpr) | 0, "%xmm0" }, -# endif - { rc(fpr) | 0, "st(0)" }, - { rc(fpr) | 1, "st(1)" }, - { rc(fpr) | 2, "st(2)" }, - { rc(fpr) | 3, "st(3)" }, - { rc(fpr) | 4, "st(4)" }, - { rc(fpr) | 5, "st(5)" }, - { rc(fpr) | 6, "st(6)" }, - { rc(fpr) | 7, "st(7)" }, -#endif - { _NOREG, "<none>" }, -}; - -/* - * Implementation - */ -void -jit_get_cpu(void) -{ - union { - struct { - jit_uint32_t sse3 : 1; - jit_uint32_t pclmulqdq : 1; - jit_uint32_t dtes64 : 1; /* amd reserved */ - jit_uint32_t monitor : 1; - jit_uint32_t ds_cpl : 1; /* amd reserved */ - jit_uint32_t vmx : 1; /* amd reserved */ - jit_uint32_t smx : 1; /* amd reserved */ - jit_uint32_t est : 1; /* amd reserved */ - jit_uint32_t tm2 : 1; /* amd reserved */ - jit_uint32_t ssse3 : 1; - jit_uint32_t cntx_id : 1; /* amd reserved */ - jit_uint32_t __reserved0 : 1; - jit_uint32_t fma : 1; - jit_uint32_t cmpxchg16b : 1; - jit_uint32_t xtpr : 1; /* amd reserved */ - jit_uint32_t pdcm : 1; /* amd reserved */ - jit_uint32_t __reserved1 : 1; - jit_uint32_t pcid : 1; /* amd reserved */ - jit_uint32_t dca : 1; /* amd reserved */ - jit_uint32_t sse4_1 : 1; - jit_uint32_t sse4_2 : 1; - jit_uint32_t x2apic : 1; /* amd reserved */ - jit_uint32_t movbe : 1; /* amd reserved */ - jit_uint32_t popcnt : 1; - jit_uint32_t tsc : 1; /* amd reserved */ - jit_uint32_t aes : 1; - jit_uint32_t xsave : 1; - jit_uint32_t osxsave : 1; - jit_uint32_t avx : 1; - jit_uint32_t __reserved2 : 1; /* amd F16C */ - jit_uint32_t __reserved3 : 1; - jit_uint32_t __alwayszero : 1; /* amd RAZ */ - } bits; - jit_uword_t cpuid; - } ecx; - union { - struct { - jit_uint32_t fpu : 1; - jit_uint32_t vme : 1; - jit_uint32_t de : 1; - jit_uint32_t pse : 1; - jit_uint32_t tsc : 1; - jit_uint32_t msr : 1; - jit_uint32_t pae : 1; - jit_uint32_t mce : 1; - jit_uint32_t cmpxchg8b : 1; - jit_uint32_t apic : 1; - jit_uint32_t __reserved0 : 1; - jit_uint32_t sep : 1; - jit_uint32_t mtrr : 1; - jit_uint32_t pge : 1; - jit_uint32_t mca : 1; - jit_uint32_t cmov : 1; - jit_uint32_t pat : 1; - jit_uint32_t pse36 : 1; - jit_uint32_t psn : 1; /* amd reserved */ - jit_uint32_t clfsh : 1; - jit_uint32_t __reserved1 : 1; - jit_uint32_t ds : 1; /* amd reserved */ - jit_uint32_t acpi : 1; /* amd reserved */ - jit_uint32_t mmx : 1; - jit_uint32_t fxsr : 1; - jit_uint32_t sse : 1; - jit_uint32_t sse2 : 1; - jit_uint32_t ss : 1; /* amd reserved */ - jit_uint32_t htt : 1; - jit_uint32_t tm : 1; /* amd reserved */ - jit_uint32_t __reserved2 : 1; - jit_uint32_t pbe : 1; /* amd reserved */ - } bits; - jit_uword_t cpuid; - } edx; -#if __X32 - int ac, flags; -#endif - jit_uword_t eax, ebx; - -#if __X32 - /* adapted from glibc __sysconf */ - __asm__ volatile ("pushfl;\n\t" - "popl %0;\n\t" - "movl $0x240000, %1;\n\t" - "xorl %0, %1;\n\t" - "pushl %1;\n\t" - "popfl;\n\t" - "pushfl;\n\t" - "popl %1;\n\t" - "xorl %0, %1;\n\t" - "pushl %0;\n\t" - "popfl" - : "=r" (flags), "=r" (ac)); - - /* i386 or i486 without cpuid */ - if ((ac & (1 << 21)) == 0) - /* probably without x87 as well */ - return; -#endif - - /* query %eax = 1 function */ -#if __X32 || __X64_32 - __asm__ volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" -#else - __asm__ volatile ("xchgq %%rbx, %1; cpuid; xchgq %%rbx, %1" -#endif - : "=a" (eax), "=r" (ebx), - "=c" (ecx.cpuid), "=d" (edx.cpuid) - : "0" (1)); - - jit_cpu.fpu = edx.bits.fpu; - jit_cpu.cmpxchg8b = edx.bits.cmpxchg8b; - jit_cpu.cmov = edx.bits.cmov; - jit_cpu.mmx = edx.bits.mmx; - jit_cpu.sse = edx.bits.sse; - jit_cpu.sse2 = edx.bits.sse2; - jit_cpu.sse3 = ecx.bits.sse3; - jit_cpu.pclmulqdq = ecx.bits.pclmulqdq; - jit_cpu.ssse3 = ecx.bits.ssse3; - jit_cpu.fma = ecx.bits.fma; - jit_cpu.cmpxchg16b = ecx.bits.cmpxchg16b; - jit_cpu.sse4_1 = ecx.bits.sse4_1; - jit_cpu.sse4_2 = ecx.bits.sse4_2; - jit_cpu.movbe = ecx.bits.movbe; - jit_cpu.popcnt = ecx.bits.popcnt; - jit_cpu.aes = ecx.bits.aes; - jit_cpu.avx = ecx.bits.avx; - - /* query %eax = 0x80000001 function */ -#if __X64 -# if __X64_32 - __asm__ volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" -# else - __asm__ volatile ("xchgq %%rbx, %1; cpuid; xchgq %%rbx, %1" -# endif - : "=a" (eax), "=r" (ebx), - "=c" (ecx.cpuid), "=d" (edx.cpuid) - : "0" (0x80000001)); - jit_cpu.lahf = ecx.cpuid & 1; -#endif -} - -void -_jit_init(jit_state_t *_jit) -{ -#if __X32 - jit_int32_t regno; - static jit_bool_t first = 1; -#endif - - _jitc->reglen = jit_size(_rvs) - 1; -#if __X32 - if (first) { - if (!jit_cpu.sse2) { - for (regno = _jitc->reglen; regno >= 0; regno--) { - if (_rvs[regno].spec & jit_class_xpr) - _rvs[regno].spec = 0; - } - } - first = 0; - } -#endif -} - -void -_jit_prolog(jit_state_t *_jit) -{ - jit_int32_t offset; - - if (_jitc->function) - jit_epilog(); - assert(jit_regset_cmp_ui(&_jitc->regarg, 0) == 0); - jit_regset_set_ui(&_jitc->regsav, 0); - offset = _jitc->functions.offset; - if (offset >= _jitc->functions.length) { - jit_realloc((jit_pointer_t *)&_jitc->functions.ptr, - _jitc->functions.length * sizeof(jit_function_t), - (_jitc->functions.length + 16) * sizeof(jit_function_t)); - _jitc->functions.length += 16; - } - _jitc->function = _jitc->functions.ptr + _jitc->functions.offset++; - _jitc->function->self.size = stack_framesize; - _jitc->function->self.argi = _jitc->function->self.argf = - _jitc->function->self.aoff = _jitc->function->self.alen = 0; - /* sse/x87 conversion */ - _jitc->function->self.aoff = CVT_OFFSET; - _jitc->function->self.call = jit_call_default; - jit_alloc((jit_pointer_t *)&_jitc->function->regoff, - _jitc->reglen * sizeof(jit_int32_t)); - - /* _no_link here does not mean the jit_link() call can be removed - * by rewriting as: - * _jitc->function->prolog = jit_new_node(jit_code_prolog); - */ - _jitc->function->prolog = jit_new_node_no_link(jit_code_prolog); - jit_link(_jitc->function->prolog); - _jitc->function->prolog->w.w = offset; - _jitc->function->epilog = jit_new_node_no_link(jit_code_epilog); - /* u: label value - * v: offset in blocks vector - * w: offset in functions vector - */ - _jitc->function->epilog->w.w = offset; - - jit_regset_new(&_jitc->function->regset); -} - -jit_int32_t -_jit_allocai(jit_state_t *_jit, jit_int32_t length) -{ - assert(_jitc->function); - switch (length) { - case 0: case 1: break; - case 2: _jitc->function->self.aoff &= -2; break; - case 3: case 4: _jitc->function->self.aoff &= -4; break; - default: _jitc->function->self.aoff &= -8; break; - } - _jitc->function->self.aoff -= length; - - /* jit_allocai() may be called from jit_x86-cpu.c, and force a function - * generation restart on some conditions: div/rem and qmul/qdiv, due - * to registers constraints. - * The check is to prevent an assertion of a jit_xyz() being called - * during code generation, and attempting to add a node to the tail - * of the current IR generation. */ - if (!_jitc->realize) { - jit_inc_synth_ww(allocai, _jitc->function->self.aoff, length); - jit_dec_synth(); - } - - return (_jitc->function->self.aoff); -} - -void -_jit_allocar(jit_state_t *_jit, jit_int32_t u, jit_int32_t v) -{ - jit_int32_t reg; - assert(_jitc->function); - jit_inc_synth_ww(allocar, u, v); - if (!_jitc->function->allocar) { - _jitc->function->aoffoff = jit_allocai(sizeof(jit_int32_t)); - _jitc->function->allocar = 1; - } - reg = jit_get_reg(jit_class_gpr); - jit_negr(reg, v); - jit_andi(reg, reg, -16); - jit_ldxi_i(u, JIT_FP, _jitc->function->aoffoff); - jit_addr(u, u, reg); - jit_addr(JIT_SP, JIT_SP, reg); - jit_stxi_i(_jitc->function->aoffoff, JIT_FP, u); - jit_unget_reg(reg); - jit_dec_synth(); -} - -void -_jit_ret(jit_state_t *_jit) -{ - jit_node_t *instr; - assert(_jitc->function); - jit_inc_synth(ret); - /* jump to epilog */ - instr = jit_jmpi(); - jit_patch_at(instr, _jitc->function->epilog); - jit_dec_synth(); -} - -void -_jit_retr(jit_state_t *_jit, jit_int32_t u) -{ - jit_inc_synth_w(retr, u); - /* movr(%ret, %ret) would be optimized out */ - if (JIT_RET != u) - jit_movr(JIT_RET, u); - /* explicitly tell it is live */ - jit_live(JIT_RET); - jit_ret(); - jit_dec_synth(); -} - -void -_jit_reti(jit_state_t *_jit, jit_word_t u) -{ - jit_inc_synth_w(reti, u); - jit_movi(JIT_RET, u); - jit_ret(); - jit_dec_synth(); -} - -void -_jit_retr_f(jit_state_t *_jit, jit_int32_t u) -{ - jit_inc_synth_w(retr_f, u); - if (JIT_FRET != u) - jit_movr_f(JIT_FRET, u); - else - jit_live(JIT_FRET); - jit_ret(); - jit_dec_synth(); -} - -void -_jit_reti_f(jit_state_t *_jit, jit_float32_t u) -{ - jit_inc_synth_f(reti_f, u); - jit_movi_f(JIT_FRET, u); - jit_ret(); - jit_dec_synth(); -} - -void -_jit_retr_d(jit_state_t *_jit, jit_int32_t u) -{ - jit_inc_synth_w(retr_d, u); - if (JIT_FRET != u) - jit_movr_d(JIT_FRET, u); - else - jit_live(JIT_FRET); - jit_ret(); - jit_dec_synth(); -} - -void -_jit_reti_d(jit_state_t *_jit, jit_float64_t u) -{ - jit_inc_synth_d(reti_d, u); - jit_movi_d(JIT_FRET, u); - jit_ret(); - jit_dec_synth(); -} - -void -_jit_epilog(jit_state_t *_jit) -{ - assert(_jitc->function); - assert(_jitc->function->epilog->next == NULL); - jit_link(_jitc->function->epilog); - _jitc->function = NULL; -} - -jit_bool_t -_jit_arg_register_p(jit_state_t *_jit, jit_node_t *u) -{ - if (u->code == jit_code_arg) - return (jit_arg_reg_p(u->u.w)); - assert(u->code == jit_code_arg_f || u->code == jit_code_arg_d); - return (jit_arg_f_reg_p(u->u.w)); -} - -void -_jit_ellipsis(jit_state_t *_jit) -{ - jit_inc_synth(ellipsis); - if (_jitc->prepare) { - jit_link_prepare(); - /* Remember that a varargs function call is being constructed. */ - assert(!(_jitc->function->call.call & jit_call_varargs)); - _jitc->function->call.call |= jit_call_varargs; - } - else { - jit_link_prolog(); - /* Remember the current function is varargs. */ - assert(!(_jitc->function->self.call & jit_call_varargs)); - _jitc->function->self.call |= jit_call_varargs; - -#if __X64 && !__CYGWIN__ - /* Allocate va_list like object in the stack. - * If applicable, with enough space to save all argument - * registers, and use fixed offsets for them. */ - _jitc->function->vaoff = jit_allocai(sizeof(jit_va_list_t)); - - /* Initialize gp offset in save area. */ - if (jit_arg_reg_p(_jitc->function->self.argi)) - _jitc->function->vagp = _jitc->function->self.argi * 8; - else - _jitc->function->vagp = va_gp_max_offset; - - /* Initialize fp offset in save area. */ - if (jit_arg_f_reg_p(_jitc->function->self.argf)) - _jitc->function->vafp = _jitc->function->self.argf * 16 + - va_gp_max_offset; - else - _jitc->function->vafp = va_fp_max_offset; -#endif - } - jit_dec_synth(); -} - -void -_jit_va_push(jit_state_t *_jit, jit_int32_t u) -{ - jit_inc_synth_w(va_push, u); - jit_pushargr(u); - jit_dec_synth(); -} - -jit_node_t * -_jit_arg(jit_state_t *_jit) -{ - jit_node_t *node; - jit_int32_t offset; - assert(_jitc->function); - assert(!(_jitc->function->self.call & jit_call_varargs)); -#if __X64 - if (jit_arg_reg_p(_jitc->function->self.argi)) { - offset = _jitc->function->self.argi++; -# if __CYGWIN__ - _jitc->function->self.size += sizeof(jit_word_t); -# endif - } - else -#endif - { - offset = _jitc->function->self.size; - _jitc->function->self.size += REAL_WORDSIZE; - } - node = jit_new_node_ww(jit_code_arg, offset, - ++_jitc->function->self.argn); - jit_link_prolog(); - return (node); -} - -jit_node_t * -_jit_arg_f(jit_state_t *_jit) -{ - jit_node_t *node; - jit_int32_t offset; - assert(_jitc->function); - assert(!(_jitc->function->self.call & jit_call_varargs)); -#if __X64 -# if __CYGWIN__ - if (jit_arg_reg_p(_jitc->function->self.argi)) { - offset = _jitc->function->self.argi++; - _jitc->function->self.size += sizeof(jit_word_t); - } -# else - if (jit_arg_f_reg_p(_jitc->function->self.argf)) - offset = _jitc->function->self.argf++; -# endif - else -#endif - { - offset = _jitc->function->self.size; - _jitc->function->self.size += REAL_WORDSIZE; - } - node = jit_new_node_ww(jit_code_arg_f, offset, - ++_jitc->function->self.argn); - jit_link_prolog(); - return (node); -} - -jit_node_t * -_jit_arg_d(jit_state_t *_jit) -{ - jit_node_t *node; - jit_int32_t offset; - assert(_jitc->function); - assert(!(_jitc->function->self.call & jit_call_varargs)); -#if __X64 -# if __CYGWIN__ - if (jit_arg_reg_p(_jitc->function->self.argi)) { - offset = _jitc->function->self.argi++; - _jitc->function->self.size += sizeof(jit_word_t); - } -# else - if (jit_arg_f_reg_p(_jitc->function->self.argf)) - offset = _jitc->function->self.argf++; -# endif - else -#endif - { - offset = _jitc->function->self.size; - _jitc->function->self.size += sizeof(jit_float64_t); - } - node = jit_new_node_ww(jit_code_arg_d, offset, - ++_jitc->function->self.argn); - jit_link_prolog(); - return (node); -} - -void -_jit_getarg_c(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_c, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_extr_c(u, JIT_RA0 - v->u.w); - else -#endif - jit_ldxi_c(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_getarg_uc(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_uc, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_extr_uc(u, JIT_RA0 - v->u.w); - else -#endif - jit_ldxi_uc(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_getarg_s(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_s, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_extr_s(u, JIT_RA0 - v->u.w); - else -#endif - jit_ldxi_s(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_getarg_us(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_us, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_extr_us(u, JIT_RA0 - v->u.w); - else -#endif - jit_ldxi_us(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_getarg_i(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_i, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) { -# if __X64_32 - jit_movr(u, JIT_RA0 - v->u.w); -# else - jit_extr_i(u, JIT_RA0 - v->u.w); -# endif - } - else -#endif - jit_ldxi_i(u, _RBP, v->u.w); - jit_dec_synth(); -} - -#if __X64 && !__X64_32 -void -_jit_getarg_ui(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_ui, u, v); - if (jit_arg_reg_p(v->u.w)) - jit_extr_ui(u, JIT_RA0 - v->u.w); - else - jit_ldxi_ui(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_getarg_l(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(getarg_l, u, v); - if (jit_arg_reg_p(v->u.w)) - jit_movr(u, JIT_RA0 - v->u.w); - else - jit_ldxi_l(u, _RBP, v->u.w); - jit_dec_synth(); -} -#endif - -void -_jit_putargr(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg); - jit_inc_synth_wp(putargr, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_movr(JIT_RA0 - v->u.w, u); - else -#endif - jit_stxi(v->u.w, _RBP, u); - jit_dec_synth(); -} - -void -_jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v) -{ - jit_int32_t regno; - assert(v->code == jit_code_arg); - jit_inc_synth_wp(putargi, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_movi(JIT_RA0 - v->u.w, u); - else -#endif - { - regno = jit_get_reg(jit_class_gpr); - jit_movi(regno, u); - jit_stxi(v->u.w, _RBP, regno); - jit_unget_reg(regno); - } - jit_dec_synth(); -} - -void -_jit_getarg_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg_f); - jit_inc_synth_wp(getarg_f, u, v); -#if __X64 - if (jit_arg_f_reg_p(v->u.w)) - jit_movr_f(u, _XMM0 - v->u.w); - else -#endif - jit_ldxi_f(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_putargr_f(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg_f); - jit_inc_synth_wp(putargr_f, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_movr_f(_XMM0 - v->u.w, u); - else -#endif - jit_stxi_f(v->u.w, _RBP, u); - jit_dec_synth(); -} - -void -_jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v) -{ - jit_int32_t regno; - assert(v->code == jit_code_arg_f); - jit_inc_synth_fp(putargi_f, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_movi_f(_XMM0 - v->u.w, u); - else -#endif - { - regno = jit_get_reg(jit_class_gpr); - jit_movi_f(regno, u); - jit_stxi_f(v->u.w, _RBP, regno); - jit_unget_reg(regno); - } - jit_dec_synth(); -} - -void -_jit_getarg_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg_d); - jit_inc_synth_wp(getarg_d, u, v); -#if __X64 - if (jit_arg_f_reg_p(v->u.w)) - jit_movr_d(u, _XMM0 - v->u.w); - else -#endif - jit_ldxi_d(u, _RBP, v->u.w); - jit_dec_synth(); -} - -void -_jit_putargr_d(jit_state_t *_jit, jit_int32_t u, jit_node_t *v) -{ - assert(v->code == jit_code_arg_d); - jit_inc_synth_wp(putargr_d, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_movr_d(_XMM0 - v->u.w, u); - else -#endif - jit_stxi_d(v->u.w, _RBP, u); - jit_dec_synth(); -} - -void -_jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v) -{ - jit_int32_t regno; - assert(v->code == jit_code_arg_d); - jit_inc_synth_dp(putargi_d, u, v); -#if __X64 - if (jit_arg_reg_p(v->u.w)) - jit_movi_d(_XMM0 - v->u.w, u); - else -#endif - { - regno = jit_get_reg(jit_class_gpr); - jit_movi_d(regno, u); - jit_stxi_d(v->u.w, _RBP, regno); - jit_unget_reg(regno); - } - jit_dec_synth(); -} - -void -_jit_pushargr(jit_state_t *_jit, jit_int32_t u) -{ - assert(_jitc->function); - jit_inc_synth_w(pushargr, u); - jit_link_prepare(); -#if __X64 - if (jit_arg_reg_p(_jitc->function->call.argi)) { - jit_movr(JIT_RA0 - _jitc->function->call.argi, u); - ++_jitc->function->call.argi; -# if __CYGWIN__ - if (_jitc->function->call.call & jit_call_varargs) - jit_stxi(_jitc->function->call.size, _RSP, u); - _jitc->function->call.size += sizeof(jit_word_t); -# endif - } - else -#endif - { - jit_stxi(_jitc->function->call.size, _RSP, u); - _jitc->function->call.size += REAL_WORDSIZE; - } - jit_dec_synth(); -} - -void -_jit_pushargi(jit_state_t *_jit, jit_word_t u) -{ - jit_int32_t regno; - assert(_jitc->function); - jit_inc_synth_w(pushargi, u); - jit_link_prepare(); -#if __X64 - if (jit_arg_reg_p(_jitc->function->call.argi)) { - jit_movi(JIT_RA0 - _jitc->function->call.argi, u); -# if __CYGWIN__ - if (_jitc->function->call.call & jit_call_varargs) - jit_stxi(_jitc->function->call.size, _RSP, - JIT_RA0 - _jitc->function->call.argi); - _jitc->function->call.size += sizeof(jit_word_t); -# endif - ++_jitc->function->call.argi; - } - else -#endif - { - regno = jit_get_reg(jit_class_gpr); - jit_movi(regno, u); - jit_stxi(_jitc->function->call.size, _RSP, regno); - _jitc->function->call.size += REAL_WORDSIZE; - jit_unget_reg(regno); - } - jit_dec_synth(); -} - -void -_jit_pushargr_f(jit_state_t *_jit, jit_int32_t u) -{ - assert(_jitc->function); - jit_inc_synth_w(pushargr_f, u); - jit_link_prepare(); -#if __X64 -# if __CYGWIN__ - if (jit_arg_reg_p(_jitc->function->call.argi)) { - jit_movr_f(_XMM0 - _jitc->function->call.argi, u); - if (_jitc->function->call.call & jit_call_varargs) { - jit_stxi_f(_jitc->function->call.size, _RSP, - _XMM0 - _jitc->function->call.argi); - jit_ldxi_i(JIT_RA0 - _jitc->function->call.argi, _RSP, - _jitc->function->call.size); - } - ++_jitc->function->call.argi; - _jitc->function->call.size += sizeof(jit_word_t); - } -# else - if (jit_arg_f_reg_p(_jitc->function->self.argf)) { - jit_movr_f(_XMM0 - _jitc->function->call.argf, u); - ++_jitc->function->call.argf; - } -# endif - else -#endif - { - jit_stxi_f(_jitc->function->call.size, _RSP, u); - _jitc->function->call.size += REAL_WORDSIZE; - } - jit_dec_synth(); -} - -void -_jit_pushargi_f(jit_state_t *_jit, jit_float32_t u) -{ - jit_int32_t regno; - assert(_jitc->function); - jit_inc_synth_f(pushargi_f, u); - jit_link_prepare(); -#if __X64 -# if __CYGWIN__ - if (jit_arg_reg_p(_jitc->function->call.argi)) { - jit_movi_f(_XMM0 - _jitc->function->call.argi, u); - if (_jitc->function->call.call & jit_call_varargs) { - jit_stxi_f(_jitc->function->call.size, _RSP, - _XMM0 - _jitc->function->call.argi); - jit_ldxi_i(JIT_RA0 - _jitc->function->call.argi, _RSP, - _jitc->function->call.size); - } - ++_jitc->function->call.argi; - _jitc->function->call.size += sizeof(jit_word_t); - } -# else - if (jit_arg_f_reg_p(_jitc->function->call.argf)) { - jit_movi_f(_XMM0 - _jitc->function->call.argf, u); - ++_jitc->function->call.argf; - } -# endif - else -#endif - { - regno = jit_get_reg(jit_class_fpr); - jit_movi_f(regno, u); - jit_stxi_f(_jitc->function->call.size, _RSP, regno); - _jitc->function->call.size += REAL_WORDSIZE; - jit_unget_reg(regno); - } - jit_dec_synth(); -} - -void -_jit_pushargr_d(jit_state_t *_jit, jit_int32_t u) -{ - assert(_jitc->function); - jit_inc_synth_w(pushargr_d, u); - jit_link_prepare(); -#if __X64 -# if __CYGWIN__ - if (jit_arg_reg_p(_jitc->function->call.argi)) { - jit_movr_d(_XMM0 - _jitc->function->call.argi, u); - if (_jitc->function->call.call & jit_call_varargs) { - jit_stxi_d(_jitc->function->call.size, _RSP, - _XMM0 - _jitc->function->call.argi); - jit_ldxi_l(JIT_RA0 - _jitc->function->call.argi, _RSP, - _jitc->function->call.size); - } - ++_jitc->function->call.argi; - _jitc->function->call.size += sizeof(jit_word_t); - } -# else - if (jit_arg_f_reg_p(_jitc->function->call.argf)) { - jit_movr_d(_XMM0 - _jitc->function->call.argf, u); - ++_jitc->function->call.argf; - } -# endif - else -#endif - { - jit_stxi_d(_jitc->function->call.size, _RSP, u); - _jitc->function->call.size += sizeof(jit_float64_t); - } - jit_dec_synth(); -} - -void -_jit_pushargi_d(jit_state_t *_jit, jit_float64_t u) -{ - jit_int32_t regno; - assert(_jitc->function); - jit_inc_synth_d(pushargi_d, u); - jit_link_prepare(); -#if __X64 -# if __CYGWIN__ - if (jit_arg_reg_p(_jitc->function->call.argi)) { - jit_movi_d(_XMM0 - _jitc->function->call.argi, u); - if (_jitc->function->call.call & jit_call_varargs) { - jit_stxi_d(_jitc->function->call.size, _RSP, - _XMM0 - _jitc->function->call.argi); - jit_ldxi_l(JIT_RA0 - _jitc->function->call.argi, _RSP, - _jitc->function->call.size); - } - ++_jitc->function->call.argi; - _jitc->function->call.size += sizeof(jit_word_t); - } -# else - if (jit_arg_f_reg_p(_jitc->function->call.argf)) { - jit_movi_d(_XMM0 - _jitc->function->call.argf, u); - ++_jitc->function->call.argf; - } -# endif - else -#endif - { - regno = jit_get_reg(jit_class_fpr); - jit_movi_d(regno, u); - jit_stxi_d(_jitc->function->call.size, _RSP, regno); - _jitc->function->call.size += sizeof(jit_float64_t); - jit_unget_reg(regno); - } - jit_dec_synth(); -} - -jit_bool_t -_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) -{ -#if __X64 - jit_int32_t spec; - - spec = jit_class(_rvs[regno].spec); - if (spec & jit_class_arg) { - if (spec & jit_class_gpr) { - regno = JIT_RA0 - regno; - if (regno >= 0 && regno < node->v.w) - return (1); - } - else if (spec & jit_class_fpr) { - regno = _XMM0 - regno; - if (regno >= 0 && regno < node->w.w) - return (1); - } - } -#endif - return (0); -} - -void -_jit_finishr(jit_state_t *_jit, jit_int32_t r0) -{ - jit_int32_t reg; - jit_node_t *call; - assert(_jitc->function); - reg = r0; - jit_inc_synth_w(finishr, r0); - if (_jitc->function->self.alen < _jitc->function->call.size) - _jitc->function->self.alen = _jitc->function->call.size; -#if __X64 -# if !__CYGWIN__ - if (_jitc->function->call.call & jit_call_varargs) { - if (jit_regno(reg) == _RAX) { - reg = jit_get_reg(jit_class_gpr); - jit_movr(reg, _RAX); - } - if (_jitc->function->call.argf) - jit_movi(_RAX, _jitc->function->call.argf); - else - jit_movi(_RAX, 0); - if (reg != r0) - jit_unget_reg(reg); - } -# endif -#endif - call = jit_callr(reg); - call->v.w = _jitc->function->call.argi; - call->w.w = _jitc->function->call.argf; - _jitc->function->call.argi = _jitc->function->call.argf = - _jitc->function->call.size = 0; - _jitc->prepare = 0; - jit_dec_synth(); -} - -jit_node_t * -_jit_finishi(jit_state_t *_jit, jit_pointer_t i0) -{ -#if __X64 - jit_int32_t reg; -#endif - jit_node_t *node; - assert(_jitc->function); - jit_inc_synth_w(finishi, (jit_word_t)i0); - if (_jitc->function->self.alen < _jitc->function->call.size) - _jitc->function->self.alen = _jitc->function->call.size; -#if __X64 - /* FIXME preventing %rax allocation is good enough, but for consistency - * it should automatically detect %rax is dead, in case it has run out - * registers, and not save/restore it, what would be wrong if using the - * the return value, otherwise, just a needless noop */ - /* >> prevent %rax from being allocated as the function pointer */ - jit_regset_setbit(&_jitc->regarg, _RAX); - reg = jit_get_reg(jit_class_gpr); - node = jit_movi(reg, (jit_word_t)i0); - jit_finishr(reg); - jit_unget_reg(reg); - /* << prevent %rax from being allocated as the function pointer */ - jit_regset_clrbit(&_jitc->regarg, _RAX); -#else - node = jit_calli(i0); - node->v.w = _jitc->function->call.argi; - node->w.w = _jitc->function->call.argf; -#endif - _jitc->function->call.argi = _jitc->function->call.argf = - _jitc->function->call.size = 0; - _jitc->prepare = 0; - jit_dec_synth(); - return (node); -} - -void -_jit_retval_c(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_c, r0); - jit_extr_c(r0, JIT_RET); - jit_dec_synth(); -} - -void -_jit_retval_uc(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_uc, r0); - jit_extr_uc(r0, JIT_RET); - jit_dec_synth(); -} - -void -_jit_retval_s(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_s, r0); - jit_extr_s(r0, JIT_RET); - jit_dec_synth(); -} - -void -_jit_retval_us(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_us, r0); - jit_extr_us(r0, JIT_RET); - jit_dec_synth(); -} - -void -_jit_retval_i(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_i, r0); -#if __X32 || __X64_32 - if (r0 != JIT_RET) - jit_movr(r0, JIT_RET); -#else - jit_extr_i(r0, JIT_RET); -#endif - jit_dec_synth(); -} - -#if __X64 && !__X64_32 -void -_jit_retval_ui(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_ui, r0); - jit_extr_ui(r0, JIT_RET); - jit_dec_synth(); -} - -void -_jit_retval_l(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_l, r0); - if (r0 != JIT_RET) - jit_movr(r0, JIT_RET); - jit_dec_synth(); -} -#endif - -void -_jit_retval_f(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_f, r0); -#if __X64 - if (r0 != JIT_FRET) - jit_movr_f(r0, JIT_FRET); -#endif - jit_dec_synth(); -} - -void -_jit_retval_d(jit_state_t *_jit, jit_int32_t r0) -{ - jit_inc_synth_w(retval_d, r0); -#if __X64 - if (r0 != JIT_FRET) - jit_movr_d(r0, JIT_FRET); -#endif - jit_dec_synth(); -} - -jit_pointer_t -_emit_code(jit_state_t *_jit) -{ - jit_node_t *node; - jit_node_t *temp; - jit_word_t word; - jit_int32_t value; - jit_int32_t offset; - struct { - jit_node_t *node; - jit_word_t word; -#if DEVEL_DISASSEMBLER - jit_word_t prevw; -#endif - jit_int32_t patch_offset; - } undo; -#if DEVEL_DISASSEMBLER - jit_word_t prevw; -#endif - - _jitc->function = NULL; - - jit_reglive_setup(); - - undo.word = 0; - undo.node = NULL; - undo.patch_offset = 0; -#define case_rr(name, type) \ - case jit_code_##name##r##type: \ - name##r##type(rn(node->u.w), rn(node->v.w)); \ - break -#define case_rw(name, type) \ - case jit_code_##name##i##type: \ - name##i##type(rn(node->u.w), node->v.w); \ - break -#define case_rf(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->v.w)) \ - x87_##name##r##type(rn(node->u.w), rn(node->v.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), rn(node->v.w)); \ - break -#define case_fr(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->u.w)) \ - x87_##name##r##type(rn(node->u.w), rn(node->v.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), rn(node->v.w)); \ - break -#define case_fw(name, type) \ - case jit_code_##name##i##type: \ - if (jit_x87_reg_p(node->u.w)) \ - x87_##name##i##type(rn(node->u.w), node->v.w); \ - else \ - sse_##name##i##type(rn(node->u.w), node->v.w); \ - break -#define case_wr(name, type) \ - case jit_code_##name##i##type: \ - name##i##type(node->u.w, rn(node->v.w)); \ - break -#define case_wf(name, type) \ - case jit_code_##name##i##type: \ - if (jit_x87_reg_p(node->v.w)) \ - x87_##name##i##type(node->u.w, rn(node->v.w)); \ - else \ - sse_##name##i##type(node->u.w, rn(node->v.w)); \ - break -#define case_ff(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->u.w) && \ - jit_x87_reg_p(node->v.w)) \ - x87_##name##r##type(rn(node->u.w), rn(node->v.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), rn(node->v.w)); \ - break; -#define case_rrr(name, type) \ - case jit_code_##name##r##type: \ - name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - break -#define case_rrrr(name, type) \ - case jit_code_##name##r##type: \ - name##r##type(rn(node->u.q.l), rn(node->u.q.h), \ - rn(node->v.w), rn(node->w.w)); \ - break -#define case_frr(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->u.w)) \ - x87_##name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - break -#define case_rrf(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->w.w)) \ - x87_##name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - break -#define case_rrw(name, type) \ - case jit_code_##name##i##type: \ - name##i##type(rn(node->u.w), rn(node->v.w), node->w.w); \ - break -#define case_rrrw(name, type) \ - case jit_code_##name##i##type: \ - name##i##type(rn(node->u.q.l), rn(node->u.q.h), \ - rn(node->v.w), node->w.w); \ - break -#define case_frw(name, type) \ - case jit_code_##name##i##type: \ - if (jit_x87_reg_p(node->u.w)) \ - x87_##name##i##type(rn(node->u.w), \ - rn(node->v.w), node->w.w); \ - else \ - sse_##name##i##type(rn(node->u.w), \ - rn(node->v.w), node->w.w); \ - break -#define case_wrr(name, type) \ - case jit_code_##name##i##type: \ - name##i##type(node->u.w, rn(node->v.w), rn(node->w.w)); \ - break -#define case_wrf(name, type) \ - case jit_code_##name##i##type: \ - if (jit_x87_reg_p(node->w.w)) \ - x87_##name##i##type(node->u.w, \ - rn(node->v.w), rn(node->w.w)); \ - else \ - sse_##name##i##type(node->u.w, \ - rn(node->v.w), rn(node->w.w)); \ - break -#define case_brr(name, type) \ - case jit_code_##name##r##type: \ - temp = node->u.n; \ - assert(temp->code == jit_code_label || \ - temp->code == jit_code_epilog); \ - if (temp->flag & jit_flag_patch) \ - name##r##type(temp->u.w, rn(node->v.w), \ - rn(node->w.w)); \ - else { \ - word = name##r##type(_jit->pc.w, \ - rn(node->v.w), rn(node->w.w)); \ - patch(word, node); \ - } \ - break -#define case_brw(name, type) \ - case jit_code_##name##i##type: \ - temp = node->u.n; \ - assert(temp->code == jit_code_label || \ - temp->code == jit_code_epilog); \ - if (temp->flag & jit_flag_patch) \ - name##i##type(temp->u.w, \ - rn(node->v.w), node->w.w); \ - else { \ - word = name##i##type(_jit->pc.w, \ - rn(node->v.w), node->w.w); \ - patch(word, node); \ - } \ - break -#define case_rff(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->v.w) && \ - jit_x87_reg_p(node->w.w)) \ - x87_##name##r##type(rn(node->u.w), rn(node->v.w), \ - rn(node->w.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), rn(node->v.w), \ - rn(node->w.w)); \ - break; -#define case_rfw(name, type, size) \ - case jit_code_##name##i##type: \ - assert(node->flag & jit_flag_data); \ - if (jit_x87_reg_p(node->v.w)) \ - x87_##name##i##type(rn(node->u.w), rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - else \ - sse_##name##i##type(rn(node->u.w), rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - break -#define case_fff(name, type) \ - case jit_code_##name##r##type: \ - if (jit_x87_reg_p(node->u.w) && \ - jit_x87_reg_p(node->v.w) && \ - jit_x87_reg_p(node->w.w)) \ - x87_##name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - else \ - sse_##name##r##type(rn(node->u.w), \ - rn(node->v.w), rn(node->w.w)); \ - break -#define case_ffw(name, type, size) \ - case jit_code_##name##i##type: \ - assert(node->flag & jit_flag_data); \ - if (jit_x87_reg_p(node->u.w) && \ - jit_x87_reg_p(node->v.w)) \ - x87_##name##i##type(rn(node->u.w), rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - else \ - sse_##name##i##type(rn(node->u.w), rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - break -#define case_bff(name, type) \ - case jit_code_b##name##r##type: \ - temp = node->u.n; \ - assert(temp->code == jit_code_label || \ - temp->code == jit_code_epilog); \ - if (temp->flag & jit_flag_patch) { \ - if (jit_x87_reg_p(node->v.w) && \ - jit_x87_reg_p(node->w.w)) \ - x87_b##name##r##type(temp->u.w, \ - rn(node->v.w), rn(node->w.w)); \ - else \ - sse_b##name##r##type(temp->u.w, \ - rn(node->v.w), rn(node->w.w)); \ - } \ - else { \ - if (jit_x87_reg_p(node->v.w) && \ - jit_x87_reg_p(node->w.w)) \ - word = x87_b##name##r##type(_jit->pc.w, \ - rn(node->v.w), rn(node->w.w)); \ - else \ - word = sse_b##name##r##type(_jit->pc.w, \ - rn(node->v.w), rn(node->w.w)); \ - patch(word, node); \ - } \ - break -#define case_bfw(name, type, size) \ - case jit_code_b##name##i##type: \ - temp = node->u.n; \ - assert(temp->code == jit_code_label || \ - temp->code == jit_code_epilog); \ - if (temp->flag & jit_flag_patch) { \ - if (jit_x87_reg_p(node->v.w)) \ - x87_b##name##i##type(temp->u.w, \ - rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - else \ - sse_b##name##i##type(temp->u.w, \ - rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - } \ - else { \ - if (jit_x87_reg_p(node->v.w)) \ - word = x87_b##name##i##type(_jit->pc.w, \ - rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - else \ - word = sse_b##name##i##type(_jit->pc.w, \ - rn(node->v.w), \ - (jit_float##size##_t *)node->w.n->u.w); \ - patch(word, node); \ - } \ - break -#if DEVEL_DISASSEMBLER - prevw = _jit->pc.w; -#endif - for (node = _jitc->head; node; node = node->next) { - if (_jit->pc.uc >= _jitc->code.end) - return (NULL); - -#if DEVEL_DISASSEMBLER - node->offset = (jit_uword_t)_jit->pc.w - (jit_uword_t)prevw; - prevw = _jit->pc.w; -#endif - value = jit_classify(node->code); - jit_regarg_set(node, value); - switch (node->code) { - case jit_code_align: - assert(!(node->u.w & (node->u.w - 1)) && - node->u.w <= sizeof(jit_word_t)); - if ((word = _jit->pc.w & (node->u.w - 1))) - nop(node->u.w - word); - break; - case jit_code_note: case jit_code_name: - node->u.w = _jit->pc.w; - break; - case jit_code_label: - if ((node->link || (node->flag & jit_flag_use)) && - (word = _jit->pc.w & (sizeof(jit_word_t) - 1))) - nop(sizeof(jit_word_t) - word); - /* remember label is defined */ - node->flag |= jit_flag_patch; - node->u.w = _jit->pc.w; - break; - case_rrr(add,); - case_rrw(add,); - case_rrr(addx,); - case_rrw(addx,); - case_rrr(addc,); - case_rrw(addc,); - case_rrr(sub,); - case_rrw(sub,); - case_rrr(subx,); - case_rrw(subx,); - case_rrr(subc,); - case_rrw(subc,); - case_rrw(rsb,); - case_rrr(mul,); - case_rrw(mul,); - case_rrrr(qmul,); - case_rrrw(qmul,); - case_rrrr(qmul, _u); - case_rrrw(qmul, _u); - case_rrr(div,); - case_rrw(div,); - case_rrr(div, _u); - case_rrw(div, _u); - case_rrrr(qdiv,); - case_rrrw(qdiv,); - case_rrrr(qdiv, _u); - case_rrrw(qdiv, _u); - case_rrr(rem,); - case_rrw(rem,); - case_rrr(rem, _u); - case_rrw(rem, _u); - case_rrr(and,); - case_rrw(and,); - case_rrr(or,); - case_rrw(or,); - case_rrr(xor,); - case_rrw(xor,); - case_rrr(lsh,); - case_rrw(lsh,); - case_rrr(rsh,); - case_rrw(rsh,); - case_rrr(rsh, _u); - case_rrw(rsh, _u); - case_rr(neg,); - case_rr(com,); - case_rrr(lt,); - case_rrw(lt,); - case_rrr(lt, _u); - case_rrw(lt, _u); - case_rrr(le,); - case_rrw(le,); - case_rrr(le, _u); - case_rrw(le, _u); - case_rrr(eq,); - case_rrw(eq,); - case_rrr(ge,); - case_rrw(ge,); - case_rrr(ge, _u); - case_rrw(ge, _u); - case_rrr(gt,); - case_rrw(gt,); - case_rrr(gt, _u); - case_rrw(gt, _u); - case_rrr(ne,); - case_rrw(ne,); - case_rr(mov,); - case jit_code_movi: - if (node->flag & jit_flag_node) { - temp = node->v.n; - if (temp->code == jit_code_data || - (temp->code == jit_code_label && - (temp->flag & jit_flag_patch))) - movi(rn(node->u.w), temp->u.w); - else { - assert(temp->code == jit_code_label || - temp->code == jit_code_epilog); - word = movi_p(rn(node->u.w), node->v.w); - patch(word, node); - } - } - else - movi(rn(node->u.w), node->v.w); - break; - case_rr(hton, _us); - case_rr(hton, _ui); -#if __X64 && !__X64_32 - case_rr(hton, _ul); -#endif - case_rr(ext, _c); - case_rr(ext, _uc); - case_rr(ext, _s); - case_rr(ext, _us); -#if __X64 && !__X64_32 - case_rr(ext, _i); - case_rr(ext, _ui); -#endif - case_rf(trunc, _f_i); - case_rf(trunc, _d_i); -#if __X64 - case_rf(trunc, _f_l); - case_rf(trunc, _d_l); -#endif - case_rr(ld, _c); - case_rw(ld, _c); - case_rr(ld, _uc); - case_rw(ld, _uc); - case_rr(ld, _s); - case_rw(ld, _s); - case_rr(ld, _us); - case_rw(ld, _us); - case_rr(ld, _i); - case_rw(ld, _i); -#if __X64 && !__X64_32 - case_rr(ld, _ui); - case_rw(ld, _ui); - case_rr(ld, _l); - case_rw(ld, _l); -#endif - case_rrr(ldx, _c); - case_rrw(ldx, _c); - case_rrr(ldx, _uc); - case_rrw(ldx, _uc); - case_rrr(ldx, _s); - case_rrw(ldx, _s); - case_rrr(ldx, _us); - case_rrw(ldx, _us); - case_rrr(ldx, _i); - case_rrw(ldx, _i); -#if __X64 && !__X64_32 - case_rrr(ldx, _ui); - case_rrw(ldx, _ui); - case_rrr(ldx, _l); - case_rrw(ldx, _l); -#endif - case_rr(st, _c); - case_wr(st, _c); - case_rr(st, _s); - case_wr(st, _s); - case_rr(st, _i); - case_wr(st, _i); -#if __X64 && !__X64_32 - case_rr(st, _l); - case_wr(st, _l); -#endif - case_rrr(stx, _c); - case_wrr(stx, _c); - case_rrr(stx, _s); - case_wrr(stx, _s); - case_rrr(stx, _i); - case_wrr(stx, _i); -#if __X64 && !__X64_32 - case_rrr(stx, _l); - case_wrr(stx, _l); -#endif - case_brr(blt,); - case_brw(blt,); - case_brr(blt, _u); - case_brw(blt, _u); - case_brr(ble,); - case_brw(ble,); - case_brr(ble, _u); - case_brw(ble, _u); - case_brr(beq,); - case_brw(beq,); - case_brr(bge,); - case_brw(bge,); - case_brr(bge, _u); - case_brw(bge, _u); - case_brr(bgt,); - case_brw(bgt,); - case_brr(bgt, _u); - case_brw(bgt, _u); - case_brr(bne,); - case_brw(bne,); - case_brr(bms,); - case_brw(bms,); - case_brr(bmc,); - case_brw(bmc,); - case_brr(boadd,); - case_brw(boadd,); - case_brr(boadd, _u); - case_brw(boadd, _u); - case_brr(bxadd,); - case_brw(bxadd,); - case_brr(bxadd, _u); - case_brw(bxadd, _u); - case_brr(bosub,); - case_brw(bosub,); - case_brr(bosub, _u); - case_brw(bosub, _u); - case_brr(bxsub,); - case_brw(bxsub,); - case_brr(bxsub, _u); - case_brw(bxsub, _u); - case_fff(add, _f); - case_ffw(add, _f, 32); - case_fff(sub, _f); - case_ffw(sub, _f, 32); - case_ffw(rsb, _f, 32); - case_fff(mul, _f); - case_ffw(mul, _f, 32); - case_fff(div, _f); - case_ffw(div, _f, 32); - case_ff(abs, _f); - case_ff(neg, _f); - case_ff(sqrt, _f); - case_fr(ext, _f); - case_fr(ext, _d_f); - case_rff(lt, _f); - case_rfw(lt, _f, 32); - case_rff(le, _f); - case_rfw(le, _f, 32); - case_rff(eq, _f); - case_rfw(eq, _f, 32); - case_rff(ge, _f); - case_rfw(ge, _f, 32); - case_rff(gt, _f); - case_rfw(gt, _f, 32); - case_rff(ne, _f); - case_rfw(ne, _f, 32); - case_rff(unlt, _f); - case_rfw(unlt, _f, 32); - case_rff(unle, _f); - case_rfw(unle, _f, 32); - case_rff(uneq, _f); - case_rfw(uneq, _f, 32); - case_rff(unge, _f); - case_rfw(unge, _f, 32); - case_rff(ungt, _f); - case_rfw(ungt, _f, 32); - case_rff(ltgt, _f); - case_rfw(ltgt, _f, 32); - case_rff(ord, _f); - case_rfw(ord, _f, 32); - case_rff(unord, _f); - case_rfw(unord, _f, 32); - case jit_code_movr_f: - if (jit_x87_reg_p(node->u.w)) { - if (jit_x87_reg_p(node->v.w)) - x87_movr_f(rn(node->u.w), rn(node->v.w)); - else - x87_from_sse_f(rn(node->u.w), rn(node->v.w)); - } - else { - if (jit_sse_reg_p(node->v.w)) - sse_movr_f(rn(node->u.w), rn(node->v.w)); - else - sse_from_x87_f(rn(node->u.w), rn(node->v.w)); - } - break; - case jit_code_movi_f: - assert(node->flag & jit_flag_data); - if (jit_x87_reg_p(node->u.w)) - x87_movi_f(rn(node->u.w), (jit_float32_t *)node->v.n->u.w); - else - sse_movi_f(rn(node->u.w), (jit_float32_t *)node->v.n->u.w); - break; - case_fr(ld, _f); - case_fw(ld, _f); - case_frr(ldx, _f); - case_frw(ldx, _f); - case_rf(st, _f); - case_wf(st, _f); - case_rrf(stx, _f); - case_wrf(stx, _f); - case_bff(lt, _f); - case_bfw(lt, _f, 32); - case_bff(le, _f); - case_bfw(le, _f, 32); - case_bff(eq, _f); - case_bfw(eq, _f, 32); - case_bff(ge, _f); - case_bfw(ge, _f, 32); - case_bff(gt, _f); - case_bfw(gt, _f, 32); - case_bff(ne, _f); - case_bfw(ne, _f, 32); - case_bff(unlt, _f); - case_bfw(unlt, _f, 32); - case_bff(unle, _f); - case_bfw(unle, _f, 32); - case_bff(uneq, _f); - case_bfw(uneq, _f, 32); - case_bff(unge, _f); - case_bfw(unge, _f, 32); - case_bff(ungt, _f); - case_bfw(ungt, _f, 32); - case_bff(ltgt, _f); - case_bfw(ltgt, _f, 32); - case_bff(ord, _f); - case_bfw(ord, _f, 32); - case_bff(unord, _f); - case_bfw(unord, _f, 32); - case_fff(add, _d); - case_ffw(add, _d, 64); - case_fff(sub, _d); - case_ffw(sub, _d, 64); - case_ffw(rsb, _d, 64); - case_fff(mul, _d); - case_ffw(mul, _d, 64); - case_fff(div, _d); - case_ffw(div, _d, 64); - case_ff(abs, _d); - case_ff(neg, _d); - case_ff(sqrt, _d); - case_fr(ext, _d); - case_fr(ext, _f_d); - case_rff(lt, _d); - case_rfw(lt, _d, 64); - case_rff(le, _d); - case_rfw(le, _d, 64); - case_rff(eq, _d); - case_rfw(eq, _d, 64); - case_rff(ge, _d); - case_rfw(ge, _d, 64); - case_rff(gt, _d); - case_rfw(gt, _d, 64); - case_rff(ne, _d); - case_rfw(ne, _d, 64); - case_rff(unlt, _d); - case_rfw(unlt, _d, 64); - case_rff(unle, _d); - case_rfw(unle, _d, 64); - case_rff(uneq, _d); - case_rfw(uneq, _d, 64); - case_rff(unge, _d); - case_rfw(unge, _d, 64); - case_rff(ungt, _d); - case_rfw(ungt, _d, 64); - case_rff(ltgt, _d); - case_rfw(ltgt, _d, 64); - case_rff(ord, _d); - case_rfw(ord, _d, 64); - case_rff(unord, _d); - case_rfw(unord, _d, 64); - case jit_code_movr_d: - if (jit_x87_reg_p(node->u.w)) { - if (jit_x87_reg_p(node->v.w)) - x87_movr_d(rn(node->u.w), rn(node->v.w)); - else - x87_from_sse_d(rn(node->u.w), rn(node->v.w)); - } - else { - if (jit_sse_reg_p(node->v.w)) - sse_movr_d(rn(node->u.w), rn(node->v.w)); - else - sse_from_x87_d(rn(node->u.w), rn(node->v.w)); - } - break; - case jit_code_movi_d: - assert(node->flag & jit_flag_data); - if (jit_x87_reg_p(node->u.w)) - x87_movi_d(rn(node->u.w), (jit_float64_t *)node->v.n->u.w); - else - sse_movi_d(rn(node->u.w), (jit_float64_t *)node->v.n->u.w); - break; - case_fr(ld, _d); - case_fw(ld, _d); - case_frr(ldx, _d); - case_frw(ldx, _d); - case_rf(st, _d); - case_wf(st, _d); - case_rrf(stx, _d); - case_wrf(stx, _d); - case_bff(lt, _d); - case_bfw(lt, _d, 64); - case_bff(le, _d); - case_bfw(le, _d, 64); - case_bff(eq, _d); - case_bfw(eq, _d, 64); - case_bff(ge, _d); - case_bfw(ge, _d, 64); - case_bff(gt, _d); - case_bfw(gt, _d, 64); - case_bff(ne, _d); - case_bfw(ne, _d, 64); - case_bff(unlt, _d); - case_bfw(unlt, _d, 64); - case_bff(unle, _d); - case_bfw(unle, _d, 64); - case_bff(uneq, _d); - case_bfw(uneq, _d, 64); - case_bff(unge, _d); - case_bfw(unge, _d, 64); - case_bff(ungt, _d); - case_bfw(ungt, _d, 64); - case_bff(ltgt, _d); - case_bfw(ltgt, _d, 64); - case_bff(ord, _d); - case_bfw(ord, _d, 64); - case_bff(unord, _d); - case_bfw(unord, _d, 64); - case jit_code_jmpr: - jmpr(rn(node->u.w)); - break; - case jit_code_jmpi: - if (node->flag & jit_flag_node) { - temp = node->u.n; - assert(temp->code == jit_code_label || - temp->code == jit_code_epilog); - if (temp->flag & jit_flag_patch) - jmpi(temp->u.w); - else { - word = jmpi(_jit->pc.w); - patch(word, node); - } - } - else - jmpi(node->u.w); - break; - case jit_code_callr: - callr(rn(node->u.w)); - break; - case jit_code_calli: - if (node->flag & jit_flag_node) { - temp = node->u.n; - assert(temp->code == jit_code_label || - temp->code == jit_code_epilog); - word = calli(temp->u.w); - if (!(temp->flag & jit_flag_patch)) - patch(word, node); - } - else - calli(node->u.w); - break; - case jit_code_prolog: - _jitc->function = _jitc->functions.ptr + node->w.w; - undo.node = node; - undo.word = _jit->pc.w; -#if DEVEL_DISASSEMBLER - undo.prevw = prevw; -#endif - undo.patch_offset = _jitc->patches.offset; - restart_function: - _jitc->again = 0; - prolog(node); - break; - case jit_code_epilog: - assert(_jitc->function == _jitc->functions.ptr + node->w.w); - if (_jitc->again) { - for (temp = undo.node->next; - temp != node; temp = temp->next) { - if (temp->code == jit_code_label || - temp->code == jit_code_epilog) - temp->flag &= ~jit_flag_patch; - } - temp->flag &= ~jit_flag_patch; - node = undo.node; - _jit->pc.w = undo.word; -#if DEVEL_DISASSEMBLER - prevw = undo.prevw; -#endif - _jitc->patches.offset = undo.patch_offset; - goto restart_function; - } - if (node->link && - (word = _jit->pc.w & (sizeof(jit_word_t) - 1))) - nop(sizeof(jit_word_t) - word); - /* remember label is defined */ - node->flag |= jit_flag_patch; - node->u.w = _jit->pc.w; - epilog(node); - _jitc->function = NULL; - break; - case jit_code_va_start: - vastart(rn(node->u.w)); - break; - case jit_code_va_arg: - vaarg(rn(node->u.w), rn(node->v.w)); - break; - case jit_code_va_arg_d: - vaarg_d(rn(node->u.w), rn(node->v.w), jit_x87_reg_p(node->u.w)); - break; - case jit_code_live: case jit_code_ellipsis: - case jit_code_va_push: - case jit_code_allocai: case jit_code_allocar: - case jit_code_arg: - case jit_code_arg_f: case jit_code_arg_d: - case jit_code_va_end: - case jit_code_ret: - case jit_code_retr: case jit_code_reti: - case jit_code_retr_f: case jit_code_reti_f: - case jit_code_retr_d: case jit_code_reti_d: - case jit_code_getarg_c: case jit_code_getarg_uc: - case jit_code_getarg_s: case jit_code_getarg_us: - case jit_code_getarg_i: -#if __X64 && !__X64_32 - case jit_code_getarg_ui: case jit_code_getarg_l: -#endif - case jit_code_getarg_f: case jit_code_getarg_d: - case jit_code_putargr: case jit_code_putargi: - case jit_code_putargr_f: case jit_code_putargi_f: - case jit_code_putargr_d: case jit_code_putargi_d: - case jit_code_pushargr: case jit_code_pushargi: - case jit_code_pushargr_f: case jit_code_pushargi_f: - case jit_code_pushargr_d: case jit_code_pushargi_d: - case jit_code_retval_c: case jit_code_retval_uc: - case jit_code_retval_s: case jit_code_retval_us: - case jit_code_retval_i: -#if __X64 && !__X32 - case jit_code_retval_ui: case jit_code_retval_l: -#endif - case jit_code_prepare: - case jit_code_finishr: case jit_code_finishi: - break; - case jit_code_retval_f: -#if __X32 - if (jit_sse_reg_p(node->u.w)) { - fstpr(_ST1_REGNO); - sse_from_x87_f(rn(node->u.w), _ST0_REGNO); - } - else - fstpr(rn(node->u.w) + 1); -#endif - break; - case jit_code_retval_d: -#if __X32 - if (jit_sse_reg_p(node->u.w)) { - fstpr(_ST1_REGNO); - sse_from_x87_d(rn(node->u.w), _ST0_REGNO); - } - else - fstpr(rn(node->u.w) + 1); -#endif - break; - default: - abort(); - } - jit_regarg_clr(node, value); - assert(_jitc->regarg == 0 && _jitc->synth == 0); - /* update register live state */ - jit_reglive(node); - } -#undef case_bfw -#undef case_bff -#undef case_ffw -#undef case_rfw -#undef case_rff -#undef case_brw -#undef case_brr -#undef case_wrf -#undef case_wrr -#undef case_frw -#undef case_rrf -#undef case_rrw -#undef case_frr -#undef case_rrr -#undef case_wf -#undef case_fw -#undef case_fr -#undef case_rr - - for (offset = 0; offset < _jitc->patches.offset; offset++) { - node = _jitc->patches.ptr[offset].node; - word = node->code == jit_code_movi ? node->v.n->u.w : node->u.n->u.w; - patch_at(node, _jitc->patches.ptr[offset].inst, word); - } - - jit_flush(_jit->code.ptr, _jit->pc.uc); - - return (_jit->code.ptr); -} - -#define CODE 1 -# include "jit_x86-cpu.c" -# include "jit_x86-sse.c" -# include "jit_x86-x87.c" -#undef CODE - -void -jit_flush(void *fptr, void *tptr) -{ -} - -void -_emit_ldxi(jit_state_t *_jit, jit_gpr_t r0, jit_gpr_t r1, jit_word_t i0) -{ - ldxi(rn(r0), rn(r1), i0); -} - -void -_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_gpr_t r1) -{ - stxi(i0, rn(r0), rn(r1)); -} - -void -_emit_ldxi_d(jit_state_t *_jit, jit_fpr_t r0, jit_gpr_t r1, jit_word_t i0) -{ - if (jit_x87_reg_p(r0)) - x87_ldxi_d(rn(r0), rn(r1), i0); - else - sse_ldxi_d(rn(r0), rn(r1), i0); -} - -void -_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_fpr_t r1) -{ - if (jit_x87_reg_p(r1)) - x87_stxi_d(i0, rn(r0), rn(r1)); - else - sse_stxi_d(i0, rn(r0), rn(r1)); -} - -static void -_patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node) -{ - jit_int32_t flag; - - assert(node->flag & jit_flag_node); - if (node->code == jit_code_movi) - flag = node->v.n->flag; - else - flag = node->u.n->flag; - assert(!(flag & jit_flag_patch)); - if (_jitc->patches.offset >= _jitc->patches.length) { - jit_realloc((jit_pointer_t *)&_jitc->patches.ptr, - _jitc->patches.length * sizeof(jit_patch_t), - (_jitc->patches.length + 1024) * sizeof(jit_patch_t)); - _jitc->patches.length += 1024; - } - _jitc->patches.ptr[_jitc->patches.offset].inst = instr; - _jitc->patches.ptr[_jitc->patches.offset].node = node; - ++_jitc->patches.offset; -} - -static void -_sse_from_x87_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - x87_stxi_f(CVT_OFFSET, _RBP_REGNO, r1); - sse_ldxi_f(r0, _RBP_REGNO, CVT_OFFSET); -} - -static void -_sse_from_x87_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - x87_stxi_d(CVT_OFFSET, _RBP_REGNO, r1); - sse_ldxi_d(r0, _RBP_REGNO, CVT_OFFSET); -} - -static void -_x87_from_sse_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - sse_stxi_f(CVT_OFFSET, _RBP_REGNO, r1); - x87_ldxi_f(r0, _RBP_REGNO, CVT_OFFSET); -} - -static void -_x87_from_sse_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) -{ - sse_stxi_d(CVT_OFFSET, _RBP_REGNO, r1); - x87_ldxi_d(r0, _RBP_REGNO, CVT_OFFSET); -} diff --git a/libguile/lightning/lib/lightning.c b/libguile/lightning/lib/lightning.c deleted file mode 100644 index 521746643..000000000 --- a/libguile/lightning/lib/lightning.c +++ /dev/null @@ -1,3391 +0,0 @@ -/* - * Copyright (C) 2012-2018 Free Software Foundation, Inc. - * - * This file is part of GNU lightning. - * - * GNU lightning is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU lightning is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * Authors: - * Paulo Cesar Pereira de Andrade - */ - -#define DEBUG 1 -#define DISASSEMBLER 0 -#define DEVEL_DISASSEMBLER 0 - -#include <lightning.h> -#include <lightning/jit_private.h> -#include <sys/mman.h> -#if defined(__sgi) -# include <fcntl.h> -#endif - -#ifndef MAP_ANON -# define MAP_ANON MAP_ANONYMOUS -# ifndef MAP_ANONYMOUS -# define MAP_ANONYMOUS 0 -# endif -#endif - -#define jit_regload_reload 0 /* convert to reload */ -#define jit_regload_delete 1 /* just remove node */ -#define jit_regload_isdead 2 /* delete and unset live bit */ - -#if __WORDSIZE == 32 -# define bmp_shift 5 -#else -# define bmp_shift 6 -#endif - -/* - * Prototypes - */ -static jit_word_t hash_data(const void*, jit_word_t); - -#define new_pool() _new_pool(_jit) -static void _new_pool(jit_state_t*); - -#define new_node(u) _new_node(_jit, u) -static jit_node_t *_new_node(jit_state_t*, jit_code_t); - -#define link_node(u) _link_node(_jit, u) -static inline jit_node_t *_link_node(jit_state_t*, jit_node_t*); - -#define del_node(u, v) _del_node(_jit, u, v) -static inline void _del_node(jit_state_t*, jit_node_t*, jit_node_t*); - -#define free_node(u) _free_node(_jit, u) -static inline void _free_node(jit_state_t*, jit_node_t*); - -#define del_label(u, v) _del_label(_jit, u, v) -static void _del_label(jit_state_t*, jit_node_t*, jit_node_t*); - -#define bmp_init() _bmp_init(_jit) -static void _bmp_init(jit_state_t*); - -#define bmp_clear() _bmp_clear(_jit) -static void _bmp_clear(jit_state_t*); - -#define bmp_zero() \ - memset(_jitc->blockmask.ptr, 0, \ - _jitc->blockmask.length * sizeof(jit_word_t)) - -#define bmp_set(bit) _bmp_set(_jit, bit) -static void _bmp_set(jit_state_t*, jit_word_t); - -#define bmp_clr(bit) _bmp_clr(_jit, bit) -static void _bmp_clr(jit_state_t*, jit_word_t) maybe_unused; - -#define bmp_tst(bit) _bmp_tst(_jit, bit) -static jit_bool_t _bmp_tst(jit_state_t*, jit_word_t); - -#define jit_dataset() _jit_dataset(_jit) -static void -_jit_dataset(jit_state_t *_jit); - -#define jit_setup(block) _jit_setup(_jit, block) -static void -_jit_setup(jit_state_t *_jit, jit_block_t *block); - -#define jit_update(node, live, mask, r) _jit_update(_jit, node, live, mask, r) -static void -_jit_update(jit_state_t *_jit, jit_node_t *node, - jit_regset_t *live, jit_regset_t *mask, jit_bool_t recurse); - -#define thread_jumps() _thread_jumps(_jit) -static void -_thread_jumps(jit_state_t *_jit); - -#define sequential_labels() _sequential_labels(_jit) -static void -_sequential_labels(jit_state_t *_jit); - -#define shortcut_jump(prev, node) _shortcut_jump(_jit, prev, node) -static jit_bool_t -_shortcut_jump(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node); - -#define redundant_jump(prev, node) _redundant_jump(_jit, prev, node) -static jit_bool_t -_redundant_jump(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node); - -static jit_code_t -reverse_jump_code(jit_code_t code); - -#define reverse_jump(prev, node) _reverse_jump(_jit, prev, node) -static jit_bool_t -_reverse_jump(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node); - -#define redundant_store(node, jump) _redundant_store(_jit, node, jump) -static void -_redundant_store(jit_state_t *_jit, jit_node_t *node, jit_bool_t jump); - -#define simplify_movr(p, n, k, s) _simplify_movr(_jit, p, n, k, s) -static jit_bool_t -_simplify_movr(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node, - jit_int32_t kind, jit_int32_t size); - -#define simplify_movi(p, n, k, s) _simplify_movi(_jit, p, n, k, s) -static jit_bool_t -_simplify_movi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node, - jit_int32_t kind, jit_int32_t size); - -#define simplify_ldxi(prev, node) _simplify_ldxi(_jit, prev, node) -static jit_bool_t -_simplify_ldxi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node); - -#define simplify_stxi(prev, node) _simplify_stxi(_jit, prev, node) -static jit_bool_t -_simplify_stxi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node); - -#define simplify_spill(node, regno) _simplify_spill(_jit, node, regno) -static void -_simplify_spill(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno); - -#define simplify() _simplify(_jit) -static void -_simplify(jit_state_t *_jit); - -#define jit_reg_undef -1 -#define jit_reg_static 0 -#define jit_reg_change 1 -#define register_change_p(n, l, r) _register_change_p(_jit, n, l, r) -static jit_int32_t -_register_change_p(jit_state_t *_jit, jit_node_t *node, jit_node_t *link, - jit_int32_t regno); - -#define spill_reglive_p(node, regno) _spill_reglive_p(_jit, node, regno) -static jit_bool_t -_spill_reglive_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno); - -#define patch_registers() _patch_registers(_jit) -static void -_patch_registers(jit_state_t *_jit); - -#define patch_register(n,l,r,p) _patch_register(_jit,n,l,r,p) -static void -_patch_register(jit_state_t *jit, jit_node_t *node, jit_node_t *link, - jit_int32_t regno, jit_int32_t patch); - -/* - * Initialization - */ -#if !defined(__sgi) -#define mmap_fd -1 -#endif - -/* - * Implementation - */ -void -init_jit(const char *progname) -{ - jit_get_cpu(); - jit_init_size(); -} - -void -finish_jit(void) -{ - jit_finish_size(); -} - -jit_int32_t -_jit_get_reg(jit_state_t *_jit, jit_int32_t regspec) -{ - jit_int32_t spec; - jit_int32_t regno; - - spec = regspec & ~(jit_class_chk|jit_class_nospill); - if (spec & jit_class_named) { - regno = jit_regno(spec); - if (jit_regset_tstbit(&_jitc->regsav, regno)) - /* fail if register is spilled */ - goto fail; - if (jit_regset_tstbit(&_jitc->regarg, regno)) - /* fail if register is an argument to current instruction */ - goto fail; - if (jit_regset_tstbit(&_jitc->reglive, regno)) { - if (regspec & jit_class_nospill) - /* fail if register is live and should not spill/reload */ - goto fail; - goto spill; - } - jit_regset_setbit(&_jitc->regarg, regno); - return (regno); - } - else - assert(jit_class(spec) != 0); - - if (_jitc->emit) { - /* search for a free register matching spec */ - for (regno = 0; regno < _jitc->reglen; regno++) { - if ((jit_class(_rvs[regno].spec) & spec) == spec && - !jit_regset_tstbit(&_jitc->regarg, regno) && - !jit_regset_tstbit(&_jitc->reglive, regno)) - goto regarg; - } - - /* search for a register matching spec that is not an argument - * for the current instruction */ - for (regno = 0; regno < _jitc->reglen; regno++) { - if ((jit_class(_rvs[regno].spec) & spec) == spec && - !jit_regset_tstbit(&_jitc->regsav, regno) && - !jit_regset_tstbit(&_jitc->regarg, regno) && - !(regspec & jit_class_nospill)) { - spill: - assert(_jitc->function != NULL); - if (spec & jit_class_gpr) { - if (!_jitc->function->regoff[regno]) { - _jitc->function->regoff[regno] = - jit_allocai(sizeof(jit_word_t)); - _jitc->again = 1; - } -#if DEBUG - /* emit_stxi must not need temporary registers */ - assert(!_jitc->getreg); - _jitc->getreg = 1; -#endif - emit_stxi(_jitc->function->regoff[regno], JIT_FP, regno); -#if DEBUG - _jitc->getreg = 0; -#endif - } - else { - if (!_jitc->function->regoff[regno]) { - _jitc->function->regoff[regno] = - jit_allocai(sizeof(jit_float64_t)); - _jitc->again = 1; - } -#if DEBUG - /* emit_stxi must not need temporary registers */ - assert(!_jitc->getreg); - _jitc->getreg = 1; -#endif - emit_stxi_d(_jitc->function->regoff[regno], JIT_FP, regno); -#if DEBUG - _jitc->getreg = 0; -#endif - } - jit_regset_setbit(&_jitc->regsav, regno); - regarg: - jit_regset_setbit(&_jitc->regarg, regno); - if (jit_class(_rvs[regno].spec) & jit_class_sav) { - /* if will modify callee save registers without a - * function prolog, better patch this assertion */ - assert(_jitc->function != NULL); - if (!jit_regset_tstbit(&_jitc->function->regset, regno)) { - jit_regset_setbit(&_jitc->function->regset, regno); - _jitc->again = 1; - } - } - return (regno); - } - } - } - else { - /* nospill hint only valid during emit" */ - assert(!(regspec & jit_class_nospill)); - for (regno = 0; regno < _jitc->reglen; regno++) { - if ((jit_class(_rvs[regno].spec) & spec) == spec && - !jit_regset_tstbit(&_jitc->regsav, regno) && - !jit_regset_tstbit(&_jitc->regarg, regno)) { - jit_regset_setbit(&_jitc->regarg, regno); - jit_regset_setbit(&_jitc->regsav, regno); - jit_save(regno); - return (jit_regno_patch|regno); - } - } - } - - /* Out of hardware registers */ -fail: - assert(regspec & jit_class_chk); - return (JIT_NOREG); -} - -void -_jit_unget_reg(jit_state_t *_jit, jit_int32_t regno) -{ - regno = jit_regno(regno); - if (jit_regset_tstbit(&_jitc->regsav, regno)) { - if (_jitc->emit) { -#if DEBUG - /* emit_ldxi must not need a temporary register */ - assert(!_jitc->getreg); - _jitc->getreg = 1; -#endif - if (jit_class(_rvs[regno].spec) & jit_class_gpr) - emit_ldxi(regno, JIT_FP, _jitc->function->regoff[regno]); - else - emit_ldxi_d(regno, JIT_FP, _jitc->function->regoff[regno]); -#if DEBUG - /* emit_ldxi must not need a temporary register */ - _jitc->getreg = 0; -#endif - } - else - jit_load(regno); - jit_regset_clrbit(&_jitc->regsav, regno); - } - assert(jit_regset_tstbit(&_jitc->regarg, regno) != 0); - jit_regset_clrbit(&_jitc->regarg, regno); -} - -jit_bool_t -_jit_callee_save_p(jit_state_t *_jit, jit_int32_t regno) -{ - assert(regno >= 0 && regno < JIT_NOREG); - return (!!(_rvs[regno].spec & jit_class_sav)); -} - -extern jit_bool_t -_jit_pointer_p(jit_state_t *_jit, jit_pointer_t address) -{ - return ((jit_uint8_t *)address >= _jit->code.ptr && - (jit_word_t)address < _jit->pc.w); -} - -#if __ia64__ -void -jit_regset_com(jit_regset_t *u, jit_regset_t *v) -{ - u->rl = ~v->rl; u->rh = ~v->rh; - u->fl = ~v->fl; u->fh = ~v->fh; -} - -void -jit_regset_and(jit_regset_t *u, jit_regset_t *v, jit_regset_t *w) -{ - u->rl = v->rl & w->rl; u->rh = v->rh & w->rh; - u->fl = v->fl & w->fl; u->fh = v->fh & w->fh; -} - -void -jit_regset_ior(jit_regset_t *u, jit_regset_t *v, jit_regset_t *w) -{ - u->rl = v->rl | w->rl; u->rh = v->rh | w->rh; - u->fl = v->fl | w->fl; u->fh = v->fh | w->fh; -} - -void -jit_regset_xor(jit_regset_t *u, jit_regset_t *v, jit_regset_t *w) -{ - u->rl = v->rl ^ w->rl; u->rh = v->rh ^ w->rh; - u->fl = v->fl ^ w->fl; u->fh = v->fh ^ w->fh; -} - -void -jit_regset_set(jit_regset_t *u, jit_regset_t *v) -{ - u->rl = v->rl; u->rh = v->rh; - u->fl = v->fl; u->fh = v->fh; -} - -void -jit_regset_set_mask(jit_regset_t *u, jit_int32_t v) -{ - jit_bool_t w = !!(v & (v - 1)); - - assert(v >= 0 && v <= 256); - if (v == 0) - u->rl = u->rh = u->fl = u->fh = -1LL; - else if (v <= 64) { - u->rl = w ? (1LL << v) - 1 : -1LL; - u->rh = u->fl = u->fh = 0; - } - else if (v <= 128) { - u->rl = -1LL; - u->rh = w ? (1LL << (v - 64)) - 1 : -1LL; - u->fl = u->fh = 0; - } - else if (v <= 192) { - u->rl = u->rh = -1LL; - u->fl = w ? (1LL << (v - 128)) - 1 : -1LL; - u->fh = 0; - } - else { - u->rl = u->rh = u->fl = -1LL; - u->fh = w ? (1LL << (v - 128)) - 1 : -1LL; - } -} - -jit_bool_t -jit_regset_cmp_ui(jit_regset_t *u, jit_word_t v) -{ - return !((u->rl == v && u->rh == 0 && u->fl == 0 && u->fh == 0)); -} - -void -jit_regset_set_ui(jit_regset_t *u, jit_word_t v) -{ - u->rl = v; - u->rh = u->fl = u->fh = 0; -} - -jit_bool_t -jit_regset_set_p(jit_regset_t *u) -{ - return (u->rl || u->rh || u->fl || u->fh); -} - -void -jit_regset_clrbit(jit_regset_t *set, jit_int32_t bit) -{ - assert(bit >= 0 && bit <= 255); - if (bit < 64) - set->rl &= ~(1LL << bit); - else if (bit < 128) - set->rh &= ~(1LL << (bit - 64)); - else if (bit < 192) - set->fl &= ~(1LL << (bit - 128)); - else - set->fh &= ~(1LL << (bit - 192)); -} - -void -jit_regset_setbit(jit_regset_t *set, jit_int32_t bit) -{ - assert(bit >= 0 && bit <= 255); - if (bit < 64) - set->rl |= 1LL << bit; - else if (bit < 128) - set->rh |= 1LL << (bit - 64); - else if (bit < 192) - set->fl |= 1LL << (bit - 128); - else - set->fh |= 1LL << (bit - 192); -} - -jit_bool_t -jit_regset_tstbit(jit_regset_t *set, jit_int32_t bit) -{ - assert(bit >= 0 && bit <= 255); - if (bit < 64) - return (!!(set->rl & (1LL << bit))); - else if (bit < 128) - return (!!(set->rh & (1LL << (bit - 64)))); - else if (bit < 192) - return (!!(set->fl & (1LL << (bit - 128)))); - return (!!(set->fh & (1LL << (bit - 192)))); -} - -unsigned long -jit_regset_scan1(jit_regset_t *set, jit_int32_t offset) -{ - assert(offset >= 0 && offset <= 255); - for (; offset < 64; offset++) { - if (set->rl & (1LL << offset)) - return (offset); - } - for (; offset < 128; offset++) { - if (set->rh & (1LL << (offset - 64))) - return (offset); - } - for (; offset < 192; offset++) { - if (set->fl & (1LL << (offset - 128))) - return (offset); - } - for (; offset < 256; offset++) { - if (set->fh & (1LL << (offset - 192))) - return (offset); - } - return (ULONG_MAX); -} - -#elif __sparc__ && __WORDSIZE == 64 -void -jit_regset_com(jit_regset_t *u, jit_regset_t *v) -{ - u->rl = ~v->rl; u->rh = ~v->rh; -} - -void -jit_regset_and(jit_regset_t *u, jit_regset_t *v, jit_regset_t *w) -{ - u->rl = v->rl & w->rl; u->rh = v->rh & w->rh; -} - -void -jit_regset_ior(jit_regset_t *u, jit_regset_t *v, jit_regset_t *w) -{ - u->rl = v->rl | w->rl; u->rh = v->rh | w->rh; -} - -void -jit_regset_xor(jit_regset_t *u, jit_regset_t *v, jit_regset_t *w) -{ - u->rl = v->rl ^ w->rl; u->rh = v->rh ^ w->rh; -} - -void -jit_regset_set(jit_regset_t *u, jit_regset_t *v) -{ - u->rl = v->rl; u->rh = v->rh; -} - -void -jit_regset_set_mask(jit_regset_t *u, jit_int32_t v) -{ - jit_bool_t w = !!(v & (v - 1)); - - assert(v >= 0 && v <= 128); - if (v == 0) - u->rl = u->rh = -1LL; - else if (v <= 64) { - u->rl = w ? (1LL << v) - 1 : -1LL; - u->rh = 0; - } - else { - u->rl = -1LL; - u->rh = w ? (1LL << (v - 64)) - 1 : -1LL; - } -} - -jit_bool_t -jit_regset_cmp_ui(jit_regset_t *u, jit_word_t v) -{ - return !((u->rl == v && u->rh == 0)); -} - -void -jit_regset_set_ui(jit_regset_t *u, jit_word_t v) -{ - u->rl = v; - u->rh = 0; -} - -jit_bool_t -jit_regset_set_p(jit_regset_t *u) -{ - return (u->rl || u->rh); -} - -void -jit_regset_clrbit(jit_regset_t *set, jit_int32_t bit) -{ - assert(bit >= 0 && bit <= 128); - if (bit < 64) - set->rl &= ~(1LL << bit); - else - set->rh &= ~(1LL << (bit - 64)); -} - -void -jit_regset_setbit(jit_regset_t *set, jit_int32_t bit) -{ - assert(bit >= 0 && bit <= 127); - if (bit < 64) - set->rl |= 1LL << bit; - else - set->rh |= 1LL << (bit - 64); -} - -jit_bool_t -jit_regset_tstbit(jit_regset_t *set, jit_int32_t bit) -{ - assert(bit >= 0 && bit <= 127); - if (bit < 64) - return (!!(set->rl & (1LL << bit))); - else - return (!!(set->rh & (1LL << (bit - 64)))); -} - -unsigned long -jit_regset_scan1(jit_regset_t *set, jit_int32_t offset) -{ - assert(offset >= 0 && offset <= 127); - for (; offset < 64; offset++) { - if (set->rl & (1LL << offset)) - return (offset); - } - for (; offset < 128; offset++) { - if (set->rh & (1LL << (offset - 64))) - return (offset); - } - return (ULONG_MAX); -} - -#else -unsigned long -jit_regset_scan1(jit_regset_t *set, jit_int32_t offset) -{ - jit_regset_t mask; - assert(offset >= 0 && offset <= 63); - if ((mask = *set >> offset)) { - for (;;) { - if (mask & 1) - return (offset); - mask >>= 1; - ++offset; - } - } - return (ULONG_MAX); -} -#endif - -void -_jit_save(jit_state_t *_jit, jit_int32_t reg) -{ - reg = jit_regno(reg); - assert(!_jitc->realize); - _jitc->spill[reg] = jit_new_node_w(jit_code_save, reg); -} - -void -_jit_load(jit_state_t *_jit, jit_int32_t reg) -{ - jit_node_t *node; - - reg = jit_regno(reg); - assert(!_jitc->realize); - assert(_jitc->spill[reg] != NULL); - node = jit_new_node_w(jit_code_load, reg); - /* create a path to flag the save/load is not required */ - node->link = _jitc->spill[reg]; - node->link->link = node; - _jitc->spill[reg] = NULL; -} - -static jit_word_t -hash_data(const void *data, jit_word_t length) -{ - const jit_uint8_t *ptr; - jit_word_t i, key; - for (i = key = 0, ptr = data; i < length; i++) - key = (key << (key & 1)) ^ ptr[i]; - return (key); -} - -jit_pointer_t -_jit_address(jit_state_t *_jit, jit_node_t *node) -{ - assert(_jitc->done); - assert(node != NULL && - /* If a node type that is documented to be a fixed marker */ - (node->code == jit_code_note || node->code == jit_code_name || - /* If another special fixed marker, returned by jit_indirect() */ - (node->code == jit_code_label && (node->flag & jit_flag_use) != 0))); - return ((jit_pointer_t)node->u.w); -} - -jit_node_t * -_jit_data(jit_state_t *_jit, const void *data, - jit_word_t length, jit_int32_t align) -{ - jit_word_t key; - jit_node_t *node; - - assert(!_jitc->realize); - - /* Ensure there is space even if asking for a duplicate */ - if (((_jitc->data.offset + 7) & -8) + length > _jit->data.length) { - jit_word_t size; - - size = (_jit->data.length + length + 4096) & - 4095; - assert(size >= _jit->data.length); - if (_jitc->data.ptr == NULL) - jit_alloc((jit_pointer_t *)&_jitc->data.ptr, size); - else - jit_realloc((jit_pointer_t *)&_jitc->data.ptr, - _jit->data.length, size); - _jit->data.length = size; - } - if (_jitc->data.table == NULL) - jit_alloc((jit_pointer_t *)&_jitc->data.table, - (_jitc->data.size = 16) * sizeof(jit_node_t*)); - - key = hash_data(data, length) & (_jitc->data.size - 1); - node = _jitc->data.table[key]; - for (; node; node = node->next) { - if (node->v.w == length && - memcmp(_jitc->data.ptr + node->u.w, data, length) == 0) - break; - } - - if (!node) { - node = jit_new_node_no_link(jit_code_data); - if (!align) - align = length; - switch (align) { - case 0: case 1: - break; - case 2: - _jitc->data.offset = (_jitc->data.offset + 1) & -2; - break; - case 3: case 4: - _jitc->data.offset = (_jitc->data.offset + 3) & -4; - break; - default: - _jitc->data.offset = (_jitc->data.offset + 7) & -8; - break; - } - node->u.w = _jitc->data.offset; - node->v.w = length; - jit_memcpy(_jitc->data.ptr + _jitc->data.offset, data, length); - _jitc->data.offset += length; - - node->next = _jitc->data.table[key]; - _jitc->data.table[key] = node; - ++_jitc->data.count; - - /* Rehash if more than 75% used table */ - if (_jitc->data.count > - (_jitc->data.size >> 1) + (_jitc->data.size >> 2) && - (_jitc->data.size << 1) > _jitc->data.size) { - jit_word_t i; - jit_node_t **hash; - jit_node_t *next; - jit_node_t *temp; - - jit_alloc((jit_pointer_t *)&hash, - (_jitc->data.size << 1) * sizeof(jit_node_t*)); - for (i = 0; i < _jitc->data.size; i++) { - temp = _jitc->data.table[i]; - for (; temp; temp = next) { - next = temp->next; - key = hash_data(_jitc->data.ptr + temp->u.w, temp->v.w) & - ((_jitc->data.size << 1) - 1); - temp->next = hash[key]; - hash[key] = temp; - } - } - jit_free((jit_pointer_t *)&_jitc->data.table); - _jitc->data.table = hash; - _jitc->data.size <<= 1; - } - } - - return (node); -} - -static void -_new_pool(jit_state_t *_jit) -{ - jit_node_t *list; - jit_int32_t offset; - - if (_jitc->pool.offset >= _jitc->pool.length) { - jit_int32_t length; - - length = _jitc->pool.length + 16; - jit_realloc((jit_pointer_t *)&_jitc->pool.ptr, - _jitc->pool.length * sizeof(jit_node_t *), - length * sizeof(jit_node_t *)); - _jitc->pool.length = length; - } - jit_alloc((jit_pointer_t *)(_jitc->pool.ptr + _jitc->pool.offset), - sizeof(jit_node_t) * 1024); - list = _jitc->pool.ptr[_jitc->pool.offset]; - for (offset = 1; offset < 1024; offset++, list++) - list->next = list + 1; - list->next = _jitc->list; - _jitc->list = _jitc->pool.ptr[_jitc->pool.offset]; - ++_jitc->pool.offset; -} - -static jit_node_t * -_new_node(jit_state_t *_jit, jit_code_t code) -{ - jit_node_t *node; - - if (_jitc->list == NULL) - new_pool(); - node = _jitc->list; - _jitc->list = node->next; - if (_jitc->synth) - node->flag |= jit_flag_synth; - node->next = NULL; - node->code = code; - - return (node); -} - -static inline jit_node_t * -_link_node(jit_state_t *_jit, jit_node_t *node) -{ - if (_jitc->tail) - _jitc->tail->next = node; - else - _jitc->head = node; - return (_jitc->tail = node); -} - -static inline void -_del_node(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - if (prev == node) { - assert(prev == _jitc->head); - _jitc->head = node->next; - } - else - prev->next = node->next; - memset(node, 0, sizeof(jit_node_t)); - node->next = _jitc->list; - _jitc->list = node; -} - -static inline void -_free_node(jit_state_t *_jit, jit_node_t *node) -{ - memset(node, 0, sizeof(jit_node_t)); - node->next = _jitc->list; - _jitc->list = node; -} - -static void -_del_label(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - jit_block_t *block; - - /* only allow call to del_label on linked labels */ - block = _jitc->blocks.ptr + node->v.w; - assert(block->label == node); - - /* del_label() should only be called when optimizing. - * This will leave an empty block index */ - jit_regset_del(&block->reglive); - jit_regset_del(&block->regmask); - block->label = NULL; - - /* redundant, should be already true */ - assert(node->link == NULL); - del_node(prev, node); -} - -static void -_bmp_init(jit_state_t *_jit) -{ - _jitc->blockmask.length = 16; - jit_alloc((jit_pointer_t *)&_jitc->blockmask.ptr, - sizeof(jit_word_t) * _jitc->blockmask.length); -} - -static void -_bmp_clear(jit_state_t *_jit) -{ - _jitc->blockmask.length = 0; - jit_free((jit_pointer_t *)&_jitc->blockmask.ptr); -} - -static void -_bmp_set(jit_state_t *_jit, jit_word_t bit) -{ - jit_word_t woff, boff; - - woff = bit >> bmp_shift; - boff = 1LL << (bit & (__WORDSIZE - 1)); - if (woff >= _jitc->blockmask.length) { - jit_word_t length = (woff + 16) & -16; - jit_realloc((jit_pointer_t *)&_jitc->blockmask.ptr, - _jitc->blockmask.length * sizeof(jit_word_t), - length * sizeof(jit_word_t)); - _jitc->blockmask.length = length; - } - _jitc->blockmask.ptr[woff] |= boff; -} - -static void -_bmp_clr(jit_state_t *_jit, jit_word_t bit) -{ - jit_word_t woff, boff; - - woff = bit >> bmp_shift; - boff = 1LL << (bit & (__WORDSIZE - 1)); - if (woff < _jitc->blockmask.length) - _jitc->blockmask.ptr[woff] &= ~boff; -} - -static jit_bool_t -_bmp_tst(jit_state_t *_jit, jit_word_t bit) -{ - jit_word_t woff, boff; - - woff = bit >> bmp_shift; - boff = 1LL << (bit & (__WORDSIZE - 1)); - if (woff < _jitc->blockmask.length) - return ((_jitc->blockmask.ptr[woff] & boff) != 0); - return (0); -} - -jit_state_t * -jit_new_state(void) -{ - jit_state_t *_jit; - - jit_alloc((jit_pointer_t *)&_jit, sizeof(jit_state_t)); - jit_alloc((jit_pointer_t *)&_jitc, sizeof(jit_compiler_t)); - jit_regset_new(&_jitc->regarg); - jit_regset_new(&_jitc->regsav); - jit_regset_new(&_jitc->reglive); - jit_regset_new(&_jitc->regmask); - bmp_init(); - - jit_init(); - - jit_alloc((jit_pointer_t *)&_jitc->spill, - _jitc->reglen * sizeof(jit_node_t*)); - jit_alloc((jit_pointer_t *)&_jitc->gen, - _jitc->reglen * sizeof(jit_int32_t)); - jit_alloc((jit_pointer_t *)&_jitc->values, - _jitc->reglen * sizeof(jit_value_t)); - - jit_alloc((jit_pointer_t *)&_jitc->patches.ptr, - (_jitc->patches.length = 1024) * sizeof(jit_patch_t)); - jit_alloc((jit_pointer_t *)&_jitc->functions.ptr, - (_jitc->functions.length = 16) * sizeof(jit_function_t)); - jit_alloc((jit_pointer_t *)&_jitc->pool.ptr, - (_jitc->pool.length = 16) * sizeof(jit_node_t*)); - jit_alloc((jit_pointer_t *)&_jitc->blocks.ptr, - (_jitc->blocks.length = 16) * sizeof(jit_block_t)); - - /* allocate at most one extra note in case jit_name() is - * never called, or called after adding at least one note */ - _jit->note.length = 1; - _jitc->note.size = sizeof(jit_note_t); - - return (_jit); -} - -void -_jit_clear_state(jit_state_t *_jit) -{ - jit_word_t offset; - jit_function_t *function; - - /* release memory not required at jit execution time and set - * pointers to NULL to explicitly know they are released */ - _jitc->head = _jitc->tail = NULL; - - bmp_clear(); - - jit_free((jit_pointer_t *)&_jitc->data.table); - _jitc->data.size = _jitc->data.count = 0; - - jit_free((jit_pointer_t *)&_jitc->spill); - jit_free((jit_pointer_t *)&_jitc->gen); - jit_free((jit_pointer_t *)&_jitc->values); - - jit_free((jit_pointer_t *)&_jitc->blocks.ptr); - - jit_free((jit_pointer_t *)&_jitc->patches.ptr); - _jitc->patches.offset = _jitc->patches.length = 0; - - for (offset = 0; offset < _jitc->functions.offset; offset++) { - function = _jitc->functions.ptr + offset; - jit_free((jit_pointer_t *)&function->regoff); - } - jit_free((jit_pointer_t *)&_jitc->functions.ptr); - _jitc->functions.offset = _jitc->functions.length = 0; - _jitc->function = NULL; - - for (offset = 0; offset < _jitc->pool.offset; offset++) - jit_free((jit_pointer_t *)(_jitc->pool.ptr + offset)); - jit_free((jit_pointer_t *)&_jitc->pool.ptr); - _jitc->pool.offset = _jitc->pool.length = 0; - _jitc->list = NULL; - - _jitc->note.head = _jitc->note.tail = - _jitc->note.name = _jitc->note.note = NULL; - _jitc->note.base = NULL; - -#if __powerpc64__ || __ia64__ - jit_free((jit_pointer_t *)&_jitc->prolog.ptr); -#endif - -#if __ia64__ - jit_regset_del(&_jitc->regs); -#endif - - jit_free((jit_pointer_t *)&_jitc); -} - -void -_jit_destroy_state(jit_state_t *_jit) -{ - if (!_jit->user_code) - munmap(_jit->code.ptr, _jit->code.length); - if (!_jit->user_data) - munmap(_jit->data.ptr, _jit->data.length); - jit_free((jit_pointer_t *)&_jit); -} - -void -_jit_synth_inc(jit_state_t *_jit) -{ - assert(_jitc->synth < 8); - ++_jitc->synth; -} - -jit_node_t * -_jit_new_node(jit_state_t *_jit, jit_code_t code) -{ - assert(!_jitc->realize); - return (link_node(new_node(code))); -} - -jit_node_t * -_jit_new_node_no_link(jit_state_t *_jit, jit_code_t code) -{ - assert(!_jitc->realize); - return (new_node(code)); -} - -void -_jit_link_node(jit_state_t *_jit, jit_node_t *node) -{ - assert(!_jitc->realize); - link_node(node); -} - -void -_jit_synth_dec(jit_state_t *_jit) -{ - assert(_jitc->synth > 0); - --_jitc->synth; -} - -jit_node_t * -_jit_new_node_w(jit_state_t *_jit, jit_code_t code, - jit_word_t u) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_f(jit_state_t *_jit, jit_code_t code, - jit_float32_t u) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.f = u; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_d(jit_state_t *_jit, jit_code_t code, - jit_float64_t u) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.d = u; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_p(jit_state_t *_jit, jit_code_t code, - jit_pointer_t u) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.p = u; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_ww(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_word_t v) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - node->v.w = v; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_wp(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_pointer_t v) -{ - return (jit_new_node_ww(code, u, (jit_word_t)v)); -} - -jit_node_t * -_jit_new_node_fp(jit_state_t *_jit, jit_code_t code, - jit_float32_t u, jit_pointer_t v) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.f = u; - node->v.w = (jit_word_t)v; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_dp(jit_state_t *_jit, jit_code_t code, - jit_float64_t u, jit_pointer_t v) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.d = u; - node->v.w = (jit_word_t)v; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_pw(jit_state_t *_jit, jit_code_t code, - jit_pointer_t u, jit_word_t v) -{ - return (jit_new_node_ww(code, (jit_word_t)u, v)); -} - -jit_node_t * -_jit_new_node_wf(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_float32_t v) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - node->v.f = v; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_wd(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_float64_t v) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - node->v.d = v; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_www(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_word_t v, jit_word_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - node->v.w = v; - node->w.w = w; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_qww(jit_state_t *_jit, jit_code_t code, - jit_int32_t l, jit_int32_t h, - jit_word_t v, jit_word_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - assert(l != h); - node->u.q.l = l; - node->u.q.h = h; - node->v.w = v; - node->w.w = w; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_wwf(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_word_t v, jit_float32_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - node->v.w = v; - node->w.f = w; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_wwd(jit_state_t *_jit, jit_code_t code, - jit_word_t u, jit_word_t v, jit_float64_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.w = u; - node->v.w = v; - node->w.d = w; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_pww(jit_state_t *_jit, jit_code_t code, - jit_pointer_t u, jit_word_t v, jit_word_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.p = u; - node->v.w = v; - node->w.w = w; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_pwf(jit_state_t *_jit, jit_code_t code, - jit_pointer_t u, jit_word_t v, jit_float32_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.p = u; - node->v.w = v; - node->w.f = w; - return (link_node(node)); -} - -jit_node_t * -_jit_new_node_pwd(jit_state_t *_jit, jit_code_t code, - jit_pointer_t u, jit_word_t v, jit_float64_t w) -{ - jit_node_t *node = new_node(code); - assert(!_jitc->realize); - node->u.p = u; - node->v.w = v; - node->w.d = w; - return (link_node(node)); -} - -jit_node_t * -_jit_label(jit_state_t *_jit) -{ - jit_node_t *node; - - if (!(node = _jitc->tail) || node->code != jit_code_label) { - node = jit_forward(); - jit_link(node); - } - - return (node); -} - -jit_node_t * -_jit_forward(jit_state_t *_jit) -{ - return (jit_new_node_no_link(jit_code_label)); -} - -jit_node_t * -_jit_indirect(jit_state_t *_jit) -{ - jit_node_t *node; - - node = jit_label(); - node->flag |= jit_flag_use; - - return (node); -} - -void -_jit_link(jit_state_t *_jit, jit_node_t *node) -{ - jit_block_t *block; - - assert((node->code == jit_code_label || - node->code == jit_code_prolog || - node->code == jit_code_epilog) && !node->next); - jit_link_node(node); - if (_jitc->blocks.offset >= _jitc->blocks.length) { - jit_word_t length; - - length = _jitc->blocks.length + 16; - jit_realloc((jit_pointer_t *)&_jitc->blocks.ptr, - _jitc->blocks.length * sizeof(jit_block_t), - length * sizeof(jit_block_t)); - _jitc->blocks.length = length; - } - block = _jitc->blocks.ptr + _jitc->blocks.offset; - block->label = node; - node->v.w = _jitc->blocks.offset; - jit_regset_new(&block->reglive); - jit_regset_new(&block->regmask); - ++_jitc->blocks.offset; -} - -jit_bool_t -_jit_forward_p(jit_state_t *_jit, jit_node_t *node) -{ - return (node->code == jit_code_label && !node->next && node != _jitc->tail); -} - -jit_bool_t -_jit_indirect_p(jit_state_t *_jit, jit_node_t *node) -{ - return (node->code == jit_code_label && !!(node->flag & jit_flag_use)); -} - -jit_bool_t -_jit_target_p(jit_state_t *_jit, jit_node_t *node) -{ - return (node->code == jit_code_label && !!node->link); -} - -void -_jit_prepare(jit_state_t *_jit) -{ - assert(_jitc->function != NULL); - _jitc->function->call.call = jit_call_default; - _jitc->function->call.argi = - _jitc->function->call.argf = - _jitc->function->call.size = 0; - _jitc->prepare = jit_new_node(jit_code_prepare); -} - -void -_jit_patch(jit_state_t* _jit, jit_node_t *instr) -{ - jit_node_t *label; - - if (!(label = _jitc->tail) || label->code != jit_code_label) - label = jit_label(); - jit_patch_at(instr, label); -} - -jit_int32_t -_jit_classify(jit_state_t *_jit, jit_code_t code) -{ - jit_int32_t mask; - - switch (code) { - case jit_code_data: case jit_code_save: case jit_code_load: - case jit_code_name: case jit_code_label: case jit_code_note: - case jit_code_prolog: case jit_code_ellipsis: case jit_code_va_push: - case jit_code_epilog: case jit_code_ret: case jit_code_prepare: - mask = 0; - break; - case jit_code_live: case jit_code_va_end: - case jit_code_retr: case jit_code_retr_f: case jit_code_retr_d: - case jit_code_pushargr: case jit_code_pushargr_f: - case jit_code_pushargr_d: - case jit_code_finishr: /* synthesized will set jit_cc_a0_jmp */ - mask = jit_cc_a0_reg; - break; - case jit_code_align: case jit_code_reti: case jit_code_pushargi: - case jit_code_finishi: /* synthesized will set jit_cc_a0_jmp */ - mask = jit_cc_a0_int; - break; - case jit_code_reti_f: case jit_code_pushargi_f: - mask = jit_cc_a0_flt; - break; - case jit_code_reti_d: case jit_code_pushargi_d: - mask = jit_cc_a0_dbl; - break; - case jit_code_allocai: - mask = jit_cc_a0_int|jit_cc_a1_int; - break; - case jit_code_arg: case jit_code_arg_f: case jit_code_arg_d: - mask = jit_cc_a0_int|jit_cc_a0_arg; - break; - case jit_code_calli: case jit_code_jmpi: - mask = jit_cc_a0_jmp; - break; - case jit_code_callr: case jit_code_jmpr: - mask = jit_cc_a0_reg|jit_cc_a0_jmp; - break; - case jit_code_retval_c: case jit_code_retval_uc: - case jit_code_retval_s: case jit_code_retval_us: - case jit_code_retval_i: case jit_code_retval_ui: - case jit_code_retval_l: - case jit_code_retval_f: case jit_code_retval_d: - case jit_code_va_start: - mask = jit_cc_a0_reg|jit_cc_a0_chg; - break; - case jit_code_getarg_c: case jit_code_getarg_uc: - case jit_code_getarg_s: case jit_code_getarg_us: - case jit_code_getarg_i: case jit_code_getarg_ui: - case jit_code_getarg_l: - case jit_code_getarg_f: case jit_code_getarg_d: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_arg; - break; - case jit_code_putargr: case jit_code_putargr_f: - case jit_code_putargr_d: - mask = jit_cc_a0_reg|jit_cc_a1_arg; - break; - case jit_code_putargi: - mask = jit_cc_a0_int|jit_cc_a1_arg; - break; - case jit_code_putargi_f: - mask = jit_cc_a0_flt|jit_cc_a1_arg; - break; - case jit_code_putargi_d: - mask = jit_cc_a0_dbl|jit_cc_a1_arg; - break; - case jit_code_movi: case jit_code_ldi_c: case jit_code_ldi_uc: - case jit_code_ldi_s: case jit_code_ldi_us: case jit_code_ldi_i: - case jit_code_ldi_ui: case jit_code_ldi_l: case jit_code_ldi_f: - case jit_code_ldi_d: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_int; - break; - case jit_code_movi_f: case jit_code_movi_f_w: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_flt; - break; - case jit_code_movi_d: case jit_code_movi_d_w: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_dbl; - break; - case jit_code_movi_d_ww: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg|jit_cc_a1_chg| - jit_cc_a2_dbl; - break; - case jit_code_negr: case jit_code_comr: case jit_code_movr: - case jit_code_extr_c: case jit_code_extr_uc: case jit_code_extr_s: - case jit_code_extr_us: case jit_code_extr_i: case jit_code_extr_ui: - case jit_code_truncr_f_i: case jit_code_truncr_f_l: - case jit_code_truncr_d_i: case jit_code_truncr_d_l: - case jit_code_htonr_us: case jit_code_htonr_ui: case jit_code_htonr_ul: - case jit_code_ldr_c: case jit_code_ldr_uc: - case jit_code_ldr_s: case jit_code_ldr_us: case jit_code_ldr_i: - case jit_code_ldr_ui: case jit_code_ldr_l: case jit_code_negr_f: - case jit_code_absr_f: case jit_code_sqrtr_f: case jit_code_movr_f: - case jit_code_extr_f: case jit_code_extr_d_f: case jit_code_ldr_f: - case jit_code_negr_d: case jit_code_absr_d: case jit_code_sqrtr_d: - case jit_code_movr_d: case jit_code_extr_d: case jit_code_extr_f_d: - case jit_code_ldr_d: - case jit_code_movr_w_f: case jit_code_movr_f_w: - case jit_code_movr_w_d: case jit_code_movr_d_w: - case jit_code_va_arg: case jit_code_va_arg_d: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg; - break; - case jit_code_movr_d_ww: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg|jit_cc_a1_chg| - jit_cc_a2_reg; - break; - case jit_code_addi: case jit_code_addxi: case jit_code_addci: - case jit_code_subi: case jit_code_subxi: case jit_code_subci: - case jit_code_rsbi: - case jit_code_muli: case jit_code_divi: case jit_code_divi_u: - case jit_code_remi: case jit_code_remi_u: case jit_code_andi: - case jit_code_ori: case jit_code_xori: case jit_code_lshi: - case jit_code_rshi: case jit_code_rshi_u: case jit_code_lti: - case jit_code_lti_u: case jit_code_lei: case jit_code_lei_u: - case jit_code_eqi: case jit_code_gei: case jit_code_gei_u: - case jit_code_gti: case jit_code_gti_u: case jit_code_nei: - case jit_code_ldxi_c: case jit_code_ldxi_uc: case jit_code_ldxi_s: - case jit_code_ldxi_us: case jit_code_ldxi_i: case jit_code_ldxi_ui: - case jit_code_ldxi_l: case jit_code_ldxi_f: case jit_code_ldxi_d: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg|jit_cc_a2_int; - break; - case jit_code_qmuli: case jit_code_qmuli_u: - case jit_code_qdivi: case jit_code_qdivi_u: - mask = jit_cc_a0_reg|jit_cc_a0_rlh|jit_cc_a0_chg| - jit_cc_a1_reg|jit_cc_a2_int; - break; - case jit_code_addi_f: case jit_code_subi_f: case jit_code_rsbi_f: - case jit_code_muli_f: case jit_code_divi_f: case jit_code_lti_f: - case jit_code_lei_f: case jit_code_eqi_f: case jit_code_gei_f: - case jit_code_gti_f: case jit_code_nei_f: case jit_code_unlti_f: - case jit_code_unlei_f: case jit_code_uneqi_f: case jit_code_ungei_f: - case jit_code_ungti_f: case jit_code_ltgti_f: case jit_code_ordi_f: - case jit_code_unordi_f: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg|jit_cc_a2_flt; - break; - case jit_code_addi_d: case jit_code_subi_d: case jit_code_rsbi_d: - case jit_code_muli_d: case jit_code_divi_d: case jit_code_lti_d: - case jit_code_lei_d: case jit_code_eqi_d: case jit_code_gei_d: - case jit_code_gti_d: case jit_code_nei_d: case jit_code_unlti_d: - case jit_code_unlei_d: case jit_code_uneqi_d: case jit_code_ungei_d: - case jit_code_ungti_d: case jit_code_ltgti_d: case jit_code_ordi_d: - case jit_code_unordi_d: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg|jit_cc_a2_dbl; - break; - case jit_code_addr: case jit_code_addxr: case jit_code_addcr: - case jit_code_subr: case jit_code_subxr: case jit_code_subcr: - case jit_code_mulr: case jit_code_divr: case jit_code_divr_u: - case jit_code_remr: case jit_code_remr_u: case jit_code_andr: - case jit_code_orr: case jit_code_xorr: case jit_code_lshr: - case jit_code_rshr: case jit_code_rshr_u: case jit_code_ltr: - case jit_code_ltr_u: case jit_code_ler: case jit_code_ler_u: - case jit_code_eqr: case jit_code_ger: case jit_code_ger_u: - case jit_code_gtr: case jit_code_gtr_u: case jit_code_ner: - case jit_code_ldxr_c: case jit_code_ldxr_uc: case jit_code_ldxr_s: - case jit_code_ldxr_us: case jit_code_ldxr_i: case jit_code_ldxr_ui: - case jit_code_ldxr_l: case jit_code_addr_f: case jit_code_subr_f: - case jit_code_mulr_f: case jit_code_divr_f: case jit_code_ltr_f: - case jit_code_ler_f: case jit_code_eqr_f: case jit_code_ger_f: - case jit_code_gtr_f: case jit_code_ner_f: case jit_code_unltr_f: - case jit_code_unler_f: case jit_code_uneqr_f: case jit_code_unger_f: - case jit_code_ungtr_f: case jit_code_ltgtr_f: case jit_code_ordr_f: - case jit_code_unordr_f: case jit_code_ldxr_f: case jit_code_addr_d: - case jit_code_subr_d: case jit_code_mulr_d: case jit_code_divr_d: - case jit_code_ltr_d: case jit_code_ler_d: case jit_code_eqr_d: - case jit_code_ger_d: case jit_code_gtr_d: case jit_code_ner_d: - case jit_code_unltr_d: case jit_code_unler_d: case jit_code_uneqr_d: - case jit_code_unger_d: case jit_code_ungtr_d: case jit_code_ltgtr_d: - case jit_code_ordr_d: case jit_code_unordr_d: case jit_code_ldxr_d: - case jit_code_movr_ww_d: - mask = jit_cc_a0_reg|jit_cc_a0_chg|jit_cc_a1_reg|jit_cc_a2_reg; - break; - case jit_code_qmulr: case jit_code_qmulr_u: - case jit_code_qdivr: case jit_code_qdivr_u: - mask = jit_cc_a0_reg|jit_cc_a0_rlh|jit_cc_a0_chg| - jit_cc_a1_reg|jit_cc_a2_reg; - break; - case jit_code_sti_c: case jit_code_sti_s: case jit_code_sti_i: - case jit_code_sti_l: case jit_code_sti_f: case jit_code_sti_d: - mask = jit_cc_a0_int|jit_cc_a1_reg; - break; - case jit_code_blti: case jit_code_blti_u: case jit_code_blei: - case jit_code_blei_u: case jit_code_beqi: case jit_code_bgei: - case jit_code_bgei_u: case jit_code_bgti: case jit_code_bgti_u: - case jit_code_bnei: case jit_code_bmsi: case jit_code_bmci: - mask = jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_int; - break; - case jit_code_blti_f: case jit_code_blei_f: case jit_code_beqi_f: - case jit_code_bgei_f: case jit_code_bgti_f: case jit_code_bnei_f: - case jit_code_bunlti_f: case jit_code_bunlei_f: case jit_code_buneqi_f: - case jit_code_bungei_f: case jit_code_bungti_f: case jit_code_bltgti_f: - case jit_code_bordi_f: case jit_code_bunordi_f: - mask = jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_flt; - break; - case jit_code_blti_d: case jit_code_blei_d: case jit_code_beqi_d: - case jit_code_bgei_d: case jit_code_bgti_d: case jit_code_bnei_d: - case jit_code_bunlti_d: case jit_code_bunlei_d: case jit_code_buneqi_d: - case jit_code_bungei_d: case jit_code_bungti_d: case jit_code_bltgti_d: - case jit_code_bordi_d: case jit_code_bunordi_d: - mask = jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_dbl; - break; - case jit_code_allocar: /* synthesized instructions make it - * equivalent to jit_cc_a0_chg */ - case jit_code_str_c: case jit_code_str_s: case jit_code_str_i: - case jit_code_str_l: case jit_code_str_f: case jit_code_str_d: - mask = jit_cc_a0_reg|jit_cc_a1_reg; - break; - case jit_code_stxi_c: case jit_code_stxi_s: case jit_code_stxi_i: - case jit_code_stxi_l: case jit_code_stxi_f: case jit_code_stxi_d: - mask = jit_cc_a0_int|jit_cc_a1_reg|jit_cc_a2_reg; - break; - case jit_code_bltr: case jit_code_bltr_u: case jit_code_bler: - case jit_code_bler_u: case jit_code_beqr: case jit_code_bger: - case jit_code_bger_u: case jit_code_bgtr: case jit_code_bgtr_u: - case jit_code_bner: case jit_code_bmsr: case jit_code_bmcr: - case jit_code_bltr_f: case jit_code_bler_f: case jit_code_beqr_f: - case jit_code_bger_f: case jit_code_bgtr_f: case jit_code_bner_f: - case jit_code_bunltr_f: case jit_code_bunler_f: case jit_code_buneqr_f: - case jit_code_bunger_f: case jit_code_bungtr_f: case jit_code_bltgtr_f: - case jit_code_bordr_f: case jit_code_bunordr_f:case jit_code_bltr_d: - case jit_code_bler_d: case jit_code_beqr_d: case jit_code_bger_d: - case jit_code_bgtr_d: case jit_code_bner_d: case jit_code_bunltr_d: - case jit_code_bunler_d: case jit_code_buneqr_d: case jit_code_bunger_d: - case jit_code_bungtr_d: case jit_code_bltgtr_d: case jit_code_bordr_d: - case jit_code_bunordr_d: - mask = jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_reg; - break; - case jit_code_boaddi: case jit_code_boaddi_u: case jit_code_bxaddi: - case jit_code_bxaddi_u: case jit_code_bosubi: case jit_code_bosubi_u: - case jit_code_bxsubi: case jit_code_bxsubi_u: - mask = jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a1_chg|jit_cc_a2_int; - break; - case jit_code_stxr_c: case jit_code_stxr_s: case jit_code_stxr_i: - case jit_code_stxr_l: case jit_code_stxr_f: case jit_code_stxr_d: - mask = jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_reg; - break; - case jit_code_boaddr: case jit_code_boaddr_u: case jit_code_bxaddr: - case jit_code_bxaddr_u: case jit_code_bosubr: case jit_code_bosubr_u: - case jit_code_bxsubr: case jit_code_bxsubr_u: - mask = jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a1_chg|jit_cc_a2_reg; - break; - default: - abort(); - } - - return (mask); -} - -void -_jit_patch_abs(jit_state_t *_jit, jit_node_t *instr, jit_pointer_t address) -{ - jit_int32_t mask; - - if (instr->code == jit_code_movi) - instr->v.p = address; - else { - mask = jit_classify(instr->code); - assert((mask & (jit_cc_a0_reg|jit_cc_a0_jmp)) == jit_cc_a0_jmp); - instr->u.p = address; - } -} - -void -_jit_patch_at(jit_state_t *_jit, jit_node_t *instr, jit_node_t *label) -{ - jit_int32_t mask; - - assert(!(instr->flag & jit_flag_node)); - instr->flag |= jit_flag_node; - switch (instr->code) { - case jit_code_movi: - assert(label->code == jit_code_label || - label->code == jit_code_data); - instr->v.n = label; - if (label->code == jit_code_data) - instr->flag |= jit_flag_data; - break; - case jit_code_jmpi: - assert(label->code == jit_code_label || - label->code == jit_code_epilog); - instr->u.n = label; - break; - default: - mask = jit_classify(instr->code); - assert((mask & (jit_cc_a0_reg|jit_cc_a0_jmp)) == jit_cc_a0_jmp); - assert(label->code == jit_code_label); - instr->u.n = label; - break; - } - /* link field is used as list of nodes associated with a given label */ - instr->link = label->link; - label->link = instr; -} - -void -_jit_optimize(jit_state_t *_jit) -{ - jit_bool_t jump; - jit_int32_t mask; - jit_node_t *node; - jit_block_t *block; - jit_word_t offset; - - _jitc->function = NULL; - - thread_jumps(); - sequential_labels(); - - /* create initial mapping of live register values - * at the start of a basic block */ - for (offset = 0; offset < _jitc->blocks.offset; offset++) { - block = _jitc->blocks.ptr + offset; - if (!block->label) - continue; - if (block->label->code != jit_code_epilog) { - jit_setup(block); - jit_regset_set(&block->setmask, &block->regmask); - } - } - /* call jit_update resolving undefined values in reverse - * order so that sequential code would find most data already - * resolved when reaching the start of a new basic block */ - for (offset = _jitc->blocks.offset - 1; offset >= 0; offset--) { - block = _jitc->blocks.ptr + offset; - if (!block->label) - continue; - if (block->label->code != jit_code_epilog) { - jit_regset_set(&_jitc->regmask, &block->regmask); - jit_update(block->label->next, &block->reglive, &_jitc->regmask, 1); - } - } - /* do a second pass from start to properly handle some conditions - * of very long living registers that are not referenced for - * several blocks */ - bmp_zero(); - for (offset = 0; offset < _jitc->blocks.offset; offset++) { - block = _jitc->blocks.ptr + offset; - if (!block->label) - continue; - if (block->label->code != jit_code_epilog) { - jit_regset_set(&_jitc->regmask, &block->setmask); - jit_update(block->label->next, &block->reglive, &_jitc->regmask, 1); - } - } - - patch_registers(); - simplify(); - - /* figure out labels that are only reached with a jump - * and is required to do a simple redundant_store removal - * on jit_beqi below */ - jump = 1; - for (node = _jitc->head; node; node = node->next) { - switch (node->code) { - case jit_code_label: - if (!jump) - node->flag |= jit_flag_head; - break; - case jit_code_jmpi: case jit_code_jmpr: - case jit_code_epilog: - jump = 1; - break; - case jit_code_data: case jit_code_note: - break; - default: - jump = 0; - break; - } - } - - for (node = _jitc->head; node; node = node->next) { - mask = jit_classify(node->code); - if (mask & jit_cc_a0_reg) - node->u.w &= ~jit_regno_patch; - if (mask & jit_cc_a1_reg) - node->v.w &= ~jit_regno_patch; - if (mask & jit_cc_a2_reg) - node->w.w &= ~jit_regno_patch; - switch (node->code) { - case jit_code_prolog: - _jitc->function = _jitc->functions.ptr + node->w.w; - break; - case jit_code_epilog: - _jitc->function = NULL; - break; - case jit_code_beqi: - redundant_store(node, 1); - break; - case jit_code_bnei: - redundant_store(node, 0); - break; - default: -#if JIT_HASH_CONSTS - if (mask & jit_cc_a0_flt) { - node->u.p = jit_data(&node->u.f, sizeof(jit_float32_t), 4); - node->flag |= jit_flag_node | jit_flag_data; - } - else if (mask & jit_cc_a0_dbl) { - node->u.p = jit_data(&node->u.d, sizeof(jit_float64_t), 8); - node->flag |= jit_flag_node | jit_flag_data; - } - else if (mask & jit_cc_a1_flt) { - node->v.p = jit_data(&node->v.f, sizeof(jit_float32_t), 4); - node->flag |= jit_flag_node | jit_flag_data; - } - else if (mask & jit_cc_a1_dbl) { - node->v.p = jit_data(&node->v.d, sizeof(jit_float64_t), 8); - node->flag |= jit_flag_node | jit_flag_data; - } - else if (mask & jit_cc_a2_flt) { - node->w.p = jit_data(&node->w.f, sizeof(jit_float32_t), 4); - node->flag |= jit_flag_node | jit_flag_data; - } - else if (mask & jit_cc_a2_dbl) { - node->w.p = jit_data(&node->w.d, sizeof(jit_float64_t), 8); - node->flag |= jit_flag_node | jit_flag_data; - } -#endif - if (_jitc->function) { - if ((mask & (jit_cc_a0_reg|jit_cc_a0_chg)) == - (jit_cc_a0_reg|jit_cc_a0_chg)) { - if (mask & jit_cc_a0_rlh) { - jit_regset_setbit(&_jitc->function->regset, - jit_regno(node->u.q.l)); - jit_regset_setbit(&_jitc->function->regset, - jit_regno(node->u.q.h)); - } - else - jit_regset_setbit(&_jitc->function->regset, - jit_regno(node->u.w)); - } - if ((mask & (jit_cc_a1_reg|jit_cc_a1_chg)) == - (jit_cc_a1_reg|jit_cc_a1_chg)) - jit_regset_setbit(&_jitc->function->regset, - jit_regno(node->v.w)); - if ((mask & (jit_cc_a2_reg|jit_cc_a2_chg)) == - (jit_cc_a2_reg|jit_cc_a2_chg)) - jit_regset_setbit(&_jitc->function->regset, - jit_regno(node->w.w)); - } - break; - } - } -} - -void -_jit_reglive(jit_state_t *_jit, jit_node_t *node) -{ - jit_int32_t spec; - jit_int32_t value; - jit_block_t *block; - - switch (node->code) { - case jit_code_label: case jit_code_prolog: case jit_code_epilog: - block = _jitc->blocks.ptr + node->v.w; - jit_regset_set(&_jitc->reglive, &block->reglive); - break; - case jit_code_callr: - value = jit_regno(node->u.w); - if (!(node->u.w & jit_regno_patch)) { - jit_regset_setbit(&_jitc->reglive, value); - } - case jit_code_calli: - for (value = 0; value < _jitc->reglen; value++) { - spec = jit_class(_rvs[value].spec); - if ((spec & jit_class_arg) && jit_regarg_p(node, value)) - jit_regset_setbit(&_jitc->reglive, value); - else if (!(spec & jit_class_sav)) - jit_regset_clrbit(&_jitc->reglive, value); - } - break; - default: - value = jit_classify(node->code); - if (value & jit_cc_a0_reg) { - if (value & jit_cc_a0_rlh) { - if (!(node->u.q.l & jit_regno_patch)) { - if (value & jit_cc_a0_chg) { - jit_regset_clrbit(&_jitc->reglive, node->u.q.l); - jit_regset_setbit(&_jitc->regmask, node->u.q.l); - } - else - jit_regset_setbit(&_jitc->reglive, node->u.q.l); - } - if (!(node->u.q.h & jit_regno_patch)) { - if (value & jit_cc_a0_chg) { - jit_regset_clrbit(&_jitc->reglive, node->u.q.h); - jit_regset_setbit(&_jitc->regmask, node->u.q.h); - } - else - jit_regset_setbit(&_jitc->reglive, node->u.q.h); - } - } - else { - if (!(node->u.w & jit_regno_patch)) { - if (value & jit_cc_a0_chg) { - jit_regset_clrbit(&_jitc->reglive, node->u.w); - jit_regset_setbit(&_jitc->regmask, node->u.w); - } - else - jit_regset_setbit(&_jitc->reglive, node->u.w); - } - } - } - if ((value & jit_cc_a1_reg) && !(node->v.w & jit_regno_patch)) { - if (value & jit_cc_a1_chg) { - jit_regset_clrbit(&_jitc->reglive, node->v.w); - jit_regset_setbit(&_jitc->regmask, node->v.w); - } - else - jit_regset_setbit(&_jitc->reglive, node->v.w); - } - if ((value & jit_cc_a2_reg) && !(node->w.w & jit_regno_patch)) { - if (value & jit_cc_a2_chg) { - jit_regset_clrbit(&_jitc->reglive, node->w.w); - jit_regset_setbit(&_jitc->regmask, node->w.w); - } - else - jit_regset_setbit(&_jitc->reglive, node->w.w); - } - if (jit_regset_set_p(&_jitc->regmask)) { - bmp_zero(); - jit_update(node->next, &_jitc->reglive, &_jitc->regmask, 1); - if (jit_regset_set_p(&_jitc->regmask)) { - /* any unresolved live state is considered as live */ - jit_regset_ior(&_jitc->reglive, - &_jitc->reglive, &_jitc->regmask); - jit_regset_set_ui(&_jitc->regmask, 0); - } - } - break; - } -} - -void -_jit_regarg_set(jit_state_t *_jit, jit_node_t *node, jit_int32_t value) -{ - if (value & jit_cc_a0_reg) { - if (value & jit_cc_a0_rlh) { - jit_regset_setbit(&_jitc->regarg, jit_regno(node->u.q.l)); - jit_regset_setbit(&_jitc->regarg, jit_regno(node->u.q.h)); - } - else - jit_regset_setbit(&_jitc->regarg, jit_regno(node->u.w)); - } - if (value & jit_cc_a1_reg) - jit_regset_setbit(&_jitc->regarg, jit_regno(node->v.w)); - if (value & jit_cc_a2_reg) - jit_regset_setbit(&_jitc->regarg, jit_regno(node->w.w)); -} - -void -_jit_regarg_clr(jit_state_t *_jit, jit_node_t *node, jit_int32_t value) -{ - if (value & jit_cc_a0_reg) { - if (value & jit_cc_a0_rlh) { - jit_regset_clrbit(&_jitc->regarg, jit_regno(node->u.q.l)); - jit_regset_clrbit(&_jitc->regarg, jit_regno(node->u.q.h)); - } - else - jit_regset_clrbit(&_jitc->regarg, jit_regno(node->u.w)); - } - if (value & jit_cc_a1_reg) - jit_regset_clrbit(&_jitc->regarg, jit_regno(node->v.w)); - if (value & jit_cc_a2_reg) - jit_regset_clrbit(&_jitc->regarg, jit_regno(node->w.w)); -} - -void -_jit_realize(jit_state_t *_jit) -{ - assert(!_jitc->realize); - if (_jitc->function) - jit_epilog(); - jit_optimize(); - _jitc->realize = 1; - - /* ensure it is aligned */ - _jitc->data.offset = (_jitc->data.offset + 7) & -8; -} - -void -_jit_dataset(jit_state_t *_jit) -{ - jit_uint8_t *ptr; - jit_node_t *node; - jit_word_t offset; -#if defined(__sgi) - int mmap_fd; -#endif - - assert(!_jitc->dataset); - if (!_jit->user_data) { - - /* create read only data buffer */ - _jit->data.length = (_jitc->data.offset + - /* reserve space for annotations */ - _jitc->note.size + 4095) & -4096; -#if defined(__sgi) - mmap_fd = open("/dev/zero", O_RDWR); -#endif - _jit->data.ptr = mmap(NULL, _jit->data.length, - PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, mmap_fd, 0); - assert(_jit->data.ptr != MAP_FAILED); -#if defined(__sgi) - close(mmap_fd); -#endif - } - - if (!_jitc->no_data) - jit_memcpy(_jit->data.ptr, _jitc->data.ptr, _jitc->data.offset); - - if (_jitc->no_note) { - /* Space for one note is always allocated, so revert it here - * if after jit_new_state was called, it is also requested to - * not generate annotation information */ - _jit->note.length = 0; - _jitc->note.size = 0; - } - else { - _jitc->note.base = _jit->data.ptr; - if (!_jitc->no_data) - _jitc->note.base += _jitc->data.offset; - memset(_jitc->note.base, 0, _jitc->note.size); - } - - if (_jit->user_data) - /* Need the temporary hashed data until jit_emit is finished */ - ptr = _jitc->no_data ? _jitc->data.ptr : _jit->data.ptr; - else { - ptr = _jit->data.ptr; - /* Temporary hashed data no longer required */ - jit_free((jit_pointer_t *)&_jitc->data.ptr); - } - - for (offset = 0; offset < _jitc->data.size; offset++) { - for (node = _jitc->data.table[offset]; node; node = node->next) { - node->flag |= jit_flag_patch; - node->u.w = (jit_word_t)(ptr + node->u.w); - } - } - - _jitc->dataset = 1; -} - -jit_pointer_t -_jit_get_code(jit_state_t *_jit, jit_word_t *length) -{ - assert(_jitc->realize); - if (length) { - if (_jitc->done) - /* If code already generated, return exact size of code */ - *length = _jit->pc.uc - _jit->code.ptr; - else - /* Else return current size of the code buffer */ - *length = _jit->code.length; - } - - return (_jit->code.ptr); -} - -void -_jit_set_code(jit_state_t *_jit, jit_pointer_t ptr, jit_word_t length) -{ - assert(_jitc->realize); - _jit->code.ptr = ptr; - _jit->code.length = length; - _jit->user_code = 1; -} - -jit_pointer_t -_jit_get_data(jit_state_t *_jit, jit_word_t *data_size, jit_word_t *note_size) -{ - assert(_jitc->realize); - if (data_size) - *data_size = _jitc->data.offset; - if (note_size) - *note_size = _jitc->note.size; - return (_jit->data.ptr); -} - -void -_jit_set_data(jit_state_t *_jit, jit_pointer_t ptr, - jit_word_t length, jit_word_t flags) -{ - assert(_jitc->realize); - if (flags & JIT_DISABLE_DATA) - _jitc->no_data = 1; - else - assert(length >= _jitc->data.offset); - if (flags & JIT_DISABLE_NOTE) - _jitc->no_note = 1; - else { - if (flags & JIT_DISABLE_DATA) - assert(length >= _jitc->note.size); - else - assert(length >= _jitc->data.offset + _jitc->note.size); - } - _jit->data.ptr = ptr; - _jit->data.length = length; - _jit->user_data = 1; -} - -jit_pointer_t -_jit_emit(jit_state_t *_jit) -{ - jit_pointer_t code; - jit_node_t *node; - size_t length; - int result; -#if defined(__sgi) - int mmap_fd; -#endif - - if (!_jitc->realize) - jit_realize(); - - if (!_jitc->dataset) - jit_dataset(); - - _jitc->emit = 1; - - if (!_jit->user_code) { -#if defined(__sgi) - mmap_fd = open("/dev/zero", O_RDWR); -#endif - if (_jit->code.length == 0) - _jit->code.length = 4096; - - _jit->code.ptr = mmap(NULL, _jit->code.length, - PROT_EXEC | PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, mmap_fd, 0); - assert(_jit->code.ptr != MAP_FAILED); - } - _jitc->code.end = _jit->code.ptr + _jit->code.length - - jit_get_max_instr(); - _jit->pc.uc = _jit->code.ptr; - - for (;;) { - if ((code = emit_code()) == NULL) { - _jitc->patches.offset = 0; - for (node = _jitc->head; node; node = node->next) { - if (node->link && - (node->code == jit_code_label || - node->code == jit_code_epilog)) - node->flag &= ~jit_flag_patch; - } - if (_jit->user_code) - goto fail; - /* Should only happen on very special cases */ - length = _jit->code.length + 4096; - -#if !HAVE_MREMAP - munmap(_jit->code.ptr, _jit->code.length); -#endif - -#if HAVE_MREMAP -# if __NetBSD__ - _jit->code.ptr = mremap(_jit->code.ptr, _jit->code.length, - _jit->code.ptr, length, 0); -# else - _jit->code.ptr = mremap(_jit->code.ptr, _jit->code.length, - length, MREMAP_MAYMOVE, NULL); -# endif -#else - _jit->code.ptr = mmap(NULL, length, - PROT_EXEC | PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, mmap_fd, 0); -#endif - - assert(_jit->code.ptr != MAP_FAILED); - _jit->code.length = length; - _jitc->code.end = _jit->code.ptr + _jit->code.length - - jit_get_max_instr(); - _jit->pc.uc = _jit->code.ptr; - } - else - break; - } - -#if defined(__sgi) - if (!_jit->user_code) - close(mmap_fd); -#endif - - _jitc->done = 1; - if (!_jitc->no_note) - jit_annotate(); - - if (_jit->user_data) - jit_free((jit_pointer_t *)&_jitc->data.ptr); - else { - result = mprotect(_jit->data.ptr, _jit->data.length, PROT_READ); - assert(result == 0); - } - if (!_jit->user_code) { - result = mprotect(_jit->code.ptr, _jit->code.length, - PROT_READ | PROT_EXEC); - assert(result == 0); - } - - return (_jit->code.ptr); -fail: - return (NULL); -} - -void -_jit_frame(jit_state_t *_jit, jit_int32_t frame) -{ - jit_trampoline(frame, 1); -} - -void -_jit_tramp(jit_state_t *_jit, jit_int32_t frame) -{ - jit_trampoline(frame, 0); -} - -void -_jit_trampoline(jit_state_t *_jit, jit_int32_t frame, jit_bool_t prolog) -{ - jit_int32_t regno; - - /* Must be called after prolog, actually, just to simplify - * tests and know there is a current function and that - * _jitc->function->self.aoff is at the before any alloca value */ - assert(_jitc->tail && _jitc->tail->code == jit_code_prolog); - - /* + 24 for 3 possible spilled temporaries (that could be a double) */ - frame += 24; -#if defined(__hppa__) - frame += _jitc->function->self.aoff; -#else - frame -= _jitc->function->self.aoff; -#endif - _jitc->function->frame = frame; - if (prolog) - _jitc->function->define_frame = 1; - else - _jitc->function->assume_frame = 1; - for (regno = 0; regno < _jitc->reglen; regno++) - if (jit_class(_rvs[regno].spec) & jit_class_sav) - jit_regset_setbit(&_jitc->function->regset, regno); -} - -/* Compute initial reglive and regmask set values of a basic block. - * reglive is the set of known live registers - * regmask is the set of registers not referenced in the block - */ -static void -_jit_setup(jit_state_t *_jit, jit_block_t *block) -{ -#define reglive block->reglive -#define regmask block->regmask - jit_node_t *node; - jit_bool_t live; - jit_bool_t jump; - unsigned long value; - - jump = 0; - jit_regset_set_mask(®mask, _jitc->reglen); - for (node = block->label->next; node; node = node->next) { - switch (node->code) { - case jit_code_label: case jit_code_prolog: - case jit_code_epilog: - return; - default: - value = jit_classify(node->code); - if (value & jit_cc_a0_reg) { - live = !(value & jit_cc_a0_chg); - if (value & jit_cc_a0_rlh) { - if (!(node->u.q.l & jit_regno_patch) && - jit_regset_tstbit(®mask, node->u.q.l)) { - if (live || !jump) - jit_regset_clrbit(®mask, node->u.q.l); - if (live) - jit_regset_setbit(®live, node->u.q.l); - } - if (!(node->u.q.h & jit_regno_patch) && - jit_regset_tstbit(®mask, node->u.q.h)) { - if (live || !jump) - jit_regset_clrbit(®mask, node->u.q.h); - if (live) - jit_regset_setbit(®live, node->u.q.h); - } - } - else { - if (!(node->u.w & jit_regno_patch) && - jit_regset_tstbit(®mask, node->u.w)) { - if (live || !jump) - jit_regset_clrbit(®mask, node->u.w); - if (live) - jit_regset_setbit(®live, node->u.w); - } - } - } - if ((value & jit_cc_a1_reg) && - !(node->v.w & jit_regno_patch) && - jit_regset_tstbit(®mask, node->v.w)) { - live = !(value & jit_cc_a1_chg); - if (live || !jump) - jit_regset_clrbit(®mask, node->v.w); - if (live) - jit_regset_setbit(®live, node->v.w); - } - if ((value & jit_cc_a2_reg) && - !(node->w.w & jit_regno_patch) && - jit_regset_tstbit(®mask, node->w.w)) { - live = !(value & jit_cc_a2_chg); - if (live || !jump) - jit_regset_clrbit(®mask, node->w.w); - if (live) - jit_regset_setbit(®live, node->w.w); - } - if (value & jit_cc_a0_jmp) - jump = 1; - break; - } - } -#undef regmask -#undef reglive -} - -/* Remove bit of mask argument based on instructions arguments up to end - * of code or finding a basic block boundary, if a value is used as argument, - * also set the live bit to know value cannot be clobbered; if value is - * modified, just remove it from the mask as if it not already in the live - * bitmask, then the value is dead. - */ -static void -_jit_update(jit_state_t *_jit, jit_node_t *node, - jit_regset_t *live, jit_regset_t *mask, jit_bool_t recurse) -{ - jit_int32_t spec; - jit_int32_t regno; - jit_regset_t ztmp; - jit_regset_t zmask; - unsigned long value; - jit_block_t *block; - jit_node_t *label; - - for (; node; node = node->next) { - restart: - if (jit_regset_set_p(mask) == 0) - break; - switch (node->code) { - case jit_code_label: - block = _jitc->blocks.ptr + node->v.w; - jit_regset_and(&ztmp, mask, &block->reglive); - if (jit_regset_set_p(&ztmp)) { - jit_regset_ior(live, live, &ztmp); - jit_regset_com(&ztmp, &ztmp); - jit_regset_and(mask, mask, &ztmp); - } - if (bmp_tst(node->v.w)) - return; - bmp_set(node->v.w); - break; - case jit_code_prolog: - jit_regset_set_ui(mask, 0); - return; - case jit_code_epilog: - jit_regset_set_ui(mask, 0); - return; - case jit_code_callr: - value = jit_regno(node->u.w); - if (!(node->u.w & jit_regno_patch)) { - if (jit_regset_tstbit(mask, value)) { - jit_regset_clrbit(mask, value); - jit_regset_setbit(live, value); - } - } - case jit_code_calli: - for (value = 0; value < _jitc->reglen; ++value) { - value = jit_regset_scan1(mask, value); - if (value >= _jitc->reglen) - break; - spec = jit_class(_rvs[value].spec); - if (!(spec & jit_class_sav)) - jit_regset_clrbit(mask, value); - if ((spec & jit_class_arg) && jit_regarg_p(node, value)) - jit_regset_setbit(live, value); - } - break; - default: - value = jit_classify(node->code); - if (value & jit_cc_a2_reg) { - if (!(node->w.w & jit_regno_patch)) { - if (jit_regset_tstbit(mask, node->w.w)) { - jit_regset_clrbit(mask, node->w.w); - if (!(value & jit_cc_a2_chg)) - jit_regset_setbit(live, node->w.w); - } - } - } - if (value & jit_cc_a1_reg) { - if (!(node->v.w & jit_regno_patch)) { - if (jit_regset_tstbit(mask, node->v.w)) { - jit_regset_clrbit(mask, node->v.w); - if (!(value & jit_cc_a1_chg)) - jit_regset_setbit(live, node->v.w); - } - } - } - if (value & jit_cc_a0_reg) { - if (value & jit_cc_a0_rlh) { - if (!(node->u.q.l & jit_regno_patch)) { - if (jit_regset_tstbit(mask, node->u.q.l)) { - jit_regset_clrbit(mask, node->u.q.l); - if (!(value & jit_cc_a0_chg)) - jit_regset_setbit(live, node->u.q.l); - } - } - if (!(node->u.q.h & jit_regno_patch)) { - if (jit_regset_tstbit(mask, node->u.q.h)) { - jit_regset_clrbit(mask, node->u.q.h); - if (!(value & jit_cc_a0_chg)) - jit_regset_setbit(live, node->u.q.h); - } - } - } - else { - if (!(node->u.w & jit_regno_patch)) { - if (jit_regset_tstbit(mask, node->u.w)) { - jit_regset_clrbit(mask, node->u.w); - if (!(value & jit_cc_a0_chg)) - jit_regset_setbit(live, node->u.w); - } - } - } - } - if (value & jit_cc_a0_jmp) { - if (node->flag & jit_flag_node) { - label = node->u.n; - if (node->code == jit_code_jmpi) { - node = label; - goto restart; - } - block = _jitc->blocks.ptr + label->v.w; - jit_regset_and(&ztmp, mask, &block->reglive); - if (jit_regset_set_p(&ztmp)) { - jit_regset_ior(live, live, &ztmp); - jit_regset_com(&ztmp, &ztmp); - jit_regset_and(mask, mask, &ztmp); - } - if (bmp_tst(label->v.w)) - continue; - bmp_set(label->v.w); - if (jit_regset_set_p(mask) == 0) - return; - /* restore mask if branch is conditional */ - if (recurse) { - jit_regset_set(&zmask, mask); - jit_update(block->label->next, live, &zmask, 0); - } - else { - node = block->label->next; - goto restart; - } - jit_regset_xor(&ztmp, &zmask, mask); - /* remove known live registers from mask */ - if (jit_regset_set_p(&ztmp)) { - jit_regset_and(&ztmp, &ztmp, live); - jit_regset_com(&ztmp, &ztmp); - jit_regset_and(mask, mask, &ztmp); - } - continue; - } - /* Should not really mark as live all registers in unknown - * state if using jit_jmpr(), or jit_jmpi(absolute_address) - * because that would leave the register allocator with - * no options for "nospill" temporaries (other temporaries - * also benefit from not needing to spill/reload), so, the - * user must ensure to either spill/reload, or only leave - * live values on registers that are advertised as - * callee save (as per jit_callee_save_p); on most targets - * these are the JIT_Vn registers. */ - for (regno = 0; regno < _jitc->reglen; regno++) { - spec = jit_class(_rvs[regno].spec); - if (jit_regset_tstbit(mask, regno) && - (spec & (jit_class_gpr|jit_class_fpr)) && - !(spec & jit_class_sav)) - jit_regset_clrbit(mask, regno); - } - /* assume value is live due to jump to unknown location */ - jit_regset_ior(live, live, mask); - jit_regset_set_ui(mask, 0); - return; - } - break; - } - } -} - -static void -_thread_jumps(jit_state_t *_jit) -{ - jit_node_t *prev; - jit_node_t *node; - jit_node_t *next; - jit_int32_t mask; - - for (prev = node = _jitc->head; node;) { - next = node->next; - switch (node->code) { - case jit_code_jmpi: - if (redundant_jump(prev, node)) { - node = prev; - continue; - } - if (shortcut_jump(prev, node)) - continue; - break; - case jit_code_jmpr: - case jit_code_callr: case jit_code_calli: - /* non optimizable jump like code */ - break; - default: - mask = jit_classify(node->code); - if (mask & jit_cc_a0_jmp) { - if (reverse_jump(prev, node) || - shortcut_jump(prev, node)) - continue; - } - break; - } - prev = node; - node = next; - } -} - -static void -_sequential_labels(jit_state_t *_jit) -{ - jit_node_t *jump; - jit_node_t *link; - jit_node_t *prev; - jit_node_t *next; - jit_node_t *node; - - for (prev = node = _jitc->head; node; node = next) { - next = node->next; - if (node->code == jit_code_label) { - if (!node->flag) { - if (!node->link) { - del_label(prev, node); - continue; - } - if (prev != node && prev->code == jit_code_label) { - if ((jump = node->link)) { - for (; jump; jump = link) { - link = jump->link; - jump->u.n = prev; - jump->link = prev->link; - prev->link = jump; - } - node->link = NULL; - } - del_label(prev, node); - continue; - } - } - if (next && next->code == jit_code_label && !next->flag) { - if ((jump = next->link)) { - for (; jump; jump = link) { - link = jump->link; - jump->u.n = node; - jump->link = node->link; - node->link = jump; - } - next->link = NULL; - } - del_label(node, next); - next = node->next; - continue; - } - } - prev = node; - } -} - -static jit_bool_t -_shortcut_jump(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - jit_bool_t cond; - jit_node_t *jump; - jit_node_t *next; - jit_node_t *temp; - - if (!(node->flag & jit_flag_node)) - return (0); - assert(node->code != jit_code_jmpr); - cond = node->code != jit_code_jmpi; - jump = node->u.n; - for (next = jump->next; next; next = next->next) { - switch (next->code) { - case jit_code_jmpi: - if (!(next->flag & jit_flag_node)) - return (0); - if (jump->link == node) - jump->link = node->link; - else { - for (temp = jump->link; - temp->link != node; - temp = temp->link) - assert(temp != NULL); - temp->link = node->link; - } - jump = next->u.n; - node->u.n = jump; - node->link = jump->link; - jump->link = node; - return (1); - case jit_code_jmpr: - if (cond) - return (0); - node->code = jit_code_jmpr; - node->u.w = next->u.w; - node->link = NULL; - node->flag &= ~jit_flag_node; - return (1); - case jit_code_note: case jit_code_label: - break; - default: - return (0); - } - } - return (0); -} - -static jit_bool_t -_redundant_jump(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - jit_node_t *local_prev; - jit_node_t *local_next; - - if (!(node->flag & jit_flag_node)) - return (0); - for (local_prev = node, local_next = node->next; - local_next; - local_prev = local_next, local_next = local_next->next) { - - switch (local_next->code) { - case jit_code_label: case jit_code_epilog: - if (node->u.n == local_next) { - if (local_next->link == node) - local_next->link = node->link; - else { - for (local_prev = local_next->link; - local_prev->link != node; - local_prev = local_prev->link) - assert(local_prev != NULL); - local_prev->link = node->link; - } - del_node(prev, node); - return (1); - } - break; - case jit_code_name: case jit_code_note: - case jit_code_align: - break; - default: - return (0); - } - } - return (0); -} - -static jit_code_t -reverse_jump_code(jit_code_t code) -{ - switch (code) { - case jit_code_bltr: return (jit_code_bger); - case jit_code_blti: return (jit_code_bgei); - case jit_code_bltr_u: return (jit_code_bger_u); - case jit_code_blti_u: return (jit_code_bgei_u); - case jit_code_bler: return (jit_code_bgtr); - case jit_code_blei: return (jit_code_bgti); - case jit_code_bler_u: return (jit_code_bgtr_u); - case jit_code_blei_u: return (jit_code_bgti_u); - case jit_code_beqr: return (jit_code_bner); - case jit_code_beqi: return (jit_code_bnei); - case jit_code_bger: return (jit_code_bltr); - case jit_code_bgei: return (jit_code_blti); - case jit_code_bger_u: return (jit_code_bltr_u); - case jit_code_bgei_u: return (jit_code_blti_u); - case jit_code_bgtr: return (jit_code_bler); - case jit_code_bgti: return (jit_code_blei); - case jit_code_bgtr_u: return (jit_code_bler_u); - case jit_code_bgti_u: return (jit_code_blei_u); - case jit_code_bner: return (jit_code_beqr); - case jit_code_bnei: return (jit_code_beqi); - case jit_code_bmsr: return (jit_code_bmcr); - case jit_code_bmsi: return (jit_code_bmci); - case jit_code_bmcr: return (jit_code_bmsr); - case jit_code_bmci: return (jit_code_bmsi); - case jit_code_bltr_f: return (jit_code_bunger_f); - case jit_code_blti_f: return (jit_code_bungei_f); - case jit_code_bler_f: return (jit_code_bungtr_f); - case jit_code_blei_f: return (jit_code_bungti_f); - - case jit_code_beqr_f: return (jit_code_bner_f); - case jit_code_beqi_f: return (jit_code_bnei_f); - - case jit_code_bger_f: return (jit_code_bunltr_f); - case jit_code_bgei_f: return (jit_code_bunlti_f); - case jit_code_bgtr_f: return (jit_code_bunler_f); - case jit_code_bgti_f: return (jit_code_bunlei_f); - - case jit_code_bner_f: return (jit_code_beqr_f); - case jit_code_bnei_f: return (jit_code_beqr_f); - - case jit_code_bunltr_f: return (jit_code_bger_f); - case jit_code_bunlti_f: return (jit_code_bgei_f); - case jit_code_bunler_f: return (jit_code_bgtr_f); - case jit_code_bunlei_f: return (jit_code_bgti_f); - - case jit_code_buneqr_f: return (jit_code_bltgtr_f); - case jit_code_buneqi_f: return (jit_code_bltgti_f); - - case jit_code_bunger_f: return (jit_code_bltr_f); - case jit_code_bungei_f: return (jit_code_blti_f); - case jit_code_bungtr_f: return (jit_code_bler_f); - case jit_code_bungti_f: return (jit_code_blei_f); - - case jit_code_bltgtr_f: return (jit_code_buneqr_f); - case jit_code_bltgti_f: return (jit_code_buneqi_f); - - case jit_code_bordr_f: return (jit_code_bunordr_f); - case jit_code_bordi_f: return (jit_code_bunordi_f); - case jit_code_bunordr_f:return (jit_code_bordr_f); - case jit_code_bunordi_f:return (jit_code_bordi_f); - case jit_code_bltr_d: return (jit_code_bunger_d); - case jit_code_blti_d: return (jit_code_bungei_d); - case jit_code_bler_d: return (jit_code_bungtr_d); - case jit_code_blei_d: return (jit_code_bungti_d); - - case jit_code_beqr_d: return (jit_code_bner_d); - case jit_code_beqi_d: return (jit_code_bnei_d); - - case jit_code_bger_d: return (jit_code_bunltr_d); - case jit_code_bgei_d: return (jit_code_bunlti_d); - case jit_code_bgtr_d: return (jit_code_bunler_d); - case jit_code_bgti_d: return (jit_code_bunlei_d); - - case jit_code_bner_d: return (jit_code_beqr_d); - case jit_code_bnei_d: return (jit_code_beqi_d); - - case jit_code_bunltr_d: return (jit_code_bger_d); - case jit_code_bunlti_d: return (jit_code_bgei_d); - case jit_code_bunler_d: return (jit_code_bgtr_d); - case jit_code_bunlei_d: return (jit_code_bgti_d); - - case jit_code_buneqr_d: return (jit_code_bltgtr_d); - case jit_code_buneqi_d: return (jit_code_bltgti_d); - - case jit_code_bunger_d: return (jit_code_bltr_d); - case jit_code_bungei_d: return (jit_code_blti_d); - case jit_code_bungtr_d: return (jit_code_bler_d); - case jit_code_bungti_d: return (jit_code_blei_d); - - case jit_code_bltgtr_d: return (jit_code_buneqr_d); - case jit_code_bltgti_d: return (jit_code_buneqi_d); - - case jit_code_bordr_d: return (jit_code_bunordr_d); - case jit_code_bordi_d: return (jit_code_bunordi_d); - case jit_code_bunordr_d:return (jit_code_bordr_d); - case jit_code_bunordi_d:return (jit_code_bordi_d); - case jit_code_boaddr: return (jit_code_bxaddr); - case jit_code_boaddi: return (jit_code_bxaddi); - case jit_code_boaddr_u: return (jit_code_bxaddr_u); - case jit_code_boaddi_u: return (jit_code_bxaddi_u); - case jit_code_bxaddr: return (jit_code_boaddr); - case jit_code_bxaddi: return (jit_code_boaddi); - case jit_code_bxaddr_u: return (jit_code_boaddr_u); - case jit_code_bxaddi_u: return (jit_code_boaddi_u); - case jit_code_bosubr: return (jit_code_bxsubr); - case jit_code_bosubi: return (jit_code_bxsubi); - case jit_code_bosubr_u: return (jit_code_bxsubr_u); - case jit_code_bosubi_u: return (jit_code_bxsubi_u); - case jit_code_bxsubr: return (jit_code_bosubr); - case jit_code_bxsubi: return (jit_code_bosubi); - case jit_code_bxsubr_u: return (jit_code_bosubr_u); - case jit_code_bxsubi_u: return (jit_code_bosubi_u); - default: abort(); /* invalid jump code */ - } -} - -/* - * change common pattern: - * <cond_jump L0> <jump L1> <label L0> - * into - * <reverse_cond_jump L1> - */ -static jit_bool_t -_reverse_jump(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - jit_node_t *local_prev; - jit_node_t *local_next; - jit_node_t *local_jump; - - if (!(node->flag & jit_flag_node)) - return (0); - /* =><cond_jump L0> <jump L1> <label L0> */ - local_next = node->next; - if (local_next->code != jit_code_jmpi || - !(local_next->flag & jit_flag_node)) - return (0); - /* <cond_jump L0> =><jump L1> <label L0> */ - - local_jump = local_next->u.n; - for (local_prev = local_next, local_next = local_next->next; - local_next; - local_prev = local_next, local_next = local_next->next) { - switch (local_next->code) { - case jit_code_label: case jit_code_epilog: - if (node->u.n == local_next) { - if (local_next->link == node) - local_next->link = node->link; - else { - for (local_prev = local_next->link; - local_prev->link != node; - local_prev = local_prev->link) - assert(local_prev != NULL); - local_prev->link = node->link; - } - del_node(node, node->next); - node->code = reverse_jump_code(node->code); - node->u.n = local_jump; - node->link = local_jump->link; - local_jump->link = node; - return (1); - } - break; - case jit_code_note: - break; - default: - return (0); - } - } - return (0); -} - -static void -_redundant_store(jit_state_t *_jit, jit_node_t *node, jit_bool_t jump) -{ - jit_node_t *iter; - jit_node_t *prev; - jit_word_t word; - jit_int32_t spec; - jit_int32_t regno; - - if (jump) { - prev = node->u.n; - if (prev->code == jit_code_epilog) - return; - assert(prev->code == jit_code_label); - if ((prev->flag & jit_flag_head) || node->link || prev->link != node) - /* multiple sources */ - return; - /* if there are sequential labels it will return below */ - } - else - prev = node; - word = node->w.w; - regno = jit_regno(node->v.w); - for (iter = prev->next; iter; prev = iter, iter = iter->next) { - switch (iter->code) { - case jit_code_label: case jit_code_prolog: - case jit_code_epilog: - return; - case jit_code_movi: - if (regno == jit_regno(iter->u.w)) { - if (iter->flag || iter->v.w != word) - return; - del_node(prev, iter); - iter = prev; - } - break; - default: - spec = jit_classify(iter->code); - if (spec & jit_cc_a0_jmp) - return; - if ((spec & (jit_cc_a0_reg|jit_cc_a0_chg)) == - (jit_cc_a0_reg|jit_cc_a0_chg)) { - if (spec & jit_cc_a0_rlh) { - if (regno == jit_regno(iter->u.q.l) || - regno == jit_regno(iter->u.q.h)) - return; - } - else { - if (regno == jit_regno(iter->u.w)) - return; - } - } - if ((spec & (jit_cc_a1_reg|jit_cc_a1_chg)) == - (jit_cc_a1_reg|jit_cc_a1_chg)) { - if (regno == jit_regno(iter->v.w)) - return; - } - if ((spec & (jit_cc_a2_reg|jit_cc_a2_chg)) == - (jit_cc_a2_reg|jit_cc_a2_chg)) { - if (regno == jit_regno(iter->w.w)) - return; - } - break; - } - } -} - -static jit_bool_t -_simplify_movr(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node, - jit_int32_t kind, jit_int32_t size) -{ - jit_int32_t regno; - jit_int32_t right; - jit_value_t *value; - - regno = jit_regno(node->u.w); - right = jit_regno(node->v.w); - value = _jitc->values + regno; - if ((value->kind == jit_kind_register && - jit_regno(value->base.q.l) == right && - value->base.q.h == _jitc->gen[right]) || - (value->kind == kind && _jitc->values[right].kind == kind && - memcmp(&value->base.w, &_jitc->values[right].base.w, size) == 0)) { - del_node(prev, node); - return (1); - } - if (_jitc->values[right].kind == jit_kind_word) - jit_memcpy(value, _jitc->values + right, sizeof(jit_value_t)); - else { - value->kind = jit_kind_register; - value->base.q.l = right; - value->base.q.h = _jitc->gen[right]; - } - ++_jitc->gen[regno]; - - return (0); -} - -static jit_bool_t -_simplify_movi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node, - jit_int32_t kind, jit_int32_t size) -{ - jit_value_t *value; - jit_int32_t spec; - jit_int32_t regno; - jit_int32_t offset; - - regno = jit_regno(node->u.w); - value = _jitc->values + regno; - if (node->flag & jit_flag_node) { - /* set to undefined if value will be patched */ - value->kind = 0; - ++_jitc->gen[regno]; - return (0); - } - if (value->kind == kind) { - if (memcmp(&node->v.w, &value->base.w, size) == 0) { - del_node(prev, node); - return (1); - } - spec = jit_class(_rvs[regno].spec); - if (kind == jit_kind_word) - spec &= jit_class_gpr; - else - spec &= (jit_class_xpr | jit_class_fpr); - for (offset = 0; offset < _jitc->reglen; offset++) { - if (_jitc->values[offset].kind == kind && - memcmp(&node->v.w, &_jitc->values[offset].base.w, size) == 0 && - (jit_class(_rvs[offset].spec) & spec) == spec) { - if (kind == jit_kind_word) - node->code = jit_code_movr; - else if (kind == jit_kind_float32) - node->code = jit_code_movr_f; - else - node->code = jit_code_movr_d; - node->v.w = offset; - jit_memcpy(value, _jitc->values + offset, sizeof(jit_value_t)); - ++_jitc->gen[regno]; - return (0); - } - } - } - value->kind = kind; - jit_memcpy(&value->base.w, &node->v.w, size); - ++_jitc->gen[regno]; - - return (0); -} - -/* simple/safe redundandy test not checking if another register - * holds the same value - */ -static jit_bool_t -_simplify_ldxi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - jit_value_t *value; - jit_int32_t regno; - jit_int32_t right; - - regno = jit_regno(node->u.w); - right = jit_regno(node->v.w); - value = _jitc->values + regno; - if (regno != right && - value->kind == jit_kind_code && value->code == node->code && - value->base.q.l == right && value->base.q.h == _jitc->gen[right] && - node->w.w == value->disp.w) { - del_node(prev, node); - return (1); - } - value->kind = jit_kind_code; - value->code = node->code; - value->base.q.l = right; - value->base.q.h = _jitc->gen[right]; - value->disp.w = node->w.w; - ++_jitc->gen[regno]; - - return (0); -} - -static jit_bool_t -_simplify_stxi(jit_state_t *_jit, jit_node_t *prev, jit_node_t *node) -{ - jit_value_t *value; - jit_int32_t regno; - jit_int32_t right; - jit_int32_t offset; - - regno = jit_regno(node->w.w); - right = jit_regno(node->v.w); - value = _jitc->values + regno; - - /* check for redundant store after load */ - if (regno != right && - value->kind == jit_kind_code && value->code == node->code && - value->base.q.l == right && value->base.q.h == _jitc->gen[right] && - node->u.w == value->disp.w) { - del_node(prev, node); - return (1); - } - - /* assume anything can alias, and invalidate tracked values */ - for (offset = 0; offset < _jitc->reglen; offset++) { - if (_jitc->values[offset].kind == jit_kind_code) { - _jitc->values[offset].kind = 0; - ++_jitc->gen[offset]; - } - } - - /* no multiple information, so, if set to a constant, - * prefer to keep that information */ - if (value->kind == 0) { - value->kind = jit_kind_code; - switch (node->code) { - /* no information about signed/unsigned either */ - case jit_code_stxi_c: value->code = jit_code_ldxi_c; break; - case jit_code_stxi_s: value->code = jit_code_ldxi_s; break; - case jit_code_stxi_i: value->code = jit_code_ldxi_i; break; - case jit_code_stxi_l: value->code = jit_code_ldxi_l; break; - case jit_code_stxi_f: value->code = jit_code_ldxi_f; break; - case jit_code_stxi_d: value->code = jit_code_ldxi_d; break; - default: abort(); - } - value->kind = jit_kind_code; - value->base.q.l = right; - value->base.q.h = _jitc->gen[right]; - value->disp.w = node->u.w; - } - - return (0); -} - -/* usually there should be only one store in the - * jit_get_reg/jit_unget_reg, but properly handle - * multiple ones by moving the save node */ -static void -_simplify_spill(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) -{ - jit_node_t *save; - jit_node_t *temp; - - if ((temp = _jitc->spill[regno]) && (save = temp->next) != node) { - temp->next = save->next; - save->next = node->next; - node->next = save; - _jitc->spill[regno] = node; - } -} - -/* checks for simple cases where a register is set more than - * once to the same value, and is a common pattern of calls - * to jit_pushargi and jit_pushargr - */ -static void -_simplify(jit_state_t *_jit) -{ - jit_node_t *prev; - jit_node_t *node; - jit_node_t *next; - jit_int32_t info; - jit_int32_t regno; - - for (prev = NULL, node = _jitc->head; node; prev = node, node = next) { - next = node->next; - switch (node->code) { - case jit_code_label: case jit_code_prolog: - case jit_code_callr: case jit_code_calli: - reset: - memset(_jitc->gen, 0, sizeof(jit_int32_t) * _jitc->reglen); - memset(_jitc->values, 0, sizeof(jit_value_t) * _jitc->reglen); - break; - case jit_code_save: - _jitc->spill[jit_regno(node->u.w)] = prev; - break; - case jit_code_load: - regno = jit_regno(node->u.w); - if (register_change_p(node->link->next, node, regno) != - jit_reg_change) { - /* spill not required due to optimizing common - * redundancy case of calling jit_get_reg/jit_unget_reg - * and then setting the register to the value it is - * already holding */ - patch_register(node->link->next, node, - jit_regno_patch|regno, regno); - del_node(_jitc->spill[regno], node->link); - del_node(prev, node); - node = prev; - } - _jitc->spill[regno] = NULL; - break; - case jit_code_movr: - regno = jit_regno(node->u.w); - if (simplify_movr(prev, node, - jit_kind_word, sizeof(jit_word_t))) - simplify_spill(node = prev, regno); - break; - case jit_code_movi: - regno = jit_regno(node->u.w); - if (simplify_movi(prev, node, - jit_kind_word, sizeof(jit_word_t))) - simplify_spill(node = prev, regno); - break; - case jit_code_movr_f: - regno = jit_regno(node->u.w); - if (simplify_movr(prev, node, - jit_kind_float32, sizeof(jit_float32_t))) - simplify_spill(node = prev, regno); - break; - case jit_code_movi_f: - regno = jit_regno(node->u.w); - if (simplify_movi(prev, node, - jit_kind_float32, sizeof(jit_float32_t))) - simplify_spill(node = prev, regno); - break; - case jit_code_movr_d: - regno = jit_regno(node->u.w); - if (simplify_movr(prev, node, - jit_kind_float64, sizeof(jit_float64_t))) - simplify_spill(node = prev, regno); - break; - case jit_code_movi_d: - regno = jit_regno(node->u.w); - if (simplify_movi(prev, node, - jit_kind_float64, sizeof(jit_float64_t))) - simplify_spill(node = prev, regno); - break; - case jit_code_ldxi_c: case jit_code_ldxi_uc: - case jit_code_ldxi_s: case jit_code_ldxi_us: - case jit_code_ldxi_i: case jit_code_ldxi_ui: - case jit_code_ldxi_l: - case jit_code_ldxi_f: case jit_code_ldxi_d: - regno = jit_regno(node->u.w); - if (simplify_ldxi(prev, node)) - simplify_spill(node = prev, regno); - break; - case jit_code_stxi_c: case jit_code_stxi_s: - case jit_code_stxi_i: case jit_code_stxi_l: - case jit_code_stxi_f: case jit_code_stxi_d: - regno = jit_regno(node->u.w); - if (simplify_stxi(prev, node)) - simplify_spill(node = prev, regno); - break; - default: - info = jit_classify(node->code); - if (info & jit_cc_a0_jmp) - /* labels are not implicitly added when not taking - * a conditional branch */ - goto reset; - if (info & jit_cc_a0_chg) { - if (info & jit_cc_a0_rlh) { - regno = jit_regno(node->u.q.l); - _jitc->values[regno].kind = 0; - ++_jitc->gen[regno]; - regno = jit_regno(node->u.q.h); - _jitc->values[regno].kind = 0; - ++_jitc->gen[regno]; - } - else { - regno = jit_regno(node->u.w); - _jitc->values[regno].kind = 0; - ++_jitc->gen[regno]; - } - } - if (info & jit_cc_a1_chg) { - regno = jit_regno(node->v.w); - _jitc->values[regno].kind = 0; - ++_jitc->gen[regno]; - } - if (info & jit_cc_a2_chg) { - regno = jit_regno(node->w.w); - _jitc->values[regno].kind = 0; - ++_jitc->gen[regno]; - } - break; - } - } -} - -static jit_int32_t -_register_change_p(jit_state_t *_jit, jit_node_t *node, jit_node_t *link, - jit_int32_t regno) -{ - jit_int32_t value; - - for (; node != link; node = node->next) { - switch (node->code) { - case jit_code_label: case jit_code_prolog: - /* lack of extra information so cannot say it is undefined */ - return (jit_reg_change); - case jit_code_callr: case jit_code_calli: - if (!(jit_class(_rvs[regno].spec) & jit_class_sav)) - return (jit_reg_undef); - break; - default: - value = jit_classify(node->code); - /* lack of extra information */ - if (value & jit_cc_a0_jmp) - return (jit_reg_change); - else if ((value & (jit_cc_a0_reg|jit_cc_a0_chg)) == - (jit_cc_a0_reg|jit_cc_a0_chg) && - (((value & jit_cc_a0_rlh) && - (node->u.q.l == regno || node->u.q.h == regno)) || - (!(value & jit_cc_a0_rlh) && - node->u.w == regno))) - return (jit_reg_change); - else if ((value & jit_cc_a1_reg) && node->v.w == regno && - (value & jit_cc_a1_chg)) - return (jit_reg_change); - else if ((value & jit_cc_a2_reg) && node->w.w == regno && - (value & jit_cc_a2_chg)) - return (jit_reg_change); - } - } - - return (jit_reg_static); -} - -/* most of this could be done at the same time as generating jit, but - * avoid complications on different cpu backends and patch spill/loads - * here, by simulating jit generation */ -static jit_bool_t -_spill_reglive_p(jit_state_t *_jit, jit_node_t *node, jit_int32_t regno) -{ - if (!jit_regset_tstbit(&_jitc->reglive, regno)) { - bmp_zero(); - jit_regset_setbit(&_jitc->regmask, regno); - jit_update(node->next, &_jitc->reglive, &_jitc->regmask, 1); - if (!jit_regset_tstbit(&_jitc->reglive, regno) && - register_change_p(node->next, node->link, regno) != jit_reg_change) - return (0); - } - - return (1); -} - -static void -_patch_registers(jit_state_t *_jit) -{ - jit_node_t *prev; - jit_node_t *node; - jit_node_t *next; - jit_int32_t info; - jit_int32_t spec; - jit_int32_t regno; - jit_int32_t value; - - _jitc->function = NULL; - - jit_reglive_setup(); - for (prev = NULL, node = _jitc->head; node; node = next) { - next = node->next; - - info = jit_classify(node->code); - jit_regarg_set(node, info); - - switch (node->code) { - case jit_code_save: - regno = jit_regno(node->u.w); - if (!spill_reglive_p(node, regno)) { - /* register is not live, just remove spill/reload */ - jit_regarg_clr(node, info); - node->link->v.w = jit_regload_delete; - del_node(prev, node); - continue; - } - else { - /* try to find a free register of the same class */ - spec = jit_class(_rvs[regno].spec) & ~jit_class_arg; - for (value = 0; value < _jitc->reglen; value++) { - if (value != regno && - ((jit_class(_rvs[value].spec) & spec) & - ~jit_class_arg) == spec && - !jit_regset_tstbit(&_jitc->regarg, value) && - !spill_reglive_p(node, value)) - break; - } - if (value < _jitc->reglen) { - jit_regarg_clr(node, info); - patch_register(node->next, node->link, - jit_regno_patch|node->u.w, - jit_regno_patch|value); - /* mark as live just in case there are nested - * register patches, so that next patch will - * not want to use the same register */ - jit_regset_setbit(&_jitc->reglive, value); - /* register is not live, just remove spill/reload */ - node->link->v.w = jit_regload_isdead; - del_node(prev, node); - continue; - } - else { - /* failed to find a free register */ - if (spec & jit_class_gpr) { - if (!_jitc->function->regoff[regno]) - _jitc->function->regoff[regno] = - jit_allocai(sizeof(jit_word_t)); -#if __WORDSIZE == 32 - node->code = jit_code_stxi_i; -#else - node->code = jit_code_stxi_l; -#endif - } - else { - node->code = jit_code_stxi_d; - if (!_jitc->function->regoff[regno]) - _jitc->function->regoff[regno] = - jit_allocai(sizeof(jit_float64_t)); - } - node->u.w = _jitc->function->regoff[regno]; - node->v.w = JIT_FP; - node->w.w = regno; - node->link = NULL; - } - } - break; - case jit_code_load: - regno = jit_regno(node->u.w); - if (node->v.w) { - if (node->v.w == jit_regload_isdead) - jit_regset_clrbit(&_jitc->reglive, regno); - del_node(prev, node); - continue; - } - spec = jit_class(_rvs[regno].spec); - if (spec & jit_class_gpr) { -#if __WORDSIZE == 32 - node->code = jit_code_ldxi_i; -#else - node->code = jit_code_ldxi_l; -#endif - } - else - node->code = jit_code_ldxi_d; - node->v.w = regno; - node->v.w = JIT_FP; - node->w.w = _jitc->function->regoff[regno]; - node->link = NULL; - break; - case jit_code_prolog: - _jitc->function = _jitc->functions.ptr + node->w.w; - break; - case jit_code_epilog: - _jitc->function = NULL; - break; - default: - break; - } - - jit_regarg_clr(node, info); - /* update register live state */ - jit_reglive(node); - prev = node; - } -} - -static void -_patch_register(jit_state_t *_jit, jit_node_t *node, jit_node_t *link, - jit_int32_t regno, jit_int32_t patch) -{ - jit_int32_t value; - - for (; node != link; node = node->next) { - value = jit_classify(node->code); - if (value & jit_cc_a0_reg) { - if (value & jit_cc_a0_rlh) { - if (node->u.q.l == regno) - node->u.q.l = patch; - if (node->u.q.h == regno) - node->u.q.h = patch; - } - else { - if (node->u.w == regno) - node->u.w = patch; - } - } - if ((value & jit_cc_a1_reg) && node->v.w == regno) - node->v.w = patch; - if ((value & jit_cc_a2_reg) && node->w.w == regno) - node->w.w = patch; - } -} - -#if defined(__i386__) || defined(__x86_64__) -# include "jit_x86.c" -#elif defined(__mips__) -# include "jit_mips.c" -#elif defined(__arm__) -# include "jit_arm.c" -#elif defined(__ppc__) || defined(__powerpc__) -# include "jit_ppc.c" -#elif defined(__sparc__) -# include "jit_sparc.c" -#elif defined(__ia64__) -# include "jit_ia64.c" -#elif defined(__hppa__) -# include "jit_hppa.c" -#elif defined(__aarch64__) -# include "jit_aarch64.c" -#elif defined(__s390__) || defined(__s390x__) -# include "jit_s390.c" -#elif defined(__alpha__) -# include "jit_alpha.c" -#endif diff --git a/libguile/lightning/lightning.am b/libguile/lightning/lightning.am index 809dd3bdf..878c147cb 100644 --- a/libguile/lightning/lightning.am +++ b/libguile/lightning/lightning.am @@ -1,5 +1,5 @@ # -# Copyright 2000, 2001, 2002, 2012-2018 Free Software Foundation, Inc. +# Copyright 2000, 2001, 2002, 2012-2019 Free Software Foundation, Inc. # # This file is part of GNU lightning. # @@ -16,78 +16,63 @@ lightning = $(top_srcdir)/libguile/lightning -lightning_c_files = \ - $(lightning)/lib/jit_memory.c \ - $(lightning)/lib/jit_note.c \ - $(lightning)/lib/jit_print.c \ - $(lightning)/lib/jit_size.c \ - $(lightning)/lib/lightning.c +lightning_c_files = \ + $(lightning)/jit/jit.c lightning_extra_files = \ $(lightning)/AUTHORS \ $(lightning)/ChangeLog \ + $(lightning)/ChangeLog.lightning \ $(lightning)/COPYING \ + $(lightning)/COPYING.DOC \ $(lightning)/COPYING.LESSER \ $(lightning)/lightning.am \ + $(lightning)/lightning.texi \ $(lightning)/NEWS \ - $(lightning)/README \ + $(lightning)/README.md \ $(lightning)/THANKS \ - $(lightning)/TODO \ \ - $(lightning)/include/lightning.h \ - $(lightning)/include/lightning/jit_private.h \ - $(lightning)/include/lightning/jit_arm.h \ - $(lightning)/include/lightning/jit_mips.h \ - $(lightning)/include/lightning/jit_ppc.h \ - $(lightning)/include/lightning/jit_sparc.h \ - $(lightning)/include/lightning/jit_x86.h \ - $(lightning)/include/lightning/jit_ia64.h \ - $(lightning)/include/lightning/jit_hppa.h \ - $(lightning)/include/lightning/jit_aarch64.h \ - $(lightning)/include/lightning/jit_s390.h \ - $(lightning)/include/lightning/jit_alpha.h \ + $(lightning)/jit.h \ \ - $(lightning)/lib/jit_names.c \ - $(lightning)/lib/jit_rewind.c \ - $(lightning)/lib/jit_aarch64.c \ - $(lightning)/lib/jit_aarch64-cpu.c \ - $(lightning)/lib/jit_aarch64-fpu.c \ - $(lightning)/lib/jit_aarch64-sz.c \ - $(lightning)/lib/jit_alpha.c \ - $(lightning)/lib/jit_alpha-cpu.c \ - $(lightning)/lib/jit_alpha-fpu.c \ - $(lightning)/lib/jit_alpha-sz.c \ - $(lightning)/lib/jit_arm.c \ - $(lightning)/lib/jit_arm-cpu.c \ - $(lightning)/lib/jit_arm-swf.c \ - $(lightning)/lib/jit_arm-vfp.c \ - $(lightning)/lib/jit_arm-sz.c \ - $(lightning)/lib/jit_hppa.c \ - $(lightning)/lib/jit_hppa-cpu.c \ - $(lightning)/lib/jit_hppa-fpu.c \ - $(lightning)/lib/jit_hppa-sz.c \ - $(lightning)/lib/jit_ia64.c \ - $(lightning)/lib/jit_ia64-cpu.c \ - $(lightning)/lib/jit_ia64-fpu.c \ - $(lightning)/lib/jit_ia64-sz.c \ - $(lightning)/lib/jit_mips.c \ - $(lightning)/lib/jit_mips-cpu.c \ - $(lightning)/lib/jit_mips-fpu.c \ - $(lightning)/lib/jit_mips-sz.c \ - $(lightning)/lib/jit_ppc.c \ - $(lightning)/lib/jit_ppc-cpu.c \ - $(lightning)/lib/jit_ppc-fpu.c \ - $(lightning)/lib/jit_ppc-sz.c \ - $(lightning)/lib/jit_s390.c \ - $(lightning)/lib/jit_s390-cpu.c \ - $(lightning)/lib/jit_s390-fpu.c \ - $(lightning)/lib/jit_s390-sz.c \ - $(lightning)/lib/jit_sparc.c \ - $(lightning)/lib/jit_sparc-cpu.c \ - $(lightning)/lib/jit_sparc-fpu.c \ - $(lightning)/lib/jit_sparc-sz.c \ - $(lightning)/lib/jit_x86.c \ - $(lightning)/lib/jit_x86-cpu.c \ - $(lightning)/lib/jit_x86-sse.c \ - $(lightning)/lib/jit_x86-x87.c \ - $(lightning)/lib/jit_x86-sz.c + $(lightning)/jit/arm.h \ + $(lightning)/jit/mips.h \ + $(lightning)/jit/ppc.h \ + $(lightning)/jit/sparc.h \ + $(lightning)/jit/x86.h \ + $(lightning)/jit/ia64.h \ + $(lightning)/jit/hppa.h \ + $(lightning)/jit/aarch64.h \ + $(lightning)/jit/s390.h \ + $(lightning)/jit/alpha.h \ + \ + $(lightning)/jit/aarch64.c \ + $(lightning)/jit/aarch64-cpu.c \ + $(lightning)/jit/aarch64-fpu.c \ + $(lightning)/jit/alpha.c \ + $(lightning)/jit/alpha-cpu.c \ + $(lightning)/jit/alpha-fpu.c \ + $(lightning)/jit/arm.c \ + $(lightning)/jit/arm-cpu.c \ + $(lightning)/jit/arm-swf.c \ + $(lightning)/jit/arm-vfp.c \ + $(lightning)/jit/hppa.c \ + $(lightning)/jit/hppa-cpu.c \ + $(lightning)/jit/hppa-fpu.c \ + $(lightning)/jit/ia64.c \ + $(lightning)/jit/ia64-cpu.c \ + $(lightning)/jit/ia64-fpu.c \ + $(lightning)/jit/mips.c \ + $(lightning)/jit/mips-cpu.c \ + $(lightning)/jit/mips-fpu.c \ + $(lightning)/jit/ppc.c \ + $(lightning)/jit/ppc-cpu.c \ + $(lightning)/jit/ppc-fpu.c \ + $(lightning)/jit/s390.c \ + $(lightning)/jit/s390-cpu.c \ + $(lightning)/jit/s390-fpu.c \ + $(lightning)/jit/sparc.c \ + $(lightning)/jit/sparc-cpu.c \ + $(lightning)/jit/sparc-fpu.c \ + $(lightning)/jit/x86.c \ + $(lightning)/jit/x86-cpu.c \ + $(lightning)/jit/x86-sse.c diff --git a/libguile/lightning/lightning.texi b/libguile/lightning/lightning.texi new file mode 100644 index 000000000..88f397a37 --- /dev/null +++ b/libguile/lightning/lightning.texi @@ -0,0 +1,1760 @@ +\input texinfo.tex @c -*- texinfo -*- +@c %**start of header (This is for running Texinfo on a region.) + +@setfilename lightning.info + +@set TITLE Using @sc{gnu} @i{lightning} +@set TOPIC installing and using + +@settitle @value{TITLE} + +@c --------------------------------------------------------------------- +@c Common macros +@c --------------------------------------------------------------------- + +@macro bulletize{a} +@item +\a\ +@end macro + +@macro rem{a} +@r{@i{\a\}} +@end macro + +@macro gnu{} +@sc{gnu} +@end macro + +@macro lightning{} +@gnu{} @i{lightning} +@end macro + +@c --------------------------------------------------------------------- +@c Macros for Texinfo 3.1/4.0 compatibility +@c --------------------------------------------------------------------- + +@c @hlink (macro), @url and @email are used instead of @uref for Texinfo 3.1 +@c compatibility +@macro hlink{url, link} +\link\ (\url\) +@end macro + +@c ifhtml can only be true in Texinfo 4.0, which has uref +@ifhtml +@unmacro hlink + +@macro hlink{url, link} +@uref{\url\, \link\} +@end macro + +@macro email{mail} +@uref{mailto:\mail\, , \mail\} +@end macro + +@macro url{url} +@uref{\url\} +@end macro +@end ifhtml + +@c --------------------------------------------------------------------- +@c References to the other half of the manual +@c --------------------------------------------------------------------- + +@macro usingref{node, name} +@ref{\node\, , \name\} +@end macro + +@c --------------------------------------------------------------------- +@c End of macro section +@c --------------------------------------------------------------------- + +@set UPDATED 18 June 2018 +@set UPDATED-MONTH June 2018 +@set EDITION 2.1.2 +@set VERSION 2.1.2 + +@ifnottex +@dircategory Software development +@direntry +* lightning: (lightning). Library for dynamic code generation. +@end direntry +@end ifnottex + +@ifnottex +@node Top +@top @lightning{} + +@iftex +@macro comma +@verbatim{|,|} +@end macro +@end iftex + +@ifnottex +@macro comma +@verb{|,|} +@end macro +@end ifnottex + +This document describes @value{TOPIC} the @lightning{} library for +dynamic code generation. + +@menu +* Overview:: What GNU lightning is +* Installation:: Configuring and installing GNU lightning +* The instruction set:: The RISC instruction set used in GNU lightning +* GNU lightning examples:: GNU lightning's examples +* Reentrancy:: Re-entrant usage of GNU lightning +* Customizations:: Advanced code generation customizations +* Acknowledgements:: Acknowledgements for GNU lightning +@end menu +@end ifnottex + +@node Overview +@chapter Introduction to @lightning{} + +@iftex +This document describes @value{TOPIC} the @lightning{} library for +dynamic code generation. +@end iftex + +Dynamic code generation is the generation of machine code +at runtime. It is typically used to strip a layer of interpretation +by allowing compilation to occur at runtime. One of the most +well-known applications of dynamic code generation is perhaps that +of interpreters that compile source code to an intermediate bytecode +form, which is then recompiled to machine code at run-time: this +approach effectively combines the portability of bytecode +representations with the speed of machine code. Another common +application of dynamic code generation is in the field of hardware +simulators and binary emulators, which can use the same techniques +to translate simulated instructions to the instructions of the +underlying machine. + +Yet other applications come to mind: for example, windowing +@dfn{bitblt} operations, matrix manipulations, and network packet +filters. Albeit very powerful and relatively well known within the +compiler community, dynamic code generation techniques are rarely +exploited to their full potential and, with the exception of the +two applications described above, have remained curiosities because +of their portability and functionality barriers: binary instructions +are generated, so programs using dynamic code generation must be +retargeted for each machine; in addition, coding a run-time code +generator is a tedious and error-prone task more than a difficult one. + +@lightning{} provides a portable, fast and easily retargetable dynamic +code generation system. + +To be portable, @lightning{} abstracts over current architectures' +quirks and unorthogonalities. The interface that it exposes to is that +of a standardized RISC architecture loosely based on the SPARC and MIPS +chips. There are a few general-purpose registers (six, not including +those used to receive and pass parameters between subroutines), and +arithmetic operations involve three operands---either three registers +or two registers and an arbitrarily sized immediate value. + +On one hand, this architecture is general enough that it is possible to +generate pretty efficient code even on CISC architectures such as the +Intel x86 or the Motorola 68k families. On the other hand, it matches +real architectures closely enough that, most of the time, the +compiler's constant folding pass ends up generating code which +assembles machine instructions without further tests. + +@node Installation +@chapter Configuring and installing @lightning{} + +The first thing to do to use @lightning{} is to configure the +program, picking the set of macros to be used on the host +architecture; this configuration is automatically performed by +the @file{configure} shell script; to run it, merely type: +@example + ./configure +@end example + +@lightning{} supports the @code{--enable-disassembler} option, that +enables linking to GNU binutils and optionally print human readable +disassembly of the jit code. This option can be disabled by the +@code{--disable-disassembler} option. + +Another option that @file{configure} accepts is +@code{--enable-assertions}, which enables several consistency checks in +the run-time assemblers. These are not usually needed, so you can +decide to simply forget about it; also remember that these consistency +checks tend to slow down your code generator. + +After you've configured @lightning{}, run @file{make} as usual. + +@lightning{} has an extensive set of tests to validate it is working +correctly in the build host. To test it run: +@example + make check +@end example + +The next important step is: +@example + make install +@end example + +This ends the process of installing @lightning{}. + +@node The instruction set +@chapter @lightning{}'s instruction set + +@lightning{}'s instruction set was designed by deriving instructions +that closely match those of most existing RISC architectures, or +that can be easily syntesized if absent. Each instruction is composed +of: +@itemize @bullet +@item +an operation, like @code{sub} or @code{mul} + +@item +most times, a register/immediate flag (@code{r} or @code{i}) + +@item +an unsigned modifier (@code{u}), a type identifier or two, when applicable. +@end itemize + +Examples of legal mnemonics are @code{addr} (integer add, with three +register operands) and @code{muli} (integer multiply, with two +register operands and an immediate operand). Each instruction takes +two or three operands; in most cases, one of them can be an immediate +value instead of a register. + +Most @lightning{} integer operations are signed wordsize operations, +with the exception of operations that convert types, or load or store +values to/from memory. When applicable, the types and C types are as +follow: + +@example + _c @r{signed char} + _uc @r{unsigned char} + _s @r{short} + _us @r{unsigned short} + _i @r{int} + _ui @r{unsigned int} + _l @r{long} + _f @r{float} + _d @r{double} +@end example + +Most integer operations do not need a type modifier, and when loading or +storing values to memory there is an alias to the proper operation +using wordsize operands, that is, if ommited, the type is @r{int} on +32-bit architectures and @r{long} on 64-bit architectures. Note +that lightning also expects @code{sizeof(void*)} to match the wordsize. + +When an unsigned operation result differs from the equivalent signed +operation, there is a the @code{_u} modifier. + +There are at least seven integer registers, of which six are +general-purpose, while the last is used to contain the frame pointer +(@code{FP}). The frame pointer can be used to allocate and access local +variables on the stack, using the @code{allocai} or @code{allocar} +instruction. + +Of the general-purpose registers, at least three are guaranteed to be +preserved across function calls (@code{V0}, @code{V1} and +@code{V2}) and at least three are not (@code{R0}, @code{R1} and +@code{R2}). Six registers are not very much, but this +restriction was forced by the need to target CISC architectures +which, like the x86, are poor of registers; anyway, backends can +specify the actual number of available registers with the calls +@code{JIT_R_NUM} (for caller-save registers) and @code{JIT_V_NUM} +(for callee-save registers). + +There are at least six floating-point registers, named @code{F0} to +@code{F5}. These are usually caller-save and are separate from the integer +registers on the supported architectures; on Intel architectures, +in 32 bit mode if SSE2 is not available or use of X87 is forced, +the register stack is mapped to a flat register file. As for the +integer registers, the macro @code{JIT_F_NUM} yields the number of +floating-point registers. + +The complete instruction set follows; as you can see, most non-memory +operations only take integers (either signed or unsigned) as operands; +this was done in order to reduce the instruction set, and because most +architectures only provide word and long word operations on registers. +There are instructions that allow operands to be extended to fit a larger +data type, both in a signed and in an unsigned way. + +@table @b +@item Binary ALU operations +These accept three operands; the last one can be an immediate. +@code{addx} operations must directly follow @code{addc}, and +@code{subx} must follow @code{subc}; otherwise, results are undefined. +Most, if not all, architectures do not support @r{float} or @r{double} +immediate operands; lightning emulates those operations by moving the +immediate to a temporary register and emiting the call with only +register operands. +@example +addr _f _d O1 = O2 + O3 +addi _f _d O1 = O2 + O3 +addxr O1 = O2 + (O3 + carry) +addxi O1 = O2 + (O3 + carry) +addcr O1 = O2 + O3, set carry +addci O1 = O2 + O3, set carry +subr _f _d O1 = O2 - O3 +subi _f _d O1 = O2 - O3 +subxr O1 = O2 - (O3 + carry) +subxi O1 = O2 - (O3 + carry) +subcr O1 = O2 - O3, set carry +subci O1 = O2 - O3, set carry +rsbr _f _d O1 = O3 - O1 +rsbi _f _d O1 = O3 - O1 +mulr _f _d O1 = O2 * O3 +muli _f _d O1 = O2 * O3 +divr _u _f _d O1 = O2 / O3 +divi _u _f _d O1 = O2 / O3 +remr _u O1 = O2 % O3 +remi _u O1 = O2 % O3 +andr O1 = O2 & O3 +andi O1 = O2 & O3 +orr O1 = O2 | O3 +ori O1 = O2 | O3 +xorr O1 = O2 ^ O3 +xori O1 = O2 ^ O3 +lshr O1 = O2 << O3 +lshi O1 = O2 << O3 +rshr _u O1 = O2 >> O3@footnote{The sign bit is propagated unless using the @code{_u} modifier.} +rshi _u O1 = O2 >> O3@footnote{The sign bit is propagated unless using the @code{_u} modifier.} +@end example + +@item Four operand binary ALU operations +These accept two result registers, and two operands; the last one can +be an immediate. The first two arguments cannot be the same register. + +@code{qmul} stores the low word of the result in @code{O1} and the +high word in @code{O2}. For unsigned multiplication, @code{O2} zero +means there was no overflow. For signed multiplication, no overflow +check is based on sign, and can be detected if @code{O2} is zero or +minus one. + +@code{qdiv} stores the quotient in @code{O1} and the remainder in +@code{O2}. It can be used as quick way to check if a division is +exact, in which case the remainder is zero. + +@example +qmulr _u O1 O2 = O3 * O4 +qmuli _u O1 O2 = O3 * O4 +qdivr _u O1 O2 = O3 / O4 +qdivi _u O1 O2 = O3 / O4 +@end example + +@item Unary ALU operations +These accept two operands, both of which must be registers. +@example +negr _f _d O1 = -O2 +comr O1 = ~O2 +@end example + +These unary ALU operations are only defined for float operands. +@example +absr _f _d O1 = fabs(O2) +sqrtr O1 = sqrt(O2) +@end example + +Besides requiring the @code{r} modifier, there are no unary operations +with an immediate operand. + +@item Compare instructions +These accept three operands; again, the last can be an immediate. +The last two operands are compared, and the first operand, that must be +an integer register, is set to either 0 or 1, according to whether the +given condition was met or not. + +The conditions given below are for the standard behavior of C, +where the ``unordered'' comparison result is mapped to false. + +@example +ltr _u _f _d O1 = (O2 < O3) +lti _u _f _d O1 = (O2 < O3) +ler _u _f _d O1 = (O2 <= O3) +lei _u _f _d O1 = (O2 <= O3) +gtr _u _f _d O1 = (O2 > O3) +gti _u _f _d O1 = (O2 > O3) +ger _u _f _d O1 = (O2 >= O3) +gei _u _f _d O1 = (O2 >= O3) +eqr _f _d O1 = (O2 == O3) +eqi _f _d O1 = (O2 == O3) +ner _f _d O1 = (O2 != O3) +nei _f _d O1 = (O2 != O3) +unltr _f _d O1 = !(O2 >= O3) +unler _f _d O1 = !(O2 > O3) +ungtr _f _d O1 = !(O2 <= O3) +unger _f _d O1 = !(O2 < O3) +uneqr _f _d O1 = !(O2 < O3) && !(O2 > O3) +ltgtr _f _d O1 = !(O2 >= O3) || !(O2 <= O3) +ordr _f _d O1 = (O2 == O2) && (O3 == O3) +unordr _f _d O1 = (O2 != O2) || (O3 != O3) +@end example + +@item Transfer operations +These accept two operands; for @code{ext} both of them must be +registers, while @code{mov} accepts an immediate value as the second +operand. + +Unlike @code{movr} and @code{movi}, the other instructions are used +to truncate a wordsize operand to a smaller integer data type or to +convert float data types. You can also use @code{extr} to convert an +integer to a floating point value: the usual options are @code{extr_f} +and @code{extr_d}. + +@example +movr _f _d O1 = O2 +movi _f _d O1 = O2 +extr _c _uc _s _us _i _ui _f _d O1 = O2 +truncr _f _d O1 = trunc(O2) +@end example + +In 64-bit architectures it may be required to use @code{truncr_f_i}, +@code{truncr_f_l}, @code{truncr_d_i} and @code{truncr_d_l} to match +the equivalent C code. Only the @code{_i} modifier is available in +32-bit architectures. + +@example +truncr_f_i = <int> O1 = <float> O2 +truncr_f_l = <long>O1 = <float> O2 +truncr_d_i = <int> O1 = <double>O2 +truncr_d_l = <long>O1 = <double>O2 +@end example + +The float conversion operations are @emph{destination first, +source second}, but the order of the types is reversed. This happens +for historical reasons. + +@example +extr_f_d = <double>O1 = <float> O2 +extr_d_f = <float> O1 = <double>O2 +@end example + +@item Network extensions +These accept two operands, both of which must be registers; these +two instructions actually perform the same task, yet they are +assigned to two mnemonics for the sake of convenience and +completeness. As usual, the first operand is the destination and +the second is the source. +The @code{_ul} variant is only available in 64-bit architectures. +@example +htonr _us _ui _ul @r{Host-to-network (big endian) order} +ntohr _us _ui _ul @r{Network-to-host order } +@end example + +@item Load operations +@code{ld} accepts two operands while @code{ldx} accepts three; +in both cases, the last can be either a register or an immediate +value. Values are extended (with or without sign, according to +the data type specification) to fit a whole register. +The @code{_ui} and @code{_l} types are only available in 64-bit +architectures. For convenience, there is a version without a +type modifier for integer or pointer operands that uses the +appropriate wordsize call. +@example +ldr _c _uc _s _us _i _ui _l _f _d O1 = *O2 +ldi _c _uc _s _us _i _ui _l _f _d O1 = *O2 +ldxr _c _uc _s _us _i _ui _l _f _d O1 = *(O2+O3) +ldxi _c _uc _s _us _i _ui _l _f _d O1 = *(O2+O3) +@end example + +@item Store operations +@code{st} accepts two operands while @code{stx} accepts three; in +both cases, the first can be either a register or an immediate +value. Values are sign-extended to fit a whole register. +@example +str _c _uc _s _us _i _ui _l _f _d *O1 = O2 +sti _c _uc _s _us _i _ui _l _f _d *O1 = O2 +stxr _c _uc _s _us _i _ui _l _f _d *(O1+O2) = O3 +stxi _c _uc _s _us _i _ui _l _f _d *(O1+O2) = O3 +@end example +As for the load operations, the @code{_ui} and @code{_l} types are +only available in 64-bit architectures, and for convenience, there +is a version without a type modifier for integer or pointer operands +that uses the appropriate wordsize call. + +@item Argument management +These are: +@example +prepare (not specified) +va_start (not specified) +pushargr _f _d +pushargi _f _d +va_push (not specified) +arg _c _uc _s _us _i _ui _l _f _d +getarg _c _uc _s _us _i _ui _l _f _d +va_arg _d +putargr _f _d +putargi _f _d +ret (not specified) +retr _f _d +reti _f _d +va_end (not specified) +retval _c _uc _s _us _i _ui _l _f _d +epilog (not specified) +@end example +As with other operations that use a type modifier, the @code{_ui} and +@code{_l} types are only available in 64-bit architectures, but there +are operations without a type modifier that alias to the appropriate +integer operation with wordsize operands. + +@code{prepare}, @code{pusharg}, and @code{retval} are used by the caller, +while @code{arg}, @code{getarg} and @code{ret} are used by the callee. +A code snippet that wants to call another procedure and has to pass +arguments must, in order: use the @code{prepare} instruction and use +the @code{pushargr} or @code{pushargi} to push the arguments @strong{in +left to right order}; and use @code{finish} or @code{call} (explained below) +to perform the actual call. + +@code{va_start} returns a @code{C} compatible @code{va_list}. To fetch +arguments, use @code{va_arg} for integers and @code{va_arg_d} for doubles. +@code{va_push} is required when passing a @code{va_list} to another function, +because not all architectures expect it as a single pointer. Known case +is DEC Alpha, that requires it as a structure passed by value. + +@code{arg}, @code{getarg} and @code{putarg} are used by the callee. +@code{arg} is different from other instruction in that it does not +actually generate any code: instead, it is a function which returns +a value to be passed to @code{getarg} or @code{putarg}. @footnote{``Return +a value'' means that @lightning{} code that compile these +instructions return a value when expanded.} You should call +@code{arg} as soon as possible, before any function call or, more +easily, right after the @code{prolog} instructions +(which is treated later). + +@code{getarg} accepts a register argument and a value returned by +@code{arg}, and will move that argument to the register, extending +it (with or without sign, according to the data type specification) +to fit a whole register. These instructions are more intimately +related to the usage of the @lightning{} instruction set in code +that generates other code, so they will be treated more +specifically in @ref{GNU lightning examples, , Generating code at +run-time}. + +@code{putarg} is a mix of @code{getarg} and @code{pusharg} in that +it accepts as first argument a register or immediate, and as +second argument a value returned by @code{arg}. It allows changing, +or restoring an argument to the current function, and is a +construct required to implement tail call optimization. Note that +arguments in registers are very cheap, but will be overwritten +at any moment, including on some operations, for example division, +that on several ports is implemented as a function call. + +Finally, the @code{retval} instruction fetches the return value of a +called function in a register. The @code{retval} instruction takes a +register argument and copies the return value of the previously called +function in that register. A function with a return value should use +@code{retr} or @code{reti} to put the return value in the return register +before returning. @xref{Fibonacci, the Fibonacci numbers}, for an example. + +@code{epilog} is an optional call, that marks the end of a function +body. It is automatically generated by @lightning{} if starting a new +function (what should be done after a @code{ret} call) or finishing +generating jit. +It is very important to note that the fact that @code{epilog} being +optional may cause a common mistake. Consider this: +@example +fun1: + prolog + ... + ret +fun2: + prolog +@end example +Because @code{epilog} is added when finding a new @code{prolog}, +this will cause the @code{fun2} label to actually be before the +return from @code{fun1}. Because @lightning{} will actually +understand it as: +@example +fun1: + prolog + ... + ret +fun2: + epilog + prolog +@end example + +You should observe a few rules when using these macros. First of +all, if calling a varargs function, you should use the @code{ellipsis} +call to mark the position of the ellipsis in the C prototype. + +You should not nest calls to @code{prepare} inside a +@code{prepare/finish} block. Doing this will result in undefined +behavior. Note that for functions with zero arguments you can use +just @code{call}. + +@item Branch instructions +Like @code{arg}, these also return a value which, in this case, +is to be used to compile forward branches as explained in +@ref{Fibonacci, , Fibonacci numbers}. They accept two operands to be +compared; of these, the last can be either a register or an immediate. +They are: +@example +bltr _u _f _d @r{if }(O2 < O3)@r{ goto }O1 +blti _u _f _d @r{if }(O2 < O3)@r{ goto }O1 +bler _u _f _d @r{if }(O2 <= O3)@r{ goto }O1 +blei _u _f _d @r{if }(O2 <= O3)@r{ goto }O1 +bgtr _u _f _d @r{if }(O2 > O3)@r{ goto }O1 +bgti _u _f _d @r{if }(O2 > O3)@r{ goto }O1 +bger _u _f _d @r{if }(O2 >= O3)@r{ goto }O1 +bgei _u _f _d @r{if }(O2 >= O3)@r{ goto }O1 +beqr _f _d @r{if }(O2 == O3)@r{ goto }O1 +beqi _f _d @r{if }(O2 == O3)@r{ goto }O1 +bner _f _d @r{if }(O2 != O3)@r{ goto }O1 +bnei _f _d @r{if }(O2 != O3)@r{ goto }O1 + +bunltr _f _d @r{if }!(O2 >= O3)@r{ goto }O1 +bunler _f _d @r{if }!(O2 > O3)@r{ goto }O1 +bungtr _f _d @r{if }!(O2 <= O3)@r{ goto }O1 +bunger _f _d @r{if }!(O2 < O3)@r{ goto }O1 +buneqr _f _d @r{if }!(O2 < O3) && !(O2 > O3)@r{ goto }O1 +bltgtr _f _d @r{if }!(O2 >= O3) || !(O2 <= O3)@r{ goto }O1 +bordr _f _d @r{if } (O2 == O2) && (O3 == O3)@r{ goto }O1 +bunordr _f _d @r{if }!(O2 != O2) || (O3 != O3)@r{ goto }O1 + +bmsr @r{if }O2 & O3@r{ goto }O1 +bmsi @r{if }O2 & O3@r{ goto }O1 +bmcr @r{if }!(O2 & O3)@r{ goto }O1 +bmci @r{if }!(O2 & O3)@r{ goto }O1@footnote{These mnemonics mean, respectively, @dfn{branch if mask set} and @dfn{branch if mask cleared}.} +boaddr _u O2 += O3@r{, goto }O1@r{ if overflow} +boaddi _u O2 += O3@r{, goto }O1@r{ if overflow} +bxaddr _u O2 += O3@r{, goto }O1@r{ if no overflow} +bxaddi _u O2 += O3@r{, goto }O1@r{ if no overflow} +bosubr _u O2 -= O3@r{, goto }O1@r{ if overflow} +bosubi _u O2 -= O3@r{, goto }O1@r{ if overflow} +bxsubr _u O2 -= O3@r{, goto }O1@r{ if no overflow} +bxsubi _u O2 -= O3@r{, goto }O1@r{ if no overflow} +@end example + +@item Jump and return operations +These accept one argument except @code{ret} and @code{jmpi} which +have none; the difference between @code{finishi} and @code{calli} +is that the latter does not clean the stack from pushed parameters +(if any) and the former must @strong{always} follow a @code{prepare} +instruction. +@example +callr (not specified) @r{function call to register O1} +calli (not specified) @r{function call to immediate O1} +finishr (not specified) @r{function call to register O1} +finishi (not specified) @r{function call to immediate O1} +jmpr (not specified) @r{unconditional jump to register} +jmpi (not specified) @r{unconditional jump} +ret (not specified) @r{return from subroutine} +retr _c _uc _s _us _i _ui _l _f _d +reti _c _uc _s _us _i _ui _l _f _d +retval _c _uc _s _us _i _ui _l _f _d @r{move return value} + @r{to register} +@end example + +Like branch instruction, @code{jmpi} also returns a value which is to +be used to compile forward branches. @xref{Fibonacci, , Fibonacci +numbers}. + +@item Labels +There are 3 @lightning{} instructions to create labels: +@example +label (not specified) @r{simple label} +forward (not specified) @r{forward label} +indirect (not specified) @r{special simple label} +@end example + +@code{label} is normally used as @code{patch_at} argument for backward +jumps. + +@example + jit_node_t *jump, *label; +label = jit_label(); + ... + jump = jit_beqr(JIT_R0, JIT_R1); + jit_patch_at(jump, label); +@end example + +@code{forward} is used to patch code generation before the actual +position of the label is known. + +@example + jit_node_t *jump, *label; +label = jit_forward(); + jump = jit_beqr(JIT_R0, JIT_R1); + jit_patch_at(jump, label); + ... + jit_link(label); +@end example + +@code{indirect} is useful when creating jump tables, and tells +@lightning{} to not optimize out a label that is not the target of +any jump, because an indirect jump may land where it is defined. + +@example + jit_node_t *jump, *label; + ... + jmpr(JIT_R0); @rem{/* may jump to label */} + ... +label = jit_indirect(); +@end example + +@code{indirect} is an special case of @code{note} and @code{name} +because it is a valid argument to @code{address}. + +Note that the usual idiom to write the previous example is +@example + jit_node_t *addr, *jump; +addr = jit_movi(JIT_R0, 0); @rem{/* immediate is ignored */} + ... + jmpr(JIT_R0); + ... + jit_patch(addr); @rem{/* implicit label added */} +@end example + +that automatically binds the implicit label added by @code{patch} with +the @code{movi}, but on some special conditions it is required to create +an "unbound" label. + +@item Function prolog + +These macros are used to set up a function prolog. The @code{allocai} +call accept a single integer argument and returns an offset value +for stack storage access. The @code{allocar} accepts two registers +arguments, the first is set to the offset for stack access, and the +second is the size in bytes argument. + +@example +prolog (not specified) @r{function prolog} +allocai (not specified) @r{reserve space on the stack} +allocar (not specified) @r{allocate space on the stack} +@end example + +@code{allocai} receives the number of bytes to allocate and returns +the offset from the frame pointer register @code{FP} to the base of +the area. + +@code{allocar} receives two register arguments. The first is where +to store the offset from the frame pointer register @code{FP} to the +base of the area. The second argument is the size in bytes. Note +that @code{allocar} is dynamic allocation, and special attention +should be taken when using it. If called in a loop, every iteration +will allocate stack space. Stack space is aligned from 8 to 64 bytes +depending on backend requirements, even if allocating only one byte. +It is advisable to not use it with @code{frame} and @code{tramp}; it +should work with @code{frame} with special care to call only once, +but is not supported if used in @code{tramp}, even if called only +once. + +As a small appetizer, here is a small function that adds 1 to the input +parameter (an @code{int}). I'm using an assembly-like syntax here which +is a bit different from the one used when writing real subroutines with +@lightning{}; the real syntax will be introduced in @xref{GNU lightning +examples, , Generating code at run-time}. + +@example +incr: + prolog +in = arg @rem{! We have an integer argument} + getarg R0, in @rem{! Move it to R0} + addi R0, R0, 1 @rem{! Add 1} + retr R0 @rem{! And return the result} +@end example + +And here is another function which uses the @code{printf} function from +the standard C library to write a number in hexadecimal notation: + +@example +printhex: + prolog +in = arg @rem{! Same as above} + getarg R0, in + prepare @rem{! Begin call sequence for printf} + pushargi "%x" @rem{! Push format string} + ellipsis @rem{! Varargs start here} + pushargr R0 @rem{! Push second argument} + finishi printf @rem{! Call printf} + ret @rem{! Return to caller} +@end example + +@item Trampolines, continuations and tail call optimization + +Frequently it is required to generate jit code that must jump to +code generated later, possibly from another @code{jit_context_t}. +These require compatible stack frames. + +@lightning{} provides two primitives from where trampolines, +continuations and tail call optimization can be implemented. + +@example +frame (not specified) @r{create stack frame} +tramp (not specified) @r{assume stack frame} +@end example + +@code{frame} receives an integer argument@footnote{It is not +automatically computed because it does not know about the +requirement of later generated code.} that defines the size in +bytes for the stack frame of the current, @code{C} callable, +jit function. To calculate this value, a good formula is maximum +number of arguments to any called native function times +eight@footnote{Times eight so that it works for double arguments. +And would not need conditionals for ports that pass arguments in +the stack.}, plus the sum of the arguments to any call to +@code{jit_allocai}. @lightning{} automatically adjusts this value +for any backend specific stack memory it may need, or any +alignment constraint. + +@code{frame} also instructs @lightning{} to save all callee +save registers in the prolog and reload in the epilog. + +@example +main: @rem{! jit entry point} + prolog @rem{! function prolog} + frame 256 @rem{! save all callee save registers and} + @rem{! reserve at least 256 bytes in stack} +main_loop: + ... + jmpi handler @rem{! jumps to external code} + ... + ret @rem{! return to the caller} +@end example + +@code{tramp} differs from @code{frame} only that a prolog and epilog +will not be generated. Note that @code{prolog} must still be used. +The code under @code{tramp} must be ready to be entered with a jump +at the prolog position, and instead of a return, it must end with +a non conditional jump. @code{tramp} exists solely for the fact +that it allows optimizing out prolog and epilog code that would +never be executed. + +@example +handler: @rem{! handler entry point} + prolog @rem{! function prolog} + tramp 256 @rem{! assumes all callee save registers} + @rem{! are saved and there is at least} + @rem{! 256 bytes in stack} + ... + jmpi main_loop @rem{! return to the main loop} +@end example + +@lightning{} only supports Tail Call Optimization using the +@code{tramp} construct. Any other way is not guaranteed to +work on all ports. + +An example of a simple (recursive) tail call optimization: + +@example +factorial: @rem{! Entry point of the factorial function} + prolog +in = arg @rem{! Receive an integer argument} + getarg R0, in @rem{! Move argument to RO} + prepare + pushargi 1 @rem{! This is the accumulator} + pushargr R0 @rem{! This is the argument} + finishi fact @rem{! Call the tail call optimized function} + retval R0 @rem{! Fetch the result} + retr R0 @rem{! Return it} + epilog @rem{! Epilog *before* label before prolog} + +fact: @rem{! Entry point of the helper function} + prolog + frame 16 @rem{! Reserve 16 bytes in the stack} +fact_entry: @rem{! This is the tail call entry point} +ac = arg @rem{! The accumulator is the first argument} +in = arg @rem{! The factorial argument} + getarg R0, ac @rem{! Move the accumulator to R0} + getarg R1, in @rem{! Move the argument to R1} + blei fact_out, R1, 1 @rem{! Done if argument is one or less} + mulr R0, R0, R1 @rem{! accumulator *= argument} + putargr R0, ac @rem{! Update the accumulator} + subi R1, R1, 1 @rem{! argument -= 1} + putargr R1, in @rem{! Update the argument} + jmpi fact_entry @rem{! Tail Call Optimize it!} +fact_out: + retr R0 @rem{! Return the accumulator} +@end example + +@item Predicates +@example +forward_p (not specified) @r{forward label predicate} +indirect_p (not specified) @r{indirect label predicate} +target_p (not specified) @r{used label predicate} +arg_register_p (not specified) @r{argument kind predicate} +callee_save_p (not specified) @r{callee save predicate} +pointer_p (not specified) @r{pointer predicate} +@end example + +@code{forward_p} expects a @code{jit_node_t*} argument, and +returns non zero if it is a forward label reference, that is, +a label returned by @code{forward}, that still needs a +@code{link} call. + +@code{indirect_p} expects a @code{jit_node_t*} argument, and returns +non zero if it is an indirect label reference, that is, a label that +was returned by @code{indirect}. + +@code{target_p} expects a @code{jit_node_t*} argument, that is any +kind of label, and will return non zero if there is at least one +jump or move referencing it. + +@code{arg_register_p} expects a @code{jit_node_t*} argument, that must +have been returned by @code{arg}, @code{arg_f} or @code{arg_d}, and +will return non zero if the argument lives in a register. This call +is useful to know the live range of register arguments, as those +are very fast to read and write, but have volatile values. + +@code{callee_save_p} exects a valid @code{JIT_Rn}, @code{JIT_Vn}, or +@code{JIT_Fn}, and will return non zero if the register is callee +save. This call is useful because on several ports, the @code{JIT_Rn} +and @code{JIT_Fn} registers are actually callee save; no need +to save and load the values when making function calls. + +@code{pointer_p} expects a pointer argument, and will return non +zero if the pointer is inside the generated jit code. Must be +called after @code{jit_emit} and before @code{jit_destroy_state}. +@end table + +@node GNU lightning examples +@chapter Generating code at run-time + +To use @lightning{}, you should include the @file{lightning.h} file that +is put in your include directory by the @samp{make install} command. + +Each of the instructions above translates to a macro or function call. +All you have to do is prepend @code{jit_} (lowercase) to opcode names +and @code{JIT_} (uppercase) to register names. Of course, parameters +are to be put between parentheses. + +This small tutorial presents three examples: + +@iftex +@itemize @bullet +@item +The @code{incr} function found in @ref{The instruction set, , +@lightning{}'s instruction set}: + +@item +A simple function call to @code{printf} + +@item +An RPN calculator. + +@item +Fibonacci numbers +@end itemize +@end iftex +@ifnottex +@menu +* incr:: A function which increments a number by one +* printf:: A simple function call to printf +* RPN calculator:: A more complex example, an RPN calculator +* Fibonacci:: Calculating Fibonacci numbers +@end menu +@end ifnottex + +@node incr +@section A function which increments a number by one + +Let's see how to create and use the sample @code{incr} function created +in @ref{The instruction set, , @lightning{}'s instruction set}: + +@example +#include <stdio.h> +#include <lightning.h> + +static jit_state_t *_jit; + +typedef int (*pifi)(int); @rem{/* Pointer to Int Function of Int */} + +int main(int argc, char *argv[]) +@{ + jit_node_t *in; + pifi incr; + + init_jit(argv[0]); + _jit = jit_new_state(); + + jit_prolog(); @rem{/* @t{ prolog } */} + in = jit_arg(); @rem{/* @t{ in = arg } */} + jit_getarg(JIT_R0, in); @rem{/* @t{ getarg R0 } */} + jit_addi(JIT_R0, JIT_R0, 1); @rem{/* @t{ addi R0@comma{} R0@comma{} 1 } */} + jit_retr(JIT_R0); @rem{/* @t{ retr R0 } */} + + incr = jit_emit(); + jit_clear_state(); + + @rem{/* call the generated code@comma{} passing 5 as an argument */} + printf("%d + 1 = %d\n", 5, incr(5)); + + jit_destroy_state(); + finish_jit(); + return 0; +@} +@end example + +Let's examine the code line by line (well, almost@dots{}): + +@table @t +@item #include <lightning.h> +You already know about this. It defines all of @lightning{}'s macros. + +@item static jit_state_t *_jit; +You might wonder about what is @code{jit_state_t}. It is a structure +that stores jit code generation information. The name @code{_jit} is +special, because since multiple jit generators can run at the same +time, you must either @r{#define _jit my_jit_state} or name it +@code{_jit}. + +@item typedef int (*pifi)(int); +Just a handy typedef for a pointer to a function that takes an +@code{int} and returns another. + +@item jit_node_t *in; +Declares a variable to hold an identifier for a function argument. It +is an opaque pointer, that will hold the return of a call to @code{arg} +and be used as argument to @code{getarg}. + +@item pifi incr; +Declares a function pointer variable to a function that receives an +@code{int} and returns an @code{int}. + +@item init_jit(argv[0]); +You must call this function before creating a @code{jit_state_t} +object. This function does global state initialization, and may need +to detect CPU or Operating System features. It receives a string +argument that is later used to read symbols from a shared object using +GNU binutils if disassembly was enabled at configure time. If no +disassembly will be performed a NULL pointer can be used as argument. + +@item _jit = jit_new_state(); +This call initializes a @lightning{} jit state. + +@item jit_prolog(); +Ok, so we start generating code for our beloved function@dots{} + +@item in = jit_arg(); +@itemx jit_getarg(JIT_R0, in); +We retrieve the first (and only) argument, an integer, and store it +into the general-purpose register @code{R0}. + +@item jit_addi(JIT_R0, JIT_R0, 1); +We add one to the content of the register. + +@item jit_retr(JIT_R0); +This instruction generates a standard function epilog that returns +the contents of the @code{R0} register. + +@item incr = jit_emit(); +This instruction is very important. It actually translates the +@lightning{} macros used before to machine code, flushes the generated +code area out of the processor's instruction cache and return a +pointer to the start of the code. + +@item jit_clear_state(); +This call cleanups any data not required for jit execution. Note +that it must be called after any call to @code{jit_print} or +@code{jit_address}, as this call destroy the @lightning{} +intermediate representation. + +@item printf("%d + 1 = %d", 5, incr(5)); +Calling our function is this simple---it is not distinguishable from +a normal C function call, the only difference being that @code{incr} +is a variable. + +@item jit_destroy_state(); +Releases all memory associated with the jit context. It should be +called after known the jit will no longer be called. + +@item finish_jit(); +This call cleanups any global state hold by @lightning{}, and is +advisable to call it once jit code will no longer be generated. +@end table + +@lightning{} abstracts two phases of dynamic code generation: selecting +instructions that map the standard representation, and emitting binary +code for these instructions. The client program has the responsibility +of describing the code to be generated using the standard @lightning{} +instruction set. + +Let's examine the code generated for @code{incr} on the SPARC and x86_64 +architecture (on the right is the code that an assembly-language +programmer would write): + +@table @b +@item SPARC +@example + save %sp, -112, %sp + mov %i0, %g2 retl + inc %g2 inc %o0 + mov %g2, %i0 + restore + retl + nop +@end example +In this case, @lightning{} introduces overhead to create a register +window (not knowing that the procedure is a leaf procedure) and to +move the argument to the general purpose register @code{R0} (which +maps to @code{%g2} on the SPARC). +@end table + +@table @b +@item x86_64 +@example + sub $0x30,%rsp + mov %rbp,(%rsp) + mov %rsp,%rbp + sub $0x18,%rsp + mov %rdi,%rax mov %rdi, %rax + add $0x1,%rax inc %rax + mov %rbp,%rsp + mov (%rsp),%rbp + add $0x30,%rsp + retq retq +@end example +In this case, the main overhead is due to the function's prolog and +epilog, and stack alignment after reserving stack space for word +to/from float conversions or moving data from/to x87 to/from SSE. +Note that besides allocating space to save callee saved registers, +no registers are saved/restored because @lightning{} notices those +registers are not modified. There is currently no logic to detect +if it needs to allocate stack space for type conversions neither +proper leaf function detection, but these are subject to change +(FIXME). +@end table + +@node printf +@section A simple function call to @code{printf} + +Again, here is the code for the example: + +@example +#include <stdio.h> +#include <lightning.h> + +static jit_state_t *_jit; + +typedef void (*pvfi)(int); @rem{/* Pointer to Void Function of Int */} + +int main(int argc, char *argv[]) +@{ + pvfi myFunction; @rem{/* ptr to generated code */} + jit_node_t *start, *end; @rem{/* a couple of labels */} + jit_node_t *in; @rem{/* to get the argument */} + + init_jit(argv[0]); + _jit = jit_new_state(); + + start = jit_note(__FILE__, __LINE__); + jit_prolog(); + in = jit_arg(); + jit_getarg(JIT_R1, in); + jit_pushargi((jit_word_t)"generated %d bytes\n"); + jit_ellipsis(); + jit_pushargr(JIT_R1); + jit_finishi(printf); + jit_ret(); + jit_epilog(); + end = jit_note(__FILE__, __LINE__); + + myFunction = jit_emit(); + + @rem{/* call the generated code@comma{} passing its size as argument */} + myFunction((char*)jit_address(end) - (char*)jit_address(start)); + jit_clear_state(); + + jit_disassemble(); + + jit_destroy_state(); + finish_jit(); + return 0; +@} +@end example + +The function shows how many bytes were generated. Most of the code +is not very interesting, as it resembles very closely the program +presented in @ref{incr, , A function which increments a number by one}. + +For this reason, we're going to concentrate on just a few statements. + +@table @t +@item start = jit_note(__FILE__, __LINE__); +@itemx @r{@dots{}} +@itemx end = jit_note(__FILE__, __LINE__); +These two instruction call the @code{jit_note} macro, which creates +a note in the jit code; arguments to @code{jit_note} usually are a +filename string and line number integer, but using NULL for the +string argument is perfectly valid if only need to create a simple +marker in the code. + +@item jit_ellipsis(); +@code{ellipsis} usually is only required if calling varargs functions +with double arguments, but it is a good practice to properly describe +the @r{@dots{}} in the call sequence. + +@item jit_pushargi((jit_word_t)"generated %d bytes\n"); +Note the use of the @code{(jit_word_t)} cast, that is used only +to avoid a compiler warning, due to using a pointer where a +wordsize integer type was expected. + +@item jit_prepare(); +@itemx @r{@dots{}} +@itemx jit_finishi(printf); +Once the arguments to @code{printf} have been pushed, what means +moving them to stack or register arguments, the @code{printf} +function is called and the stack cleaned. Note how @lightning{} +abstracts the differences between different architectures and +ABI's -- the client program does not know how parameter passing +works on the host architecture. + +@item jit_epilog(); +Usually it is not required to call @code{epilog}, but because it +is implicitly called when noticing the end of a function, if the +@code{end} variable was set with a @code{note} call after the +@code{ret}, it would not consider the function epilog. + +@item myFunction((char*)jit_address(end) - (char*)jit_address(start)); +This calls the generate jit function passing as argument the offset +difference from the @code{start} and @code{end} notes. The @code{address} +call must be done after the @code{emit} call or either a fatal error +will happen (if @lightning{} is built with assertions enable) or an +undefined value will be returned. + +@item jit_clear_state(); +Note that @code{jit_clear_state} was called after executing jit in +this example. It was done because it must be called after any call +to @code{jit_address} or @code{jit_print}. + +@item jit_disassemble(); +@code{disassemble} will dump the generated code to standard output, +unless @lightning{} was built with the disassembler disabled, in which +case no output will be shown. +@end table + +@node RPN calculator +@section A more complex example, an RPN calculator + +We create a small stack-based RPN calculator which applies a series +of operators to a given parameter and to other numeric operands. +Unlike previous examples, the code generator is fully parameterized +and is able to compile different formulas to different functions. +Here is the code for the expression compiler; a sample usage will +follow. + +Since @lightning{} does not provide push/pop instruction, this +example uses a stack-allocated area to store the data. Such an +area can be allocated using the macro @code{allocai}, which +receives the number of bytes to allocate and returns the offset +from the frame pointer register @code{FP} to the base of the +area. + +Usually, you will use the @code{ldxi} and @code{stxi} instruction +to access stack-allocated variables. However, it is possible to +use operations such as @code{add} to compute the address of the +variables, and pass the address around. + +@example +#include <stdio.h> +#include <lightning.h> + +typedef int (*pifi)(int); @rem{/* Pointer to Int Function of Int */} + +static jit_state_t *_jit; + +void stack_push(int reg, int *sp) +@{ + jit_stxi_i (*sp, JIT_FP, reg); + *sp += sizeof (int); +@} + +void stack_pop(int reg, int *sp) +@{ + *sp -= sizeof (int); + jit_ldxi_i (reg, JIT_FP, *sp); +@} + +jit_node_t *compile_rpn(char *expr) +@{ + jit_node_t *in, *fn; + int stack_base, stack_ptr; + + fn = jit_note(NULL, 0); + jit_prolog(); + in = jit_arg(); + stack_ptr = stack_base = jit_allocai (32 * sizeof (int)); + + jit_getarg_i(JIT_R2, in); + + while (*expr) @{ + char buf[32]; + int n; + if (sscanf(expr, "%[0-9]%n", buf, &n)) @{ + expr += n - 1; + stack_push(JIT_R0, &stack_ptr); + jit_movi(JIT_R0, atoi(buf)); + @} else if (*expr == 'x') @{ + stack_push(JIT_R0, &stack_ptr); + jit_movr(JIT_R0, JIT_R2); + @} else if (*expr == '+') @{ + stack_pop(JIT_R1, &stack_ptr); + jit_addr(JIT_R0, JIT_R1, JIT_R0); + @} else if (*expr == '-') @{ + stack_pop(JIT_R1, &stack_ptr); + jit_subr(JIT_R0, JIT_R1, JIT_R0); + @} else if (*expr == '*') @{ + stack_pop(JIT_R1, &stack_ptr); + jit_mulr(JIT_R0, JIT_R1, JIT_R0); + @} else if (*expr == '/') @{ + stack_pop(JIT_R1, &stack_ptr); + jit_divr(JIT_R0, JIT_R1, JIT_R0); + @} else @{ + fprintf(stderr, "cannot compile: %s\n", expr); + abort(); + @} + ++expr; + @} + jit_retr(JIT_R0); + jit_epilog(); + return fn; +@} +@end example + +The principle on which the calculator is based is easy: the stack top +is held in R0, while the remaining items of the stack are held in the +memory area that we allocate with @code{allocai}. Compiling a numeric +operand or the argument @code{x} pushes the old stack top onto the +stack and moves the operand into R0; compiling an operator pops the +second operand off the stack into R1, and compiles the operation so +that the result goes into R0, thus becoming the new stack top. + +This example allocates a fixed area for 32 @code{int}s. This is not +a problem when the function is a leaf like in this case; in a full-blown +compiler you will want to analyze the input and determine the number +of needed stack slots---a very simple example of register allocation. +The area is then managed like a stack using @code{stack_push} and +@code{stack_pop}. + +Source code for the client (which lies in the same source file) follows: + +@example +int main(int argc, char *argv[]) +@{ + jit_node_t *nc, *nf; + pifi c2f, f2c; + int i; + + init_jit(argv[0]); + _jit = jit_new_state(); + + nc = compile_rpn("32x9*5/+"); + nf = compile_rpn("x32-5*9/"); + (void)jit_emit(); + c2f = (pifi)jit_address(nc); + f2c = (pifi)jit_address(nf); + jit_clear_state(); + + printf("\nC:"); + for (i = 0; i <= 100; i += 10) printf("%3d ", i); + printf("\nF:"); + for (i = 0; i <= 100; i += 10) printf("%3d ", c2f(i)); + printf("\n"); + + printf("\nF:"); + for (i = 32; i <= 212; i += 18) printf("%3d ", i); + printf("\nC:"); + for (i = 32; i <= 212; i += 18) printf("%3d ", f2c(i)); + printf("\n"); + + jit_destroy_state(); + finish_jit(); + return 0; +@} +@end example + +The client displays a conversion table between Celsius and Fahrenheit +degrees (both Celsius-to-Fahrenheit and Fahrenheit-to-Celsius). The +formulas are, @math{F(c) = c*9/5+32} and @math{C(f) = (f-32)*5/9}, +respectively. + +Providing the formula as an argument to @code{compile_rpn} effectively +parameterizes code generation, making it possible to use the same code +to compile different functions; this is what makes dynamic code +generation so powerful. + +@node Fibonacci +@section Fibonacci numbers + +The code in this section calculates the Fibonacci sequence. That is +modeled by the recurrence relation: +@display + f(0) = 0 + f(1) = f(2) = 1 + f(n) = f(n-1) + f(n-2) +@end display + +The purpose of this example is to introduce branches. There are two +kind of branches: backward branches and forward branches. We'll +present the calculation in a recursive and iterative form; the +former only uses forward branches, while the latter uses both. + +@example +#include <stdio.h> +#include <lightning.h> + +static jit_state_t *_jit; + +typedef int (*pifi)(int); @rem{/* Pointer to Int Function of Int */} + +int main(int argc, char *argv[]) +@{ + pifi fib; + jit_node_t *label; + jit_node_t *call; + jit_node_t *in; @rem{/* offset of the argument */} + jit_node_t *ref; @rem{/* to patch the forward reference */} + jit_node_t *zero; @rem{/* to patch the forward reference */} + + init_jit(argv[0]); + _jit = jit_new_state(); + + label = jit_label(); + jit_prolog (); + in = jit_arg (); + jit_getarg (JIT_V0, in); @rem{/* R0 = n */} + zero = jit_beqi (JIT_R0, 0); + jit_movr (JIT_V0, JIT_R0); /* V0 = R0 */ + jit_movi (JIT_R0, 1); + ref = jit_blei (JIT_V0, 2); + jit_subi (JIT_V1, JIT_V0, 1); @rem{/* V1 = n-1 */} + jit_subi (JIT_V2, JIT_V0, 2); @rem{/* V2 = n-2 */} + jit_prepare(); + jit_pushargr(JIT_V1); + call = jit_finishi(NULL); + jit_patch_at(call, label); + jit_retval(JIT_V1); @rem{/* V1 = fib(n-1) */} + jit_prepare(); + jit_pushargr(JIT_V2); + call = jit_finishi(NULL); + jit_patch_at(call, label); + jit_retval(JIT_R0); @rem{/* R0 = fib(n-2) */} + jit_addr(JIT_R0, JIT_R0, JIT_V1); @rem{/* R0 = R0 + V1 */} + + jit_patch(ref); @rem{/* patch jump */} + jit_patch(zero); @rem{/* patch jump */} + jit_retr(JIT_R0); + + @rem{/* call the generated code@comma{} passing 32 as an argument */} + fib = jit_emit(); + jit_clear_state(); + printf("fib(%d) = %d\n", 32, fib(32)); + jit_destroy_state(); + finish_jit(); + return 0; +@} +@end example + +As said above, this is the first example of dynamically compiling +branches. Branch instructions have two operands containing the +values to be compared, and return a @code{jit_note_t *} object +to be patched. + +Because labels final address are only known after calling @code{emit}, +it is required to call @code{patch} or @code{patch_at}, what does +tell @lightning{} that the target to patch is actually a pointer to +a @code{jit_node_t *} object, otherwise, it would assume that is +a pointer to a C function. Note that conditional branches do not +receive a label argument, so they must be patched. + +You need to call @code{patch_at} on the return of value @code{calli}, +@code{finishi}, and @code{calli} if it is actually referencing a label +in the jit code. All branch instructions do not receive a label +argument. Note that @code{movi} is an special case, and patching it +is usually done to get the final address of a label, usually to later +call @code{jmpr}. + +Now, here is the iterative version: + +@example +#include <stdio.h> +#include <lightning.h> + +static jit_state_t *_jit; + +typedef int (*pifi)(int); @rem{/* Pointer to Int Function of Int */} + +int main(int argc, char *argv[]) +@{ + pifi fib; + jit_node_t *in; @rem{/* offset of the argument */} + jit_node_t *ref; @rem{/* to patch the forward reference */} + jit_node_t *zero; @rem{/* to patch the forward reference */} + jit_node_t *jump; @rem{/* jump to start of loop */} + jit_node_t *loop; @rem{/* start of the loop */} + + init_jit(argv[0]); + _jit = jit_new_state(); + + jit_prolog (); + in = jit_arg (); + jit_getarg (JIT_R0, in); @rem{/* R0 = n */} + zero = jit_beqi (JIT_R0, 0); + jit_movr (JIT_R1, JIT_R0); + jit_movi (JIT_R0, 1); + ref = jit_blti (JIT_R1, 2); + jit_subi (JIT_R2, JIT_R2, 2); + jit_movr (JIT_R1, JIT_R0); + + loop= jit_label(); + jit_subi (JIT_R2, JIT_R2, 1); @rem{/* decr. counter */} + jit_movr (JIT_V0, JIT_R0); /* V0 = R0 */ + jit_addr (JIT_R0, JIT_R0, JIT_R1); /* R0 = R0 + R1 */ + jit_movr (JIT_R1, JIT_V0); /* R1 = V0 */ + jump= jit_bnei (JIT_R2, 0); /* if (R2) goto loop; */ + jit_patch_at(jump, loop); + + jit_patch(ref); @rem{/* patch forward jump */} + jit_patch(zero); @rem{/* patch forward jump */} + jit_retr (JIT_R0); + + @rem{/* call the generated code@comma{} passing 36 as an argument */} + fib = jit_emit(); + jit_clear_state(); + printf("fib(%d) = %d\n", 36, fib(36)); + jit_destroy_state(); + finish_jit(); + return 0; +@} +@end example + +This code calculates the recurrence relation using iteration (a +@code{for} loop in high-level languages). There are no function +calls anymore: instead, there is a backward jump (the @code{bnei} at +the end of the loop). + +Note that the program must remember the address for backward jumps; +for forward jumps it is only required to remember the jump code, +and call @code{patch} for the implicit label. + +@node Reentrancy +@chapter Re-entrant usage of @lightning{} + +@lightning{} uses the special @code{_jit} identifier. To be able +to be able to use multiple jit generation states at the same +time, it is required to used code similar to: + +@example + struct jit_state lightning; + #define lightning _jit +@end example + +This will cause the symbol defined to @code{_jit} to be passed as +the first argument to the underlying @lightning{} implementation, +that is usually a function with an @code{_} (underscode) prefix +and with an argument named @code{_jit}, in the pattern: + +@example + static void _jit_mnemonic(jit_state_t *, jit_gpr_t, jit_gpr_t); + #define jit_mnemonic(u, v) _jit_mnemonic(_jit, u, v); +@end example + +The reason for this is to use the same syntax as the initial lightning +implementation and to avoid needing the user to keep adding an extra +argument to every call, as multiple jit states generating code in +paralell should be very uncommon. + +@section Registers +@chapter Accessing the whole register file + +As mentioned earlier in this chapter, all @lightning{} back-ends are +guaranteed to have at least six general-purpose integer registers and +six floating-point registers, but many back-ends will have more. + +To access the entire register files, you can use the +@code{JIT_R}, @code{JIT_V} and @code{JIT_F} macros. They +accept a parameter that identifies the register number, which +must be strictly less than @code{JIT_R_NUM}, @code{JIT_V_NUM} +and @code{JIT_F_NUM} respectively; the number need not be +constant. Of course, expressions like @code{JIT_R0} and +@code{JIT_R(0)} denote the same register, and likewise for +integer callee-saved, or floating-point, registers. + +@node Customizations +@chapter Customizations + +Frequently it is desirable to have more control over how code is +generated or how memory is used during jit generation or execution. + +@section Memory functions +To aid in complete control of memory allocation and deallocation +@lightning{} provides wrappers that default to standard @code{malloc}, +@code{realloc} and @code{free}. These are loosely based on the +GNU GMP counterparts, with the difference that they use the same +prototype of the system allocation functions, that is, no @code{size} +for @code{free} or @code{old_size} for @code{realloc}. + +@deftypefun void jit_set_memory_functions (@* void *(*@var{alloc_func_ptr}) (size_t), @* void *(*@var{realloc_func_ptr}) (void *, size_t), @* void (*@var{free_func_ptr}) (void *)) +@lightning{} guarantees that memory is only allocated or released +using these wrapped functions, but you must note that if lightning +was linked to GNU binutils, malloc is probably will be called multiple +times from there when initializing the disassembler. + +Because @code{init_jit} may call memory functions, if you need to call +@code{jit_set_memory_functions}, it must be called before @code{init_jit}, +otherwise, when calling @code{finish_jit}, a pointer allocated with the +previous or default wrappers will be passed. +@end deftypefun + +@deftypefun void jit_get_memory_functions (@* void *(**@var{alloc_func_ptr}) (size_t), @* void *(**@var{realloc_func_ptr}) (void *, size_t), @* void (**@var{free_func_ptr}) (void *)) +Get the current memory allocation function. Also, unlike the GNU GMP +counterpart, it is an error to pass @code{NULL} pointers as arguments. +@end deftypefun + +@section Alternate code buffer +To instruct @lightning{} to use an alternate code buffer it is required +to call @code{jit_realize} before @code{jit_emit}, and then query states +and customize as appropriate. + +@deftypefun void jit_realize () +Must be called once, before @code{jit_emit}, to instruct @lightning{} +that no other @code{jit_xyz} call will be made. +@end deftypefun + +@deftypefun jit_pointer_t jit_get_code (jit_word_t *@var{code_size}) +Returns NULL or the previous value set with @code{jit_set_code}, and +sets the @var{code_size} argument to an appropriate value. +If @code{jit_get_code} is called before @code{jit_emit}, the +@var{code_size} argument is set to the expected amount of bytes +required to generate code. +If @code{jit_get_code} is called after @code{jit_emit}, the +@var{code_size} argument is set to the exact amount of bytes used +by the code. +@end deftypefun + +@deftypefun void jit_set_code (jit_ponter_t @var{code}, jit_word_t @var{size}) +Instructs @lightning{} to output to the @var{code} argument and +use @var{size} as a guard to not write to invalid memory. If during +@code{jit_emit} @lightning{} finds out that the code would not fit +in @var{size} bytes, it halts code emit and returns @code{NULL}. +@end deftypefun + +A simple example of a loop using an alternate buffer is: + +@example + jit_uint8_t *code; + int *(func)(int); @rem{/* function pointer */} + jit_word_t code_size; + jit_word_t real_code_size; + @rem{...} + jit_realize(); @rem{/* ready to generate code */} + jit_get_code(&code_size); @rem{/* get expected code size */} + code_size = (code_size + 4095) & -4096; + do (;;) @{ + code = mmap(NULL, code_size, PROT_EXEC | PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, -1, 0); + jit_set_code(code, code_size); + if ((func = jit_emit()) == NULL) @{ + munmap(code, code_size); + code_size += 4096; + @} + @} while (func == NULL); + jit_get_code(&real_code_size); @rem{/* query exact size of the code */} +@end example + +The first call to @code{jit_get_code} should return @code{NULL} and set +the @code{code_size} argument to the expected amount of bytes required +to emit code. +The second call to @code{jit_get_code} is after a successful call to +@code{jit_emit}, and will return the value previously set with +@code{jit_set_code} and set the @code{real_code_size} argument to the +exact amount of bytes used to emit the code. + +@section Alternate data buffer +Sometimes it may be desirable to customize how, or to prevent +@lightning{} from using an extra buffer for constants or debug +annotation. Usually when also using an alternate code buffer. + +@deftypefun jit_pointer_t jit_get_data (jit_word_t *@var{data_size}, jit_word_t *@var{note_size}) +Returns @code{NULL} or the previous value set with @code{jit_set_data}, +and sets the @var{data_size} argument to how many bytes are required +for the constants data buffer, and @var{note_size} to how many bytes +are required to store the debug note information. +Note that it always preallocate one debug note entry even if +@code{jit_name} or @code{jit_note} are never called, but will return +zero in the @var{data_size} argument if no constant is required; +constants are only used for the @code{float} and @code{double} operations +that have an immediate argument, and not in all @lightning{} ports. +@end deftypefun + +@deftypefun void jit_set_data (jit_pointer_t @var{data}, jit_word_t @var{size}, jit_word_t @var{flags}) + +@var{data} can be NULL if disabling constants and annotations, otherwise, +a valid pointer must be passed. An assertion is done that the data will +fit in @var{size} bytes (but that is a noop if @lightning{} was built +with @code{-DNDEBUG}). + +@var{size} tells the space in bytes available in @var{data}. + +@var{flags} can be zero to tell to just use the alternate data buffer, +or a composition of @code{JIT_DISABLE_DATA} and @code{JIT_DISABLE_NOTE} + +@table @t +@item JIT_DISABLE_DATA +@cindex JIT_DISABLE_DATA +Instructs @lightning{} to not use a constant table, but to use an +alternate method to synthesize those, usually with a larger code +sequence using stack space to transfer the value from a GPR to a +FPR register. + +@item JIT_DISABLE_NOTE +@cindex JIT_DISABLE_NOTE +Instructs @lightning{} to not store file or function name, and +line numbers in the constant buffer. +@end table +@end deftypefun + +A simple example of a preventing usage of a data buffer is: + +@example + @rem{...} + jit_realize(); @rem{/* ready to generate code */} + jit_get_data(NULL, NULL); + jit_set_data(NULL, 0, JIT_DISABLE_DATA | JIT_DISABLE_NOTE); + @rem{...} +@end example + +Or to only use a data buffer, if required: + +@example + jit_uint8_t *data; + jit_word_t data_size; + @rem{...} + jit_realize(); @rem{/* ready to generate code */} + jit_get_data(&data_size, NULL); + if (data_size) + data = malloc(data_size); + else + data = NULL; + jit_set_data(data, data_size, JIT_DISABLE_NOTE); + @rem{...} + if (data) + free(data); + @rem{...} +@end example + +@node Acknowledgements +@chapter Acknowledgements + +As far as I know, the first general-purpose portable dynamic code +generator is @sc{dcg}, by Dawson R.@: Engler and T.@: A.@: Proebsting. +Further work by Dawson R. Engler resulted in the @sc{vcode} system; +unlike @sc{dcg}, @sc{vcode} used no intermediate representation and +directly inspired @lightning{}. + +Thanks go to Ian Piumarta, who kindly accepted to release his own +program @sc{ccg} under the GNU General Public License, thereby allowing +@lightning{} to use the run-time assemblers he had wrote for @sc{ccg}. +@sc{ccg} provides a way of dynamically assemble programs written in the +underlying architecture's assembly language. So it is not portable, +yet very interesting. + +I also thank Steve Byrne for writing GNU Smalltalk, since @lightning{} +was first developed as a tool to be used in GNU Smalltalk's dynamic +translator from bytecodes to native code. + +@c %**end of header (This is for running Texinfo on a region.) + +@c *********************************************************************** + +@bye diff --git a/libguile/lightning/tests/Makefile b/libguile/lightning/tests/Makefile new file mode 100644 index 000000000..d5295ac13 --- /dev/null +++ b/libguile/lightning/tests/Makefile @@ -0,0 +1,24 @@ +TESTS=$(sort $(basename $(wildcard *.c))) + +CC = gcc +CFLAGS = -Wall -O0 -g + +all: $(addprefix test-,$(TESTS)) + +check: all + @echo "Running unit tests..." + @set -e; for test in $(TESTS); do \ + echo "Testing: $$test"; \ + ./test-$$test; \ + done + @echo "Success." + +jit.o: ../jit.h ../jit/*.c + $(CC) $(CFLAGS) $(CPPFLAGS) -I.. -o jit.o -c ../jit/jit.c + +test-%: %.c jit.o test.h + $(CC) $(CFLAGS) $(CPPFLAGS) -I.. -o $@ jit.o $< + +clean: + rm -f $(addprefix test-,$(TESTS)) + rm -f jit.o diff --git a/libguile/lightning/tests/absr_d.c b/libguile/lightning/tests/absr_d.c new file mode 100644 index 000000000..5671c4f7b --- /dev/null +++ b/libguile/lightning/tests/absr_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_absr_d(j, JIT_F0, JIT_F0); + jit_retr_d(j, JIT_F0); + + double (*f)(double) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0.0); + ASSERT(f(-0.0) == 0.0); + ASSERT(f(0.5) == 0.5); + ASSERT(f(-0.5) == 0.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/absr_f.c b/libguile/lightning/tests/absr_f.c new file mode 100644 index 000000000..e93fb4993 --- /dev/null +++ b/libguile/lightning/tests/absr_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_absr_f(j, JIT_F0, JIT_F0); + jit_retr_f(j, JIT_F0); + + float (*f)(float) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0.0); + ASSERT(f(-0.0) == 0.0); + ASSERT(f(0.5) == 0.5); + ASSERT(f(-0.5) == 0.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/addi.c b/libguile/lightning/tests/addi.c new file mode 100644 index 000000000..9b1a82b0c --- /dev/null +++ b/libguile/lightning/tests/addi.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_addi(j, JIT_R0, JIT_R0, 69); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + int (*f)(int) = ret; + ASSERT(f(42) == 111); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/addr.c b/libguile/lightning/tests/addr.c new file mode 100644 index 000000000..236fcd18a --- /dev/null +++ b/libguile/lightning/tests/addr.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_addr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + int (*f)(int, int) = ret; + ASSERT(f(42, 69) == 111); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/addr_d.c b/libguile/lightning/tests/addr_d.c new file mode 100644 index 000000000..e89663eb0 --- /dev/null +++ b/libguile/lightning/tests/addr_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_addr_d(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_d(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + double (*f)(double, double) = ret; + ASSERT(f(42., 69.) == 111.); + ASSERT(f(42.5, 69.5) == 112.); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/addr_f.c b/libguile/lightning/tests/addr_f.c new file mode 100644 index 000000000..ce918fd0f --- /dev/null +++ b/libguile/lightning/tests/addr_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_addr_f(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_f(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + float (*f)(float, float) = ret; + ASSERT(f(42.f, 69.f) == 111.f); + ASSERT(f(42.5f, 69.5f) == 112.f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/addx.c b/libguile/lightning/tests/addx.c new file mode 100644 index 000000000..664c13998 --- /dev/null +++ b/libguile/lightning/tests/addx.c @@ -0,0 +1,65 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_movi(j, JIT_R2, 0); + jit_addcr(j, JIT_R0, JIT_R0, JIT_R1); + jit_addxi(j, JIT_R2, JIT_R2, 0); + jit_retr(j, JIT_R2); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0, 0) == 0); + +#if __WORDSIZE == 32 + /* carry */ + ASSERT(f(0xffffffff, 0xffffffff) == 1); + /* overflow */ + ASSERT(f(0x7fffffff, 1) == 0); + /* overflow */ + ASSERT(f(0x7fffffff, 0x7fffffff) == 0); + /* carry */ + ASSERT(f(0x7fffffff, 0x80000000) == 0); + /* carry+overflow */ + ASSERT(f(0x80000000, 0x80000000) == 1); +#else + /* nothing */ + ASSERT(f(0xffffffff, 0xffffffff) == 0); + /* nothing */ + ASSERT(f(0x7fffffff, 1) == 0); + /* nothing */ + ASSERT(f(0x7fffffff, 0x7fffffff) == 0); + /* nothing */ + ASSERT(f(0x7fffffff, 0x80000000) == 0); + /* nothing */ + ASSERT(f(0x80000000, 0x80000000) == 0); + /* carry */ + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 1); + /* overflow */ + ASSERT(f(0x7fffffffffffffff, 1) == 0); + /* overflow */ + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == 0); + /* overflow */ + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0); + /* carry+overflow */ + ASSERT(f(0x8000000000000000, 0x8000000000000000) == 1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/andi.c b/libguile/lightning/tests/andi.c new file mode 100644 index 000000000..781b7d0e0 --- /dev/null +++ b/libguile/lightning/tests/andi.c @@ -0,0 +1,35 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_andi(j, JIT_R0, JIT_R0, 1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t) = ret; + + ASSERT(f(0x7fffffff) == 1); + ASSERT(f(0x80000000) == 0); +#if __WORDSIZE == 64 + ASSERT(f(0x7fffffffffffffff) == 1); + ASSERT(f(0x8000000000000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/andr.c b/libguile/lightning/tests/andr.c new file mode 100644 index 000000000..4c549e8ef --- /dev/null +++ b/libguile/lightning/tests/andr.c @@ -0,0 +1,51 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_andr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 1); + ASSERT(f(1, 0x7fffffff) == 1); + ASSERT(f(0x80000000, 1) == 0); + ASSERT(f(1, 0x80000000) == 0); + ASSERT(f(0x7fffffff, 0x80000000) == 0); + ASSERT(f(0x80000000, 0x7fffffff) == 0); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x7fffffff); + ASSERT(f(0xffffffff, 0x7fffffff) == 0x7fffffff); + ASSERT(f(0xffffffff, 0xffffffff) == 0xffffffff); + ASSERT(f(0x7fffffff, 0) == 0); + ASSERT(f(0, 0x7fffffff) == 0); +#if __WORDSIZE == 64 + ASSERT(f(0x7fffffffffffffff, 1) == 1); + ASSERT(f(1, 0x7fffffffffffffff) == 1); + ASSERT(f(0x8000000000000000, 1) == 0); + ASSERT(f(1, 0x8000000000000000) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0x7fffffffffffffff); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 0x7fffffffffffffff); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0xffffffffffffffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/beqi.c b/libguile/lightning/tests/beqi.c new file mode 100644 index 000000000..d65d48d7f --- /dev/null +++ b/libguile/lightning/tests/beqi.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_beqi(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/beqr.c b/libguile/lightning/tests/beqr.c new file mode 100644 index 000000000..6df434d02 --- /dev/null +++ b/libguile/lightning/tests/beqr.c @@ -0,0 +1,34 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_beqr(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/beqr_d.c b/libguile/lightning/tests/beqr_d.c new file mode 100644 index 000000000..408f0dfb0 --- /dev/null +++ b/libguile/lightning/tests/beqr_d.c @@ -0,0 +1,37 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_beqr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/beqr_f.c b/libguile/lightning/tests/beqr_f.c new file mode 100644 index 000000000..2e91105b2 --- /dev/null +++ b/libguile/lightning/tests/beqr_f.c @@ -0,0 +1,37 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_beqr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgei.c b/libguile/lightning/tests/bgei.c new file mode 100644 index 000000000..25fe2ee42 --- /dev/null +++ b/libguile/lightning/tests/bgei.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bgei(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgei_u.c b/libguile/lightning/tests/bgei_u.c new file mode 100644 index 000000000..f2b5a53ad --- /dev/null +++ b/libguile/lightning/tests/bgei_u.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bgei_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bger.c b/libguile/lightning/tests/bger.c new file mode 100644 index 000000000..0bff98a64 --- /dev/null +++ b/libguile/lightning/tests/bger.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bger(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bger_d.c b/libguile/lightning/tests/bger_d.c new file mode 100644 index 000000000..74786ad9f --- /dev/null +++ b/libguile/lightning/tests/bger_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bger_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bger_f.c b/libguile/lightning/tests/bger_f.c new file mode 100644 index 000000000..03dde27d5 --- /dev/null +++ b/libguile/lightning/tests/bger_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bger_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bger_u.c b/libguile/lightning/tests/bger_u.c new file mode 100644 index 000000000..890aec995 --- /dev/null +++ b/libguile/lightning/tests/bger_u.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bger_u(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgti.c b/libguile/lightning/tests/bgti.c new file mode 100644 index 000000000..fa1e7aa7d --- /dev/null +++ b/libguile/lightning/tests/bgti.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bgti(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgti_u.c b/libguile/lightning/tests/bgti_u.c new file mode 100644 index 000000000..2d01728db --- /dev/null +++ b/libguile/lightning/tests/bgti_u.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bgti_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgtr.c b/libguile/lightning/tests/bgtr.c new file mode 100644 index 000000000..779b32063 --- /dev/null +++ b/libguile/lightning/tests/bgtr.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bgtr(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgtr_d.c b/libguile/lightning/tests/bgtr_d.c new file mode 100644 index 000000000..f5ea7a254 --- /dev/null +++ b/libguile/lightning/tests/bgtr_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bgtr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgtr_f.c b/libguile/lightning/tests/bgtr_f.c new file mode 100644 index 000000000..e1aec3a12 --- /dev/null +++ b/libguile/lightning/tests/bgtr_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bgtr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bgtr_u.c b/libguile/lightning/tests/bgtr_u.c new file mode 100644 index 000000000..cec4d17dc --- /dev/null +++ b/libguile/lightning/tests/bgtr_u.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bgtr_u(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/blei.c b/libguile/lightning/tests/blei.c new file mode 100644 index 000000000..1d0a91eb6 --- /dev/null +++ b/libguile/lightning/tests/blei.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_blei(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/blei_u.c b/libguile/lightning/tests/blei_u.c new file mode 100644 index 000000000..fcfde3acb --- /dev/null +++ b/libguile/lightning/tests/blei_u.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_blei_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bler.c b/libguile/lightning/tests/bler.c new file mode 100644 index 000000000..b4ec03442 --- /dev/null +++ b/libguile/lightning/tests/bler.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bler(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bler_d.c b/libguile/lightning/tests/bler_d.c new file mode 100644 index 000000000..8d189a872 --- /dev/null +++ b/libguile/lightning/tests/bler_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bler_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bler_f.c b/libguile/lightning/tests/bler_f.c new file mode 100644 index 000000000..74cc65ceb --- /dev/null +++ b/libguile/lightning/tests/bler_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bler_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bler_u.c b/libguile/lightning/tests/bler_u.c new file mode 100644 index 000000000..006f84b5e --- /dev/null +++ b/libguile/lightning/tests/bler_u.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bler_u(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bltgtr_d.c b/libguile/lightning/tests/bltgtr_d.c new file mode 100644 index 000000000..79ef13943 --- /dev/null +++ b/libguile/lightning/tests/bltgtr_d.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bltgtr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 0); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); + ASSERT(f(0.0/0.0, 0.0/0.0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bltgtr_f.c b/libguile/lightning/tests/bltgtr_f.c new file mode 100644 index 000000000..8cbf83e60 --- /dev/null +++ b/libguile/lightning/tests/bltgtr_f.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bltgtr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 0); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); + ASSERT(f(0.0/0.0, 0.0/0.0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/blti.c b/libguile/lightning/tests/blti.c new file mode 100644 index 000000000..8c3cd34ef --- /dev/null +++ b/libguile/lightning/tests/blti.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_blti(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/blti_u.c b/libguile/lightning/tests/blti_u.c new file mode 100644 index 000000000..b7af89d80 --- /dev/null +++ b/libguile/lightning/tests/blti_u.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_blti_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bltr.c b/libguile/lightning/tests/bltr.c new file mode 100644 index 000000000..56b0d68ee --- /dev/null +++ b/libguile/lightning/tests/bltr.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bltr(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bltr_d.c b/libguile/lightning/tests/bltr_d.c new file mode 100644 index 000000000..9ce78b666 --- /dev/null +++ b/libguile/lightning/tests/bltr_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bltr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bltr_f.c b/libguile/lightning/tests/bltr_f.c new file mode 100644 index 000000000..177a5869a --- /dev/null +++ b/libguile/lightning/tests/bltr_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bltr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bltr_u.c b/libguile/lightning/tests/bltr_u.c new file mode 100644 index 000000000..e87a946ae --- /dev/null +++ b/libguile/lightning/tests/bltr_u.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bltr_u(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bmci.c b/libguile/lightning/tests/bmci.c new file mode 100644 index 000000000..0ffe41541 --- /dev/null +++ b/libguile/lightning/tests/bmci.c @@ -0,0 +1,32 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bmci(j, JIT_R0, 1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); + ASSERT(f(2) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bmcr.c b/libguile/lightning/tests/bmcr.c new file mode 100644 index 000000000..03591fc65 --- /dev/null +++ b/libguile/lightning/tests/bmcr.c @@ -0,0 +1,37 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bmcr(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 0); + ASSERT(f(1, -1) == 0); + ASSERT(f(-1, 1) == 0); + ASSERT(f(-1, -1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bmsi.c b/libguile/lightning/tests/bmsi.c new file mode 100644 index 000000000..21f986ff3 --- /dev/null +++ b/libguile/lightning/tests/bmsi.c @@ -0,0 +1,32 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bmsi(j, JIT_R0, 1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); + ASSERT(f(2) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bmsr.c b/libguile/lightning/tests/bmsr.c new file mode 100644 index 000000000..cd5895198 --- /dev/null +++ b/libguile/lightning/tests/bmsr.c @@ -0,0 +1,37 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bmsr(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 1); + ASSERT(f(1, -1) == 1); + ASSERT(f(-1, 1) == 1); + ASSERT(f(-1, -1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bnei.c b/libguile/lightning/tests/bnei.c new file mode 100644 index 000000000..a34a3ad23 --- /dev/null +++ b/libguile/lightning/tests/bnei.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_reloc_t r = jit_bnei(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bner.c b/libguile/lightning/tests/bner.c new file mode 100644 index 000000000..c0253a6c1 --- /dev/null +++ b/libguile/lightning/tests/bner.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bner(j, JIT_R0, JIT_R1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bner_d.c b/libguile/lightning/tests/bner_d.c new file mode 100644 index 000000000..d106ef51e --- /dev/null +++ b/libguile/lightning/tests/bner_d.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bner_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); + ASSERT(f(0.0/0.0, 0.0/0.0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bner_f.c b/libguile/lightning/tests/bner_f.c new file mode 100644 index 000000000..7c3753da0 --- /dev/null +++ b/libguile/lightning/tests/bner_f.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bner_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); + ASSERT(f(0.0/0.0, 0.0/0.0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/boaddi.c b/libguile/lightning/tests/boaddi.c new file mode 100644 index 000000000..717c4c1a7 --- /dev/null +++ b/libguile/lightning/tests/boaddi.c @@ -0,0 +1,43 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_boaddi(j, JIT_R0, 1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == 0); + ASSERT(f(0) == 1); + ASSERT(f(1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0x7fffffff) == overflowed); + ASSERT(f(0x80000000) == 0x80000001); + ASSERT(f(0xffffffff) == 0); +#else + ASSERT(f(0x7fffffffffffffff) == overflowed); + ASSERT(f(0x8000000000000000) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/boaddi_u.c b/libguile/lightning/tests/boaddi_u.c new file mode 100644 index 000000000..66b261b3f --- /dev/null +++ b/libguile/lightning/tests/boaddi_u.c @@ -0,0 +1,43 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_boaddi_u(j, JIT_R0, 1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == overflowed); + ASSERT(f(0) == 1); + ASSERT(f(1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0x7fffffff) == 0x80000000); + ASSERT(f(0x80000000) == 0x80000001); + ASSERT(f(0xffffffff) == overflowed); +#else + ASSERT(f(0x7fffffffffffffff) == 0x8000000000000000); + ASSERT(f(0x8000000000000000) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff) == overflowed); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/boaddr.c b/libguile/lightning/tests/boaddr.c new file mode 100644 index 000000000..95fb6244f --- /dev/null +++ b/libguile/lightning/tests/boaddr.c @@ -0,0 +1,52 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_boaddr(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(1, 1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == -2); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == overflowed); + ASSERT(f(0x7fffffff, 0x7fffffff) == overflowed); + ASSERT(f(0x7fffffff, 0x80000000) == -1); + ASSERT(f(0x80000000, 0x80000000) == overflowed); +#else + ASSERT(f(0xffffffff, 0xffffffff) == 0xffffffffull + 0xffffffffull); + ASSERT(f(0x7fffffff, 1) == 0x80000000); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0x7fffffffull + 0x7fffffffull); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x80000000) == 0x100000000); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == -2); + ASSERT(f(0x7fffffffffffffff, 1) == overflowed); + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == overflowed); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == -1); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == overflowed); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/boaddr_u.c b/libguile/lightning/tests/boaddr_u.c new file mode 100644 index 000000000..b9b2b4585 --- /dev/null +++ b/libguile/lightning/tests/boaddr_u.c @@ -0,0 +1,52 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_boaddr_u(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(1, 1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == overflowed); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == 0x80000000); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0x7fffffff + 0x7fffffff); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x80000000) == overflowed); +#else + ASSERT(f(0xffffffff, 0xffffffff) == 0xffffffffull + 0xffffffffull); + ASSERT(f(0x7fffffff, 1) == 0x80000000); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0x7fffffffull + 0x7fffffffull); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x80000000) == 0x100000000); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == overflowed); + ASSERT(f(0x7fffffffffffffff, 1) == 0x8000000000000000); + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == -2); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == -1); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == overflowed); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bordr_d.c b/libguile/lightning/tests/bordr_d.c new file mode 100644 index 000000000..24f42148c --- /dev/null +++ b/libguile/lightning/tests/bordr_d.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bordr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); + ASSERT(f(0.0/0.0, 0.0/0.0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bordr_f.c b/libguile/lightning/tests/bordr_f.c new file mode 100644 index 000000000..827da92a7 --- /dev/null +++ b/libguile/lightning/tests/bordr_f.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bordr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 1); + ASSERT(f(1, 1) == 1); + + ASSERT(f(0, 0.0/0.0) == 0); + ASSERT(f(0.0/0.0, 0) == 0); + ASSERT(f(0.0/0.0, 0.0/0.0) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bosubi.c b/libguile/lightning/tests/bosubi.c new file mode 100644 index 000000000..b64514070 --- /dev/null +++ b/libguile/lightning/tests/bosubi.c @@ -0,0 +1,43 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_bosubi(j, JIT_R0, 1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == -2); + ASSERT(f(0) == -1); + ASSERT(f(1) == 0); + +#if __WORDSIZE == 32 + ASSERT(f(0x7fffffff) == 0x7ffffffe); + ASSERT(f(0x80000000) == overflowed); + ASSERT(f(0x80000001) == 0x80000000); +#else + ASSERT(f(0x7fffffffffffffff) == 0x7ffffffffffffffe); + ASSERT(f(0x8000000000000000) == overflowed); + ASSERT(f(0x8000000000000001) == 0x8000000000000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bosubi_u.c b/libguile/lightning/tests/bosubi_u.c new file mode 100644 index 000000000..76a7d6726 --- /dev/null +++ b/libguile/lightning/tests/bosubi_u.c @@ -0,0 +1,39 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_bosubi_u(j, JIT_R0, 1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == -2); + ASSERT(f(0) == overflowed); + ASSERT(f(1) == 0); + +#if __WORDSIZE == 32 + ASSERT(f(0x80000000) == 0x7fffffff); +#else + ASSERT(f(0x8000000000000000) == 0x7fffffffffffffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bosubr.c b/libguile/lightning/tests/bosubr.c new file mode 100644 index 000000000..e79c10bb2 --- /dev/null +++ b/libguile/lightning/tests/bosubr.c @@ -0,0 +1,49 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_bosubr(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == -1); + ASSERT(f(1, 1) == 0); + ASSERT(f(1, -1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == 0); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == 0x7ffffffe); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0); + ASSERT(f(0x80000000, 0x7fffffff) == overflowed); + ASSERT(f(0x7fffffff, 0x80000000) == overflowed); + ASSERT(f(0x80000000, 0x80000000) == 0); +#else + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == overflowed); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == overflowed); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bosubr_u.c b/libguile/lightning/tests/bosubr_u.c new file mode 100644 index 000000000..ad55af386 --- /dev/null +++ b/libguile/lightning/tests/bosubr_u.c @@ -0,0 +1,48 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_bosubr_u(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + jit_patch_here(j, r); + jit_movi(j, JIT_R0, overflowed); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(1, 1) == 0); + ASSERT(f(0, 1) == overflowed); + ASSERT(f(1, 0) == 1); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == 0); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == 0x7ffffffe); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0); + ASSERT(f(0x7fffffff, 0x80000000) == overflowed); + ASSERT(f(0x80000000, 0x80000000) == 0); +#else + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == overflowed); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bswapr_ui.c b/libguile/lightning/tests/bswapr_ui.c new file mode 100644 index 000000000..f566ad486 --- /dev/null +++ b/libguile/lightning/tests/bswapr_ui.c @@ -0,0 +1,32 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_bswapr_ui(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(0x12345678) == 0x78563412); +#if __WORDSIZE > 32 + ASSERT(f(0xff12345678) == 0x78563412); + ASSERT(f(0xff00000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bswapr_ul.c b/libguile/lightning/tests/bswapr_ul.c new file mode 100644 index 000000000..28a2f0390 --- /dev/null +++ b/libguile/lightning/tests/bswapr_ul.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_bswapr_ul(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(0x12345678) == 0x7856341200000000); + ASSERT(f(0xff12345678) == 0x78563412ff000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bswapr_us.c b/libguile/lightning/tests/bswapr_us.c new file mode 100644 index 000000000..10028dfb7 --- /dev/null +++ b/libguile/lightning/tests/bswapr_us.c @@ -0,0 +1,28 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_bswapr_us(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(0x12345678) == 0x7856); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/buneqr_d.c b/libguile/lightning/tests/buneqr_d.c new file mode 100644 index 000000000..887a3ddc2 --- /dev/null +++ b/libguile/lightning/tests/buneqr_d.c @@ -0,0 +1,37 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_buneqr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 1); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/buneqr_f.c b/libguile/lightning/tests/buneqr_f.c new file mode 100644 index 000000000..0671daeb1 --- /dev/null +++ b/libguile/lightning/tests/buneqr_f.c @@ -0,0 +1,37 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_buneqr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 1); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunger_d.c b/libguile/lightning/tests/bunger_d.c new file mode 100644 index 000000000..3a22336ca --- /dev/null +++ b/libguile/lightning/tests/bunger_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunger_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunger_f.c b/libguile/lightning/tests/bunger_f.c new file mode 100644 index 000000000..a4bd7f0df --- /dev/null +++ b/libguile/lightning/tests/bunger_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunger_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bungtr_d.c b/libguile/lightning/tests/bungtr_d.c new file mode 100644 index 000000000..780e8d0b2 --- /dev/null +++ b/libguile/lightning/tests/bungtr_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bungtr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bungtr_f.c b/libguile/lightning/tests/bungtr_f.c new file mode 100644 index 000000000..4debed9f7 --- /dev/null +++ b/libguile/lightning/tests/bungtr_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bungtr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 1); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 1); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunler_d.c b/libguile/lightning/tests/bunler_d.c new file mode 100644 index 000000000..868001eb2 --- /dev/null +++ b/libguile/lightning/tests/bunler_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunler_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunler_f.c b/libguile/lightning/tests/bunler_f.c new file mode 100644 index 000000000..10c5d4abd --- /dev/null +++ b/libguile/lightning/tests/bunler_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunler_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 1); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunltr_d.c b/libguile/lightning/tests/bunltr_d.c new file mode 100644 index 000000000..79b96a1c7 --- /dev/null +++ b/libguile/lightning/tests/bunltr_d.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunltr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunltr_f.c b/libguile/lightning/tests/bunltr_f.c new file mode 100644 index 000000000..3fdd4bb15 --- /dev/null +++ b/libguile/lightning/tests/bunltr_f.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunltr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 1); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 1); + ASSERT(f(0, -1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunordr_d.c b/libguile/lightning/tests/bunordr_d.c new file mode 100644 index 000000000..ef3818d51 --- /dev/null +++ b/libguile/lightning/tests/bunordr_d.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunordr_d(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(double, double) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); + ASSERT(f(0.0/0.0, 0.0/0.0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bunordr_f.c b/libguile/lightning/tests/bunordr_f.c new file mode 100644 index 000000000..3af023862 --- /dev/null +++ b/libguile/lightning/tests/bunordr_f.c @@ -0,0 +1,38 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_reloc_t r = jit_bunordr_f(j, JIT_F0, JIT_F1); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(float, float) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == 0); + ASSERT(f(1, 0) == 0); + ASSERT(f(-1, 0) == 0); + ASSERT(f(0, -1) == 0); + ASSERT(f(1, 1) == 0); + + ASSERT(f(0, 0.0/0.0) == 1); + ASSERT(f(0.0/0.0, 0) == 1); + ASSERT(f(0.0/0.0, 0.0/0.0) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxaddi.c b/libguile/lightning/tests/bxaddi.c new file mode 100644 index 000000000..16d405524 --- /dev/null +++ b/libguile/lightning/tests/bxaddi.c @@ -0,0 +1,42 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_bxaddi(j, JIT_R0, 1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == 0); + ASSERT(f(0) == 1); + ASSERT(f(1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0x7fffffff) == overflowed); + ASSERT(f(0x80000000) == 0x80000001); + ASSERT(f(0xffffffff) == 0); +#else + ASSERT(f(0x7fffffffffffffff) == overflowed); + ASSERT(f(0x8000000000000000) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxaddi_u.c b/libguile/lightning/tests/bxaddi_u.c new file mode 100644 index 000000000..6c3257876 --- /dev/null +++ b/libguile/lightning/tests/bxaddi_u.c @@ -0,0 +1,42 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_bxaddi_u(j, JIT_R0, 1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == overflowed); + ASSERT(f(0) == 1); + ASSERT(f(1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0x7fffffff) == 0x80000000); + ASSERT(f(0x80000000) == 0x80000001); + ASSERT(f(0xffffffff) == overflowed); +#else + ASSERT(f(0x7fffffffffffffff) == 0x8000000000000000); + ASSERT(f(0x8000000000000000) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff) == overflowed); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxaddr.c b/libguile/lightning/tests/bxaddr.c new file mode 100644 index 000000000..a73a0d8eb --- /dev/null +++ b/libguile/lightning/tests/bxaddr.c @@ -0,0 +1,51 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_bxaddr(j, JIT_R0, JIT_R1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(1, 1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == -2); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == overflowed); + ASSERT(f(0x7fffffff, 0x7fffffff) == overflowed); + ASSERT(f(0x7fffffff, 0x80000000) == -1); + ASSERT(f(0x80000000, 0x80000000) == overflowed); +#else + ASSERT(f(0xffffffff, 0xffffffff) == 0xffffffffull + 0xffffffffull); + ASSERT(f(0x7fffffff, 1) == 0x80000000); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0x7fffffffull + 0x7fffffffull); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x80000000) == 0x100000000); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == -2); + ASSERT(f(0x7fffffffffffffff, 1) == overflowed); + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == overflowed); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == -1); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == overflowed); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxaddr_u.c b/libguile/lightning/tests/bxaddr_u.c new file mode 100644 index 000000000..ba54c0391 --- /dev/null +++ b/libguile/lightning/tests/bxaddr_u.c @@ -0,0 +1,51 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_bxaddr_u(j, JIT_R0, JIT_R1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(1, 1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == overflowed); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == 0x80000000); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0x7fffffff + 0x7fffffff); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x80000000) == overflowed); +#else + ASSERT(f(0xffffffff, 0xffffffff) == 0xffffffffull + 0xffffffffull); + ASSERT(f(0x7fffffff, 1) == 0x80000000); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0x7fffffffull + 0x7fffffffull); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x80000000) == 0x100000000); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == overflowed); + ASSERT(f(0x7fffffffffffffff, 1) == 0x8000000000000000); + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == -2); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == -1); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == overflowed); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxsubi.c b/libguile/lightning/tests/bxsubi.c new file mode 100644 index 000000000..83669ac12 --- /dev/null +++ b/libguile/lightning/tests/bxsubi.c @@ -0,0 +1,42 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_bxsubi(j, JIT_R0, 1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == -2); + ASSERT(f(0) == -1); + ASSERT(f(1) == 0); + +#if __WORDSIZE == 32 + ASSERT(f(0x7fffffff) == 0x7ffffffe); + ASSERT(f(0x80000000) == overflowed); + ASSERT(f(0x80000001) == 0x80000000); +#else + ASSERT(f(0x7fffffffffffffff) == 0x7ffffffffffffffe); + ASSERT(f(0x8000000000000000) == overflowed); + ASSERT(f(0x8000000000000001) == 0x8000000000000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxsubi_u.c b/libguile/lightning/tests/bxsubi_u.c new file mode 100644 index 000000000..5d0972706 --- /dev/null +++ b/libguile/lightning/tests/bxsubi_u.c @@ -0,0 +1,38 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + jit_reloc_t r = jit_bxsubi_u(j, JIT_R0, 1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(-1) == -2); + ASSERT(f(0) == overflowed); + ASSERT(f(1) == 0); + +#if __WORDSIZE == 32 + ASSERT(f(0x80000000) == 0x7fffffff); +#else + ASSERT(f(0x8000000000000000) == 0x7fffffffffffffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxsubr.c b/libguile/lightning/tests/bxsubr.c new file mode 100644 index 000000000..aa99db9c4 --- /dev/null +++ b/libguile/lightning/tests/bxsubr.c @@ -0,0 +1,48 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_bxsubr(j, JIT_R0, JIT_R1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(0, 1) == -1); + ASSERT(f(1, 1) == 0); + ASSERT(f(1, -1) == 2); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == 0); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == 0x7ffffffe); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0); + ASSERT(f(0x80000000, 0x7fffffff) == overflowed); + ASSERT(f(0x7fffffff, 0x80000000) == overflowed); + ASSERT(f(0x80000000, 0x80000000) == 0); +#else + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == overflowed); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == overflowed); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/bxsubr_u.c b/libguile/lightning/tests/bxsubr_u.c new file mode 100644 index 000000000..f476c247a --- /dev/null +++ b/libguile/lightning/tests/bxsubr_u.c @@ -0,0 +1,47 @@ +#include "test.h" + +static const intmax_t overflowed = 0xcabba9e5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_reloc_t r = jit_bxsubr_u(j, JIT_R0, JIT_R1); + jit_movi(j, JIT_R0, overflowed); + jit_patch_here(j, r); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t, intmax_t) = jit_end(j, NULL); + + ASSERT(f(0, 0) == 0); + ASSERT(f(1, 1) == 0); + ASSERT(f(0, 1) == overflowed); + ASSERT(f(1, 0) == 1); + +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 0xffffffff) == 0); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0x7fffffff, 1) == 0x7ffffffe); + ASSERT(f(0x7fffffff, 0x7fffffff) == 0); + ASSERT(f(0x7fffffff, 0x80000000) == overflowed); + ASSERT(f(0x80000000, 0x80000000) == 0); +#else + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0x7fffffffffffffff) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == overflowed); + ASSERT(f(0x8000000000000000, 0x8000000000000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/comr.c b/libguile/lightning/tests/comr.c new file mode 100644 index 000000000..608c374c1 --- /dev/null +++ b/libguile/lightning/tests/comr.c @@ -0,0 +1,45 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_comr(j, JIT_R0, JIT_R0); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + +#if __WORDSIZE == 32 + ASSERT(f(0) == 0xffffffff); + ASSERT(f(1) == 0xfffffffe); + ASSERT(f(0xffffffff) == 0); + ASSERT(f(0x80000000) == 0x7fffffff); + ASSERT(f(0x7fffffff) == 0x80000000); + ASSERT(f(0x80000001) == 0x7ffffffe); +#else + ASSERT(f(0) == 0xffffffffffffffff); + ASSERT(f(1) == 0xfffffffffffffffe); + ASSERT(f(0xffffffff) == 0xffffffff00000000); + ASSERT(f(0x80000000) == 0xffffffff7fffffff); + ASSERT(f(0x7fffffff) == 0xffffffff80000000); + ASSERT(f(0x80000001) == 0xffffffff7ffffffe); + ASSERT(f(0xffffffffffffffff) == 0); + ASSERT(f(0x8000000000000000) == 0x7fffffffffffffff); + ASSERT(f(0x7fffffffffffffff) == 0x8000000000000000); + ASSERT(f(0x8000000000000001) == 0x7ffffffffffffffe); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/divr.c b/libguile/lightning/tests/divr.c new file mode 100644 index 000000000..389a69d15 --- /dev/null +++ b/libguile/lightning/tests/divr.c @@ -0,0 +1,63 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_divr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0x7fffffff); + ASSERT(f(1, 0x7fffffff) == 0); + ASSERT(f(0x80000000, 1) == 0x80000000); + ASSERT(f(1, 0x80000000) == 0); + ASSERT(f(0x7fffffff, 2) == 0x3fffffff); + ASSERT(f(2, 0x7fffffff) == 0); + ASSERT(f(2, 0x80000000) == 0); + ASSERT(f(0x7fffffff, 0x80000000) == 0); + ASSERT(f(0, 0x7fffffff) == 0); + ASSERT(f(0xffffffff, 0xffffffff) == 1); +#if __WORDSIZE == 32 + ASSERT(f(0x80000000, 2) == 0xc0000000); + ASSERT(f(0x80000000, 0x7fffffff) == 0xffffffff); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x80000001); + ASSERT(f(0xffffffff, 0x7fffffff) == 0); +#else + ASSERT(f(0x80000000, 2) == 0x40000000); + ASSERT(f(0x80000000, 0x7fffffff) == 1); + ASSERT(f(0x7fffffff, 0xffffffff) == 0); + ASSERT(f(0xffffffff, 0x7fffffff) == 2); + ASSERT(f(0x7fffffffffffffff, 1) == 0x7fffffffffffffff); + ASSERT(f(1, 0x7fffffffffffffff) == 0); + ASSERT(f(0x8000000000000000, 1) == 0x8000000000000000); + ASSERT(f(1, 0x8000000000000000) == 0); + ASSERT(f(0x7fffffffffffffff, 2) == 0x3fffffffffffffff); + ASSERT(f(2, 0x7fffffffffffffff) == 0); + ASSERT(f(0x8000000000000000, 2) == 0xc000000000000000); + ASSERT(f(2, 0x8000000000000000) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 0); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/divr_d.c b/libguile/lightning/tests/divr_d.c new file mode 100644 index 000000000..8597fdda0 --- /dev/null +++ b/libguile/lightning/tests/divr_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_divr_d(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_d(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + double (*f)(double, double) = ret; + ASSERT(f(-0.5f, 0.5f) == -1.0f); + ASSERT(f(1.25f, 0.5f) == 2.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/divr_f.c b/libguile/lightning/tests/divr_f.c new file mode 100644 index 000000000..dd2c63317 --- /dev/null +++ b/libguile/lightning/tests/divr_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_divr_f(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_f(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + float (*f)(float, float) = ret; + ASSERT(f(-0.5f, 0.5f) == -1.0f); + ASSERT(f(1.25f, 0.5f) == 2.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/divr_u.c b/libguile/lightning/tests/divr_u.c new file mode 100644 index 000000000..177c6098c --- /dev/null +++ b/libguile/lightning/tests/divr_u.c @@ -0,0 +1,58 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_divr_u(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0x7fffffff); + ASSERT(f(1, 0x7fffffff) == 0); + ASSERT(f(0x80000000, 1) == 0x80000000); + ASSERT(f(1, 0x80000000) == 0); + ASSERT(f(0x7fffffff, 2) == 0x3fffffff); + ASSERT(f(2, 0x7fffffff) == 0); + ASSERT(f(0x80000000, 2) == 0x40000000); + ASSERT(f(2, 0x80000000) == 0); + ASSERT(f(0x7fffffff, 0x80000000) == 0); + ASSERT(f(0x80000000, 0x7fffffff) == 1); + ASSERT(f(0, 0x7fffffff) == 0); + ASSERT(f(0x7fffffff, 0xffffffff) == 0); + ASSERT(f(0xffffffff, 0x7fffffff) == 2); + ASSERT(f(0xffffffff, 0xffffffff) == 1); +#if __WORDSIZE != 32 + ASSERT(f(0x7fffffffffffffff, 1) == 0x7fffffffffffffff); + ASSERT(f(1, 0x7fffffffffffffff) == 0); + ASSERT(f(0x8000000000000000, 1) == 0x8000000000000000); + ASSERT(f(1, 0x8000000000000000) == 0); + ASSERT(f(0x7fffffffffffffff, 2) == 0x3fffffffffffffff); + ASSERT(f(2, 0x7fffffffffffffff) == 0); + ASSERT(f(0x8000000000000000, 2) == 0x4000000000000000); + ASSERT(f(2, 0x8000000000000000) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 1); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 2); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_c.c b/libguile/lightning/tests/extr_c.c new file mode 100644 index 000000000..f4390a789 --- /dev/null +++ b/libguile/lightning/tests/extr_c.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_c(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(0xf) == 0xf); + ASSERT(f(0xff) == -1); + ASSERT(f(0xfff) == -1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_d.c b/libguile/lightning/tests/extr_d.c new file mode 100644 index 000000000..35d0ab3b7 --- /dev/null +++ b/libguile/lightning/tests/extr_d.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_d(j, JIT_F0, JIT_R0); + jit_retr_d(j, JIT_F0); + + double (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0.0); + ASSERT(f(1) == 1.0); + ASSERT(f(-100) == -100.0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_d_f.c b/libguile/lightning/tests/extr_d_f.c new file mode 100644 index 000000000..570bae814 --- /dev/null +++ b/libguile/lightning/tests/extr_d_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_d_f(j, JIT_F0, JIT_F0); + jit_retr_f(j, JIT_F0); + + float (*f)(double) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0.0f); + ASSERT(f(0.5) == 0.5f); + ASSERT(f(1.0 / 0.0) == 1.0f / 0.0f); + ASSERT(f(1.25) == 1.25f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_f.c b/libguile/lightning/tests/extr_f.c new file mode 100644 index 000000000..f16cd8ca3 --- /dev/null +++ b/libguile/lightning/tests/extr_f.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_f(j, JIT_F0, JIT_R0); + jit_retr_f(j, JIT_F0); + + float (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0.0f); + ASSERT(f(1) == 1.0f); + ASSERT(f(-100) == -100.0f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_f_d.c b/libguile/lightning/tests/extr_f_d.c new file mode 100644 index 000000000..5e90be41b --- /dev/null +++ b/libguile/lightning/tests/extr_f_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_f_d(j, JIT_F0, JIT_F0); + jit_retr_d(j, JIT_F0); + + double (*f)(float) = jit_end(j, NULL); + + ASSERT(f(0.0f) == 0.0); + ASSERT(f(0.5f) == 0.5); + ASSERT(f(1.0f / 0.0f) == 1.0 / 0.0); + ASSERT(f(1.25f) == 1.25); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_i.c b/libguile/lightning/tests/extr_i.c new file mode 100644 index 000000000..a0ec07916 --- /dev/null +++ b/libguile/lightning/tests/extr_i.c @@ -0,0 +1,34 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_i(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(0xfffffff) == 0xfffffff); + ASSERT(f(0xffffffff) == -1); + ASSERT(f(0xfffffffff) == -1); + ASSERT(f(0xf00000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_s.c b/libguile/lightning/tests/extr_s.c new file mode 100644 index 000000000..c12adb722 --- /dev/null +++ b/libguile/lightning/tests/extr_s.c @@ -0,0 +1,32 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_s(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(0xfff) == 0xfff); + ASSERT(f(0xffff) == -1); + ASSERT(f(0xfffff) == -1); + ASSERT(f(0xf0000) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_uc.c b/libguile/lightning/tests/extr_uc.c new file mode 100644 index 000000000..fb700bd36 --- /dev/null +++ b/libguile/lightning/tests/extr_uc.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_uc(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(0xff) == 0xff); + ASSERT(f(0xfff) == 0xff); + ASSERT(f(0xf00) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_ui.c b/libguile/lightning/tests/extr_ui.c new file mode 100644 index 000000000..30706f093 --- /dev/null +++ b/libguile/lightning/tests/extr_ui.c @@ -0,0 +1,33 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_ui(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(0xffffffff) == 0xffffffff); + ASSERT(f(0xfffffffff) == 0xffffffff); + ASSERT(f(0xf00000000) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/extr_us.c b/libguile/lightning/tests/extr_us.c new file mode 100644 index 000000000..a10f6e916 --- /dev/null +++ b/libguile/lightning/tests/extr_us.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_extr_us(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(0xffff) == 0xffff); + ASSERT(f(0xfffff) == 0xffff); + ASSERT(f(0xf0000) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/jmpi.c b/libguile/lightning/tests/jmpi.c new file mode 100644 index 000000000..2f9213fec --- /dev/null +++ b/libguile/lightning/tests/jmpi.c @@ -0,0 +1,21 @@ +#include "test.h" + +static int tail(void) { return 42; } + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_jmpi(j, tail); + + int (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == 42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/jmpr.c b/libguile/lightning/tests/jmpr.c new file mode 100644 index 000000000..32a771791 --- /dev/null +++ b/libguile/lightning/tests/jmpr.c @@ -0,0 +1,27 @@ +#include "test.h" + +static int tail(void) { return 42; } + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_jmpr(j, JIT_R0); + + int (*f)(void*) = jit_end(j, NULL); + ASSERT(f(tail) == 42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_c.c b/libguile/lightning/tests/ldi_c.c new file mode 100644 index 000000000..e08231596 --- /dev/null +++ b/libguile/lightning/tests/ldi_c.c @@ -0,0 +1,22 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_c(j, JIT_R0, &data[0]); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == -1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_d.c b/libguile/lightning/tests/ldi_d.c new file mode 100644 index 000000000..562e35d99 --- /dev/null +++ b/libguile/lightning/tests/ldi_d.c @@ -0,0 +1,22 @@ +#include "test.h" + +static double data = -1.5; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_d(j, JIT_F0, &data); + jit_retr_d(j, JIT_F0); + + double (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == data); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_f.c b/libguile/lightning/tests/ldi_f.c new file mode 100644 index 000000000..ff9abd006 --- /dev/null +++ b/libguile/lightning/tests/ldi_f.c @@ -0,0 +1,22 @@ +#include "test.h" + +static float data = -1.5f; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_f(j, JIT_F0, &data); + jit_retr_f(j, JIT_F0); + + float (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == data); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_i.c b/libguile/lightning/tests/ldi_i.c new file mode 100644 index 000000000..7270cbcf0 --- /dev/null +++ b/libguile/lightning/tests/ldi_i.c @@ -0,0 +1,22 @@ +#include "test.h" + +static uint32_t data = 0xffffffff; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_i(j, JIT_R0, &data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == -1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_l.c b/libguile/lightning/tests/ldi_l.c new file mode 100644 index 000000000..299987049 --- /dev/null +++ b/libguile/lightning/tests/ldi_l.c @@ -0,0 +1,24 @@ +#include "test.h" + +static uint64_t data = 0xffffffffffffffff; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + jit_ldi_l(j, JIT_R0, &data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == -1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_s.c b/libguile/lightning/tests/ldi_s.c new file mode 100644 index 000000000..5713370fa --- /dev/null +++ b/libguile/lightning/tests/ldi_s.c @@ -0,0 +1,22 @@ +#include "test.h" + +static uint16_t data = 0xffff; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_s(j, JIT_R0, &data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == -1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_uc.c b/libguile/lightning/tests/ldi_uc.c new file mode 100644 index 000000000..a99af0eda --- /dev/null +++ b/libguile/lightning/tests/ldi_uc.c @@ -0,0 +1,22 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_uc(j, JIT_R0, data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == 0xff); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_ui.c b/libguile/lightning/tests/ldi_ui.c new file mode 100644 index 000000000..c0458a7cb --- /dev/null +++ b/libguile/lightning/tests/ldi_ui.c @@ -0,0 +1,24 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + jit_ldi_ui(j, JIT_R0, data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == data[0]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldi_us.c b/libguile/lightning/tests/ldi_us.c new file mode 100644 index 000000000..3c9ca5122 --- /dev/null +++ b/libguile/lightning/tests/ldi_us.c @@ -0,0 +1,22 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_ldi_us(j, JIT_R0, data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == data[0]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_c.c b/libguile/lightning/tests/ldr_c.c new file mode 100644 index 000000000..d653dea3b --- /dev/null +++ b/libguile/lightning/tests/ldr_c.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_c(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_d.c b/libguile/lightning/tests/ldr_d.c new file mode 100644 index 000000000..8488fb30f --- /dev/null +++ b/libguile/lightning/tests/ldr_d.c @@ -0,0 +1,31 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_d(j, JIT_F0, JIT_R1); + jit_retr_d(j, JIT_F0); + + double (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_f.c b/libguile/lightning/tests/ldr_f.c new file mode 100644 index 000000000..160af85a4 --- /dev/null +++ b/libguile/lightning/tests/ldr_f.c @@ -0,0 +1,31 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_f(j, JIT_F0, JIT_R1); + jit_retr_f(j, JIT_F0); + + float (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_i.c b/libguile/lightning/tests/ldr_i.c new file mode 100644 index 000000000..956d254ac --- /dev/null +++ b/libguile/lightning/tests/ldr_i.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_i(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x42424242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_l.c b/libguile/lightning/tests/ldr_l.c new file mode 100644 index 000000000..a1a554a57 --- /dev/null +++ b/libguile/lightning/tests/ldr_l.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint64_t data[] = { 0xffffffffffffffff, 0, 0x4242424212345678 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_l(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_s.c b/libguile/lightning/tests/ldr_s.c new file mode 100644 index 000000000..4384c5e00 --- /dev/null +++ b/libguile/lightning/tests/ldr_s.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_s(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x4242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_uc.c b/libguile/lightning/tests/ldr_uc.c new file mode 100644 index 000000000..41dad79ca --- /dev/null +++ b/libguile/lightning/tests/ldr_uc.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_uc(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == 0xff); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_ui.c b/libguile/lightning/tests/ldr_ui.c new file mode 100644 index 000000000..7f684f685 --- /dev/null +++ b/libguile/lightning/tests/ldr_ui.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_ui(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldr_us.c b/libguile/lightning/tests/ldr_us.c new file mode 100644 index 000000000..e813d650d --- /dev/null +++ b/libguile/lightning/tests/ldr_us.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_us(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_c.c b/libguile/lightning/tests/ldxi_c.c new file mode 100644 index 000000000..fd208cd58 --- /dev/null +++ b/libguile/lightning/tests/ldxi_c.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_c(j, JIT_R0, JIT_R0, (uintptr_t)&data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == -1); + ASSERT(f(1) == 0); + ASSERT(f(2) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_d.c b/libguile/lightning/tests/ldxi_d.c new file mode 100644 index 000000000..61529233d --- /dev/null +++ b/libguile/lightning/tests/ldxi_d.c @@ -0,0 +1,31 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_d(j, JIT_F0, JIT_R0, (uintptr_t)data); + jit_retr_d(j, JIT_F0); + + double (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == data[0]); + ASSERT(f(8) == data[1]); + ASSERT(f(16) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_f.c b/libguile/lightning/tests/ldxi_f.c new file mode 100644 index 000000000..47afc3bed --- /dev/null +++ b/libguile/lightning/tests/ldxi_f.c @@ -0,0 +1,31 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_f(j, JIT_F0, JIT_R0, (uintptr_t)data); + jit_retr_f(j, JIT_F0); + + float (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == data[0]); + ASSERT(f(4) == data[1]); + ASSERT(f(8) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_i.c b/libguile/lightning/tests/ldxi_i.c new file mode 100644 index 000000000..005471838 --- /dev/null +++ b/libguile/lightning/tests/ldxi_i.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_i(j, JIT_R0, JIT_R0, (uintptr_t)data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == -1); + ASSERT(f(4) == 0); + ASSERT(f(8) == 0x42424242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_l.c b/libguile/lightning/tests/ldxi_l.c new file mode 100644 index 000000000..c9d07c4c9 --- /dev/null +++ b/libguile/lightning/tests/ldxi_l.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint64_t data[] = { 0xffffffffffffffff, 0, 0x4242424212345678 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_l(j, JIT_R0, JIT_R0, (uintptr_t)data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == -1); + ASSERT(f(8) == 0); + ASSERT(f(16) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_s.c b/libguile/lightning/tests/ldxi_s.c new file mode 100644 index 000000000..1639f6c22 --- /dev/null +++ b/libguile/lightning/tests/ldxi_s.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_s(j, JIT_R0, JIT_R0, (uintptr_t)data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == -1); + ASSERT(f(2) == 0); + ASSERT(f(4) == 0x4242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_uc.c b/libguile/lightning/tests/ldxi_uc.c new file mode 100644 index 000000000..744768b99 --- /dev/null +++ b/libguile/lightning/tests/ldxi_uc.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_uc(j, JIT_R0, JIT_R0, (uintptr_t)data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0xff); + ASSERT(f(1) == 0); + ASSERT(f(2) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_ui.c b/libguile/lightning/tests/ldxi_ui.c new file mode 100644 index 000000000..a25b1b998 --- /dev/null +++ b/libguile/lightning/tests/ldxi_ui.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_ui(j, JIT_R0, JIT_R0, (uintptr_t)data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == data[0]); + ASSERT(f(4) == data[1]); + ASSERT(f(8) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxi_us.c b/libguile/lightning/tests/ldxi_us.c new file mode 100644 index 000000000..1523727ec --- /dev/null +++ b/libguile/lightning/tests/ldxi_us.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldxi_us(j, JIT_R0, JIT_R0, (uintptr_t)data); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(uintmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == data[0]); + ASSERT(f(2) == data[1]); + ASSERT(f(4) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_c.c b/libguile/lightning/tests/ldxr_c.c new file mode 100644 index 000000000..238e441cf --- /dev/null +++ b/libguile/lightning/tests/ldxr_c.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_c(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == -1); + ASSERT(f(data, 1) == 0); + ASSERT(f(data, 2) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_d.c b/libguile/lightning/tests/ldxr_d.c new file mode 100644 index 000000000..b79363730 --- /dev/null +++ b/libguile/lightning/tests/ldxr_d.c @@ -0,0 +1,31 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_d(j, JIT_F0, JIT_R0, JIT_R1); + jit_retr_d(j, JIT_F0); + + double (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == data[0]); + ASSERT(f(data, 8) == data[1]); + ASSERT(f(data, 16) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_f.c b/libguile/lightning/tests/ldxr_f.c new file mode 100644 index 000000000..8c865a9b2 --- /dev/null +++ b/libguile/lightning/tests/ldxr_f.c @@ -0,0 +1,31 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_f(j, JIT_F0, JIT_R0, JIT_R1); + jit_retr_f(j, JIT_F0); + + float (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == data[0]); + ASSERT(f(data, 4) == data[1]); + ASSERT(f(data, 8) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_i.c b/libguile/lightning/tests/ldxr_i.c new file mode 100644 index 000000000..fb003204b --- /dev/null +++ b/libguile/lightning/tests/ldxr_i.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_i(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == -1); + ASSERT(f(data, 4) == 0); + ASSERT(f(data, 8) == 0x42424242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_l.c b/libguile/lightning/tests/ldxr_l.c new file mode 100644 index 000000000..f139e8e00 --- /dev/null +++ b/libguile/lightning/tests/ldxr_l.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint64_t data[] = { 0xffffffffffffffff, 0, 0x4242424212345678 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_l(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == -1); + ASSERT(f(data, 8) == 0); + ASSERT(f(data, 16) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_s.c b/libguile/lightning/tests/ldxr_s.c new file mode 100644 index 000000000..8ba44c1ff --- /dev/null +++ b/libguile/lightning/tests/ldxr_s.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_s(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == -1); + ASSERT(f(data, 2) == 0); + ASSERT(f(data, 4) == 0x4242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_uc.c b/libguile/lightning/tests/ldxr_uc.c new file mode 100644 index 000000000..b6a3cb142 --- /dev/null +++ b/libguile/lightning/tests/ldxr_uc.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_uc(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == 0xff); + ASSERT(f(data, 1) == 0); + ASSERT(f(data, 2) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_ui.c b/libguile/lightning/tests/ldxr_ui.c new file mode 100644 index 000000000..04fcb7d77 --- /dev/null +++ b/libguile/lightning/tests/ldxr_ui.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_ui(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == data[0]); + ASSERT(f(data, 4) == data[1]); + ASSERT(f(data, 8) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ldxr_us.c b/libguile/lightning/tests/ldxr_us.c new file mode 100644 index 000000000..12c4d9ca1 --- /dev/null +++ b/libguile/lightning/tests/ldxr_us.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_ldxr_us(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*, uintmax_t) = jit_end(j, NULL); + + ASSERT(f(data, 0) == data[0]); + ASSERT(f(data, 2) == data[1]); + ASSERT(f(data, 4) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/lshi.c b/libguile/lightning/tests/lshi.c new file mode 100644 index 000000000..41c079a33 --- /dev/null +++ b/libguile/lightning/tests/lshi.c @@ -0,0 +1,31 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_lshi(j, JIT_R0, JIT_R0, 31); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + +#if __WORDSIZE == 32 + ASSERT(f(-0x7f) == 0x80000000); +#else + ASSERT(f(-0x7f) == 0xffffffc080000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/lshr.c b/libguile/lightning/tests/lshr.c new file mode 100644 index 000000000..80edae3b3 --- /dev/null +++ b/libguile/lightning/tests/lshr.c @@ -0,0 +1,72 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_lshr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7f, 1) == 0xfe); + ASSERT(f(0x7fff, 2) == 0x1fffc); + ASSERT(f(0x81, 16) == 0x810000); + ASSERT(f(0xff, 15) == 0x7f8000); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); +#if __WORDSIZE == 32 + ASSERT(f(0xffffffff, 8) == 0xffffff00); + ASSERT(f(0x7fffffff, 3) == 0xfffffff8); + ASSERT(f(-0x7f, 31) == 0x80000000); + ASSERT(f(-0x7fff, 30) == 0x40000000); + ASSERT(f(-0x7fffffff, 29) == 0x20000000); + ASSERT(f(0x80000001, 28) == 0x10000000); + ASSERT(f(0x8001, 17) == 0x20000); + ASSERT(f(0x80000001, 18) == 0x40000); + ASSERT(f(-0xffff, 24) == 0x1000000); +#else + ASSERT(f(0xffffffff, 8) == 0xffffffff00); + ASSERT(f(0x7fffffff, 3) == 0x3fffffff8); + ASSERT(f(-0x7f, 31) == 0xffffffc080000000); + ASSERT(f(-0x7fff, 30) == 0xffffe00040000000); + ASSERT(f(-0x7fffffff, 29) == 0xf000000020000000); + ASSERT(f(0x80000001, 28) == 0x800000010000000); + ASSERT(f(0x8001, 17) == 0x100020000); + ASSERT(f(0x80000001, 18) == 0x2000000040000); + ASSERT(f(-0xffff, 24) == 0xffffff0001000000); + ASSERT(f(0x7f, 33) == 0xfe00000000); + ASSERT(f(0x7ffff, 34) == 0x1ffffc00000000); + ASSERT(f(0x7fffffff, 35) == 0xfffffff800000000); + ASSERT(f(-0x7f, 63) == 0x8000000000000000); + ASSERT(f(-0x7fff, 62) == 0x4000000000000000); + ASSERT(f(-0x7fffffff, 61) == 0x2000000000000000); + ASSERT(f(0x80000001, 60) == 0x1000000000000000); + ASSERT(f(0x81, 48) == 0x81000000000000); + ASSERT(f(0x8001, 49) == 0x2000000000000); + ASSERT(f(0x80000001, 40) == 0x10000000000); + ASSERT(f(0xff, 47) == 0x7f800000000000); + ASSERT(f(0xffff0001, 56) == 0x100000000000000); + ASSERT(f(0xffffffff, 40) == 0xffffff0000000000); + ASSERT(f(0x7fffffffff, 33) == 0xfffffffe00000000); + ASSERT(f(-0x7fffffffff, 63) == 0x8000000000000000); + ASSERT(f(0x8000000001, 48) == 0x1000000000000); + ASSERT(f(0xffffffffff, 47) == 0xffff800000000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/mov_addr.c b/libguile/lightning/tests/mov_addr.c new file mode 100644 index 000000000..0d7d9e071 --- /dev/null +++ b/libguile/lightning/tests/mov_addr.c @@ -0,0 +1,23 @@ +#include "test.h" + +static uint64_t thing = 0x123456789abcdef0; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_patch_there(j, jit_mov_addr(j, JIT_R0), &thing); + jit_retr(j, JIT_R0); + + void* (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == &thing); + ASSERT(*(uint64_t*)f() == thing); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/movi_d.c b/libguile/lightning/tests/movi_d.c new file mode 100644 index 000000000..58ec949fc --- /dev/null +++ b/libguile/lightning/tests/movi_d.c @@ -0,0 +1,20 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_movi_d(j, JIT_F0, 3.14159); + jit_retr_d(j, JIT_F0); + + double (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == 3.14159); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/movi_f.c b/libguile/lightning/tests/movi_f.c new file mode 100644 index 000000000..0b92f9242 --- /dev/null +++ b/libguile/lightning/tests/movi_f.c @@ -0,0 +1,20 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + jit_movi_f(j, JIT_F0, 3.14159f); + jit_retr_f(j, JIT_F0); + + float (*f)(void) = jit_end(j, NULL); + + ASSERT(f() == 3.14159f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/mulr.c b/libguile/lightning/tests/mulr.c new file mode 100644 index 000000000..4cd28e618 --- /dev/null +++ b/libguile/lightning/tests/mulr.c @@ -0,0 +1,67 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_mulr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0x7fffffff); + ASSERT(f(1, 0x7fffffff) == 0x7fffffff); + ASSERT(f(0x80000000, 1) == 0x80000000); + ASSERT(f(1, 0x80000000) == 0x80000000); + ASSERT(f(0x7fffffff, 2) == 0xfffffffe); + ASSERT(f(2, 0x7fffffff) == 0xfffffffe); + ASSERT(f(0x7fffffff, 0) == 0); + ASSERT(f(0, 0x7fffffff) == 0); +#if __WORDSIZE == 32 + ASSERT(f(0x80000000, 2) == 0); + ASSERT(f(2, 0x80000000) == 0); + ASSERT(f(0x7fffffff, 0x80000000) == 0x80000000); + ASSERT(f(0x80000000, 0x7fffffff) == 0x80000000); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x80000001); + ASSERT(f(0xffffffff, 0x7fffffff) == 0x80000001); + ASSERT(f(0xffffffff, 0xffffffff) == 1); +#else + ASSERT(f(0x80000000, 2) == 0x100000000); + ASSERT(f(2, 0x80000000) == 0x100000000); + ASSERT(f(0x7fffffff, 0x80000000) == 0x3fffffff80000000); + ASSERT(f(0x80000000, 0x7fffffff) == 0x3fffffff80000000); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x7ffffffe80000001); + ASSERT(f(0xffffffff, 0x7fffffff) == 0x7ffffffe80000001); + ASSERT(f(0xffffffff, 0xffffffff) == 0xfffffffe00000001); + ASSERT(f(0x7fffffffffffffff, 1) == 0x7fffffffffffffff); + ASSERT(f(1, 0x7fffffffffffffff) == 0x7fffffffffffffff); + ASSERT(f(0x8000000000000000, 1) == 0x8000000000000000); + ASSERT(f(1, 0x8000000000000000) == 0x8000000000000000); + ASSERT(f(0x7fffffffffffffff, 2) == 0xfffffffffffffffe); + ASSERT(f(2, 0x7fffffffffffffff) == 0xfffffffffffffffe); + ASSERT(f(0x8000000000000000, 2) == 0); + ASSERT(f(2, 0x8000000000000000) == 0); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0x8000000000000000); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0x8000000000000000); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 0x8000000000000001); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/mulr_d.c b/libguile/lightning/tests/mulr_d.c new file mode 100644 index 000000000..0b4fa18ad --- /dev/null +++ b/libguile/lightning/tests/mulr_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_mulr_d(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_d(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + double (*f)(double, double) = ret; + ASSERT(f(-0.5, 0.5) == -0.25); + ASSERT(f(0.25, 0.75) == 0.1875); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/mulr_f.c b/libguile/lightning/tests/mulr_f.c new file mode 100644 index 000000000..ed716fa5f --- /dev/null +++ b/libguile/lightning/tests/mulr_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_mulr_f(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_f(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + float (*f)(float, float) = ret; + ASSERT(f(-0.5f, 0.5f) == -0.25f); + ASSERT(f(0.25f, 0.75f) == 0.1875f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/negr.c b/libguile/lightning/tests/negr.c new file mode 100644 index 000000000..5a5c5c1d2 --- /dev/null +++ b/libguile/lightning/tests/negr.c @@ -0,0 +1,43 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_negr(j, JIT_R0, JIT_R0); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); +#if __WORDSIZE == 32 + ASSERT(f(1) == 0xffffffff); + ASSERT(f(0xffffffff) == 1); + ASSERT(f(0x80000000) == 0x80000000); + ASSERT(f(0x7fffffff) == 0x80000001); + ASSERT(f(0x80000001) == 0x7fffffff); +#else + ASSERT(f(1) == 0xffffffffffffffff); + ASSERT(f(0xffffffff) == 0xffffffff00000001); + ASSERT(f(0x80000000) == 0xffffffff80000000); + ASSERT(f(0x7fffffff) == 0xffffffff80000001); + ASSERT(f(0x80000001) == 0xffffffff7fffffff); + ASSERT(f(0xffffffffffffffff) == 1); + ASSERT(f(0x8000000000000000) == 0x8000000000000000); + ASSERT(f(0x7fffffffffffffff) == 0x8000000000000001); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/negr_d.c b/libguile/lightning/tests/negr_d.c new file mode 100644 index 000000000..1af229be6 --- /dev/null +++ b/libguile/lightning/tests/negr_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_negr_d(j, JIT_F0, JIT_F0); + jit_retr_d(j, JIT_F0); + + double (*f)(double) = jit_end(j, NULL); + + ASSERT(f(0.0) == -0.0); + ASSERT(f(0.5) == -0.5); + ASSERT(f(1.0 / 0.0) == -1.0 / 0.0); + ASSERT(f(-1.25) == 1.25); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/negr_f.c b/libguile/lightning/tests/negr_f.c new file mode 100644 index 000000000..cdc1ccdcc --- /dev/null +++ b/libguile/lightning/tests/negr_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_negr_f(j, JIT_F0, JIT_F0); + jit_retr_f(j, JIT_F0); + + float (*f)(float) = jit_end(j, NULL); + + ASSERT(f(0.0f) == -0.0f); + ASSERT(f(0.5f) == -0.5f); + ASSERT(f(1.0f / 0.0f) == -1.0f / 0.0f); + ASSERT(f(-1.25f) == 1.25f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/nop.c b/libguile/lightning/tests/nop.c new file mode 100644 index 000000000..16c5c8a7e --- /dev/null +++ b/libguile/lightning/tests/nop.c @@ -0,0 +1,24 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + size_t total = 0; + char *start = jit_address(j); + for (size_t i = 1; i < 10; total += i, i++) + jit_nop(j, i); + char *end = jit_address(j); + ASSERT(end - start == total); + jit_reti(j, 42); + + intmax_t (*f)(void) = jit_end(j, NULL); + ASSERT(f() == 42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/ori.c b/libguile/lightning/tests/ori.c new file mode 100644 index 000000000..59e91b95a --- /dev/null +++ b/libguile/lightning/tests/ori.c @@ -0,0 +1,35 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ori(j, JIT_R0, JIT_R0, 1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t) = ret; + + ASSERT(f(0x7fffffff) == 0x7fffffff); + ASSERT(f(0x80000000) == 0x80000001); +#if __WORDSIZE == 64 + ASSERT(f(0x7fffffffffffffff) == 0x7fffffffffffffff); + ASSERT(f(0x8000000000000000) == 0x8000000000000001); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/orr.c b/libguile/lightning/tests/orr.c new file mode 100644 index 000000000..6c98544b4 --- /dev/null +++ b/libguile/lightning/tests/orr.c @@ -0,0 +1,51 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_orr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0x7fffffff); + ASSERT(f(1, 0x7fffffff) == 0x7fffffff); + ASSERT(f(0x80000000, 1) == 0x80000001); + ASSERT(f(1, 0x80000000) == 0x80000001); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x7fffffff) == 0xffffffff); + ASSERT(f(0x7fffffff, 0xffffffff) == 0xffffffff); + ASSERT(f(0xffffffff, 0x7fffffff) == 0xffffffff); + ASSERT(f(0xffffffff, 0xffffffff) == 0xffffffff); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0, 0x7fffffff) == 0x7fffffff); +#if __WORDSIZE == 64 + ASSERT(f(0x7fffffffffffffff, 1) == 0x7fffffffffffffff); + ASSERT(f(1, 0x7fffffffffffffff) == 0x7fffffffffffffff); + ASSERT(f(0x8000000000000000, 1) == 0x8000000000000001); + ASSERT(f(1, 0x8000000000000000) == 0x8000000000000001); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0xffffffffffffffff); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0xffffffffffffffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/pushpop.c b/libguile/lightning/tests/pushpop.c new file mode 100644 index 000000000..9a464c3ed --- /dev/null +++ b/libguile/lightning/tests/pushpop.c @@ -0,0 +1,44 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + const jit_gpr_t gpr[] = { JIT_R0, JIT_R1, JIT_R2, JIT_V0, JIT_V1, JIT_V2 }; + const jit_fpr_t fpr[] = { JIT_F0, JIT_F1, JIT_F2 }; + + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + for (int i=0; i<6; i++) + jit_pushr(j, gpr[i]); + for (int i=0; i<3; i++) + jit_pushr_d(j, fpr[i]); + + // Stomple registers. + for (int i=0; i<6; i++) + jit_movi(j, gpr[i], 0xcabba9e5); + for (int i=0; i<3; i++) + jit_extr_d(j, fpr[i], gpr[i]); + + for (int i=2; i>=0; i--) + jit_popr_d(j, fpr[i]); + for (int i=5; i>=0; i--) + jit_popr(j, gpr[i]); + + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + ASSERT(f(42) == 42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/qdivr.c b/libguile/lightning/tests/qdivr.c new file mode 100644 index 000000000..37871f375 --- /dev/null +++ b/libguile/lightning/tests/qdivr.c @@ -0,0 +1,69 @@ +#include "test.h" + +static void +maybe_save(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_pushr(j, reg); +} + +static void +maybe_restore(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_popr(j, reg); +} + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { + JIT_ARG_ABI_POINTER, JIT_ARG_ABI_POINTER, + JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX + }; + jit_arg_t args[4]; + const jit_anyreg_t regs[] = { + { .gpr=JIT_R0 }, { .gpr=JIT_R1 }, + { .gpr=JIT_R2 }, { .gpr=JIT_V0 } + }; + + maybe_save(j, JIT_V0); + maybe_save(j, JIT_V1); + maybe_save(j, JIT_V2); + + jit_receive(j, 4, abi, args); + jit_load_args(j, 4, abi, args, regs); + + jit_qdivr(j, JIT_V1, JIT_V2, JIT_R2, JIT_V0); + jit_str(j, JIT_R0, JIT_V1); + jit_str(j, JIT_R1, JIT_V2); + + maybe_restore(j, JIT_V2); + maybe_restore(j, JIT_V1); + maybe_restore(j, JIT_V0); + + jit_ret(j); + + size_t size = 0; + void* ret = jit_end(j, &size); + + void (*f)(intmax_t*, intmax_t*, intmax_t, intmax_t) = ret; + +#define QDIV(a, b, c, d) \ + do { \ + intmax_t C = 0, D = 0; f(&C, &D, a, b); ASSERT(C == c); ASSERT(D == d); \ + } while (0) + + QDIV(10, 3, 3, 1); + QDIV(-33, 9, -3, -6); + QDIV(-41, -7, 5, -6); + QDIV(65536, 4096, 16, 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/qdivr_u.c b/libguile/lightning/tests/qdivr_u.c new file mode 100644 index 000000000..84f101f56 --- /dev/null +++ b/libguile/lightning/tests/qdivr_u.c @@ -0,0 +1,67 @@ +#include "test.h" + +static void +maybe_save(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_pushr(j, reg); +} + +static void +maybe_restore(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_popr(j, reg); +} + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { + JIT_ARG_ABI_POINTER, JIT_ARG_ABI_POINTER, + JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX + }; + jit_arg_t args[4]; + const jit_anyreg_t regs[] = { + { .gpr=JIT_R0 }, { .gpr=JIT_R1 }, + { .gpr=JIT_R2 }, { .gpr=JIT_V0 } + }; + + maybe_save(j, JIT_V0); + maybe_save(j, JIT_V1); + maybe_save(j, JIT_V2); + + jit_receive(j, 4, abi, args); + jit_load_args(j, 4, abi, args, regs); + + jit_qdivr_u(j, JIT_V1, JIT_V2, JIT_R2, JIT_V0); + jit_str(j, JIT_R0, JIT_V1); + jit_str(j, JIT_R1, JIT_V2); + + maybe_restore(j, JIT_V2); + maybe_restore(j, JIT_V1); + maybe_restore(j, JIT_V0); + + jit_ret(j); + + size_t size = 0; + void* ret = jit_end(j, &size); + + void (*f)(intmax_t*, intmax_t*, intmax_t, intmax_t) = ret; + +#define QDIV(a, b, c, d) \ + do { \ + intmax_t C = 0, D = 0; f(&C, &D, a, b); ASSERT(C == c); ASSERT(D == d); \ + } while (0) + + QDIV(-1, -2, 1, 1); + QDIV(-2, -5, 1, 3); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/qmulr.c b/libguile/lightning/tests/qmulr.c new file mode 100644 index 000000000..7e3d4b0e8 --- /dev/null +++ b/libguile/lightning/tests/qmulr.c @@ -0,0 +1,82 @@ +#include "test.h" + +static void +maybe_save(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_pushr(j, reg); +} + +static void +maybe_restore(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_popr(j, reg); +} + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { + JIT_ARG_ABI_POINTER, JIT_ARG_ABI_POINTER, + JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX + }; + jit_arg_t args[4]; + const jit_anyreg_t regs[] = { + { .gpr=JIT_R0 }, { .gpr=JIT_R1 }, + { .gpr=JIT_R2 }, { .gpr=JIT_V0 } + }; + + maybe_save(j, JIT_V0); + maybe_save(j, JIT_V1); + maybe_save(j, JIT_V2); + + jit_receive(j, 4, abi, args); + jit_load_args(j, 4, abi, args, regs); + + jit_qmulr(j, JIT_V1, JIT_V2, JIT_R2, JIT_V0); + jit_str(j, JIT_R0, JIT_V1); + jit_str(j, JIT_R1, JIT_V2); + + maybe_restore(j, JIT_V2); + maybe_restore(j, JIT_V1); + maybe_restore(j, JIT_V0); + + jit_ret(j); + + size_t size = 0; + void* ret = jit_end(j, &size); + + void (*f)(intmax_t*, intmax_t*, intmax_t, intmax_t) = ret; + +#define QMUL(a, b, c, d) \ + do { \ + intmax_t C = 0, D = 0; f(&C, &D, a, b); ASSERT(C == c); ASSERT(D == d); \ + } while (0) + + QMUL(-2, -1, 2, 0); + QMUL(0, -1, 0, 0); + QMUL(-1, 0, 0, 0); + QMUL(1, -1, -1, -1); +#if __WORDSIZE == 32 + QMUL(0x7ffff, 0x7ffff, 0xfff00001, 0x3f); + QMUL(0x80000000, -2, 0, 1); + QMUL(0x80000000, 2, 0, -1); + QMUL(0x80000001, 3, 0x80000003, -2); + QMUL(0x80000001, -3, 0x7ffffffd, 1); +#else + QMUL(0x7ffffffff, 0x7ffffffff, 0xfffffff000000001, 0x3f); + QMUL(0x8000000000000000, -2, 0, 1); + QMUL(0x8000000000000000, 2, 0, -1); + QMUL(0x8000000000000001, 3, 0x8000000000000003, -2); + QMUL(0x8000000000000001, -3, 0x7ffffffffffffffd, 1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/qmulr_u.c b/libguile/lightning/tests/qmulr_u.c new file mode 100644 index 000000000..6ac5cd057 --- /dev/null +++ b/libguile/lightning/tests/qmulr_u.c @@ -0,0 +1,70 @@ +#include "test.h" + +static void +maybe_save(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_pushr(j, reg); +} + +static void +maybe_restore(jit_state_t *j, jit_gpr_t reg) +{ + if (jit_class(reg.bits) & jit_class_sav) + jit_popr(j, reg); +} + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { + JIT_ARG_ABI_POINTER, JIT_ARG_ABI_POINTER, + JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX + }; + jit_arg_t args[4]; + const jit_anyreg_t regs[] = { + { .gpr=JIT_R0 }, { .gpr=JIT_R1 }, + { .gpr=JIT_R2 }, { .gpr=JIT_V0 } + }; + + maybe_save(j, JIT_V0); + maybe_save(j, JIT_V1); + maybe_save(j, JIT_V2); + + jit_receive(j, 4, abi, args); + jit_load_args(j, 4, abi, args, regs); + + jit_qmulr_u(j, JIT_V1, JIT_V2, JIT_R2, JIT_V0); + jit_str(j, JIT_R0, JIT_V1); + jit_str(j, JIT_R1, JIT_V2); + + maybe_restore(j, JIT_V2); + maybe_restore(j, JIT_V1); + maybe_restore(j, JIT_V0); + + jit_ret(j); + + size_t size = 0; + void* ret = jit_end(j, &size); + + void (*f)(intmax_t*, intmax_t*, intmax_t, intmax_t) = ret; + +#define UQMUL(a, b, c, d) \ + do { \ + intmax_t C = 0, D = 0; f(&C, &D, a, b); ASSERT(C == c); ASSERT(D == d); \ + } while (0) + +#if __WORDSIZE == 32 + UQMUL(0xffffff, 0xffffff, 0xfe000001, 0xffff); +#else + UQMUL(0xffffffffff, 0xffffffffff, 0xfffffe0000000001, 0xffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/remr.c b/libguile/lightning/tests/remr.c new file mode 100644 index 000000000..a06e2407f --- /dev/null +++ b/libguile/lightning/tests/remr.c @@ -0,0 +1,63 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_remr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0); + ASSERT(f(1, 0x7fffffff) == 1); + ASSERT(f(0x80000000, 1) == 0); + ASSERT(f(1, 0x80000000) == 1); + ASSERT(f(0x7fffffff, 2) == 1); + ASSERT(f(2, 0x7fffffff) == 2); + ASSERT(f(0x80000000, 2) == 0); + ASSERT(f(2, 0x80000000) == 2); + ASSERT(f(0x7fffffff, 0x80000000) == 0x7fffffff); + ASSERT(f(0, 0x7fffffff) == 0); + ASSERT(f(0xffffffff, 0xffffffff) == 0); + +#if __WORDSIZE == 32 + ASSERT(f(0x80000000, 0x7fffffff) == 0xffffffff); + ASSERT(f(0x7fffffff, 0xffffffff) == 0); + ASSERT(f(0xffffffff, 0x7fffffff) == 0xffffffff); +#else + ASSERT(f(0x80000000, 0x7fffffff) == 1); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x7fffffff); + ASSERT(f(0xffffffff, 0x7fffffff) == 1); + ASSERT(f(0x7fffffffffffffff, 1) == 0); + ASSERT(f(1, 0x7fffffffffffffff) == 1); + ASSERT(f(0x8000000000000000, 1) == 0); + ASSERT(f(1, 0x8000000000000000) == 1); + ASSERT(f(0x7fffffffffffffff, 2) == 1); + ASSERT(f(2, 0x7fffffffffffffff) == 2); + ASSERT(f(0x8000000000000000, 2) == 0); + ASSERT(f(2, 0x8000000000000000) == 2); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0x7fffffffffffffff); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/remr_u.c b/libguile/lightning/tests/remr_u.c new file mode 100644 index 000000000..025018142 --- /dev/null +++ b/libguile/lightning/tests/remr_u.c @@ -0,0 +1,59 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_remr_u(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0); + ASSERT(f(1, 0x7fffffff) == 1); + ASSERT(f(0x80000000, 1) == 0); + ASSERT(f(1, 0x80000000) == 1); + ASSERT(f(0x7fffffff, 2) == 1); + ASSERT(f(2, 0x7fffffff) == 2); + ASSERT(f(0x80000000, 2) == 0); + ASSERT(f(2, 0x80000000) == 2); + ASSERT(f(0x7fffffff, 0x80000000) == 0x7fffffff); + ASSERT(f(0x80000000, 0x7fffffff) == 1); + ASSERT(f(0, 0x7fffffff) == 0); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x7fffffff); + ASSERT(f(0xffffffff, 0x7fffffff) == 1); + ASSERT(f(0xffffffff, 0xffffffff) == 0); + +#if __WORDSIZE != 32 + ASSERT(f(0x7fffffffffffffff, 1) == 0); + ASSERT(f(1, 0x7fffffffffffffff) == 1); + ASSERT(f(0x8000000000000000, 1) == 0); + ASSERT(f(1, 0x8000000000000000) == 1); + ASSERT(f(0x7fffffffffffffff, 2) == 1); + ASSERT(f(2, 0x7fffffffffffffff) == 2); + ASSERT(f(0x8000000000000000, 2) == 0); + ASSERT(f(2, 0x8000000000000000) == 2); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0x7fffffffffffffff); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 1); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0x7fffffffffffffff); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 1); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/rshi.c b/libguile/lightning/tests/rshi.c new file mode 100644 index 000000000..0f2cdfda7 --- /dev/null +++ b/libguile/lightning/tests/rshi.c @@ -0,0 +1,32 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_rshi(j, JIT_R0, JIT_R0, 31); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + +#if __WORDSIZE == 32 + ASSERT(f(0x80000000) == -1); +#else + ASSERT(f(0x80000000) == 1); + ASSERT(f(0x8000000000000000) == 0xffffffff00000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/rshi_u.c b/libguile/lightning/tests/rshi_u.c new file mode 100644 index 000000000..141c41c09 --- /dev/null +++ b/libguile/lightning/tests/rshi_u.c @@ -0,0 +1,32 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_rshi_u(j, JIT_R0, JIT_R0, 31); + jit_retr(j, JIT_R0); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + +#if __WORDSIZE == 32 + ASSERT(f(0x80000000) == 1); +#else + ASSERT(f(0x80000000) == 1); + ASSERT(f(0x8000000000000000) == 0x100000000); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/rshr.c b/libguile/lightning/tests/rshr.c new file mode 100644 index 000000000..ef702b630 --- /dev/null +++ b/libguile/lightning/tests/rshr.c @@ -0,0 +1,66 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_rshr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0xfe, 1) == 0x7f); + ASSERT(f(0x1fffc, 2) == 0x7fff); + ASSERT(f(0x40000000, 30) == 1); + ASSERT(f(0x20000000, 29) == 1); + ASSERT(f(0x10000000, 28) == 1); + ASSERT(f(0x810000, 16) == 0x81); + ASSERT(f(0x20000, 17) == 1); + ASSERT(f(0x40000, 18) == 1); + ASSERT(f(0x7f8000, 15) == 0xff); + ASSERT(f(0x1000000, 24) == 1); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); +#if __WORDSIZE == 32 + ASSERT(f(0xfffffff8, 3) == 0xffffffff); + ASSERT(f(0x80000000, 31) == 0xffffffff); + ASSERT(f(0xffffff00, 8) == 0xffffffff); +#else + ASSERT(f(0x3fffffff8, 3) == 0x7fffffff); + ASSERT(f(0xffffffc080000000, 31) == 0xffffffffffffff81); + ASSERT(f(0xffffff00, 8) == 0xffffff); + ASSERT(f(0xfe00000000, 33) == 0x7f); + ASSERT(f(0x1ffffc00000000, 34) == 0x7ffff); + ASSERT(f(0xfffffff800000000, 29) == 0xffffffffffffffc0); + ASSERT(f(0x8000000000000000, 63) == 0xffffffffffffffff); + ASSERT(f(0x4000000000000000, 62) == 1); + ASSERT(f(0x2000000000000000, 61) == 1); + ASSERT(f(0x1000000000000000, 60) == 1); + ASSERT(f(0x81000000000000, 48) == 0x81); + ASSERT(f(0x2000000000000, 49) == 1); + ASSERT(f(0x10000000000, 40) == 1); + ASSERT(f(0x7f800000000000, 47) == 0xff); + ASSERT(f(0x100000000000000, 56) == 1); + ASSERT(f(0xffffff0000000000, 40) == 0xffffffffffffffff); + ASSERT(f(0xfffffffe00000000, 33) == 0xffffffffffffffff); + ASSERT(f(0x8000000000000001, 63) == 0xffffffffffffffff); + ASSERT(f(0x1000000000000, 48) == 1); + ASSERT(f(0xffff800000000000, 47) == 0xffffffffffffffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/rshr_u.c b/libguile/lightning/tests/rshr_u.c new file mode 100644 index 000000000..268117fe5 --- /dev/null +++ b/libguile/lightning/tests/rshr_u.c @@ -0,0 +1,65 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_rshr_u(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0xfe, 1) == 0x7f); + ASSERT(f(0x1fffc, 2) == 0x7fff); + ASSERT(f(0x80000000, 31) == 1); + ASSERT(f(0x40000000, 30) == 1); + ASSERT(f(0x20000000, 29) == 1); + ASSERT(f(0x10000000, 28) == 1); + ASSERT(f(0x810000, 16) == 0x81); + ASSERT(f(0x20000, 17) == 1); + ASSERT(f(0x40000, 18) == 1); + ASSERT(f(0x7f8000, 15) == 0xff); + ASSERT(f(0x1000000, 24) == 1); + ASSERT(f(0xffffff00, 8) == 0xffffff); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); +#if __WORDSIZE == 32 + ASSERT(f(0xfffffff8, 3) == 0x1fffffff); +#else + ASSERT(f(0x3fffffff8, 3) == 0x7fffffff); + ASSERT(f(0xffffffc080000000, 31) == 0x1ffffff81); + ASSERT(f(0xfe00000000, 33) == 0x7f); + ASSERT(f(0x1ffffc00000000, 34) == 0x7ffff); + ASSERT(f(0xfffffff800000000, 29) == 0x7ffffffc0); + ASSERT(f(0x8000000000000000, 63) == 1); + ASSERT(f(0x4000000000000000, 62) == 1); + ASSERT(f(0x2000000000000000, 61) == 1); + ASSERT(f(0x1000000000000000, 60) == 1); + ASSERT(f(0x81000000000000, 48) == 0x81); + ASSERT(f(0x2000000000000, 49) == 1); + ASSERT(f(0x10000000000, 40) == 1); + ASSERT(f(0x7f800000000000, 47) == 0xff); + ASSERT(f(0x100000000000000, 56) == 1); + ASSERT(f(0xffffff0000000000, 40) == 0xffffff); + ASSERT(f(0xfffffffe00000000, 33) == 0x7fffffff); + ASSERT(f(0x8000000000000001, 63) == 1); + ASSERT(f(0x1000000000000, 48) == 1); + ASSERT(f(0xffff800000000000, 47) == 0x1ffff); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sqrtr_d.c b/libguile/lightning/tests/sqrtr_d.c new file mode 100644 index 000000000..cb17b56ac --- /dev/null +++ b/libguile/lightning/tests/sqrtr_d.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sqrtr_d(j, JIT_F0, JIT_F0); + jit_retr_d(j, JIT_F0); + + double (*f)(double) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0.0); + ASSERT(f(4.0) == 2.0); + ASSERT(f(-4.0) != f(-4.0)); // nan +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sqrtr_f.c b/libguile/lightning/tests/sqrtr_f.c new file mode 100644 index 000000000..ffa9211af --- /dev/null +++ b/libguile/lightning/tests/sqrtr_f.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sqrtr_f(j, JIT_F0, JIT_F0); + jit_retr_f(j, JIT_F0); + + float (*f)(float) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0.0); + ASSERT(f(4.0) == 2.0); + ASSERT(f(-4.0) != f(-4.0)); // nan +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sti_c.c b/libguile/lightning/tests/sti_c.c new file mode 100644 index 000000000..10b7b6a91 --- /dev/null +++ b/libguile/lightning/tests/sti_c.c @@ -0,0 +1,35 @@ +#include "test.h" + +static uint8_t data[] = { 0x12, 0x00, 0x34 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INT8 }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sti_c(j, &data[1], JIT_R1); + jit_ret(j); + + void (*f)(int8_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34); + f(-1); + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0xff); + ASSERT(data[2] == 0x34); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sti_d.c b/libguile/lightning/tests/sti_d.c new file mode 100644 index 000000000..2c51827f5 --- /dev/null +++ b/libguile/lightning/tests/sti_d.c @@ -0,0 +1,35 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sti_d(j, &data[1], JIT_F0); + jit_ret(j); + + void (*f)(double) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 0.0); + ASSERT(data[2] == 0.5); + f(42.5); + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 42.5); + ASSERT(data[2] == 0.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sti_f.c b/libguile/lightning/tests/sti_f.c new file mode 100644 index 000000000..1e3674a4f --- /dev/null +++ b/libguile/lightning/tests/sti_f.c @@ -0,0 +1,35 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sti_f(j, &data[1], JIT_F0); + jit_ret(j); + + void (*f)(float) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 0.0f); + ASSERT(data[2] == 0.5f); + f(42.5f); + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 42.5f); + ASSERT(data[2] == 0.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sti_i.c b/libguile/lightning/tests/sti_i.c new file mode 100644 index 000000000..b0e6d83f7 --- /dev/null +++ b/libguile/lightning/tests/sti_i.c @@ -0,0 +1,35 @@ +#include "test.h" + +static uint32_t data[] = { 0x12121212, 0x00000000, 0x34343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INT32 }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sti_i(j, &data[1], JIT_R1); + jit_ret(j); + + void (*f)(int32_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34343434); + f(-1); + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0xffffffff); + ASSERT(data[2] == 0x34343434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sti_l.c b/libguile/lightning/tests/sti_l.c new file mode 100644 index 000000000..e997b014f --- /dev/null +++ b/libguile/lightning/tests/sti_l.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint64_t data[] = { 0x1212121212121212, 0, 0x3434343434343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INT64 }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sti_l(j, &data[1], JIT_R1); + jit_ret(j); + + void (*f)(int64_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x3434343434343434); + f(-1); + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0xffffffffffffffff); + ASSERT(data[2] == 0x3434343434343434); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/sti_s.c b/libguile/lightning/tests/sti_s.c new file mode 100644 index 000000000..95cfd3396 --- /dev/null +++ b/libguile/lightning/tests/sti_s.c @@ -0,0 +1,35 @@ +#include "test.h" + +static uint16_t data[] = { 0x1212, 0x0000, 0x3434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INT16 }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_sti_s(j, &data[1], JIT_R1); + jit_ret(j); + + void (*f)(int16_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0); + ASSERT(data[2] == 0x3434); + f(-1); + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0xffff); + ASSERT(data[2] == 0x3434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/str_c.c b/libguile/lightning/tests/str_c.c new file mode 100644 index 000000000..eb04a85df --- /dev/null +++ b/libguile/lightning/tests/str_c.c @@ -0,0 +1,35 @@ +#include "test.h" + +static uint8_t data[] = { 0x12, 0x00, 0x34 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INT8 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_str_c(j, JIT_R0, JIT_R1); + jit_ret(j); + + void (*f)(void*, int8_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34); + f(&data[1], -1); + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0xff); + ASSERT(data[2] == 0x34); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/str_d.c b/libguile/lightning/tests/str_d.c new file mode 100644 index 000000000..04e5aed57 --- /dev/null +++ b/libguile/lightning/tests/str_d.c @@ -0,0 +1,35 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .fpr=JIT_F0 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_str_d(j, JIT_R0, JIT_F0); + jit_ret(j); + + void (*f)(void*, double) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 0.0); + ASSERT(data[2] == 0.5); + f(&data[1], 42.5); + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 42.5); + ASSERT(data[2] == 0.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/str_f.c b/libguile/lightning/tests/str_f.c new file mode 100644 index 000000000..167fac038 --- /dev/null +++ b/libguile/lightning/tests/str_f.c @@ -0,0 +1,35 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .fpr=JIT_F0 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_str_f(j, JIT_R0, JIT_F0); + jit_ret(j); + + void (*f)(void*, float) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 0.0f); + ASSERT(data[2] == 0.5f); + f(&data[1], 42.5f); + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 42.5f); + ASSERT(data[2] == 0.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/str_i.c b/libguile/lightning/tests/str_i.c new file mode 100644 index 000000000..7dd6d8c78 --- /dev/null +++ b/libguile/lightning/tests/str_i.c @@ -0,0 +1,35 @@ +#include "test.h" + +static uint32_t data[] = { 0x12121212, 0x00000000, 0x34343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INT32 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_str_i(j, JIT_R0, JIT_R1); + jit_ret(j); + + void (*f)(void*, int32_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34343434); + f(&data[1], -1); + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0xffffffff); + ASSERT(data[2] == 0x34343434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/str_l.c b/libguile/lightning/tests/str_l.c new file mode 100644 index 000000000..8a1b905ea --- /dev/null +++ b/libguile/lightning/tests/str_l.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint64_t data[] = { 0x1212121212121212, 0, 0x3434343434343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INT64 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_str_l(j, JIT_R0, JIT_R1); + jit_ret(j); + + void (*f)(void*, int64_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x3434343434343434); + f(&data[1], -1); + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0xffffffffffffffff); + ASSERT(data[2] == 0x3434343434343434); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/str_s.c b/libguile/lightning/tests/str_s.c new file mode 100644 index 000000000..97932ad31 --- /dev/null +++ b/libguile/lightning/tests/str_s.c @@ -0,0 +1,35 @@ +#include "test.h" + +static uint16_t data[] = { 0x1212, 0x0000, 0x3434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INT16 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_str_s(j, JIT_R0, JIT_R1); + jit_ret(j); + + void (*f)(void*, int16_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0); + ASSERT(data[2] == 0x3434); + f(&data[1], -1); + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0xffff); + ASSERT(data[2] == 0x3434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxi_c.c b/libguile/lightning/tests/stxi_c.c new file mode 100644 index 000000000..1a877434f --- /dev/null +++ b/libguile/lightning/tests/stxi_c.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint8_t data[] = { 0x12, 0x00, 0x34 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT8 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_stxi_c(j, (uintptr_t)data, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(intmax_t, int8_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34); + f(1, -1); + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0xff); + ASSERT(data[2] == 0x34); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxi_d.c b/libguile/lightning/tests/stxi_d.c new file mode 100644 index 000000000..a9de3d23d --- /dev/null +++ b/libguile/lightning/tests/stxi_d.c @@ -0,0 +1,37 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R2 }, { .fpr=JIT_F0 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_stxi_d(j, (uintptr_t)data, JIT_R2, JIT_F0); + jit_ret(j); + + void (*f)(intmax_t, double) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 0.0); + ASSERT(data[2] == 0.5); + f(8, 42.5); + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 42.5); + ASSERT(data[2] == 0.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxi_f.c b/libguile/lightning/tests/stxi_f.c new file mode 100644 index 000000000..a348249ea --- /dev/null +++ b/libguile/lightning/tests/stxi_f.c @@ -0,0 +1,37 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R2 }, { .fpr=JIT_F0 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_stxi_f(j, (uintptr_t)data, JIT_R2, JIT_F0); + jit_ret(j); + + void (*f)(intmax_t, float) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 0.0f); + ASSERT(data[2] == 0.5f); + f(4, 42.5f); + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 42.5f); + ASSERT(data[2] == 0.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxi_i.c b/libguile/lightning/tests/stxi_i.c new file mode 100644 index 000000000..c39adc2cd --- /dev/null +++ b/libguile/lightning/tests/stxi_i.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint32_t data[] = { 0x12121212, 0x00000000, 0x34343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT32 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_stxi_i(j, (uintptr_t)data, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(intmax_t, int32_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34343434); + f(4, -1); + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0xffffffff); + ASSERT(data[2] == 0x34343434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxi_l.c b/libguile/lightning/tests/stxi_l.c new file mode 100644 index 000000000..b280c4d72 --- /dev/null +++ b/libguile/lightning/tests/stxi_l.c @@ -0,0 +1,39 @@ +#include "test.h" + +static uint64_t data[] = { 0x1212121212121212, 0, 0x3434343434343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT64 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_stxi_l(j, (uintptr_t)data, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(intmax_t, int64_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x3434343434343434); + f(8, -1); + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0xffffffffffffffff); + ASSERT(data[2] == 0x3434343434343434); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxi_s.c b/libguile/lightning/tests/stxi_s.c new file mode 100644 index 000000000..09af31ea6 --- /dev/null +++ b/libguile/lightning/tests/stxi_s.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint16_t data[] = { 0x1212, 0x0000, 0x3434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT16 }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_stxi_s(j, (uintptr_t)data, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(intmax_t, int16_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0); + ASSERT(data[2] == 0x3434); + f(2, -1); + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0xffff); + ASSERT(data[2] == 0x3434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxr_c.c b/libguile/lightning/tests/stxr_c.c new file mode 100644 index 000000000..14e40c787 --- /dev/null +++ b/libguile/lightning/tests/stxr_c.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint8_t data[] = { 0x12, 0x00, 0x34 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT8 }; + jit_arg_t args[3]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R0 }, { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 3, abi, args); + jit_load_args(j, 3, abi, args, regs); + + jit_stxr_c(j, JIT_R0, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(void*, intmax_t, int8_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34); + f(data, 1, -1); + ASSERT(data[0] == 0x12); + ASSERT(data[1] == 0xff); + ASSERT(data[2] == 0x34); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxr_d.c b/libguile/lightning/tests/stxr_d.c new file mode 100644 index 000000000..8f1d957d7 --- /dev/null +++ b/libguile/lightning/tests/stxr_d.c @@ -0,0 +1,37 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[3]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R0 }, { .gpr=JIT_R2 }, { .fpr=JIT_F0 } }; + + jit_receive(j, 3, abi, args); + jit_load_args(j, 3, abi, args, regs); + + jit_stxr_d(j, JIT_R0, JIT_R2, JIT_F0); + jit_ret(j); + + void (*f)(void*, intmax_t, double) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 0.0); + ASSERT(data[2] == 0.5); + f(data, 8, 42.5); + ASSERT(data[0] == -1.0); + ASSERT(data[1] == 42.5); + ASSERT(data[2] == 0.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxr_f.c b/libguile/lightning/tests/stxr_f.c new file mode 100644 index 000000000..7de57715c --- /dev/null +++ b/libguile/lightning/tests/stxr_f.c @@ -0,0 +1,37 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[3]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R0 }, { .gpr=JIT_R2 }, { .fpr=JIT_F0 } }; + + jit_receive(j, 3, abi, args); + jit_load_args(j, 3, abi, args, regs); + + jit_stxr_f(j, JIT_R0, JIT_R2, JIT_F0); + jit_ret(j); + + void (*f)(void*, intmax_t, float) = jit_end(j, NULL); + + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 0.0f); + ASSERT(data[2] == 0.5f); + f(data, 4, 42.5f); + ASSERT(data[0] == -1.0f); + ASSERT(data[1] == 42.5f); + ASSERT(data[2] == 0.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxr_i.c b/libguile/lightning/tests/stxr_i.c new file mode 100644 index 000000000..b613ec00a --- /dev/null +++ b/libguile/lightning/tests/stxr_i.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint32_t data[] = { 0x12121212, 0x00000000, 0x34343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT32 }; + jit_arg_t args[3]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R0 }, { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 3, abi, args); + jit_load_args(j, 3, abi, args, regs); + + jit_stxr_i(j, JIT_R0, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(void*, intmax_t, int32_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x34343434); + f(data, 4, -1); + ASSERT(data[0] == 0x12121212); + ASSERT(data[1] == 0xffffffff); + ASSERT(data[2] == 0x34343434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxr_l.c b/libguile/lightning/tests/stxr_l.c new file mode 100644 index 000000000..0fd239cc7 --- /dev/null +++ b/libguile/lightning/tests/stxr_l.c @@ -0,0 +1,39 @@ +#include "test.h" + +static uint64_t data[] = { 0x1212121212121212, 0, 0x3434343434343434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT64 }; + jit_arg_t args[3]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R0 }, { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 3, abi, args); + jit_load_args(j, 3, abi, args, regs); + + jit_stxr_l(j, JIT_R0, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(void*, intmax_t, int64_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0x00); + ASSERT(data[2] == 0x3434343434343434); + f(data, 8, -1); + ASSERT(data[0] == 0x1212121212121212); + ASSERT(data[1] == 0xffffffffffffffff); + ASSERT(data[2] == 0x3434343434343434); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/stxr_s.c b/libguile/lightning/tests/stxr_s.c new file mode 100644 index 000000000..926da5694 --- /dev/null +++ b/libguile/lightning/tests/stxr_s.c @@ -0,0 +1,37 @@ +#include "test.h" + +static uint16_t data[] = { 0x1212, 0x0000, 0x3434 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = + { JIT_ARG_ABI_POINTER, JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INT16 }; + jit_arg_t args[3]; + const jit_anyreg_t regs[] = + { { .gpr=JIT_R0 }, { .gpr=JIT_R2 }, { .gpr=JIT_R1 } }; + + jit_receive(j, 3, abi, args); + jit_load_args(j, 3, abi, args, regs); + + jit_stxr_s(j, JIT_R0, JIT_R2, JIT_R1); + jit_ret(j); + + void (*f)(void*, intmax_t, int16_t) = jit_end(j, NULL); + + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0); + ASSERT(data[2] == 0x3434); + f(data, 2, -1); + ASSERT(data[0] == 0x1212); + ASSERT(data[1] == 0xffff); + ASSERT(data[2] == 0x3434); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/subr.c b/libguile/lightning/tests/subr.c new file mode 100644 index 000000000..a375dff93 --- /dev/null +++ b/libguile/lightning/tests/subr.c @@ -0,0 +1,29 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_subr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + int (*f)(int, int) = ret; + ASSERT(f(42, 69) == -27); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/subr_d.c b/libguile/lightning/tests/subr_d.c new file mode 100644 index 000000000..94c5ea477 --- /dev/null +++ b/libguile/lightning/tests/subr_d.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE, JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_subr_d(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_d(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + double (*f)(double, double) = ret; + ASSERT(f(42., 69.) == -27.); + ASSERT(f(42., 69.5) == -27.5); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/subr_f.c b/libguile/lightning/tests/subr_f.c new file mode 100644 index 000000000..fd6b37777 --- /dev/null +++ b/libguile/lightning/tests/subr_f.c @@ -0,0 +1,30 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT, JIT_ARG_ABI_FLOAT }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 }, { .fpr=JIT_F1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_subr_f(j, JIT_F0, JIT_F0, JIT_F1); + jit_retr_f(j, JIT_F0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + float (*f)(float, float) = ret; + ASSERT(f(42.f, 69.f) == -27.f); + ASSERT(f(42.0f, 69.5f) == -27.5f); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/subx.c b/libguile/lightning/tests/subx.c new file mode 100644 index 000000000..f28739965 --- /dev/null +++ b/libguile/lightning/tests/subx.c @@ -0,0 +1,65 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + jit_movi(j, JIT_R2, 0); + jit_subcr(j, JIT_R0, JIT_R0, JIT_R1); + jit_subxi(j, JIT_R2, JIT_R2, 0); + jit_retr(j, JIT_R2); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0, 0) == 0); + +#if __WORDSIZE == 32 + /* carry */ + ASSERT(f(0x7fffffff, 0xffffffff) == 0xffffffff); + /* overflow */ + ASSERT(f(0x80000000, 1) == 0); + /* carry */ + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + /* overflow */ + ASSERT(f(0x80000000, 0x7fffffff) == 0); + /* carry+overflow */ + ASSERT(f(1, 0x80000000) == 0xffffffff); +#else + /* carry */ + ASSERT(f(0x7fffffff, 0xffffffff) == -1); + /* nothing */ + ASSERT(f(0x80000000, 1) == 0); + /* carry */ + ASSERT(f(0x7fffffff, 0x80000000) == -1); + /* nothing */ + ASSERT(f(0x80000000, 0x7fffffff) == 0); + /* carry */ + ASSERT(f(1, 0x80000000) == -1); + /* carry */ + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == -1); + /* overflow */ + ASSERT(f(0x8000000000000000, 1) == 0); + /* carry */ + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == -1); + /* overflow */ + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0); + /* carry+overflow */ + ASSERT(f(1, 0x8000000000000000) == -1); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/test.h b/libguile/lightning/tests/test.h new file mode 100644 index 000000000..bc30507ca --- /dev/null +++ b/libguile/lightning/tests/test.h @@ -0,0 +1,42 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/mman.h> + +#include <jit.h> + +#define ASSERT(x) \ + do { \ + if (!(x)) { \ + fprintf(stderr, "%s:%d: assertion failed: " #x "\n", \ + __FILE__, __LINE__); \ + abort(); \ + } \ + } while (0) + +static inline int +main_helper (int argc, char *argv[], + void (*run_test)(jit_state_t*, uint8_t*, size_t)) +{ + ASSERT(init_jit()); + jit_state_t *j = jit_new_state(); + ASSERT(j); + + const size_t arena_size = 4096; + char *arena_base = mmap (NULL, arena_size, + PROT_EXEC | PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + + if (arena_base == MAP_FAILED) + { + perror ("allocating JIT code buffer failed"); + return 1; + } + + run_test(j, (uint8_t*)arena_base, arena_size); + + jit_destroy_state(j); + + munmap(arena_base, arena_size); + + return 0; +} diff --git a/libguile/lightning/tests/truncr_d_i.c b/libguile/lightning/tests/truncr_d_i.c new file mode 100644 index 000000000..c703ae8ba --- /dev/null +++ b/libguile/lightning/tests/truncr_d_i.c @@ -0,0 +1,34 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_truncr_d_i(j, JIT_R0, JIT_F0); + jit_retr(j, JIT_R0); + + int (*f)(double) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0); + ASSERT(f(-0.0) == 0); + ASSERT(f(0.5) == 0); + ASSERT(f(-0.5) == 0); + ASSERT(f(1.5) == 1); + ASSERT(f(-1.5) == -1); + ASSERT(f(2.5) == 2); + ASSERT(f(-2.5) == -2); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/truncr_d_l.c b/libguile/lightning/tests/truncr_d_l.c new file mode 100644 index 000000000..752a76fa0 --- /dev/null +++ b/libguile/lightning/tests/truncr_d_l.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_truncr_d_l(j, JIT_R0, JIT_F0); + jit_retr(j, JIT_R0); + + int64_t (*f)(double) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0); + ASSERT(f(-0.0) == 0); + ASSERT(f(0.5) == 0); + ASSERT(f(-0.5) == 0); + ASSERT(f(1.5) == 1); + ASSERT(f(-1.5) == -1); + ASSERT(f(2.5) == 2); + ASSERT(f(-2.5) == -2); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/truncr_f_i.c b/libguile/lightning/tests/truncr_f_i.c new file mode 100644 index 000000000..32fd71fdf --- /dev/null +++ b/libguile/lightning/tests/truncr_f_i.c @@ -0,0 +1,34 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_truncr_f_i(j, JIT_R0, JIT_F0); + jit_retr(j, JIT_R0); + + int (*f)(float) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0); + ASSERT(f(-0.0) == 0); + ASSERT(f(0.5) == 0); + ASSERT(f(-0.5) == 0); + ASSERT(f(1.5) == 1); + ASSERT(f(-1.5) == -1); + ASSERT(f(2.5) == 2); + ASSERT(f(-2.5) == -2); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/truncr_f_l.c b/libguile/lightning/tests/truncr_f_l.c new file mode 100644 index 000000000..af3a1168e --- /dev/null +++ b/libguile/lightning/tests/truncr_f_l.c @@ -0,0 +1,36 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_truncr_f_l(j, JIT_R0, JIT_F0); + jit_retr(j, JIT_R0); + + int64_t (*f)(float) = jit_end(j, NULL); + + ASSERT(f(0.0) == 0); + ASSERT(f(-0.0) == 0); + ASSERT(f(0.5) == 0); + ASSERT(f(-0.5) == 0); + ASSERT(f(1.5) == 1); + ASSERT(f(-1.5) == -1); + ASSERT(f(2.5) == 2); + ASSERT(f(-2.5) == -2); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/xori.c b/libguile/lightning/tests/xori.c new file mode 100644 index 000000000..59859fc29 --- /dev/null +++ b/libguile/lightning/tests/xori.c @@ -0,0 +1,35 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_xori(j, JIT_R0, JIT_R0, 1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t) = ret; + + ASSERT(f(0x7fffffff) == 0x7ffffffe); + ASSERT(f(0x80000000) == 0x80000001); +#if __WORDSIZE == 64 + ASSERT(f(0x7fffffffffffffff) == 0x7ffffffffffffffe); + ASSERT(f(0x8000000000000000) == 0x8000000000000001); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/libguile/lightning/tests/xorr.c b/libguile/lightning/tests/xorr.c new file mode 100644 index 000000000..1be654b09 --- /dev/null +++ b/libguile/lightning/tests/xorr.c @@ -0,0 +1,51 @@ +#include "test.h" + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX, JIT_ARG_ABI_INTMAX }; + jit_arg_t args[2]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R0 }, { .gpr=JIT_R1 }}; + + jit_receive(j, 2, abi, args); + jit_load_args(j, 2, abi, args, regs); + + jit_xorr(j, JIT_R0, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + size_t size = 0; + void* ret = jit_end(j, &size); + + intmax_t (*f)(intmax_t, intmax_t) = ret; + + ASSERT(f(0x7fffffff, 1) == 0x7ffffffe); + ASSERT(f(1, 0x7fffffff) == 0x7ffffffe); + ASSERT(f(0x80000000, 1) == 0x80000001); + ASSERT(f(1, 0x80000000) == 0x80000001); + ASSERT(f(0x7fffffff, 0x80000000) == 0xffffffff); + ASSERT(f(0x80000000, 0x7fffffff) == 0xffffffff); + ASSERT(f(0x7fffffff, 0xffffffff) == 0x80000000); + ASSERT(f(0xffffffff, 0x7fffffff) == 0x80000000); + ASSERT(f(0xffffffff, 0xffffffff) == 0); + ASSERT(f(0x7fffffff, 0) == 0x7fffffff); + ASSERT(f(0, 0x7fffffff) == 0x7fffffff); +#if __WORDSIZE == 64 + ASSERT(f(0x7fffffffffffffff, 1) == 0x7ffffffffffffffe); + ASSERT(f(1, 0x7fffffffffffffff) == 0x7ffffffffffffffe); + ASSERT(f(0x8000000000000000, 1) == 0x8000000000000001); + ASSERT(f(1, 0x8000000000000000) == 0x8000000000000001); + ASSERT(f(0x7fffffffffffffff, 0x8000000000000000) == 0xffffffffffffffff); + ASSERT(f(0x8000000000000000, 0x7fffffffffffffff) == 0xffffffffffffffff); + ASSERT(f(0x7fffffffffffffff, 0xffffffffffffffff) == 0x8000000000000000); + ASSERT(f(0xffffffffffffffff, 0x7fffffffffffffff) == 0x8000000000000000); + ASSERT(f(0xffffffffffffffff, 0xffffffffffffffff) == 0); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} |