immunio 1.2.1 → 2.0.2

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