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
|
** Definitions for target CPU.
|
|
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_TARGET_H
|
|
@@ -55,7 +55,7 @@ typedef uint32_t RegSP;
|
|
|
55
55
|
/* Bitset for registers. 32 registers suffice for most architectures.
|
|
56
56
|
** Note that one set holds bits for both GPRs and FPRs.
|
|
57
57
|
*/
|
|
58
|
-
#if LJ_TARGET_PPC || LJ_TARGET_MIPS
|
|
58
|
+
#if LJ_TARGET_PPC || LJ_TARGET_MIPS || LJ_TARGET_ARM64
|
|
59
59
|
typedef uint64_t RegSet;
|
|
60
60
|
#else
|
|
61
61
|
typedef uint32_t RegSet;
|
|
@@ -69,7 +69,7 @@ typedef uint32_t RegSet;
|
|
|
69
69
|
#define rset_set(rs, r) (rs |= RID2RSET(r))
|
|
70
70
|
#define rset_clear(rs, r) (rs &= ~RID2RSET(r))
|
|
71
71
|
#define rset_exclude(rs, r) (rs & ~RID2RSET(r))
|
|
72
|
-
#if LJ_TARGET_PPC || LJ_TARGET_MIPS
|
|
72
|
+
#if LJ_TARGET_PPC || LJ_TARGET_MIPS || LJ_TARGET_ARM64
|
|
73
73
|
#define rset_picktop(rs) ((Reg)(__builtin_clzll(rs)^63))
|
|
74
74
|
#define rset_pickbot(rs) ((Reg)__builtin_ctzll(rs))
|
|
75
75
|
#else
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Definitions for ARM64 CPUs.
|
|
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_TARGET_ARM64_H
|
|
@@ -55,7 +55,8 @@ enum {
|
|
|
55
55
|
|
|
56
56
|
/* Make use of all registers, except for x18, fp, lr and sp. */
|
|
57
57
|
#define RSET_FIXED \
|
|
58
|
-
(RID2RSET(RID_X18)|RID2RSET(RID_FP)|RID2RSET(RID_LR)|RID2RSET(RID_SP)
|
|
58
|
+
(RID2RSET(RID_X18)|RID2RSET(RID_FP)|RID2RSET(RID_LR)|RID2RSET(RID_SP)|\
|
|
59
|
+
RID2RSET(RID_GL))
|
|
59
60
|
#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR) - RSET_FIXED)
|
|
60
61
|
#define RSET_FPR RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR)
|
|
61
62
|
#define RSET_ALL (RSET_GPR|RSET_FPR)
|
|
@@ -73,25 +74,256 @@ enum {
|
|
|
73
74
|
#define REGARG_LASTFPR RID_D7
|
|
74
75
|
#define REGARG_NUMFPR 8
|
|
75
76
|
|
|
77
|
+
/* -- Spill slots --------------------------------------------------------- */
|
|
78
|
+
|
|
79
|
+
/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs.
|
|
80
|
+
**
|
|
81
|
+
** SPS_FIXED: Available fixed spill slots in interpreter frame.
|
|
82
|
+
** This definition must match with the vm_arm64.dasc file.
|
|
83
|
+
** Pre-allocate some slots to avoid sp adjust in every root trace.
|
|
84
|
+
**
|
|
85
|
+
** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots.
|
|
86
|
+
*/
|
|
87
|
+
#define SPS_FIXED 4
|
|
88
|
+
#define SPS_FIRST 2
|
|
89
|
+
|
|
90
|
+
#define SPOFS_TMP 0
|
|
91
|
+
|
|
92
|
+
#define sps_scale(slot) (4 * (int32_t)(slot))
|
|
93
|
+
#define sps_align(slot) (((slot) - SPS_FIXED + 3) & ~3)
|
|
94
|
+
|
|
95
|
+
/* -- Exit state ---------------------------------------------------------- */
|
|
96
|
+
|
|
97
|
+
/* This definition must match with the *.dasc file(s). */
|
|
98
|
+
typedef struct {
|
|
99
|
+
lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */
|
|
100
|
+
intptr_t gpr[RID_NUM_GPR]; /* General-purpose registers. */
|
|
101
|
+
int32_t spill[256]; /* Spill slots. */
|
|
102
|
+
} ExitState;
|
|
103
|
+
|
|
104
|
+
/* Highest exit + 1 indicates stack check. */
|
|
105
|
+
#define EXITSTATE_CHECKEXIT 1
|
|
106
|
+
|
|
107
|
+
/* Return the address of a per-trace exit stub. */
|
|
108
|
+
static LJ_AINLINE uint32_t *exitstub_trace_addr_(uint32_t *p, uint32_t exitno)
|
|
109
|
+
{
|
|
110
|
+
while (*p == (LJ_LE ? 0xd503201f : 0x1f2003d5)) p++; /* Skip A64I_NOP. */
|
|
111
|
+
return p + 3 + exitno;
|
|
112
|
+
}
|
|
113
|
+
/* Avoid dependence on lj_jit.h if only including lj_target.h. */
|
|
114
|
+
#define exitstub_trace_addr(T, exitno) \
|
|
115
|
+
exitstub_trace_addr_((MCode *)((char *)(T)->mcode + (T)->szmcode), (exitno))
|
|
116
|
+
|
|
76
117
|
/* -- Instructions -------------------------------------------------------- */
|
|
77
118
|
|
|
119
|
+
/* ARM64 instructions are always little-endian. Swap for ARM64BE. */
|
|
120
|
+
#if LJ_BE
|
|
121
|
+
#define A64I_LE(x) (lj_bswap(x))
|
|
122
|
+
#else
|
|
123
|
+
#define A64I_LE(x) (x)
|
|
124
|
+
#endif
|
|
125
|
+
|
|
78
126
|
/* Instruction fields. */
|
|
79
127
|
#define A64F_D(r) (r)
|
|
80
|
-
#define A64F_N(r)
|
|
81
|
-
#define A64F_A(r)
|
|
82
|
-
#define A64F_M(r)
|
|
128
|
+
#define A64F_N(r) ((r) << 5)
|
|
129
|
+
#define A64F_A(r) ((r) << 10)
|
|
130
|
+
#define A64F_M(r) ((r) << 16)
|
|
131
|
+
#define A64F_IMMS(x) ((x) << 10)
|
|
132
|
+
#define A64F_IMMR(x) ((x) << 16)
|
|
83
133
|
#define A64F_U16(x) ((x) << 5)
|
|
134
|
+
#define A64F_U12(x) ((x) << 10)
|
|
84
135
|
#define A64F_S26(x) (x)
|
|
85
|
-
#define A64F_S19(x) ((x) << 5)
|
|
136
|
+
#define A64F_S19(x) (((uint32_t)(x) & 0x7ffffu) << 5)
|
|
137
|
+
#define A64F_S14(x) ((x) << 5)
|
|
138
|
+
#define A64F_S9(x) ((x) << 12)
|
|
139
|
+
#define A64F_BIT(x) ((x) << 19)
|
|
140
|
+
#define A64F_SH(sh, x) (((sh) << 22) | ((x) << 10))
|
|
141
|
+
#define A64F_EX(ex) (A64I_EX | ((ex) << 13))
|
|
142
|
+
#define A64F_EXSH(ex,x) (A64I_EX | ((ex) << 13) | ((x) << 10))
|
|
143
|
+
#define A64F_FP8(x) ((x) << 13)
|
|
144
|
+
#define A64F_CC(cc) ((cc) << 12)
|
|
145
|
+
#define A64F_LSL16(x) (((x) / 16) << 21)
|
|
146
|
+
#define A64F_BSH(sh) ((sh) << 10)
|
|
86
147
|
|
|
87
148
|
typedef enum A64Ins {
|
|
149
|
+
A64I_S = 0x20000000,
|
|
150
|
+
A64I_X = 0x80000000,
|
|
151
|
+
A64I_EX = 0x00200000,
|
|
152
|
+
A64I_ON = 0x00200000,
|
|
153
|
+
A64I_K12 = 0x1a000000,
|
|
154
|
+
A64I_K13 = 0x18000000,
|
|
155
|
+
A64I_LS_U = 0x01000000,
|
|
156
|
+
A64I_LS_S = 0x00800000,
|
|
157
|
+
A64I_LS_R = 0x01200800,
|
|
158
|
+
A64I_LS_SH = 0x00001000,
|
|
159
|
+
A64I_LS_UXTWx = 0x00004000,
|
|
160
|
+
A64I_LS_SXTWx = 0x0000c000,
|
|
161
|
+
A64I_LS_SXTXx = 0x0000e000,
|
|
162
|
+
A64I_LS_LSLx = 0x00006000,
|
|
163
|
+
|
|
164
|
+
A64I_ADDw = 0x0b000000,
|
|
165
|
+
A64I_ADDx = 0x8b000000,
|
|
166
|
+
A64I_ADDSw = 0x2b000000,
|
|
167
|
+
A64I_ADDSx = 0xab000000,
|
|
168
|
+
A64I_NEGw = 0x4b0003e0,
|
|
169
|
+
A64I_NEGx = 0xcb0003e0,
|
|
170
|
+
A64I_SUBw = 0x4b000000,
|
|
171
|
+
A64I_SUBx = 0xcb000000,
|
|
172
|
+
A64I_SUBSw = 0x6b000000,
|
|
173
|
+
A64I_SUBSx = 0xeb000000,
|
|
174
|
+
|
|
175
|
+
A64I_MULw = 0x1b007c00,
|
|
176
|
+
A64I_MULx = 0x9b007c00,
|
|
177
|
+
A64I_SMULL = 0x9b207c00,
|
|
178
|
+
|
|
179
|
+
A64I_ANDw = 0x0a000000,
|
|
180
|
+
A64I_ANDx = 0x8a000000,
|
|
181
|
+
A64I_ANDSw = 0x6a000000,
|
|
182
|
+
A64I_ANDSx = 0xea000000,
|
|
183
|
+
A64I_EORw = 0x4a000000,
|
|
184
|
+
A64I_EORx = 0xca000000,
|
|
185
|
+
A64I_ORRw = 0x2a000000,
|
|
186
|
+
A64I_ORRx = 0xaa000000,
|
|
187
|
+
A64I_TSTw = 0x6a00001f,
|
|
188
|
+
A64I_TSTx = 0xea00001f,
|
|
189
|
+
|
|
190
|
+
A64I_CMPw = 0x6b00001f,
|
|
191
|
+
A64I_CMPx = 0xeb00001f,
|
|
192
|
+
A64I_CMNw = 0x2b00001f,
|
|
193
|
+
A64I_CMNx = 0xab00001f,
|
|
194
|
+
A64I_CCMPw = 0x7a400000,
|
|
195
|
+
A64I_CCMPx = 0xfa400000,
|
|
196
|
+
A64I_CSELw = 0x1a800000,
|
|
197
|
+
A64I_CSELx = 0x9a800000,
|
|
198
|
+
|
|
199
|
+
A64I_ASRw = 0x13007c00,
|
|
200
|
+
A64I_ASRx = 0x9340fc00,
|
|
201
|
+
A64I_LSLx = 0xd3400000,
|
|
202
|
+
A64I_LSRx = 0xd340fc00,
|
|
203
|
+
A64I_SHRw = 0x1ac02000,
|
|
204
|
+
A64I_SHRx = 0x9ac02000, /* lsl/lsr/asr/ror x0, x0, x0 */
|
|
205
|
+
A64I_REVw = 0x5ac00800,
|
|
206
|
+
A64I_REVx = 0xdac00c00,
|
|
207
|
+
|
|
208
|
+
A64I_EXTRw = 0x13800000,
|
|
209
|
+
A64I_EXTRx = 0x93c00000,
|
|
210
|
+
A64I_SBFMw = 0x13000000,
|
|
211
|
+
A64I_SBFMx = 0x93400000,
|
|
212
|
+
A64I_SXTBw = 0x13001c00,
|
|
213
|
+
A64I_SXTHw = 0x13003c00,
|
|
214
|
+
A64I_SXTW = 0x93407c00,
|
|
215
|
+
A64I_UBFMw = 0x53000000,
|
|
216
|
+
A64I_UBFMx = 0xd3400000,
|
|
217
|
+
A64I_UXTBw = 0x53001c00,
|
|
218
|
+
A64I_UXTHw = 0x53003c00,
|
|
219
|
+
|
|
220
|
+
A64I_MOVw = 0x2a0003e0,
|
|
221
|
+
A64I_MOVx = 0xaa0003e0,
|
|
222
|
+
A64I_MVNw = 0x2a2003e0,
|
|
223
|
+
A64I_MVNx = 0xaa2003e0,
|
|
224
|
+
A64I_MOVKw = 0x72800000,
|
|
225
|
+
A64I_MOVKx = 0xf2800000,
|
|
88
226
|
A64I_MOVZw = 0x52800000,
|
|
89
227
|
A64I_MOVZx = 0xd2800000,
|
|
228
|
+
A64I_MOVNw = 0x12800000,
|
|
229
|
+
A64I_MOVNx = 0x92800000,
|
|
230
|
+
|
|
231
|
+
A64I_LDRB = 0x39400000,
|
|
232
|
+
A64I_LDRH = 0x79400000,
|
|
233
|
+
A64I_LDRw = 0xb9400000,
|
|
234
|
+
A64I_LDRx = 0xf9400000,
|
|
90
235
|
A64I_LDRLw = 0x18000000,
|
|
91
236
|
A64I_LDRLx = 0x58000000,
|
|
92
|
-
|
|
237
|
+
A64I_STRB = 0x39000000,
|
|
238
|
+
A64I_STRH = 0x79000000,
|
|
239
|
+
A64I_STRw = 0xb9000000,
|
|
240
|
+
A64I_STRx = 0xf9000000,
|
|
241
|
+
A64I_STPw = 0x29000000,
|
|
242
|
+
A64I_STPx = 0xa9000000,
|
|
243
|
+
A64I_LDPw = 0x29400000,
|
|
244
|
+
A64I_LDPx = 0xa9400000,
|
|
245
|
+
|
|
93
246
|
A64I_B = 0x14000000,
|
|
247
|
+
A64I_BCC = 0x54000000,
|
|
248
|
+
A64I_BL = 0x94000000,
|
|
94
249
|
A64I_BR = 0xd61f0000,
|
|
250
|
+
A64I_BLR = 0xd63f0000,
|
|
251
|
+
A64I_TBZ = 0x36000000,
|
|
252
|
+
A64I_TBNZ = 0x37000000,
|
|
253
|
+
A64I_CBZ = 0x34000000,
|
|
254
|
+
A64I_CBNZ = 0x35000000,
|
|
255
|
+
|
|
256
|
+
A64I_NOP = 0xd503201f,
|
|
257
|
+
|
|
258
|
+
/* FP */
|
|
259
|
+
A64I_FADDd = 0x1e602800,
|
|
260
|
+
A64I_FSUBd = 0x1e603800,
|
|
261
|
+
A64I_FMADDd = 0x1f400000,
|
|
262
|
+
A64I_FMSUBd = 0x1f408000,
|
|
263
|
+
A64I_FNMADDd = 0x1f600000,
|
|
264
|
+
A64I_FNMSUBd = 0x1f608000,
|
|
265
|
+
A64I_FMULd = 0x1e600800,
|
|
266
|
+
A64I_FDIVd = 0x1e601800,
|
|
267
|
+
A64I_FNEGd = 0x1e614000,
|
|
268
|
+
A64I_FABS = 0x1e60c000,
|
|
269
|
+
A64I_FSQRTd = 0x1e61c000,
|
|
270
|
+
A64I_LDRs = 0xbd400000,
|
|
271
|
+
A64I_LDRd = 0xfd400000,
|
|
272
|
+
A64I_STRs = 0xbd000000,
|
|
273
|
+
A64I_STRd = 0xfd000000,
|
|
274
|
+
A64I_LDPs = 0x2d400000,
|
|
275
|
+
A64I_LDPd = 0x6d400000,
|
|
276
|
+
A64I_STPs = 0x2d000000,
|
|
277
|
+
A64I_STPd = 0x6d000000,
|
|
278
|
+
A64I_FCMPd = 0x1e602000,
|
|
279
|
+
A64I_FCMPZd = 0x1e602008,
|
|
280
|
+
A64I_FCSELd = 0x1e600c00,
|
|
281
|
+
A64I_FRINTMd = 0x1e654000,
|
|
282
|
+
A64I_FRINTPd = 0x1e64c000,
|
|
283
|
+
A64I_FRINTZd = 0x1e65c000,
|
|
284
|
+
|
|
285
|
+
A64I_FCVT_F32_F64 = 0x1e624000,
|
|
286
|
+
A64I_FCVT_F64_F32 = 0x1e22c000,
|
|
287
|
+
A64I_FCVT_F32_S32 = 0x1e220000,
|
|
288
|
+
A64I_FCVT_F64_S32 = 0x1e620000,
|
|
289
|
+
A64I_FCVT_F32_U32 = 0x1e230000,
|
|
290
|
+
A64I_FCVT_F64_U32 = 0x1e630000,
|
|
291
|
+
A64I_FCVT_F32_S64 = 0x9e220000,
|
|
292
|
+
A64I_FCVT_F64_S64 = 0x9e620000,
|
|
293
|
+
A64I_FCVT_F32_U64 = 0x9e230000,
|
|
294
|
+
A64I_FCVT_F64_U64 = 0x9e630000,
|
|
295
|
+
A64I_FCVT_S32_F64 = 0x1e780000,
|
|
296
|
+
A64I_FCVT_S32_F32 = 0x1e380000,
|
|
297
|
+
A64I_FCVT_U32_F64 = 0x1e790000,
|
|
298
|
+
A64I_FCVT_U32_F32 = 0x1e390000,
|
|
299
|
+
A64I_FCVT_S64_F64 = 0x9e780000,
|
|
300
|
+
A64I_FCVT_S64_F32 = 0x9e380000,
|
|
301
|
+
A64I_FCVT_U64_F64 = 0x9e790000,
|
|
302
|
+
A64I_FCVT_U64_F32 = 0x9e390000,
|
|
303
|
+
|
|
304
|
+
A64I_FMOV_S = 0x1e204000,
|
|
305
|
+
A64I_FMOV_D = 0x1e604000,
|
|
306
|
+
A64I_FMOV_R_S = 0x1e260000,
|
|
307
|
+
A64I_FMOV_S_R = 0x1e270000,
|
|
308
|
+
A64I_FMOV_R_D = 0x9e660000,
|
|
309
|
+
A64I_FMOV_D_R = 0x9e670000,
|
|
310
|
+
A64I_FMOV_DI = 0x1e601000,
|
|
95
311
|
} A64Ins;
|
|
96
312
|
|
|
313
|
+
typedef enum A64Shift {
|
|
314
|
+
A64SH_LSL, A64SH_LSR, A64SH_ASR, A64SH_ROR
|
|
315
|
+
} A64Shift;
|
|
316
|
+
|
|
317
|
+
typedef enum A64Extend {
|
|
318
|
+
A64EX_UXTB, A64EX_UXTH, A64EX_UXTW, A64EX_UXTX,
|
|
319
|
+
A64EX_SXTB, A64EX_SXTH, A64EX_SXTW, A64EX_SXTX,
|
|
320
|
+
} A64Extend;
|
|
321
|
+
|
|
322
|
+
/* ARM condition codes. */
|
|
323
|
+
typedef enum A64CC {
|
|
324
|
+
CC_EQ, CC_NE, CC_CS, CC_CC, CC_MI, CC_PL, CC_VS, CC_VC,
|
|
325
|
+
CC_HI, CC_LS, CC_GE, CC_LT, CC_GT, CC_LE, CC_AL,
|
|
326
|
+
CC_HS = CC_CS, CC_LO = CC_CC
|
|
327
|
+
} A64CC;
|
|
328
|
+
|
|
97
329
|
#endif
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
** Definitions for MIPS CPUs.
|
|
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_TARGET_MIPS_H
|
|
@@ -32,6 +32,7 @@ enum {
|
|
|
32
32
|
RID_MAX,
|
|
33
33
|
RID_ZERO = RID_R0,
|
|
34
34
|
RID_TMP = RID_RA,
|
|
35
|
+
RID_GP = RID_R28,
|
|
35
36
|
|
|
36
37
|
/* Calling conventions. */
|
|
37
38
|
RID_RET = RID_R2,
|
|
@@ -74,46 +75,64 @@ enum {
|
|
|
74
75
|
|
|
75
76
|
/* -- Register sets ------------------------------------------------------- */
|
|
76
77
|
|
|
77
|
-
/* Make use of all registers, except ZERO, TMP, SP, SYS1, SYS2 and
|
|
78
|
+
/* Make use of all registers, except ZERO, TMP, SP, SYS1, SYS2, JGL and GP. */
|
|
78
79
|
#define RSET_FIXED \
|
|
79
80
|
(RID2RSET(RID_ZERO)|RID2RSET(RID_TMP)|RID2RSET(RID_SP)|\
|
|
80
|
-
RID2RSET(RID_SYS1)|RID2RSET(RID_SYS2)|RID2RSET(RID_JGL))
|
|
81
|
+
RID2RSET(RID_SYS1)|RID2RSET(RID_SYS2)|RID2RSET(RID_JGL)|RID2RSET(RID_GP))
|
|
81
82
|
#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR) - RSET_FIXED)
|
|
82
83
|
#if LJ_SOFTFP
|
|
83
|
-
#define RSET_FPR
|
|
84
|
+
#define RSET_FPR 0
|
|
84
85
|
#else
|
|
86
|
+
#if LJ_32
|
|
85
87
|
#define RSET_FPR \
|
|
86
88
|
(RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\
|
|
87
89
|
RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\
|
|
88
90
|
RID2RSET(RID_F16)|RID2RSET(RID_F18)|RID2RSET(RID_F20)|RID2RSET(RID_F22)|\
|
|
89
91
|
RID2RSET(RID_F24)|RID2RSET(RID_F26)|RID2RSET(RID_F28)|RID2RSET(RID_F30))
|
|
92
|
+
#else
|
|
93
|
+
#define RSET_FPR RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR)
|
|
94
|
+
#endif
|
|
90
95
|
#endif
|
|
91
|
-
#define RSET_ALL
|
|
92
|
-
#define RSET_INIT
|
|
96
|
+
#define RSET_ALL (RSET_GPR|RSET_FPR)
|
|
97
|
+
#define RSET_INIT RSET_ALL
|
|
93
98
|
|
|
94
99
|
#define RSET_SCRATCH_GPR \
|
|
95
100
|
(RSET_RANGE(RID_R1, RID_R15+1)|\
|
|
96
|
-
RID2RSET(RID_R24)|RID2RSET(RID_R25)
|
|
101
|
+
RID2RSET(RID_R24)|RID2RSET(RID_R25))
|
|
97
102
|
#if LJ_SOFTFP
|
|
98
103
|
#define RSET_SCRATCH_FPR 0
|
|
99
104
|
#else
|
|
105
|
+
#if LJ_32
|
|
100
106
|
#define RSET_SCRATCH_FPR \
|
|
101
107
|
(RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\
|
|
102
108
|
RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\
|
|
103
109
|
RID2RSET(RID_F16)|RID2RSET(RID_F18))
|
|
110
|
+
#else
|
|
111
|
+
#define RSET_SCRATCH_FPR RSET_RANGE(RID_F0, RID_F24)
|
|
112
|
+
#endif
|
|
104
113
|
#endif
|
|
105
114
|
#define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR)
|
|
106
115
|
#define REGARG_FIRSTGPR RID_R4
|
|
116
|
+
#if LJ_32
|
|
107
117
|
#define REGARG_LASTGPR RID_R7
|
|
108
118
|
#define REGARG_NUMGPR 4
|
|
119
|
+
#else
|
|
120
|
+
#define REGARG_LASTGPR RID_R11
|
|
121
|
+
#define REGARG_NUMGPR 8
|
|
122
|
+
#endif
|
|
109
123
|
#if LJ_ABI_SOFTFP
|
|
110
124
|
#define REGARG_FIRSTFPR 0
|
|
111
125
|
#define REGARG_LASTFPR 0
|
|
112
126
|
#define REGARG_NUMFPR 0
|
|
113
127
|
#else
|
|
114
128
|
#define REGARG_FIRSTFPR RID_F12
|
|
129
|
+
#if LJ_32
|
|
115
130
|
#define REGARG_LASTFPR RID_F14
|
|
116
131
|
#define REGARG_NUMFPR 2
|
|
132
|
+
#else
|
|
133
|
+
#define REGARG_LASTFPR RID_F19
|
|
134
|
+
#define REGARG_NUMFPR 8
|
|
135
|
+
#endif
|
|
117
136
|
#endif
|
|
118
137
|
|
|
119
138
|
/* -- Spill slots --------------------------------------------------------- */
|
|
@@ -125,7 +144,11 @@ enum {
|
|
|
125
144
|
**
|
|
126
145
|
** SPS_FIRST: First spill slot for general use.
|
|
127
146
|
*/
|
|
147
|
+
#if LJ_32
|
|
128
148
|
#define SPS_FIXED 5
|
|
149
|
+
#else
|
|
150
|
+
#define SPS_FIXED 4
|
|
151
|
+
#endif
|
|
129
152
|
#define SPS_FIRST 4
|
|
130
153
|
|
|
131
154
|
#define SPOFS_TMP 0
|
|
@@ -140,7 +163,7 @@ typedef struct {
|
|
|
140
163
|
#if !LJ_SOFTFP
|
|
141
164
|
lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */
|
|
142
165
|
#endif
|
|
143
|
-
|
|
166
|
+
intptr_t gpr[RID_NUM_GPR]; /* General-purpose registers. */
|
|
144
167
|
int32_t spill[256]; /* Spill slots. */
|
|
145
168
|
} ExitState;
|
|
146
169
|
|
|
@@ -169,32 +192,41 @@ static LJ_AINLINE uint32_t *exitstub_trace_addr_(uint32_t *p)
|
|
|
169
192
|
#define MIPSF_F(r) ((r) << 6)
|
|
170
193
|
#define MIPSF_A(n) ((n) << 6)
|
|
171
194
|
#define MIPSF_M(n) ((n) << 11)
|
|
195
|
+
#define MIPSF_L(n) ((n) << 6)
|
|
172
196
|
|
|
173
197
|
typedef enum MIPSIns {
|
|
198
|
+
MIPSI_D = 0x38,
|
|
199
|
+
MIPSI_DV = 0x10,
|
|
200
|
+
MIPSI_D32 = 0x3c,
|
|
174
201
|
/* Integer instructions. */
|
|
175
|
-
MIPSI_MOVE =
|
|
202
|
+
MIPSI_MOVE = 0x00000025,
|
|
176
203
|
MIPSI_NOP = 0x00000000,
|
|
177
204
|
|
|
178
205
|
MIPSI_LI = 0x24000000,
|
|
179
206
|
MIPSI_LU = 0x34000000,
|
|
180
207
|
MIPSI_LUI = 0x3c000000,
|
|
181
208
|
|
|
182
|
-
|
|
209
|
+
MIPSI_AND = 0x00000024,
|
|
183
210
|
MIPSI_ANDI = 0x30000000,
|
|
211
|
+
MIPSI_OR = 0x00000025,
|
|
184
212
|
MIPSI_ORI = 0x34000000,
|
|
213
|
+
MIPSI_XOR = 0x00000026,
|
|
185
214
|
MIPSI_XORI = 0x38000000,
|
|
215
|
+
MIPSI_NOR = 0x00000027,
|
|
216
|
+
|
|
217
|
+
MIPSI_SLT = 0x0000002a,
|
|
218
|
+
MIPSI_SLTU = 0x0000002b,
|
|
186
219
|
MIPSI_SLTI = 0x28000000,
|
|
187
220
|
MIPSI_SLTIU = 0x2c000000,
|
|
188
221
|
|
|
189
222
|
MIPSI_ADDU = 0x00000021,
|
|
223
|
+
MIPSI_ADDIU = 0x24000000,
|
|
224
|
+
MIPSI_SUB = 0x00000022,
|
|
190
225
|
MIPSI_SUBU = 0x00000023,
|
|
191
226
|
MIPSI_MUL = 0x70000002,
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
MIPSI_NOR = 0x00000027,
|
|
196
|
-
MIPSI_SLT = 0x0000002a,
|
|
197
|
-
MIPSI_SLTU = 0x0000002b,
|
|
227
|
+
MIPSI_DIV = 0x0000001a,
|
|
228
|
+
MIPSI_DIVU = 0x0000001b,
|
|
229
|
+
|
|
198
230
|
MIPSI_MOVZ = 0x0000000a,
|
|
199
231
|
MIPSI_MOVN = 0x0000000b,
|
|
200
232
|
MIPSI_MFHI = 0x00000010,
|
|
@@ -204,19 +236,24 @@ typedef enum MIPSIns {
|
|
|
204
236
|
MIPSI_SLL = 0x00000000,
|
|
205
237
|
MIPSI_SRL = 0x00000002,
|
|
206
238
|
MIPSI_SRA = 0x00000003,
|
|
207
|
-
MIPSI_ROTR = 0x00200002, /*
|
|
239
|
+
MIPSI_ROTR = 0x00200002, /* MIPSXXR2 */
|
|
240
|
+
MIPSI_DROTR = 0x0020003a,
|
|
241
|
+
MIPSI_DROTR32 = 0x0020003e,
|
|
208
242
|
MIPSI_SLLV = 0x00000004,
|
|
209
243
|
MIPSI_SRLV = 0x00000006,
|
|
210
244
|
MIPSI_SRAV = 0x00000007,
|
|
211
|
-
MIPSI_ROTRV = 0x00000046, /*
|
|
245
|
+
MIPSI_ROTRV = 0x00000046, /* MIPSXXR2 */
|
|
246
|
+
MIPSI_DROTRV = 0x00000056,
|
|
212
247
|
|
|
213
|
-
MIPSI_SEB = 0x7c000420, /*
|
|
214
|
-
MIPSI_SEH = 0x7c000620, /*
|
|
215
|
-
MIPSI_WSBH = 0x7c0000a0, /*
|
|
248
|
+
MIPSI_SEB = 0x7c000420, /* MIPSXXR2 */
|
|
249
|
+
MIPSI_SEH = 0x7c000620, /* MIPSXXR2 */
|
|
250
|
+
MIPSI_WSBH = 0x7c0000a0, /* MIPSXXR2 */
|
|
251
|
+
MIPSI_DSBH = 0x7c0000a4,
|
|
216
252
|
|
|
217
253
|
MIPSI_B = 0x10000000,
|
|
218
254
|
MIPSI_J = 0x08000000,
|
|
219
255
|
MIPSI_JAL = 0x0c000000,
|
|
256
|
+
MIPSI_JALX = 0x74000000,
|
|
220
257
|
MIPSI_JR = 0x00000008,
|
|
221
258
|
MIPSI_JALR = 0x0000f809,
|
|
222
259
|
|
|
@@ -229,7 +266,9 @@ typedef enum MIPSIns {
|
|
|
229
266
|
|
|
230
267
|
/* Load/store instructions. */
|
|
231
268
|
MIPSI_LW = 0x8c000000,
|
|
269
|
+
MIPSI_LD = 0xdc000000,
|
|
232
270
|
MIPSI_SW = 0xac000000,
|
|
271
|
+
MIPSI_SD = 0xfc000000,
|
|
233
272
|
MIPSI_LB = 0x80000000,
|
|
234
273
|
MIPSI_SB = 0xa0000000,
|
|
235
274
|
MIPSI_LH = 0x84000000,
|
|
@@ -241,6 +280,50 @@ typedef enum MIPSIns {
|
|
|
241
280
|
MIPSI_LDC1 = 0xd4000000,
|
|
242
281
|
MIPSI_SDC1 = 0xf4000000,
|
|
243
282
|
|
|
283
|
+
/* MIPS64 instructions. */
|
|
284
|
+
MIPSI_DADD = 0x0000002c,
|
|
285
|
+
MIPSI_DADDI = 0x60000000,
|
|
286
|
+
MIPSI_DADDU = 0x0000002d,
|
|
287
|
+
MIPSI_DADDIU = 0x64000000,
|
|
288
|
+
MIPSI_DSUB = 0x0000002e,
|
|
289
|
+
MIPSI_DSUBU = 0x0000002f,
|
|
290
|
+
MIPSI_DDIV = 0x0000001e,
|
|
291
|
+
MIPSI_DDIVU = 0x0000001f,
|
|
292
|
+
MIPSI_DMULT = 0x0000001c,
|
|
293
|
+
MIPSI_DMULTU = 0x0000001d,
|
|
294
|
+
|
|
295
|
+
MIPSI_DSLL = 0x00000038,
|
|
296
|
+
MIPSI_DSRL = 0x0000003a,
|
|
297
|
+
MIPSI_DSLLV = 0x00000014,
|
|
298
|
+
MIPSI_DSRLV = 0x00000016,
|
|
299
|
+
MIPSI_DSRA = 0x0000003b,
|
|
300
|
+
MIPSI_DSRAV = 0x00000017,
|
|
301
|
+
MIPSI_DSRA32 = 0x0000003f,
|
|
302
|
+
MIPSI_DSLL32 = 0x0000003c,
|
|
303
|
+
MIPSI_DSRL32 = 0x0000003e,
|
|
304
|
+
MIPSI_DSHD = 0x7c000164,
|
|
305
|
+
|
|
306
|
+
MIPSI_AADDU = LJ_32 ? MIPSI_ADDU : MIPSI_DADDU,
|
|
307
|
+
MIPSI_AADDIU = LJ_32 ? MIPSI_ADDIU : MIPSI_DADDIU,
|
|
308
|
+
MIPSI_ASUBU = LJ_32 ? MIPSI_SUBU : MIPSI_DSUBU,
|
|
309
|
+
MIPSI_AL = LJ_32 ? MIPSI_LW : MIPSI_LD,
|
|
310
|
+
MIPSI_AS = LJ_32 ? MIPSI_SW : MIPSI_SD,
|
|
311
|
+
|
|
312
|
+
/* Extract/insert instructions. */
|
|
313
|
+
MIPSI_DEXTM = 0x7c000001,
|
|
314
|
+
MIPSI_DEXTU = 0x7c000002,
|
|
315
|
+
MIPSI_DEXT = 0x7c000003,
|
|
316
|
+
MIPSI_DINSM = 0x7c000005,
|
|
317
|
+
MIPSI_DINSU = 0x7c000006,
|
|
318
|
+
MIPSI_DINS = 0x7c000007,
|
|
319
|
+
|
|
320
|
+
MIPSI_RINT_D = 0x4620001a,
|
|
321
|
+
MIPSI_RINT_S = 0x4600001a,
|
|
322
|
+
MIPSI_RINT = 0x4400001a,
|
|
323
|
+
MIPSI_FLOOR_D = 0x4620000b,
|
|
324
|
+
MIPSI_CEIL_D = 0x4620000a,
|
|
325
|
+
MIPSI_ROUND_D = 0x46200008,
|
|
326
|
+
|
|
244
327
|
/* FP instructions. */
|
|
245
328
|
MIPSI_MOV_S = 0x46000006,
|
|
246
329
|
MIPSI_MOV_D = 0x46200006,
|
|
@@ -265,24 +348,30 @@ typedef enum MIPSIns {
|
|
|
265
348
|
MIPSI_CVT_W_D = 0x46200024,
|
|
266
349
|
MIPSI_CVT_S_W = 0x46800020,
|
|
267
350
|
MIPSI_CVT_D_W = 0x46800021,
|
|
351
|
+
MIPSI_CVT_S_L = 0x46a00020,
|
|
352
|
+
MIPSI_CVT_D_L = 0x46a00021,
|
|
268
353
|
|
|
269
354
|
MIPSI_TRUNC_W_S = 0x4600000d,
|
|
270
355
|
MIPSI_TRUNC_W_D = 0x4620000d,
|
|
356
|
+
MIPSI_TRUNC_L_S = 0x46000009,
|
|
357
|
+
MIPSI_TRUNC_L_D = 0x46200009,
|
|
271
358
|
MIPSI_FLOOR_W_S = 0x4600000f,
|
|
272
359
|
MIPSI_FLOOR_W_D = 0x4620000f,
|
|
273
360
|
|
|
274
361
|
MIPSI_MFC1 = 0x44000000,
|
|
275
362
|
MIPSI_MTC1 = 0x44800000,
|
|
363
|
+
MIPSI_DMTC1 = 0x44a00000,
|
|
364
|
+
MIPSI_DMFC1 = 0x44200000,
|
|
276
365
|
|
|
277
366
|
MIPSI_BC1F = 0x45000000,
|
|
278
367
|
MIPSI_BC1T = 0x45010000,
|
|
279
368
|
|
|
280
369
|
MIPSI_C_EQ_D = 0x46200032,
|
|
370
|
+
MIPSI_C_OLT_S = 0x46000034,
|
|
281
371
|
MIPSI_C_OLT_D = 0x46200034,
|
|
282
372
|
MIPSI_C_ULT_D = 0x46200035,
|
|
283
373
|
MIPSI_C_OLE_D = 0x46200036,
|
|
284
374
|
MIPSI_C_ULE_D = 0x46200037,
|
|
285
|
-
|
|
286
375
|
} MIPSIns;
|
|
287
376
|
|
|
288
377
|
#endif
|