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.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -5
  3. data/ext/immunio/Rakefile +14 -6
  4. data/lib/immunio/context.rb +2 -0
  5. data/lib/immunio/plugins/action_view.rb +7 -668
  6. data/lib/immunio/plugins/action_view/action_view.rb +22 -0
  7. data/lib/immunio/plugins/action_view/active_support_hash.rb +29 -0
  8. data/lib/immunio/plugins/action_view/cache_store.rb +24 -0
  9. data/lib/immunio/plugins/action_view/erubi.rb +38 -0
  10. data/lib/immunio/plugins/action_view/erubis.rb +39 -0
  11. data/lib/immunio/plugins/action_view/fragment_caching.rb +29 -0
  12. data/lib/immunio/plugins/action_view/haml.rb +46 -0
  13. data/lib/immunio/plugins/action_view/slim.rb +42 -0
  14. data/lib/immunio/plugins/action_view/template.rb +431 -0
  15. data/lib/immunio/plugins/action_view/template_rendering.rb +45 -0
  16. data/lib/immunio/plugins/http_tracker.rb +2 -0
  17. data/lib/immunio/plugins/io.rb +34 -0
  18. data/lib/immunio/version.rb +1 -1
  19. data/lua-hooks/Makefile +36 -9
  20. data/lua-hooks/ext/luajit/COPYRIGHT +1 -1
  21. data/lua-hooks/ext/luajit/Makefile +22 -15
  22. data/lua-hooks/ext/luajit/README +2 -2
  23. data/lua-hooks/ext/luajit/doc/bluequad-print.css +1 -1
  24. data/lua-hooks/ext/luajit/doc/bluequad.css +1 -1
  25. data/lua-hooks/ext/luajit/doc/changes.html +69 -3
  26. data/lua-hooks/ext/luajit/doc/contact.html +10 -3
  27. data/lua-hooks/ext/luajit/doc/ext_c_api.html +2 -2
  28. data/lua-hooks/ext/luajit/doc/ext_ffi.html +2 -2
  29. data/lua-hooks/ext/luajit/doc/ext_ffi_api.html +2 -2
  30. data/lua-hooks/ext/luajit/doc/ext_ffi_semantics.html +3 -4
  31. data/lua-hooks/ext/luajit/doc/ext_ffi_tutorial.html +2 -2
  32. data/lua-hooks/ext/luajit/doc/ext_jit.html +3 -3
  33. data/lua-hooks/ext/luajit/doc/ext_profiler.html +2 -2
  34. data/lua-hooks/ext/luajit/doc/extensions.html +47 -20
  35. data/lua-hooks/ext/luajit/doc/faq.html +2 -2
  36. data/lua-hooks/ext/luajit/doc/install.html +74 -45
  37. data/lua-hooks/ext/luajit/doc/luajit.html +5 -5
  38. data/lua-hooks/ext/luajit/doc/running.html +3 -3
  39. data/lua-hooks/ext/luajit/doc/status.html +13 -8
  40. data/lua-hooks/ext/luajit/dynasm/dasm_arm.h +1 -1
  41. data/lua-hooks/ext/luajit/dynasm/dasm_arm.lua +1 -1
  42. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.h +1 -1
  43. data/lua-hooks/ext/luajit/dynasm/dasm_arm64.lua +1 -1
  44. data/lua-hooks/ext/luajit/dynasm/dasm_mips.h +8 -5
  45. data/lua-hooks/ext/luajit/dynasm/dasm_mips.lua +66 -11
  46. data/lua-hooks/ext/luajit/dynasm/dasm_mips64.lua +12 -0
  47. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.h +1 -1
  48. data/lua-hooks/ext/luajit/dynasm/dasm_ppc.lua +1 -1
  49. data/lua-hooks/ext/luajit/dynasm/dasm_proto.h +1 -1
  50. data/lua-hooks/ext/luajit/dynasm/dasm_x64.lua +1 -1
  51. data/lua-hooks/ext/luajit/dynasm/dasm_x86.h +1 -1
  52. data/lua-hooks/ext/luajit/dynasm/dasm_x86.lua +5 -1
  53. data/lua-hooks/ext/luajit/dynasm/dynasm.lua +2 -2
  54. data/lua-hooks/ext/luajit/etc/luajit.1 +1 -1
  55. data/lua-hooks/ext/luajit/etc/luajit.pc +1 -1
  56. data/lua-hooks/ext/luajit/src/Makefile +15 -11
  57. data/lua-hooks/ext/luajit/src/Makefile.dep +16 -16
  58. data/lua-hooks/ext/luajit/src/host/buildvm.c +2 -2
  59. data/lua-hooks/ext/luajit/src/host/buildvm.h +1 -1
  60. data/lua-hooks/ext/luajit/src/host/buildvm_asm.c +9 -4
  61. data/lua-hooks/ext/luajit/src/host/buildvm_fold.c +2 -2
  62. data/lua-hooks/ext/luajit/src/host/buildvm_lib.c +1 -1
  63. data/lua-hooks/ext/luajit/src/host/buildvm_libbc.h +14 -3
  64. data/lua-hooks/ext/luajit/src/host/buildvm_peobj.c +27 -3
  65. data/lua-hooks/ext/luajit/src/host/genlibbc.lua +1 -1
  66. data/lua-hooks/ext/luajit/src/host/genminilua.lua +6 -5
  67. data/lua-hooks/ext/luajit/src/host/minilua.c +1 -1
  68. data/lua-hooks/ext/luajit/src/jit/bc.lua +1 -1
  69. data/lua-hooks/ext/luajit/src/jit/bcsave.lua +8 -8
  70. data/lua-hooks/ext/luajit/src/jit/dis_arm.lua +2 -2
  71. data/lua-hooks/ext/luajit/src/jit/dis_arm64.lua +1216 -0
  72. data/lua-hooks/ext/luajit/src/jit/dis_arm64be.lua +12 -0
  73. data/lua-hooks/ext/luajit/src/jit/dis_mips.lua +35 -20
  74. data/lua-hooks/ext/luajit/src/jit/dis_mips64.lua +17 -0
  75. data/lua-hooks/ext/luajit/src/jit/dis_mips64el.lua +17 -0
  76. data/lua-hooks/ext/luajit/src/jit/dis_mipsel.lua +1 -1
  77. data/lua-hooks/ext/luajit/src/jit/dis_ppc.lua +2 -2
  78. data/lua-hooks/ext/luajit/src/jit/dis_x64.lua +1 -1
  79. data/lua-hooks/ext/luajit/src/jit/dis_x86.lua +7 -4
  80. data/lua-hooks/ext/luajit/src/jit/dump.lua +17 -12
  81. data/lua-hooks/ext/luajit/src/jit/p.lua +3 -2
  82. data/lua-hooks/ext/luajit/src/jit/v.lua +2 -2
  83. data/lua-hooks/ext/luajit/src/jit/zone.lua +1 -1
  84. data/lua-hooks/ext/luajit/src/lauxlib.h +14 -20
  85. data/lua-hooks/ext/luajit/src/lib_aux.c +38 -27
  86. data/lua-hooks/ext/luajit/src/lib_base.c +12 -5
  87. data/lua-hooks/ext/luajit/src/lib_bit.c +1 -1
  88. data/lua-hooks/ext/luajit/src/lib_debug.c +5 -5
  89. data/lua-hooks/ext/luajit/src/lib_ffi.c +2 -2
  90. data/lua-hooks/ext/luajit/src/lib_init.c +16 -16
  91. data/lua-hooks/ext/luajit/src/lib_io.c +6 -7
  92. data/lua-hooks/ext/luajit/src/lib_jit.c +14 -4
  93. data/lua-hooks/ext/luajit/src/lib_math.c +1 -5
  94. data/lua-hooks/ext/luajit/src/lib_os.c +1 -1
  95. data/lua-hooks/ext/luajit/src/lib_package.c +14 -23
  96. data/lua-hooks/ext/luajit/src/lib_string.c +1 -5
  97. data/lua-hooks/ext/luajit/src/lib_table.c +21 -1
  98. data/lua-hooks/ext/luajit/src/lj.supp +3 -3
  99. data/lua-hooks/ext/luajit/src/lj_alloc.c +174 -83
  100. data/lua-hooks/ext/luajit/src/lj_api.c +97 -18
  101. data/lua-hooks/ext/luajit/src/lj_arch.h +54 -22
  102. data/lua-hooks/ext/luajit/src/lj_asm.c +172 -53
  103. data/lua-hooks/ext/luajit/src/lj_asm.h +1 -1
  104. data/lua-hooks/ext/luajit/src/lj_asm_arm.h +19 -16
  105. data/lua-hooks/ext/luajit/src/lj_asm_arm64.h +2022 -0
  106. data/lua-hooks/ext/luajit/src/lj_asm_mips.h +564 -158
  107. data/lua-hooks/ext/luajit/src/lj_asm_ppc.h +19 -18
  108. data/lua-hooks/ext/luajit/src/lj_asm_x86.h +578 -92
  109. data/lua-hooks/ext/luajit/src/lj_bc.c +1 -1
  110. data/lua-hooks/ext/luajit/src/lj_bc.h +1 -1
  111. data/lua-hooks/ext/luajit/src/lj_bcdump.h +1 -1
  112. data/lua-hooks/ext/luajit/src/lj_bcread.c +1 -1
  113. data/lua-hooks/ext/luajit/src/lj_bcwrite.c +1 -1
  114. data/lua-hooks/ext/luajit/src/lj_buf.c +1 -1
  115. data/lua-hooks/ext/luajit/src/lj_buf.h +1 -1
  116. data/lua-hooks/ext/luajit/src/lj_carith.c +1 -1
  117. data/lua-hooks/ext/luajit/src/lj_carith.h +1 -1
  118. data/lua-hooks/ext/luajit/src/lj_ccall.c +172 -7
  119. data/lua-hooks/ext/luajit/src/lj_ccall.h +21 -5
  120. data/lua-hooks/ext/luajit/src/lj_ccallback.c +71 -17
  121. data/lua-hooks/ext/luajit/src/lj_ccallback.h +1 -1
  122. data/lua-hooks/ext/luajit/src/lj_cconv.c +4 -2
  123. data/lua-hooks/ext/luajit/src/lj_cconv.h +1 -1
  124. data/lua-hooks/ext/luajit/src/lj_cdata.c +7 -5
  125. data/lua-hooks/ext/luajit/src/lj_cdata.h +1 -1
  126. data/lua-hooks/ext/luajit/src/lj_clib.c +5 -5
  127. data/lua-hooks/ext/luajit/src/lj_clib.h +1 -1
  128. data/lua-hooks/ext/luajit/src/lj_cparse.c +11 -6
  129. data/lua-hooks/ext/luajit/src/lj_cparse.h +1 -1
  130. data/lua-hooks/ext/luajit/src/lj_crecord.c +70 -14
  131. data/lua-hooks/ext/luajit/src/lj_crecord.h +1 -1
  132. data/lua-hooks/ext/luajit/src/lj_ctype.c +1 -1
  133. data/lua-hooks/ext/luajit/src/lj_ctype.h +8 -8
  134. data/lua-hooks/ext/luajit/src/lj_debug.c +1 -1
  135. data/lua-hooks/ext/luajit/src/lj_debug.h +1 -1
  136. data/lua-hooks/ext/luajit/src/lj_def.h +6 -9
  137. data/lua-hooks/ext/luajit/src/lj_dispatch.c +3 -3
  138. data/lua-hooks/ext/luajit/src/lj_dispatch.h +2 -1
  139. data/lua-hooks/ext/luajit/src/lj_emit_arm.h +5 -4
  140. data/lua-hooks/ext/luajit/src/lj_emit_arm64.h +419 -0
  141. data/lua-hooks/ext/luajit/src/lj_emit_mips.h +100 -20
  142. data/lua-hooks/ext/luajit/src/lj_emit_ppc.h +4 -4
  143. data/lua-hooks/ext/luajit/src/lj_emit_x86.h +116 -25
  144. data/lua-hooks/ext/luajit/src/lj_err.c +34 -13
  145. data/lua-hooks/ext/luajit/src/lj_err.h +1 -1
  146. data/lua-hooks/ext/luajit/src/lj_errmsg.h +1 -1
  147. data/lua-hooks/ext/luajit/src/lj_ff.h +1 -1
  148. data/lua-hooks/ext/luajit/src/lj_ffrecord.c +58 -49
  149. data/lua-hooks/ext/luajit/src/lj_ffrecord.h +1 -1
  150. data/lua-hooks/ext/luajit/src/lj_frame.h +33 -6
  151. data/lua-hooks/ext/luajit/src/lj_func.c +4 -2
  152. data/lua-hooks/ext/luajit/src/lj_func.h +1 -1
  153. data/lua-hooks/ext/luajit/src/lj_gc.c +16 -7
  154. data/lua-hooks/ext/luajit/src/lj_gc.h +1 -1
  155. data/lua-hooks/ext/luajit/src/lj_gdbjit.c +31 -1
  156. data/lua-hooks/ext/luajit/src/lj_gdbjit.h +1 -1
  157. data/lua-hooks/ext/luajit/src/lj_ir.c +69 -96
  158. data/lua-hooks/ext/luajit/src/lj_ir.h +29 -18
  159. data/lua-hooks/ext/luajit/src/lj_ircall.h +24 -30
  160. data/lua-hooks/ext/luajit/src/lj_iropt.h +9 -9
  161. data/lua-hooks/ext/luajit/src/lj_jit.h +67 -9
  162. data/lua-hooks/ext/luajit/src/lj_lex.c +1 -1
  163. data/lua-hooks/ext/luajit/src/lj_lex.h +1 -1
  164. data/lua-hooks/ext/luajit/src/lj_lib.c +1 -1
  165. data/lua-hooks/ext/luajit/src/lj_lib.h +1 -1
  166. data/lua-hooks/ext/luajit/src/lj_load.c +1 -1
  167. data/lua-hooks/ext/luajit/src/lj_mcode.c +11 -10
  168. data/lua-hooks/ext/luajit/src/lj_mcode.h +1 -1
  169. data/lua-hooks/ext/luajit/src/lj_meta.c +1 -1
  170. data/lua-hooks/ext/luajit/src/lj_meta.h +1 -1
  171. data/lua-hooks/ext/luajit/src/lj_obj.c +1 -1
  172. data/lua-hooks/ext/luajit/src/lj_obj.h +7 -3
  173. data/lua-hooks/ext/luajit/src/lj_opt_dce.c +1 -1
  174. data/lua-hooks/ext/luajit/src/lj_opt_fold.c +84 -17
  175. data/lua-hooks/ext/luajit/src/lj_opt_loop.c +1 -1
  176. data/lua-hooks/ext/luajit/src/lj_opt_mem.c +3 -3
  177. data/lua-hooks/ext/luajit/src/lj_opt_narrow.c +24 -22
  178. data/lua-hooks/ext/luajit/src/lj_opt_sink.c +11 -6
  179. data/lua-hooks/ext/luajit/src/lj_opt_split.c +11 -2
  180. data/lua-hooks/ext/luajit/src/lj_parse.c +9 -7
  181. data/lua-hooks/ext/luajit/src/lj_parse.h +1 -1
  182. data/lua-hooks/ext/luajit/src/lj_profile.c +1 -1
  183. data/lua-hooks/ext/luajit/src/lj_profile.h +1 -1
  184. data/lua-hooks/ext/luajit/src/lj_record.c +201 -117
  185. data/lua-hooks/ext/luajit/src/lj_record.h +1 -1
  186. data/lua-hooks/ext/luajit/src/lj_snap.c +72 -26
  187. data/lua-hooks/ext/luajit/src/lj_snap.h +1 -1
  188. data/lua-hooks/ext/luajit/src/lj_state.c +6 -6
  189. data/lua-hooks/ext/luajit/src/lj_state.h +2 -2
  190. data/lua-hooks/ext/luajit/src/lj_str.c +1 -1
  191. data/lua-hooks/ext/luajit/src/lj_str.h +1 -1
  192. data/lua-hooks/ext/luajit/src/lj_strfmt.c +7 -3
  193. data/lua-hooks/ext/luajit/src/lj_strfmt.h +1 -1
  194. data/lua-hooks/ext/luajit/src/lj_strfmt_num.c +4 -3
  195. data/lua-hooks/ext/luajit/src/lj_strscan.c +1 -1
  196. data/lua-hooks/ext/luajit/src/lj_strscan.h +1 -1
  197. data/lua-hooks/ext/luajit/src/lj_tab.c +1 -2
  198. data/lua-hooks/ext/luajit/src/lj_tab.h +1 -1
  199. data/lua-hooks/ext/luajit/src/lj_target.h +3 -3
  200. data/lua-hooks/ext/luajit/src/lj_target_arm.h +1 -1
  201. data/lua-hooks/ext/luajit/src/lj_target_arm64.h +239 -7
  202. data/lua-hooks/ext/luajit/src/lj_target_mips.h +111 -22
  203. data/lua-hooks/ext/luajit/src/lj_target_ppc.h +1 -1
  204. data/lua-hooks/ext/luajit/src/lj_target_x86.h +21 -4
  205. data/lua-hooks/ext/luajit/src/lj_trace.c +63 -18
  206. data/lua-hooks/ext/luajit/src/lj_trace.h +2 -1
  207. data/lua-hooks/ext/luajit/src/lj_traceerr.h +1 -1
  208. data/lua-hooks/ext/luajit/src/lj_udata.c +1 -1
  209. data/lua-hooks/ext/luajit/src/lj_udata.h +1 -1
  210. data/lua-hooks/ext/luajit/src/lj_vm.h +5 -1
  211. data/lua-hooks/ext/luajit/src/lj_vmevent.c +1 -1
  212. data/lua-hooks/ext/luajit/src/lj_vmevent.h +1 -1
  213. data/lua-hooks/ext/luajit/src/lj_vmmath.c +1 -1
  214. data/lua-hooks/ext/luajit/src/ljamalg.c +1 -1
  215. data/lua-hooks/ext/luajit/src/lua.h +9 -1
  216. data/lua-hooks/ext/luajit/src/luaconf.h +3 -7
  217. data/lua-hooks/ext/luajit/src/luajit.c +69 -54
  218. data/lua-hooks/ext/luajit/src/luajit.h +4 -4
  219. data/lua-hooks/ext/luajit/src/lualib.h +1 -1
  220. data/lua-hooks/ext/luajit/src/msvcbuild.bat +12 -4
  221. data/lua-hooks/ext/luajit/src/vm_arm.dasc +1 -1
  222. data/lua-hooks/ext/luajit/src/vm_arm64.dasc +255 -32
  223. data/lua-hooks/ext/luajit/src/vm_mips.dasc +26 -23
  224. data/lua-hooks/ext/luajit/src/vm_mips64.dasc +5062 -0
  225. data/lua-hooks/ext/luajit/src/vm_ppc.dasc +1 -1
  226. data/lua-hooks/ext/luajit/src/vm_x64.dasc +24 -25
  227. data/lua-hooks/ext/luajit/src/vm_x86.dasc +77 -4
  228. data/lua-hooks/libluahooks.darwin.a +0 -0
  229. data/lua-hooks/libluahooks.linux.a +0 -0
  230. data/lua-hooks/options.mk +1 -1
  231. metadata +37 -77
  232. data/lua-hooks/ext/all.c +0 -69
  233. data/lua-hooks/ext/libinjection/COPYING +0 -37
  234. data/lua-hooks/ext/libinjection/libinjection.h +0 -65
  235. data/lua-hooks/ext/libinjection/libinjection_html5.c +0 -847
  236. data/lua-hooks/ext/libinjection/libinjection_html5.h +0 -54
  237. data/lua-hooks/ext/libinjection/libinjection_sqli.c +0 -2301
  238. data/lua-hooks/ext/libinjection/libinjection_sqli.h +0 -295
  239. data/lua-hooks/ext/libinjection/libinjection_sqli_data.h +0 -9349
  240. data/lua-hooks/ext/libinjection/libinjection_xss.c +0 -531
  241. data/lua-hooks/ext/libinjection/libinjection_xss.h +0 -21
  242. data/lua-hooks/ext/libinjection/lualib.c +0 -145
  243. data/lua-hooks/ext/libinjection/module.mk +0 -5
  244. data/lua-hooks/ext/lpeg/HISTORY +0 -96
  245. data/lua-hooks/ext/lpeg/lpcap.c +0 -537
  246. data/lua-hooks/ext/lpeg/lpcap.h +0 -56
  247. data/lua-hooks/ext/lpeg/lpcode.c +0 -1014
  248. data/lua-hooks/ext/lpeg/lpcode.h +0 -40
  249. data/lua-hooks/ext/lpeg/lpeg-128.gif +0 -0
  250. data/lua-hooks/ext/lpeg/lpeg.html +0 -1445
  251. data/lua-hooks/ext/lpeg/lpprint.c +0 -244
  252. data/lua-hooks/ext/lpeg/lpprint.h +0 -36
  253. data/lua-hooks/ext/lpeg/lptree.c +0 -1303
  254. data/lua-hooks/ext/lpeg/lptree.h +0 -82
  255. data/lua-hooks/ext/lpeg/lptypes.h +0 -149
  256. data/lua-hooks/ext/lpeg/lpvm.c +0 -364
  257. data/lua-hooks/ext/lpeg/lpvm.h +0 -58
  258. data/lua-hooks/ext/lpeg/makefile +0 -55
  259. data/lua-hooks/ext/lpeg/module.mk +0 -6
  260. data/lua-hooks/ext/lpeg/re.html +0 -498
  261. data/lua-hooks/ext/lua-cmsgpack/.gitignore +0 -13
  262. data/lua-hooks/ext/lua-cmsgpack/CMakeLists.txt +0 -45
  263. data/lua-hooks/ext/lua-cmsgpack/README.md +0 -115
  264. data/lua-hooks/ext/lua-cmsgpack/lua_cmsgpack.c +0 -970
  265. data/lua-hooks/ext/lua-cmsgpack/module.mk +0 -2
  266. data/lua-hooks/ext/lua-cmsgpack/test.lua +0 -570
  267. data/lua-hooks/ext/lua-snapshot/LICENSE +0 -7
  268. data/lua-hooks/ext/lua-snapshot/Makefile +0 -12
  269. data/lua-hooks/ext/lua-snapshot/README.md +0 -18
  270. data/lua-hooks/ext/lua-snapshot/dump.lua +0 -15
  271. data/lua-hooks/ext/lua-snapshot/module.mk +0 -2
  272. data/lua-hooks/ext/lua-snapshot/snapshot.c +0 -462
  273. data/lua-hooks/ext/luautf8/README.md +0 -152
  274. data/lua-hooks/ext/luautf8/lutf8lib.c +0 -1274
  275. data/lua-hooks/ext/luautf8/module.mk +0 -2
  276. data/lua-hooks/ext/luautf8/unidata.h +0 -3064
  277. data/lua-hooks/ext/module.mk +0 -15
  278. data/lua-hooks/ext/modules.h +0 -17
  279. data/lua-hooks/ext/perf/luacpu.c +0 -114
  280. data/lua-hooks/ext/perf/lualoadavg.c +0 -40
  281. data/lua-hooks/ext/perf/luameminfo.c +0 -38
  282. data/lua-hooks/ext/perf/luaoslib.c +0 -203
  283. data/lua-hooks/ext/perf/module.mk +0 -5
  284. data/lua-hooks/ext/sha1/luasha1.c +0 -74
  285. data/lua-hooks/ext/sha1/module.mk +0 -5
  286. data/lua-hooks/ext/sha1/sha1.c +0 -145
  287. data/lua-hooks/ext/sha2/luasha256.c +0 -77
  288. data/lua-hooks/ext/sha2/module.mk +0 -5
  289. data/lua-hooks/ext/sha2/sha256.c +0 -196
  290. data/lua-hooks/ext/sysutils/lua_utils.c +0 -56
  291. 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-2016 Mike Pall. See Copyright Notice in luajit.h
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 hiword of frame. */
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
- /* Map of itypes to non-negative numbers. ORDER LJ_T.
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) _(STR, 4) \
306
- _(P32, 4) _(THREAD, 4) _(PROTO, 4) _(FUNC, 4) _(P64, 8) _(CDATA, 4) \
307
- _(TAB, 4) _(UDATA, 4) \
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 9 more types. */
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/gco | ot | prev | (alternative fields in union)
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
- /* TODO_GC64: major changes required. */
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, mref((ir)->ptr, cTValue))
563
- #define ir_kint64(ir) check_exp((ir)->o == IR_KINT64, mref((ir)->ptr,cTValue))
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, mref((ir)->ptr,cTValue))
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, mref((ir)->ptr, void))
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-2016 Mike Pall. See Copyright Notice in luajit.h
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 && LJ_TARGET_MIPS
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 || LJ_TARGET_MIPS)
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, P32, 0) \
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, P32, 0) \
139
- _(ANY, lj_strfmt_putnum, 2, FL, P32, 0) \
140
- _(ANY, lj_strfmt_putquoted, 2, FL, P32, 0) \
141
- _(ANY, lj_strfmt_putfxint, 3, L, P32, XA_64) \
142
- _(ANY, lj_strfmt_putfnum_int, 3, L, P32, XA_FP) \
143
- _(ANY, lj_strfmt_putfnum_uint, 3, L, P32, XA_FP) \
144
- _(ANY, lj_strfmt_putfnum, 3, L, P32, XA_FP) \
145
- _(ANY, lj_strfmt_putfstr, 3, L, P32, 0) \
146
- _(ANY, lj_strfmt_putfchar, 3, L, P32, 0) \
147
- _(ANY, lj_buf_putmem, 3, S, P32, 0) \
148
- _(ANY, lj_buf_putstr, 2, FL, P32, 0) \
149
- _(ANY, lj_buf_putchar, 2, FL, P32, 0) \
150
- _(ANY, lj_buf_putstr_reverse, 2, FL, P32, 0) \
151
- _(ANY, lj_buf_putstr_lower, 2, FL, P32, 0) \
152
- _(ANY, lj_buf_putstr_upper, 2, FL, P32, 0) \
153
- _(ANY, lj_buf_putstr_rep, 3, L, P32, 0) \
154
- _(ANY, lj_buf_puttab, 5, L, P32, 0) \
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, P32, CCI_L) \
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, P32, CCI_L) \
165
- _(ANY, lj_math_random_step, 1, FS, NUM, CCI_CASTU64|CCI_RANDFPR)\
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-2016 Mike Pall. See Copyright Notice in luajit.h
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 void lj_ir_k64_freeall(jit_State *J);
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 lj_ir_knum_abs(J) lj_ir_k64(J, IR_KNUM, LJ_KSIMD(J, LJ_KSIMD_ABS))
79
- #define lj_ir_knum_neg(J) lj_ir_k64(J, IR_KNUM, LJ_KSIMD(J, LJ_KSIMD_NEG))
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-2016 Mike Pall. See Copyright Notice in luajit.h
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 JIT_F_MIPS32R2 0x00000010
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 JIT_F_MIPS32R2
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; /* Instruction referenced by left operand. */
327
- IRIns right; /* Instruction referenced by right operand. */
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
- TValue *ktracep; /* Pointer to K64Array slot with GCtrace pointer. */
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-2016 Mike Pall. See Copyright Notice in luajit.h
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
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  ** Lexical analyzer.
3
- ** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
3
+ ** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
4
4
  */
5
5
 
6
6
  #ifndef _LJ_LEX_H
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  ** Library function support.
3
- ** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
3
+ ** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
4
4
  */
5
5
 
6
6
  #define lj_lib_c
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  ** Library function support.
3
- ** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
3
+ ** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
4
4
  */
5
5
 
6
6
  #ifndef _LJ_LIB_H
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  ** Load and dump code.
3
- ** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
3
+ ** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
4
4
  */
5
5
 
6
6
  #include <errno.h>