immunio 1.2.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|