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
|
** Machine code management.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_mcode_c
|
@@ -204,8 +204,8 @@ static void mcode_protect(jit_State *J, int prot)
|
|
204
204
|
|
205
205
|
/* -- MCode area allocation ----------------------------------------------- */
|
206
206
|
|
207
|
-
#if
|
208
|
-
#define mcode_validptr(p) (
|
207
|
+
#if LJ_64
|
208
|
+
#define mcode_validptr(p) (p)
|
209
209
|
#else
|
210
210
|
#define mcode_validptr(p) ((p) && (uintptr_t)(p) < 0xffff0000)
|
211
211
|
#endif
|
@@ -221,8 +221,8 @@ static void *mcode_alloc(jit_State *J, size_t sz)
|
|
221
221
|
*/
|
222
222
|
#if LJ_TARGET_MIPS
|
223
223
|
/* Use the middle of the 256MB-aligned region. */
|
224
|
-
uintptr_t target = ((uintptr_t)(void *)lj_vm_exit_handler &
|
225
|
-
|
224
|
+
uintptr_t target = ((uintptr_t)(void *)lj_vm_exit_handler &
|
225
|
+
~(uintptr_t)0x0fffffffu) + 0x08000000u;
|
226
226
|
#else
|
227
227
|
uintptr_t target = (uintptr_t)(void *)lj_vm_exit_handler & ~(uintptr_t)0xffff;
|
228
228
|
#endif
|
@@ -230,7 +230,8 @@ static void *mcode_alloc(jit_State *J, size_t sz)
|
|
230
230
|
/* First try a contiguous area below the last one. */
|
231
231
|
uintptr_t hint = J->mcarea ? (uintptr_t)J->mcarea - sz : 0;
|
232
232
|
int i;
|
233
|
-
|
233
|
+
/* Limit probing iterations, depending on the available pool size. */
|
234
|
+
for (i = 0; i < LJ_TARGET_JUMPRANGE; i++) {
|
234
235
|
if (mcode_validptr(hint)) {
|
235
236
|
void *p = mcode_alloc_at(J, hint, sz, MCPROT_GEN);
|
236
237
|
|
@@ -239,11 +240,11 @@ static void *mcode_alloc(jit_State *J, size_t sz)
|
|
239
240
|
return p;
|
240
241
|
if (p) mcode_free(J, p, sz); /* Free badly placed area. */
|
241
242
|
}
|
242
|
-
/* Next try probing pseudo-random addresses. */
|
243
|
+
/* Next try probing 64K-aligned pseudo-random addresses. */
|
243
244
|
do {
|
244
|
-
hint =
|
245
|
-
} while (!(hint + sz < range));
|
246
|
-
hint = target + hint -
|
245
|
+
hint = LJ_PRNG_BITS(J, LJ_TARGET_JUMPRANGE-16) << 16;
|
246
|
+
} while (!(hint + sz < range+range));
|
247
|
+
hint = target + hint - range;
|
247
248
|
}
|
248
249
|
lj_trace_err(J, LJ_TRERR_MCODEAL); /* Give up. OS probably ignores hints? */
|
249
250
|
return NULL;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** Metamethod handling.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
**
|
5
5
|
** 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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** LuaJIT VM tags, values and objects.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
**
|
5
5
|
** 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
|
@@ -843,12 +843,16 @@ static LJ_AINLINE void setlightudV(TValue *o, void *p)
|
|
843
843
|
#endif
|
844
844
|
|
845
845
|
#if LJ_FR2
|
846
|
-
#define
|
846
|
+
#define contptr(f) ((void *)(f))
|
847
|
+
#define setcont(o, f) ((o)->u64 = (uint64_t)(uintptr_t)contptr(f))
|
847
848
|
#elif LJ_64
|
849
|
+
#define contptr(f) \
|
850
|
+
((void *)(uintptr_t)(uint32_t)((intptr_t)(f) - (intptr_t)lj_vm_asm_begin))
|
848
851
|
#define setcont(o, f) \
|
849
852
|
((o)->u64 = (uint64_t)(void *)(f) - (uint64_t)lj_vm_asm_begin)
|
850
853
|
#else
|
851
|
-
#define
|
854
|
+
#define contptr(f) ((void *)(f))
|
855
|
+
#define setcont(o, f) setlightudV((o), contptr(f))
|
852
856
|
#endif
|
853
857
|
|
854
858
|
#define tvchecklive(L, o) \
|
@@ -2,7 +2,7 @@
|
|
2
2
|
** FOLD: Constant Folding, Algebraic Simplifications and Reassociation.
|
3
3
|
** ABCelim: Array Bounds Check Elimination.
|
4
4
|
** CSE: Common-Subexpression Elimination.
|
5
|
-
** Copyright (C) 2005-
|
5
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
6
6
|
*/
|
7
7
|
|
8
8
|
#define lj_opt_fold_c
|
@@ -136,8 +136,8 @@
|
|
136
136
|
/* Some local macros to save typing. Undef'd at the end. */
|
137
137
|
#define IR(ref) (&J->cur.ir[(ref)])
|
138
138
|
#define fins (&J->fold.ins)
|
139
|
-
#define fleft (
|
140
|
-
#define fright (
|
139
|
+
#define fleft (J->fold.left)
|
140
|
+
#define fright (J->fold.right)
|
141
141
|
#define knumleft (ir_knum(fleft)->n)
|
142
142
|
#define knumright (ir_knum(fright)->n)
|
143
143
|
|
@@ -173,8 +173,6 @@ LJFOLD(ADD KNUM KNUM)
|
|
173
173
|
LJFOLD(SUB KNUM KNUM)
|
174
174
|
LJFOLD(MUL KNUM KNUM)
|
175
175
|
LJFOLD(DIV KNUM KNUM)
|
176
|
-
LJFOLD(NEG KNUM KNUM)
|
177
|
-
LJFOLD(ABS KNUM KNUM)
|
178
176
|
LJFOLD(ATAN2 KNUM KNUM)
|
179
177
|
LJFOLD(LDEXP KNUM KNUM)
|
180
178
|
LJFOLD(MIN KNUM KNUM)
|
@@ -187,6 +185,15 @@ LJFOLDF(kfold_numarith)
|
|
187
185
|
return lj_ir_knum(J, y);
|
188
186
|
}
|
189
187
|
|
188
|
+
LJFOLD(NEG KNUM FLOAD)
|
189
|
+
LJFOLD(ABS KNUM FLOAD)
|
190
|
+
LJFOLDF(kfold_numabsneg)
|
191
|
+
{
|
192
|
+
lua_Number a = knumleft;
|
193
|
+
lua_Number y = lj_vm_foldarith(a, a, fins->o - IR_ADD);
|
194
|
+
return lj_ir_knum(J, y);
|
195
|
+
}
|
196
|
+
|
190
197
|
LJFOLD(LDEXP KNUM KINT)
|
191
198
|
LJFOLDF(kfold_ldexp)
|
192
199
|
{
|
@@ -347,6 +354,11 @@ static uint64_t kfold_int64arith(uint64_t k1, uint64_t k2, IROp op)
|
|
347
354
|
case IR_BAND: k1 &= k2; break;
|
348
355
|
case IR_BOR: k1 |= k2; break;
|
349
356
|
case IR_BXOR: k1 ^= k2; break;
|
357
|
+
case IR_BSHL: k1 <<= (k2 & 63); break;
|
358
|
+
case IR_BSHR: k1 = (int32_t)((uint32_t)k1 >> (k2 & 63)); break;
|
359
|
+
case IR_BSAR: k1 >>= (k2 & 63); break;
|
360
|
+
case IR_BROL: k1 = (int32_t)lj_rol((uint32_t)k1, (k2 & 63)); break;
|
361
|
+
case IR_BROR: k1 = (int32_t)lj_ror((uint32_t)k1, (k2 & 63)); break;
|
350
362
|
#endif
|
351
363
|
default: UNUSED(k2); lua_assert(0); break;
|
352
364
|
}
|
@@ -436,14 +448,14 @@ LJFOLDF(kfold_int64comp)
|
|
436
448
|
#if LJ_HASFFI
|
437
449
|
uint64_t a = ir_k64(fleft)->u64, b = ir_k64(fright)->u64;
|
438
450
|
switch ((IROp)fins->o) {
|
439
|
-
case IR_LT: return CONDFOLD(a < b);
|
440
|
-
case IR_GE: return CONDFOLD(a >= b);
|
441
|
-
case IR_LE: return CONDFOLD(a <= b);
|
442
|
-
case IR_GT: return CONDFOLD(a > b);
|
443
|
-
case IR_ULT: return CONDFOLD(
|
444
|
-
case IR_UGE: return CONDFOLD(
|
445
|
-
case IR_ULE: return CONDFOLD(
|
446
|
-
case IR_UGT: return CONDFOLD(
|
451
|
+
case IR_LT: return CONDFOLD((int64_t)a < (int64_t)b);
|
452
|
+
case IR_GE: return CONDFOLD((int64_t)a >= (int64_t)b);
|
453
|
+
case IR_LE: return CONDFOLD((int64_t)a <= (int64_t)b);
|
454
|
+
case IR_GT: return CONDFOLD((int64_t)a > (int64_t)b);
|
455
|
+
case IR_ULT: return CONDFOLD(a < b);
|
456
|
+
case IR_UGE: return CONDFOLD(a >= b);
|
457
|
+
case IR_ULE: return CONDFOLD(a <= b);
|
458
|
+
case IR_UGT: return CONDFOLD(a > b);
|
447
459
|
default: lua_assert(0); return FAILFOLD;
|
448
460
|
}
|
449
461
|
#else
|
@@ -502,7 +514,7 @@ LJFOLDF(kfold_strref_snew)
|
|
502
514
|
PHIBARRIER(ir);
|
503
515
|
fins->op2 = emitir(IRTI(IR_ADD), ir->op2, fins->op2); /* Clobbers fins! */
|
504
516
|
fins->op1 = str;
|
505
|
-
fins->ot = IRT(IR_STRREF,
|
517
|
+
fins->ot = IRT(IR_STRREF, IRT_PGC);
|
506
518
|
return RETRYFOLD;
|
507
519
|
}
|
508
520
|
}
|
@@ -911,13 +923,13 @@ LJFOLDF(shortcut_round)
|
|
911
923
|
return NEXTFOLD;
|
912
924
|
}
|
913
925
|
|
914
|
-
LJFOLD(ABS ABS
|
926
|
+
LJFOLD(ABS ABS FLOAD)
|
915
927
|
LJFOLDF(shortcut_left)
|
916
928
|
{
|
917
929
|
return LEFTFOLD; /* f(g(x)) ==> g(x) */
|
918
930
|
}
|
919
931
|
|
920
|
-
LJFOLD(ABS NEG
|
932
|
+
LJFOLD(ABS NEG FLOAD)
|
921
933
|
LJFOLDF(shortcut_dropleft)
|
922
934
|
{
|
923
935
|
PHIBARRIER(fleft);
|
@@ -998,8 +1010,10 @@ LJFOLDF(simplify_nummuldiv_k)
|
|
998
1010
|
if (n == 1.0) { /* x o 1 ==> x */
|
999
1011
|
return LEFTFOLD;
|
1000
1012
|
} else if (n == -1.0) { /* x o -1 ==> -x */
|
1013
|
+
IRRef op1 = fins->op1;
|
1014
|
+
fins->op2 = (IRRef1)lj_ir_ksimd(J, LJ_KSIMD_NEG); /* Modifies fins. */
|
1015
|
+
fins->op1 = op1;
|
1001
1016
|
fins->o = IR_NEG;
|
1002
|
-
fins->op2 = (IRRef1)lj_ir_knum_neg(J);
|
1003
1017
|
return RETRYFOLD;
|
1004
1018
|
} else if (fins->o == IR_MUL && n == 2.0) { /* x * 2 ==> x + x */
|
1005
1019
|
fins->o = IR_ADD;
|
@@ -1651,6 +1665,14 @@ LJFOLDF(simplify_shiftk_andk)
|
|
1651
1665
|
fins->op2 = (IRRef1)lj_ir_kint(J, k);
|
1652
1666
|
fins->ot = IRTI(IR_BAND);
|
1653
1667
|
return RETRYFOLD;
|
1668
|
+
} else if (irk->o == IR_KINT64) {
|
1669
|
+
uint64_t k = kfold_int64arith(ir_k64(irk)->u64, fright->i, (IROp)fins->o);
|
1670
|
+
IROpT ot = fleft->ot;
|
1671
|
+
fins->op1 = fleft->op1;
|
1672
|
+
fins->op1 = (IRRef1)lj_opt_fold(J);
|
1673
|
+
fins->op2 = (IRRef1)lj_ir_kint64(J, k);
|
1674
|
+
fins->ot = ot;
|
1675
|
+
return RETRYFOLD;
|
1654
1676
|
}
|
1655
1677
|
return NEXTFOLD;
|
1656
1678
|
}
|
@@ -1666,6 +1688,47 @@ LJFOLDF(simplify_andk_shiftk)
|
|
1666
1688
|
return NEXTFOLD;
|
1667
1689
|
}
|
1668
1690
|
|
1691
|
+
LJFOLD(BAND BOR KINT)
|
1692
|
+
LJFOLD(BOR BAND KINT)
|
1693
|
+
LJFOLDF(simplify_andor_k)
|
1694
|
+
{
|
1695
|
+
IRIns *irk = IR(fleft->op2);
|
1696
|
+
PHIBARRIER(fleft);
|
1697
|
+
if (irk->o == IR_KINT) {
|
1698
|
+
int32_t k = kfold_intop(irk->i, fright->i, (IROp)fins->o);
|
1699
|
+
/* (i | k1) & k2 ==> i & k2, if (k1 & k2) == 0. */
|
1700
|
+
/* (i & k1) | k2 ==> i | k2, if (k1 | k2) == -1. */
|
1701
|
+
if (k == (fins->o == IR_BAND ? 0 : -1)) {
|
1702
|
+
fins->op1 = fleft->op1;
|
1703
|
+
return RETRYFOLD;
|
1704
|
+
}
|
1705
|
+
}
|
1706
|
+
return NEXTFOLD;
|
1707
|
+
}
|
1708
|
+
|
1709
|
+
LJFOLD(BAND BOR KINT64)
|
1710
|
+
LJFOLD(BOR BAND KINT64)
|
1711
|
+
LJFOLDF(simplify_andor_k64)
|
1712
|
+
{
|
1713
|
+
#if LJ_HASFFI
|
1714
|
+
IRIns *irk = IR(fleft->op2);
|
1715
|
+
PHIBARRIER(fleft);
|
1716
|
+
if (irk->o == IR_KINT64) {
|
1717
|
+
uint64_t k = kfold_int64arith(ir_k64(irk)->u64,
|
1718
|
+
ir_k64(fright)->u64, (IROp)fins->o);
|
1719
|
+
/* (i | k1) & k2 ==> i & k2, if (k1 & k2) == 0. */
|
1720
|
+
/* (i & k1) | k2 ==> i | k2, if (k1 | k2) == -1. */
|
1721
|
+
if (k == (fins->o == IR_BAND ? (uint64_t)0 : ~(uint64_t)0)) {
|
1722
|
+
fins->op1 = fleft->op1;
|
1723
|
+
return RETRYFOLD;
|
1724
|
+
}
|
1725
|
+
}
|
1726
|
+
return NEXTFOLD;
|
1727
|
+
#else
|
1728
|
+
UNUSED(J); lua_assert(0); return FAILFOLD;
|
1729
|
+
#endif
|
1730
|
+
}
|
1731
|
+
|
1669
1732
|
/* -- Reassociation ------------------------------------------------------- */
|
1670
1733
|
|
1671
1734
|
LJFOLD(ADD ADD KINT)
|
@@ -2393,10 +2456,14 @@ retry:
|
|
2393
2456
|
if (fins->op1 >= J->cur.nk) {
|
2394
2457
|
key += (uint32_t)IR(fins->op1)->o << 10;
|
2395
2458
|
*fleft = *IR(fins->op1);
|
2459
|
+
if (fins->op1 < REF_TRUE)
|
2460
|
+
fleft[1] = IR(fins->op1)[1];
|
2396
2461
|
}
|
2397
2462
|
if (fins->op2 >= J->cur.nk) {
|
2398
2463
|
key += (uint32_t)IR(fins->op2)->o;
|
2399
2464
|
*fright = *IR(fins->op2);
|
2465
|
+
if (fins->op2 < REF_TRUE)
|
2466
|
+
fright[1] = IR(fins->op2)[1];
|
2400
2467
|
} else {
|
2401
2468
|
key += (fins->op2 & 0x3ffu); /* Literal mask. Must include IRCONV_*MASK. */
|
2402
2469
|
}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
** AA: Alias Analysis using high-level semantic disambiguation.
|
4
4
|
** FWD: Load Forwarding (L2L) + Store Forwarding (S2L).
|
5
5
|
** DSE: Dead-Store Elimination.
|
6
|
-
** Copyright (C) 2005-
|
6
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
7
7
|
*/
|
8
8
|
|
9
9
|
#define lj_opt_mem_c
|
@@ -22,8 +22,8 @@
|
|
22
22
|
/* Some local macros to save typing. Undef'd at the end. */
|
23
23
|
#define IR(ref) (&J->cur.ir[(ref)])
|
24
24
|
#define fins (&J->fold.ins)
|
25
|
-
#define fleft (
|
26
|
-
#define fright (
|
25
|
+
#define fleft (J->fold.left)
|
26
|
+
#define fright (J->fold.right)
|
27
27
|
|
28
28
|
/*
|
29
29
|
** Caveat #1: return value is not always a TRef -- only use with tref_ref().
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
** NARROW: Narrowing of numbers to integers (double to int32_t).
|
3
3
|
** STRIPOV: Stripping of overflow checks.
|
4
|
-
** Copyright (C) 2005-
|
4
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
5
5
|
*/
|
6
6
|
|
7
7
|
#define lj_opt_narrow_c
|
@@ -517,18 +517,24 @@ static int numisint(lua_Number n)
|
|
517
517
|
return (n == (lua_Number)lj_num2int(n));
|
518
518
|
}
|
519
519
|
|
520
|
+
/* Convert string to number. Error out for non-numeric string values. */
|
521
|
+
static TRef conv_str_tonum(jit_State *J, TRef tr, TValue *o)
|
522
|
+
{
|
523
|
+
if (tref_isstr(tr)) {
|
524
|
+
tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0);
|
525
|
+
/* Would need an inverted STRTO for this rare and useless case. */
|
526
|
+
if (!lj_strscan_num(strV(o), o)) /* Convert in-place. Value used below. */
|
527
|
+
lj_trace_err(J, LJ_TRERR_BADTYPE); /* Punt if non-numeric. */
|
528
|
+
}
|
529
|
+
return tr;
|
530
|
+
}
|
531
|
+
|
520
532
|
/* Narrowing of arithmetic operations. */
|
521
533
|
TRef lj_opt_narrow_arith(jit_State *J, TRef rb, TRef rc,
|
522
534
|
TValue *vb, TValue *vc, IROp op)
|
523
535
|
{
|
524
|
-
|
525
|
-
|
526
|
-
lj_strscan_num(strV(vb), vb);
|
527
|
-
}
|
528
|
-
if (tref_isstr(rc)) {
|
529
|
-
rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0);
|
530
|
-
lj_strscan_num(strV(vc), vc);
|
531
|
-
}
|
536
|
+
rb = conv_str_tonum(J, rb, vb);
|
537
|
+
rc = conv_str_tonum(J, rc, vc);
|
532
538
|
/* Must not narrow MUL in non-DUALNUM variant, because it loses -0. */
|
533
539
|
if ((op >= IR_ADD && op <= (LJ_DUALNUM ? IR_MUL : IR_SUB)) &&
|
534
540
|
tref_isinteger(rb) && tref_isinteger(rc) &&
|
@@ -543,24 +549,21 @@ TRef lj_opt_narrow_arith(jit_State *J, TRef rb, TRef rc,
|
|
543
549
|
/* Narrowing of unary minus operator. */
|
544
550
|
TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc)
|
545
551
|
{
|
546
|
-
|
547
|
-
rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0);
|
548
|
-
lj_strscan_num(strV(vc), vc);
|
549
|
-
}
|
552
|
+
rc = conv_str_tonum(J, rc, vc);
|
550
553
|
if (tref_isinteger(rc)) {
|
551
554
|
if ((uint32_t)numberVint(vc) != 0x80000000u)
|
552
555
|
return emitir(IRTGI(IR_SUBOV), lj_ir_kint(J, 0), rc);
|
553
556
|
rc = emitir(IRTN(IR_CONV), rc, IRCONV_NUM_INT);
|
554
557
|
}
|
555
|
-
return emitir(IRTN(IR_NEG), rc,
|
558
|
+
return emitir(IRTN(IR_NEG), rc, lj_ir_ksimd(J, LJ_KSIMD_NEG));
|
556
559
|
}
|
557
560
|
|
558
561
|
/* Narrowing of modulo operator. */
|
559
|
-
TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc)
|
562
|
+
TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vb, TValue *vc)
|
560
563
|
{
|
561
564
|
TRef tmp;
|
562
|
-
|
563
|
-
|
565
|
+
rb = conv_str_tonum(J, rb, vb);
|
566
|
+
rc = conv_str_tonum(J, rc, vc);
|
564
567
|
if ((LJ_DUALNUM || (J->flags & JIT_F_OPT_NARROW)) &&
|
565
568
|
tref_isinteger(rb) && tref_isinteger(rc) &&
|
566
569
|
(tvisint(vc) ? intV(vc) != 0 : !tviszero(vc))) {
|
@@ -577,10 +580,11 @@ TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc)
|
|
577
580
|
}
|
578
581
|
|
579
582
|
/* Narrowing of power operator or math.pow. */
|
580
|
-
TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc)
|
583
|
+
TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vb, TValue *vc)
|
581
584
|
{
|
582
|
-
|
583
|
-
|
585
|
+
rb = conv_str_tonum(J, rb, vb);
|
586
|
+
rb = lj_ir_tonum(J, rb); /* Left arg is always treated as an FP number. */
|
587
|
+
rc = conv_str_tonum(J, rc, vc);
|
584
588
|
/* Narrowing must be unconditional to preserve (-x)^i semantics. */
|
585
589
|
if (tvisint(vc) || numisint(numV(vc))) {
|
586
590
|
int checkrange = 0;
|
@@ -591,8 +595,6 @@ TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc)
|
|
591
595
|
checkrange = 1;
|
592
596
|
}
|
593
597
|
if (!tref_isinteger(rc)) {
|
594
|
-
if (tref_isstr(rc))
|
595
|
-
rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0);
|
596
598
|
/* Guarded conversion to integer! */
|
597
599
|
rc = emitir(IRTGI(IR_CONV), rc, IRCONV_INT_NUM|IRCONV_CHECK);
|
598
600
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
** SINK: Allocation Sinking and Store Sinking.
|
3
|
-
** Copyright (C) 2005-
|
3
|
+
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
4
4
|
*/
|
5
5
|
|
6
6
|
#define lj_opt_sink_c
|
@@ -153,10 +153,9 @@ static void sink_remark_phi(jit_State *J)
|
|
153
153
|
remark = 0;
|
154
154
|
for (ir = IR(J->cur.nins-1); ir->o == IR_PHI; ir--) {
|
155
155
|
IRIns *irl = IR(ir->op1), *irr = IR(ir->op2);
|
156
|
-
if (((irl->t.irt ^ irr->t.irt) & IRT_MARK))
|
157
|
-
remark = 1;
|
158
|
-
else if (irl->prev == irr->prev)
|
156
|
+
if (!((irl->t.irt ^ irr->t.irt) & IRT_MARK) && irl->prev == irr->prev)
|
159
157
|
continue;
|
158
|
+
remark |= (~(irl->t.irt & irr->t.irt) & IRT_MARK);
|
160
159
|
irt_setmark(IR(ir->op1)->t);
|
161
160
|
irt_setmark(IR(ir->op2)->t);
|
162
161
|
}
|
@@ -166,8 +165,8 @@ static void sink_remark_phi(jit_State *J)
|
|
166
165
|
/* Sweep instructions and tag sunken allocations and stores. */
|
167
166
|
static void sink_sweep_ins(jit_State *J)
|
168
167
|
{
|
169
|
-
IRIns *ir, *
|
170
|
-
for (ir = IR(J->cur.nins-1) ; ir >=
|
168
|
+
IRIns *ir, *irbase = IR(REF_BASE);
|
169
|
+
for (ir = IR(J->cur.nins-1) ; ir >= irbase; ir--) {
|
171
170
|
switch (ir->o) {
|
172
171
|
case IR_ASTORE: case IR_HSTORE: case IR_FSTORE: case IR_XSTORE: {
|
173
172
|
IRIns *ira = sink_checkalloc(J, ir);
|
@@ -217,6 +216,12 @@ static void sink_sweep_ins(jit_State *J)
|
|
217
216
|
break;
|
218
217
|
}
|
219
218
|
}
|
219
|
+
for (ir = IR(J->cur.nk); ir < irbase; ir++) {
|
220
|
+
irt_clearmark(ir->t);
|
221
|
+
ir->prev = REGSP_INIT;
|
222
|
+
if (irt_is64(ir->t) && ir->o != IR_KNULL)
|
223
|
+
ir++;
|
224
|
+
}
|
220
225
|
}
|
221
226
|
|
222
227
|
/* Allocation sinking and store sinking.
|