immunio 1.2.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -5
- data/ext/immunio/Rakefile +14 -6
- data/lib/immunio/context.rb +2 -0
- data/lib/immunio/plugins/action_view.rb +7 -668
- data/lib/immunio/plugins/action_view/action_view.rb +22 -0
- data/lib/immunio/plugins/action_view/active_support_hash.rb +29 -0
- data/lib/immunio/plugins/action_view/cache_store.rb +24 -0
- data/lib/immunio/plugins/action_view/erubi.rb +38 -0
- data/lib/immunio/plugins/action_view/erubis.rb +39 -0
- data/lib/immunio/plugins/action_view/fragment_caching.rb +29 -0
- data/lib/immunio/plugins/action_view/haml.rb +46 -0
- data/lib/immunio/plugins/action_view/slim.rb +42 -0
- data/lib/immunio/plugins/action_view/template.rb +431 -0
- data/lib/immunio/plugins/action_view/template_rendering.rb +45 -0
- data/lib/immunio/plugins/http_tracker.rb +2 -0
- data/lib/immunio/plugins/io.rb +34 -0
- data/lib/immunio/version.rb +1 -1
- data/lua-hooks/Makefile +36 -9
- data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
- data/lua-hooks/ext/luajit/Makefile +22 -15
- data/lua-hooks/ext/luajit/README +2 -2
- data/lua-hooks/ext/luajit/doc/bluequad-print.css +1 -1
- data/lua-hooks/ext/luajit/doc/bluequad.css +1 -1
- data/lua-hooks/ext/luajit/doc/changes.html +69 -3
- data/lua-hooks/ext/luajit/doc/contact.html +10 -3
- data/lua-hooks/ext/luajit/doc/ext_c_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +3 -4
- data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
- data/lua-hooks/ext/luajit/doc/ext_jit.html +3 -3
- data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
- data/lua-hooks/ext/luajit/doc/extensions.html +47 -20
- data/lua-hooks/ext/luajit/doc/faq.html +2 -2
- data/lua-hooks/ext/luajit/doc/install.html +74 -45
- data/lua-hooks/ext/luajit/doc/luajit.html +5 -5
- data/lua-hooks/ext/luajit/doc/running.html +3 -3
- data/lua-hooks/ext/luajit/doc/status.html +13 -8
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +8 -5
- data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +66 -11
- data/lua-hooks/ext/luajit/dynasm/dasm_mips64.lua +12 -0
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +1 -1
- data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +5 -1
- data/lua-hooks/ext/luajit/dynasm/dynasm.lua +2 -2
- data/lua-hooks/ext/luajit/etc/luajit.1 +1 -1
- data/lua-hooks/ext/luajit/etc/luajit.pc +1 -1
- data/lua-hooks/ext/luajit/src/Makefile +15 -11
- data/lua-hooks/ext/luajit/src/Makefile.dep +16 -16
- data/lua-hooks/ext/luajit/src/host/buildvm.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +9 -4
- data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +2 -2
- data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +14 -3
- data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +27 -3
- data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
- data/lua-hooks/ext/luajit/src/host/genminilua.lua +6 -5
- data/lua-hooks/ext/luajit/src/host/minilua.c +1 -1
- data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/bcsave.lua +8 -8
- data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_arm64.lua +1216 -0
- data/lua-hooks/ext/luajit/src/jit/dis_arm64be.lua +12 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +35 -20
- data/lua-hooks/ext/luajit/src/jit/dis_mips64.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mips64el.lua +17 -0
- data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
- data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +7 -4
- data/lua-hooks/ext/luajit/src/jit/dump.lua +17 -12
- data/lua-hooks/ext/luajit/src/jit/p.lua +3 -2
- data/lua-hooks/ext/luajit/src/jit/v.lua +2 -2
- data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
- data/lua-hooks/ext/luajit/src/lauxlib.h +14 -20
- data/lua-hooks/ext/luajit/src/lib_aux.c +38 -27
- data/lua-hooks/ext/luajit/src/lib_base.c +12 -5
- data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_debug.c +5 -5
- data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -2
- data/lua-hooks/ext/luajit/src/lib_init.c +16 -16
- data/lua-hooks/ext/luajit/src/lib_io.c +6 -7
- data/lua-hooks/ext/luajit/src/lib_jit.c +14 -4
- data/lua-hooks/ext/luajit/src/lib_math.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_os.c +1 -1
- data/lua-hooks/ext/luajit/src/lib_package.c +14 -23
- data/lua-hooks/ext/luajit/src/lib_string.c +1 -5
- data/lua-hooks/ext/luajit/src/lib_table.c +21 -1
- data/lua-hooks/ext/luajit/src/lj.supp +3 -3
- data/lua-hooks/ext/luajit/src/lj_alloc.c +174 -83
- data/lua-hooks/ext/luajit/src/lj_api.c +97 -18
- data/lua-hooks/ext/luajit/src/lj_arch.h +54 -22
- data/lua-hooks/ext/luajit/src/lj_asm.c +172 -53
- data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_asm_arm.h +19 -16
- data/lua-hooks/ext/luajit/src/lj_asm_arm64.h +2022 -0
- data/lua-hooks/ext/luajit/src/lj_asm_mips.h +564 -158
- data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +19 -18
- data/lua-hooks/ext/luajit/src/lj_asm_x86.h +578 -92
- data/lua-hooks/ext/luajit/src/lj_bc.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcdump.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcread.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_bcwrite.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_buf.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_carith.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ccall.c +172 -7
- data/lua-hooks/ext/luajit/src/lj_ccall.h +21 -5
- data/lua-hooks/ext/luajit/src/lj_ccallback.c +71 -17
- data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cconv.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cdata.c +7 -5
- data/lua-hooks/ext/luajit/src/lj_cdata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_clib.c +5 -5
- data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_cparse.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_crecord.c +70 -14
- data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_ctype.h +8 -8
- data/lua-hooks/ext/luajit/src/lj_debug.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_debug.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_def.h +6 -9
- data/lua-hooks/ext/luajit/src/lj_dispatch.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_dispatch.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_emit_arm.h +5 -4
- data/lua-hooks/ext/luajit/src/lj_emit_arm64.h +419 -0
- data/lua-hooks/ext/luajit/src/lj_emit_mips.h +100 -20
- data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +4 -4
- data/lua-hooks/ext/luajit/src/lj_emit_x86.h +116 -25
- data/lua-hooks/ext/luajit/src/lj_err.c +34 -13
- data/lua-hooks/ext/luajit/src/lj_err.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_errmsg.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ff.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ffrecord.c +58 -49
- data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_frame.h +33 -6
- data/lua-hooks/ext/luajit/src/lj_func.c +4 -2
- data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gc.c +16 -7
- data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.c +31 -1
- data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_ir.c +69 -96
- data/lua-hooks/ext/luajit/src/lj_ir.h +29 -18
- data/lua-hooks/ext/luajit/src/lj_ircall.h +24 -30
- data/lua-hooks/ext/luajit/src/lj_iropt.h +9 -9
- data/lua-hooks/ext/luajit/src/lj_jit.h +67 -9
- data/lua-hooks/ext/luajit/src/lj_lex.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lex.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_lib.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_load.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_mcode.c +11 -10
- data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_meta.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_obj.h +7 -3
- data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_fold.c +84 -17
- data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_opt_mem.c +3 -3
- data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +24 -22
- data/lua-hooks/ext/luajit/src/lj_opt_sink.c +11 -6
- data/lua-hooks/ext/luajit/src/lj_opt_split.c +11 -2
- data/lua-hooks/ext/luajit/src/lj_parse.c +9 -7
- data/lua-hooks/ext/luajit/src/lj_parse.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_profile.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_record.c +201 -117
- data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_snap.c +72 -26
- data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_state.c +6 -6
- data/lua-hooks/ext/luajit/src/lj_state.h +2 -2
- data/lua-hooks/ext/luajit/src/lj_str.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_str.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt.c +7 -3
- data/lua-hooks/ext/luajit/src/lj_strfmt.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +4 -3
- data/lua-hooks/ext/luajit/src/lj_strscan.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_strscan.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_tab.c +1 -2
- data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target.h +3 -3
- data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_arm64.h +239 -7
- data/lua-hooks/ext/luajit/src/lj_target_mips.h +111 -22
- data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_target_x86.h +21 -4
- data/lua-hooks/ext/luajit/src/lj_trace.c +63 -18
- data/lua-hooks/ext/luajit/src/lj_trace.h +2 -1
- data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_udata.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vm.h +5 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.c +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmevent.h +1 -1
- data/lua-hooks/ext/luajit/src/lj_vmmath.c +1 -1
- data/lua-hooks/ext/luajit/src/ljamalg.c +1 -1
- data/lua-hooks/ext/luajit/src/lua.h +9 -1
- data/lua-hooks/ext/luajit/src/luaconf.h +3 -7
- data/lua-hooks/ext/luajit/src/luajit.c +69 -54
- data/lua-hooks/ext/luajit/src/luajit.h +4 -4
- data/lua-hooks/ext/luajit/src/lualib.h +1 -1
- data/lua-hooks/ext/luajit/src/msvcbuild.bat +12 -4
- data/lua-hooks/ext/luajit/src/vm_arm.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_arm64.dasc +255 -32
- data/lua-hooks/ext/luajit/src/vm_mips.dasc +26 -23
- data/lua-hooks/ext/luajit/src/vm_mips64.dasc +5062 -0
- data/lua-hooks/ext/luajit/src/vm_ppc.dasc +1 -1
- data/lua-hooks/ext/luajit/src/vm_x64.dasc +24 -25
- data/lua-hooks/ext/luajit/src/vm_x86.dasc +77 -4
- data/lua-hooks/libluahooks.darwin.a +0 -0
- data/lua-hooks/libluahooks.linux.a +0 -0
- data/lua-hooks/options.mk +1 -1
- metadata +37 -77
- data/lua-hooks/ext/all.c +0 -69
- data/lua-hooks/ext/libinjection/COPYING +0 -37
- data/lua-hooks/ext/libinjection/libinjection.h +0 -65
- data/lua-hooks/ext/libinjection/libinjection_html5.c +0 -847
- data/lua-hooks/ext/libinjection/libinjection_html5.h +0 -54
- data/lua-hooks/ext/libinjection/libinjection_sqli.c +0 -2301
- data/lua-hooks/ext/libinjection/libinjection_sqli.h +0 -295
- data/lua-hooks/ext/libinjection/libinjection_sqli_data.h +0 -9349
- data/lua-hooks/ext/libinjection/libinjection_xss.c +0 -531
- data/lua-hooks/ext/libinjection/libinjection_xss.h +0 -21
- data/lua-hooks/ext/libinjection/lualib.c +0 -145
- data/lua-hooks/ext/libinjection/module.mk +0 -5
- data/lua-hooks/ext/lpeg/HISTORY +0 -96
- data/lua-hooks/ext/lpeg/lpcap.c +0 -537
- data/lua-hooks/ext/lpeg/lpcap.h +0 -56
- data/lua-hooks/ext/lpeg/lpcode.c +0 -1014
- data/lua-hooks/ext/lpeg/lpcode.h +0 -40
- data/lua-hooks/ext/lpeg/lpeg-128.gif +0 -0
- data/lua-hooks/ext/lpeg/lpeg.html +0 -1445
- data/lua-hooks/ext/lpeg/lpprint.c +0 -244
- data/lua-hooks/ext/lpeg/lpprint.h +0 -36
- data/lua-hooks/ext/lpeg/lptree.c +0 -1303
- data/lua-hooks/ext/lpeg/lptree.h +0 -82
- data/lua-hooks/ext/lpeg/lptypes.h +0 -149
- data/lua-hooks/ext/lpeg/lpvm.c +0 -364
- data/lua-hooks/ext/lpeg/lpvm.h +0 -58
- data/lua-hooks/ext/lpeg/makefile +0 -55
- data/lua-hooks/ext/lpeg/module.mk +0 -6
- data/lua-hooks/ext/lpeg/re.html +0 -498
- data/lua-hooks/ext/lua-cmsgpack/.gitignore +0 -13
- data/lua-hooks/ext/lua-cmsgpack/CMakeLists.txt +0 -45
- data/lua-hooks/ext/lua-cmsgpack/README.md +0 -115
- data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +0 -970
- data/lua-hooks/ext/lua-cmsgpack/module.mk +0 -2
- data/lua-hooks/ext/lua-cmsgpack/test.lua +0 -570
- data/lua-hooks/ext/lua-snapshot/LICENSE +0 -7
- data/lua-hooks/ext/lua-snapshot/Makefile +0 -12
- data/lua-hooks/ext/lua-snapshot/README.md +0 -18
- data/lua-hooks/ext/lua-snapshot/dump.lua +0 -15
- data/lua-hooks/ext/lua-snapshot/module.mk +0 -2
- data/lua-hooks/ext/lua-snapshot/snapshot.c +0 -462
- data/lua-hooks/ext/luautf8/README.md +0 -152
- data/lua-hooks/ext/luautf8/lutf8lib.c +0 -1274
- data/lua-hooks/ext/luautf8/module.mk +0 -2
- data/lua-hooks/ext/luautf8/unidata.h +0 -3064
- data/lua-hooks/ext/module.mk +0 -15
- data/lua-hooks/ext/modules.h +0 -17
- data/lua-hooks/ext/perf/luacpu.c +0 -114
- data/lua-hooks/ext/perf/lualoadavg.c +0 -40
- data/lua-hooks/ext/perf/luameminfo.c +0 -38
- data/lua-hooks/ext/perf/luaoslib.c +0 -203
- data/lua-hooks/ext/perf/module.mk +0 -5
- data/lua-hooks/ext/sha1/luasha1.c +0 -74
- data/lua-hooks/ext/sha1/module.mk +0 -5
- data/lua-hooks/ext/sha1/sha1.c +0 -145
- data/lua-hooks/ext/sha2/luasha256.c +0 -77
- data/lua-hooks/ext/sha2/module.mk +0 -5
- data/lua-hooks/ext/sha2/sha256.c +0 -196
- data/lua-hooks/ext/sysutils/lua_utils.c +0 -56
- data/lua-hooks/ext/sysutils/module.mk +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** SSA IR (Intermediate Representation) format.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_IR_H
|
|
@@ -220,7 +220,7 @@ IRFLDEF(FLENUM)
|
|
|
220
220
|
|
|
221
221
|
/* SLOAD mode bits, stored in op2. */
|
|
222
222
|
#define IRSLOAD_PARENT 0x01 /* Coalesce with parent trace. */
|
|
223
|
-
#define IRSLOAD_FRAME 0x02 /* Load
|
|
223
|
+
#define IRSLOAD_FRAME 0x02 /* Load 32 bits of ftsz. */
|
|
224
224
|
#define IRSLOAD_TYPECHECK 0x04 /* Needs type check. */
|
|
225
225
|
#define IRSLOAD_CONVERT 0x08 /* Number to integer conversion. */
|
|
226
226
|
#define IRSLOAD_READONLY 0x10 /* Read-only, omit slot store. */
|
|
@@ -294,7 +294,9 @@ LJ_DATA const uint8_t lj_ir_mode[IR__MAX+1];
|
|
|
294
294
|
|
|
295
295
|
/* -- IR instruction types ------------------------------------------------ */
|
|
296
296
|
|
|
297
|
-
|
|
297
|
+
#define IRTSIZE_PGC (LJ_GC64 ? 8 : 4)
|
|
298
|
+
|
|
299
|
+
/* Map of itypes to non-negative numbers and their sizes. ORDER LJ_T.
|
|
298
300
|
** LJ_TUPVAL/LJ_TTRACE never appear in a TValue. Use these itypes for
|
|
299
301
|
** IRT_P32 and IRT_P64, which never escape the IR.
|
|
300
302
|
** The various integers are only used in the IR and can only escape to
|
|
@@ -302,12 +304,13 @@ LJ_DATA const uint8_t lj_ir_mode[IR__MAX+1];
|
|
|
302
304
|
** contiguous and next to IRT_NUM (see the typerange macros below).
|
|
303
305
|
*/
|
|
304
306
|
#define IRTDEF(_) \
|
|
305
|
-
_(NIL, 4) _(FALSE, 4) _(TRUE, 4) _(LIGHTUD, LJ_64 ? 8 : 4)
|
|
306
|
-
_(
|
|
307
|
-
_(
|
|
307
|
+
_(NIL, 4) _(FALSE, 4) _(TRUE, 4) _(LIGHTUD, LJ_64 ? 8 : 4) \
|
|
308
|
+
_(STR, IRTSIZE_PGC) _(P32, 4) _(THREAD, IRTSIZE_PGC) _(PROTO, IRTSIZE_PGC) \
|
|
309
|
+
_(FUNC, IRTSIZE_PGC) _(P64, 8) _(CDATA, IRTSIZE_PGC) _(TAB, IRTSIZE_PGC) \
|
|
310
|
+
_(UDATA, IRTSIZE_PGC) \
|
|
308
311
|
_(FLOAT, 4) _(NUM, 8) _(I8, 1) _(U8, 1) _(I16, 2) _(U16, 2) \
|
|
309
312
|
_(INT, 4) _(U32, 4) _(I64, 8) _(U64, 8) \
|
|
310
|
-
_(SOFTFP, 4) /* There is room for
|
|
313
|
+
_(SOFTFP, 4) /* There is room for 8 more types. */
|
|
311
314
|
|
|
312
315
|
/* IR result type and flags (8 bit). */
|
|
313
316
|
typedef enum {
|
|
@@ -318,9 +321,10 @@ IRTDEF(IRTENUM)
|
|
|
318
321
|
|
|
319
322
|
/* Native pointer type and the corresponding integer type. */
|
|
320
323
|
IRT_PTR = LJ_64 ? IRT_P64 : IRT_P32,
|
|
324
|
+
IRT_PGC = LJ_GC64 ? IRT_P64 : IRT_P32,
|
|
325
|
+
IRT_IGC = LJ_GC64 ? IRT_I64 : IRT_INT,
|
|
321
326
|
IRT_INTP = LJ_64 ? IRT_I64 : IRT_INT,
|
|
322
327
|
IRT_UINTP = LJ_64 ? IRT_U64 : IRT_U32,
|
|
323
|
-
/* TODO_GC64: major changes required for all uses of IRT_P32. */
|
|
324
328
|
|
|
325
329
|
/* Additional flags. */
|
|
326
330
|
IRT_MARK = 0x20, /* Marker for misc. purposes. */
|
|
@@ -408,7 +412,7 @@ static LJ_AINLINE IRType itype2irt(const TValue *tv)
|
|
|
408
412
|
|
|
409
413
|
static LJ_AINLINE uint32_t irt_toitype_(IRType t)
|
|
410
414
|
{
|
|
411
|
-
lua_assert(!LJ_64 || t != IRT_LIGHTUD);
|
|
415
|
+
lua_assert(!LJ_64 || LJ_GC64 || t != IRT_LIGHTUD);
|
|
412
416
|
if (LJ_DUALNUM && t > IRT_NUM) {
|
|
413
417
|
return LJ_TISNUM;
|
|
414
418
|
} else {
|
|
@@ -521,7 +525,9 @@ typedef uint32_t TRef;
|
|
|
521
525
|
** +-------+-------+---+---+---+---+
|
|
522
526
|
** | op1 | op2 | t | o | r | s |
|
|
523
527
|
** +-------+-------+---+---+---+---+
|
|
524
|
-
** | op12/i/
|
|
528
|
+
** | op12/i/gco32 | ot | prev | (alternative fields in union)
|
|
529
|
+
** +-------+-------+---+---+---+---+
|
|
530
|
+
** | TValue/gco64 | (2nd IR slot for 64 bit constants)
|
|
525
531
|
** +---------------+-------+-------+
|
|
526
532
|
** 32 16 16
|
|
527
533
|
**
|
|
@@ -549,22 +555,27 @@ typedef union IRIns {
|
|
|
549
555
|
)
|
|
550
556
|
};
|
|
551
557
|
int32_t i; /* 32 bit signed integer literal (overlaps op12). */
|
|
552
|
-
GCRef gcr; /* GCobj constant (overlaps op12). */
|
|
553
|
-
MRef ptr; /* Pointer constant (overlaps op12). */
|
|
558
|
+
GCRef gcr; /* GCobj constant (overlaps op12 or entire slot). */
|
|
559
|
+
MRef ptr; /* Pointer constant (overlaps op12 or entire slot). */
|
|
560
|
+
TValue tv; /* TValue constant (overlaps entire slot). */
|
|
554
561
|
} IRIns;
|
|
555
562
|
|
|
556
|
-
|
|
557
|
-
#define ir_kgc(ir) check_exp((ir)->o == IR_KGC, gcref((ir)->gcr))
|
|
563
|
+
#define ir_kgc(ir) check_exp((ir)->o == IR_KGC, gcref((ir)[LJ_GC64].gcr))
|
|
558
564
|
#define ir_kstr(ir) (gco2str(ir_kgc((ir))))
|
|
559
565
|
#define ir_ktab(ir) (gco2tab(ir_kgc((ir))))
|
|
560
566
|
#define ir_kfunc(ir) (gco2func(ir_kgc((ir))))
|
|
561
567
|
#define ir_kcdata(ir) (gco2cd(ir_kgc((ir))))
|
|
562
|
-
#define ir_knum(ir) check_exp((ir)->o == IR_KNUM,
|
|
563
|
-
#define ir_kint64(ir) check_exp((ir)->o == IR_KINT64,
|
|
568
|
+
#define ir_knum(ir) check_exp((ir)->o == IR_KNUM, &(ir)[1].tv)
|
|
569
|
+
#define ir_kint64(ir) check_exp((ir)->o == IR_KINT64, &(ir)[1].tv)
|
|
564
570
|
#define ir_k64(ir) \
|
|
565
|
-
check_exp((ir)->o == IR_KNUM || (ir)->o == IR_KINT64
|
|
571
|
+
check_exp((ir)->o == IR_KNUM || (ir)->o == IR_KINT64 || \
|
|
572
|
+
(LJ_GC64 && \
|
|
573
|
+
((ir)->o == IR_KGC || \
|
|
574
|
+
(ir)->o == IR_KPTR || (ir)->o == IR_KKPTR)), \
|
|
575
|
+
&(ir)[1].tv)
|
|
566
576
|
#define ir_kptr(ir) \
|
|
567
|
-
check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR,
|
|
577
|
+
check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR, \
|
|
578
|
+
mref((ir)[LJ_GC64].ptr, void))
|
|
568
579
|
|
|
569
580
|
/* A store or any other op with a non-weak guard has a side-effect. */
|
|
570
581
|
static LJ_AINLINE int ir_sideeff(IRIns *ir)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** IR CALL* instruction definitions.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_IRCALL_H
|
|
@@ -78,13 +78,13 @@ typedef struct CCallInfo {
|
|
|
78
78
|
#define IRCALLCOND_SOFTFP_FFI(x) NULL
|
|
79
79
|
#endif
|
|
80
80
|
|
|
81
|
-
#if LJ_SOFTFP &&
|
|
81
|
+
#if LJ_SOFTFP && LJ_TARGET_MIPS32
|
|
82
82
|
#define IRCALLCOND_SOFTFP_MIPS(x) x
|
|
83
83
|
#else
|
|
84
84
|
#define IRCALLCOND_SOFTFP_MIPS(x) NULL
|
|
85
85
|
#endif
|
|
86
86
|
|
|
87
|
-
#define LJ_NEED_FP64 (LJ_TARGET_ARM || LJ_TARGET_PPC ||
|
|
87
|
+
#define LJ_NEED_FP64 (LJ_TARGET_ARM || LJ_TARGET_PPC || LJ_TARGET_MIPS32)
|
|
88
88
|
|
|
89
89
|
#if LJ_HASFFI && (LJ_SOFTFP || LJ_NEED_FP64)
|
|
90
90
|
#define IRCALLCOND_FP64_FFI(x) x
|
|
@@ -104,12 +104,6 @@ typedef struct CCallInfo {
|
|
|
104
104
|
#define IRCALLCOND_FFI32(x) NULL
|
|
105
105
|
#endif
|
|
106
106
|
|
|
107
|
-
#if LJ_TARGET_X86
|
|
108
|
-
#define CCI_RANDFPR 0 /* Clang on OSX/x86 is overzealous. */
|
|
109
|
-
#else
|
|
110
|
-
#define CCI_RANDFPR CCI_NOFPRCLOBBER
|
|
111
|
-
#endif
|
|
112
|
-
|
|
113
107
|
#if LJ_SOFTFP
|
|
114
108
|
#define XA_FP CCI_XA
|
|
115
109
|
#define XA2_FP (CCI_XA+CCI_XA)
|
|
@@ -129,40 +123,40 @@ typedef struct CCallInfo {
|
|
|
129
123
|
/* Function definitions for CALL* instructions. */
|
|
130
124
|
#define IRCALLDEF(_) \
|
|
131
125
|
_(ANY, lj_str_cmp, 2, FN, INT, CCI_NOFPRCLOBBER) \
|
|
132
|
-
_(ANY, lj_str_find, 4, N,
|
|
126
|
+
_(ANY, lj_str_find, 4, N, PGC, 0) \
|
|
133
127
|
_(ANY, lj_str_new, 3, S, STR, CCI_L) \
|
|
134
128
|
_(ANY, lj_strscan_num, 2, FN, INT, 0) \
|
|
135
129
|
_(ANY, lj_strfmt_int, 2, FN, STR, CCI_L) \
|
|
136
130
|
_(ANY, lj_strfmt_num, 2, FN, STR, CCI_L) \
|
|
137
131
|
_(ANY, lj_strfmt_char, 2, FN, STR, CCI_L) \
|
|
138
|
-
_(ANY, lj_strfmt_putint, 2, FL,
|
|
139
|
-
_(ANY, lj_strfmt_putnum, 2, FL,
|
|
140
|
-
_(ANY, lj_strfmt_putquoted, 2, FL,
|
|
141
|
-
_(ANY, lj_strfmt_putfxint, 3, L,
|
|
142
|
-
_(ANY, lj_strfmt_putfnum_int, 3, L,
|
|
143
|
-
_(ANY, lj_strfmt_putfnum_uint, 3, L,
|
|
144
|
-
_(ANY, lj_strfmt_putfnum, 3, L,
|
|
145
|
-
_(ANY, lj_strfmt_putfstr, 3, L,
|
|
146
|
-
_(ANY, lj_strfmt_putfchar, 3, L,
|
|
147
|
-
_(ANY, lj_buf_putmem, 3, S,
|
|
148
|
-
_(ANY, lj_buf_putstr, 2, FL,
|
|
149
|
-
_(ANY, lj_buf_putchar, 2, FL,
|
|
150
|
-
_(ANY, lj_buf_putstr_reverse, 2, FL,
|
|
151
|
-
_(ANY, lj_buf_putstr_lower, 2, FL,
|
|
152
|
-
_(ANY, lj_buf_putstr_upper, 2, FL,
|
|
153
|
-
_(ANY, lj_buf_putstr_rep, 3, L,
|
|
154
|
-
_(ANY, lj_buf_puttab, 5, L,
|
|
132
|
+
_(ANY, lj_strfmt_putint, 2, FL, PGC, 0) \
|
|
133
|
+
_(ANY, lj_strfmt_putnum, 2, FL, PGC, 0) \
|
|
134
|
+
_(ANY, lj_strfmt_putquoted, 2, FL, PGC, 0) \
|
|
135
|
+
_(ANY, lj_strfmt_putfxint, 3, L, PGC, XA_64) \
|
|
136
|
+
_(ANY, lj_strfmt_putfnum_int, 3, L, PGC, XA_FP) \
|
|
137
|
+
_(ANY, lj_strfmt_putfnum_uint, 3, L, PGC, XA_FP) \
|
|
138
|
+
_(ANY, lj_strfmt_putfnum, 3, L, PGC, XA_FP) \
|
|
139
|
+
_(ANY, lj_strfmt_putfstr, 3, L, PGC, 0) \
|
|
140
|
+
_(ANY, lj_strfmt_putfchar, 3, L, PGC, 0) \
|
|
141
|
+
_(ANY, lj_buf_putmem, 3, S, PGC, 0) \
|
|
142
|
+
_(ANY, lj_buf_putstr, 2, FL, PGC, 0) \
|
|
143
|
+
_(ANY, lj_buf_putchar, 2, FL, PGC, 0) \
|
|
144
|
+
_(ANY, lj_buf_putstr_reverse, 2, FL, PGC, 0) \
|
|
145
|
+
_(ANY, lj_buf_putstr_lower, 2, FL, PGC, 0) \
|
|
146
|
+
_(ANY, lj_buf_putstr_upper, 2, FL, PGC, 0) \
|
|
147
|
+
_(ANY, lj_buf_putstr_rep, 3, L, PGC, 0) \
|
|
148
|
+
_(ANY, lj_buf_puttab, 5, L, PGC, 0) \
|
|
155
149
|
_(ANY, lj_buf_tostr, 1, FL, STR, 0) \
|
|
156
150
|
_(ANY, lj_tab_new_ah, 3, A, TAB, CCI_L) \
|
|
157
151
|
_(ANY, lj_tab_new1, 2, FS, TAB, CCI_L) \
|
|
158
152
|
_(ANY, lj_tab_dup, 2, FS, TAB, CCI_L) \
|
|
159
153
|
_(ANY, lj_tab_clear, 1, FS, NIL, 0) \
|
|
160
|
-
_(ANY, lj_tab_newkey, 3, S,
|
|
154
|
+
_(ANY, lj_tab_newkey, 3, S, PGC, CCI_L) \
|
|
161
155
|
_(ANY, lj_tab_len, 1, FL, INT, 0) \
|
|
162
156
|
_(ANY, lj_gc_step_jit, 2, FS, NIL, CCI_L) \
|
|
163
157
|
_(ANY, lj_gc_barrieruv, 2, FS, NIL, 0) \
|
|
164
|
-
_(ANY, lj_mem_newgco, 2, FS,
|
|
165
|
-
_(ANY, lj_math_random_step, 1, FS, NUM, CCI_CASTU64
|
|
158
|
+
_(ANY, lj_mem_newgco, 2, FS, PGC, CCI_L) \
|
|
159
|
+
_(ANY, lj_math_random_step, 1, FS, NUM, CCI_CASTU64) \
|
|
166
160
|
_(ANY, lj_vm_modi, 2, FN, INT, 0) \
|
|
167
161
|
_(ANY, sinh, 1, N, NUM, XA_FP) \
|
|
168
162
|
_(ANY, cosh, 1, N, NUM, XA_FP) \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Common header for IR emitter and optimizations.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_IROPT_H
|
|
@@ -36,12 +36,11 @@ static LJ_AINLINE IRRef lj_ir_nextins(jit_State *J)
|
|
|
36
36
|
return ref;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
LJ_FUNC TRef lj_ir_ggfload(jit_State *J, IRType t, uintptr_t ofs);
|
|
40
|
+
|
|
39
41
|
/* Interning of constants. */
|
|
40
42
|
LJ_FUNC TRef LJ_FASTCALL lj_ir_kint(jit_State *J, int32_t k);
|
|
41
|
-
LJ_FUNC
|
|
42
|
-
LJ_FUNC TRef lj_ir_k64(jit_State *J, IROp op, cTValue *tv);
|
|
43
|
-
LJ_FUNC TValue *lj_ir_k64_reserve(jit_State *J);
|
|
44
|
-
LJ_FUNC cTValue *lj_ir_k64_find(jit_State *J, uint64_t u64);
|
|
43
|
+
LJ_FUNC TRef lj_ir_k64(jit_State *J, IROp op, uint64_t u64);
|
|
45
44
|
LJ_FUNC TRef lj_ir_knum_u64(jit_State *J, uint64_t u64);
|
|
46
45
|
LJ_FUNC TRef lj_ir_knumint(jit_State *J, lua_Number n);
|
|
47
46
|
LJ_FUNC TRef lj_ir_kint64(jit_State *J, uint64_t u64);
|
|
@@ -49,6 +48,7 @@ LJ_FUNC TRef lj_ir_kgc(jit_State *J, GCobj *o, IRType t);
|
|
|
49
48
|
LJ_FUNC TRef lj_ir_kptr_(jit_State *J, IROp op, void *ptr);
|
|
50
49
|
LJ_FUNC TRef lj_ir_knull(jit_State *J, IRType t);
|
|
51
50
|
LJ_FUNC TRef lj_ir_kslot(jit_State *J, TRef key, IRRef slot);
|
|
51
|
+
LJ_FUNC TRef lj_ir_ktrace(jit_State *J);
|
|
52
52
|
|
|
53
53
|
#if LJ_64
|
|
54
54
|
#define lj_ir_kintp(J, k) lj_ir_kint64(J, (uint64_t)(k))
|
|
@@ -75,8 +75,8 @@ static LJ_AINLINE TRef lj_ir_knum(jit_State *J, lua_Number n)
|
|
|
75
75
|
#define lj_ir_knum_tobit(J) lj_ir_knum_u64(J, U64x(43380000,00000000))
|
|
76
76
|
|
|
77
77
|
/* Special 128 bit SIMD constants. */
|
|
78
|
-
#define
|
|
79
|
-
|
|
78
|
+
#define lj_ir_ksimd(J, idx) \
|
|
79
|
+
lj_ir_ggfload(J, IRT_NUM, (uintptr_t)LJ_KSIMD(J, idx) - (uintptr_t)J2GG(J))
|
|
80
80
|
|
|
81
81
|
/* Access to constants. */
|
|
82
82
|
LJ_FUNC void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir);
|
|
@@ -143,8 +143,8 @@ LJ_FUNC TRef LJ_FASTCALL lj_opt_narrow_cindex(jit_State *J, TRef key);
|
|
|
143
143
|
LJ_FUNC TRef lj_opt_narrow_arith(jit_State *J, TRef rb, TRef rc,
|
|
144
144
|
TValue *vb, TValue *vc, IROp op);
|
|
145
145
|
LJ_FUNC TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc);
|
|
146
|
-
LJ_FUNC TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc);
|
|
147
|
-
LJ_FUNC TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc);
|
|
146
|
+
LJ_FUNC TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vb, TValue *vc);
|
|
147
|
+
LJ_FUNC TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vb, TValue *vc);
|
|
148
148
|
LJ_FUNC IRType lj_opt_narrow_forl(jit_State *J, cTValue *forbase);
|
|
149
149
|
|
|
150
150
|
/* Optimization passes. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Common definitions for the JIT compiler.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
#ifndef _LJ_JIT_H
|
|
@@ -19,10 +19,11 @@
|
|
|
19
19
|
#define JIT_F_SSE4_1 0x00000040
|
|
20
20
|
#define JIT_F_PREFER_IMUL 0x00000080
|
|
21
21
|
#define JIT_F_LEA_AGU 0x00000100
|
|
22
|
+
#define JIT_F_BMI2 0x00000200
|
|
22
23
|
|
|
23
24
|
/* Names for the CPU-specific flags. Must match the order above. */
|
|
24
25
|
#define JIT_F_CPU_FIRST JIT_F_SSE2
|
|
25
|
-
#define JIT_F_CPUSTRING "\4SSE2\4SSE3\6SSE4.1\3AMD\4ATOM"
|
|
26
|
+
#define JIT_F_CPUSTRING "\4SSE2\4SSE3\6SSE4.1\3AMD\4ATOM\4BMI2"
|
|
26
27
|
#elif LJ_TARGET_ARM
|
|
27
28
|
#define JIT_F_ARMV6_ 0x00000010
|
|
28
29
|
#define JIT_F_ARMV6T2_ 0x00000020
|
|
@@ -45,12 +46,16 @@
|
|
|
45
46
|
#define JIT_F_CPU_FIRST JIT_F_SQRT
|
|
46
47
|
#define JIT_F_CPUSTRING "\4SQRT\5ROUND"
|
|
47
48
|
#elif LJ_TARGET_MIPS
|
|
48
|
-
#define
|
|
49
|
+
#define JIT_F_MIPSXXR2 0x00000010
|
|
49
50
|
|
|
50
51
|
/* Names for the CPU-specific flags. Must match the order above. */
|
|
51
|
-
#define JIT_F_CPU_FIRST
|
|
52
|
+
#define JIT_F_CPU_FIRST JIT_F_MIPSXXR2
|
|
53
|
+
#if LJ_TARGET_MIPS32
|
|
52
54
|
#define JIT_F_CPUSTRING "\010MIPS32R2"
|
|
53
55
|
#else
|
|
56
|
+
#define JIT_F_CPUSTRING "\010MIPS64R2"
|
|
57
|
+
#endif
|
|
58
|
+
#else
|
|
54
59
|
#define JIT_F_CPU_FIRST 0
|
|
55
60
|
#define JIT_F_CPUSTRING ""
|
|
56
61
|
#endif
|
|
@@ -178,14 +183,26 @@ LJ_STATIC_ASSERT(SNAP_CONT == TREF_CONT);
|
|
|
178
183
|
#define SNAP(slot, flags, ref) (((SnapEntry)(slot) << 24) + (flags) + (ref))
|
|
179
184
|
#define SNAP_TR(slot, tr) \
|
|
180
185
|
(((SnapEntry)(slot) << 24) + ((tr) & (TREF_CONT|TREF_FRAME|TREF_REFMASK)))
|
|
186
|
+
#if !LJ_FR2
|
|
181
187
|
#define SNAP_MKPC(pc) ((SnapEntry)u32ptr(pc))
|
|
188
|
+
#endif
|
|
182
189
|
#define SNAP_MKFTSZ(ftsz) ((SnapEntry)(ftsz))
|
|
183
190
|
#define snap_ref(sn) ((sn) & 0xffff)
|
|
184
191
|
#define snap_slot(sn) ((BCReg)((sn) >> 24))
|
|
185
192
|
#define snap_isframe(sn) ((sn) & SNAP_FRAME)
|
|
186
|
-
#define snap_pc(sn) ((const BCIns *)(uintptr_t)(sn))
|
|
187
193
|
#define snap_setref(sn, ref) (((sn) & (0xffff0000&~SNAP_NORESTORE)) | (ref))
|
|
188
194
|
|
|
195
|
+
static LJ_AINLINE const BCIns *snap_pc(SnapEntry *sn)
|
|
196
|
+
{
|
|
197
|
+
#if LJ_FR2
|
|
198
|
+
uint64_t pcbase;
|
|
199
|
+
memcpy(&pcbase, sn, sizeof(uint64_t));
|
|
200
|
+
return (const BCIns *)(pcbase >> 8);
|
|
201
|
+
#else
|
|
202
|
+
return (const BCIns *)(uintptr_t)*sn;
|
|
203
|
+
#endif
|
|
204
|
+
}
|
|
205
|
+
|
|
189
206
|
/* Snapshot and exit numbers. */
|
|
190
207
|
typedef uint32_t SnapNo;
|
|
191
208
|
typedef uint32_t ExitNo;
|
|
@@ -307,6 +324,45 @@ enum {
|
|
|
307
324
|
LJ_KSIMD__MAX
|
|
308
325
|
};
|
|
309
326
|
|
|
327
|
+
enum {
|
|
328
|
+
#if LJ_TARGET_X86ORX64
|
|
329
|
+
LJ_K64_TOBIT, /* 2^52 + 2^51 */
|
|
330
|
+
LJ_K64_2P64, /* 2^64 */
|
|
331
|
+
LJ_K64_M2P64, /* -2^64 */
|
|
332
|
+
#if LJ_32
|
|
333
|
+
LJ_K64_M2P64_31, /* -2^64 or -2^31 */
|
|
334
|
+
#else
|
|
335
|
+
LJ_K64_M2P64_31 = LJ_K64_M2P64,
|
|
336
|
+
#endif
|
|
337
|
+
#endif
|
|
338
|
+
#if LJ_TARGET_MIPS
|
|
339
|
+
LJ_K64_2P31, /* 2^31 */
|
|
340
|
+
#if LJ_64
|
|
341
|
+
LJ_K64_2P63, /* 2^63 */
|
|
342
|
+
LJ_K64_M2P64, /* -2^64 */
|
|
343
|
+
#endif
|
|
344
|
+
#endif
|
|
345
|
+
LJ_K64__MAX,
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
enum {
|
|
349
|
+
#if LJ_TARGET_X86ORX64
|
|
350
|
+
LJ_K32_M2P64_31, /* -2^64 or -2^31 */
|
|
351
|
+
#endif
|
|
352
|
+
#if LJ_TARGET_PPC
|
|
353
|
+
LJ_K32_2P52_2P31, /* 2^52 + 2^31 */
|
|
354
|
+
LJ_K32_2P52, /* 2^52 */
|
|
355
|
+
#endif
|
|
356
|
+
#if LJ_TARGET_PPC || LJ_TARGET_MIPS
|
|
357
|
+
LJ_K32_2P31, /* 2^31 */
|
|
358
|
+
#endif
|
|
359
|
+
#if LJ_TARGET_MIPS64
|
|
360
|
+
LJ_K32_2P63, /* 2^63 */
|
|
361
|
+
LJ_K32_M2P64, /* -2^64 */
|
|
362
|
+
#endif
|
|
363
|
+
LJ_K32__MAX
|
|
364
|
+
};
|
|
365
|
+
|
|
310
366
|
/* Get 16 byte aligned pointer to SIMD constant. */
|
|
311
367
|
#define LJ_KSIMD(J, n) \
|
|
312
368
|
((TValue *)(((intptr_t)&J->ksimd[2*(n)] + 15) & ~(intptr_t)15))
|
|
@@ -323,13 +379,14 @@ enum {
|
|
|
323
379
|
/* Fold state is used to fold instructions on-the-fly. */
|
|
324
380
|
typedef struct FoldState {
|
|
325
381
|
IRIns ins; /* Currently emitted instruction. */
|
|
326
|
-
IRIns left;
|
|
327
|
-
IRIns right;
|
|
382
|
+
IRIns left[2]; /* Instruction referenced by left operand. */
|
|
383
|
+
IRIns right[2]; /* Instruction referenced by right operand. */
|
|
328
384
|
} FoldState;
|
|
329
385
|
|
|
330
386
|
/* JIT compiler state. */
|
|
331
387
|
typedef struct jit_State {
|
|
332
388
|
GCtrace cur; /* Current trace. */
|
|
389
|
+
GCtrace *curfinal; /* Final address of current trace (set during asm). */
|
|
333
390
|
|
|
334
391
|
lua_State *L; /* Current Lua state. */
|
|
335
392
|
const BCIns *pc; /* Current PC. */
|
|
@@ -359,8 +416,9 @@ typedef struct jit_State {
|
|
|
359
416
|
int32_t framedepth; /* Current frame depth. */
|
|
360
417
|
int32_t retdepth; /* Return frame depth (count of RETF). */
|
|
361
418
|
|
|
362
|
-
MRef k64; /* Pointer to chained array of 64 bit constants. */
|
|
363
419
|
TValue ksimd[LJ_KSIMD__MAX*2+1]; /* 16 byte aligned SIMD constants. */
|
|
420
|
+
TValue k64[LJ_K64__MAX]; /* Common 8 byte constants used by backends. */
|
|
421
|
+
uint32_t k32[LJ_K32__MAX]; /* Ditto for 4 byte constants. */
|
|
364
422
|
|
|
365
423
|
IRIns *irbuf; /* Temp. IR instruction buffer. Biased with REF_BIAS. */
|
|
366
424
|
IRRef irtoplim; /* Upper limit of instuction buffer (biased). */
|
|
@@ -381,7 +439,7 @@ typedef struct jit_State {
|
|
|
381
439
|
GCRef *trace; /* Array of traces. */
|
|
382
440
|
TraceNo freetrace; /* Start of scan for next free trace. */
|
|
383
441
|
MSize sizetrace; /* Size of trace array. */
|
|
384
|
-
|
|
442
|
+
IRRef1 ktrace; /* Reference to KGC with GCtrace. */
|
|
385
443
|
|
|
386
444
|
IRRef1 chain[IR__MAX]; /* IR instruction skip-list chain anchors. */
|
|
387
445
|
TRef slot[LJ_MAX_JSLOTS+LJ_STACK_EXTRA]; /* Stack slot map. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Lexical analyzer.
|
|
3
|
-
** Copyright (C) 2005-
|
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
|
4
4
|
**
|
|
5
5
|
** Major portions taken verbatim or adapted from the Lua interpreter.
|
|
6
6
|
** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
|