From 29b1848551623f8233d016baf8d1664cbbe2ed9e Mon Sep 17 00:00:00 2001 From: Will Date: Sun, 20 Mar 2016 15:55:25 +0900 Subject: [PATCH] refactor dependencies & bundle openssl --- .gitignore | 16 +- Makefile | 45 +- deps/LuaJIT-2.0.4.tar.gz | Bin 0 -> 847615 bytes deps/luajit/COPYRIGHT | 56 - deps/luajit/Makefile | 151 - deps/luajit/README | 16 - deps/luajit/doc/bluequad-print.css | 166 - deps/luajit/doc/bluequad.css | 325 - deps/luajit/doc/changes.html | 978 --- deps/luajit/doc/contact.html | 102 - deps/luajit/doc/ext_c_api.html | 187 - deps/luajit/doc/ext_ffi.html | 330 - deps/luajit/doc/ext_ffi_api.html | 566 -- deps/luajit/doc/ext_ffi_semantics.html | 1245 ---- deps/luajit/doc/ext_ffi_tutorial.html | 601 -- deps/luajit/doc/ext_jit.html | 199 - deps/luajit/doc/extensions.html | 408 -- deps/luajit/doc/faq.html | 184 - deps/luajit/doc/img/contact.png | Bin 1340 -> 0 bytes deps/luajit/doc/install.html | 646 -- deps/luajit/doc/luajit.html | 234 - deps/luajit/doc/running.html | 306 - deps/luajit/doc/status.html | 116 - deps/luajit/dynasm/dasm_arm.h | 456 -- deps/luajit/dynasm/dasm_arm.lua | 1125 ---- deps/luajit/dynasm/dasm_mips.h | 416 -- deps/luajit/dynasm/dasm_mips.lua | 953 --- deps/luajit/dynasm/dasm_ppc.h | 412 -- deps/luajit/dynasm/dasm_ppc.lua | 1249 ---- deps/luajit/dynasm/dasm_proto.h | 83 - deps/luajit/dynasm/dasm_x64.lua | 12 - deps/luajit/dynasm/dasm_x86.h | 471 -- deps/luajit/dynasm/dasm_x86.lua | 1945 ------ deps/luajit/dynasm/dynasm.lua | 1094 ---- deps/luajit/etc/luajit.1 | 88 - deps/luajit/etc/luajit.pc | 25 - deps/luajit/src/Makefile | 684 --- deps/luajit/src/Makefile.dep | 226 - deps/luajit/src/host/README | 4 - deps/luajit/src/host/buildvm.c | 516 -- deps/luajit/src/host/buildvm.h | 104 - deps/luajit/src/host/buildvm_asm.c | 313 - deps/luajit/src/host/buildvm_fold.c | 229 - deps/luajit/src/host/buildvm_lib.c | 398 -- deps/luajit/src/host/buildvm_peobj.c | 368 -- deps/luajit/src/host/genminilua.lua | 428 -- deps/luajit/src/host/minilua.c | 7770 ------------------------ deps/luajit/src/jit/bc.lua | 191 - deps/luajit/src/jit/bcsave.lua | 659 -- deps/luajit/src/jit/dis_arm.lua | 689 --- deps/luajit/src/jit/dis_mips.lua | 428 -- deps/luajit/src/jit/dis_mipsel.lua | 20 - deps/luajit/src/jit/dis_ppc.lua | 591 -- deps/luajit/src/jit/dis_x64.lua | 20 - deps/luajit/src/jit/dis_x86.lua | 836 --- deps/luajit/src/jit/dump.lua | 699 --- deps/luajit/src/jit/v.lua | 167 - deps/luajit/src/lauxlib.h | 167 - deps/luajit/src/lib_aux.c | 356 -- deps/luajit/src/lib_base.c | 683 --- deps/luajit/src/lib_bit.c | 74 - deps/luajit/src/lib_debug.c | 405 -- deps/luajit/src/lib_ffi.c | 851 --- deps/luajit/src/lib_init.c | 55 - deps/luajit/src/lib_io.c | 539 -- deps/luajit/src/lib_jit.c | 663 -- deps/luajit/src/lib_math.c | 233 - deps/luajit/src/lib_os.c | 287 - deps/luajit/src/lib_package.c | 602 -- deps/luajit/src/lib_string.c | 940 --- deps/luajit/src/lib_table.c | 300 - deps/luajit/src/lj.supp | 26 - deps/luajit/src/lj_alloc.c | 1396 ----- deps/luajit/src/lj_alloc.h | 17 - deps/luajit/src/lj_api.c | 1200 ---- deps/luajit/src/lj_arch.h | 437 -- deps/luajit/src/lj_asm.c | 1920 ------ deps/luajit/src/lj_asm.h | 17 - deps/luajit/src/lj_asm_arm.h | 2361 ------- deps/luajit/src/lj_asm_mips.h | 1977 ------ deps/luajit/src/lj_asm_ppc.h | 2169 ------- deps/luajit/src/lj_asm_x86.h | 2806 --------- deps/luajit/src/lj_bc.c | 14 - deps/luajit/src/lj_bc.h | 261 - deps/luajit/src/lj_bcdump.h | 66 - deps/luajit/src/lj_bcread.c | 476 -- deps/luajit/src/lj_bcwrite.c | 396 -- deps/luajit/src/lj_carith.c | 353 -- deps/luajit/src/lj_carith.h | 27 - deps/luajit/src/lj_ccall.c | 900 --- deps/luajit/src/lj_ccall.h | 171 - deps/luajit/src/lj_ccallback.c | 644 -- deps/luajit/src/lj_ccallback.h | 25 - deps/luajit/src/lj_cconv.c | 752 --- deps/luajit/src/lj_cconv.h | 70 - deps/luajit/src/lj_cdata.c | 285 - deps/luajit/src/lj_cdata.h | 75 - deps/luajit/src/lj_char.c | 43 - deps/luajit/src/lj_char.h | 42 - deps/luajit/src/lj_clib.c | 409 -- deps/luajit/src/lj_clib.h | 29 - deps/luajit/src/lj_cparse.c | 1872 ------ deps/luajit/src/lj_cparse.h | 65 - deps/luajit/src/lj_crecord.c | 1671 ----- deps/luajit/src/lj_crecord.h | 31 - deps/luajit/src/lj_ctype.c | 634 -- deps/luajit/src/lj_ctype.h | 461 -- deps/luajit/src/lj_debug.c | 605 -- deps/luajit/src/lj_debug.h | 61 - deps/luajit/src/lj_def.h | 353 -- deps/luajit/src/lj_dispatch.c | 494 -- deps/luajit/src/lj_dispatch.h | 131 - deps/luajit/src/lj_emit_arm.h | 356 -- deps/luajit/src/lj_emit_mips.h | 211 - deps/luajit/src/lj_emit_ppc.h | 238 - deps/luajit/src/lj_emit_x86.h | 466 -- deps/luajit/src/lj_err.c | 800 --- deps/luajit/src/lj_err.h | 41 - deps/luajit/src/lj_errmsg.h | 193 - deps/luajit/src/lj_ff.h | 18 - deps/luajit/src/lj_ffrecord.c | 888 --- deps/luajit/src/lj_ffrecord.h | 24 - deps/luajit/src/lj_frame.h | 183 - deps/luajit/src/lj_func.c | 185 - deps/luajit/src/lj_func.h | 24 - deps/luajit/src/lj_gc.c | 849 --- deps/luajit/src/lj_gc.h | 134 - deps/luajit/src/lj_gdbjit.c | 795 --- deps/luajit/src/lj_gdbjit.h | 22 - deps/luajit/src/lj_ir.c | 501 -- deps/luajit/src/lj_ir.h | 551 -- deps/luajit/src/lj_ircall.h | 277 - deps/luajit/src/lj_iropt.h | 161 - deps/luajit/src/lj_jit.h | 417 -- deps/luajit/src/lj_lex.c | 482 -- deps/luajit/src/lj_lex.h | 85 - deps/luajit/src/lj_lib.c | 258 - deps/luajit/src/lj_lib.h | 112 - deps/luajit/src/lj_load.c | 168 - deps/luajit/src/lj_mcode.c | 386 -- deps/luajit/src/lj_mcode.h | 30 - deps/luajit/src/lj_meta.c | 466 -- deps/luajit/src/lj_meta.h | 37 - deps/luajit/src/lj_obj.c | 35 - deps/luajit/src/lj_obj.h | 856 --- deps/luajit/src/lj_opt_dce.c | 78 - deps/luajit/src/lj_opt_fold.c | 2304 ------- deps/luajit/src/lj_opt_loop.c | 436 -- deps/luajit/src/lj_opt_mem.c | 916 --- deps/luajit/src/lj_opt_narrow.c | 656 -- deps/luajit/src/lj_opt_sink.c | 245 - deps/luajit/src/lj_opt_split.c | 731 --- deps/luajit/src/lj_parse.c | 2754 --------- deps/luajit/src/lj_parse.h | 18 - deps/luajit/src/lj_record.c | 2252 ------- deps/luajit/src/lj_record.h | 44 - deps/luajit/src/lj_snap.c | 866 --- deps/luajit/src/lj_snap.h | 34 - deps/luajit/src/lj_state.c | 287 - deps/luajit/src/lj_state.h | 35 - deps/luajit/src/lj_str.c | 339 -- deps/luajit/src/lj_str.h | 50 - deps/luajit/src/lj_strscan.c | 498 -- deps/luajit/src/lj_strscan.h | 39 - deps/luajit/src/lj_tab.c | 631 -- deps/luajit/src/lj_tab.h | 70 - deps/luajit/src/lj_target.h | 162 - deps/luajit/src/lj_target_arm.h | 274 - deps/luajit/src/lj_target_mips.h | 257 - deps/luajit/src/lj_target_ppc.h | 280 - deps/luajit/src/lj_target_x86.h | 342 -- deps/luajit/src/lj_trace.c | 816 --- deps/luajit/src/lj_trace.h | 53 - deps/luajit/src/lj_traceerr.h | 61 - deps/luajit/src/lj_udata.c | 34 - deps/luajit/src/lj_udata.h | 14 - deps/luajit/src/lj_vm.h | 116 - deps/luajit/src/lj_vmevent.c | 57 - deps/luajit/src/lj_vmevent.h | 59 - deps/luajit/src/lj_vmmath.c | 140 - deps/luajit/src/ljamalg.c | 93 - deps/luajit/src/lua.h | 393 -- deps/luajit/src/lua.hpp | 9 - deps/luajit/src/luaconf.h | 156 - deps/luajit/src/luajit.c | 571 -- deps/luajit/src/luajit.h | 70 - deps/luajit/src/lualib.h | 43 - deps/luajit/src/msvcbuild.bat | 113 - deps/luajit/src/ps4build.bat | 103 - deps/luajit/src/psvitabuild.bat | 93 - deps/luajit/src/vm_arm.dasc | 4486 -------------- deps/luajit/src/vm_mips.dasc | 4241 ------------- deps/luajit/src/vm_ppc.dasc | 5160 ---------------- deps/luajit/src/vm_ppcspe.dasc | 3691 ----------- deps/luajit/src/vm_x86.dasc | 6377 ------------------- deps/luajit/src/xedkbuild.bat | 92 - deps/openssl-1.0.2g.tar.gz | Bin 0 -> 5266102 bytes src/script.h | 6 +- src/wrk.h | 2 +- 199 files changed, 39 insertions(+), 114300 deletions(-) create mode 100644 deps/LuaJIT-2.0.4.tar.gz delete mode 100644 deps/luajit/COPYRIGHT delete mode 100644 deps/luajit/Makefile delete mode 100644 deps/luajit/README delete mode 100644 deps/luajit/doc/bluequad-print.css delete mode 100644 deps/luajit/doc/bluequad.css delete mode 100644 deps/luajit/doc/changes.html delete mode 100644 deps/luajit/doc/contact.html delete mode 100644 deps/luajit/doc/ext_c_api.html delete mode 100644 deps/luajit/doc/ext_ffi.html delete mode 100644 deps/luajit/doc/ext_ffi_api.html delete mode 100644 deps/luajit/doc/ext_ffi_semantics.html delete mode 100644 deps/luajit/doc/ext_ffi_tutorial.html delete mode 100644 deps/luajit/doc/ext_jit.html delete mode 100644 deps/luajit/doc/extensions.html delete mode 100644 deps/luajit/doc/faq.html delete mode 100644 deps/luajit/doc/img/contact.png delete mode 100644 deps/luajit/doc/install.html delete mode 100644 deps/luajit/doc/luajit.html delete mode 100644 deps/luajit/doc/running.html delete mode 100644 deps/luajit/doc/status.html delete mode 100644 deps/luajit/dynasm/dasm_arm.h delete mode 100644 deps/luajit/dynasm/dasm_arm.lua delete mode 100644 deps/luajit/dynasm/dasm_mips.h delete mode 100644 deps/luajit/dynasm/dasm_mips.lua delete mode 100644 deps/luajit/dynasm/dasm_ppc.h delete mode 100644 deps/luajit/dynasm/dasm_ppc.lua delete mode 100644 deps/luajit/dynasm/dasm_proto.h delete mode 100644 deps/luajit/dynasm/dasm_x64.lua delete mode 100644 deps/luajit/dynasm/dasm_x86.h delete mode 100644 deps/luajit/dynasm/dasm_x86.lua delete mode 100644 deps/luajit/dynasm/dynasm.lua delete mode 100644 deps/luajit/etc/luajit.1 delete mode 100644 deps/luajit/etc/luajit.pc delete mode 100644 deps/luajit/src/Makefile delete mode 100644 deps/luajit/src/Makefile.dep delete mode 100644 deps/luajit/src/host/README delete mode 100644 deps/luajit/src/host/buildvm.c delete mode 100644 deps/luajit/src/host/buildvm.h delete mode 100644 deps/luajit/src/host/buildvm_asm.c delete mode 100644 deps/luajit/src/host/buildvm_fold.c delete mode 100644 deps/luajit/src/host/buildvm_lib.c delete mode 100644 deps/luajit/src/host/buildvm_peobj.c delete mode 100644 deps/luajit/src/host/genminilua.lua delete mode 100644 deps/luajit/src/host/minilua.c delete mode 100644 deps/luajit/src/jit/bc.lua delete mode 100644 deps/luajit/src/jit/bcsave.lua delete mode 100644 deps/luajit/src/jit/dis_arm.lua delete mode 100644 deps/luajit/src/jit/dis_mips.lua delete mode 100644 deps/luajit/src/jit/dis_mipsel.lua delete mode 100644 deps/luajit/src/jit/dis_ppc.lua delete mode 100644 deps/luajit/src/jit/dis_x64.lua delete mode 100644 deps/luajit/src/jit/dis_x86.lua delete mode 100644 deps/luajit/src/jit/dump.lua delete mode 100644 deps/luajit/src/jit/v.lua delete mode 100644 deps/luajit/src/lauxlib.h delete mode 100644 deps/luajit/src/lib_aux.c delete mode 100644 deps/luajit/src/lib_base.c delete mode 100644 deps/luajit/src/lib_bit.c delete mode 100644 deps/luajit/src/lib_debug.c delete mode 100644 deps/luajit/src/lib_ffi.c delete mode 100644 deps/luajit/src/lib_init.c delete mode 100644 deps/luajit/src/lib_io.c delete mode 100644 deps/luajit/src/lib_jit.c delete mode 100644 deps/luajit/src/lib_math.c delete mode 100644 deps/luajit/src/lib_os.c delete mode 100644 deps/luajit/src/lib_package.c delete mode 100644 deps/luajit/src/lib_string.c delete mode 100644 deps/luajit/src/lib_table.c delete mode 100644 deps/luajit/src/lj.supp delete mode 100644 deps/luajit/src/lj_alloc.c delete mode 100644 deps/luajit/src/lj_alloc.h delete mode 100644 deps/luajit/src/lj_api.c delete mode 100644 deps/luajit/src/lj_arch.h delete mode 100644 deps/luajit/src/lj_asm.c delete mode 100644 deps/luajit/src/lj_asm.h delete mode 100644 deps/luajit/src/lj_asm_arm.h delete mode 100644 deps/luajit/src/lj_asm_mips.h delete mode 100644 deps/luajit/src/lj_asm_ppc.h delete mode 100644 deps/luajit/src/lj_asm_x86.h delete mode 100644 deps/luajit/src/lj_bc.c delete mode 100644 deps/luajit/src/lj_bc.h delete mode 100644 deps/luajit/src/lj_bcdump.h delete mode 100644 deps/luajit/src/lj_bcread.c delete mode 100644 deps/luajit/src/lj_bcwrite.c delete mode 100644 deps/luajit/src/lj_carith.c delete mode 100644 deps/luajit/src/lj_carith.h delete mode 100644 deps/luajit/src/lj_ccall.c delete mode 100644 deps/luajit/src/lj_ccall.h delete mode 100644 deps/luajit/src/lj_ccallback.c delete mode 100644 deps/luajit/src/lj_ccallback.h delete mode 100644 deps/luajit/src/lj_cconv.c delete mode 100644 deps/luajit/src/lj_cconv.h delete mode 100644 deps/luajit/src/lj_cdata.c delete mode 100644 deps/luajit/src/lj_cdata.h delete mode 100644 deps/luajit/src/lj_char.c delete mode 100644 deps/luajit/src/lj_char.h delete mode 100644 deps/luajit/src/lj_clib.c delete mode 100644 deps/luajit/src/lj_clib.h delete mode 100644 deps/luajit/src/lj_cparse.c delete mode 100644 deps/luajit/src/lj_cparse.h delete mode 100644 deps/luajit/src/lj_crecord.c delete mode 100644 deps/luajit/src/lj_crecord.h delete mode 100644 deps/luajit/src/lj_ctype.c delete mode 100644 deps/luajit/src/lj_ctype.h delete mode 100644 deps/luajit/src/lj_debug.c delete mode 100644 deps/luajit/src/lj_debug.h delete mode 100644 deps/luajit/src/lj_def.h delete mode 100644 deps/luajit/src/lj_dispatch.c delete mode 100644 deps/luajit/src/lj_dispatch.h delete mode 100644 deps/luajit/src/lj_emit_arm.h delete mode 100644 deps/luajit/src/lj_emit_mips.h delete mode 100644 deps/luajit/src/lj_emit_ppc.h delete mode 100644 deps/luajit/src/lj_emit_x86.h delete mode 100644 deps/luajit/src/lj_err.c delete mode 100644 deps/luajit/src/lj_err.h delete mode 100644 deps/luajit/src/lj_errmsg.h delete mode 100644 deps/luajit/src/lj_ff.h delete mode 100644 deps/luajit/src/lj_ffrecord.c delete mode 100644 deps/luajit/src/lj_ffrecord.h delete mode 100644 deps/luajit/src/lj_frame.h delete mode 100644 deps/luajit/src/lj_func.c delete mode 100644 deps/luajit/src/lj_func.h delete mode 100644 deps/luajit/src/lj_gc.c delete mode 100644 deps/luajit/src/lj_gc.h delete mode 100644 deps/luajit/src/lj_gdbjit.c delete mode 100644 deps/luajit/src/lj_gdbjit.h delete mode 100644 deps/luajit/src/lj_ir.c delete mode 100644 deps/luajit/src/lj_ir.h delete mode 100644 deps/luajit/src/lj_ircall.h delete mode 100644 deps/luajit/src/lj_iropt.h delete mode 100644 deps/luajit/src/lj_jit.h delete mode 100644 deps/luajit/src/lj_lex.c delete mode 100644 deps/luajit/src/lj_lex.h delete mode 100644 deps/luajit/src/lj_lib.c delete mode 100644 deps/luajit/src/lj_lib.h delete mode 100644 deps/luajit/src/lj_load.c delete mode 100644 deps/luajit/src/lj_mcode.c delete mode 100644 deps/luajit/src/lj_mcode.h delete mode 100644 deps/luajit/src/lj_meta.c delete mode 100644 deps/luajit/src/lj_meta.h delete mode 100644 deps/luajit/src/lj_obj.c delete mode 100644 deps/luajit/src/lj_obj.h delete mode 100644 deps/luajit/src/lj_opt_dce.c delete mode 100644 deps/luajit/src/lj_opt_fold.c delete mode 100644 deps/luajit/src/lj_opt_loop.c delete mode 100644 deps/luajit/src/lj_opt_mem.c delete mode 100644 deps/luajit/src/lj_opt_narrow.c delete mode 100644 deps/luajit/src/lj_opt_sink.c delete mode 100644 deps/luajit/src/lj_opt_split.c delete mode 100644 deps/luajit/src/lj_parse.c delete mode 100644 deps/luajit/src/lj_parse.h delete mode 100644 deps/luajit/src/lj_record.c delete mode 100644 deps/luajit/src/lj_record.h delete mode 100644 deps/luajit/src/lj_snap.c delete mode 100644 deps/luajit/src/lj_snap.h delete mode 100644 deps/luajit/src/lj_state.c delete mode 100644 deps/luajit/src/lj_state.h delete mode 100644 deps/luajit/src/lj_str.c delete mode 100644 deps/luajit/src/lj_str.h delete mode 100644 deps/luajit/src/lj_strscan.c delete mode 100644 deps/luajit/src/lj_strscan.h delete mode 100644 deps/luajit/src/lj_tab.c delete mode 100644 deps/luajit/src/lj_tab.h delete mode 100644 deps/luajit/src/lj_target.h delete mode 100644 deps/luajit/src/lj_target_arm.h delete mode 100644 deps/luajit/src/lj_target_mips.h delete mode 100644 deps/luajit/src/lj_target_ppc.h delete mode 100644 deps/luajit/src/lj_target_x86.h delete mode 100644 deps/luajit/src/lj_trace.c delete mode 100644 deps/luajit/src/lj_trace.h delete mode 100644 deps/luajit/src/lj_traceerr.h delete mode 100644 deps/luajit/src/lj_udata.c delete mode 100644 deps/luajit/src/lj_udata.h delete mode 100644 deps/luajit/src/lj_vm.h delete mode 100644 deps/luajit/src/lj_vmevent.c delete mode 100644 deps/luajit/src/lj_vmevent.h delete mode 100644 deps/luajit/src/lj_vmmath.c delete mode 100644 deps/luajit/src/ljamalg.c delete mode 100644 deps/luajit/src/lua.h delete mode 100644 deps/luajit/src/lua.hpp delete mode 100644 deps/luajit/src/luaconf.h delete mode 100644 deps/luajit/src/luajit.c delete mode 100644 deps/luajit/src/luajit.h delete mode 100644 deps/luajit/src/lualib.h delete mode 100644 deps/luajit/src/msvcbuild.bat delete mode 100644 deps/luajit/src/ps4build.bat delete mode 100644 deps/luajit/src/psvitabuild.bat delete mode 100644 deps/luajit/src/vm_arm.dasc delete mode 100644 deps/luajit/src/vm_mips.dasc delete mode 100644 deps/luajit/src/vm_ppc.dasc delete mode 100644 deps/luajit/src/vm_ppcspe.dasc delete mode 100644 deps/luajit/src/vm_x86.dasc delete mode 100644 deps/luajit/src/xedkbuild.bat create mode 100644 deps/openssl-1.0.2g.tar.gz diff --git a/.gitignore b/.gitignore index f854803..e25de36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,2 @@ -*.o -*.a +obj/ wrk - -deps/luajit/src/host/buildvm -deps/luajit/src/host/buildvm_arch.h -deps/luajit/src/host/minilua -deps/luajit/src/jit/vmdef.lua -deps/luajit/src/lj_bcdef.h -deps/luajit/src/lj_ffdef.h -deps/luajit/src/lj_folddef.h -deps/luajit/src/lj_libdef.h -deps/luajit/src/lj_recdef.h -deps/luajit/src/lj_vm.s -deps/luajit/src/lua/ -deps/luajit/src/luajit diff --git a/Makefile b/Makefile index a0a62c1..407250c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CFLAGS := -std=c99 -Wall -O2 -D_REENTRANT -LIBS := -lpthread -lm -lcrypto -lssl +LIBS := -lpthread -lm -lssl -lcrypto TARGET := $(shell uname -s | tr '[A-Z]' '[a-z]' 2>/dev/null || echo unknown) @@ -24,37 +24,60 @@ BIN := wrk ODIR := obj OBJ := $(patsubst %.c,$(ODIR)/%.o,$(SRC)) $(ODIR)/bytecode.o -LDIR = deps/luajit/src -LIBS := -lluajit $(LIBS) -CFLAGS += -I$(LDIR) -LDFLAGS += -L$(LDIR) +LIBS := -lluajit-5.1 $(LIBS) +CFLAGS += -I$(ODIR)/include +LDFLAGS += -L$(ODIR)/lib +DEPS := $(ODIR)/lib/libluajit-5.1.a $(ODIR)/lib/libssl.a all: $(BIN) clean: - $(RM) $(BIN) obj/* - @$(MAKE) -C deps/luajit clean + $(RM) -rf $(BIN) obj/* $(BIN): $(OBJ) @echo LINK $(BIN) @$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) -$(OBJ): config.h Makefile $(LDIR)/libluajit.a | $(ODIR) +$(OBJ): config.h Makefile $(DEPS) | $(ODIR) $(ODIR): @mkdir -p $@ $(ODIR)/bytecode.o: src/wrk.lua @echo LUAJIT $< - @$(SHELL) -c 'cd $(LDIR) && ./luajit -b $(CURDIR)/$< $(CURDIR)/$@' + @$(SHELL) -c 'obj/bin/luajit -b $(CURDIR)/$< $(CURDIR)/$@' $(ODIR)/%.o : %.c @echo CC $< @$(CC) $(CFLAGS) -c -o $@ $< -$(LDIR)/libluajit.a: +# Dependencies + +LUAJIT := $(notdir $(patsubst %.tar.gz,%,$(wildcard deps/LuaJIT*.tar.gz))) +OPENSSL := $(notdir $(patsubst %.tar.gz,%,$(wildcard deps/openssl*.tar.gz))) + +OPENSSL_OPTS = no-shared no-ssl2 no-psk no-srp no-dtls no-idea --prefix=$(abspath $(ODIR)) + +$(ODIR)/$(LUAJIT): deps/$(LUAJIT).tar.gz | $(ODIR) + @tar -C $(ODIR) -xf $< + +$(ODIR)/$(OPENSSL): deps/$(OPENSSL).tar.gz | $(ODIR) + @tar -C $(ODIR) -xf $< + +$(ODIR)/lib/libluajit-5.1.a: $(ODIR)/$(LUAJIT) @echo Building LuaJIT... - @$(MAKE) -C $(LDIR) BUILDMODE=static + @$(MAKE) -C $< PREFIX=$(abspath $(ODIR)) BUILDMODE=static install + +$(ODIR)/lib/libssl.a: $(ODIR)/$(OPENSSL) + @echo Building OpenSSL... +ifeq ($(TARGET), darwin) + @$(SHELL) -c "cd $< && ./Configure $(OPENSSL_OPTS) darwin64-x86_64-cc" +else + @$(SHELL) -c "cd $< && ./config $(OPENSSL_OPTS)" +endif + @$(MAKE) -C $< depend install + +# ------------ .PHONY: all clean .SUFFIXES: diff --git a/deps/LuaJIT-2.0.4.tar.gz b/deps/LuaJIT-2.0.4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0713a5d6b19cea931eb4b96c9714584dd009119d GIT binary patch literal 847615 zcmV+aKLEfViwFQ5>r_<&1MEC$cN)i*{+j+3739e=e$Xre$wrpWU_cfL0u7)zKJU%s z6y1gBs5kc_q!+*cKKE8tuQW)C6;EbH$ddB)W$Ag_95(gfqEHtUTx zIS1{N3u>Aw>6#|tAU^S!&%7I^tBP{LJj?KX!?B6slNIyW;*MN-)DDV*JIBKANpP8lt z6bz7?k2R5w!=UIcDm0KP^08&Ta;)q~3}0D>o((J+$I%^78Rz&L(*kTk@TFs#&KifN zIks-#i2RPC%%O`eoEyf+A|~B-0uWV*fD_;*vnsp%6&L|oFsU%$YuE}lMZ@usJ@~X8 z7}O-L<8glZVS>fX&jw^RIh}v(P6uQ-BNx-j&%^$pPfFbx+?Oik<8Xd9xttS#n0CkW zPh@gRy5mper{TC?A%kBori0mxOs2~4{9-g5K-+NK8(sE?;}7IL;EgA9G8&!_=RkBm zA;?gY8V+Vi?0hiooxyGQ{ctp#f2t^_!}%C#o=&EuOD?+8`LK66>Q2eU<@91Q8vy%0 zkR1=lr&HiEI3JAXDgn08NCrQ{9hseVM;)x%2P+fzY`e`rM3ECraE|p z2c85yq^&k;ZM9he-!ilnSy5luy%dXp9R~~}O$VjR2FJ$Rw=E2gO&(2QWEHTIUUh0X z&*AVn96pD`|KH*8TShY7w7}#X?SWxzj$QDNk{j?QH0D?In#NShXq@7*hJmW)F@8hV zo)HAhCW||z?}S%m#3*+SkC}}6!sXDYx!Y^teHMfxA^Qm=||a%!bIS> z#AG+jB#}|^g`Z)Ax=oYkag|Kj=g@$>Pdi3{$};MbJb7Bz{at^x~l9nfJ| zy4Y8|MuEcRhI$5FK-uv<$Df5zDJ&#M$P>d~2>5>hcNP>TBf}1FE9CY28Dyx*>=(iU zO)UdwGIj!}9DPrV9f5~33t3p4sbepVtI*@b9haw4Au=C5;gK!Ig= zfB4AbVejs0je$?&5fKnXlniYc$+f7rID=Tw0P90Bjt8v2XN;x5#-a`Z$>chIr981o zDd*iEe;!Pa327?l!?C!mE7QS9T(%VWJA7Mo6py}RLW#?<(Gei)LAfU(k4Y``y&B|ED8XgV`Q>O1rOf+d zNYslbpSFI)_~onqU^ed$r{$NgL|a)Ij%RZy%zk}8glQuPB715J$hc82mo3u^^D2c- zXh4ZK9UP~jpepuQ+z(Y~j*6^dbyHHkP3nz{%^!!7e9S~di8Yp zVS}rCeI){AqQv>Qdk#~yU1jsxr}H#S+|iY-#v(?R0;|c`W|QquzN79A3ki`KtPkef zsKjvnPcX{u{B|-^^*eO63@OgFQA}(bc=JBqS;UK8TDPjJB{KuRVNta)hsiCUfO1NP z@eW`y5oy;HW7~niL2?+)$6(CUzz|Q;!1Js)Xl1*gr4g1>ic5pXCZ9$Ux=jTP2z0YN zliYApw-B7tx8Qtb@(+a+a!oag5L3>DhH}oo%gW_=n^*-DM3Bl0mz5^ZMnt4M-;Fq< zC{xh9XOZesIsXY{IVRS%Zg`~XLJz<9EWB@?)O2=JvqRHVU^-xV`xDr$O{)Gf)-dE0 znO{lOBKT-A?mEqO!Kx!s0girpURFl^C~%p&2vnqME3-kLPd6?ktBjQVFaPCwP#@hM ztFOPvt2lpsDRH$VABkawW?+ElAx?aq%2{7ZigG#}4bW(1pyRjQls`jU<88A^x)A~p zZ{^Whwlzc(N}YH%HqAuNgGP0Qzkv*1(C}7XMJ0s*aowbN6X;O}TWBiukQ@G64=q<* z82+!fZw`{{gI0V^J&RxeL-|f<1{+;hivcXd^)olj@#^) zdHHGyr892gLB%htXlR_w%H=Z5gMjK&59{8SulyB*`44SsF|ZpBfty0vT#;C49ME%s z_r-T}vKLn|!B#qo zbmdM?o-Dzk04f#;7C^Dnrli9NlnzoD9DyvXm~grD!w;#hUl30CY#L*p0S_3I;nigX z*)3;joR(8PsZ_>uZ<&1g0@MB-4^AYTjWRNR%H$Dgc=?v*F1cnCE*SUCq7h<$j$r~G z+2}?xOF(46&Ilzcf&#(+2wF2z77P)V?c21>vuHM{W>G}2kKyt1Bz2<(mRq2x({dgr zT?V8_BxW)VT5Mb~#aX@(z}pB1mknF-HuJb_L5nKT>^!enZf84uR5~G~#Rs{U655g5 zW{F-#?ZuwTcajTyHBR5Vd}ChZR*!d`oXymV&FKPX2Dfv>E{~m`iX(jRBMqTYdI?v1 z`4TA{30U2+Sut5Og?nitP!YlHek&r5420P_G4islHWANpp;Z)4<&!5eYEknl5psK0 z+DJ%*qbiDKGHQ1=dU>;=s269G@uv>Yhfz(*5hH*n9?)N4|9?8@_Rj}@%K5(?=fCO) zhmHLHe`A0DdH?@ge8iMThqBOdxG5;r;*Sy?@Z!(!G6%d~L35dC>0@5Fmx;$5T+g}k zsAZvhn$*4u=@mY5zVICWVEoLnmOM~dWq7(|afp}4i3fcOCe8c5F% z?o8&d7z--=-lTVU2u$V_%`x#{leS_OLsB(m;plhdcZC2iJE$(HWtevz0^!qG9!0Ib z@lQxGjfNXwlSREN!|sqe*=H6uxKzjb5nAwW;dqcIIv|$Kj+B2Xv;*sw>k6Tr8v}=+ znqQJ{L>+UM{VB)UD{k0KAsNQLvL6v zk=?3MA*&|*-!B*y;8wFkTQi)$4oGe4N0AWJ1m$;#$(Gpxt8He9L8ga{JQH3*S6~bO z#(SFio<>{t>~Him+q}o+9f_9f+Zl&ug*avwz6h58G;y{Nhr^o&R3O|~Is^>F2m2#F zgfEXznzJ1UX2^hI9-&Ml%X(8lJu6&eL$ro4p~z?&?k$uarlFIC3A4^g1c{>Zv$cye zI7KK_xilRLNZeBstSU~g6ac{WA}vN*%M%xeB)HMyRaH1y2MU~9#sym&dawfG+zfV& zzrJ(yQCAgAUdzK*!T3$;;+fs(ip%Eho|H`w4fMqSwwZpGirU11ppH`F1dh9F2n#0& z9IJ4O15fp#js?Gmm?(rv)6|_1l*|DksJR|LwW`DK>jeZ8pIYvwt6Prkpwd__h#d+a z1I%KpVjgxcOh>!^96EUH75Ht~aG_Bc)>TUMBz!@nU6tQf#StakIat#>A7S?} zWo(#dJetRb_av%j0#C{~gS>GH3Ft<&R%JYu{W8l%cQV)QPHcrDJ|NpI`G+$%ohwJo zSKRjoav|?q;W4m+xy&g6An~-O4EQ#yuB1c_bw8gH@vM!pyvxNjPGjjfK@qo<&fbV< zm?j8|$N+sVBbC~0=N&AL$MwyK6XYXKkwx7&hMw!A%K-gUcKu6vqWb?yD*uO_|2(W8 z=IZ~}{{D0Q|6Kn+y#9w_@J7+rkplB5M!pcjV+bL8t;Rufv8=6EyaRgn4(f+*pkFnTkY-gEdq-V0Q10sz~X{Lq{-gfLwcwmCcqfa1s1MVMB84o(E>GK zltl-Wk|1P9z(-+U;>7T88qG~S94^MmTOm1KNU8Rg^<|5XfNNsMLhWbf>C~nb()A1q ztAR6S-Y_gTDn;o~rmngh96hE)%qFEhR>zrcMn8C7ZzO3RTJiWZ?yu+rQi#r8#LE~(?1oq*Hx?}prw1K{H^lYgND!xCCq1>^{{ zm8@leg^l)?v6t;D+e94)b^O`2)=gkrb^J-Mes8OC4RuhjySGOVT@f!b#ZW>vvr^tc z`>(lr-Y)PXR@5?>Y`C+CHQ#Efo$|*z{zw83bo0&lz;UHJ^XrG~C~bP|0h?E`1p=6x z^=d?`a04aYU&?P=WK|ypRQbrGcnjlkiSw~rJ;nP_(UXS%*=?w#QvCfZ3Qj0tA#oP( zYAyEPb~fp|h#0mDJW`gX&ZlIBP@v4G^VMZ2H7Z3&AN zXj&&8Q=Hav(WYHshmp66v?&L@eT~2cEGS{QN6HfQp7_K`++VtKFq-vyp5u-lZHdKP znvicAyPiMfjCSi&h&T7F=NmW7HLd=$_Oa+uD+f?5y;2sd!QURU|5@#2Aw==sue)lBLEV4^^ z`;=QX$+F_<&j0W))-#`O1)ZZz0VJ6&ZjjrmsU-@!AaEvy>z0y!#4Z_ zr4IZFjKE|k@=&Dws{9#bZ^yfPR}-DeJBtOBp8~Dot08WVOFak?VD;7coy$u20tUQ0 zE}`pio=5y8Rz3@k4d1E0dDDJdZImKH_zke*Qa21%j+a7?A8h0R;|C!r*ez#HD`Xpy zkv!j;qQPv0;XBGuGai?chZ`jlz_{daG~X|gmB*IHrSwC%60w+WP(b60kUvT)InNgp z@cki+{^oe(_svy&cB?MCHzRjw$iI|#HBK9N)T9|;r3`<7HZgP<0EAu? zfl6^VP5_rq-eEX39cKEn`fDIXKh0btxN2_yd`2>nn`^hjO7-l%cUW~Pfv$rWGp<2 z>fQzaYY@Vm7}QK5&SlfKK}D$4jo2aM*Q9$fybr}^7QPux^Hc0*QQO1x@@rxac=b9v z&SDfTB`erat(TK^8#{cDRv5`T<2M`Xlx8IB-zW;CvwG=7IKV>&xTK#W)pY-3+mJRb z-G!wgo^ZD{CebgFmOpIoQQ|SK4K>BAbn+2ezLsi=Ag(E;*yq#`-&cdC$8eDP%*GTf z+cBuPC#iR!Av5_dMw}C}V8I&qn)pi&qc1JU7p3th>mul=?-t$(e`%ncX(=5Kw=mzS zN19swsC43sEqh5w3XBp!@b?`1O2)Du?1k?h@oEr5H}4Uw-qlEueG?ZC1 z=ye?r-tsijKIlT+gsUwH@W5lVu^ znoT`Vyz~)Y8)X^)6mP)d#uDSip@64ify)3-e3|CI+4~bXNz%M77+-D(0R=e(MPqW< z>8$R|tgE}Hr+T`V>gwvAVynAqySjUJot-TrGb5{FIx{0DBC?J>5b=)}DhMyH_r*sP z0ewMy6%Q1BMbuYb1UVH^6hQ@#SM*gp|G)D&A|k7*duEs2r5kptDl_7VC!XW?{EqMM z`^(`Y26xTQI?cQ6ze+#s>;(AE%Bl>u4b#wDRe+b??v>tqJBtrcD&K~I$zcKGn2wUX7Y%z;p#|$t*>yaH&5?y5iw=wZnig2i4rw3B zY9Mi7mqK}8A@^QBgvI1OjqZ_EChG|elw>@On8&WPnP`pSO<9Z}FBq$xwe^R{(mNd% zL{5fdcWdk3W_j#Z`~7fxCw!QIO@zUb$~GNM;E^0|ffFd7>iXUo4yU8E+>@JGw3m)= z30p)zY);4dbb<}X{W<5_E!dhjc5coeUAepx-iQlasUYflQ$G1d@d(b5kf=oMh`jus zcOq-ByXfeCd@xuvl+h=HY?e?miIOZ=$pH3C7Qqo!Zh^$eYr8P<`@0$J=ybFT+is$_ z^@eE|gi;>9^UfXIlR55ZWFss~2h$x2c{0wlq)};YZ5T+~zJ{TtN!` z^spqA@XpN#t8mQiKG<2`-Fer}9gyc+Ya->x{qhwLS2u6p+qiqP@`Njw=jkccF{D0s zlOoLblYw^}csJF(DT_7avzU)E>~A`8?_a%lhwnY)+(|fYF$ikTUp;De*6;6>JG{NU z#`k9Mg!fVmK|&jN=P1J69+x{+zMoG?+$l5#z3eCxAu|rQw_SPp5c;1^QD5op=ltOK z2vh52OS2%rM#uGLgwbq zdKmSx6ncU8p#jBWwz`7ozPo8iK92$HC&K;FIY+7qt|-c9rQB8I3x*9pj4`rCe3o^u zl8h7Nr`A&*7V>ng`Yy_!W=$7^~dR6$}eo9*n^F#)4}=~Br!;_h}abBZY&== zv}a(5T}=S()Se7|Z6g_am1%Rsv(2*vJG<#oxO{n` z^5w<|6s?0ee6YE-dJ}ta81d9$XRvrdIGuoAHm&IVpj+UPf@Iq;*!w9gE2BHoe(W(r z2h0bKnW*snutv+8b=J{Y(vMXPm~%kRn0}3TkWGaqAmJ^Vs2#l@)?Hk=_FjxeO<}H2 z2LrlV9!Bo~;tx6XS(A^9s>NieRn5ZLa*nQux+N-$<75c`sqHfvonk4l+Cz$hqnL{J z3nw?K&4_iIPEOVs{jK|0ID=c zCU>`iVw6O1D2=1xah~u3AR{6HdDT~ek(UNMBA&G@#exI8aD*)ZjSG@?$mMROCk;^f z4Mg~(i++>WlWl08V%zd5r<(i2svJcXL4RKTPybM zWSZ^8TtEWf*9;tS+3>-Poy#3%0vfAZNS^4GOCPS@yIucWJ_kaW-94IadrrXg3G+Rz z!i{^i=1D)EzI&yW4&Z|Eg%}sx_Grbkt+neQ3F4bT(u6Zf)Po%i1Kn zA8_emLI{g0>d6q}CNTUNpVAc(M#l>XU#e*VjT?DJi%&HRE1K+KQB`9=PG&?*L>_hg z4~*H(&CS{)XqL1)MeVT~>LlVG!wesQ07K`1G)bjFu=Hf6)$3|;}4>|PzMYN4);LUlXB?IZN8uQbGTs5oRQ4Y|PVFi^u@G)8tu|i9@1KomG zuWlKfG!Vih++79BH#|XO+I#u(MVQvL@M7mmduRQn850kupRw#;@yfW59T3mdDfxwDK-61U^U;9(pVk8C?3`&ZrI$U?QH$f_($SaFO zbxqVAAJ`F?Rb2k3m|#Ve413J71{>oLDJw;hO2ajd37F%U=BJycL-Bc(+uPV1<3U8u zmlQ*rhur4_TspFLQP@MT;ky|&u4*_^stNTCW2h`I(VL+afGTmawG-ya2z_nv zWmBvyR$cSC$7vW=8tk&H-zKzWxW0O0BW#XgOkhQDv(@(0fGD}1$!9&w7)HZ_{8p7I z*%-r#jkTxR>7;C>QJbD|U&MRtbFa1QMK`3{UEV1>NQT21!+r-#8sJGr7r*ny>OGAq z>~Y-3xU1f|bARjJI(=KC5pZotK7I)Bz#a%Stmr63G0rOtQ6&7E93|Cg!OWv`(K|X9 zOGoEYd+~+R(J3Jn1jETvCviS4+UcMzXDUsm^H!TNSQX)Znm$s^EC-nkBVT|Z$z|@r z5X2l?+VOblSx(R*9$|HqSo9IDi&XXDCplM(3pu$HBbIhs&y36H(iA7R7ut}c8_T>@ zmjdi87IN;vaR-EEdrSQlTxd=Xf_7KjZIhbLZ|^MEc%tXyF}<-d%uAOTpX4g>IE0je z0s1++($RwnLoh`TeNO(7!#H|W){S|l(RpbOf6!8wm)b?z2I)w+3e;3-H;((YXHJxj z_6KZhRSx3XGpfdYsvDK;b}%{T`IqR(KUe1COA8BD)f~RIdobDsN#qB@HpYYbyV2e9 zmXnC>1T?J-k5tS87t%ZN?xAjnrFu|J<`@PEw0ieh^(9E|(>RF3+XTX7s>%&*qAh^F zvLRzK;LhrNq$?Qlf|C&mY$I$+gMJ*F~nHgU!?znrH9jse)s{6C4Y!-~g$y z*j~6&5*%x323lJ&Mr~W=Il5NygB89k42^?f+|SaakH@srmAt@x%=A4+TGpw z^|CWGuQb?)zVy`pl8ih@GCETJ)gp)w>&Op7kf%%PgJBKKZOVGdTk8 z-rv2man}_&+>pp+lz`CbG23CV=`t{_QIV~Ym(?*)zk3J$?y&DfJ!8|X=5ZQj^(4e$ z(vQ)&ke8sNwjUqO9DK9+Njk@#+Z*RX+EGtA|LJ%Aq@9<=}F74R6@nJZC^)!W7@^Sl081F!q@CL?67u!P?wa%G zzH~~~s*pGybdb@6+ab4;~<^>{ss`D(SB(D89gM*|Wu7z&srF5w~99T|O4EAZyQFxtO z*6T#yI7addF!FOMuf<}jS)g#h6Ms4;fk|@*8q8d^)f=Ez(4kG<5j^BGF$v)J7`9+d zPu7eJ#l)d1At>Y8*Al(v)vE2iWHBwfyA-!}qg;vo#FZ?LPl;8nx{i`qEz15Eu9-*A z6vYfV%tQHFEeBZCG=>pfL9m(gHS3Zdbdwf6opw5_p5Gc(-s#?c=pDJv{i=Z;NZ8dk zl4>LY{D-*2+xaofET;LT*ToiIk;V^iB*oT*r4L>Vo1N#GyxY@pc=LF?x^u^yHBlq^8?v(5R86GrGV0Q% zY4^tasEEBRT*y!*BZ;chgDRFZo%&yUwh{ z8XMk4$8EEMNRM`-LUzz+dG{@5k2O5s=#<5mj>tTqXdvZB5Mdd-Cu>ufBpAv{HF3CXGQ}I?S}pVb%?H~CZ;2nggb`%3)ZH*L zVRycG_vVAu&ASio@Fg`<%WIZQbpxHTRuV#M{4)k8n%YkDPTvkG1*9X8pwS?%Diq>` z=*PXGdE;gn5l89o8 z&WaSALZ_COc8kgv?&our{#twvUfWFCug$fS@Y?loq5WEQY1}1s1BKhomsjuIf*nQ( zlnlj&RJ^J@A>Yp=;se?1Brpvn`7da z2zT;Xn)<{3c3=yAB`ht_ZiXOio&pj=gJ$EcdyN)r-EFWxYPv<md(QQ;I5YqbGVg!f@(bwe6EU{TykqSPhFZ1`V^^l#Qbfrn$j;vB^l{ zrs{&o4|!Ra{A4BLmqJo08@FZ&c&9=AeIQDv!_>IMeUyvq{+c(R_Tpsd`ovfq4D40o zXk48mdg8|T0H)Uot8lP99u!2kCr|~8<*V=WEaZcCwShLe${8OkIm{Ko1Iku$>CRG= zODHiE3@HD1pYY>rqH-ow{2nM z<{7HV76n!Gu2BMwi?Z%+a*)p3zG>`AEMtm$8+8h7<9yPQRau8C@SC=+x~K~?e7Cj@ zs=vm}5!V%}MPzklaV&{wI%U|3aB!}_bAA5i=4Q2(dx&m4h^xk+V?MjcE9X`N!GL3$ z0|~~3hhfC6ov?YBPKSt~q@wRtZ1&s?e-tVT>es^n11S&FjKz$&kE*xs?5BqcLlnc4 z>Y?jqH8YaMgE>*(YF~_0N@OG;DFPF*=KJF3MeX1LDq9f}Qd0*w>8fv!6}+gkug~CkbEnr0@zr@(I2Mx4SSWfURi5{}`=0NB z3;gSdhd58VM!#>EUdBdtyfh9)SuVxSiZXP%ZZHCjoOj(*hMy=Ll2a40#y{ z%A}vvq-&|AK;XFJ)7;$nq^fgT<1sK~u&=8LO6s=A#r9ME!KxR%V=LJ=SX|VU(X6-E5S~IKV2uV?*p#czzFrl z#@@bt|DNLgP0Cj~7{K9Pi`;P9*y4p9&nKL3sgZefmzLG%`iQ-^qxl8#2H7z&$4%x1 z3jxh0aX$M_eGKmNbkHR4^q_6HqWm!lkebhVG|U&?JMEPeg~tg9EYt-A zN+G<3OYMahP7er>^NI?RZSU9&Urf$b*9gdiLJv-Kn}RNn^NkWg1PUhN;{D4@d?wsm z^pzUYqR~r)<GbRi7Bm z<~pjf4yK7<5Dj-_Kpu%MN)}%wt=3|}4R}S7vu&8my*-M0l1Gs6cwUwP2bytZJU1+^ z@?p{0M-VNqkA6HLjDj&YMNyuW^C2GHPIv=n3?18}=}7lypRQBi5^T-Ih0et{2Tij+ zrpyCj@hCYE(TG;pB0D(y>c=q`1yNDsRkVH}S#WMsCweLC+wvAQ-ft4R3E$7QBdK|E zR=~@Uc!0%c4ZBqEo0_W1huh{$JLUXPu!F_X^uPkb$`VC&0uQSi9;VqNw%kOOW_%Ss zQGu&<3*O8$=41HCUI(Nup;45Jq)KSsabSJ3<&A`zr-RWmU>R6N52N88$SjV6p;5!$ zuf)T(-W1yl@x=t}^$;!?#XN#7BH18e^TyVlQ1qo|pYgny208W8hLimeB2u*mb%b#+ zs;UWcXrA%^n5oHD0Q3-5aqa(E(+`Xy*UxxSv{kX_2fmV7kAZ??OQI@Z1&@3CoUdb= z-BMg(`R;n}OxZgOdzZGUCgPP_k-&|b<4BEgUe!nkRpT~kGpmDI#H}-0%!|NletYX> zNkpE3)OE(Bk{-p%Xfob+lqPm>rMY|-n9pGU?bi$$>CP)`DX{%Fq?0n^Ldlr}7r(K# zyK(Em-L+dMq~H>&kwrV{@3mk?bG`4~a}9tjIt10E3M@3YTHhn#B#?iU%dq--|9lB) zTGv#`=&3`{>`(Vfh#}JgB0Xnuvg)!Qd*6SwwSY ziUWM^!I4)T8@W+V0aa#5Gsu;5SO+&#~3vMCl!MRVjdXhe(~t*2;md;n9zQp zpTC>|%pu)M4j8&eL=!aNb-A4bHMtYmL5N;CW94|%Wt6)#R04NbqC)22#o{suq>-nu zIpJLcIxJEx2h_UWmkE>Rk4;YgbS?FlmUWZ+gK?%ha%fSc1Itq7h zAo2_M-i@uT&8z3ETOB7#-V=#&Dl3iMSajN0h^VDQz!xQBI-!-_e|$Udg&H&O1=q@3 zY$NjP;@PY`*zbh0nq}qPj0X{RJ;~|K`_pLH*4+rV1sk!2+{#LX_(P?D>K5@^{&UBgBedB+>5({m0Kg`kLF z?xfw<<~ymVLKe^fRzlqG*Av0;no%K8xzZk}qM6mC7I=oD>~)DLoO}0sWy!^PFPgwS z+>0qHfwVaTO7h|_f*hK6omNk7DWZ)4hQafK%r(b|z$$i8R#=CHsFWfB;ofoz?bc2; zty};aq-P}gZj_BWioYpmPv1dkyF3~bP4>x&tYR<99cO)MtuVI_2V-?StH2melJU}1 zY7p#X8G)>BQ&O9kimWUvWr+pf^{A-3`v0sg*gdw1P#R44tU{6;YP*uySCfO{)1>fn zqFz&6{P2F5pd?8fbKU|aw>WwvSMTm@Sj`xXlg&Epz^>KgHp4>DR*B3J73-#F zyu$sR_4{|~^!EA4@uOCJs3tcr#V|D*IjH877r5+*&XuJ|TntDfM+tMDBqrQTY<$3E z6%hu@czH#Q<6w9xi`|9;P)~P_DT{scMeyOBnH}-jgeZcOq6b!Z%f@@Tlk=WG zj*gD4BM50k){Cgxv#1?B3OozWosm~r8{L~nz%dH8N7G5pjD(MhW&XjH`HjWP^A8aBuBn#g2B%{tZ(>=h_LiSM;G%FUS@@MOFGc+#3DMk+i%rmm z)?K)_A{%g+T={?-kU0P2SLI}B2hZppOaazM*rdT9DECJD+; zmh34WYlrXx58`(BxXu2qnta}}Ocd{JGCoir7n17vekR@;HK)WI33-cWkWzTqL(c2L zXwB`{4*Y|ro-Rb@2iD7wyvxj8z;#^dq<7>Fs!%yG6jUelw=nL^b+m(XoBWEj3cxG^EG18$n-qzeUR`3FxUfKjiO}Cm0nfa zjOD^~g`{dRcpS8UqcV5G^(a^6jG3XHAdl!ujX8P6HzyY^x0jaBW=`%9+MAXPCjFdX zSp95ipqgdtnO7`1hVi&oaIhCFXbMn>H1$3kzH@KLu42t2 z$$K49Jv8&RN}}hX5LLB0UxyeJ_ho%EYow*b5#pZw^lfAn@fatmD=y33*$f{9p@QU& z+44mSEJFuY8+WlBENajJ-NPzN#i z+v#+|^BDPE3Gwnqxiy8Zo&qD7fpznAp*MPD-ywkNbgU{jc_o-pgD_q3G($IU&zoI1 znL#cZDM_Q6j8!T*Ow3J?^B^L>^!bIi&OQD)_I%Ab_I&9aLvr-9on!9dg%+6}U=C=x z{xEa*U+8W-gY2K`KeQaJ(!J~dJH$HJH8+o;tYK@baK}b z6>2&g8%|_cA&Um_z12q4iCNc2wcvq4Cv%-M!DJB7aEzj(aZQ9wEW@bRgRR^<)x%&PmF5` zPIuQ#CKu#nm{jJ2N7XU~@~HMEWSUku9&ukD`Ux(GUxcaO>-EI5hB;U@Q&B;2s#Xe0 z2kmE^s;1}Onwv2VWxY@xJ+oMrO$`U~15YQI-j-LmDSdXJHzMuHneN1Ua502U=-fPm z1m;XU?BN}-MaI0hCEvehg?cN;F>npPKTOJHf}jGI)|4M z>y%S{O<HM1>bN`ah7#w)Ng`pD8QpE)kQ~y-U-E+Vce0dd+aU&RoXS_q!q&o`E!u?0wai= zGoWgc4O`7B`k?`w+iM;%qfnshTv&?f`Z5Q;;V5-;gcc7eeJVK!m3QD1!0>E(9&n=* zDRRpLY6=YRu)TEqMosMr_D!Mp zGV<}b#N)#NUDw>4x+?Ft#pS|6B}garmg_?e`=D9X@dmpf)i*`FKhd$jj zR5Np{jc{gZd{oTVOwIic8MeHUvBv8F<&~hr3E>4dX@k)wCuqtZuehW{vN?<4ASNfZ zJ`P{~P>y902bx$=Z~NW@ncLI!U5Q?9+;c+#F3(ck^4IfD{QlmYF_fN#p~&shl6PGB z=n(+LxzGRubi;kNOCgGB*^jR)T&mF(F1fnGLVMv#d+Fli^T!#R%RuQJ;)M#Me0fJH z)&Uzg+ft;r)Q-8iv9o$(bA6YJ*g2DDsB|dF3Z)jJ_BH8Jo%DU5thv_Ox_@{5Wwoj5 zwflO=0=xZ&%+*qZUf@z@N4{dawbRCvh3bN#&p3i}HtBhpyBaD!(<$tn;g}*&lW<-C z(luGe4th{bG?FLiFROR^maJu!K=lHr#Di`S`W{B0L`7WNb5{?osTWinrfu`_&dxe< zSkAO>*93M7V@CnbESpXw2uVTc?y*e;AbYj`#Uw;Y(@ultT&ja9mAqYO@*6!3G*tx_ z3Gct#`aXiZS3kNPu~M>&ie1Y1WOFAhv2wr=jENY2lpZjW7YwpT@o}zM)wkC?DU84; zR=nW3ApAg!#(q^@%WRclJ?(<2$&}R|b7Yx;7ePKu0V3Ek+zMr10V<%BILf|fc_Zv* zn>KxY)r_49W}4ya&fuLtyL7!+BV8|+r0a5f>B^H!*9lt63Q{4Dh|ak3?^^m)oSK@= z{=PwT?gOr~gOzrnT+K!2?pFYFL-iNcQAIM@2IG`#l;gUBBY73BraDOZRtq>o{H5|3 z8y0#G%_(``63)#}E3)A^gj`2zg%1RsO;O)Zo+~%M!=-p6)0gXFXznP4uNAvV920jlhiN;Yfr%Z$9fDsZeqe?=H zHMd9tYUNA9wJk5rE3-Wq%VTjURiI?0Dtq|7+Y<&oCxnPRy7D~2qv3R0a(s1VCu$8E z5npHR!Uc<4VWrmGl|%;RISbdO zM|Y9-Q~{_zzkAan9Sm%67y9(YceZ`wiu>U7G(Iwkbv0>lNdL`+lJ-)XB1y1SG0Dn; z0DsxRS<`zB`}8p4<2z?`!nVP%-Y6ryi4<%}lmYRXCu8>VxFp}Yx+*a7n;8{S+Gm}D z<0W{NjJX?T)*4PVWbQ*&$Wa@bcj?x`=6hk)!SS4vTS8r7bG3Ind0lHBTbrB0=xtIw z4yiN@juY(?VzUzNRq}9m)2ygJ?4L*+tBGs#j%nRAF?p%o0yU#eE%~v4xjIG6I?O$| z4Hyg&9GT+IaLCBVxv=5q2lwsYrVTd*2ZZ zRLRRnnRsqfJ182mkNd4qh>{6{qCt`xAB>}xutE}cV?1{x#Vso;8O-&b8A|#VAhX0` zBHG8JZnDQUg4w8`OKLho%v|$G$Hg36*dyAi`|)t1FhDuwE_N1YIb(1!_?v8Gh-*_E)R8YRpv-?i`pl@ciPkT?z(_MLKi3c@+*FVLlv-i1;okfvW&v>aat zaa?XGMG9=fM4(ISFhfSa+S=L3FoMTgk5b*J!ioO?-R)HFgd$N)_a)u>te$&d4e_HKRK!s^E31c1pqYZ!AxMP-WXBrVqY-`neJ?FbaK=QuZEPZn@ChpfIk!?jozuW9 zJZlgQG|m1j3~80+8$&Gf@StL3&M?Soas1@4yZK<7^1xsy6a~E>73c8sglZIxAH{V7r4AriI@DnpMD44!npJF&QiTP-CUAbb z8Dch~nNaa1$5wR!I?UZ&)pystLS|f34H<4Z^Jn~sm@Ve%;G0#f6?N()KSigWk(}g* z3N5C5FiFHtZGt8`_n1H%VphS6?yRoC?YlSEw>P)mb!YwV{aq#z@`#U-V#Q%7*EIsK zwYf_=$oU#Z*v;K^QkXBsAW7sL561Cci8V*UPDq=6A1f6o5{W{h@qToWq?tgk!%LmT zR)`Gu=w+j0m`jiOz<|O}viMvcj3ph65dfTgZqvpk5dd-0Nlkr6 z8j2U^`^f>02>bxeHp=sBjS(uW4F>LCYv7sBPhSb29l*aU3s)Q0%R{)>S?pMpJ^fW8 z<+@m{(s3uw_H^;e6m~9wE;`Ip*BxQeLm&$RQ_^C;C?+fO^M{9rm@UwOb9El}n$)+T zrW)5@%qP)U-wRZ`#`Wj2==EuO^~HJo<~q~Qob4((5?F?T(EX^$C!fl3F zOAf(ZKGg}*sbUmlR5X4>Ho^U56y5xi zd9&gMEElezJX^YShK+fVvgJ_&d8|#ieAX$dpP1z{ExU`}3tseJaAB#ssp?*E`N>{z z>5aYMQfcM!BAKK)+n`jlWje+jLQt*+8RNv)O3R0q$fNfh3HWQ4XAO%qi>p)tWhsC}hV?$#eEF*Qse-Rjb<@7~LK3 zc?1mN$VT%@!yP+2JL}6~6Bkwr)@x#9E@(ICgP6nDm1kf-G1&$I0u{IKXr_at9*e8HWhPg6HKjPexmI>JTn^ zL%3KS!i6&khs7rn4sS>_lmx^2nCMQzX8#zMd2f!5)=Y34xaNh~-Ox|kqzMlSk8obz zL!>0|CRhATUJ;i)s1^ zLk3zz}ie0uZ`5p;wOMbUCc4oPoXE6D}qnY$;Au(a*Jfw za=&P9LZ4dqz)nQ?F76>5#I3t)tK#?IdXAk=x5ECjK|;T;H{IE~>E7{Hy&-s+=oolD zO*RuDiRmrXKUJZ|@S8X6lid7!wE6G>SN`VQC{2yZ0z834GYqeVOYdpI8d+*Snmd0q zXGp?K5sOKBIMXZcQ1+RCr4oc@E*Bzu@%l>9ZZpsY@)ToSRHBhWnnnjzKyOqmzEUi` za`ft}m2uu=Y?U^PY5+oy1ws>L-K1cbITtuFL8`zm9%ckWpjrjid|NpQ$S1p>XvO3+ z)N^m)Cfi)U%Nvi@41*)KcW-Uo+rGEHUDXP6Ov*r54!Uq$He?vt0UW{8jQyr2Ftc^% z#>U-sy1wLzMD&38jbdHAB*G`fE-NIGIzjpqXh%ohCBvj!)r*`d$IS_P*o543{n(Wd z?yL_GJ5EJY;l+&ajb8%xA!=Z-zoKM_BfpP?qXVi67`UR14lv`{q`)zqrF}wc?Z@rG z@VFD)i}$7=DwJvh7Xa0!BObC+7sd77>qR+14u;2`k_iutxZr|@8c9+MUI8R)IvQcD zU%B}RKoN{E=q}kL#O4>?Hegx08JdNa3X*7f;jQK{=cPk<=70}8J~H9V0|V4i_Wc(~ zL~kR^7lL8Z2_d~?Ir7N5vRb4+t;YMS8=LsYil5PGDoB;w{3>fGa=4;UFmqeWR)ke9 z803cD(>_yt1vJqEI zQHfKZS%&SHjb?-S#287o3AKnu2CWhdb_Y!p#eQy|>emrjJD*+>z4n(XC>TiMN(m-| zVSGeR0Bjfu{RJR>3D%Q5m`IFD7L%Gty1%JQPFNH_L!KEDZ@zO$zv55DzAAOFUO?!g zp~X2#C$u*!l`exOr|{r@f)|0`gXtlvb(ImLINg5aAp_KDlkzZ|7nm9haToK7X?p7h`FD`KWzq zR_iuxhmbseOHQgdaXFu%J)2O+-Aqb(cP40?Pg3@Y7&^${l`Aj~)s|0I6neO*iOfcA zdR?meI4aE4j)pLi4)^6s*j+Llkzp!UQ5_@$|VQJVzO7yHU}dN>PC8-aly zcFxmQK3~yLa0{~AA+%cw=4L{nslzbeN7v04?>xA{G-PER1TB`bPecYP)UXf?=mcdl zoFG)~LlYr-#{m)^)2$;@W_3Iv24WEA6Q~SIVag_WN^WA6EFB~VyxBEUMPo!))8+(hak*}XC+GM zYt>351K9><H$>__Nh?G2|)u}qX!s7sL3d9HrpoGH*e)7P@#xi%Mk*Cx-#QZ-2Df$a#= zVR$^XLPjBlz!}eoH2M^{C#iYoU2C^CS8wlJ3)?pz?5yuTT;05VZ{zOGiu9~JDvM(p z8K-O^=~IGHm$X3A5=MrhwcUlW=m!c9A>xS{{PnKzClj1EhjFN&nnwxv77v$0s1^?VHG;b~q2!pa->_%Z=4FDfbZ-pqzK7MI1D5Mh8hhyfFm{n|ta9FG^fZ!X#5! zPa8x{JR*d^&Dd~1_?{lN1-%pFHR&PNc1?Zcipsev^D z+Vk@-FR#td-@Jd5zqr_0Se&0U27CzKG0LH;@O^oj(aW1 z)Ap4smtJTuHnbr$WUn<=r^P;+2j*rYCrTF@(c)Zd#Z7Z<&dQorIIEFO&@`sep4-`Y z+#tC>euRSYT7#*F_v08Igswh$onD?dL@aed4|;tX^*i(#MOERp9w?np+*F%{px2;^ zMUZJcDI(%j2IonE61QyRS^G{*Iy^R5;^JMybT4gOCliytG(V!Ml*i}N+E}zp0e-Js zH;xV(tnj=@=cM*Xy28@i8n!i8R{B1V$y(^~k-KlopW$g%s=Nq#5xgh3mUlzzt&rI< z>kc8bkvs13U(UsXgst2sxj?9v^R4UVgBfoRckCh^C0~vtQ&JB8l-?Rm^l|v$^XTI_?G~G*W*@hspPg-7cI|Q?v%r7P`dfNVUrh~>GdxZb3;4zz z`eVj$`fd<$Kc3+UgXnb~iq&__dWGuBb`l!p_H8G{@k!UW3i{+x;<|Vm*I$ND-e{{% zg9sRxZr@>oDVRj`xS#zAE`;33kWrM7@B}qZ4SUyBYR z{uE#KnRXl94dKzwwZ<2+$SfEt<(3-7>y*w9_HS#MYqM zo4c9}n&W4#wHN1l_=Q}1`Gxj)?rL`7TJP!y0#H#YNYkMJbF=Yc<3eL{y>TJCK)=Em zy?fl4gA3>9+ilY6X=JXSZQ$Vb8iV6s|MnYKjt<`4xb?-y#pu0PI&WXSu`s=~bh9zX ztvZd4Q}gTO`iseEFU+$ZoD8EqqexH2dkvWFf;Ag-brb(Ga>|cLYdB2$#s0O%;`0k| zg2$+Nz#q$WN|OO)pMf^qb)%nH+YF-q0}f-uBTzEJZfxO4lI_H`Kd8nN2h7?V zFDBQS84A0KVKYpEfm^qm53e&(6QfMqW1X z+AQX`-;!1?TzH&zI{TA}X~qPaB#R6V=MmlGWR}Ti&CM2Ec|^rVVxdOS7!;oTSvm|K z-l@i*qL7aYGc{Bgi-<^ia+?Ie9^O%&DPkGNX$l5YBqT9q=LDm?>Gezr_GS+N#u>2> zh?p+D6(&*Po{z)x_=1=fk1vV8(2HJmNBsW2a`-R_5=aUn_G4nWeA>e_99|uZ8c59u zx{Tpi`g}n#{n%Dc#FCcY(6(hS#TFt>G$BAqGfzedA|=HY!i9S6p=@9Q29zURFZPqn zd71=Gg&AQ)>`RCH2~vsY;kh(Br^u5i91Np9?lS&HK9O#$AzU2JJ6ku`ceifcGE5JY z^%$8@bUJ31fA8|UGp`;DT9|=QzT?*BgPoVmP0SHOpb-X7mtJ>};ws}XYhOrE1h`;4 zH2cdeQ{aN#c)SPS&06~ltQcY+_+G91Rt6G{ol*LPf+l zS2F%39ax4A=dJv{;vAp2OTA%xaCgn^DFSTHcZoqJ(kj)k_F=y_~l;!D*Oe3aB z6Q&X|@iopL0a1^GXoy*r$NtpOTqBagTv>M&O1dNuq6wAnu`G7%P9%c3X}4_=rSg*I z6q!t+1AXO zLb8K0C}_b*>ntqE!o$h{{nn}+rZ%d)(NpUWg^kQ%h+R%YE8 z1o(x^{!=59Ta`^072duJR85Lz6)l%ss(s-wHZ=-$5lWu}!zmV0Ni+mI3lEvoZyJB; zHxh|W_x5KrvM~rxd_QwUnPEhn44vo!ie+6)<%b&&Ket{wYAO>TC!|TgpYGyFVZ_ zdQGP7M5kGJKA#KUCk^3u?l3qDg`SOFL+UcAF94m*L5+3V&5QoZik*Tmo|9fz?~FT# z`&gRDZ=loZly8wzQg~0J7fs0vhnF?@&cF-_-awOOhUT7d10untoy$(}fxw-P(J>;~ zyjkEuho=P8&P|es)xAh1M!3jNLIZ63>_{!_d6NhX&d-&mo?f9UxZ8`fGxE=>zQc2VCRgZdx$S9fcKfv(cH&Qa*gKdmXF*m=$=7yiuOmZSiL-C4uS!4@Cn^q;_ z)8N#HHvXgT!4C=kZ|UN~rAt-(-^Hi#pO41)kLPcG8ut069`^B;!_#Qbn;Gqy9n^Rl z{dtNDd>ZW`1(_^urv$4K+JS1U4nI?MrJNy$x-k8f9ebO;}37 zOJtTy;Zb~anaB&gPEv3!gdCHfuqk=57zUjyAmq=`YeBzrwc>-`v}ljplZXm8aoC0L z)A$r7;Dv6{6zM$rkdTR+SW3wET15FHbiUb6!g$E&Btlq6nRPlW>=21emG@wfMSI9d zsVxYj3YP8+d`F8r?&!F|bANd3^8QlYGl}js6YMEkE71WgN;CljvNFxUvduHcF+sO* z1gD*0mr><5{(IoVk=|}871QakZ@SPSuYvm< z>yv_M3@A#;3>sK7$M%!`$}OP)wVptGJJqcUVZG7}()I*9+r~)UQHSnN(EqcS9FVs$ z-cq`}-$)41{;}92b2I3@m zaUPl}rO5S2!Ml?d$pNQVuOCI25V}Hx#~&EFv|CmlXq=K3a~4zi0_fkdWl9`Z#7UW& zWQMnk$`7H?a%CTW!Jj|(>xqLMU__vEH5}EK3j@Iy+hK-vI__Hw=;Gx{> z$Aed1k;WydzLyTuY~|U7g$RtatBvdEFd^M>;5m^7qoRe5hdF&z@an77=2}OtZoCwO zPz~RjKhtQ1jl(n>_TjOPmtrSv!HnRT!K^)E2SEf&+j{;=@9n*_JT}}+#fj-JlG7Sk zHVse(wi;0vlmke-v$2DisG3MLzMoD(7PR5Hy+;^-YQpNpV0^D6c4~wX=9bZmGH`>K+1$w z5H`4MF=`96}IX{5ar`@1>zI-We|#}hg?fR%(Ai*Ql3sm4&5pQM~U^=c^px(UgbXl>+3HiJ>RSOB@!2pkPgH1yC63dRrsZplxV_27E zJz+)a)W~6(8Ig?YV+(;_t>+eequ8yGJmaNQrs#10I6RDLoeXi3@lhzNK>}l? zl8BfrlU$84P~kyL^b#SGHKjSxvdZyzM+gFp?76;bs)tm)8;jd=e*@FsPPmR7=8>3T zT&9+|GzUy+q+>7S83b7j5-s>>F<;$ePq-E}hCdV%7Fa3A{8i4_6|DP=G3}t6(ygG@ z6TvT@wL-b0VIqw39mc3$8jCIkGSzT-uT-9B!@RdBM@_KEL1 zHa%GAET89ocCe2Z!iCPI7xWYEEPl4QsGng+=bYE;@T(nP4ZWM(PvqT>}a4qtlpiQ!Pd7*=CO<-psJ8c~C zA~h&VxjN7tG(hNq@Sh6DzSzA?G6wfzVU=xY$9A z6vuP4z`12^0L&Vzcfy{>7e?OfIHb{_8WSBhMYPmfLbe5#64@ZNBN+$ezM)+x8%q>O zU#nXk_f@S^8&5VEE6s3zF^CJzvYa(eDq)2?l$;qLNQV74W?j=iV`7U%!#^*{xBjP> zjZ3n7Rug=_d;LUR66G;mDl!)~@f41+E4!%u^kpOSzLhRpw_l-F0`M>Q?oTjN^1qJah`}?Q{KkZ^oB=_vE z2I-6O9u_JnLGx$5+$HmJJIUB_A=ydccLdXNsHP(7ww4{Pg=>&NQyNIg#q+?sSIoYE z#S*W+Gjz-x3>+j7XL?{brdbV=btAS%IzrA}J_cKcauBYhh1e!6Y{1Kd@ui9kr*g~@ zAJVw$@(^EI3wN5KRp?_h4y0s-XyW^b2^*6}PO5;?_&LjwmUfzP)BwkWM}n3q?!fW} zyPF=0%a;}sS{>;l1?DHr2&}++4w9}g&1g%Mf7Cqk>1bl0$*x*LW!ZUIE-mq@z60w9 z1q2QA<%D!ZG%AYnxxSqdAawMNKb{EWQglSyZpXEzO(Cs{bCfrF|!7*tz4Bzjk z`X*zre0wny%B%Si-njqr3Qe_;whpyiK)~S{ew#Sdj@j-a!?Lj{nn=NM`J$VIb2mo6 zkz@3%NS#>;H7chuIUk{!7dn@omn0#0>q|?W7Xtmu_;ARIMdKLG1}rvXXt5o&%QU#q zxp>7ifhC8IL7VFBBfzlvt~+-g){o?p;VuVNb8+D)kUvZXl5!t9r#qy`d5Q##8OIw( zu#0Ul3~As`y=;NGixvSQa?U zag<|OIB^KVvpDaq><0oXOx*l%@y7g?b^EmfjYLn!{b}r0J_nH*!Qfc``co9^(|;c^ z_}@2^0p?`<@1@0ymlsO-U-<3PQ~d8oBmUPw0A1X~QylOwCJvZdDc^rR;F2&A*vO>I zzK?mzR>I|lcyyJ@V6>U7Y$aUmEL{yh5EL0+P9FK94>yqVa46TH_l+*<<3&`tss0jq z%w>EECbLlYK1|@sYClROue6Mx;+H={*=kONNWag3d1XBN)RWH(Q_Xu%#B zgE@4!as9UZR;q}BfNk_ClLueDs;gKmDd%F34&o_vzK5g%LnDUf1*Sny5^N_`R230OhA2zNNTnO#j zG^4R|;AW*aF|AbIgsfwIlZ`?=>XDRYVavLN9&?ALJYpvdmsZr^foK1HDXHBnX6Y^B zPPooAHc{x#bxZy>Gll#b{TMP8RDF~I^R}gqJtzzXM*D=u<9>Zqf}CVy{8IpzO7DP}?=de`M5qRJ>zbp`rTXXe zvOA}|ti(lWmdYWcwSd+kV_zup6hW6vHE^Wef{jra2>+N& zY%y2A5Ix=lS{mI+3k2?4?MZcYizMG6ysCqSGT$(gH8%rjrg0zv{XT6Yiq0c_2Imr> zm*@pqY@~AZ#DXr^-E^_FsXpz8UrJR(ZAR%}a<51~f z3`z&1rW_E4yN7Phe7YBLoR05vfV@#2Fmu!iIMcI&NlO5LL7IXcg)q^m6?QS&51;H7 zSB1WSqpa%wGzD^@flffho>REINwO?#3D+hp$j-1 zcWi4>Mg2aU!yt^0V>pj)2qF`io_hNTeHGC@3qzlCA;)eEOR*YJ;guFX+atdmL40d= z8}<}?sZMjz4b7Pd%K#nxD1*`rgJcEep?M#}dp(NB8l{BJV1${;F-Xkfo_uzaMSG)2 z8iiw6RHS<`7v!RAn8`wqFlYkwYZ#HBF7eES&bVCLncUj>h{{&T+0LDLYMXZg39}mXM$%9HGJ1NRR+}}kB0+)DkM+iw8=2Ts*j`o zpYOn+IxJ*@%D=SO=@0dllMW1CwSU3P{xKj@cMRz42zWGhwOooIM_ger5Hwb#6_4_R zURInp51-=+cm$#&9xgAL&w22XP00DsRNCI_C(g%pdmk4IZ+}$o1h$7Cl1>!9(&E+g zYAqj}%?%JFx_LEL;Khi=mTbS+#D(LCs%p*@Cag!A$s>wAoQ1XZ$T@j~(>6>Q!M`ymy%r;}D1pL#Mq>7&tTb}O6#JcE3(eHSLjUz`bX)t9yd$R*FV&x#O4NN6B+Lsd0SJGHkrJ zAs8pb|Kz5KX9L=NFFcz~%%D61e&&laAg73o$9;LT<-E7Ayu@L?w7a}ic@t_wzQm>) zMon>F=H}*R%^TQs8nT2z!&ST?`8C2VPVVzlXDm6b@BWj-nV#dV5c3?B8wJA2*5&c% zEFPsb#riS|4EI~X9d??IzSnD92g|5Se1FhIxKT{|8j(fjKS?Zljzt=S@$yQG+zGG3 zFUZ^0>2yGHAseV(iwd-Og5bC2D|C4auD6%_f^N+q@ZHxka32L!!|ToAmh$ zysp#PPt{pT#6-Pbn)L<$Q|pc`O%~qVxNaOCPGgyvR3>#VOea$EmvTAbLjTRtWp_k* zT5cmD!4?D5m6?*yT2hW{pJ7`oxMMN?lDtxprwoG$2`$LIlrUXqvX zP?-a9{9Azof|7aB`ABIG5WS$k9y{U9WI$veg?(KI%AM3k)o0`HoR_h8ua>E2$POS+8EvWrI`UP!C~FjKR4W0{M;hq9cHoO{PiUi`9&D-gXo96xJ-+Z$7>E|h!P&!ssZ&@b?~Esr z5&c2E=(kz+MlxH`-JqVb^PD)&2~v5gw~Ya`#@|MxW+9IO9UIQrROXB%&4_WUcES*M zn<9-C#~%SF-}W9=LA=Lt)>p1ZE?8MpYp|SD}=W zkQ8KQ<{!%p;%OGZMLn1x6lYC}$2qYeINsQ-b!I@f*4RxMKy}`&VM9ZJR2gZXyY6Ie zyIwdUL08&xi+v{crrxw*76b~7!3hkeAdVO3yWfIg0DB+pHT!aO3DF z0#_T7S9U)0KM4#-V%5fR!b;Owj0`6d&MOKDZKLU(u&>7UMi2{(-|fZ&$}&7MDQtbP z)#ZL&pC<=rWiDkcOQ1F57MA`s>Jy@x!;LZ19FZ70 zi#JCTo$Y-XLY)>RPA5Y!LWmksw%DR4wkGRKl66!kl+c7#e8_9ftF)+ezmT6p_H(Dctan#+cK`hn{g0B9T(Vm`P@F(Gb9icaPmO zdD%CE_j`^UH~4t^sKD~t8|$#pA2KfTMUBzpj>iZT^3il;DU#^6krK7k4pU7p(!l_B zfOaDtSQP*)6q|O`N$$g^0V{#BX)$lS(tadtX z%w(^ki*xpNkZmtv_Yq1?2^+8hkS7LT!$DTmY-lY|$C3j2H6VSW@H1|`@c{{9lzgeH z#zVqi(15@s&l(Odyr3ZnxSs#s=PEuPyiLO*foG<*Y}()=8&MUJ_$Wfn)Jrrj zC?nR>S*T48!#<)I6s%sCGEYpoz?*VC^LV79;UVTvX7#g+4UE%q+qKX0vTJ`@B*Vt_ z2L;bUiAL00%AmuKQ(npNt1M&s5PjT-@Y{(3nCsYxZwmLfIJQV#C^JZs`bxVO!D9*M zjjOj7EjHe^H0Kp3Fn7iuuYlu0ISpN>lI>B^x<4 zS<)I1Bil_!eMnjskG(VA?@FiV(9zI8NF;AoNaDO{7%NYJKw8)hB6+=04hmmRY-b@E z=i-s0_Yng?AugqnwpJf)0e)MvJZPz92Ne6r;0a)xr$~4vW`+50C z{Eq1fan6p3*3Mufd}WOwc6#8cn2@?l6Zqhj)-WE=j)6(-uCbtv1+iyf8>AJnm}XW- zKIov~vYWOn84Ud*MT<4*9X){wVPF~kpbb@Mr6LJQ?njxNIt}YrGd;tzB1aB|zR=GR zu?M`*h}ef!PgsJzMCM=TVHg19BKS?yE=o}1N zTq^8Z^0QZ5w(5dyBA!0QF#H^cyGc(GNLFRSjKkL18Wqw-t-i*S!*562B1}-?!0$#T zW8YF{qJ<~cjgR4#0?p2x!-8+>ik}NHuRd^wo}Sx{ql^#&tn^w|azo?6m%?4m$p7oISd(0vH z(sxD0(Y2ONw5)Jd60v!a^-LXK0(IvmfaLu3SUc5gH<)oJbM{v5cLm~D3>kE2G6tX( z&JY4Ngs5~iv@|=xT66${dPPkU^R`Lut#r|-z1B%XM#>AcawWw0EHrRoaYj!)xPlb! zBoB#Y+L#>A0L!lqhXHrpm$IlmF@t94iDrzZp+3dI*hxZT>rWYD^Gdx|o}QEUg}3hH z&~^7-#I!WHZ-OROKA?~f2KNzVZ0sJ#*ef&kb37aLi=KIe0*f>IkzGzjHntzv?HFXE zvO5O<;#~pr31@h(a)RG7>{T;%h8ai`6EsVM7B6U{JY_8(+t(|ZcV@u}48G+azm`eM z$H$*ADfDU|oJr9+0riyzPh^+;B(cNq<^wZg3jzqztj`Qqi#~;m4Hv1lokJ24hgzLHi^3p=S`qY&d?`!cRYUY>?84G=aFs?ZH*&LZf;z^ zBaweRDc0oE60+D0EwLN;G^CJey=PmDt_K9kLm!$X-w5hpr8Inc(=Gh7)w&MtI47zP%)dHUcBF! zxm@0=lIcUkhX{6DKI-!}nBpia5~>PhoktY7OR;Li<%`BKqJ*cGjoAif=<@K+4;9fF^e)|%_FZ7zt;^)we9*wUiBcw%l?sYu;CY|Gy z_bKgZAJb^xhdzC7SX{-2QHDkL`g425RlnmUxQTN+ep++;3O^k`6#!>L6XK?0O7=WX zr-8wT3UX3bAS{0hgK~{}0y=LLr;u@&plznP=R(Ek&762Ur<~O-PA9>Fa1b3axw$hcQHQI+ovS zqyourwSy11lKG7@h4 z@lhn-^CDh2T8hjS`o1NUEV56tF--&q>7b0%RSc7c#~H;$Lxnl(B7XhRq?PB5--dXY z3?0kjQs+`4&LowaSlDMcG@+!agew*k<00k9XSvf9{&3_RV#RVpoi2BC`m6Bv65NbY zvWAN#u$c^r=V5$Gf%_4||LQCBA3Xlo#f#5hx^%I`|9bi2;>D-@uOE&4uO%kLr_8S( zw#=`nbu0Dj47OLi86@?$A-FK*LV3gP!M6GG;_2Wo;WuGX^OVecvc`P=6*}jo%AB z#?>cQ3E}!FnyQk52VEJCEdQ>b_o!2BYk?(sK&TFz%7Y__*gyhnicv>3gRl&FL7AJ$ zm`czyiL02(!TvNOA71__8QDj%>FiRi+I7^RO7-Y$Y@mfs6=DMhRT<0`e#>07`&#m) zT-Xe+!qVOhjZ~1OO+c39E?iGUVuOWRaHMnf@T{S|yLRD1fbQG93@Py{Aq*k^3sv_D zccv2r{m!l^%rQYK&)c?3OP31hVWDOFI= zA&9EWWVf^!IwoX=g53#AG;AC&K;=zg$pqsNBtaQ-PB?+YB#2Ypw_}st;3lpzbpv~s zOFf`43;X`PX{CkA3pi&&HG%(=-we|Qa0QMm&e$J9+$j>9ky3<38gSRbZq)Zh8VV20 z1?Fl;;a)r@2N`3yrSN=Ccp9YL#@*Tip-1w9vNoi|-ef8Dmh~gjRS-1cInO(4|a{9~+^t+MEJ7nAR2!uKVJyJooNc>J`HA6k*23 zIJB@uMsAYx*|^M@A=fkl9h!$t4l5-kXe1|A`#i9(sOv&H2#l{9#&h?{PNDO0}tG^oY}7^A>k%)YzkIS}Y$&{t6ZJvVn6H36q# z1qpGfRMWjmm%9(#81qXPvCqvJ`rD9Qw|&l$P0T&P3CuZp-Fx}ZkSc}R?NgGKY+wr{ zRDxU`Om*B#kx~KAsuH`XBo#WUPuw>$mDP@egmWOIY+^k-o%0?${IJ=)rM^HqY5;Jq|go6+d--36M5f1dga~z7Ho6fQK zU6==G?ByG`HQkB3yJn}!Rd%;pX=|=QX{&jqUL`@~!1X>bTf9}f!TBO#$~S)_tP-Q* z&W(A|x1TW15Z1Z*s4TPXdzlkL-%EzfpaI}g86-)K)eBjvPO}-~m5+9Jn+;Hba3d(O zp3sXEdmn5hVxf@gpMj%F)bIa0I}e>1MU@i+RDE4xj_gKSk>ZLoJoLfhWoLNkljS8J z*GnH>zE~MDda|sP(p>EB`m-S)dh;P&@Mc6WoD`Y#!udqHpf}fLPLR76dT&U{SV+dZ-ginmGM@IlFWhmvrDc&Z@C|c{ zoa_4-^`0Uy>SNXaCrxO)5dpHQ_RPM^$8ur=I&-y`FE1tvV+vy;_H)r_&l)8#2iYkd=)LrT4g#0r2qe#m& zeZZnE9|)o$BSOqUtNU637DAZ2Dr!gq){wyMI2*xmOGJ-w2B?CzNepPIUWzJI`MlJX z5xNj67k9%*sho5}F-bWa6oqbljr6%n`b7L(w3eA14{6VW5RH$Mf-ZSY1mT<}K z+RLaIT4T*kx3ixbFoMibV3wBKlttRGtGRJ~N2?5QNhdsRb*(b{rJE-Z;MBXEQ=R~@ z?jFNF7ZP*InuUekW8yh4)j}@cEz;pMq8Psp6z8;hhmhnPriND6Fkz#BaR6w{j7rsB z7zi7Wu2YRH9eb_Y;IcV@W?>4kXbxmcm0&T?PUC&MN~O5eE+-d}Thb&jt{R5W;pH%+ z@c~1>Y?`?L_EdSkHb29J|NI0E4f**XZ~PRU)*I-$sN`mF0MMO+`b(xTw_DS~HgWdE z0PVo3M_w6$u6=tBw1MpEi?F<}qhN2tAip?|e}&~EGUQ9kpvc;W@r~F!aMsiV_eG|a zH<>=>t58bThvro(!2i;e)F=k#qm$p{Lom|y3Xl0{R{t2sO518?rzDXF>*`2Jvd2q# zal7dZf*5ngMf4#W!ZUQzc;{wyX~A7~HovUpFkXAPZZkV8PQy1cqQ+VCMy41WIcaid zuRY&I`9}JnzQ~i;SbZsm)&O~; zu{c=~_#k#p6RJ?>xsep&7ey^iwO}PDOfoOjY{AA1qW9fy*Z^{C%cp%(mzauA!#0j? zMMdl)u=BaVlZ}UZ8W`7N7;*ptK>fd-cm>05lb-`|B$%gHvSma;M181UMRYl#;90Il z_n0ao#X>&>I-((fuF(5k4UqD=@*Y`$cln`}Rm%NLVDEv+8+RQWcv`(4+Orm2#_kFO3DoH!%Dd0b=N9c{ZwXwM#o|jR$KEGLu1Q`;|Q_S0~8O`yUx6R=UY$kZeEh-eoh12sk0bWhDwFDJsv85R zjz?(olKq@fCvA*Vh=Xb(Ga?xaWFvwbT7IDDO zb8Vce?ypLzON%)jQ(TVy-gKk-tA$_Fcy(=Y1t&I7_$WGC@aOqLYVGx$o!@LPIF5I%7L z$5@3KznUqYHr&?FF4iAtvg?!dPJOy>uy-@niH$S&DdRfTC-&h?Zp+7WkUX&$lsXNE z-MDwMKinDcGrV1MI#==2^JgVb{bPB|-?W!JL*GlTdH%5E{Qgi*(OK7(ZL}4h$@)HB zYTP~1127J+T?-c+DpXY*w%aV%&SLrOV+qTb9N zu)B}<^cE$+hcK(NRnVIEI`dY3f>`F=eM?PNs%H1oi+P-RkWP$HyxF~&y~S>w zV%SqpEUP{DW@aaDm3X2)IFege@<9^SAkJW@Ku>c=7mUE#ME`ugP1|OS(H#2U8x7nWaN}$hIlhmB*Gz`_o~H2wl{Cen9BoQpgYQWK?iDLCpleJY(JgWGXgtMi|g@zc^9Fz!Z#N*M}{YpcF#&9eNsc zdm426MGLz9B89eQo^8MALBKO;mLH@TO?dtdEh*oK4o`I3e{eSkz0$gU*1wr;#|WMbVlGV@K8&QMz# z?!7>&xU4wo?^xf6N@>6nIVx5E;A6BEN(hE3Qp~uPFSA$nym0GECS;J#?T?yaXfA_e-g?GpCA$<*h9?f|LawWRM z6dHZ52q?8CM9;EsJOjfVl%`ATA#}pkSxTN$IcTh&`G8c^JjPi@7U-d}RobZ&aAKL9 z0xv-A%EVzECg3$oQtXlKa`CBIoDxK13WH`DOmPG)d1)w>9*99L8lnVrmmc$}Xu6N> ze@@&mN=d>A$H7glg5j#MHCaryT8&ow3Y^e$ZW2MgWD6|2HazgNlPDE@fRRK0{!Hp> zww(Ivxahgg2=5un#o;=sUZylTtt9_fDL5&`N+OwaQV9};0KAhQHm3@@jvyh%iAqe^ zUqp>j5s1b1^O$xbiD5qP_!g}s;4vKf|1i>!l^>BIr&a`n<| zi_O>!HVs$V#_xth7;~g}qEsH~j4%r*Qehvq8!{rnm>s56qcQb52y<^X#tM}&wN3h> z$-FIIU*0o8WzXC=#`BEl85vK&_DLy=)@f2sHNUnRAug~$7jcLj?t@vS*eI#_q~)G8 zd5&;W!lTbfs&tZvF;RtM3_FnWm^?wu+e78bTAaB}p5XH2s`Fw{rJyL!u`n)#TIDBT zPllI9_`n-W2NZq!NN!;m-WL7h8pftyu0F{uSk(~@Xi2*g$!UJwtl~`j#TAzcaiTky ztK{YJ@IX-}_9;qqPen~>K{G1Zc_5SDn7V;f>5KNDzq2#(!61rY=sex)?@^CR4Z5JVDTPkqv#yZ`Ug{;xk$eRquOdr1beT19;1rs$rdet~ktCJ4RF$;x>psa9Y}DxOeU zxGWi54PxAOE1XM}HZII0-SWy;${qnzqVEcE5-5J1OGK>jb*}KHm(krnOP;kVn}QlU zZo`kjsG}&Ol1W4}dGD0t^E%6*Yuk;MVmtc}Aud2EOL1o0Z2C|;{72^Ak9&*w1R1B=68b%do! zB(LmDu6XYVyI>Wo)>HkpF_j4}iHyP?Z%sIx`9Mm>c5#AUS61L~3nG1bt3og5V57i9 z6bc#ZWs*5vkU28N{MfjFetOICH2$C(DJYCMrV1OY|2BCYK0?J+3c!c!Sm1-jY?4>T zCU}xX?Cs*ESQO<|QytoYTK3tVRj_Y}IGhVP^N-w1~HYWRVx0rffTg4xAiBv*wS zBJ9)ma;Jt218AE=&`SC(IGw8Hm&U@mn2wcFP*WP$%*ck!ZkHD0{f zqW`bGxV7Y5E*CG&YPq%4S~i#4impo^ z7t^9#!Ic7AVtnjdVYUf7H}x|RA;t*iAAiict2z~U*Wzh+Rp!LGYiZV9)ge5~UEOPS z&ssR;t_Yq4ceZ-hmSs@gXNBRp-Z?s-cvm`uYW9ggrr1Kl&+X%n&ccja`~{WpL-Cfk z&A7piO8EwC$PEI~IbBg9*rr}2HbMxA?)`0>Xb9IYk%1;=ao zgf@<#^T*e;os-%SXRGB_L5IyQoO6xqTZSzr)IdVGWq47Rl!jp&+Q#5A3y>-BqtIm?M2iaEH=ipL^IfOTFAU9dq$;mE2g@=6v zPUFmQf~lwBp#RoZD1?385VQP&_xzQ&HChJris$_u=yC z093R}`8HmVq#&RdT@s`Hg(6@KV~4-kb*~gJ?|j4%o$mD&bG!GItW@rq)?MW5ETW`b z-_Dp1CX@_H9I8T7VT{57@SsfO26J5ItSyhG!y@5T!s|dy1hV*0?Pf(VTn!zTp%BCB zxohu9b4YJoby5ohQco-WB~sSU?k#dn!!v}kn;&wzx7!c3spng|6sXTzJjQ7zk29xGM_`*OeKpy4P-~J+!4=ji8t5_2sz!TnAN^e?3G~SA{BiEopHvHKn%nsajIM_1+epQ0k2r3 z08RHeU|oSp=5TNtS={hkNsVOG5ZB7AMP_jOJ`XVivN~C8D^V7ef_z-aPrWB{OEQvM z6mM4$LI<^t{h_D!9w~fu`_3eAfpQ=kBRB&&s2l!Zy&AR((dFGD!yh?*cF1~5e zP6zESrqjsrmYce*)3Gf>$O*JccAtlP()Dn1du8R*41u z6?Y(zd|qin6oiEfyalYjfPtzA6giRvR)u^>L%S+l{ zZqz?V=fvdR6{-2C`Mk}3JWRUy4)G9l#c`^KN}B@ztn#;1Jg6MrPltV311w^N>oOh; z5NC0K&w-!9%)^OwLX^uDreF+%S_nZ8d8!5xLMJE|jsYJ8A@^WYVksE}C5)so z*A`gKMP^cMZK7F6w;X8wx~|v+sHx$J@<2lK{@Uw=H>QQFrkD`338d?Y5N&P1W(YoX zgbFG?uZx+$ecqJx>}i%m!y6s=5Bld}5fV)*t!_-f`oLZD0Ox8>)x%t@S@js+&bNFlz^3D+@$gD9hFC$zChFLFX1{kWhC?`(uB z9c`U$(xV!HSibj6mdTn$I+$a(M!uM`@O=(bq9^_=kf5I1eB_iWuxKDN%i=%i31~~! zjTBstN+zCb#=-E5NaLM((v|uqHjL;NmS#|Zfd*P~DFm!p5DlV|_@!Ld0bJcg0}LBL zE8EITi9?;M9#Dix>(};VqG-JoP4nX6A(k)-*a@ACsSphnnV%APtaPxIF=I^0?%I~- zE9Jv8pP1BpZ>o7D<+bfNfM^LG2X0iRp3vgZ4%;!u1I67?$H)vPOZ_|qkDH%>YqzHR znsq^%2WWC-NTpr5l@dXAK`ErnCAGDF47l|)ZH-^6V*XMA@2zq8GMtdb(B|10-$^|07rU}JQ)%{vc!O=6A41u5F66?i{EB??&oB(s7ufH!sSX-(K?KvX`sFg> z_a;OGPcW5V-6z8hw=>6p^j@PL2>S~GVGX$jyXq|3jMcTV?~OrVRWhz|%LEm-OgPIe zGt2uG%=A^1B#I8UJ@P%|Fibk9q#_R{rrGTk>Lx_FzEM zK3C(Trcrln++5&=p503;K5!j^8v}|Av&BzRE z(Gj?Xcf8$i2YGs25VBe!U3@sF+7>Flwh>lBmwc<>rKV=Fek8iOvy{R z0RhFcMK)%=Q6LSV3r@)o3mP7cOgK#Q{KPX9r7#mNz=p^vE;cyx8QL?qJ-%4yd+UX| z@2PX94UDBmiz#tQG9!sy~G*#{0__Rw^KxWAK+99dR+@LCR zYjg@7BkmK&>9A8OlY_^X$+c4QWSQ)Y{0vDPoGgjM6D4sltNo93d1`E9ySH%HW8r$F zBbx__Ccl!mU`*wFO9|t_I>Q{D^{M-*vPj&<$)U}=gQc_9{B^gd9rq?-;c1m2^3B`- zbG(<>M~%x_<{9-MdfbWfXerK4BQcp5GT=HomUOMSmfE{}VC&h89`BD6;k5}adCQ?Oval4m- zK}Tki4g8}fvkzSn+sVuvydZl0RDY-Q&El;o3to8bO*(5>vV?v9-e(8wV`}@|(?WMI%r*NrXWneyEO2hlwFj@3U3?n_dqH49WJx;B(GQkk1Q1M4 zzAjJzF-m$fU$!kivN{oYcy_;yglbFh4 ztjEdgTq;4r({g$h^f_VlX=nk`1f6yq-n4CTU(_WCs7DrAmSHU$ub9=mIuvC zOXldz=OkZ1y@tg!w_pUT2^0-sx#3_=>xyw{t8q*BK zB}dq6k{Kdh{oQZsw|kWf^k^~e1E=D8E2MhzbOI1#E6EvKi5wxdo$vv?$cUm#R#QiJ zC5$;Jbltc>^-|QHh$B;xqzAD7*x9a3cZ)T~O#N*YGVYu8$n7iiGROJ~GqRA#i`uxp zt$ru)L~x@5A?2T>1cRB>Q)WMqxHx%#T)v_a*-I1W!)5jeK#z^(}X+ot<^k?GnN z5QuE=?`hFYx?2jlSqCw_lPRTGQwyD4@GGePSY?xje|3AqR=C#+dAK*=ZVsZ*w7LN} zPzJclhYCi4R-gke9%)O$RQC6;CK2Y z5I$LQRC$o{@_*s0@c#`gJ>4(%kz)Z}(;j8PT66#cb;T$g7}h1N48yuPiP5ltO^UwS zyhw^EuF7Y^RSmRAbSw)_)S(M;^*GgcTC^Of4P&*D36>ykjLcNKUBs%C1Dwq}bD=r< z--VfAAhoG3BSLiPrKXb=s(NjBtQfO1E(FEn<_xLLLBkKbgts~!nA~UBjpzEFCgn>x zCWe?Z;XK-peoPuO^5{-fBkQCXZX7;^FkWm4#GUi{G`;%b zJbrVXC2P!CCUmm50;ixnon7jg2KzcbQ11p7Hb=M^rnOM86%MUEcyEL#cR-}FFxHGd z1vu00;t?S{g1@WbT#_^*O)AnW)?5qIJCm`E?#o#HY*8_DGGK)z zRGK#xmeX-R0lj0KlSN53n&39{9ddTz9kX9i+1^D18iCRh;c}x~NOctkC_TA8yMRK5 zL$?pTf~_u!sg+4P_Ii!$x7j)k*VsChp*R5t@3=XeRc4NsS=mVYq8eyi^g45dhaTCR z88$(j4+7K(tH!t(&!I7%JLq<`S)1aO#%cjHl%V(|PI0ijg2WF{RblB!W&~@KQSVWU zTwD`z_+)&h+C*wtHbcuQ5r9yGvEaGugj)h13Ww;~cFQuC!Ttz01BHT%E|gvlH92h6 z3$BK^Ck0?mU^K!>kbeM%u;6gixUcJXj6(PJTG%`84db~Jm#un@N-1z6jG&8QV%RA=Ash)D2^whKiD1x4yZ`kEQY8$ zM+lr`lYk6OIbRdp`F5(#MEg_GAMi{+A9*T7ASY=qM<`{e(6=SJpH~(aUTw@_dP>NW zk_tuRV~1(B@@#Jb|6OfdfBD|l-P_NI%+%H+w{_FlthN>wB5rHz?b^->os38yxl0ZW z(%%bmNRa3~m!D&o8qLAE=$s7l6wZ?&$tM)H7>;q3f*q0S<%)3DU~`i=9Z}$VT}fAM zkW*Dmru`_BU}r-ry*oZz-Btyx;DHILI|y=TyJwgb4@;q2BUVUjVp+*yK3zbxBgq?K zyiFi3Fn19arJg1u;_SdxI7GbTF{jERpBC!h1v1lEJP#$La__a?v{VNy11n(oCq+=Z zzAYpt9T$?UPZB`|KDrN0x$wC_oI*9?)JTXe_4k=6QkYK8h*iPDum|51&nrP!NJcy& znjvS&&^Bgj0m9>wU?7SDE{cLZ&Z7YrvS(Yp#4=`1g~aI!>naBP6^TnONcu@S;%bC5 zQ8}vD8A7yDh3ufj7{+iNJ6v}J8w|bGm?BHUH3usrp*;j|;<_H8b=Z?raW0VMikX%? zY48ioPQPW*kd$`p!Ha55Up&e6;N9!_Zj@~!=+mHjz>-#iTH-Xx_vxgg-kQ_Fdo#!E zZJJ1#V;|#KkR7tm2Lc{MjN#;?g3g+`vKnFwVy($HCW|! zQsi5+H%w8}ne(iIghM{cpJWAU-{u*S+uaF8<&Lr#=pHDI3=KxLf3oX9-N}r9ftF^C z##f4m69r)PA;GK>cNmqYS;nw1VgXT=xqKtU*o`aE(ZDT5CP89G zOz9m6K0aicuw=}-xw90#m<%%gh&oBFWBng$3_kB=DPeWZTO*#NC$28a;!pzZsDF^; z5-HQOr4!y{Qbi$>;qV0V&A5A0-?l~L9tix>9qSfScg4Bg)$m%RVxai|2i;-9DF`?c z;t~iz>wbiD4#FI)5%;tm6HJ3N*+_b?1JEK*NE!}f41$r|qr(&SMva&XFvtS(u`Q7G zzG@}NVuBM(b!(l`YZ-JfHHcG9^(H&P1BubmU`etTV^OCFP82ntwkT+QC=?i&DWa7u;oZDA-P&a2(a#8&<+tfR2U!h)jfTZpyLA zvXt@Ub3Y0}xWq{A2FvvkDw(u7^x1PQHT7`@qwwLKaC`Oc#+qGV@1Orr8d z8ke#1c%P`Z@U`J^#;`^d&YT|5anvO=SIIt*H{Lay$f^luW0@eU1rHcif@*AIXxB7g zWTqZsBoE+RPX@raw~u@aL}#0kRZ{j7u#iIDQnP;$RbpOPPJh)0T#3tSeT-oxXqXTUd^~Z~ zIFLGqds8XQmt-&?gBahqWwWGI0#WRl_ZH=va!zSkZ@{&}dj>sOO*ky5paXt<`@shJ z#~xwOw>&t3oiI@%yOgOgj1r`S6T?Dz7SBlOtF}Fwa!mtq56{1R_vZTD2Y0sbZLQ4- z2m1cu7$vb(P6>x|SBVgK9ae^b=9|u4G>xUp(MXFPpi1Eq=@&ep z#ul6_d1?ciauH$=Q#g-D23OE`593rRAk>M#K{vWUe8$XrVRK<9g$yhwp{*b-hf@eY-;w9!%cVKoFxf59Z)Vk#cwC>2}jQn;46l zQXtj%gGH~2(NT()FsvGK2Tms%6PHOLBDz4LRn$cgAxXxWR`T+l@PPoyj&wbuT7Hrq zPSbDva5e<*p`3l}#B4j&NOF7yq4w{t;2+M(61X<|>?ZQKFfG9E?$IR4pPE+TcJ;*I z<9ZdoTiv8MV%7a9e|N>rMs`rckqzh)e6kIy@xI*VTwC`-r$!L;y1J*GPfdV|RRnjl zOZnYG9W%6tX^p|59|UHCDpI1dROkR99~I}7B>k%Jz*f{WFw#SIpM(HNIb&njTw3q7 z5=Nhrn&7}D97VzT)T#*Hp-DCyXy1G$-a@su<(cjR%*vv1p0ILDKF45RVaXIy60k*1 ziFhW+#c<={l+!2;E{A0XemrqLw|Qxy#leF}&GLQCzU+&Qg!W;ID{^&=aq%(k{FY%= zbb4>HS;y>;r3_a}6dxkiCq;ZbLzqRGWJ4L0rbWOw zq4F|u#N15+@QIMq;isskouqai(=cPzB#c|LhOgn!6tAbjSY?=&do8J^=lmjL;AjZFo#%OD+3Nc#1AsUs5}iYvq{B@$U++w7|=jHvfz5fcUfQPE~%=i&q6G$GJFDzKDKrOpUmd500@?6d0@T_3PT!cm$Vb{STvqw(>fDY>m0z&Jj{ z^6beTEFpL;k}Bb3n(wzM+Joq$ToV+_$F}ZDSV}#cscrTm!oe|RfJF+dcSaiM=uM`> zVfi6}Y=GHMB71@CSM0eqy+)c3xvMbK1+H16161*HaA}tAU_KW z;Gl#0p4E$|jQ+YQ5^qa?s$K#aO zz^B?b!M|M1&&B1r;?lCS%$!HRgpD)OVUts}IAAwdvIDvaWu6!ex-{Hj{lS@Pa*+lJ zt3p@|#E4wDnZiKiejxr_lQn$?80`s=N72j4OT&F|sIg2py2oK2laE3W>Q0~O{e_p> z@mZX*PQ&Uty(OAS30&P3f2otE>)zZdkDuz3fy?m)@(kDEokXH}e7Otc#Qq_O6U99x z?b0Q@RLg90=kpQEbClE|UvbCPx!WUNQ;#n1b3=9=J{j9Uz=~|OcWatFB^+8! zrUb$brYhAqFFf9?YUWiww_=$4sj;*7Gw}Nv*7nnIB%Qb>T(UGiI%myzX(kLK8^}X} z3)J&EoQV#@Wy7#M7Cf6{cGLBZH`7}K?!3GV{SZ2-o}D7;b||#>Cd0|yqqL!5i^`5_ zm9wD?1)Qp?F0EWRl&DU1>}QGY3Vx{y?T~Oc`tO5!kQV97<-@>*YH6!M394mLBgi92 z2rC*`S418=&q5G;7LU>cF0`QhVph1CJ@1Im9r3%eV=WMJGOgv1!um1fwElBVv{0TS z%OYcDASLr}m4O%n<|RM|d#wb8Xk<@`+qNr83_UNhYQms?U?uTvI=1r01*$nJH}oRu z#Vb|2#O7}por+<qpsUD+u$$T4wASH2#d)xG zf9oZ9n*e7q5oD3{i0oN;jH~>SEm(QTT6it63S(Juo}|$8?W{qVAmhE!K{jhdM(ONhGFfcXu#$?PcVRkNHY#xn;VB(Q#cI7Sqlq| zl5sMcjz}{X+gl(*qc~zCO9MfDl4=~5wVzScom*cM%Zs&nyMOujO%++?||}nA!qvR?ZtXPHANmK>d{yk1+EwA3z#>ay68Q+|GYV9=Q;uI1&qdP_Pbqn20~^<)?&xq9Qvm7FPv%C%Q04IeH= zH%*IEvm8@e;!3>?wB%M`v#OkOf9?vPM60s;){Q}{PME+22L6Dvdfh;lv%F+jVYd&5 zjI^k-clvhsje}zNe1iUBZ_1g3owL}cO~$~ zfrY>fplYy#N=a;ei>fxxbd3Bmt}f0<33wJW6OKvBGO^Gm^j53pIXwz!*A3*X5omQZ z-eayYVc2AzA_EhvB6wC2Td-1RMAqzl1@n!V_AX(cHB}B*U=K}258m2=ehe^4SEh$%rv988*1lM1~<%?Mdee4m=e#;_8VPZ2xAJeDPylM2F=K|m+#}MLFau};;Up@ z!q8{EMAAVpXhg}!I5IE>1r`7~g8nD8nc2zLGVfPqhRi4*OceyCFKE@x7=ynVswwU* zB)gp=Z(VNO_wd>*!R_eg@KW9Mh-*rfFQ(nkTzd&+MRF-rO@N@(NSU_2%ST-9V9L~v zaN>bz<&)1dsD#_dtqJ_7Fju`IUHqx)OwiL2#I%g&@^j zsF+4w2?3+485Dq$x@!Euw4(qI$48`-y4;Wf@!M`28S`5D1ZrTaTN{ZKQ{(-(bOlh@4XH zAwAQLk~($~#wXBuXW|qBx+5D1^TG^vkZCT4AYIE!iV$! ze#dk;hW-ih5oMlX@H!2boqT_b%H&39xiCWB@&%7!cb9pQ%$JzvVE~u5r`u5vVOQmf zTJTIsYUdCd1-#T3o3SoKhiRZI!KBl9&EI9>c%fKkrBfW68W=J5-0ihBhJcfBbi#jp z_byV&NoHXIuMQ_$tb|V9wzlQH(KUkHC`Au`=tr45WxG4VBw zN2*_f5o_F{!!(`bWl?@ZwzVZ>_I89v-A)y$dEYuy;B1U?@n!eRY85@HU3MlybKB19 zQ2kxGkjs*T4G#119-6LVVP#=e2A6L2a#u8pfg#xE_KK_F;?flnwn%JA1Oj7BE7}_q z%7CtMuW+8T=3ocOy)#6!45ON?S)?L9lD_0ka$o7VEmOK!hNtqHGVkO{*h+G)6FOsJ4f!0009#Zj zN?Fno=S-+7ooaJ68_|^p*jZQQu51HKys0&pL=zW23|7azb6s>w-WM3fGG6q0ispRA z`6SE%m(- z4F56oslC)$=v|Hw@o0f`xF>b*Fv*5&G}NXKrq--GA5idic`) zJDcJ5gBzP0Yhj~3KmYRb+Wh>@`#1TEi=BnV`T6y`jnJjXI9w)PjQjU!g?@-1tGd;WyP9c~JR7_UF7Z%=nm9*YAv*4_Ri=Cyb z;RmX>6@`E2;sV}UcOlle#rQ31`E63eu;A*1F3$K$0tnKD)Z(E$yPFRCbXlJ-8&0FJ zTfS(FIy5dBVg(4FU0S@j)E(e$Ah2-^NJR506^X4!N}d#WfRw3Wm;(mazR*H~(8A}^W?3xl4fvpP@i;nYuv+mVos8No=?|YsEYkU5l`AVR zFpunwsQt*@H|5XpG#VRu8&n^>Cm>r7mL=fkHux`6d}iI@8eEO*_xLa8Vm|+?_m#Aj z1_28AgBfoxhnrlEg9RFXq|S8@l838 z+tJU?Hcq>CdEjs7{r9fFrRVe&*3|r3sjssh$1YU4QT?a2)4_fPy>yNLI>QqN(d#-C ztM8cg3e}bFB53(`H?;nw>s^n-x= z`Z5K1v>Hx~aDskgiVva=&klA9IG_Usa|1zAA0+Xi!C#5Zl*y&_I^+a;%d2F(Sk|795k@TfqpR^%>b3#2(=!9Q)I~{f@HHYtTf~8NuFExX)QO zXW$@wO@WTcGHIV>w+6YpTRD+A%EsX+&Ej$Zf)SmY?8-DRXSVAsECB|0r^&D|8Mo+u z>mDlx(N78&uxj9WgBbfL*Ry9ZpYH9kA4j6G%022lIpAP1Wng&TF9R--N+T@s86BqFLtM0A`I9q+dZ&osMagrf#Fjh;g}y6k4W`)WHx@mpL4UpbI-o8yts5VpnvqovV3?^eqOq2zPjvQ_q+=I6E=yH`+Fj1 z76lV_@V%QjETde~eKA?RDNJDa`=B45AM~l>o}ieBmT63%(SX7#OsB=1_RS>=!{&oz zK(MVe53gMd8qtlqXihq(1s)=`T`wL(n&(YoX+INqAne-Av zNmwez6J$`qpS)&EDchwrBI|<}hKwTvLs*{WF55&kf_@kyDMB4-GipIDEKnVii|(vlVJA%y%e?_|-)0|nNK$=K`=|0n;GVv>lOJ1sT{vm)wi3T!Enb-Wdfax+(a>mSX?{Fd< zfcB^1b0G-DI9i(}5wAzaHU(0y0!9M#4K8>Jrw%3HMdL>p6F;WT(T14ws*Y253A4Cq z5{oE*M0kmo?FPqr!rxkLo2es;i{TQYAVqz=E!P+Chgl`j03viV4>3hOlY!Z4e7d zFOT?RW<8kW;v0BbCm}=s)c$z8U}JjC%nTP{>+|Ch{$8~OD%*%ZZpk8 z_e|F!DpA3dnaEvqz!*HYR)S#{!W~}%WN?5jTpdPC03Xa01w2XI`bkY=3FbnPW94=5NY|QhqK|t~VXTgA6G1v8NrzSZBzXZLICE!E zOm`6Bl#!^<8CSsgb)kJM4+R;0wCZV?-oAeC?)v8PQs<@?rP5kOScxZ+*m6xpPU2Do z{g3Ks(JUL9e?;KCEu0A;R^8U3yaP?*nw4(R^3objGOv}_ln?EtgE8R208}+2q>`G> z5MEe3dCH4t_Ixu;HlIBv%ws^P!qgHUq?%hN$QWiOI>W}l>>Z?~BgD#UO*rqRQ#=Pr zL|9UM7G%W2>1igaO3>+fY}mm~?J`6bMy6D8rDmBawzD9;5urkDfL1COD@k=HtS|xN zSo7ZI8L^EKmePbdJz5NXI_(<5TDAhgo#TGFaDiV;Y)7q;M=xTThtmq#O-@$2mLq`+ zwEBvEe};X?s@@(EJfF$C==&>3mjUsojNpi_?<2c3lBji&;^34>LHtd*Di$M6yNZ>g3M_p#dC`j$M3{@-BQhyUO3h(e#Vp?TC=(V; z`FKzW9j*t!7VgtNYUL~Kxst8_Udl1IraoScpM_WmP7#^4F0Ycc&qPSRsn1Tiz;mNw za2puEL0~)wj_bgB4rE~l?p;^jL@$Ex6wsHyfq>Gc{~a^pY=W)H zeg?gEsVP-B!t<~}i?W}AK7_kk!KZ}uk1(*IxrduA-(?=gE(!vR%X94%J?4WS^U0n+ zgh!h80Ozm~9;wbNg2IM2&|(7@RO7uc8R`?Y6xi|t#ZiGS3jP|?<7gxJv+%5UQFl6U zxzV)%%G`tJ*PAL7-rqDePi z3&}qtR8UTJET@H67G7olOL;Jy`NUt!ukk^CTj%NC>vC6~#UF3%ZQJc|N6X6)f*u7I zcLN3!y1_ShGB`^bQMcEJuCl|6+?~zF1JgsKG9a~~!80+ZJYGb} z65Q#IzqTu{%U4_r>9Y@&qm0rnB=NU`PIJ9ZG=E0-a7|Jr;%jkkfTWKxy&N@Txht}` zKUMmGggBmZt^223K>_7>w58U%lNivF8XH`%A?m|9;RIGlSgdYu%&*?qcud!q(3Rx2 z9Zs4HOwQTXINaXa*?6aMOL6EZ8VRNsE_`n%Po28z?DoUMjtauXZNUK`7X{~Q*Fr6Q zovhzSRpQvD$f&as8pKh`=kw`+eldEG7zqSfPy-u;A~)~8kNS*CZ$hH9(^q>55A0*V zjI{zJNYSEPGxcUx!nKZ`akeTzJorfw8-fyxPY+J^mXYN^dKPo}5)o?})Qs|DxyKx$ zw^4LNdBU_ZxuUeEHGwD^a5jWVc<&w?3s@(kdgPQGA0|8{C~w)DQ%^3j5TgO2iY^qJ ziWu`vCMM#vwMXhX!j5;0g$iO_>q%J>5p}^yaeLUr(qK>vJ`bA@H&>OIl~UOqKa?Q2 zbMt(@1!)tgYN=GJSi&@Tr*=fOX3%4K-tH^EC`Goht`#OZMFr{{a+?2}|P%`Nu84F~V>9ZsBl&HHleO9#E$2fGNhEXxRPg$C?JGmrfGpKxO1A z<2eElM-J^-lZ$D`{W)hs4R-;mWriG*G$g}}GE580{MfRLm04_x$;$F3@6SBu??ys{ zrJJ7_vS>@`rBV}+-2Y5pA|V+XCDyu_K2I1f$PHNK4QGN0DV(VF!XL|*qsNOquYA$T z&=cwlsEs{L1ev6GQD|mLruAC<(R6%kG*= zMhS)>P1$6SaG+g)a*tZ7x7=qB#1(HKIC-5`KWi&OE$MCobo{cMl=Grxg3HE*6&iXD z1(m47nyOS7MiFv9YJCnZiQ|%YIv$&#>ao!rXmrS83>+zby@C{@=rv3Z>m$QuwC5HB z(T61t5jST?9cprOpxmPv9yUqqL_e zbWR!9g{`!(XBb1#)Nx5LCx%vVp~d76AjKxjDQCoQgtXvf>dhZrzNqG&gi^h6Va`2= zE*>r?a@%p>Ugkvpr+K9x!rd$w1IclZc;5$3ZF!88kiP{U2(ky!X8CISZUWq5LP zSI#h!hN<5kl;=y~Glva~W3;6rnp9B_=?7T*bW4@m!n*gluniUiJB)=Rmg=mSs!Cc{ zcWfeE^(QwGlJH_@|1rA#tGFNJ*&vyaOSFVmi1^Fxa--th7&JwzQ*}vPZW&R$KjrWN`@G$^~5-k{28>AgXctgdYDn3XG zDVm~D{l0jqY|1DS54~xqLK7RP2@TlTz?+UJtdtRDxLJ4vLJVt((lG26H8?@~MoV?0 zQ}ca681C-kKwYzy1i%RE&Z#{@w=|>9(S>dY9uReo;g{n%1o^e-X7T8no6Vi02yBS_ z^^ER55C01<;O+36dpnclaZf@jdRX6Dr44Q31Fhf#Od}?aWs_>$kb!8l;AQ9B(x?1V z%dPOD`d}k@xw$ZGx37oGVR%u#c^3L0|L~hjdcz9#wK*p@EM3xC>(G1zz2rwMbS|~R zEBcUUyIxa^OPxy}N?fBG5tf6uI8587%)2fStpEZ*{lCBQIL^?QV<&=apb*wQ;8xdl zI96~0r&8?8T3O^;6kZ0xRHDNnu%h6x9C4d5w&ugtY00yBVOv!IO24mgpET>Eb4GG9 z4h2-e+7hddIkS@o-nfykJJ%{n$1UHI!x+VMq|^l6lw4wN{XBjMA4*i)N66iX)h{`+ zMBq7Pd`B2|L*h{?mx+=N!LzxooJlf<>xXOkFlLw&#{g&zq+wW<;Q%zV0PzLU92_bF zHKUy_4pcj4YKSvQG1pCF|BzO-4XiEoSpGOLiQ#a^vTDKvsGcI@vkqiZ*$FMD1hY{w zI#CsoDh-0!7SIY_fqS_Oe!^MofnEv9dZJ9ek`|$r!lXHSwyqp28$< zwS*a55M2KDWdmZeE0%Snq%gTiWE&g1+!bdO!XR*=np?EeJsXeR$gq-hhutrYmKQ|{ zn2=BSh)JJdhnw+Biy|_+5_;j39Wx&Kh#twSuv`%fE63;*@)bnkE~TPC1x4PZKG)VE zG$9w2xtSD2YD(wTulUFE#k{0YZPpZ7yP8ssJqg+61`bwIy12F*X3Y>qvZ$;AlXrr3 zE~OBc@nh5-9K`H8R^tZC1Pw{@c`U~0RSVQn?o6Ur5Zl|?WV?yjBC;T<=`BnerfKra z5gMNf_PE^@ZcR>o$=5+DDDJfLafxBoU8RoT9L1QmndBqv7Xh+_OV=eO!d>^87vJ&V zlZi`kV;H{2lwC+CL_0;MMr3dzRk9PV;burp^=02T%!M{6-YAsP`tpLt83*P|1Fw^+ z;asiL6!JyHDtRgm+b#R0NdK%ZP_M{=Lm+IW=U&gfG{Crt2qV14Ega9r98zeX>n&m-B)hw9_gad5Yt_yWai;@738I;{ja4{R-D>@vI? zCDjq&p1qkI=tpa}k{(Cw26^N9eJr;%jNCFk8}yYmQbiq)s2DsKPDcVoy_{QeWL}|7 zaur5gruLmwac8M6ve$Aqpw(Gq-sehaQ1rczVdeK4*Qu{C-u>zY@U259Tz?Ib{aZ#= zx@5k{yiTNOJ;w;|W$K37ei#xiOY!_-H=~mtPlfZ7t8&D{BWgN|*P-!;*THS)C-D36 z3Aa$c^(HtgC$B8LiYFjF)BcIAIE|Fw3}Zj1zLBbY?&~D2Gr!T~mE=`=C-~*U;;WDI zUU;j2=Lzouvo!NnRyk~5|02;Vub%BqB7KwSvEL+;H;K;jCO9jnFSt{P@M_kf6tBz#A@$wuo^(EW zQx?Fs!SyS*+mr6l@Isi-%O2BTZT#zuI}~sA?tH@8t#TOp(sL1CXX%XZvj`nI@nZiS z`0^(elPp^lk|E3RNkt67Mp(|Ad8I`c5?W}qOd=DEpZbl*7r z@sScfG!A`LRMJy--ih3HZQE3@4Xuz^3E=>H}>giHk zRkU-|YN^k*C`~nc1ZzN6VLAvDtVh>$V6|c+^?=d&8H7@N-ZY871)VNHA4P?HhNV8r((=bYCwsC z4G(Fk4XbsFyYGxh$+?p!#WYehV1)ed4!eQtu(3HMM58OTt!^eN8_wP+Q}qL>0Xj_g zk{%J#=y-%O9*PU%;Wt1n9wvMfyY5YOMlPszdcGkSF`bdJi*gEKsngstB59ib8ERC~ z<_r)je30~~)}L#;OG%$N52x)#6f>B0%~guzude8v%vD0)x12w^VY?mH#aVkqr+O7D zP?`66Mq{aU`&n{Ulr5+Q4cF};YQK#zZy zYqk-9XNc_9UNtCNinrthn_aF;O35)nM5R8Ow*c*`JIf5Mx$_Z*HWC`1812>)o{k?aK;*gb@@IPJm3+R8pAx&JM<{Vhw$1iFKDS04HAzor19X1uvG`2 z(E=ug)L8Xv0t^2?fi(Ohj0=CEJVk_aFP+5V@1w+d!!%{~GXHYTYDbjmfSQH)@vI*m z$)3^iCaIR?2MZF|G6mtovA5H)Ve(M9`O(TgUCaNhWRY(Y$MDJg&x^~;OBYN0&li_3 zEkEUd{%GWXF0qe3C4m0LB!K>KAU#F_Pm6*bgEs5`DgE&;BK`44Cf)ID(&nf1$4}{x z&p>}1`@R-t2t!)kHkPjC>y<m-JN-v{}%S?JV5c7^9Su5MPhhnC04_*$&8)3%U3q% zBCxb+8EJ%0p1ELFI6iR>5_}6rR+7aNRGijWYgodgn$wgGWoD5PP zhk5C8D015Oi^?Z|QtdAut{|gu207=Um@i;5Wo4>ZFk%jM)NA zU&if8ph#SQn*4#7!~M8)C-Iol6vX|~P?wjfVy3+H<@5m`kWNNMhI5hl5>ROD z$0d6{$u&QaCc>1JLWd>tVFu{<1B-bAZ)Q5A&9a;FFM>>yK$`iksB~CryqBxdwaNeCev(^=5an#&g~XiS=1HT zNy08mX(Wiw&|9y_$*wGy3MCb)cEm^pbWiSVTH3EB71X>9U1y5gX0gyk2v#bHa))M@ z&Ni;<$*uELlkr1oFm>;(b$hiGD^g^3I-T%Zh-1K?ROJ0V2L!G=pD%R|baSrpYcXO_ z^4O4_lylhp4XsqSc7G(*_Cj%)BB*q%=OjHNi*e!LRBPrGVOj;thhw_7{lK!vY6S*j z3Y4v`kq#}TSsgKn+S!F7AC$&ujjO=sF4j%iL?vJ}yYXFEJCz6EhbKKmTerj-&ZB!+ zG9i2@mmD2+j*mOBh}c= zm!mqw-L}Xvk7yOs`>{%(%g@=~5)x`h@e5e-b7Zj)gz^!~P&aC5?(}WC)nv8&)GHP_wo*ItWA0QRHz-aunvnIIal~Jms_@ldmV;Z_LRH2p(Jx zQzTTOTngTChgfSB<0d3gyqT_BHq#;*+I53}ow#rkTq-ES*flb1#bEwb?s6=q&YirB zj$sFo-lqYNz8p(D$Q$_KksWk0Sr4Bt(i<$ zi&L>H-;o2}WvxJy@rkxWVBURr0rmn2;*pezNrrV_r0ksU;w>{p@te4(QFw80yGuzXKuT-Q6F%S9I{rHG~?c%(K@;lBm{Q~pCzZ|6*-8{_q zlR-hBW%k#|`5oi&@{8V_A4Zc3B-VOyB2yz*=g2MaTB?zxY8CWHG^EhHJA04JpG4+O z0C*B)eoaG7Za-}T=I!DAm@`2nin9coY)AAZF^jm+%X#%_9lxZ|wK1I}BMyScD$#uP7=|Ju!&-HfYyv$Q#px&C6Z;@1 z%u?+?E&+tIYAOI#!wiiw+^*I&Yu)(ECjn!4dSmnT zw8A*c!dF_DfY|AD1h&CMyt$>)vTrAG1Mf^GMjIz1}}eK#GqS9jJnHps^l^_XHLi{;in(^X8Oj0w~w(nnk;wmB>kmg8~GJX5^W zoIS+PcOH5paV2Z`!dN-G_#%H=nFeEmSIg^)z4%+ zney9f1R7r()SgKHu8eUY{0BwacgkU+att~WYsCbOgUyV=8dG%=Q&5ohT%$G8=k zB_q*8Cn-V&Y;}20cnG(Zj+A|0TlB$%Ye|=ZW4o7-5*zh;L@{V;(QK@*ueYDSbkPW^ z7V}nTk8H=^Cv94Htk|rf>49KXJ z0xb??>m2n11j;${L_@00F+(h%osBdU9GD=cn3MU0xbUWv5Ec`xN7D)lV5vbTg!pKC z!s(YA`EUDct4`91njm--vv!rO=_hPN4Ly0rGL`BI&X=EZ( zY@1Iii)rBU!6h4~<*q1PPq57TLV%CjL_dkfaSp5drSy;(nepXJAJledUSqSviBk>6 zxVPU4Z|JqKn2&RZtBI)N`o#1{nlvoNqt0<>Aq15?%dUp_$Ksr20%sQ)Z$&1OM|$N1 zR9UBmC42u8+>P&`wIy*lx)@}TtBKz*23^>`PSa${sUkp?+L;tfd=xU&LdM6VUEVFo zdAo}YoaxBXced}{y>04t6D=-ZQUOxQ6cNc_6yA@fIZO)fb83NQQJf`dKU{jx($X?T z@l_ZF^^Kb_xbsyGE8XlUTx73L*%=|liRfwO?7>+D5ee%CAD!_;3O{4n(GipsE0(Ud zT9?Rai@938yR#8uubOkEg-@NZ^28pmU$t^b z#V){N#*Qy`7CMYffrEmp2ZT9F`aa4j5=h9_&lTn?t82^_&MU2vif0g;1n$ZZ`@lVb zX)iD0Bo%g!v`XJDil<8^kIE@x?m#Z*C0hr-*_hud8$HgN@t>n7EI%cf^%Ua3!}_&J zZ#s-JF{8*G$hB&@Om&QE8JMwSx;Y2Ao>5IWXgw6B{oBc2ghD{9L!|y=EliMvRF5lg zPg?4SxrVs~s8cX`#|SIdmTz!Lq`_nbR@ft5M@*<#Ic4dDBC1p#diuLM`l4GOyM&iM zV4ZK=iwivM$|7Jmjdsgl;jtxT6wUz|u$M3yAEb}U{F(|n#*i)2`AH{Ak-iV_Snt2NyVmD?O#K!v1?Vaa8J^`#dC|*Y6{>khH3*rK7~L&I>5K=7u2d%K zElX2gN$3=RcxQ!^x&24WLx`EhwODn+Jv+9gmxEfsM9RX_Kp(nOTsGjR(WNENck3LK zOBDyM(LRZUV<;hg_Or|Wj;l@SyDoKtTY|&2+@@Uro7s4~SsXor7LvR$#RK>nMD-`^ z{~jJIR$qN<6!yUY5RAlLTBQEYSXmiH-FTRZ>BQYufOwUaqbJ zM|hN*gTSp@SiPSd3izLzr`Fy?=gKhMYaYR6-N>ZNbj%e_eNt@5O^A=jT4_lmaiFcDkP*|%Pq70l} zKk>@h8a6vZ^DRmmW<5o7YI@Zm^3y1Dsa6~5YCzq@*4 zbA1>7y0o;mb!U6^K1-4lg*}C<9>vFG=$ddS5;rG(%Vt6nQQSkNp{Aopq!HWPL>EQg zBs$(Z;reI-b`)+?3A>UKc$K-;=BT~{xlt?9Wp{U2I4EYUwx9(SW21)=A2|`B69;m& z39ZmTxd4<=$VyTc9m03IHp<9>%AQZMiV#b@Pfc-M=`4Ne7heRm%zj#Wg3*;a;v^}{ z3M{sv)bakUjH^SjRPG^vGaWnM1x-ywVBS>ctGTN1rZRK2!rS{s3yPy5AY0TCGoD+j zPKw99Y4s_SWD>8CATK?ok11ZTF9H<*nrm4n06=`0ssZKEl)5Cdq!QYLC(EVM6;4a{ z;!%1KThnu7{H`t6hqpIK#%>v9l?HdEbX}5LCn<>ovhJ{Ey60zdkT**bI0!ri6Tj2d zEm#pNOjfryE|hR5Bw1WdTOGoaj4FiY*1tlT;htv7YJ93iw*uBoy?7XP3ZCiMDOfshoEERV>eV(Sn-ae*llA9fw#srwdJ+0+Ihkp13 z=z@#&IW`>>Y~%X2{8r&Ncc8GC?7+X(T_q!f@XYeyJ|-W!-!ZM6)(UUFyn64}5*Q{} z_=V5L6Z(34Z7samS-x;$UtjF{G-;vbNki*aXiMw5UuE<4y3NP3ahp9s=O44*y@ku% z@6BWc!nJ=w*DGwRUeBF6iYNE+&d$R%bn3tjJ2&6{i!;oovsW&k+}YLf@niNdvb2Ry zJeH+ZaB>&k3Yj{Ja?P_eYg+=J)`3o*C9RpAXVo?&P%N}08lyJ88eEfsXwDVwEi8oL#Yt$dK*on zu$*#YE0DH9t;&+v(5RXvL+@rgbsxvfYsici_J_xZJf<+n9s10cwaEjsTnIK&v7=6x zs86@X2WxAb_zFB;-Q$^Cf^;Rc>R=t=5*btFpX#ehC7oH@f}V)g&S=r3$FnxXi{0xS zwWR5vxiubp;nE93Q(ePG7mqTX<*vr8c^A`*mZs5+o-MbL7ZK=_|(CrLR3^T0r91h~L4hWQJE3 z+3`F{Vp|OqH8e)b8g6#B(wbUObIyBNDS?P#EGl>$=UTGQhRxWdRoU_eO#wB!)$R=vebFM)HX#3VBW&YkR5n+7)X{qy8$uKJsv|E>91 zZ{jmf;s3q-{L)e>|9ko3<;AD@-yexPo2EP=Ku7)3OS=gtqucx`$Pl<(p$>(C%C*eQM&Hfk3OE25DibUznqM- z6W{L4sf5^#kqiai&)$Tz$2G(;Q)mJk25YTE;_{HBJl86$_NqFQkJTf*oqDntp*cdp z?9mj{M*=Jlgo!t~H4`#gRjMeZsS-r$ry2w%udcNb@r&?4!pm9^tRWp-A97I3u`8( zbGBKdyFwdW<#L5j-U}F_$L<4)vNx{>H<@PQf|?o^wp`lRv-U|^3AL5bYvqmia%X4t z!YvBaovlA`J*K*h-uRO@lQGcX@ zgMcu^qjdUEKUc^77R4Hn{Sjf5oGIp{uqHXP-cK{x>4a{9_f*gP3id+dB=%^e`3a0ez$4BAbFzrUe@En+#=fWmf(Fqpo0;6@V z@iyu1EWbO2|mxJkFU0 z4Fod2`7xXkN4#bpe{#EE>E7CYV3S5=3gt$=<1kLLzGVmCDa4H61aqKq7H?7k!R4DB z_vRhM=VRjz)k80f@_lJxgL!eH@Mb)m>?h&P%}u%A9*_aI{LXoOLfD*6aHN%e`h~fW zvSVwu--XLa1LlLrHi;s#s9?25e0cpku6&|05COo zK!rh(2wa7nL(tR`4tMRd+ykxVn$vo&kcb}M+Au>9_n&D2s!m-5Ug z04B7XQ{pvCWf=jEd&1%flzK??CSoTsreMxd;aG7Q_$Mr;BPYnK2p+NSXou~?#R-xn z2#r}7q2fhRU#+Pt2^BMz4Za8M6FYPrZ!P&LZ@9G9wjZ3lSg3n?79~Y!Lcf|&9F94$ zq|B{u(hp5lAGrg^6!Y#eA0burObmAiE(riEE~N&H^1_>Klt{20u;MJrm>d>WcPNw` ze#>%FYUS|Pr?`nC*^)(so)$h}JO_&Ja#!lFs>1?LJjwLt0ge0KE8xMxA$0dco@=(C zL&h>-O^xYb09qxc?4oZX=*N_~f`=T87lOROiY=6p*z ztDp^OO6kawGj+nZ5nAXmXs5laSOqt5E{B?bx|Dm6fASCbzEHDHNk@Usa z!K%(#9DtZDlJagn9Qc!{ngcPbeh==K9BzzD(oKfWG7XwJ; z(lMu`n0oQB*q|F7&vf}EhbXAT|C7<){F@wO#wh>umoCkS|I@!x{D0}v^9yeYFFlR_ zf9UZaIRCo#CgZ&iKK^52>EiR1`p?f_TzHEA_)z@&ZQFNme_HVQC^bH94Czwb+b>+$=4^YrM;^Mfz@lJ0Bo z`I7y2y}S2M{>6WO`PWDP_@Do$^;?_&=qG>v`WLPL&A;Zg9%*Z;{s7X-iTcm3`^^ogJNNuThEpZGhz z>JR+3-}!rg%UAyIll=YT*Wdfv=-}mdeaX&)cmK$b|J%Foc=?C^;m`fRkN&Hbt6y~K z`Ky2VyT0!){?+gO3xDPR{&l~u@qhlMzw>Lp;MaZocYMzu{o~*Et3K~nf5Inx!XNyj zfBNG-?&Ch@V?O39e(Tr%hA;n}U;5?0(_KlwBN^`$S~zV*`GzxVzBZ297q#ih%C`+I-ld%pJ{&o5kTcb2~WFZ`_wt%Yy< zKmX>R`S!p5IiK^ZzUABg+Gl;%=X}Oz{>tC;2ma(Q{}rF{b-(W$e)re?v9J2tKl1+H z@Y~+|f!}iUzOOhq{!PWg_J8uHf8n40^nZEhE8U;?ssHcC|Ji@M zx&HQl_)q`CkN(8Jf7|M<@BX|0@Y>sM{`J50!_B$YU;CRs_?>^_2fpyF&2RcMf8|en z(|3H@r+xY#|HeQ6%YNCX{;@yt?Vs`~!B>6FAO56I`sCmF)qn7}|E}NnTYtyz`OUxm z>+*x&@OtrqG<)A@a{Op~`0$;(Kl+dV-S)kA{qR5fH$V7eKl=}U>|cNXkNnH;`=Ot{ zeC5UO{OjL;@$$-F`fLBscYNpH3&Ur>;Maz~`q%v0&-?se^SQt3^FRLMKmHH=k#G6f zkNwzx{||oM0j!zt+qk)U|E2Hw&aeA#yI=W^U-La%KXq*@c*j5Z*01<`fBK~_{G2cT z+MoT~gN?7ao&TPff=~NXzw;}8?^j1Z^@s0tKKu9m&uecRzVG3qSKs}fzxvny;LrTQ zpMT+Je*XH;y#M=-Kfd>y-?I4W-}@bF|NT$hUTFNM>!0$~-~KoM-S58nDZ`(?ntkPe z{K+5tm_M=mzXpH5weq&V)$bNR_>F(*xnK9A-~0<#@4xRW{>knyT>dYw{)f*y`j)$C zUhFPi`)|MJ8}q+*^^g9EcfaMi|Kl5e`dhLqpYfBwY4iHm4gTzZ{FrZi&yT$KtN!a3 zearQq{6nwZ|EwSSeP8{rKK)D6_k7%+{K2d5zWu4YZ-3kGKe+Yj@B7yEZyo*pUs(AA zS66=j9}55VozLmN`ltW%pPBxuZ+iRBf6cYmKJcwS_7{J{gHQdz=l{@O`S(Biu2edl{#`Q)$vu1|`;;!D40^N;=1Yv1ulzyA*|_PR%3{p}ZT{oVikYrcN^H!gn8 z|MxfkLZ|sxf5m70_@CJseBM{DUV6)S{pGLxqW`t=r9b|$t6%fN=YRHI(z>62?yvgZ zKlV9a`?jNR{`znK?yvjd-~ao6f8=BT<<`p|^Etoz;pct)*TkRv+K+axeA9zZd=UQNXKsJ@t#5eu-~5eV_Srx3 z4?l2k^9TRSH~;+p7yln0|6l*d@BVM!`W8)S%GoScnKlp{8|KG!Z`RRZ7 zyT0r`ebZ;W|0iF)^AEo2%f9JHUReFEpL^F2{O@~>zxCVa{@o<-pZ5!2{zrCJzvzeG z`%3oT!>|0-+yD6Y{rkW4%l^$Dd-o@N$2;anTc7oR{lpKw^b3Fd`(FEj@4oqU|M)ZS z{rTVK*sTL(Y$oezH5|NF@w z|8vWsBeczLmXydibTwzu`0TANc&Q{f6KDm%reL z7x(_;3Qlk~{zE3ts)U z(W^hv|L5~}Kk&CN{TxD9lr&t9Z6M z=nVz~Y(iUHA|z?0g-m`srO=Q*q}@%6A{{|<)n`%7BCj?1E6u4{jJF~0ZaW$#d*c;^ zY}CAw{MMUH-C9J8Sj@d-Fh2Zsm6qR>7{bSn6}eFn@TmLN93;u zYgwP(Az0J7+yv4rugxfe;XE>-ZWH~$%es=lhcURIGAb<$I7u8=2c?!{g&*kCtk|R6 z=Y%i^G;F=?2jP6UwNqht&?6X*IbE60A}#6>=AVzJM~pztFv?*sfNo}K(nop=`h@^r zkJ0k^8#^~!90PjXTeo)J87_ixcA>Uo3Eq=z?S#vng$rkH`cP_?E3F5%`OfY6hp;=M z`RAQx&dw#{3_a%PHkX%>O?d8v?l5o65k4D#UG7}`MY$N+RY0wW|IV+k<1Iq70>9l! z#?^kJ-PqU(o6h3MFM_P!xrlT1#+oK}nF}Gj za(M83XTgpD|9M6>7U!jHCn>Xf2{z5WI|r98V9W5^3+tz?Q||N9g|l3Ou(_S>C4XoR z5~L&E-U%OW++RK02%Ye>P?hh7;N+fUB~%AxdwcCnx%|`yUel8c8R?hr6XXZ0gkXw5%q)>9VLYr!1?tCx zoY7{*zQC)&5LTd2aj4vNIb#Wg=-VbH5QjQwaj3n4)`p;pw&@5e8hT?L31^=5P-DgG zJNt~3Bs?8aMEkE}Xdg;^g?B(1!#*fCYHl9LJd|ApmXJxv?lT^R}_0}@yBlha_ zW?8TDTMZb4MoptL3l2C$Q}7X2^ORA3&?6zIXW`2h@4}5Y$v@$Nhrz_YtcKba)wP(@IVjSfp@kQviEY5senE z;uP~lc#nnU;ep%<*O7b?vvgEvhrV=^XgvR*I~^C(mU$G>d?el8 zP?=+T7|)1XD8M&~Y%);ToFoEs?G%`A@!q*skPHl%5@BUp&99%15fRr3?;y!$LRgz9 zWaL_!Q57JDx9_J(FKz_{A&QjtV;Hi6%GLoFQ6YFJY<<&4C%g++Ff}T5N|NY;@=XYG zI>fq7&^0toObfG(DvSuc_efuygCp|JL9g$9tkxB*l^eKEJQ?Velt9yHn84$8-{wfN zLgO+mQkXSFg?Vy}mXmPj;$T&5Ci6qJewy9ZlP*ZU|ZBjM}pLnk{h%p4JSIGb(IACa;~?i!on#o0>16q{5~99^P^+Tf1Mw`w&YG1a@x{RfP7q0 zEH9m4t84Jl?#=b>&8>IcS-*RK_x|d=+w1p*C2f3=WGSTr1%`~84(S5dGRZsv5JKZU zTPACfwvVmxhI?qk9EG*Js7NPmqQ^DcNF`uy>baT;<5>x6rUK+A&Xg(|3swuI znI_EiQA-K2;v~JCRPOE9sVt6++_EEcCqW6D4sf?WOi*tp2DK(?gL9&pXE7!nXpjcC zUhPYcv?+Se^&?8un18r-=2wIt@22#)SDX(? zt#f`yN%bKU=vYOUaci4&@4}7)4g$7>hjg9a`Y!abWou(QxudE&;@zU4C50&?t%{oJ zqXAQlyBSt6b3-_ev$>P?M(5lxx)%)st~R@Qw^+Gs$a>rub?5I&|&RIRyn35h_E5FBZEm&hBiH+QZ92>AaoW6mu`*cI$qOH2@`4Y?$tzjtmC4iXKA{Ed+D%TCcX)oO9g|!daFq^8 zb0bCNj6)fmZ67#VI;xh`j}z1dJS&%%+GR^(E2}oeZ}K?S$dgXV2}&vAgp^|w!Bn+Jg?G$cSFzk zLv009W9cnXFmnuUavVrdQ>qS{{5t7nwG~s%*L8 zjP(Ogu_RcP&3(qMx#pMDj3o-9`9-9{|Ir=JPF2safb4?il}v9ix{;7;pgP>%wX(OWw$PjOIT1wpkAaK-cHbMV^ug-tkw&k>v#o9a>Q zxl0D>w(#fJoX2cz^Mk4O)TkR%C28_h;@1*zZUyexN3z-N+gy{_wIi?NqX=DzD$Xc{ zH9`qX1<1|2Ro$1co5>z7v^qG}W{H^WgetQH^*(4)_wu;hGl_ben!VbufCUgcQV?W8 zKJ`gD;nJwoKPvzxaILZxbnUTYil@!2bKVea z-Fgc#sI*mH;M6Uh|E3&xx>@G9$?5_R*Y0iY>|9GOUAf$rdr`7*j0o5mXg88~!qz9m?JhQ-JP23W z0gPr)@$ylTv^Gz=tYWVy&!N@{qTy?f(N(1$vFZ!$6Sk+w1XM)S`)w5x-Xi495hzPW zFB+#~L}5CQ#`5e#T#A%ukK4?VGdl?attc>snXm&)MIK`kb8g6T#I=in6k9#6P^t>f zp$)vOR9!mOgHPP@)I{nh5j#<@cS$n3hk4PC zx`}OG-l`Q)*0yy|8FIp7axbEa$-I43_BM3jaK=>RH5I_vowWb4!)UCxsWYeS!YCWH zhqw^hd*f*g9dC#44nq9rjmNcy`)=4ei3k5tL<&O_{qWW{oRz#TS;56)|ERrsW$w-E z56*3m+l{V-<^ByOriZAO)%Fk`wm)d8YY3CVdofL~tg6TE?EavQ58d8gJLOK|yqNUt z-EF>2Py%7I!Vf^P(=)cpjo8Lv8&SV7Fb{{oUK<4#=t3vAHcBSBw4wJhg~r)$kB8cT zW4vhSz*pHg&`V;zicsrb7ne&N1(_&nan_L=nK!NfXnqX;BRa0fB5{Xj2Fy1^wFA?h)Poco4c@5Mh}lBD1#G4GP&q;96@}YN0Ff3JifG3c_DHxZwNw=u z;0T0``-aE~Pa~3DNSW~3w7*An{HRgmx&8mM_pa@2+(^Rce3gDhhhBR~iKN*ib+Ke= z){$k$8{ZzwnRr&C(c5e`C9X*}(@jcp63uTvb;Grrl;qginLWwuT1^yC01Aadp#W5= z+m%|OUsc9D7~AP6{S@fj7_~E>saE!rNlLL5SeMnC0X*E@StcQw*bhNCz!oGM}ncYFTozyBz+1`=#c-OCa`2GzUTtsUkA`YDp`Mm#*d?VqX9}>LoZXGO?YY`R_u%b3gvo$k~XN~cc=X>w3fRs zISP(ASLC_vAe0vVtT8}LUxs`6)E@8m4maW7qoc#lm!ub9zBPHU0bhbRfbTcZ<}ORL zcUK$M=j!n7c{)iR4&O%o+U-{B=~R52LRw76zz+ehtk_X}7pJD!l%vmDueqS|8>Cka z<)qwx8#tYzqjC3Ft75=Z&qN&E5vw#Vqw*PfREo&;>+Brp zOYcLlD4npaj?q0=j%^aS-&ei9(;Y9`TBg{g5o`jnLwH{OhTVn9j6&C{(}ipDiw_5H zo*wS~zbpLRkRug-?}?t_&i~))3mB!n|KNNN-|Bh5TnC*~Q{&-N#b8tfr>4rY*=#jI zEu?gqllX@&M&J~rM4WJRXN81%&=~5;M|tr~{NaBH)Ew_IB*PiU-QKV0V-$__EJx2l-*EqZd_}d}JX&&L>xc!1u6;H{s1DwmkAr z;r&}Nxi%T&TfJedgK3N1Sq=dr3HK;!H2eQ2%WYpfP9)9yEJD)^-4ht$i*Mz&P|(`V zNf%3ebN?QMJ&kiDmR(|+s$#0uPMbwC8XW1KDBVxe=0+;>kXVW?i7NBq5-fDk25Yl_ z3U|X*oyFVa>AW$5{jqbRwzTW&fr{z6-E4j5^A^YQ_=d*x%$aXB4&C|rr@rJXaN%XE zn@@kCpT)!9rF1c`Q{dyvkjEbQe>L)8cke`@k|!nq`ZU6Mw)&Ygx=Q*V9SZ3aM>-Cw z>>tvpP}y0ddEWZu?Td!x)LeUL-DrmD+z;EYE@+#Brg?-uchiC+W-ws8xn38a$|PFV6*FTC5g}R{8WlrGPR{U1XnuB<;pHg%4H@#3^ycV{4?dL^3QZI zEz5+ZWU6QyoL>$+l1Ypw@0ZxcK;ko#%Uat5EPCR`M=W^ouewZY5Kw$IrF)3z7J!he zRZc}nS>R4vJZTbNbEt<^bfM|2l-|{ALPRcJ?a+KX00u(>WIs- zPN|s7&S|oHTV*=$K?h(E$Gvov%LOqVqIsU5Pv*eCe5hEX`vA$6<>z%rKg@sQJ*1{O zE#IOlCH)rK!A3%f*KnJq*iXvFatak}fm2U1ae_C@K7o zxs_~no=hW$`q-S50?{%1eL3;Ozx+ss8e1jc;4ysSn{+a)3sK zUWS`i8t0Al2TQU%_GBHLkY0!gHxs58XAQk=e&9K#+UnWwNg>&Hf z3pvTPpB~woM{bxn!uQ8{I^oNfXeZ{Dag{g(&IJ(c_aRecZ9*Ez_KzS!qVU(U#;AX?V zEJ)4`Zn`u~?-iIhb9NfA+M_#CN}oa7wXA|i5_@3AuT=BYgef^slxXCKm^i~Eu*tc8 zmrE-^tTvAB?!kLW|Mc+a{nHok^!;Q16`d%Jat{yJKy$%%l~wNZ2ru^Iwvzz(Y+i

O9cPvWb|(Exa{0fHzEdfy_Gt>B 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%0DP$hmG% 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

Ea>)H+};9*ta8tfR@3@zUwm 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

qAlkrjW8#Sa&wQY977s=_c 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

O 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 z�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%0D-2_A1@)t(v`XbQb+6BUoNuB7m6nB-i$A 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 literal 0 HcmV?d00001 diff --git a/deps/luajit/COPYRIGHT b/deps/luajit/COPYRIGHT deleted file mode 100644 index 1ef7df6..0000000 --- a/deps/luajit/COPYRIGHT +++ /dev/null @@ -1,56 +0,0 @@ -=============================================================================== -LuaJIT -- a Just-In-Time Compiler for Lua. http://luajit.org/ - -Copyright (C) 2005-2015 Mike Pall. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -[ MIT license: http://www.opensource.org/licenses/mit-license.php ] - -=============================================================================== -[ LuaJIT includes code from Lua 5.1/5.2, which has this license statement: ] - -Copyright (C) 1994-2012 Lua.org, PUC-Rio. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -=============================================================================== -[ LuaJIT includes code from dlmalloc, which has this license statement: ] - -This is a version (aka dlmalloc) of malloc/free/realloc written by -Doug Lea and released to the public domain, as explained at -http://creativecommons.org/licenses/publicdomain - -=============================================================================== diff --git a/deps/luajit/Makefile b/deps/luajit/Makefile deleted file mode 100644 index 0cbe741..0000000 --- a/deps/luajit/Makefile +++ /dev/null @@ -1,151 +0,0 @@ -############################################################################## -# LuaJIT top level Makefile for installation. Requires GNU Make. -# -# Please read doc/install.html before changing any variables! -# -# Suitable for POSIX platforms (Linux, *BSD, OSX etc.). -# Note: src/Makefile has many more configurable options. -# -# ##### This Makefile is NOT useful for Windows! ##### -# For MSVC, please follow the instructions given in src/msvcbuild.bat. -# For MinGW and Cygwin, cd to src and run make with the Makefile there. -# -# Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -############################################################################## - -MAJVER= 2 -MINVER= 0 -RELVER= 4 -VERSION= $(MAJVER).$(MINVER).$(RELVER) -ABIVER= 5.1 - -############################################################################## -# -# Change the installation path as needed. This automatically adjusts -# the paths in src/luaconf.h, too. Note: PREFIX must be an absolute path! -# -export PREFIX= /usr/local -export MULTILIB= lib -############################################################################## - -DPREFIX= $(DESTDIR)$(PREFIX) -INSTALL_BIN= $(DPREFIX)/bin -INSTALL_LIB= $(DPREFIX)/$(MULTILIB) -INSTALL_SHARE= $(DPREFIX)/share -INSTALL_INC= $(DPREFIX)/include/luajit-$(MAJVER).$(MINVER) - -INSTALL_LJLIBD= $(INSTALL_SHARE)/luajit-$(VERSION) -INSTALL_JITLIB= $(INSTALL_LJLIBD)/jit -INSTALL_LMODD= $(INSTALL_SHARE)/lua -INSTALL_LMOD= $(INSTALL_LMODD)/$(ABIVER) -INSTALL_CMODD= $(INSTALL_LIB)/lua -INSTALL_CMOD= $(INSTALL_CMODD)/$(ABIVER) -INSTALL_MAN= $(INSTALL_SHARE)/man/man1 -INSTALL_PKGCONFIG= $(INSTALL_LIB)/pkgconfig - -INSTALL_TNAME= luajit-$(VERSION) -INSTALL_TSYMNAME= luajit -INSTALL_ANAME= libluajit-$(ABIVER).a -INSTALL_SONAME= libluajit-$(ABIVER).so.$(MAJVER).$(MINVER).$(RELVER) -INSTALL_SOSHORT= libluajit-$(ABIVER).so -INSTALL_DYLIBNAME= libluajit-$(ABIVER).$(MAJVER).$(MINVER).$(RELVER).dylib -INSTALL_DYLIBSHORT1= libluajit-$(ABIVER).dylib -INSTALL_DYLIBSHORT2= libluajit-$(ABIVER).$(MAJVER).dylib -INSTALL_PCNAME= luajit.pc - -INSTALL_STATIC= $(INSTALL_LIB)/$(INSTALL_ANAME) -INSTALL_DYN= $(INSTALL_LIB)/$(INSTALL_SONAME) -INSTALL_SHORT1= $(INSTALL_LIB)/$(INSTALL_SOSHORT) -INSTALL_SHORT2= $(INSTALL_LIB)/$(INSTALL_SOSHORT) -INSTALL_T= $(INSTALL_BIN)/$(INSTALL_TNAME) -INSTALL_TSYM= $(INSTALL_BIN)/$(INSTALL_TSYMNAME) -INSTALL_PC= $(INSTALL_PKGCONFIG)/$(INSTALL_PCNAME) - -INSTALL_DIRS= $(INSTALL_BIN) $(INSTALL_LIB) $(INSTALL_INC) $(INSTALL_MAN) \ - $(INSTALL_PKGCONFIG) $(INSTALL_JITLIB) $(INSTALL_LMOD) $(INSTALL_CMOD) -UNINSTALL_DIRS= $(INSTALL_JITLIB) $(INSTALL_LJLIBD) $(INSTALL_INC) \ - $(INSTALL_LMOD) $(INSTALL_LMODD) $(INSTALL_CMOD) $(INSTALL_CMODD) - -RM= rm -f -MKDIR= mkdir -p -RMDIR= rmdir 2>/dev/null -SYMLINK= ln -sf -INSTALL_X= install -m 0755 -INSTALL_F= install -m 0644 -UNINSTALL= $(RM) -LDCONFIG= ldconfig -n -SED_PC= sed -e "s|^prefix=.*|prefix=$(PREFIX)|" \ - -e "s|^multilib=.*|multilib=$(MULTILIB)|" - -FILE_T= luajit -FILE_A= libluajit.a -FILE_SO= libluajit.so -FILE_MAN= luajit.1 -FILE_PC= luajit.pc -FILES_INC= lua.h lualib.h lauxlib.h luaconf.h lua.hpp luajit.h -FILES_JITLIB= bc.lua v.lua dump.lua dis_x86.lua dis_x64.lua dis_arm.lua \ - dis_ppc.lua dis_mips.lua dis_mipsel.lua bcsave.lua vmdef.lua - -ifeq (,$(findstring Windows,$(OS))) - ifeq (Darwin,$(shell uname -s)) - INSTALL_SONAME= $(INSTALL_DYLIBNAME) - INSTALL_SHORT1= $(INSTALL_LIB)/$(INSTALL_DYLIBSHORT1) - INSTALL_SHORT2= $(INSTALL_LIB)/$(INSTALL_DYLIBSHORT2) - LDCONFIG= : - endif -endif - -############################################################################## - -INSTALL_DEP= src/luajit - -default all $(INSTALL_DEP): - @echo "==== Building LuaJIT $(VERSION) ====" - $(MAKE) -C src - @echo "==== Successfully built LuaJIT $(VERSION) ====" - -install: $(INSTALL_DEP) - @echo "==== Installing LuaJIT $(VERSION) to $(PREFIX) ====" - $(MKDIR) $(INSTALL_DIRS) - cd src && $(INSTALL_X) $(FILE_T) $(INSTALL_T) - cd src && test -f $(FILE_A) && $(INSTALL_F) $(FILE_A) $(INSTALL_STATIC) || : - $(RM) $(INSTALL_TSYM) $(INSTALL_DYN) $(INSTALL_SHORT1) $(INSTALL_SHORT2) - cd src && test -f $(FILE_SO) && \ - $(INSTALL_X) $(FILE_SO) $(INSTALL_DYN) && \ - $(LDCONFIG) $(INSTALL_LIB) && \ - $(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT1) && \ - $(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT2) || : - cd etc && $(INSTALL_F) $(FILE_MAN) $(INSTALL_MAN) - cd etc && $(SED_PC) $(FILE_PC) > $(FILE_PC).tmp && \ - $(INSTALL_F) $(FILE_PC).tmp $(INSTALL_PC) && \ - $(RM) $(FILE_PC).tmp - cd src && $(INSTALL_F) $(FILES_INC) $(INSTALL_INC) - cd src/jit && $(INSTALL_F) $(FILES_JITLIB) $(INSTALL_JITLIB) - $(SYMLINK) $(INSTALL_TNAME) $(INSTALL_TSYM) - @echo "==== Successfully installed LuaJIT $(VERSION) to $(PREFIX) ====" - -uninstall: - @echo "==== Uninstalling LuaJIT $(VERSION) from $(PREFIX) ====" - $(UNINSTALL) $(INSTALL_TSYM) $(INSTALL_T) $(INSTALL_STATIC) $(INSTALL_DYN) $(INSTALL_SHORT1) $(INSTALL_SHORT2) $(INSTALL_MAN)/$(FILE_MAN) $(INSTALL_PC) - for file in $(FILES_JITLIB); do \ - $(UNINSTALL) $(INSTALL_JITLIB)/$$file; \ - done - for file in $(FILES_INC); do \ - $(UNINSTALL) $(INSTALL_INC)/$$file; \ - done - $(LDCONFIG) $(INSTALL_LIB) - $(RMDIR) $(UNINSTALL_DIRS) || : - @echo "==== Successfully uninstalled LuaJIT $(VERSION) from $(PREFIX) ====" - -############################################################################## - -amalg: - @echo "Building LuaJIT $(VERSION)" - $(MAKE) -C src amalg - -clean: - $(MAKE) -C src clean - -.PHONY: all install amalg clean - -############################################################################## diff --git a/deps/luajit/README b/deps/luajit/README deleted file mode 100644 index 44366af..0000000 --- a/deps/luajit/README +++ /dev/null @@ -1,16 +0,0 @@ -README for LuaJIT 2.0.4 ------------------------ - -LuaJIT is a Just-In-Time (JIT) compiler for the Lua programming language. - -Project Homepage: http://luajit.org/ - -LuaJIT is Copyright (C) 2005-2015 Mike Pall. -LuaJIT is free software, released under the MIT license. -See full Copyright Notice in the COPYRIGHT file or in luajit.h. - -Documentation for LuaJIT is available in HTML format. -Please point your favorite browser to: - - doc/luajit.html - diff --git a/deps/luajit/doc/bluequad-print.css b/deps/luajit/doc/bluequad-print.css deleted file mode 100644 index 07f5c84..0000000 --- a/deps/luajit/doc/bluequad-print.css +++ /dev/null @@ -1,166 +0,0 @@ -/* Copyright (C) 2004-2015 Mike Pall. - * - * You are welcome to use the general ideas of this design for your own sites. - * But please do not steal the stylesheet, the layout or the color scheme. - */ -body { - font-family: serif; - font-size: 11pt; - margin: 0 3em; - padding: 0; - border: none; -} -a:link, a:visited, a:hover, a:active { - text-decoration: none; - background: transparent; - color: #0000ff; -} -h1, h2, h3 { - font-family: sans-serif; - font-weight: bold; - text-align: left; - margin: 0.5em 0; - padding: 0; -} -h1 { - font-size: 200%; -} -h2 { - font-size: 150%; -} -h3 { - font-size: 125%; -} -p { - margin: 0 0 0.5em 0; - padding: 0; -} -ul, ol { - margin: 0.5em 0; - padding: 0 0 0 2em; -} -ul { - list-style: outside square; -} -ol { - list-style: outside decimal; -} -li { - margin: 0; - padding: 0; -} -dl { - margin: 1em 0; - padding: 1em; - border: 1px solid black; -} -dt { - font-weight: bold; - margin: 0; - padding: 0; -} -dt sup { - float: right; - margin-left: 1em; -} -dd { - margin: 0.5em 0 0 2em; - padding: 0; -} -table { - table-layout: fixed; - width: 100%; - margin: 1em 0; - padding: 0; - border: 1px solid black; - border-spacing: 0; - border-collapse: collapse; -} -tr { - margin: 0; - padding: 0; - border: none; -} -td { - text-align: left; - margin: 0; - padding: 0.2em 0.5em; - border-top: 1px solid black; - border-bottom: 1px solid black; -} -tr.separate td { - border-top: double; -} -tt, pre, code, kbd, samp { - font-family: monospace; - font-size: 75%; -} -kbd { - font-weight: bolder; -} -blockquote, pre { - margin: 1em 2em; - padding: 0; -} -img { - border: none; - vertical-align: baseline; - margin: 0; - padding: 0; -} -img.left { - float: left; - margin: 0.5em 1em 0.5em 0; -} -img.right { - float: right; - margin: 0.5em 0 0.5em 1em; -} -.flush { - clear: both; - visibility: hidden; -} -.hide, .noprint, #nav { - display: none !important; -} -.pagebreak { - page-break-before: always; -} -#site { - text-align: right; - font-family: sans-serif; - font-weight: bold; - margin: 0 1em; - border-bottom: 1pt solid black; -} -#site a { - font-size: 1.2em; -} -#site a:link, #site a:visited { - text-decoration: none; - font-weight: bold; - background: transparent; - color: #ffffff; -} -#logo { - color: #ff8000; -} -#head { - clear: both; - margin: 0 1em; -} -#main { - line-height: 1.3; - text-align: justify; - margin: 1em; -} -#foot { - clear: both; - font-size: 80%; - text-align: center; - margin: 0 1.25em; - padding: 0.5em 0 0 0; - border-top: 1pt solid black; - page-break-before: avoid; - page-break-after: avoid; -} diff --git a/deps/luajit/doc/bluequad.css b/deps/luajit/doc/bluequad.css deleted file mode 100644 index ae53143..0000000 --- a/deps/luajit/doc/bluequad.css +++ /dev/null @@ -1,325 +0,0 @@ -/* Copyright (C) 2004-2015 Mike Pall. - * - * You are welcome to use the general ideas of this design for your own sites. - * But please do not steal the stylesheet, the layout or the color scheme. - */ -/* colorscheme: - * - * site | head #4162bf/white | #6078bf/#e6ecff - * ------+------ ----------------+------------------- - * nav | main #bfcfff | #e6ecff/black - * - * nav: hiback loback #c5d5ff #b9c9f9 - * hiborder loborder #e6ecff #97a7d7 - * link hover #2142bf #ff0000 - * - * link: link visited hover #2142bf #8122bf #ff0000 - * - * main: boxback boxborder #f0f4ff #bfcfff - */ -body { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10pt; - margin: 0; - padding: 0; - border: none; - background: #e0e0e0; - color: #000000; -} -a:link { - text-decoration: none; - background: transparent; - color: #2142bf; -} -a:visited { - text-decoration: none; - background: transparent; - color: #8122bf; -} -a:hover, a:active { - text-decoration: underline; - background: transparent; - color: #ff0000; -} -h1, h2, h3 { - font-weight: bold; - text-align: left; - margin: 0.5em 0; - padding: 0; - background: transparent; -} -h1 { - font-size: 200%; - line-height: 3em; /* really 6em relative to body, match #site span */ - margin: 0; -} -h2 { - font-size: 150%; - color: #606060; -} -h3 { - font-size: 125%; - color: #404040; -} -p { - max-width: 600px; - margin: 0 0 0.5em 0; - padding: 0; -} -b { - color: #404040; -} -ul, ol { - max-width: 600px; - margin: 0.5em 0; - padding: 0 0 0 2em; -} -ul { - list-style: outside square; -} -ol { - list-style: outside decimal; -} -li { - margin: 0; - padding: 0; -} -dl { - max-width: 600px; - margin: 1em 0; - padding: 1em; - border: 1px solid #bfcfff; - background: #f0f4ff; -} -dt { - font-weight: bold; - margin: 0; - padding: 0; -} -dt sup { - float: right; - margin-left: 1em; - color: #808080; -} -dt a:visited { - text-decoration: none; - color: #2142bf; -} -dt a:hover, dt a:active { - text-decoration: none; - color: #ff0000; -} -dd { - margin: 0.5em 0 0 2em; - padding: 0; -} -div.tablewrap { /* for IE *sigh* */ - max-width: 600px; -} -table { - table-layout: fixed; - border-spacing: 0; - border-collapse: collapse; - max-width: 600px; - width: 100%; - margin: 1em 0; - padding: 0; - border: 1px solid #bfcfff; -} -tr { - margin: 0; - padding: 0; - border: none; -} -tr.odd { - background: #f0f4ff; -} -tr.separate td { - border-top: 1px solid #bfcfff; -} -td { - text-align: left; - margin: 0; - padding: 0.2em 0.5em; - border: none; -} -tt, code, kbd, samp { - font-family: Courier New, Courier, monospace; - line-height: 1.2; - font-size: 110%; -} -kbd { - font-weight: bolder; -} -blockquote, pre { - max-width: 600px; - margin: 1em 2em; - padding: 0; -} -pre { - line-height: 1.1; -} -pre.code { - line-height: 1.4; - margin: 0.5em 0 1em 0.5em; - padding: 0.5em 1em; - border: 1px solid #bfcfff; - background: #f0f4ff; -} -pre.mark { - padding-left: 2em; -} -span.codemark { - position:absolute; - left: 16em; - color: #4040c0; -} -span.mark { - color: #4040c0; - font-family: Courier New, Courier, monospace; - line-height: 1.1; -} -img { - border: none; - vertical-align: baseline; - margin: 0; - padding: 0; -} -img.left { - float: left; - margin: 0.5em 1em 0.5em 0; -} -img.right { - float: right; - margin: 0.5em 0 0.5em 1em; -} -.indent { - padding-left: 1em; -} -.flush { - clear: both; - visibility: hidden; -} -.hide, .noscreen { - display: none !important; -} -.ext { - color: #ff8000; -} -.new { - font-size: 6pt; - vertical-align: middle; - background: #ff8000; - color: #ffffff; -} -#site { - clear: both; - float: left; - width: 13em; - text-align: center; - font-weight: bold; - margin: 0; - padding: 0; - background: transparent; - color: #ffffff; -} -#site a { - font-size: 200%; -} -#site a:link, #site a:visited { - text-decoration: none; - font-weight: bold; - background: transparent; - color: #ffffff; -} -#site span { - line-height: 3em; /* really 6em relative to body, match h1 */ -} -#logo { - color: #ffb380; -} -#head { - margin: 0; - padding: 0 0 0 2em; - border-left: solid 13em #4162bf; - border-right: solid 3em #6078bf; - background: #6078bf; - color: #e6ecff; -} -#nav { - clear: both; - float: left; - overflow: hidden; - text-align: left; - line-height: 1.5; - width: 13em; - padding-top: 1em; - background: transparent; -} -#nav ul { - list-style: none outside; - margin: 0; - padding: 0; -} -#nav li { - margin: 0; - padding: 0; -} -#nav a { - display: block; - text-decoration: none; - font-weight: bold; - margin: 0; - padding: 2px 1em; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - background: transparent; - color: #2142bf; -} -#nav a:hover, #nav a:active { - text-decoration: none; - border-top: 1px solid #97a7d7; - border-bottom: 1px solid #e6ecff; - background: #b9c9f9; - color: #ff0000; -} -#nav a.current, #nav a.current:hover, #nav a.current:active { - border-top: 1px solid #e6ecff; - border-bottom: 1px solid #97a7d7; - background: #c5d5ff; - color: #2142bf; -} -#nav ul ul a { - padding: 0 1em 0 1.7em; -} -#nav ul ul ul a { - padding: 0 0.5em 0 2.4em; -} -#main { - line-height: 1.5; - text-align: left; - margin: 0; - padding: 1em 2em; - border-left: solid 13em #bfcfff; - border-right: solid 3em #e6ecff; - background: #e6ecff; -} -#foot { - clear: both; - font-size: 80%; - text-align: center; - margin: 0; - padding: 0.5em; - background: #6078bf; - color: #ffffff; -} -#foot a:link, #foot a:visited { - text-decoration: underline; - background: transparent; - color: #ffffff; -} -#foot a:hover, #foot a:active { - text-decoration: underline; - background: transparent; - color: #bfcfff; -} diff --git a/deps/luajit/doc/changes.html b/deps/luajit/doc/changes.html deleted file mode 100644 index d7b83ce..0000000 --- a/deps/luajit/doc/changes.html +++ /dev/null @@ -1,978 +0,0 @@ - - - -LuaJIT Change History - - - - - - - - - -

- - -
-

-This is a list of changes between the released versions of LuaJIT.
-The current stable version is LuaJIT 2.0.4.
-

-

-Please check the -» Online Change History -to see whether newer versions are available. -

- -
-

LuaJIT 2.0.4 — 2015-05-14

-
    -
  • Fix stack check in narrowing optimization.
  • -
  • Fix Lua/C API typecheck error for special indexes.
  • -
  • Fix string to number conversion.
  • -
  • Fix lexer error for chunks without tokens.
  • -
  • Don't compile IR_RETF after CALLT to ff with-side effects.
  • -
  • Fix BC_UCLO/BC_JMP join optimization in Lua parser.
  • -
  • Fix corner case in string to number conversion.
  • -
  • Gracefully handle lua_error() for a suspended coroutine.
  • -
  • Avoid error messages when building with Clang.
  • -
  • Fix snapshot #0 handling for traces with a stack check on entry.
  • -
  • Fix fused constant loads under high register pressure.
  • -
  • Invalidate backpropagation cache after DCE.
  • -
  • Fix ABC elimination.
  • -
  • Fix debug info for main chunk of stripped bytecode.
  • -
  • Fix FOLD rule for string.sub(s, ...) == k.
  • -
  • Fix FOLD rule for STRREF of SNEW.
  • -
  • Fix frame traversal while searching for error function.
  • -
  • Prevent GC estimate miscalculation due to buffer growth.
  • -
  • Prevent adding side traces for stack checks.
  • -
  • Fix top slot calculation for snapshots with continuations.
  • -
  • Fix check for reuse of SCEV results in FORL.
  • -
  • Add PS Vita port.
  • -
  • Fix compatibility issues with Illumos.
  • -
  • Fix DragonFly build (unsupported).
  • -
  • OpenBSD/x86: Better executable memory allocation for W^X mode.
  • -
  • x86: Fix argument checks for ipairs() iterator.
  • -
  • x86: lj_math_random_step() clobbers XMM regs on OSX Clang.
  • -
  • x86: Fix code generation for unused result of math.random().
  • -
  • x64: Allow building with LUAJIT_USE_SYSMALLOC and LUAJIT_USE_VALGRIND.
  • -
  • x86/x64: Fix argument check for bit shifts.
  • -
  • x86/x64: Fix code generation for fused test/arith ops.
  • -
  • ARM: Fix write barrier check in BC_USETS.
  • -
  • PPC: Fix red zone overflow in machine code generation.
  • -
  • PPC: Don't use mcrxr on PPE.
  • -
  • Various archs: Fix excess stack growth in interpreter.
  • -
  • FFI: Fix FOLD rule for TOBIT + CONV num.u32.
  • -
  • FFI: Prevent DSE across ffi.string().
  • -
  • FFI: No meta fallback when indexing pointer to incomplete struct.
  • -
  • FFI: Fix initialization of unions of subtypes.
  • -
  • FFI: Fix cdata vs. non-cdata arithmetic and comparisons.
  • -
  • FFI: Fix __index/__newindex metamethod resolution for ctypes.
  • -
  • FFI: Fix compilation of reference field access.
  • -
  • FFI: Fix frame traversal for backtraces with FFI callbacks.
  • -
  • FFI: Fix recording of indexing a struct pointer ctype object itself.
  • -
  • FFI: Allow non-scalar cdata to be compared for equality by address.
  • -
  • FFI: Fix pseudo type conversions for type punning.
  • -
- -

LuaJIT 2.0.3 — 2014-03-12

-
    -
  • Add PS4 port.
  • -
  • Add support for multilib distro builds.
  • -
  • Fix OSX build.
  • -
  • Fix MinGW build.
  • -
  • Fix Xbox 360 build.
  • -
  • Improve ULOAD forwarding for open upvalues.
  • -
  • Fix GC steps threshold handling when called by JIT-compiled code.
  • -
  • Fix argument checks for math.deg() and math.rad().
  • -
  • Fix jit.flush(func|true).
  • -
  • Respect jit.off(func) when returning to a function, too.
  • -
  • Fix compilation of string.byte(s, nil, n).
  • -
  • Fix line number for relocated bytecode after closure fixup
  • -
  • Fix frame traversal for backtraces.
  • -
  • Fix ABC elimination.
  • -
  • Fix handling of redundant PHIs.
  • -
  • Fix snapshot restore for exit to function header.
  • -
  • Fix type punning alias analysis for constified pointers
  • -
  • Fix call unroll checks in the presence of metamethod frames.
  • -
  • Fix initial maxslot for down-recursive traces.
  • -
  • Prevent BASE register coalescing if parent uses IR_RETF.
  • -
  • Don't purge modified function from stack slots in BC_RET.
  • -
  • Fix recording of BC_VARG.
  • -
  • Don't access dangling reference to reallocated IR.
  • -
  • Fix frame depth display for bytecode dump in -jdump.
  • -
  • ARM: Fix register allocation when rematerializing FPRs.
  • -
  • x64: Fix store to upvalue for lightuserdata values.
  • -
  • FFI: Add missing GC steps for callback argument conversions.
  • -
  • FFI: Properly unload loaded DLLs.
  • -
  • FFI: Fix argument checks for ffi.string().
  • -
  • FFI/x64: Fix passing of vector arguments to calls.
  • -
  • FFI: Rehash finalizer table after GC cycle, if needed.
  • -
  • FFI: Fix cts->L for cdata unsinking in snapshot restore.
  • -
- -

LuaJIT 2.0.2 — 2013-06-03

-
    -
  • Fix memory access check for fast string interning.
  • -
  • Fix MSVC intrinsics for older versions.
  • -
  • Add missing GC steps for io.* functions.
  • -
  • Fix spurious red zone overflows in machine code generation.
  • -
  • Fix jump-range constrained mcode allocation.
  • -
  • Inhibit DSE for implicit loads via calls.
  • -
  • Fix builtin string to number conversion for overflow digits.
  • -
  • Fix optional argument handling while recording builtins.
  • -
  • Fix optional argument handling in table.concat().
  • -
  • Add partial support for building with MingW64 GCC 4.8-SEH.
  • -
  • Add missing PHI barrier to string.sub(str, a, b) == kstr FOLD rule.
  • -
  • Fix compatibility issues with Illumos.
  • -
  • ARM: Fix cache flush/sync for exit stubs of JIT-compiled code.
  • -
  • MIPS: Fix cache flush/sync for JIT-compiled code jump area.
  • -
  • PPC: Add plt suffix for external calls from assembler code.
  • -
  • FFI: Fix snapshot substitution in SPLIT pass.
  • -
  • FFI/x86: Fix register allocation for 64 bit comparisons.
  • -
  • FFI: Fix tailcall in lowest frame to C function with bool result.
  • -
  • FFI: Ignore long type specifier in ffi.istype().
  • -
  • FFI: Fix calling conventions for 32 bit OSX and iOS simulator (struct returns).
  • -
  • FFI: Fix calling conventions for ARM hard-float EABI (nested structs).
  • -
  • FFI: Improve error messages for arithmetic and comparison operators.
  • -
  • FFI: Insert no-op type conversion for pointer to integer cast.
  • -
  • FFI: Fix unroll limit for ffi.fill().
  • -
  • FFI: Must sink XBAR together with XSTOREs.
  • -
  • FFI: Preserve intermediate string for const char * conversion.
  • -
- -

LuaJIT 2.0.1 — 2013-02-19

-
    -
  • Don't clear frame for out-of-memory error.
  • -
  • Leave hook when resume catches error thrown from hook.
  • -
  • Add missing GC steps for template table creation.
  • -
  • Fix discharge order of comparisons in Lua parser.
  • -
  • Improve buffer handling for io.read().
  • -
  • OSX: Add support for Mach-O object files to -b option.
  • -
  • Fix PS3 port.
  • -
  • Fix/enable Xbox 360 port.
  • -
  • x86/x64: Always mark ref for shift count as non-weak.
  • -
  • x64: Don't fuse implicitly 32-to-64 extended operands.
  • -
  • ARM: Fix armhf call argument handling.
  • -
  • ARM: Fix code generation for integer math.min/math.max.
  • -
  • PPC/e500: Fix lj_vm_floor() for Inf/NaN.
  • -
  • FFI: Change priority of table initializer variants for structs.
  • -
  • FFI: Fix code generation for bool call result check on x86/x64.
  • -
  • FFI: Load FFI library on-demand for bytecode with cdata literals.
  • -
  • FFI: Fix handling of qualified transparent structs/unions.
  • -
- -

LuaJIT 2.0.0 — 2012-11-08

-
    -
  • Correctness and completeness: -
      -
    • Fix Android/x86 build.
    • -
    • Fix recording of equality comparisons with __eq metamethods.
    • -
    • Fix detection of immutable upvalues.
    • -
    • Replace error with PANIC for callbacks from JIT-compiled code.
    • -
    • Fix builtin string to number conversion for INT_MIN.
    • -
    • Don't create unneeded array part for template tables.
    • -
    • Fix CONV.num.int sinking.
    • -
    • Don't propagate implicitly widened number to index metamethods.
    • -
    • ARM: Fix ordered comparisons of number vs. non-number.
    • -
    • FFI: Fix code generation for replay of sunk float fields.
    • -
    • FFI: Fix signedness of bool.
    • -
    • FFI: Fix recording of bool call result check on x86/x64.
    • -
    • FFI: Fix stack-adjustment for __thiscall callbacks.
    • -
  • -
- -

LuaJIT 2.0.0-beta11 — 2012-10-16

-
    -
  • New features: -
      -
    • Use ARM VFP instructions, if available (build-time detection).
    • -
    • Add support for ARM hard-float EABI (armhf).
    • -
    • Add PS3 port.
    • -
    • Add many features from Lua 5.2, e.g. goto/labels. - Refer to this list.
    • -
    • FFI: Add parameterized C types.
    • -
    • FFI: Add support for copy constructors.
    • -
    • FFI: Equality comparisons never raise an error (treat as unequal instead).
    • -
    • FFI: Box all accessed or returned enums.
    • -
    • FFI: Check for __new metamethod when calling a constructor.
    • -
    • FFI: Handle __pairs/__ipairs metamethods for cdata objects.
    • -
    • FFI: Convert io.* file handle to FILE * pointer (but as a void *).
    • -
    • FFI: Detect and support type punning through unions.
    • -
    • FFI: Improve various error messages.
    • -
  • -
  • Build-system reorganization: -
      -
    • Reorganize directory layout:
      - lib/*src/jit/*
      - src/buildvm_*.dascsrc/vm_*.dasc
      - src/buildvm_*.h → removed
      - src/buildvm*src/host/*
    • -
    • Add minified Lua interpreter plus Lua BitOp (minilua) to run DynASM.
    • -
    • Change DynASM bit operations to use Lua BitOp
    • -
    • Translate only vm_*.dasc for detected target architecture.
    • -
    • Improve target detection for msvcbuild.bat.
    • -
    • Fix build issues on Cygwin and MinGW with optional MSys.
    • -
    • Handle cross-compiles with FPU/no-FPU or hard-fp/soft-fp ABI mismatch.
    • -
    • Remove some library functions for no-JIT/no-FFI builds.
    • -
    • Add uninstall target to top-level Makefile.
    • -
  • -
  • Correctness and completeness: -
      -
    • Preserve snapshot #0 PC for all traces.
    • -
    • Fix argument checks for coroutine.create().
    • -
    • Command line prints version and JIT status to stdout, not stderr.
    • -
    • Fix userdata __gc separations at Lua state close.
    • -
    • Fix TDUP to HLOAD forwarding for LJ_DUALNUM builds.
    • -
    • Fix buffer check in bytecode writer.
    • -
    • Make os.date() thread-safe.
    • -
    • Add missing declarations for MSVC intrinsics.
    • -
    • Fix dispatch table modifications for return hooks.
    • -
    • Workaround for MSVC conversion bug (doubleuint32_tint32_t).
    • -
    • Fix FOLD rule (i-j)-i => 0-j.
    • -
    • Never use DWARF unwinder on Windows.
    • -
    • Fix shrinking of direct mapped blocks in builtin allocator.
    • -
    • Limit recursion depth in string.match() et al.
    • -
    • Fix late despecialization of ITERN after loop has been entered.
    • -
    • Fix 'f' and 'L' options for debug.getinfo() and lua_getinfo().
    • -
    • Fix package.searchpath().
    • -
    • OSX: Change dylib names to be consistent with other platforms.
    • -
    • Android: Workaround for broken sprintf("%g", -0.0).
    • -
    • x86: Remove support for ancient CPUs without CMOV (before Pentium Pro).
    • -
    • x86: Fix register allocation for calls returning register pair.
    • -
    • x86/x64: Fix fusion of unsigned byte comparisons with swapped operands.
    • -
    • ARM: Fix tonumber() argument check.
    • -
    • ARM: Fix modulo operator and math.floor()/math.ceil() for inf/nan.
    • -
    • ARM: Invoke SPLIT pass for leftover IR_TOBIT.
    • -
    • ARM: Fix BASE register coalescing.
    • -
    • PPC: Fix interpreter state setup in callbacks.
    • -
    • PPC: Fix string.sub() range check.
    • -
    • MIPS: Support generation of MIPS/MIPSEL bytecode object files.
    • -
    • MIPS: Fix calls to floor()/ceil()/trunc().
    • -
    • ARM/PPC: Detect more target architecture variants.
    • -
    • ARM/PPC/e500/MIPS: Fix tailcalls from fast functions, esp. tostring().
    • -
    • ARM/PPC/MIPS: Fix rematerialization of FP constants.
    • -
    • FFI: Don't call FreeLibrary() on our own EXE/DLL.
    • -
    • FFI: Resolve metamethods for constructors, too.
    • -
    • FFI: Properly disable callbacks on iOS (would require executable memory).
    • -
    • FFI: Fix cdecl string parsing during recording.
    • -
    • FFI: Show address pointed to for tostring(ref), too.
    • -
    • FFI: Fix alignment of C call argument/return structure.
    • -
    • FFI: Initialize all fields of standard types.
    • -
    • FFI: Fix callback handling when new C types are declared in callback.
    • -
    • FFI: Fix recording of constructors for pointers.
    • -
    • FFI: Always resolve metamethods for pointers to structs.
    • -
    • FFI: Correctly propagate alignment when interning nested types.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Add allocation sinking and store sinking optimization.
    • -
    • Constify immutable upvalues.
    • -
    • Add builtin string to integer or FP number conversion. Improves cross-platform consistency and correctness.
    • -
    • Create string hash slots in template tables for non-const values, too. Avoids later table resizes.
    • -
    • Eliminate HREFK guard for template table references.
    • -
    • Add various new FOLD rules.
    • -
    • Don't use stack unwinding for lua_yield() (slow on x64).
    • -
    • ARM, PPC, MIPS: Improve XLOAD operand fusion and register hinting.
    • -
    • PPC, MIPS: Compile math.sqrt() to sqrt instruction, if available.
    • -
    • FFI: Fold KPTR + constant offset in SPLIT pass.
    • -
    • FFI: Optimize/inline ffi.copy() and ffi.fill().
    • -
    • FFI: Compile and optimize array/struct copies.
    • -
    • FFI: Compile ffi.typeof(cdata|ctype), ffi.sizeof(), ffi.alignof(), ffi.offsetof() and ffi.gc().
    • -
  • -
- -

LuaJIT 2.0.0-beta10 — 2012-05-09

-
    -
  • New features: -
      -
    • The MIPS of LuaJIT is complete. It requires a CPU conforming to the -MIPS32 R1 architecture with hardware FPU. O32 hard-fp ABI, -little-endian or big-endian.
    • -
    • Auto-detect target arch via cross-compiler. No need for -TARGET=arch anymore.
    • -
    • Make DynASM compatible with Lua 5.2.
    • -
    • From Lua 5.2: Try __tostring metamethod on non-string error -messages..
    • -
  • -
  • Correctness and completeness: -
      -
    • Fix parsing of hex literals with exponents.
    • -
    • Fix bytecode dump for certain number constants.
    • -
    • Fix argument type in error message for relative arguments.
    • -
    • Fix argument error handling on Lua stacks without a frame.
    • -
    • Add missing mcode limit check in assembler backend.
    • -
    • Fix compilation on OpenBSD.
    • -
    • Avoid recursive GC steps after GC-triggered trace exit.
    • -
    • Replace <unwind.h> definitions with our own.
    • -
    • Fix OSX build issues. Bump minimum required OSX version to 10.4.
    • -
    • Fix discharge order of comparisons in Lua parser.
    • -
    • Ensure running __gc of userdata created in __gc -at state close.
    • -
    • Limit number of userdata __gc separations at state close.
    • -
    • Fix bytecode JMP slot range when optimizing -and/or with constant LHS.
    • -
    • Fix DSE of USTORE.
    • -
    • Make lua_concat() work from C hook with partial frame.
    • -
    • Add required PHIs for implicit conversions, e.g. via XREF -forwarding.
    • -
    • Add more comparison variants to Valgrind suppressions file.
    • -
    • Disable loading bytecode with an extra header (BOM or #!).
    • -
    • Fix PHI stack slot syncing.
    • -
    • ARM: Reorder type/value tests to silence Valgrind.
    • -
    • ARM: Fix register allocation for ldrd-optimized -HREFK.
    • -
    • ARM: Fix conditional branch fixup for OBAR.
    • -
    • ARM: Invoke SPLIT pass for double args in FFI call.
    • -
    • ARM: Handle all CALL* ops with double results in -SPLIT pass.
    • -
    • ARM: Fix rejoin of POW in SPLIT pass.
    • -
    • ARM: Fix compilation of math.sinh, math.cosh, -math.tanh.
    • -
    • ARM, PPC: Avoid pointless arg clearing in BC_IFUNCF.
    • -
    • PPC: Fix resume after yield from hook.
    • -
    • PPC: Fix argument checking for rawget().
    • -
    • PPC: Fix fusion of floating-point XLOAD/XSTORE.
    • -
    • PPC: Fix HREFK code generation for huge tables.
    • -
    • PPC: Use builtin D-Cache/I-Cache sync code.
    • -
  • -
  • FFI library: -
      -
    • Ignore empty statements in ffi.cdef().
    • -
    • Ignore number parsing errors while skipping definitions.
    • -
    • Don't touch frame in callbacks with tailcalls to fast functions.
    • -
    • Fix library unloading on POSIX systems.
    • -
    • Finalize cdata before userdata when closing the state.
    • -
    • Change ffi.load() library name resolution for Cygwin.
    • -
    • Fix resolving of function name redirects on Windows/x86.
    • -
    • Fix symbol resolving error messages on Windows.
    • -
    • Fix blacklisting of C functions calling callbacks.
    • -
    • Fix result type of pointer difference.
    • -
    • Use correct PC in FFI metamethod error message.
    • -
    • Allow 'typedef _Bool int BOOL;' for the Windows API.
    • -
    • Don't record test for bool result of call, if ignored.
    • -
  • -
- -

LuaJIT 2.0.0-beta9 — 2011-12-14

-
    -
  • New features: -
      -
    • PPC port of LuaJIT is complete. Default is the dual-number port -(usually faster). Single-number port selectable via src/Makefile -at build time.
    • -
    • Add FFI callback support.
    • -
    • Extend -b to generate .c, .h or .obj/.o -files with embedded bytecode.
    • -
    • Allow loading embedded bytecode with require().
    • -
    • From Lua 5.2: Change to '\z' escape. Reject undefined escape -sequences.
    • -
  • -
  • Correctness and completeness: -
      -
    • Fix OSX 10.7 build. Fix install_name and versioning on OSX.
    • -
    • Fix iOS build.
    • -
    • Install dis_arm.lua, too.
    • -
    • Mark installed shared library as executable.
    • -
    • Add debug option to msvcbuild.bat and improve error handling.
    • -
    • Fix data-flow analysis for iterators.
    • -
    • Fix forced unwinding triggered by external unwinder.
    • -
    • Record missing for loop slot loads (return to lower frame).
    • -
    • Always use ANSI variants of Windows system functions.
    • -
    • Fix GC barrier for multi-result table constructor (TSETM).
    • -
    • Fix/add various FOLD rules.
    • -
    • Add potential PHI for number conversions due to type instability.
    • -
    • Do not eliminate PHIs only referenced from other PHIs.
    • -
    • Correctly anchor implicit number to string conversions in Lua/C API.
    • -
    • Fix various stack limit checks.
    • -
    • x64: Use thread-safe exceptions for external unwinding (GCC platforms).
    • -
    • x64: Fix result type of cdata index conversions.
    • -
    • x64: Fix math.random() and bit.bswap() code generation.
    • -
    • x64: Fix lightuserdata comparisons.
    • -
    • x64: Always extend stack-passed arguments to pointer size.
    • -
    • ARM: Many fixes to code generation backend.
    • -
    • PPC/e500: Fix dispatch for binop metamethods.
    • -
    • PPC/e500: Save/restore condition registers when entering/leaving the VM.
    • -
    • PPC/e500: Fix write barrier in stores of strings to upvalues.
    • -
  • -
  • FFI library: -
      -
    • Fix C comment parsing.
    • -
    • Fix snapshot optimization for cdata comparisons.
    • -
    • Fix recording of const/enum lookups in namespaces.
    • -
    • Fix call argument and return handling for I8/U8/I16/U16 types.
    • -
    • Fix unfused loads of float fields.
    • -
    • Fix ffi.string() recording.
    • -
    • Save GetLastError() around ffi.load() and symbol -resolving, too.
    • -
    • Improve ld script detection in ffi.load().
    • -
    • Record loads/stores to external variables in namespaces.
    • -
    • Compile calls to stdcall, fastcall and vararg functions.
    • -
    • Treat function ctypes like pointers in comparisons.
    • -
    • Resolve __call metamethod for pointers, too.
    • -
    • Record C function calls with bool return values.
    • -
    • Record ffi.errno().
    • -
    • x86: Fix number to uint32_t conversion rounding.
    • -
    • x86: Fix 64 bit arithmetic in assembler backend.
    • -
    • x64: Fix struct-by-value calling conventions.
    • -
    • ARM: Ensure invocation of SPLIT pass for float conversions.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Display trace types with -jv and -jdump.
    • -
    • Record isolated calls. But prefer recording loops over calls.
    • -
    • Specialize to prototype for non-monomorphic functions. Solves the -trace-explosion problem for closure-heavy programming styles.
    • -
    • Always generate a portable vmdef.lua. Easier for distros.
    • -
  • -
- -

LuaJIT 2.0.0-beta8 — 2011-06-23

-
    -
  • New features: -
      -
    • Soft-float ARM port of LuaJIT is complete.
    • -
    • Add support for bytecode loading/saving and -b command line -option.
    • -
    • From Lua 5.2: __len metamethod for tables -(disabled by default).
    • -
  • -
  • Correctness and completeness: -
      -
    • ARM: Misc. fixes for interpreter.
    • -
    • x86/x64: Fix bit.* argument checking in interpreter.
    • -
    • Catch early out-of-memory in memory allocator initialization.
    • -
    • Fix data-flow analysis for paths leading to an upvalue close.
    • -
    • Fix check for missing arguments in string.format().
    • -
    • Fix Solaris/x86 build (note: not a supported target).
    • -
    • Fix recording of loops with instable directions in side traces.
    • -
    • x86/x64: Fix fusion of comparisons with u8/u16 -XLOAD.
    • -
    • x86/x64: Fix register allocation for variable shifts.
    • -
  • -
  • FFI library: -
      -
    • Add ffi.errno(). Save errno/GetLastError() -around allocations etc.
    • -
    • Fix __gc for VLA/VLS cdata objects.
    • -
    • Fix recording of casts from 32 bit cdata pointers to integers.
    • -
    • tonumber(cdata) returns nil for non-numbers.
    • -
    • Show address pointed to for tostring(pointer).
    • -
    • Print NULL pointers as "cdata<... *>: NULL".
    • -
    • Support __tostring metamethod for pointers to structs, too.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • More tuning for loop unrolling heuristics.
    • -
    • Flatten and compress in-memory debug info (saves ~70%).
    • -
  • -
- -

LuaJIT 2.0.0-beta7 — 2011-05-05

-
    -
  • New features: -
      -
    • ARM port of the LuaJIT interpreter is complete.
    • -
    • FFI library: Add ffi.gc(), ffi.metatype(), -ffi.istype().
    • -
    • FFI library: Resolve ld script redirection in ffi.load().
    • -
    • From Lua 5.2: package.searchpath(), fp:read("*L"), -load(string).
    • -
    • From Lua 5.2, disabled by default: empty statement, -table.unpack(), modified coroutine.running().
    • -
  • -
  • Correctness and completeness: -
      -
    • FFI library: numerous fixes.
    • -
    • Fix type mismatches in store-to-load forwarding.
    • -
    • Fix error handling within metamethods.
    • -
    • Fix table.maxn().
    • -
    • Improve accuracy of x^-k on x64.
    • -
    • Fix code generation for Intel Atom in x64 mode.
    • -
    • Fix narrowing of POW.
    • -
    • Fix recording of retried fast functions.
    • -
    • Fix code generation for bit.bnot() and multiplies.
    • -
    • Fix error location within cpcall frames.
    • -
    • Add workaround for old libgcc unwind bug.
    • -
    • Fix lua_yield() and getmetatable(lightuserdata) on x64.
    • -
    • Misc. fixes for PPC/e500 interpreter.
    • -
    • Fix stack slot updates for down-recursion.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Add dual-number mode (int/double) for the VM. Enabled for ARM.
    • -
    • Improve narrowing of arithmetic operators and for loops.
    • -
    • Tune loop unrolling heuristics and increase trace recorder limits.
    • -
    • Eliminate dead slots in snapshots using bytecode data-flow analysis.
    • -
    • Avoid phantom stores to proxy tables.
    • -
    • Optimize lookups in empty proxy tables.
    • -
    • Improve bytecode optimization of and/or operators.
    • -
  • -
- -

LuaJIT 2.0.0-beta6 — 2011-02-11

-
    -
  • New features: -
      -
    • PowerPC/e500v2 port of the LuaJIT interpreter is complete.
    • -
    • Various minor features from Lua 5.2: Hex escapes in literals, -'\*' escape, reversible string.format("%q",s), -"%g" pattern, table.sort checks callbacks, -os.exit(status|true|false[,close]).
    • -
    • Lua 5.2 __pairs and __ipairs metamethods -(disabled by default).
    • -
    • Initial release of the FFI library.
    • -
  • -
  • Correctness and completeness: -
      -
    • Fix string.format() for non-finite numbers.
    • -
    • Fix memory leak when compiled to use the built-in allocator.
    • -
    • x86/x64: Fix unnecessary resize in TSETM bytecode.
    • -
    • Fix various GC issues with traces and jit.flush().
    • -
    • x64: Fix fusion of indexes for array references.
    • -
    • x86/x64: Fix stack overflow handling for coroutine results.
    • -
    • Enable low-2GB memory allocation on FreeBSD/x64.
    • -
    • Fix collectgarbage("count") result if more than 2GB is in use.
    • -
    • Fix parsing of hex floats.
    • -
    • x86/x64: Fix loop branch inversion with trailing -HREF+NE/EQ.
    • -
    • Add jit.os string.
    • -
    • coroutine.create() permits running C functions, too.
    • -
    • Fix OSX build to work with newer ld64 versions.
    • -
    • Fix bytecode optimization of and/or operators.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Emit specialized bytecode for pairs()/next().
    • -
    • Improve bytecode coalescing of nil constants.
    • -
    • Compile calls to vararg functions.
    • -
    • Compile select().
    • -
    • Improve alias analysis, esp. for loads from allocations.
    • -
    • Tuning of various compiler heuristics.
    • -
    • Refactor and extend IR conversion instructions.
    • -
    • x86/x64: Various backend enhancements related to the FFI.
    • -
    • Add SPLIT pass to split 64 bit IR instructions for 32 bit CPUs.
    • -
  • -
- -

LuaJIT 2.0.0-beta5 — 2010-08-24

-
    -
  • Correctness and completeness: -
      -
    • Fix trace exit dispatch to function headers.
    • -
    • Fix Windows and OSX builds with LUAJIT_DISABLE_JIT.
    • -
    • Reorganize and fix placement of generated machine code on x64.
    • -
    • Fix TNEW in x64 interpreter.
    • -
    • Do not eliminate PHIs for values only referenced from side exits.
    • -
    • OS-independent canonicalization of strings for non-finite numbers.
    • -
    • Fix string.char() range check on x64.
    • -
    • Fix tostring() resolving within print().
    • -
    • Fix error handling for next().
    • -
    • Fix passing of constant arguments to external calls on x64.
    • -
    • Fix interpreter argument check for two-argument SSE math functions.
    • -
    • Fix C frame chain corruption caused by lua_cpcall().
    • -
    • Fix return from pcall() within active hook.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Replace on-trace GC frame syncing with interpreter exit.
    • -
    • Improve hash lookup specialization by not removing dead keys during GC.
    • -
    • Turn traces into true GC objects.
    • -
    • Avoid starting a GC cycle immediately after library init.
    • -
    • Add weak guards to improve dead-code elimination.
    • -
    • Speed up string interning.
    • -
  • -
- -

LuaJIT 2.0.0-beta4 — 2010-03-28

-
    -
  • Correctness and completeness: -
      -
    • Fix precondition for on-trace creation of table keys.
    • -
    • Fix {f()} on x64 when table is resized.
    • -
    • Fix folding of ordered comparisons with same references.
    • -
    • Fix snapshot restores for multi-result bytecodes.
    • -
    • Fix potential hang when recording bytecode with nested closures.
    • -
    • Fix recording of getmetatable(), tonumber() and bad argument types.
    • -
    • Fix SLOAD fusion across returns to lower frames.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Add array bounds check elimination. -Oabc is enabled by default.
    • -
    • More tuning for x64, e.g. smaller table objects.
    • -
  • -
- -

LuaJIT 2.0.0-beta3 — 2010-03-07

-
    -
  • LuaJIT x64 port: -
      -
    • Port integrated memory allocator to Linux/x64, Windows/x64 and OSX/x64.
    • -
    • Port interpreter and JIT compiler to x64.
    • -
    • Port DynASM to x64.
    • -
    • Many 32/64 bit cleanups in the VM.
    • -
    • Allow building the interpreter with either x87 or SSE2 arithmetics.
    • -
    • Add external unwinding and C++ exception interop (default on x64).
    • -
  • -
  • Correctness and completeness: -
      -
    • Fix constructor bytecode generation for certain conditional values.
    • -
    • Fix some cases of ordered string comparisons.
    • -
    • Fix lua_tocfunction().
    • -
    • Fix cutoff register in JMP bytecode for some conditional expressions.
    • -
    • Fix PHI marking algorithm for references from variant slots.
    • -
    • Fix package.cpath for non-default PREFIX.
    • -
    • Fix DWARF2 frame unwind information for interpreter on OSX.
    • -
    • Drive the GC forward on string allocations in the parser.
    • -
    • Implement call/return hooks (zero-cost if disabled).
    • -
    • Implement yield from C hooks.
    • -
    • Disable JIT compiler on older non-SSE2 CPUs instead of aborting.
    • -
  • -
  • Structural and performance enhancements: -
      -
    • Compile recursive code (tail-, up- and down-recursion).
    • -
    • Improve heuristics for bytecode penalties and blacklisting.
    • -
    • Split CALL/FUNC recording and clean up fast function call semantics.
    • -
    • Major redesign of internal function call handling.
    • -
    • Improve FOR loop const specialization and integerness checks.
    • -
    • Switch to pre-initialized stacks. Avoid frame-clearing.
    • -
    • Colocation of prototypes and related data: bytecode, constants, debug info.
    • -
    • Cleanup parser and streamline bytecode generation.
    • -
    • Add support for weak IR references to register allocator.
    • -
    • Switch to compressed, extensible snapshots.
    • -
    • Compile returns to frames below the start frame.
    • -
    • Improve alias analysis of upvalues using a disambiguation hash value.
    • -
    • Compile floor/ceil/trunc to SSE2 helper calls or SSE4.1 instructions.
    • -
    • Add generic C call handling to IR and backend.
    • -
    • Improve KNUM fuse vs. load heuristics.
    • -
    • Compile various io.*() functions.
    • -
    • Compile math.sinh(), math.cosh(), math.tanh() -and math.random().
    • -
  • -
- -

LuaJIT 2.0.0-beta2 — 2009-11-09

-
    -
  • Reorganize build system. Build static+shared library on POSIX.
  • -
  • Allow C++ exception conversion on all platforms -using a wrapper function.
  • -
  • Automatically catch C++ exceptions and rethrow Lua error -(DWARF2 only).
  • -
  • Check for the correct x87 FPU precision at strategic points.
  • -
  • Always use wrappers for libm functions.
  • -
  • Resurrect metamethod name strings before copying them.
  • -
  • Mark current trace, even if compiler is idle.
  • -
  • Ensure FILE metatable is created only once.
  • -
  • Fix type comparisons when different integer types are involved.
  • -
  • Fix getmetatable() recording.
  • -
  • Fix TDUP with dead keys in template table.
  • -
  • jit.flush(tr) returns status. -Prevent manual flush of a trace that's still linked.
  • -
  • Improve register allocation heuristics for invariant references.
  • -
  • Compile the push/pop variants of table.insert() and -table.remove().
  • -
  • Compatibility with MSVC link /debug.
  • -
  • Fix lua_iscfunction().
  • -
  • Fix math.random() when compiled with -fpic (OSX).
  • -
  • Fix table.maxn().
  • -
  • Bump MACOSX_DEPLOYMENT_TARGET to 10.4
  • -
  • luaL_check*() and luaL_opt*() now support -negative arguments, too.
    -This matches the behavior of Lua 5.1, but not the specification.
  • -
- -

LuaJIT 2.0.0-beta1 — 2009-10-31

-
    -
  • This is the first public release of LuaJIT 2.0.
  • -
  • The whole VM has been rewritten from the ground up, so there's -no point in listing differences over earlier versions.
  • -
-
- -
-

LuaJIT 1.1.8 — 2012-04-16

- - -

LuaJIT 1.1.7 — 2011-05-05

- - -

LuaJIT 1.1.6 — 2010-03-28

-
    -
  • Added fixes for the -» currently known bugs in Lua 5.1.4.
  • -
  • Removed wrong GC check in jit_createstate(). -Thanks to Tim Mensch.
  • -
  • Fixed bad assertions while compiling table.insert() and -table.remove().
  • -
- -

LuaJIT 1.1.5 — 2008-10-25

- - -

LuaJIT 1.1.4 — 2008-02-05

-
    -
  • Merged with Lua 5.1.3. Fixes all -» known bugs in Lua 5.1.2.
  • -
  • Fixed possible (but unlikely) stack corruption while compiling -k^x expressions.
  • -
  • Fixed DynASM template for cmpss instruction.
  • -
- -

LuaJIT 1.1.3 — 2007-05-24

-
    -
  • Merged with Lua 5.1.2. Fixes all -» known bugs in Lua 5.1.1.
  • -
  • Merged pending Lua 5.1.x fixes: "return -nil" bug, spurious count hook call.
  • -
  • Remove a (sometimes) wrong assertion in luaJIT_findpc().
  • -
  • DynASM now allows labels for displacements and .aword.
  • -
  • Fix some compiler warnings for DynASM glue (internal API change).
  • -
  • Correct naming for SSSE3 (temporarily known as SSE4) in DynASM and x86 disassembler.
  • -
  • The loadable debug modules now handle redirection to stdout -(e.g. -j trace=-).
  • -
- -

LuaJIT 1.1.2 — 2006-06-24

-
    -
  • Fix MSVC inline assembly: use only local variables with -lua_number2int().
  • -
  • Fix "attempt to call a thread value" bug on Mac OS X: -make values of consts used as lightuserdata keys unique -to avoid joining by the compiler/linker.
  • -
- -

LuaJIT 1.1.1 — 2006-06-20

-
    -
  • Merged with Lua 5.1.1. Fixes all -» known bugs in Lua 5.1.
  • -
  • Enforce (dynamic) linker error for EXE/DLL version mismatches.
  • -
  • Minor changes to DynASM: faster pre-processing, smaller encoding -for some immediates.
  • -
-

-This release is in sync with Coco 1.1.1 (see the -» Coco Change History). -

- -

LuaJIT 1.1.0 — 2006-03-13

-
    -
  • Merged with Lua 5.1 (final).
  • - -
  • New JIT call frame setup: -
      -
    • The C stack is kept 16 byte aligned (faster). -Mandatory for Mac OS X on Intel, too.
    • -
    • Faster calling conventions for internal C helper functions.
    • -
    • Better instruction scheduling for function prologue, OP_CALL and -OP_RETURN.
    • -
  • - -
  • Miscellaneous optimizations: -
      -
    • Faster loads of FP constants. Remove narrow-to-wide store-to-load -forwarding stalls.
    • -
    • Use (scalar) SSE2 ops (if the CPU supports it) to speed up slot moves -and FP to integer conversions.
    • -
    • Optimized the two-argument form of OP_CONCAT (a..b).
    • -
    • Inlined OP_MOD (a%b). -With better accuracy than the C variant, too.
    • -
    • Inlined OP_POW (a^b). Unroll x^k or -use k^x = 2^(log2(k)*x) or call pow().
    • -
  • - -
  • Changes in the optimizer: -
      -
    • Improved hinting for table keys derived from table values -(t1[t2[x]]).
    • -
    • Lookup hinting now works with arbitrary object types and -supports index chains, too.
    • -
    • Generate type hints for arithmetic and comparison operators, -OP_LEN, OP_CONCAT and OP_FORPREP.
    • -
    • Remove several hint definitions in favour of a generic COMBINE hint.
    • -
    • Complete rewrite of jit.opt_inline module -(ex jit.opt_lib).
    • -
  • - -
  • Use adaptive deoptimization: -
      -
    • If runtime verification of a contract fails, the affected -instruction is recompiled and patched on-the-fly. -Regular programs will trigger deoptimization only occasionally.
    • -
    • This avoids generating code for uncommon fallback cases -most of the time. Generated code is up to 30% smaller compared to -LuaJIT 1.0.3.
    • -
    • Deoptimization is used for many opcodes and contracts: -
        -
      • OP_CALL, OP_TAILCALL: type mismatch for callable.
      • -
      • Inlined calls: closure mismatch, parameter number and type mismatches.
      • -
      • OP_GETTABLE, OP_SETTABLE: table or key type and range mismatches.
      • -
      • All arithmetic and comparison operators, OP_LEN, OP_CONCAT, -OP_FORPREP: operand type and range mismatches.
      • -
    • -
    • Complete redesign of the debug and traceback info -(bytecode ↔ mcode) to support deoptimization. -Much more flexible and needs only 50% of the space.
    • -
    • The modules jit.trace, jit.dumphints and -jit.dump handle deoptimization.
    • -
  • - -
  • Inlined many popular library functions -(for commonly used arguments only): -
      -
    • Most math.* functions (the 18 most used ones) -[2x-10x faster].
    • -
    • string.len, string.sub and string.char -[2x-10x faster].
    • -
    • table.insert, table.remove and table.getn -[3x-5x faster].
    • -
    • coroutine.yield and coroutine.resume -[3x-5x faster].
    • -
    • pairs, ipairs and the corresponding iterators -[8x-15x faster].
    • -
  • - -
  • Changes in the core and loadable modules and the stand-alone executable: -
      -
    • Added jit.version, jit.version_num -and jit.arch.
    • -
    • Reorganized some internal API functions (jit.util.*mcode*).
    • -
    • The -j dump output now shows JSUB names, too.
    • -
    • New x86 disassembler module written in pure Lua. No dependency -on ndisasm anymore. Flexible API, very compact (500 lines) -and complete (x87, MMX, SSE, SSE2, SSE3, SSSE3, privileged instructions).
    • -
    • luajit -v prints the LuaJIT version and copyright -on a separate line.
    • -
  • - -
  • Added SSE, SSE2, SSE3 and SSSE3 support to DynASM.
  • -
  • Miscellaneous doc changes. Added a section about -embedding LuaJIT.
  • -
-

-This release is in sync with Coco 1.1.0 (see the -» Coco Change History). -

-
- -
-

LuaJIT 1.0.3 — 2005-09-08

-
    -
  • Even more docs.
  • -
  • Unified closure checks in jit.*.
  • -
  • Fixed some range checks in jit.util.*.
  • -
  • Fixed __newindex call originating from jit_settable_str().
  • -
  • Merged with Lua 5.1 alpha (including early bug fixes).
  • -
-

-This is the first public release of LuaJIT. -

- -

LuaJIT 1.0.2 — 2005-09-02

-
    -
  • Add support for flushing the Valgrind translation cache
    -(MYCFLAGS= -DUSE_VALGRIND).
  • -
  • Add support for freeing executable mcode memory to the mmap()-based -variant for POSIX systems.
  • -
  • Reorganized the C function signature handling in -jit.opt_lib.
  • -
  • Changed to index-based hints for inlining C functions. -Still no support in the backend for inlining.
  • -
  • Hardcode HEAP_CREATE_ENABLE_EXECUTE value if undefined.
  • -
  • Misc. changes to the jit.* modules.
  • -
  • Misc. changes to the Makefiles.
  • -
  • Lots of new docs.
  • -
  • Complete doc reorg.
  • -
-

-Not released because Lua 5.1 alpha came out today. -

- -

LuaJIT 1.0.1 — 2005-08-31

-
    -
  • Missing GC step in OP_CONCAT.
  • -
  • Fix result handling for C –> JIT calls.
  • -
  • Detect CPU feature bits.
  • -
  • Encode conditional moves (fucomip) only when supported.
  • -
  • Add fallback instructions for FP compares.
  • -
  • Add support for LUA_COMPAT_VARARG. Still disabled by default.
  • -
  • MSVC needs a specific place for the CALLBACK attribute -(David Burgess).
  • -
  • Misc. doc updates.
  • -
-

-Interim non-public release. -Special thanks to Adam D. Moss for reporting most of the bugs. -

- -

LuaJIT 1.0.0 — 2005-08-29

-

-This is the initial non-public release of LuaJIT. -

-
-
-
- - - diff --git a/deps/luajit/doc/contact.html b/deps/luajit/doc/contact.html deleted file mode 100644 index 0ef01a7..0000000 --- a/deps/luajit/doc/contact.html +++ /dev/null @@ -1,102 +0,0 @@ - - - -Contact - - - - - - - - -
-Lua -
- - -
-

-Please send general questions to the -» LuaJIT mailing list. -You can also send any questions you have directly to me: -

- - - - - -

Copyright

-

-All documentation is -Copyright © 2005-2015 Mike Pall. -

- - -
-
- - - diff --git a/deps/luajit/doc/ext_c_api.html b/deps/luajit/doc/ext_c_api.html deleted file mode 100644 index 6598180..0000000 --- a/deps/luajit/doc/ext_c_api.html +++ /dev/null @@ -1,187 +0,0 @@ - - - -Lua/C API Extensions - - - - - - - - -
-Lua -
- - -
-

-LuaJIT adds some extensions to the standard Lua/C API. The LuaJIT include -directory must be in the compiler search path (-Ipath) -to be able to include the required header for C code: -

-
-#include "luajit.h"
-
-

-Or for C++ code: -

-
-#include "lua.hpp"
-
- -

luaJIT_setmode(L, idx, mode) -— Control VM

-

-This is a C API extension to allow control of the VM from C code. The -full prototype of LuaJIT_setmode is: -

-
-LUA_API int luaJIT_setmode(lua_State *L, int idx, int mode);
-
-

-The returned status is either success (1) or failure (0). -The second argument is either 0 or a stack index (similar to the -other Lua/C API functions). -

-

-The third argument specifies the mode, which is 'or'ed with a flag. -The flag can be LUAJIT_MODE_OFF to turn a feature on, -LUAJIT_MODE_ON to turn a feature off, or -LUAJIT_MODE_FLUSH to flush cached code. -

-

-The following modes are defined: -

- -

luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE|flag)

-

-Turn the whole JIT compiler on or off or flush the whole cache of compiled code. -

- -

luaJIT_setmode(L, idx, LUAJIT_MODE_FUNC|flag)
-luaJIT_setmode(L, idx, LUAJIT_MODE_ALLFUNC|flag)
-luaJIT_setmode(L, idx, LUAJIT_MODE_ALLSUBFUNC|flag)

-

-This sets the mode for the function at the stack index idx or -the parent of the calling function (idx = 0). It either -enables JIT compilation for a function, disables it and flushes any -already compiled code or only flushes already compiled code. This -applies recursively to all sub-functions of the function with -LUAJIT_MODE_ALLFUNC or only to the sub-functions with -LUAJIT_MODE_ALLSUBFUNC. -

- -

luaJIT_setmode(L, trace,
-  LUAJIT_MODE_TRACE|LUAJIT_MODE_FLUSH)

-

-Flushes the specified root trace and all of its side traces from the cache. -The code for the trace will be retained as long as there are any other -traces which link to it. -

- -

luaJIT_setmode(L, idx, LUAJIT_MODE_WRAPCFUNC|flag)

-

-This mode defines a wrapper function for calls to C functions. If -called with LUAJIT_MODE_ON, the stack index at idx -must be a lightuserdata object holding a pointer to the wrapper -function. From now on all C functions are called through the wrapper -function. If called with LUAJIT_MODE_OFF this mode is turned -off and all C functions are directly called. -

-

-The wrapper function can be used for debugging purposes or to catch -and convert foreign exceptions. But please read the section on -C++ exception interoperability -first. Recommended usage can be seen in this C++ code excerpt: -

-
-#include <exception>
-#include "lua.hpp"
-
-// Catch C++ exceptions and convert them to Lua error messages.
-// Customize as needed for your own exception classes.
-static int wrap_exceptions(lua_State *L, lua_CFunction f)
-{
-  try {
-    return f(L);  // Call wrapped function and return result.
-  } catch (const char *s) {  // Catch and convert exceptions.
-    lua_pushstring(L, s);
-  } catch (std::exception& e) {
-    lua_pushstring(L, e.what());
-  } catch (...) {
-    lua_pushliteral(L, "caught (...)");
-  }
-  return lua_error(L);  // Rethrow as a Lua error.
-}
-
-static int myinit(lua_State *L)
-{
-  ...
-  // Define wrapper function and enable it.
-  lua_pushlightuserdata(L, (void *)wrap_exceptions);
-  luaJIT_setmode(L, -1, LUAJIT_MODE_WRAPCFUNC|LUAJIT_MODE_ON);
-  lua_pop(L, 1);
-  ...
-}
-
-

-Note that you can only define a single global wrapper function, -so be careful when using this mechanism from multiple C++ modules. -Also note that this mechanism is not without overhead. -

-
-
- - - diff --git a/deps/luajit/doc/ext_ffi.html b/deps/luajit/doc/ext_ffi.html deleted file mode 100644 index 77b8e26..0000000 --- a/deps/luajit/doc/ext_ffi.html +++ /dev/null @@ -1,330 +0,0 @@ - - - -FFI Library - - - - - - - - -
-Lua -
- - -
-

- -The FFI library allows calling external C functions and -using C data structures from pure Lua code. - -

-

- -The FFI library largely obviates the need to write tedious manual -Lua/C bindings in C. No need to learn a separate binding language -— it parses plain C declarations! These can be -cut-n-pasted from C header files or reference manuals. It's up to -the task of binding large libraries without the need for dealing with -fragile binding generators. - -

-

-The FFI library is tightly integrated into LuaJIT (it's not available -as a separate module). The code generated by the JIT-compiler for -accesses to C data structures from Lua code is on par with the -code a C compiler would generate. Calls to C functions can -be inlined in JIT-compiled code, unlike calls to functions bound via -the classic Lua/C API. -

-

-This page gives a short introduction to the usage of the FFI library. -Please use the FFI sub-topics in the navigation bar to learn more. -

- -

Motivating Example: Calling External C Functions

-

-It's really easy to call an external C library function: -

-
-①
-②
-
-
-③local ffi = require("ffi")
-ffi.cdef[[
-int printf(const char *fmt, ...);
-]]
-ffi.C.printf("Hello %s!", "world")
-
-

-So, let's pick that apart: -

-

- Load the FFI library. -

-

- Add a C declaration -for the function. The part inside the double-brackets (in green) is -just standard C syntax. -

-

- Call the named -C function — Yes, it's that simple! -

-

-Actually, what goes on behind the scenes is far from simple: makes use of the standard -C library namespace ffi.C. Indexing this namespace with -a symbol name ("printf") automatically binds it to the -standard C library. The result is a special kind of object which, -when called, runs the printf function. The arguments passed -to this function are automatically converted from Lua objects to the -corresponding C types. -

-

-Ok, so maybe the use of printf() wasn't such a spectacular -example. You could have done that with io.write() and -string.format(), too. But you get the idea ... -

-

-So here's something to pop up a message box on Windows: -

-
-local ffi = require("ffi")
-ffi.cdef[[
-int MessageBoxA(void *w, const char *txt, const char *cap, int type);
-]]
-ffi.C.MessageBoxA(nil, "Hello world!", "Test", 0)
-
-

-Bing! Again, that was far too easy, no? -

-

-Compare this with the effort required to bind that function using the -classic Lua/C API: create an extra C file, add a C function -that retrieves and checks the argument types passed from Lua and calls -the actual C function, add a list of module functions and their -names, add a luaopen_* function and register all module -functions, compile and link it into a shared library (DLL), move it to -the proper path, add Lua code that loads the module aaaand ... finally -call the binding function. Phew! -

- -

Motivating Example: Using C Data Structures

-

-The FFI library allows you to create and access C data -structures. Of course the main use for this is for interfacing with -C functions. But they can be used stand-alone, too. -

-

-Lua is built upon high-level data types. They are flexible, extensible -and dynamic. That's why we all love Lua so much. Alas, this can be -inefficient for certain tasks, where you'd really want a low-level -data type. E.g. a large array of a fixed structure needs to be -implemented with a big table holding lots of tiny tables. This imposes -both a substantial memory overhead as well as a performance overhead. -

-

-Here's a sketch of a library that operates on color images plus a -simple benchmark. First, the plain Lua version: -

-
-local floor = math.floor
-
-local function image_ramp_green(n)
-  local img = {}
-  local f = 255/(n-1)
-  for i=1,n do
-    img[i] = { red = 0, green = floor((i-1)*f), blue = 0, alpha = 255 }
-  end
-  return img
-end
-
-local function image_to_grey(img, n)
-  for i=1,n do
-    local y = floor(0.3*img[i].red + 0.59*img[i].green + 0.11*img[i].blue)
-    img[i].red = y; img[i].green = y; img[i].blue = y
-  end
-end
-
-local N = 400*400
-local img = image_ramp_green(N)
-for i=1,1000 do
-  image_to_grey(img, N)
-end
-
-

-This creates a table with 160.000 pixels, each of which is a table -holding four number values in the range of 0-255. First an image with -a green ramp is created (1D for simplicity), then the image is -converted to greyscale 1000 times. Yes, that's silly, but I was in -need of a simple example ... -

-

-And here's the FFI version. The modified parts have been marked in -bold: -

-
-①
-
-
-
-
-
-②
-
-③
-④
-
-
-
-
-
-
-③
-⑤local ffi = require("ffi")
-ffi.cdef[[
-typedef struct { uint8_t red, green, blue, alpha; } rgba_pixel;
-]]
-
-local function image_ramp_green(n)
-  local img = ffi.new("rgba_pixel[?]", n)
-  local f = 255/(n-1)
-  for i=0,n-1 do
-    img[i].green = i*f
-    img[i].alpha = 255
-  end
-  return img
-end
-
-local function image_to_grey(img, n)
-  for i=0,n-1 do
-    local y = 0.3*img[i].red + 0.59*img[i].green + 0.11*img[i].blue
-    img[i].red = y; img[i].green = y; img[i].blue = y
-  end
-end
-
-local N = 400*400
-local img = image_ramp_green(N)
-for i=1,1000 do
-  image_to_grey(img, N)
-end
-
-

-Ok, so that wasn't too difficult: -

-

- First, load the FFI -library and declare the low-level data type. Here we choose a -struct which holds four byte fields, one for each component -of a 4x8 bit RGBA pixel. -

-

- Creating the data -structure with ffi.new() is straightforward — the -'?' is a placeholder for the number of elements of a -variable-length array. -

-

- C arrays are -zero-based, so the indexes have to run from 0 to -n-1. One might want to allocate one more element instead to -simplify converting legacy code. -

-

- Since ffi.new() -zero-fills the array by default, we only need to set the green and the -alpha fields. -

-

- The calls to -math.floor() can be omitted here, because floating-point -numbers are already truncated towards zero when converting them to an -integer. This happens implicitly when the number is stored in the -fields of each pixel. -

-

-Now let's have a look at the impact of the changes: first, memory -consumption for the image is down from 22 Megabytes to -640 Kilobytes (400*400*4 bytes). That's a factor of 35x less! So, -yes, tables do have a noticeable overhead. BTW: The original program -would consume 40 Megabytes in plain Lua (on x64). -

-

-Next, performance: the pure Lua version runs in 9.57 seconds (52.9 -seconds with the Lua interpreter) and the FFI version runs in 0.48 -seconds on my machine (YMMV). That's a factor of 20x faster (110x -faster than the Lua interpreter). -

-

-The avid reader may notice that converting the pure Lua version over -to use array indexes for the colors ([1] instead of -.red, [2] instead of .green etc.) ought to -be more compact and faster. This is certainly true (by a factor of -~1.7x). Switching to a struct-of-arrays would help, too. -

-

-However the resulting code would be less idiomatic and rather -error-prone. And it still doesn't get even close to the performance of -the FFI version of the code. Also, high-level data structures cannot -be easily passed to other C functions, especially I/O functions, -without undue conversion penalties. -

-
-
- - - diff --git a/deps/luajit/doc/ext_ffi_api.html b/deps/luajit/doc/ext_ffi_api.html deleted file mode 100644 index 8f577e9..0000000 --- a/deps/luajit/doc/ext_ffi_api.html +++ /dev/null @@ -1,566 +0,0 @@ - - - -ffi.* API Functions - - - - - - - - - -
-Lua -
- - -
-

-This page describes the API functions provided by the FFI library in -detail. It's recommended to read through the -introduction and the -FFI tutorial first. -

- -

Glossary

-
    -
  • cdecl — An abstract C type declaration (a Lua -string).
  • -
  • ctype — A C type object. This is a special kind of -cdata returned by ffi.typeof(). It serves as a -cdata constructor when called.
  • -
  • cdata — A C data object. It holds a value of the -corresponding ctype.
  • -
  • ct — A C type specification which can be used for -most of the API functions. Either a cdecl, a ctype or a -cdata serving as a template type.
  • -
  • cb — A callback object. This is a C data object -holding a special function pointer. Calling this function from -C code runs an associated Lua function.
  • -
  • VLA — A variable-length array is declared with a -? instead of the number of elements, e.g. "int[?]". -The number of elements (nelem) must be given when it's -created.
  • -
  • VLS — A variable-length struct is a struct C -type where the last element is a VLA. The same rules for -declaration and creation apply.
  • -
- -

Declaring and Accessing External Symbols

-

-External symbols must be declared first and can then be accessed by -indexing a C library -namespace, which automatically binds the symbol to a specific -library. -

- -

ffi.cdef(def)

-

-Adds multiple C declarations for types or external symbols (named -variables or functions). def must be a Lua string. It's -recommended to use the syntactic sugar for string arguments as -follows: -

-
-ffi.cdef[[
-typedef struct foo { int a, b; } foo_t;  // Declare a struct and typedef.
-int dofoo(foo_t *f, int n);  /* Declare an external C function. */
-]]
-
-

-The contents of the string (the part in green above) must be a -sequence of -C declarations, -separated by semicolons. The trailing semicolon for a single -declaration may be omitted. -

-

-Please note that external symbols are only declared, but they -are not bound to any specific address, yet. Binding is -achieved with C library namespaces (see below). -

-

-C declarations are not passed through a C pre-processor, -yet. No pre-processor tokens are allowed, except for -#pragma pack. Replace #define in existing -C header files with enum, static const -or typedef and/or pass the files through an external -C pre-processor (once). Be careful not to include unneeded or -redundant declarations from unrelated header files. -

- -

ffi.C

-

-This is the default C library namespace — note the -uppercase 'C'. It binds to the default set of symbols or -libraries on the target system. These are more or less the same as a -C compiler would offer by default, without specifying extra link -libraries. -

-

-On POSIX systems, this binds to symbols in the default or global -namespace. This includes all exported symbols from the executable and -any libraries loaded into the global namespace. This includes at least -libc, libm, libdl (on Linux), -libgcc (if compiled with GCC), as well as any exported -symbols from the Lua/C API provided by LuaJIT itself. -

-

-On Windows systems, this binds to symbols exported from the -*.exe, the lua51.dll (i.e. the Lua/C API -provided by LuaJIT itself), the C runtime library LuaJIT was linked -with (msvcrt*.dll), kernel32.dll, -user32.dll and gdi32.dll. -

- -

clib = ffi.load(name [,global])

-

-This loads the dynamic library given by name and returns -a new C library namespace which binds to its symbols. On POSIX -systems, if global is true, the library symbols are -loaded into the global namespace, too. -

-

-If name is a path, the library is loaded from this path. -Otherwise name is canonicalized in a system-dependent way and -searched in the default search path for dynamic libraries: -

-

-On POSIX systems, if the name contains no dot, the extension -.so is appended. Also, the lib prefix is prepended -if necessary. So ffi.load("z") looks for "libz.so" -in the default shared library search path. -

-

-On Windows systems, if the name contains no dot, the extension -.dll is appended. So ffi.load("ws2_32") looks for -"ws2_32.dll" in the default DLL search path. -

- -

Creating cdata Objects

-

-The following API functions create cdata objects (type() -returns "cdata"). All created cdata objects are -garbage collected. -

- -

cdata = ffi.new(ct [,nelem] [,init...])
-cdata = ctype([nelem,] [init...])

-

-Creates a cdata object for the given ct. VLA/VLS types -require the nelem argument. The second syntax uses a ctype as -a constructor and is otherwise fully equivalent. -

-

-The cdata object is initialized according to the -rules for initializers, -using the optional init arguments. Excess initializers cause -an error. -

-

-Performance notice: if you want to create many objects of one kind, -parse the cdecl only once and get its ctype with -ffi.typeof(). Then use the ctype as a constructor repeatedly. -

-

-Please note that an anonymous struct declaration implicitly -creates a new and distinguished ctype every time you use it for -ffi.new(). This is probably not what you want, -especially if you create more than one cdata object. Different anonymous -structs are not considered assignment-compatible by the -C standard, even though they may have the same fields! Also, they -are considered different types by the JIT-compiler, which may cause an -excessive number of traces. It's strongly suggested to either declare -a named struct or typedef with ffi.cdef() -or to create a single ctype object for an anonymous struct -with ffi.typeof(). -

- -

ctype = ffi.typeof(ct)

-

-Creates a ctype object for the given ct. -

-

-This function is especially useful to parse a cdecl only once and then -use the resulting ctype object as a constructor. -

- -

cdata = ffi.cast(ct, init)

-

-Creates a scalar cdata object for the given ct. The cdata -object is initialized with init using the "cast" variant of -the C type conversion -rules. -

-

-This functions is mainly useful to override the pointer compatibility -checks or to convert pointers to addresses or vice versa. -

- -

ctype = ffi.metatype(ct, metatable)

-

-Creates a ctype object for the given ct and associates it with -a metatable. Only struct/union types, complex numbers -and vectors are allowed. Other types may be wrapped in a -struct, if needed. -

-

-The association with a metatable is permanent and cannot be changed -afterwards. Neither the contents of the metatable nor the -contents of an __index table (if any) may be modified -afterwards. The associated metatable automatically applies to all uses -of this type, no matter how the objects are created or where they -originate from. Note that pre-defined operations on types have -precedence (e.g. declared field names cannot be overriden). -

-

-All standard Lua metamethods are implemented. These are called directly, -without shortcuts and on any mix of types. For binary operations, the -left operand is checked first for a valid ctype metamethod. The -__gc metamethod only applies to struct/union -types and performs an implicit ffi.gc() -call during creation of an instance. -

- -

cdata = ffi.gc(cdata, finalizer)

-

-Associates a finalizer with a pointer or aggregate cdata object. The -cdata object is returned unchanged. -

-

-This function allows safe integration of unmanaged resources into the -automatic memory management of the LuaJIT garbage collector. Typical -usage: -

-
-local p = ffi.gc(ffi.C.malloc(n), ffi.C.free)
-...
-p = nil -- Last reference to p is gone.
--- GC will eventually run finalizer: ffi.C.free(p)
-
-

-A cdata finalizer works like the __gc metamethod for userdata -objects: when the last reference to a cdata object is gone, the -associated finalizer is called with the cdata object as an argument. The -finalizer can be a Lua function or a cdata function or cdata function -pointer. An existing finalizer can be removed by setting a nil -finalizer, e.g. right before explicitly deleting a resource: -

-
-ffi.C.free(ffi.gc(p, nil)) -- Manually free the memory.
-
- -

C Type Information

-

-The following API functions return information about C types. -They are most useful for inspecting cdata objects. -

- -

size = ffi.sizeof(ct [,nelem])

-

-Returns the size of ct in bytes. Returns nil if -the size is not known (e.g. for "void" or function types). -Requires nelem for VLA/VLS types, except for cdata objects. -

- -

align = ffi.alignof(ct)

-

-Returns the minimum required alignment for ct in bytes. -

- -

ofs [,bpos,bsize] = ffi.offsetof(ct, field)

-

-Returns the offset (in bytes) of field relative to the start -of ct, which must be a struct. Additionally returns -the position and the field size (in bits) for bit fields. -

- -

status = ffi.istype(ct, obj)

-

-Returns true if obj has the C type given by -ct. Returns false otherwise. -

-

-C type qualifiers (const etc.) are ignored. Pointers are -checked with the standard pointer compatibility rules, but without any -special treatment for void *. If ct specifies a -struct/union, then a pointer to this type is accepted, -too. Otherwise the types must match exactly. -

-

-Note: this function accepts all kinds of Lua objects for the -obj argument, but always returns false for non-cdata -objects. -

- -

Utility Functions

- -

err = ffi.errno([newerr])

-

-Returns the error number set by the last C function call which -indicated an error condition. If the optional newerr argument -is present, the error number is set to the new value and the previous -value is returned. -

-

-This function offers a portable and OS-independent way to get and set the -error number. Note that only some C functions set the error -number. And it's only significant if the function actually indicated an -error condition (e.g. with a return value of -1 or -NULL). Otherwise, it may or may not contain any previously set -value. -

-

-You're advised to call this function only when needed and as close as -possible after the return of the related C function. The -errno value is preserved across hooks, memory allocations, -invocations of the JIT compiler and other internal VM activity. The same -applies to the value returned by GetLastError() on Windows, but -you need to declare and call it yourself. -

- -

str = ffi.string(ptr [,len])

-

-Creates an interned Lua string from the data pointed to by -ptr. -

-

-If the optional argument len is missing, ptr is -converted to a "char *" and the data is assumed to be -zero-terminated. The length of the string is computed with -strlen(). -

-

-Otherwise ptr is converted to a "void *" and -len gives the length of the data. The data may contain -embedded zeros and need not be byte-oriented (though this may cause -endianess issues). -

-

-This function is mainly useful to convert (temporary) -"const char *" pointers returned by -C functions to Lua strings and store them or pass them to other -functions expecting a Lua string. The Lua string is an (interned) copy -of the data and bears no relation to the original data area anymore. -Lua strings are 8 bit clean and may be used to hold arbitrary, -non-character data. -

-

-Performance notice: it's faster to pass the length of the string, if -it's known. E.g. when the length is returned by a C call like -sprintf(). -

- -

ffi.copy(dst, src, len)
-ffi.copy(dst, str)

-

-Copies the data pointed to by src to dst. -dst is converted to a "void *" and src -is converted to a "const void *". -

-

-In the first syntax, len gives the number of bytes to copy. -Caveat: if src is a Lua string, then len must not -exceed #src+1. -

-

-In the second syntax, the source of the copy must be a Lua string. All -bytes of the string plus a zero-terminator are copied to -dst (i.e. #src+1 bytes). -

-

-Performance notice: ffi.copy() may be used as a faster -(inlinable) replacement for the C library functions -memcpy(), strcpy() and strncpy(). -

- -

ffi.fill(dst, len [,c])

-

-Fills the data pointed to by dst with len constant -bytes, given by c. If c is omitted, the data is -zero-filled. -

-

-Performance notice: ffi.fill() may be used as a faster -(inlinable) replacement for the C library function -memset(dst, c, len). Please note the different -order of arguments! -

- -

Target-specific Information

- -

status = ffi.abi(param)

-

-Returns true if param (a Lua string) applies for the -target ABI (Application Binary Interface). Returns false -otherwise. The following parameters are currently defined: -

- - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescription
32bit32 bit architecture
64bit64 bit architecture
leLittle-endian architecture
beBig-endian architecture
fpuTarget has a hardware FPU
softfpsoftfp calling conventions
hardfphardfp calling conventions
eabiEABI variant of the standard ABI
winWindows variant of the standard ABI
- -

ffi.os

-

-Contains the target OS name. Same contents as -jit.os. -

- -

ffi.arch

-

-Contains the target architecture name. Same contents as -jit.arch. -

- -

Methods for Callbacks

-

-The C types for callbacks -have some extra methods: -

- -

cb:free()

-

-Free the resources associated with a callback. The associated Lua -function is unanchored and may be garbage collected. The callback -function pointer is no longer valid and must not be called anymore -(it may be reused by a subsequently created callback). -

- -

cb:set(func)

-

-Associate a new Lua function with a callback. The C type of the -callback and the callback function pointer are unchanged. -

-

-This method is useful to dynamically switch the receiver of callbacks -without creating a new callback each time and registering it again (e.g. -with a GUI library). -

- -

Extended Standard Library Functions

-

-The following standard library functions have been extended to work -with cdata objects: -

- -

n = tonumber(cdata)

-

-Converts a number cdata object to a double and returns it as -a Lua number. This is particularly useful for boxed 64 bit -integer values. Caveat: this conversion may incur a precision loss. -

- -

s = tostring(cdata)

-

-Returns a string representation of the value of 64 bit integers -("nnnLL" or "nnnULL") or -complex numbers ("re±imi"). Otherwise -returns a string representation of the C type of a ctype object -("ctype<type>") or a cdata object -("cdata<type>: address"), unless you -override it with a __tostring metamethod (see -ffi.metatype()). -

- -

iter, obj, start = pairs(cdata)
-iter, obj, start = ipairs(cdata)

-

-Calls the __pairs or __ipairs metamethod of the -corresponding ctype. -

- -

Extensions to the Lua Parser

-

-The parser for Lua source code treats numeric literals with the -suffixes LL or ULL as signed or unsigned 64 bit -integers. Case doesn't matter, but uppercase is recommended for -readability. It handles both decimal (42LL) and hexadecimal -(0x2aLL) literals. -

-

-The imaginary part of complex numbers can be specified by suffixing -number literals with i or I, e.g. 12.5i. -Caveat: you'll need to use 1i to get an imaginary part with -the value one, since i itself still refers to a variable -named i. -

-
-
- - - diff --git a/deps/luajit/doc/ext_ffi_semantics.html b/deps/luajit/doc/ext_ffi_semantics.html deleted file mode 100644 index c267b55..0000000 --- a/deps/luajit/doc/ext_ffi_semantics.html +++ /dev/null @@ -1,1245 +0,0 @@ - - - -FFI Semantics - - - - - - - - - -
-Lua -
- - -
-

-This page describes the detailed semantics underlying the FFI library -and its interaction with both Lua and C code. -

-

-Given that the FFI library is designed to interface with C code -and that declarations can be written in plain C syntax, it -closely follows the C language semantics, wherever possible. -Some minor concessions are needed for smoother interoperation with Lua -language semantics. -

-

-Please don't be overwhelmed by the contents of this page — this -is a reference and you may need to consult it, if in doubt. It doesn't -hurt to skim this page, but most of the semantics "just work" as you'd -expect them to work. It should be straightforward to write -applications using the LuaJIT FFI for developers with a C or C++ -background. -

- -

C Language Support

-

-The FFI library has a built-in C parser with a minimal memory -footprint. It's used by the ffi.* library -functions to declare C types or external symbols. -

-

-It's only purpose is to parse C declarations, as found e.g. in -C header files. Although it does evaluate constant expressions, -it's not a C compiler. The body of inline -C function definitions is simply ignored. -

-

-Also, this is not a validating C parser. It expects and -accepts correctly formed C declarations, but it may choose to -ignore bad declarations or show rather generic error messages. If in -doubt, please check the input against your favorite C compiler. -

-

-The C parser complies to the C99 language standard plus -the following extensions: -

-
    - -
  • The '\e' escape in character and string literals.
  • - -
  • The C99/C++ boolean type, declared with the keywords bool -or _Bool.
  • - -
  • Complex numbers, declared with the keywords complex or -_Complex.
  • - -
  • Two complex number types: complex (aka -complex double) and complex float.
  • - -
  • Vector types, declared with the GCC mode or -vector_size attribute.
  • - -
  • Unnamed ('transparent') struct/union fields -inside a struct/union.
  • - -
  • Incomplete enum declarations, handled like incomplete -struct declarations.
  • - -
  • Unnamed enum fields inside a -struct/union. This is similar to a scoped C++ -enum, except that declared constants are visible in the -global namespace, too.
  • - -
  • Scoped static const declarations inside a -struct/union (from C++).
  • - -
  • Zero-length arrays ([0]), empty -struct/union, variable-length arrays (VLA, -[?]) and variable-length structs (VLS, with a trailing -VLA).
  • - -
  • C++ reference types (int &x).
  • - -
  • Alternate GCC keywords with '__', e.g. -__const__.
  • - -
  • GCC __attribute__ with the following attributes: -aligned, packed, mode, -vector_size, cdecl, fastcall, -stdcall, thiscall.
  • - -
  • The GCC __extension__ keyword and the GCC -__alignof__ operator.
  • - -
  • GCC __asm__("symname") symbol name redirection for -function declarations.
  • - -
  • MSVC keywords for fixed-length types: __int8, -__int16, __int32 and __int64.
  • - -
  • MSVC __cdecl, __fastcall, __stdcall, -__thiscall, __ptr32, __ptr64, -__declspec(align(n)) and #pragma pack.
  • - -
  • All other GCC/MSVC-specific attributes are ignored.
  • - -
-

-The following C types are pre-defined by the C parser (like -a typedef, except re-declarations will be ignored): -

-
    - -
  • Vararg handling: va_list, __builtin_va_list, -__gnuc_va_list.
  • - -
  • From <stddef.h>: ptrdiff_t, -size_t, wchar_t.
  • - -
  • From <stdint.h>: int8_t, int16_t, -int32_t, int64_t, uint8_t, -uint16_t, uint32_t, uint64_t, -intptr_t, uintptr_t.
  • - -
-

-You're encouraged to use these types in preference to -compiler-specific extensions or target-dependent standard types. -E.g. char differs in signedness and long differs in -size, depending on the target architecture and platform ABI. -

-

-The following C features are not supported: -

-
    - -
  • A declaration must always have a type specifier; it doesn't -default to an int type.
  • - -
  • Old-style empty function declarations (K&R) are not allowed. -All C functions must have a proper prototype declaration. A -function declared without parameters (int foo();) is -treated as a function taking zero arguments, like in C++.
  • - -
  • The long double C type is parsed correctly, but -there's no support for the related conversions, accesses or arithmetic -operations.
  • - -
  • Wide character strings and character literals are not -supported.
  • - -
  • See below for features that are currently -not implemented.
  • - -
- -

C Type Conversion Rules

- -

Conversions from C types to Lua objects

-

-These conversion rules apply for read accesses to -C types: indexing pointers, arrays or -struct/union types; reading external variables or -constant values; retrieving return values from C calls: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputConversionOutput
int8_t, int16_tsign-ext int32_tdoublenumber
uint8_t, uint16_tzero-ext int32_tdoublenumber
int32_t, uint32_tdoublenumber
int64_t, uint64_tboxed value64 bit int cdata
double, floatdoublenumber
bool0 → false, otherwise trueboolean
enumboxed valueenum cdata
Complex numberboxed valuecomplex cdata
Vectorboxed valuevector cdata
Pointerboxed valuepointer cdata
Arrayboxed referencereference cdata
struct/unionboxed referencereference cdata
-

-Bitfields are treated like their underlying type. -

-

-Reference types are dereferenced before a conversion can take -place — the conversion is applied to the C type pointed to -by the reference. -

- -

Conversions from Lua objects to C types

-

-These conversion rules apply for write accesses to -C types: indexing pointers, arrays or -struct/union types; initializing cdata objects; -casts to C types; writing to external variables; passing -arguments to C calls: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputConversionOutput
numberdouble
booleanfalse → 0, true → 1bool
nilNULL(void *)
lightuserdatalightuserdata address →(void *)
userdatauserdata payload →(void *)
io.* fileget FILE * handle →(void *)
stringmatch against enum constantenum
stringcopy string data + zero-byteint8_t[], uint8_t[]
stringstring data →const char[]
functioncreate callbackC function type
tabletable initializerArray
tabletable initializerstruct/union
cdatacdata payload →C type
-

-If the result type of this conversion doesn't match the -C type of the destination, the -conversion rules between C types -are applied. -

-

-Reference types are immutable after initialization ("no re-seating of -references"). For initialization purposes or when passing values to -reference parameters, they are treated like pointers. Note that unlike -in C++, there's no way to implement automatic reference generation of -variables under the Lua language semantics. If you want to call a -function with a reference parameter, you need to explicitly pass a -one-element array. -

- -

Conversions between C types

-

-These conversion rules are more or less the same as the standard -C conversion rules. Some rules only apply to casts, or require -pointer or type compatibility: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputConversionOutput
Signed integernarrow or sign-extendInteger
Unsigned integernarrow or zero-extendInteger
Integerrounddouble, float
double, floattrunc int32_tnarrow(u)int8_t, (u)int16_t
double, floattrunc(u)int32_t, (u)int64_t
double, floatroundfloat, double
Numbern == 0 → 0, otherwise 1bool
boolfalse → 0, true → 1Number
Complex numberconvert real partNumber
Numberconvert real part, imag = 0Complex number
Complex numberconvert real and imag partComplex number
Numberconvert scalar and replicateVector
Vectorcopy (same size)Vector
struct/uniontake base address (compat)Pointer
Arraytake base address (compat)Pointer
Functiontake function addressFunction pointer
Numberconvert via uintptr_t (cast)Pointer
Pointerconvert address (compat/cast)Pointer
Pointerconvert address (cast)Integer
Arrayconvert base address (cast)Integer
Arraycopy (compat)Array
struct/unioncopy (identical type)struct/union
-

-Bitfields or enum types are treated like their underlying -type. -

-

-Conversions not listed above will raise an error. E.g. it's not -possible to convert a pointer to a complex number or vice versa. -

- -

Conversions for vararg C function arguments

-

-The following default conversion rules apply when passing Lua objects -to the variable argument part of vararg C functions: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
InputConversionOutput
numberdouble
booleanfalse → 0, true → 1bool
nilNULL(void *)
userdatauserdata payload →(void *)
lightuserdatalightuserdata address →(void *)
stringstring data →const char *
float cdatadouble
Array cdatatake base addressElement pointer
struct/union cdatatake base addressstruct/union pointer
Function cdatatake function addressFunction pointer
Any other cdatano conversionC type
-

-To pass a Lua object, other than a cdata object, as a specific type, -you need to override the conversion rules: create a temporary cdata -object with a constructor or a cast and initialize it with the value -to pass: -

-

-Assuming x is a Lua number, here's how to pass it as an -integer to a vararg function: -

-
-ffi.cdef[[
-int printf(const char *fmt, ...);
-]]
-ffi.C.printf("integer value: %d\n", ffi.new("int", x))
-
-

-If you don't do this, the default Lua number → double -conversion rule applies. A vararg C function expecting an integer -will see a garbled or uninitialized value. -

- -

Initializers

-

-Creating a cdata object with -ffi.new() or the -equivalent constructor syntax always initializes its contents, too. -Different rules apply, depending on the number of optional -initializers and the C types involved: -

-
    -
  • If no initializers are given, the object is filled with zero bytes.
  • - -
  • Scalar types (numbers and pointers) accept a single initializer. -The Lua object is converted to the scalar -C type.
  • - -
  • Valarrays (complex numbers and vectors) are treated like scalars -when a single initializer is given. Otherwise they are treated like -regular arrays.
  • - -
  • Aggregate types (arrays and structs) accept either a single cdata -initializer of the same type (copy constructor), a single -table initializer, or a flat list of -initializers.
  • - -
  • The elements of an array are initialized, starting at index zero. -If a single initializer is given for an array, it's repeated for all -remaining elements. This doesn't happen if two or more initializers -are given: all remaining uninitialized elements are filled with zero -bytes.
  • - -
  • Byte arrays may also be initialized with a Lua string. This copies -the whole string plus a terminating zero-byte. The copy stops early only -if the array has a known, fixed size.
  • - -
  • The fields of a struct are initialized in the order of -their declaration. Uninitialized fields are filled with zero -bytes.
  • - -
  • Only the first field of a union can be initialized with a -flat initializer.
  • - -
  • Elements or fields which are aggregates themselves are initialized -with a single initializer, but this may be a table -initializer or a compatible aggregate.
  • - -
  • Excess initializers cause an error.
  • - -
- -

Table Initializers

-

-The following rules apply if a Lua table is used to initialize an -Array or a struct/union: -

-
    - -
  • If the table index [0] is non-nil, then the -table is assumed to be zero-based. Otherwise it's assumed to be -one-based.
  • - -
  • Array elements, starting at index zero, are initialized one-by-one -with the consecutive table elements, starting at either index -[0] or [1]. This process stops at the first -nil table element.
  • - -
  • If exactly one array element was initialized, it's repeated for -all the remaining elements. Otherwise all remaining uninitialized -elements are filled with zero bytes.
  • - -
  • The above logic only applies to arrays with a known fixed size. -A VLA is only initialized with the element(s) given in the table. -Depending on the use case, you may need to explicitly add a -NULL or 0 terminator to a VLA.
  • - -
  • A struct/union can be initialized in the -order of the declaration of its fields. Each field is initialized with -consecutive table elements, starting at either index [0] -or [1]. This process stops at the first nil table -element.
  • - -
  • Otherwise, if neither index [0] nor [1] is present, -a struct/union is initialized by looking up each field -name (as a string key) in the table. Each non-nil value is -used to initialize the corresponding field.
  • - -
  • Uninitialized fields of a struct are filled with zero -bytes, except for the trailing VLA of a VLS.
  • - -
  • Initialization of a union stops after one field has been -initialized. If no field has been initialized, the union is -filled with zero bytes.
  • - -
  • Elements or fields which are aggregates themselves are initialized -with a single initializer, but this may be a nested table -initializer (or a compatible aggregate).
  • - -
  • Excess initializers for an array cause an error. Excess -initializers for a struct/union are ignored. -Unrelated table entries are ignored, too.
  • - -
-

-Example: -

-
-local ffi = require("ffi")
-
-ffi.cdef[[
-struct foo { int a, b; };
-union bar { int i; double d; };
-struct nested { int x; struct foo y; };
-]]
-
-ffi.new("int[3]", {})            --> 0, 0, 0
-ffi.new("int[3]", {1})           --> 1, 1, 1
-ffi.new("int[3]", {1,2})         --> 1, 2, 0
-ffi.new("int[3]", {1,2,3})       --> 1, 2, 3
-ffi.new("int[3]", {[0]=1})       --> 1, 1, 1
-ffi.new("int[3]", {[0]=1,2})     --> 1, 2, 0
-ffi.new("int[3]", {[0]=1,2,3})   --> 1, 2, 3
-ffi.new("int[3]", {[0]=1,2,3,4}) --> error: too many initializers
-
-ffi.new("struct foo", {})            --> a = 0, b = 0
-ffi.new("struct foo", {1})           --> a = 1, b = 0
-ffi.new("struct foo", {1,2})         --> a = 1, b = 2
-ffi.new("struct foo", {[0]=1,2})     --> a = 1, b = 2
-ffi.new("struct foo", {b=2})         --> a = 0, b = 2
-ffi.new("struct foo", {a=1,b=2,c=3}) --> a = 1, b = 2  'c' is ignored
-
-ffi.new("union bar", {})        --> i = 0, d = 0.0
-ffi.new("union bar", {1})       --> i = 1, d = ?
-ffi.new("union bar", {[0]=1,2}) --> i = 1, d = ?    '2' is ignored
-ffi.new("union bar", {d=2})     --> i = ?, d = 2.0
-
-ffi.new("struct nested", {1,{2,3}})     --> x = 1, y.a = 2, y.b = 3
-ffi.new("struct nested", {x=1,y={2,3}}) --> x = 1, y.a = 2, y.b = 3
-
- -

Operations on cdata Objects

-

-All of the standard Lua operators can be applied to cdata objects or a -mix of a cdata object and another Lua object. The following list shows -the pre-defined operations. -

-

-Reference types are dereferenced before performing each of -the operations below — the operation is applied to the -C type pointed to by the reference. -

-

-The pre-defined operations are always tried first before deferring to a -metamethod or index table (if any) for the corresponding ctype (except -for __new). An error is raised if the metamethod lookup or -index table lookup fails. -

- -

Indexing a cdata object

-
    - -
  • Indexing a pointer/array: a cdata pointer/array can be -indexed by a cdata number or a Lua number. The element address is -computed as the base address plus the number value multiplied by the -element size in bytes. A read access loads the element value and -converts it to a Lua object. A write -access converts a Lua object to the element -type and stores the converted value to the element. An error is -raised if the element size is undefined or a write access to a -constant element is attempted.
  • - -
  • Dereferencing a struct/union field: a -cdata struct/union or a pointer to a -struct/union can be dereferenced by a string key, -giving the field name. The field address is computed as the base -address plus the relative offset of the field. A read access loads the -field value and converts it to a Lua -object. A write access converts a Lua -object to the field type and stores the converted value to the -field. An error is raised if a write access to a constant -struct/union or a constant field is attempted. -Scoped enum constants or static constants are treated like a constant -field.
  • - -
  • Indexing a complex number: a complex number can be indexed -either by a cdata number or a Lua number with the values 0 or 1, or by -the strings "re" or "im". A read access loads the -real part ([0], .re) or the imaginary part -([1], .im) part of a complex number and -converts it to a Lua number. The -sub-parts of a complex number are immutable — assigning to an -index of a complex number raises an error. Accessing out-of-bound -indexes returns unspecified results, but is guaranteed not to trigger -memory access violations.
  • - -
  • Indexing a vector: a vector is treated like an array for -indexing purposes, except the vector elements are immutable — -assigning to an index of a vector raises an error.
  • - -
-

-A ctype object can be indexed with a string key, too. The only -pre-defined operation is reading scoped constants of -struct/union types. All other accesses defer -to the corresponding metamethods or index tables (if any). -

-

-Note: since there's (deliberately) no address-of operator, a cdata -object holding a value type is effectively immutable after -initialization. The JIT compiler benefits from this fact when applying -certain optimizations. -

-

-As a consequence, the elements of complex numbers and -vectors are immutable. But the elements of an aggregate holding these -types may be modified of course. I.e. you cannot assign to -foo.c.im, but you can assign a (newly created) complex number -to foo.c. -

-

-The JIT compiler implements strict aliasing rules: accesses to different -types do not alias, except for differences in signedness (this -applies even to char pointers, unlike C99). Type punning -through unions is explicitly detected and allowed. -

- -

Calling a cdata object

-
    - -
  • Constructor: a ctype object can be called and used as a -constructor. This is equivalent -to ffi.new(ct, ...), unless a __new metamethod is -defined. The __new metamethod is called with the ctype object -plus any other arguments passed to the contructor. Note that you have to -use ffi.new inside of it, since calling ct(...) would -cause infinite recursion.
  • - -
  • C function call: a cdata function or cdata function -pointer can be called. The passed arguments are -converted to the C types of the -parameters given by the function declaration. Arguments passed to the -variable argument part of vararg C function use -special conversion rules. This -C function is called and the return value (if any) is -converted to a Lua object.
    -On Windows/x86 systems, __stdcall functions are automatically -detected and a function declared as __cdecl (the default) is -silently fixed up after the first call.
  • - -
- -

Arithmetic on cdata objects

-
    - -
  • Pointer arithmetic: a cdata pointer/array and a cdata -number or a Lua number can be added or subtracted. The number must be -on the right hand side for a subtraction. The result is a pointer of -the same type with an address plus or minus the number value -multiplied by the element size in bytes. An error is raised if the -element size is undefined.
  • - -
  • Pointer difference: two compatible cdata pointers/arrays -can be subtracted. The result is the difference between their -addresses, divided by the element size in bytes. An error is raised if -the element size is undefined or zero.
  • - -
  • 64 bit integer arithmetic: the standard arithmetic -operators (+ - * / % ^ and unary -minus) can be applied to two cdata numbers, or a cdata number and a -Lua number. If one of them is an uint64_t, the other side is -converted to an uint64_t and an unsigned arithmetic operation -is performed. Otherwise both sides are converted to an -int64_t and a signed arithmetic operation is performed. The -result is a boxed 64 bit cdata object.
    - -If one of the operands is an enum and the other operand is a -string, the string is converted to the value of a matching enum -constant before the above conversion.
    - -These rules ensure that 64 bit integers are "sticky". Any -expression involving at least one 64 bit integer operand results -in another one. The undefined cases for the division, modulo and power -operators return 2LL ^ 63 or -2ULL ^ 63.
    - -You'll have to explicitly convert a 64 bit integer to a Lua -number (e.g. for regular floating-point calculations) with -tonumber(). But note this may incur a precision loss.
  • - -
- -

Comparisons of cdata objects

-
    - -
  • Pointer comparison: two compatible cdata pointers/arrays -can be compared. The result is the same as an unsigned comparison of -their addresses. nil is treated like a NULL pointer, -which is compatible with any other pointer type.
  • - -
  • 64 bit integer comparison: two cdata numbers, or a -cdata number and a Lua number can be compared with each other. If one -of them is an uint64_t, the other side is converted to an -uint64_t and an unsigned comparison is performed. Otherwise -both sides are converted to an int64_t and a signed -comparison is performed.
    - -If one of the operands is an enum and the other operand is a -string, the string is converted to the value of a matching enum -constant before the above conversion.
    - -
  • Comparisons for equality/inequality never raise an error. -Even incompatible pointers can be compared for equality by address. Any -other incompatible comparison (also with non-cdata objects) treats the -two sides as unequal.
  • - -
- -

cdata objects as table keys

-

-Lua tables may be indexed by cdata objects, but this doesn't provide -any useful semantics — cdata objects are unsuitable as table -keys! -

-

-A cdata object is treated like any other garbage-collected object and -is hashed and compared by its address for table indexing. Since -there's no interning for cdata value types, the same value may be -boxed in different cdata objects with different addresses. Thus -t[1LL+1LL] and t[2LL] usually do not point to -the same hash slot and they certainly do not point to the same -hash slot as t[2]. -

-

-It would seriously drive up implementation complexity and slow down -the common case, if one were to add extra handling for by-value -hashing and comparisons to Lua tables. Given the ubiquity of their use -inside the VM, this is not acceptable. -

-

-There are three viable alternatives, if you really need to use cdata -objects as keys: -

-
    - -
  • If you can get by with the precision of Lua numbers -(52 bits), then use tonumber() on a cdata number or -combine multiple fields of a cdata aggregate to a Lua number. Then use -the resulting Lua number as a key when indexing tables.
    -One obvious benefit: t[tonumber(2LL)] does point to -the same slot as t[2].
  • - -
  • Otherwise use either tostring() on 64 bit integers -or complex numbers or combine multiple fields of a cdata aggregate to -a Lua string (e.g. with -ffi.string()). Then -use the resulting Lua string as a key when indexing tables.
  • - -
  • Create your own specialized hash table implementation using the -C types provided by the FFI library, just like you would in -C code. Ultimately this may give much better performance than the -other alternatives or what a generic by-value hash table could -possibly provide.
  • - -
- -

Parameterized Types

-

-To facilitate some abstractions, the two functions -ffi.typeof and -ffi.cdef support -parameterized types in C declarations. Note: none of the other API -functions taking a cdecl allow this. -

-

-Any place you can write a typedef name, an -identifier or a number in a declaration, you can write -$ (the dollar sign) instead. These placeholders are replaced in -order of appearance with the arguments following the cdecl string: -

-
--- Declare a struct with a parameterized field type and name:
-ffi.cdef([[
-typedef struct { $ $; } foo_t;
-]], type1, name1)
-
--- Anonymous struct with dynamic names:
-local bar_t = ffi.typeof("struct { int $, $; }", name1, name2)
--- Derived pointer type:
-local bar_ptr_t = ffi.typeof("$ *", bar_t)
-
--- Parameterized dimensions work even where a VLA won't work:
-local matrix_t = ffi.typeof("uint8_t[$][$]", width, height)
-
-

-Caveat: this is not simple text substitution! A passed ctype or -cdata object is treated like the underlying type, a passed string is -considered an identifier and a number is considered a number. You must -not mix this up: e.g. passing "int" as a string doesn't work in -place of a type, you'd need to use ffi.typeof("int") instead. -

-

-The main use for parameterized types are libraries implementing abstract -data types -(» example), -similar to what can be achieved with C++ template metaprogramming. -Another use case are derived types of anonymous structs, which avoids -pollution of the global struct namespace. -

-

-Please note that parameterized types are a nice tool and indispensable -for certain use cases. But you'll want to use them sparingly in regular -code, e.g. when all types are actually fixed. -

- -

Garbage Collection of cdata Objects

-

-All explicitly (ffi.new(), ffi.cast() etc.) or -implicitly (accessors) created cdata objects are garbage collected. -You need to ensure to retain valid references to cdata objects -somewhere on a Lua stack, an upvalue or in a Lua table while they are -still in use. Once the last reference to a cdata object is gone, the -garbage collector will automatically free the memory used by it (at -the end of the next GC cycle). -

-

-Please note that pointers themselves are cdata objects, however they -are not followed by the garbage collector. So e.g. if you -assign a cdata array to a pointer, you must keep the cdata object -holding the array alive as long as the pointer is still in use: -

-
-ffi.cdef[[
-typedef struct { int *a; } foo_t;
-]]
-
-local s = ffi.new("foo_t", ffi.new("int[10]")) -- WRONG!
-
-local a = ffi.new("int[10]") -- OK
-local s = ffi.new("foo_t", a)
--- Now do something with 's', but keep 'a' alive until you're done.
-
-

-Similar rules apply for Lua strings which are implicitly converted to -"const char *": the string object itself must be -referenced somewhere or it'll be garbage collected eventually. The -pointer will then point to stale data, which may have already been -overwritten. Note that string literals are automatically kept -alive as long as the function containing it (actually its prototype) -is not garbage collected. -

-

-Objects which are passed as an argument to an external C function -are kept alive until the call returns. So it's generally safe to -create temporary cdata objects in argument lists. This is a common -idiom for passing specific C types to -vararg functions. -

-

-Memory areas returned by C functions (e.g. from malloc()) -must be manually managed, of course (or use -ffi.gc()). Pointers to -cdata objects are indistinguishable from pointers returned by C -functions (which is one of the reasons why the GC cannot follow them). -

- -

Callbacks

-

-The LuaJIT FFI automatically generates special callback functions -whenever a Lua function is converted to a C function pointer. This -associates the generated callback function pointer with the C type -of the function pointer and the Lua function object (closure). -

-

-This can happen implicitly due to the usual conversions, e.g. when -passing a Lua function to a function pointer argument. Or you can use -ffi.cast() to explicitly cast a Lua function to a -C function pointer. -

-

-Currently only certain C function types can be used as callback -functions. Neither C vararg functions nor functions with -pass-by-value aggregate argument or result types are supported. There -are no restrictions for the kind of Lua functions that can be called -from the callback — no checks for the proper number of arguments -are made. The return value of the Lua function will be converted to the -result type and an error will be thrown for invalid conversions. -

-

-It's allowed to throw errors across a callback invocation, but it's not -advisable in general. Do this only if you know the C function, that -called the callback, copes with the forced stack unwinding and doesn't -leak resources. -

-

-One thing that's not allowed, is to let an FFI call into a C function -get JIT-compiled, which in turn calls a callback, calling into Lua again. -Usually this attempt is caught by the interpreter first and the -C function is blacklisted for compilation. -

-

-However, this heuristic may fail under specific circumstances: e.g. a -message polling function might not run Lua callbacks right away and the call -gets JIT-compiled. If it later happens to call back into Lua (e.g. a rarely -invoked error callback), you'll get a VM PANIC with the message -"bad callback". Then you'll need to manually turn off -JIT-compilation with -jit.off() for the -surrounding Lua function that invokes such a message polling function (or -similar). -

- -

Callback resource handling

-

-Callbacks take up resources — you can only have a limited number -of them at the same time (500 - 1000, depending on the -architecture). The associated Lua functions are anchored to prevent -garbage collection, too. -

-

-Callbacks due to implicit conversions are permanent! There is no -way to guess their lifetime, since the C side might store the -function pointer for later use (typical for GUI toolkits). The associated -resources cannot be reclaimed until termination: -

-
-ffi.cdef[[
-typedef int (__stdcall *WNDENUMPROC)(void *hwnd, intptr_t l);
-int EnumWindows(WNDENUMPROC func, intptr_t l);
-]]
-
--- Implicit conversion to a callback via function pointer argument.
-local count = 0
-ffi.C.EnumWindows(function(hwnd, l)
-  count = count + 1
-  return true
-end, 0)
--- The callback is permanent and its resources cannot be reclaimed!
--- Ok, so this may not be a problem, if you do this only once.
-
-

-Note: this example shows that you must properly declare -__stdcall callbacks on Windows/x86 systems. The calling -convention cannot be automatically detected, unlike for -__stdcall calls to Windows functions. -

-

-For some use cases it's necessary to free up the resources or to -dynamically redirect callbacks. Use an explicit cast to a -C function pointer and keep the resulting cdata object. Then use -the cb:free() -or cb:set() methods -on the cdata object: -

-
--- Explicitly convert to a callback via cast.
-local count = 0
-local cb = ffi.cast("WNDENUMPROC", function(hwnd, l)
-  count = count + 1
-  return true
-end)
-
--- Pass it to a C function.
-ffi.C.EnumWindows(cb, 0)
--- EnumWindows doesn't need the callback after it returns, so free it.
-
-cb:free()
--- The callback function pointer is no longer valid and its resources
--- will be reclaimed. The created Lua closure will be garbage collected.
-
- -

Callback performance

-

-Callbacks are slow! First, the C to Lua transition itself -has an unavoidable cost, similar to a lua_call() or -lua_pcall(). Argument and result marshalling add to that cost. -And finally, neither the C compiler nor LuaJIT can inline or -optimize across the language barrier and hoist repeated computations out -of a callback function. -

-

-Do not use callbacks for performance-sensitive work: e.g. consider a -numerical integration routine which takes a user-defined function to -integrate over. It's a bad idea to call a user-defined Lua function from -C code millions of times. The callback overhead will be absolutely -detrimental for performance. -

-

-It's considerably faster to write the numerical integration routine -itself in Lua — the JIT compiler will be able to inline the -user-defined function and optimize it together with its calling context, -with very competitive performance. -

-

-As a general guideline: use callbacks only when you must, because -of existing C APIs. E.g. callback performance is irrelevant for a -GUI application, which waits for user input most of the time, anyway. -

-

-For new designs avoid push-style APIs: a C function repeatedly -calling a callback for each result. Instead use pull-style APIs: -call a C function repeatedly to get a new result. Calls from Lua -to C via the FFI are much faster than the other way round. Most well-designed -libraries already use pull-style APIs (read/write, get/put). -

- -

C Library Namespaces

-

-A C library namespace is a special kind of object which allows -access to the symbols contained in shared libraries or the default -symbol namespace. The default -ffi.C namespace is -automatically created when the FFI library is loaded. C library -namespaces for specific shared libraries may be created with the -ffi.load() API -function. -

-

-Indexing a C library namespace object with a symbol name (a Lua -string) automatically binds it to the library. First the symbol type -is resolved — it must have been declared with -ffi.cdef. Then the -symbol address is resolved by searching for the symbol name in the -associated shared libraries or the default symbol namespace. Finally, -the resulting binding between the symbol name, the symbol type and its -address is cached. Missing symbol declarations or nonexistent symbol -names cause an error. -

-

-This is what happens on a read access for the different kinds of -symbols: -

-
    - -
  • External functions: a cdata object with the type of the function -and its address is returned.
  • - -
  • External variables: the symbol address is dereferenced and the -loaded value is converted to a Lua object -and returned.
  • - -
  • Constant values (static const or enum -constants): the constant is converted to a -Lua object and returned.
  • - -
-

-This is what happens on a write access: -

-
    - -
  • External variables: the value to be written is -converted to the C type of the -variable and then stored at the symbol address.
  • - -
  • Writing to constant variables or to any other symbol type causes -an error, like any other attempted write to a constant location.
  • - -
-

-C library namespaces themselves are garbage collected objects. If -the last reference to the namespace object is gone, the garbage -collector will eventually release the shared library reference and -remove all memory associated with the namespace. Since this may -trigger the removal of the shared library from the memory of the -running process, it's generally not safe to use function -cdata objects obtained from a library if the namespace object may be -unreferenced. -

-

-Performance notice: the JIT compiler specializes to the identity of -namespace objects and to the strings used to index it. This -effectively turns function cdata objects into constants. It's not -useful and actually counter-productive to explicitly cache these -function objects, e.g. local strlen = ffi.C.strlen. OTOH it -is useful to cache the namespace itself, e.g. local C = -ffi.C. -

- -

No Hand-holding!

-

-The FFI library has been designed as a low-level library. The -goal is to interface with C code and C data types with a -minimum of overhead. This means you can do anything you can do -from C: access all memory, overwrite anything in memory, call -machine code at any memory address and so on. -

-

-The FFI library provides no memory safety, unlike regular Lua -code. It will happily allow you to dereference a NULL -pointer, to access arrays out of bounds or to misdeclare -C functions. If you make a mistake, your application might crash, -just like equivalent C code would. -

-

-This behavior is inevitable, since the goal is to provide full -interoperability with C code. Adding extra safety measures, like -bounds checks, would be futile. There's no way to detect -misdeclarations of C functions, since shared libraries only -provide symbol names, but no type information. Likewise there's no way -to infer the valid range of indexes for a returned pointer. -

-

-Again: the FFI library is a low-level library. This implies it needs -to be used with care, but it's flexibility and performance often -outweigh this concern. If you're a C or C++ developer, it'll be easy -to apply your existing knowledge. OTOH writing code for the FFI -library is not for the faint of heart and probably shouldn't be the -first exercise for someone with little experience in Lua, C or C++. -

-

-As a corollary of the above, the FFI library is not safe for use by -untrusted Lua code. If you're sandboxing untrusted Lua code, you -definitely don't want to give this code access to the FFI library or -to any cdata object (except 64 bit integers or complex -numbers). Any properly engineered Lua sandbox needs to provide safety -wrappers for many of the standard Lua library functions — -similar wrappers need to be written for high-level operations on FFI -data types, too. -

- -

Current Status

-

-The initial release of the FFI library has some limitations and is -missing some features. Most of these will be fixed in future releases. -

-

-C language support is -currently incomplete: -

-
    -
  • C declarations are not passed through a C pre-processor, -yet.
  • -
  • The C parser is able to evaluate most constant expressions -commonly found in C header files. However it doesn't handle the -full range of C expression semantics and may fail for some -obscure constructs.
  • -
  • static const declarations only work for integer types -up to 32 bits. Neither declaring string constants nor -floating-point constants is supported.
  • -
  • Packed struct bitfields that cross container boundaries -are not implemented.
  • -
  • Native vector types may be defined with the GCC mode or -vector_size attribute. But no operations other than loading, -storing and initializing them are supported, yet.
  • -
  • The volatile type qualifier is currently ignored by -compiled code.
  • -
  • ffi.cdef silently -ignores most re-declarations. Note: avoid re-declarations which do not -conform to C99. The implementation will eventually be changed to -perform strict checks.
  • -
-

-The JIT compiler already handles a large subset of all FFI operations. -It automatically falls back to the interpreter for unimplemented -operations (you can check for this with the --jv command line option). -The following operations are currently not compiled and may exhibit -suboptimal performance, especially when used in inner loops: -

-
    -
  • Bitfield accesses and initializations.
  • -
  • Vector operations.
  • -
  • Table initializers.
  • -
  • Initialization of nested struct/union types.
  • -
  • Allocations of variable-length arrays or structs.
  • -
  • Allocations of C types with a size > 128 bytes or an -alignment > 8 bytes.
  • -
  • Conversions from lightuserdata to void *.
  • -
  • Pointer differences for element sizes that are not a power of -two.
  • -
  • Calls to C functions with aggregates passed or returned by -value.
  • -
  • Calls to ctype metamethods which are not plain functions.
  • -
  • ctype __newindex tables and non-string lookups in ctype -__index tables.
  • -
  • tostring() for cdata types.
  • -
  • Calls to ffi.cdef(), ffi.load() and -ffi.metatype().
  • -
-

-Other missing features: -

-
    -
  • Bit operations for 64 bit types.
  • -
  • Arithmetic for complex numbers.
  • -
  • Passing structs by value to vararg C functions.
  • -
  • C++ exception interoperability -does not extend to C functions called via the FFI, if the call is -compiled.
  • -
-
-
- - - diff --git a/deps/luajit/doc/ext_ffi_tutorial.html b/deps/luajit/doc/ext_ffi_tutorial.html deleted file mode 100644 index 8f99bfb..0000000 --- a/deps/luajit/doc/ext_ffi_tutorial.html +++ /dev/null @@ -1,601 +0,0 @@ - - - -FFI Tutorial - - - - - - - - - -
-Lua -
- - -
-

-This page is intended to give you an overview of the features of the FFI -library by presenting a few use cases and guidelines. -

-

-This page makes no attempt to explain all of the FFI library, though. -You'll want to have a look at the ffi.* API -function reference and the FFI -semantics to learn more. -

- -

Loading the FFI Library

-

-The FFI library is built into LuaJIT by default, but it's not loaded -and initialized by default. The suggested way to use the FFI library -is to add the following to the start of every Lua file that needs one -of its functions: -

-
-local ffi = require("ffi")
-
-

-Please note this doesn't define an ffi variable in the table -of globals — you really need to use the local variable. The -require function ensures the library is only loaded once. -

-

-Note: If you want to experiment with the FFI from the interactive prompt -of the command line executable, omit the local, as it doesn't -preserve local variables across lines. -

- -

Accessing Standard System Functions

-

-The following code explains how to access standard system functions. -We slowly print two lines of dots by sleeping for 10 milliseconds -after each dot: -

-
- 
-①
-
-
-
-
-
-②
-③
-④
-
-
-
-⑤
-
-
-
-
-
-⑥local ffi = require("ffi")
-ffi.cdef[[
-void Sleep(int ms);
-int poll(struct pollfd *fds, unsigned long nfds, int timeout);
-]]
-
-local sleep
-if ffi.os == "Windows" then
-  function sleep(s)
-    ffi.C.Sleep(s*1000)
-  end
-else
-  function sleep(s)
-    ffi.C.poll(nil, 0, s*1000)
-  end
-end
-
-for i=1,160 do
-  io.write("."); io.flush()
-  sleep(0.01)
-end
-io.write("\n")
-
-

-Here's the step-by-step explanation: -

-

- This defines the -C library functions we're going to use. The part inside the -double-brackets (in green) is just standard C syntax. You can -usually get this info from the C header files or the -documentation provided by each C library or C compiler. -

-

- The difficulty we're -facing here, is that there are different standards to choose from. -Windows has a simple Sleep() function. On other systems there -are a variety of functions available to achieve sub-second sleeps, but -with no clear consensus. Thankfully poll() can be used for -this task, too, and it's present on most non-Windows systems. The -check for ffi.os makes sure we use the Windows-specific -function only on Windows systems. -

-

- Here we're wrapping the -call to the C function in a Lua function. This isn't strictly -necessary, but it's helpful to deal with system-specific issues only -in one part of the code. The way we're wrapping it ensures the check -for the OS is only done during initialization and not for every call. -

-

- A more subtle point is -that we defined our sleep() function (for the sake of this -example) as taking the number of seconds, but accepting fractional -seconds. Multiplying this by 1000 gets us milliseconds, but that still -leaves it a Lua number, which is a floating-point value. Alas, the -Sleep() function only accepts an integer value. Luckily for -us, the FFI library automatically performs the conversion when calling -the function (truncating the FP value towards zero, like in C). -

-

-Some readers will notice that Sleep() is part of -KERNEL32.DLL and is also a stdcall function. So how -can this possibly work? The FFI library provides the ffi.C -default C library namespace, which allows calling functions from -the default set of libraries, like a C compiler would. Also, the -FFI library automatically detects stdcall functions, so you -don't need to declare them as such. -

-

- The poll() -function takes a couple more arguments we're not going to use. You can -simply use nil to pass a NULL pointer and 0 -for the nfds parameter. Please note that the -number 0 does not convert to a pointer value, -unlike in C++. You really have to pass pointers to pointer arguments -and numbers to number arguments. -

-

-The page on FFI semantics has all -of the gory details about -conversions between Lua -objects and C types. For the most part you don't have to deal -with this, as it's performed automatically and it's carefully designed -to bridge the semantic differences between Lua and C. -

-

- Now that we have defined -our own sleep() function, we can just call it from plain Lua -code. That wasn't so bad, huh? Turning these boring animated dots into -a fascinating best-selling game is left as an exercise for the reader. -:-) -

- -

Accessing the zlib Compression Library

-

-The following code shows how to access the zlib compression library from Lua code. -We'll define two convenience wrapper functions that take a string and -compress or uncompress it to another string: -

-
- 
-①
-
-
-
-
-
-
-②
-
-
-③
-
-④
-
-
-⑤
-
-
-⑥
-
-
-
-
-
-
-
-⑦local ffi = require("ffi")
-ffi.cdef[[
-unsigned long compressBound(unsigned long sourceLen);
-int compress2(uint8_t *dest, unsigned long *destLen,
-	      const uint8_t *source, unsigned long sourceLen, int level);
-int uncompress(uint8_t *dest, unsigned long *destLen,
-	       const uint8_t *source, unsigned long sourceLen);
-]]
-local zlib = ffi.load(ffi.os == "Windows" and "zlib1" or "z")
-
-local function compress(txt)
-  local n = zlib.compressBound(#txt)
-  local buf = ffi.new("uint8_t[?]", n)
-  local buflen = ffi.new("unsigned long[1]", n)
-  local res = zlib.compress2(buf, buflen, txt, #txt, 9)
-  assert(res == 0)
-  return ffi.string(buf, buflen[0])
-end
-
-local function uncompress(comp, n)
-  local buf = ffi.new("uint8_t[?]", n)
-  local buflen = ffi.new("unsigned long[1]", n)
-  local res = zlib.uncompress(buf, buflen, comp, #comp)
-  assert(res == 0)
-  return ffi.string(buf, buflen[0])
-end
-
--- Simple test code.
-local txt = string.rep("abcd", 1000)
-print("Uncompressed size: ", #txt)
-local c = compress(txt)
-print("Compressed size: ", #c)
-local txt2 = uncompress(c, #txt)
-assert(txt2 == txt)
-
-

-Here's the step-by-step explanation: -

-

- This defines some of the -C functions provided by zlib. For the sake of this example, some -type indirections have been reduced and it uses the pre-defined -fixed-size integer types, while still adhering to the zlib API/ABI. -

-

- This loads the zlib shared -library. On POSIX systems it's named libz.so and usually -comes pre-installed. Since ffi.load() automatically adds any -missing standard prefixes/suffixes, we can simply load the -"z" library. On Windows it's named zlib1.dll and -you'll have to download it first from the -» zlib site. The check for -ffi.os makes sure we pass the right name to -ffi.load(). -

-

- First, the maximum size of -the compression buffer is obtained by calling the -zlib.compressBound function with the length of the -uncompressed string. The next line allocates a byte buffer of this -size. The [?] in the type specification indicates a -variable-length array (VLA). The actual number of elements of this -array is given as the 2nd argument to ffi.new(). -

-

- This may look strange at -first, but have a look at the declaration of the compress2 -function from zlib: the destination length is defined as a pointer! -This is because you pass in the maximum buffer size and get back the -actual length that was used. -

-

-In C you'd pass in the address of a local variable -(&buflen). But since there's no address-of operator in -Lua, we'll just pass in a one-element array. Conveniently it can be -initialized with the maximum buffer size in one step. Calling the -actual zlib.compress2 function is then straightforward. -

-

- We want to return the -compressed data as a Lua string, so we'll use ffi.string(). -It needs a pointer to the start of the data and the actual length. The -length has been returned in the buflen array, so we'll just -get it from there. -

-

-Note that since the function returns now, the buf and -buflen variables will eventually be garbage collected. This -is fine, because ffi.string() has copied the contents to a -newly created (interned) Lua string. If you plan to call this function -lots of times, consider reusing the buffers and/or handing back the -results in buffers instead of strings. This will reduce the overhead -for garbage collection and string interning. -

-

- The uncompress -functions does the exact opposite of the compress function. -The compressed data doesn't include the size of the original string, -so this needs to be passed in. Otherwise no surprises here. -

-

- The code, that makes use -of the functions we just defined, is just plain Lua code. It doesn't -need to know anything about the LuaJIT FFI — the convenience -wrapper functions completely hide it. -

-

-One major advantage of the LuaJIT FFI is that you are now able to -write those wrappers in Lua. And at a fraction of the time it -would cost you to create an extra C module using the Lua/C API. -Many of the simpler C functions can probably be used directly -from your Lua code, without any wrappers. -

-

-Side note: the zlib API uses the long type for passing -lengths and sizes around. But all those zlib functions actually only -deal with 32 bit values. This is an unfortunate choice for a -public API, but may be explained by zlib's history — we'll just -have to deal with it. -

-

-First, you should know that a long is a 64 bit type e.g. -on POSIX/x64 systems, but a 32 bit type on Windows/x64 and on -32 bit systems. Thus a long result can be either a plain -Lua number or a boxed 64 bit integer cdata object, depending on -the target system. -

-

-Ok, so the ffi.* functions generally accept cdata objects -wherever you'd want to use a number. That's why we get a away with -passing n to ffi.string() above. But other Lua -library functions or modules don't know how to deal with this. So for -maximum portability one needs to use tonumber() on returned -long results before passing them on. Otherwise the -application might work on some systems, but would fail in a POSIX/x64 -environment. -

- -

Defining Metamethods for a C Type

-

-The following code explains how to define metamethods for a C type. -We define a simple point type and add some operations to it: -

-
- 
-①
-
-
-
-②
-
-③
-
-④
-
-
-
-⑤
-
-⑥local ffi = require("ffi")
-ffi.cdef[[
-typedef struct { double x, y; } point_t;
-]]
-
-local point
-local mt = {
-  __add = function(a, b) return point(a.x+b.x, a.y+b.y) end,
-  __len = function(a) return math.sqrt(a.x*a.x + a.y*a.y) end,
-  __index = {
-    area = function(a) return a.x*a.x + a.y*a.y end,
-  },
-}
-point = ffi.metatype("point_t", mt)
-
-local a = point(3, 4)
-print(a.x, a.y)  --> 3  4
-print(#a)        --> 5
-print(a:area())  --> 25
-local b = a + point(0.5, 8)
-print(#b)        --> 12.5
-
-

-Here's the step-by-step explanation: -

-

- This defines the C type for a -two-dimensional point object. -

-

- We have to declare the variable -holding the point constructor first, because it's used inside of a -metamethod. -

-

- Let's define an __add -metamethod which adds the coordinates of two points and creates a new -point object. For simplicity, this function assumes that both arguments -are points. But it could be any mix of objects, if at least one operand -is of the required type (e.g. adding a point plus a number or vice -versa). Our __len metamethod returns the distance of a point to -the origin. -

-

- If we run out of operators, we can -define named methods, too. Here the __index table defines an -area function. For custom indexing needs, one might want to -define __index and __newindex functions instead. -

-

- This associates the metamethods with -our C type. This only needs to be done once. For convenience, a -constructor is returned by -ffi.metatype(). -We're not required to use it, though. The original C type can still -be used e.g. to create an array of points. The metamethods automatically -apply to any and all uses of this type. -

-

-Please note that the association with a metatable is permanent and -the metatable must not be modified afterwards! Ditto for the -__index table. -

-

- Here are some simple usage examples -for the point type and their expected results. The pre-defined -operations (such as a.x) can be freely mixed with the newly -defined metamethods. Note that area is a method and must be -called with the Lua syntax for methods: a:area(), not -a.area(). -

-

-The C type metamethod mechanism is most useful when used in -conjunction with C libraries that are written in an object-oriented -style. Creators return a pointer to a new instance and methods take an -instance pointer as the first argument. Sometimes you can just point -__index to the library namespace and __gc to the -destructor and you're done. But often enough you'll want to add -convenience wrappers, e.g. to return actual Lua strings or when -returning multiple values. -

-

-Some C libraries only declare instance pointers as an opaque -void * type. In this case you can use a fake type for all -declarations, e.g. a pointer to a named (incomplete) struct will do: -typedef struct foo_type *foo_handle. The C side doesn't -know what you declare with the LuaJIT FFI, but as long as the underlying -types are compatible, everything still works. -

- -

Translating C Idioms

-

-Here's a list of common C idioms and their translation to the -LuaJIT FFI: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IdiomC codeLua code
Pointer dereference
int *p;
x = *p;
*p = y;
x = p[0]
p[0] = y
Pointer indexing
int i, *p;
x = p[i];
p[i+1] = y;
x = p[i]
p[i+1] = y
Array indexing
int i, a[];
x = a[i];
a[i+1] = y;
x = a[i]
a[i+1] = y
struct/union dereference
struct foo s;
x = s.field;
s.field = y;
x = s.field
s.field = y
struct/union pointer deref.
struct foo *sp;
x = sp->field;
sp->field = y;
x = s.field
s.field = y
Pointer arithmetic
int i, *p;
x = p + i;
y = p - i;
x = p + i
y = p - i
Pointer difference
int *p1, *p2;
x = p1 - p2;x = p1 - p2
Array element pointer
int i, a[];
x = &a[i];x = a+i
Cast pointer to address
int *p;
x = (intptr_t)p;x = tonumber(
 ffi.cast("intptr_t",
          p))
Functions with outargs
void foo(int *inoutlen);
int len = x;
foo(&len);
y = len;
local len =
  ffi.new("int[1]", x)
foo(len)
y = len[0]
Vararg conversions
int printf(char *fmt, ...);
printf("%g", 1.0);
printf("%d", 1);
 
printf("%g", 1);
printf("%d",
  ffi.new("int", 1))
- -

To Cache or Not to Cache

-

-It's a common Lua idiom to cache library functions in local variables -or upvalues, e.g.: -

-
-local byte, char = string.byte, string.char
-local function foo(x)
-  return char(byte(x)+1)
-end
-
-

-This replaces several hash-table lookups with a (faster) direct use of -a local or an upvalue. This is less important with LuaJIT, since the -JIT compiler optimizes hash-table lookups a lot and is even able to -hoist most of them out of the inner loops. It can't eliminate -all of them, though, and it saves some typing for often-used -functions. So there's still a place for this, even with LuaJIT. -

-

-The situation is a bit different with C function calls via the -FFI library. The JIT compiler has special logic to eliminate all -of the lookup overhead for functions resolved from a -C library namespace! -Thus it's not helpful and actually counter-productive to cache -individual C functions like this: -

-
-local funca, funcb = ffi.C.funca, ffi.C.funcb -- Not helpful!
-local function foo(x, n)
-  for i=1,n do funcb(funca(x, i), 1) end
-end
-
-

-This turns them into indirect calls and generates bigger and slower -machine code. Instead you'll want to cache the namespace itself and -rely on the JIT compiler to eliminate the lookups: -

-
-local C = ffi.C          -- Instead use this!
-local function foo(x, n)
-  for i=1,n do C.funcb(C.funca(x, i), 1) end
-end
-
-

-This generates both shorter and faster code. So don't cache -C functions, but do cache namespaces! Most often the -namespace is already in a local variable at an outer scope, e.g. from -local lib = ffi.load(...). Note that copying -it to a local variable in the function scope is unnecessary. -

-
-
- - - diff --git a/deps/luajit/doc/ext_jit.html b/deps/luajit/doc/ext_jit.html deleted file mode 100644 index 27351dd..0000000 --- a/deps/luajit/doc/ext_jit.html +++ /dev/null @@ -1,199 +0,0 @@ - - - -jit.* Library - - - - - - - - -
-Lua -
- - -
-

-The functions in this built-in module control the behavior of the JIT -compiler engine. Note that JIT-compilation is fully automatic — -you probably won't need to use any of the following functions unless -you have special needs. -

- -

jit.on()
-jit.off()

-

-Turns the whole JIT compiler on (default) or off. -

-

-These functions are typically used with the command line options --j on or -j off. -

- -

jit.flush()

-

-Flushes the whole cache of compiled code. -

- -

jit.on(func|true [,true|false])
-jit.off(func|true [,true|false])
-jit.flush(func|true [,true|false])

-

-jit.on enables JIT compilation for a Lua function (this is -the default). -

-

-jit.off disables JIT compilation for a Lua function and -flushes any already compiled code from the code cache. -

-

-jit.flush flushes the code, but doesn't affect the -enable/disable status. -

-

-The current function, i.e. the Lua function calling this library -function, can also be specified by passing true as the first -argument. -

-

-If the second argument is true, JIT compilation is also -enabled, disabled or flushed recursively for all sub-functions of a -function. With false only the sub-functions are affected. -

-

-The jit.on and jit.off functions only set a flag -which is checked when the function is about to be compiled. They do -not trigger immediate compilation. -

-

-Typical usage is jit.off(true, true) in the main chunk -of a module to turn off JIT compilation for the whole module for -debugging purposes. -

- -

jit.flush(tr)

-

-Flushes the root trace, specified by its number, and all of its side -traces from the cache. The code for the trace will be retained as long -as there are any other traces which link to it. -

- -

status, ... = jit.status()

-

-Returns the current status of the JIT compiler. The first result is -either true or false if the JIT compiler is turned -on or off. The remaining results are strings for CPU-specific features -and enabled optimizations. -

- -

jit.version

-

-Contains the LuaJIT version string. -

- -

jit.version_num

-

-Contains the version number of the LuaJIT core. Version xx.yy.zz -is represented by the decimal number xxyyzz. -

- -

jit.os

-

-Contains the target OS name: -"Windows", "Linux", "OSX", "BSD", "POSIX" or "Other". -

- -

jit.arch

-

-Contains the target architecture name: -"x86", "x64", "arm", "ppc", "ppcspe", or "mips". -

- -

jit.opt.* — JIT compiler optimization control

-

-This sub-module provides the backend for the -O command line -option. -

-

-You can also use it programmatically, e.g.: -

-
-jit.opt.start(2) -- same as -O2
-jit.opt.start("-dce")
-jit.opt.start("hotloop=10", "hotexit=2")
-
-

-Unlike in LuaJIT 1.x, the module is built-in and -optimization is turned on by default! -It's no longer necessary to run require("jit.opt").start(), -which was one of the ways to enable optimization. -

- -

jit.util.* — JIT compiler introspection

-

-This sub-module holds functions to introspect the bytecode, generated -traces, the IR and the generated machine code. The functionality -provided by this module is still in flux and therefore undocumented. -

-

-The debug modules -jbc, -jv and -jdump make -extensive use of these functions. Please check out their source code, -if you want to know more. -

-
-
- - - diff --git a/deps/luajit/doc/extensions.html b/deps/luajit/doc/extensions.html deleted file mode 100644 index e9cd136..0000000 --- a/deps/luajit/doc/extensions.html +++ /dev/null @@ -1,408 +0,0 @@ - - - -Extensions - - - - - - - - - -
-Lua -
- - -
-

-LuaJIT is fully upwards-compatible with Lua 5.1. It supports all -» standard Lua -library functions and the full set of -» Lua/C API -functions. -

-

-LuaJIT is also fully ABI-compatible to Lua 5.1 at the linker/dynamic -loader level. This means you can compile a C module against the -standard Lua headers and load the same shared library from either Lua -or LuaJIT. -

-

-LuaJIT extends the standard Lua VM with new functionality and adds -several extension modules. Please note this page is only about -functional enhancements and not about performance enhancements, -such as the optimized VM, the faster interpreter or the JIT compiler. -

- -

Extensions Modules

-

-LuaJIT comes with several built-in extension modules: -

- -

bit.* — Bitwise operations

-

-LuaJIT supports all bitwise operations as defined by -» Lua BitOp: -

-
-bit.tobit  bit.tohex  bit.bnot    bit.band bit.bor  bit.bxor
-bit.lshift bit.rshift bit.arshift bit.rol  bit.ror  bit.bswap
-
-

-This module is a LuaJIT built-in — you don't need to download or -install Lua BitOp. The Lua BitOp site has full documentation for all -» Lua BitOp API functions. -

-

-Please make sure to require the module before using any of -its functions: -

-
-local bit = require("bit")
-
-

-An already installed Lua BitOp module is ignored by LuaJIT. -This way you can use bit operations from both Lua and LuaJIT on a -shared installation. -

- -

ffi.* — FFI library

-

-The FFI library allows calling external -C functions and the use of C data structures from pure Lua -code. -

- -

jit.* — JIT compiler control

-

-The functions in this module -control the behavior of the JIT compiler engine. -

- -

C API extensions

-

-LuaJIT adds some -extra functions to the Lua/C API. -

- -

Enhanced Standard Library Functions

- -

xpcall(f, err [,args...]) passes arguments

-

-Unlike the standard implementation in Lua 5.1, xpcall() -passes any arguments after the error function to the function -which is called in a protected context. -

- -

loadfile() etc. handle UTF-8 source code

-

-Non-ASCII characters are handled transparently by the Lua source code parser. -This allows the use of UTF-8 characters in identifiers and strings. -A UTF-8 BOM is skipped at the start of the source code. -

- -

tostring() etc. canonicalize NaN and ±Inf

-

-All number-to-string conversions consistently convert non-finite numbers -to the same strings on all platforms. NaN results in "nan", -positive infinity results in "inf" and negative infinity results -in "-inf". -

- -

tonumber() etc. use builtin string to number conversion

-

-All string-to-number conversions consistently convert integer and -floating-point inputs in decimal and hexadecimal on all platforms. -strtod() is not used anymore, which avoids numerous -problems with poor C library implementations. The builtin conversion -function provides full precision according to the IEEE-754 standard, it -works independently of the current locale and it supports hex floating-point -numbers (e.g. 0x1.5p-3). -

- -

string.dump(f [,strip]) generates portable bytecode

-

-An extra argument has been added to string.dump(). If set to -true, 'stripped' bytecode without debug information is -generated. This speeds up later bytecode loading and reduces memory -usage. See also the --b command line option. -

-

-The generated bytecode is portable and can be loaded on any architecture -that LuaJIT supports, independent of word size or endianess. However the -bytecode compatibility versions must match. Bytecode stays compatible -for dot releases (x.y.0 → x.y.1), but may change with major or -minor releases (2.0 → 2.1) or between any beta release. Foreign -bytecode (e.g. from Lua 5.1) is incompatible and cannot be loaded. -

- -

Enhanced PRNG for math.random()

-

-LuaJIT uses a Tausworthe PRNG with period 2^223 to implement -math.random() and math.randomseed(). The quality of -the PRNG results is much superior compared to the standard Lua -implementation which uses the platform-specific ANSI rand(). -

-

-The PRNG generates the same sequences from the same seeds on all -platforms and makes use of all bits in the seed argument. -math.random() without arguments generates 52 pseudo-random bits -for every call. The result is uniformly distributed between 0.0 and 1.0. -It's correctly scaled up and rounded for math.random(n [,m]) to -preserve uniformity. -

- -

io.* functions handle 64 bit file offsets

-

-The file I/O functions in the standard io.* library handle -64 bit file offsets. In particular this means it's possible -to open files larger than 2 Gigabytes and to reposition or obtain -the current file position for offsets beyond 2 GB -(fp:seek() method). -

- -

debug.* functions identify metamethods

-

-debug.getinfo() and lua_getinfo() also return information -about invoked metamethods. The namewhat field is set to -"metamethod" and the name field has the name of -the corresponding metamethod (e.g. "__index"). -

- -

Fully Resumable VM

-

-The LuaJIT VM is fully resumable. This means you can yield from a -coroutine even across contexts, where this would not possible with -the standard Lua 5.1 VM: e.g. you can yield across pcall() -and xpcall(), across iterators and across metamethods. -

- -

Extensions from Lua 5.2

-

-LuaJIT supports some language and library extensions from Lua 5.2. -Features that are unlikely to break existing code are unconditionally -enabled: -

-
    -
  • goto and ::labels::.
  • -
  • Hex escapes '\x3F' and '\*' escape in strings.
  • -
  • load(string|reader [, chunkname [,mode [,env]]]).
  • -
  • loadstring() is an alias for load().
  • -
  • loadfile(filename [,mode [,env]]).
  • -
  • math.log(x [,base]). -
  • string.rep(s, n [,sep]). -
  • string.format(): %q reversible. -%s checks __tostring. -%a and "%A added.
  • -
  • String matching pattern %g added.
  • -
  • io.read("*L").
  • -
  • io.lines() and file:lines() process -io.read() options.
  • -
  • os.exit(status|true|false [,close]).
  • -
  • package.searchpath(name, path [, sep [, rep]]).
  • -
  • package.loadlib(name, "*").
  • -
  • debug.getinfo() returns nparams and isvararg -for option "u".
  • -
  • debug.getlocal() accepts function instead of level.
  • -
  • debug.getlocal() and debug.setlocal() accept negative -indexes for varargs.
  • -
  • debug.getupvalue() and debug.setupvalue() handle -C functions.
  • -
  • debug.upvalueid() and debug.upvaluejoin().
  • -
  • Command line option -E.
  • -
  • Command line checks __tostring for errors.
  • -
-

-Other features are only enabled, if LuaJIT is built with --DLUAJIT_ENABLE_LUA52COMPAT: -

-
    -
  • goto is a keyword and not a valid variable name anymore.
  • -
  • break can be placed anywhere. Empty statements (;;) -are allowed.
  • -
  • __lt, __le are invoked for mixed types.
  • -
  • __len for tables. rawlen() library function.
  • -
  • pairs() and ipairs() check for __pairs and -__ipairs.
  • -
  • coroutine.running() returns two results.
  • -
  • table.pack() and table.unpack() -(same as unpack()).
  • -
  • io.write() and file:write() return file handle -instead of true.
  • -
  • os.execute() and pipe:close() return detailed -exit status.
  • -
  • debug.setmetatable() returns object.
  • -
  • debug.getuservalue() and debug.setuservalue().
  • -
  • Remove math.mod(), string.gfind(). -
-

-Note: this provides only partial compatibility with Lua 5.2 at the -language and Lua library level. LuaJIT is API+ABI-compatible with -Lua 5.1, which prevents implementing features that would otherwise -break the Lua/C API and ABI (e.g. _ENV). -

- -

C++ Exception Interoperability

-

-LuaJIT has built-in support for interoperating with C++ exceptions. -The available range of features depends on the target platform and -the toolchain used to compile LuaJIT: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PlatformCompilerInteroperability
POSIX/x64, DWARF2 unwindingGCC 4.3+Full
Other platforms, DWARF2 unwindingGCCLimited
Windows/x64MSVC or WinSDKFull
Windows/x86AnyNo
Other platformsOther compilersNo
-

-Full interoperability means: -

-
    -
  • C++ exceptions can be caught on the Lua side with pcall(), -lua_pcall() etc.
  • -
  • C++ exceptions will be converted to the generic Lua error -"C++ exception", unless you use the -C call wrapper feature.
  • -
  • It's safe to throw C++ exceptions across non-protected Lua frames -on the C stack. The contents of the C++ exception object -pass through unmodified.
  • -
  • Lua errors can be caught on the C++ side with catch(...). -The corresponding Lua error message can be retrieved from the Lua stack.
  • -
  • Throwing Lua errors across C++ frames is safe. C++ destructors -will be called.
  • -
-

-Limited interoperability means: -

-
    -
  • C++ exceptions can be caught on the Lua side with pcall(), -lua_pcall() etc.
  • -
  • C++ exceptions will be converted to the generic Lua error -"C++ exception", unless you use the -C call wrapper feature.
  • -
  • C++ exceptions will be caught by non-protected Lua frames and -are rethrown as a generic Lua error. The C++ exception object will -be destroyed.
  • -
  • Lua errors cannot be caught on the C++ side.
  • -
  • Throwing Lua errors across C++ frames will not call -C++ destructors.
  • -
- -

-No interoperability means: -

-
    -
  • It's not safe to throw C++ exceptions across Lua frames.
  • -
  • C++ exceptions cannot be caught on the Lua side.
  • -
  • Lua errors cannot be caught on the C++ side.
  • -
  • Throwing Lua errors across C++ frames will not call -C++ destructors.
  • -
  • Additionally, on Windows/x86 with SEH-based C++ exceptions: -it's not safe to throw a Lua error across any frames containing -a C++ function with any try/catch construct or using variables with -(implicit) destructors. This also applies to any functions which may be -inlined in such a function. It doesn't matter whether lua_error() -is called inside or outside of a try/catch or whether any object actually -needs to be destroyed: the SEH chain is corrupted and this will eventually -lead to the termination of the process.
  • -
-
-
- - - diff --git a/deps/luajit/doc/faq.html b/deps/luajit/doc/faq.html deleted file mode 100644 index 9902f09..0000000 --- a/deps/luajit/doc/faq.html +++ /dev/null @@ -1,184 +0,0 @@ - - - -Frequently Asked Questions (FAQ) - - - - - - - - - -
-Lua -
- - -
-
-
Q: Where can I learn more about LuaJIT and Lua?
-
- -
- -
-
Q: Where can I learn more about the compiler technology used by LuaJIT?
-
-I'm planning to write more documentation about the internals of LuaJIT. -In the meantime, please use the following Google Scholar searches -to find relevant papers:
-Search for: » Trace Compiler
-Search for: » JIT Compiler
-Search for: » Dynamic Language Optimizations
-Search for: » SSA Form
-Search for: » Linear Scan Register Allocation
-Here is a list of the » innovative features in LuaJIT.
-And, you know, reading the source is of course the only way to enlightenment. :-) -
-
- -
-
Q: Why do I get this error: "attempt to index global 'arg' (a nil value)"?
-Q: My vararg functions fail after switching to LuaJIT!
-
LuaJIT is compatible to the Lua 5.1 language standard. It doesn't -support the implicit arg parameter for old-style vararg -functions from Lua 5.0.
Please convert your code to the -» Lua 5.1 -vararg syntax.
-
- -
-
Q: Why do I get this error: "bad FPU precision"?
-
Q: I get weird behavior after initializing Direct3D.
-
Q: Some FPU operations crash after I load a Delphi DLL.
-
-
- -DirectX/Direct3D (up to version 9) sets the x87 FPU to single-precision -mode by default. This violates the Windows ABI and interferes with the -operation of many programs — LuaJIT is affected, too. Please make -sure you always use the D3DCREATE_FPU_PRESERVE flag when -initializing Direct3D.
- -Direct3D version 10 or higher do not show this behavior anymore. -Consider testing your application with older versions, too.
- -Similarly, the Borland/Delphi runtime modifies the FPU control word and -enables FP exceptions. Of course this violates the Windows ABI, too. -Please check the Delphi docs for the Set8087CW method. - -
- -
-
Q: Sometimes Ctrl-C fails to stop my Lua program. Why?
-
The interrupt signal handler sets a Lua debug hook. But this is -currently ignored by compiled code (this will eventually be fixed). If -your program is running in a tight loop and never falls back to the -interpreter, the debug hook never runs and can't throw the -"interrupted!" error.
In the meantime you have to press Ctrl-C -twice to get stop your program. That's similar to when it's stuck -running inside a C function under the Lua interpreter.
-
- -
-
Q: Why doesn't my favorite power-patch for Lua apply against LuaJIT?
-
Because it's a completely redesigned VM and has very little code -in common with Lua anymore. Also, if the patch introduces changes to -the Lua semantics, these would need to be reflected everywhere in the -VM, from the interpreter up to all stages of the compiler.
Please -use only standard Lua language constructs. For many common needs you -can use source transformations or use wrapper or proxy functions. -The compiler will happily optimize away such indirections.
-
- -
-
Q: Lua runs everywhere. Why doesn't LuaJIT support my CPU?
-
Because it's a compiler — it needs to generate native -machine code. This means the code generator must be ported to each -architecture. And the fast interpreter is written in assembler and -must be ported, too. This is quite an undertaking.
-The install documentation shows the supported -architectures. Other architectures will follow based on sufficient user -demand and/or sponsoring.
-
- -
-
Q: When will feature X be added? When will the next version be released?
-
When it's ready.
-C'mon, it's open source — I'm doing it on my own time and you're -getting it for free. You can either contribute a patch or sponsor -the development of certain features, if they are important to you. -
-
-
-
- - - diff --git a/deps/luajit/doc/img/contact.png b/deps/luajit/doc/img/contact.png deleted file mode 100644 index 9c73dc594efc1f47309d6c9b73d7719c3a9e04df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmV-C1;hG@P)sQ4|K#fZOHEVa==(`aQP0%nM@di3(&I%(O)@h#$&+f^&9&U}9=sU}#xfW8dZX zS6X4+hl`eQb9`=bdTMQUS6N_FRb1EH?oLrx)!OXR*y%bu zKs7fzyTH%6zRkD1%O4*iwYte19Urr}$DpLK7#SM{1qGa-tpfuC0RaJph?9SUjedfR ze1M8)YI0?0aARg}VPtGhP*&yZ{!C6(sq^PzF3k;#Avk3_bkCL7T2MCRjoQjT_h>Vwp zij{MAe{pnuZ*qHWaCvKPcUD+m*xm0?Qd!p9?bO-p)7k3L*XYmH<~BGyy}{8mHafb$ z&bYnIARr?h9v~YW9vK=O7Z@4@1O%I(tO5c8@Y5f50008dNklZz)3AlitwxnPH%H`Uot)Wm#A~UJD{dq04A@c=B#o!5#fVO zK9y#&^Z}?|*LsioK&(FDooZAR)tQj#4t{T51EP;48U9I=7br`Bk^O8MkeX!ZNe^m_BH=Vrj*jZZuSKj$t2j7FZ^2u4YKv8(~ zaMJ@oQZ>+`rSiG$iy;5QP}GpcaF4=ry2srsiZ0RqYjK@LQA)d@GB0_aay0Tvrp83dAL2x{13 zII2|!RUp(7P{l^2T*QHZ71!E*QcTqNtMh0|uLS!2k^8W?Ka#6$aBn3*=LUe(BpUo6 z=nkI1fP*0x3aYH^su6tQT}{)EfU4IyLBQ-;(w1i;#)>KNGk41l6I5_B2)f}c}CK-PL&a{M5Rut(jQ@VX1_p&z6vN)t zNcp7CYSP6-mE96jwhE}y?lvr|2kRa0g^iLTaJ1y+9qs~F+W}}-FHd&oy;TeG2n6hM z2eK~@vIu+Z%WDWZDK7wkG0}TEXW(~!Gk+0t(i)Sck-Ht%F=yzi{ZFXe-}F6T**!vM y)$^3mN5{Eb6*vAD>S)nmP3aw7v29)6WaBSReaJM4z7xj)0000 - - -Installation - - - - - - - - - -
-Lua -
- - -
-

-LuaJIT is only distributed as a source package. This page explains -how to build and install LuaJIT with different operating systems -and C compilers. -

-

-For the impatient (on POSIX systems): -

-
-make && sudo make install
-
-

-LuaJIT currently builds out-of-the box on most systems. -Here's the compatibility matrix for the supported combinations of -operating systems, CPUs and compilers: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CPU / OSLinux or
Android
*BSD, OtherOSX 10.4+ or
iOS 3.0+
Windows
XP/Vista/7
x86 (32 bit)GCC 4.x
GCC 3.4
GCC 4.x
GCC 3.4
GCC 4.x
GCC 3.4
MSVC, MSVC/EE
WinSDK
MinGW, Cygwin
x64 (64 bit)GCC 4.xORBIS (PS4)GCC 4.xMSVC + SDK v7.0
WinSDK v7.0
ARMv5+
ARM9E+
GCC 4.2+GCC 4.2+
PSP2 (PS VITA)
GCC 4.2+ 
PPCGCC 4.3+GCC 4.3+
GCC 4.1 (PS3)
 XEDK (Xbox 360)
PPC/e500v2GCC 4.3+GCC 4.3+  
MIPSGCC 4.3+GCC 4.3+  
- -

Configuring LuaJIT

-

-The standard configuration should work fine for most installations. -Usually there is no need to tweak the settings. The following files -hold all user-configurable settings: -

-
    -
  • src/luaconf.h sets some configuration variables.
  • -
  • Makefile has settings for installing LuaJIT (POSIX -only).
  • -
  • src/Makefile has settings for compiling LuaJIT -under POSIX, MinGW or Cygwin.
  • -
  • src/msvcbuild.bat has settings for compiling LuaJIT with -MSVC or WinSDK.
  • -
-

-Please read the instructions given in these files, before changing -any settings. -

- -

POSIX Systems (Linux, OSX, *BSD etc.)

-

Prerequisites

-

-Depending on your distribution, you may need to install a package for -GCC, the development headers and/or a complete SDK. E.g. on a current -Debian/Ubuntu, install libc6-dev with the package manager. -

-

-Download the current source package of LuaJIT (pick the .tar.gz), -if you haven't already done so. Move it to a directory of your choice, -open a terminal window and change to this directory. Now unpack the archive -and change to the newly created directory: -

-
-tar zxf LuaJIT-2.0.4.tar.gz
-cd LuaJIT-2.0.4
-

Building LuaJIT

-

-The supplied Makefiles try to auto-detect the settings needed for your -operating system and your compiler. They need to be run with GNU Make, -which is probably the default on your system, anyway. Simply run: -

-
-make
-
-

-This always builds a native x86, x64 or PPC binary, depending on the host OS -you're running this command on. Check the section on -cross-compilation for more options. -

-

-By default, modules are only searched under the prefix /usr/local. -You can add an extra prefix to the search paths by appending the -PREFIX option, e.g.: -

-
-make PREFIX=/home/myself/lj2
-
-

-Note for OSX: if the MACOSX_DEPLOYMENT_TARGET environment -variable is not set, then it's forced to 10.4. -

-

Installing LuaJIT

-

-The top-level Makefile installs LuaJIT by default under -/usr/local, i.e. the executable ends up in -/usr/local/bin and so on. You need root privileges -to write to this path. So, assuming sudo is installed on your system, -run the following command and enter your sudo password: -

-
-sudo make install
-
-

-Otherwise specify the directory prefix as an absolute path, e.g.: -

-
-make install PREFIX=/home/myself/lj2
-
-

-Obviously the prefixes given during build and installation need to be the same. -

- -

Windows Systems

-

Prerequisites

-

-Either install one of the open source SDKs -(» MinGW or -» Cygwin), which come with a modified -GCC plus the required development headers. -

-

-Or install Microsoft's Visual C++ (MSVC). The freely downloadable -» Express Edition -works just fine, but only contains an x86 compiler. -

-

-The freely downloadable -» Windows SDK -only comes with command line tools, but this is all you need to build LuaJIT. -It contains x86 and x64 compilers. -

-

-Next, download the source package and unpack it using an archive manager -(e.g. the Windows Explorer) to a directory of your choice. -

-

Building with MSVC

-

-Open a "Visual Studio .NET Command Prompt", cd to the -directory where you've unpacked the sources and run these commands: -

-
-cd src
-msvcbuild
-
-

-Then follow the installation instructions below. -

-

Building with the Windows SDK

-

-Open a "Windows SDK Command Shell" and select the x86 compiler: -

-
-setenv /release /x86
-
-

-Or select the x64 compiler: -

-
-setenv /release /x64
-
-

-Then cd to the directory where you've unpacked the sources -and run these commands: -

-
-cd src
-msvcbuild
-
-

-Then follow the installation instructions below. -

-

Building with MinGW or Cygwin

-

-Open a command prompt window and make sure the MinGW or Cygwin programs -are in your path. Then cd to the directory where -you've unpacked the sources and run this command for MinGW: -

-
-mingw32-make
-
-

-Or this command for Cygwin: -

-
-make
-
-

-Then follow the installation instructions below. -

-

Installing LuaJIT

-

-Copy luajit.exe and lua51.dll (built in the src -directory) to a newly created directory (any location is ok). -Add lua and lua\jit directories below it and copy -all Lua files from the src\jit directory of the distribution -to the latter directory. -

-

-There are no hardcoded -absolute path names — all modules are loaded relative to the -directory where luajit.exe is installed -(see src/luaconf.h). -

- -

Cross-compiling LuaJIT

-

-The GNU Makefile-based build system allows cross-compiling on any host -for any supported target, as long as both architectures have the same -pointer size. If you want to cross-compile to any 32 bit target on an -x64 OS, you need to install the multilib development package (e.g. -libc6-dev-i386 on Debian/Ubuntu) and build a 32 bit host part -(HOST_CC="gcc -m32"). -

-

-You need to specify TARGET_SYS whenever the host OS and the -target OS differ, or you'll get assembler or linker errors. E.g. if -you're compiling on a Windows or OSX host for embedded Linux or Android, -you need to add TARGET_SYS=Linux to the examples below. For a -minimal target OS, you may need to disable the built-in allocator in -src/Makefile and use TARGET_SYS=Other. The examples -below only show some popular targets — please check the comments -in src/Makefile for more details. -

-
-# Cross-compile to a 32 bit binary on a multilib x64 OS
-make CC="gcc -m32"
-
-# Cross-compile on Debian/Ubuntu for Windows (mingw32 package)
-make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows
-
-

-The CROSS prefix allows specifying a standard GNU cross-compile -toolchain (Binutils, GCC and a matching libc). The prefix may vary -depending on the --target the toolchain was built for (note the -CROSS prefix has a trailing "-"). The examples below -use the canonical toolchain triplets for Linux. -

-

-Since there's often no easy way to detect CPU features at runtime, it's -important to compile with the proper CPU or architecture settings. You -can specify these when building the toolchain yourself. Or add --mcpu=... or -march=... to TARGET_CFLAGS. For -ARM it's important to have the correct -mfloat-abi=... setting, -too. Otherwise LuaJIT may not run at the full performance of your target -CPU. -

-
-# ARM soft-float
-make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
-     TARGET_CFLAGS="-mfloat-abi=soft"
-
-# ARM soft-float ABI with VFP (example for Cortex-A8)
-make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
-     TARGET_CFLAGS="-mcpu=cortex-a8 -mfloat-abi=softfp"
-
-# ARM hard-float ABI with VFP (armhf, requires recent toolchain)
-make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabihf-
-
-# PPC
-make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu-
-# PPC/e500v2 (fast interpreter only)
-make HOST_CC="gcc -m32" CROSS=powerpc-e500v2-linux-gnuspe-
-
-# MIPS big-endian
-make HOST_CC="gcc -m32" CROSS=mips-linux-
-# MIPS little-endian
-make HOST_CC="gcc -m32" CROSS=mipsel-linux-
-
-

-You can cross-compile for Android using the » Android NDK. -The environment variables need to match the install locations and the -desired target platform. E.g. Android 4.0 corresponds to ABI level 14. -For details check the folder docs in the NDK directory. -

-

-Only a few common variations for the different CPUs, ABIs and platforms -are listed. Please use your own judgement for which combination you want -to build/deploy or which lowest common denominator you want to pick: -

-
-# Android/ARM, armeabi (ARMv5TE soft-float), Android 2.2+ (Froyo)
-NDK=/opt/android/ndk
-NDKABI=8
-NDKVER=$NDK/toolchains/arm-linux-androideabi-4.6
-NDKP=$NDKVER/prebuilt/linux-x86/bin/arm-linux-androideabi-
-NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
-make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
-
-# Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.0+ (ICS)
-NDK=/opt/android/ndk
-NDKABI=14
-NDKVER=$NDK/toolchains/arm-linux-androideabi-4.6
-NDKP=$NDKVER/prebuilt/linux-x86/bin/arm-linux-androideabi-
-NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
-NDKARCH="-march=armv7-a -mfloat-abi=softfp -Wl,--fix-cortex-a8"
-make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF $NDKARCH"
-
-# Android/MIPS, mips (MIPS32R1 hard-float), Android 4.0+ (ICS)
-NDK=/opt/android/ndk
-NDKABI=14
-NDKVER=$NDK/toolchains/mipsel-linux-android-4.6
-NDKP=$NDKVER/prebuilt/linux-x86/bin/mipsel-linux-android-
-NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-mips"
-make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
-
-# Android/x86, x86 (i686 SSE3), Android 4.0+ (ICS)
-NDK=/opt/android/ndk
-NDKABI=14
-NDKVER=$NDK/toolchains/x86-4.6
-NDKP=$NDKVER/prebuilt/linux-x86/bin/i686-linux-android-
-NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-x86"
-make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
-
-

-You can cross-compile for iOS 3.0+ (iPhone/iPad) using the » iOS SDK. -The environment variables need to match the iOS SDK version: -

-

-Note: the JIT compiler is disabled for iOS, because regular iOS Apps -are not allowed to generate code at runtime. You'll only get the performance -of the LuaJIT interpreter on iOS. This is still faster than plain Lua, but -much slower than the JIT compiler. Please complain to Apple, not me. -Or use Android. :-p -

-
-IXCODE=`xcode-select -print-path`
-ISDK=$IXCODE/Platforms/iPhoneOS.platform/Developer
-ISDKVER=iPhoneOS6.0.sdk
-ISDKP=$ISDK/usr/bin/
-ISDKF="-arch armv7 -isysroot $ISDK/SDKs/$ISDKVER"
-make HOST_CC="gcc -m32 -arch i386" CROSS=$ISDKP TARGET_FLAGS="$ISDKF" \
-     TARGET_SYS=iOS
-
- -

Cross-compiling for consoles

-

-Building LuaJIT for consoles requires both a supported host compiler -(x86 or x64) and a cross-compiler (to PPC or ARM) from the official -console SDK. -

-

-Due to restrictions on consoles, the JIT compiler is disabled and only -the fast interpreter is built. This is still faster than plain Lua, -but much slower than the JIT compiler. The FFI is disabled, too, since -it's not very useful in such an environment. -

-

-The following commands build a static library libluajit.a, -which can be linked against your game, just like the Lua library. -

-

-To cross-compile for PS3 from a Linux host (requires -32 bit GCC, i.e. multilib Linux/x64) or a Windows host (requires -32 bit MinGW), run this command: -

-
-make HOST_CC="gcc -m32" CROSS=ppu-lv2-
-
-

-To cross-compile for PS4 from a Windows host, -open a "Visual Studio .NET Command Prompt" (64 bit host compiler), -cd to the directory where you've unpacked the sources and -run the following commands: -

-
-cd src
-ps4build
-
-

-To cross-compile for PS Vita from a Windows host, -open a "Visual Studio .NET Command Prompt" (32 bit host compiler), -cd to the directory where you've unpacked the sources and -run the following commands: -

-
-cd src
-psvitabuild
-
-

-To cross-compile for Xbox 360 from a Windows host, -open a "Visual Studio .NET Command Prompt" (32 bit host compiler), -cd to the directory where you've unpacked the sources and run -the following commands: -

-
-cd src
-xedkbuild
-
- -

Embedding LuaJIT

-

-LuaJIT is API-compatible with Lua 5.1. If you've already embedded Lua -into your application, you probably don't need to do anything to switch -to LuaJIT, except link with a different library: -

-
    -
  • It's strongly suggested to build LuaJIT separately using the supplied -build system. Please do not attempt to integrate the individual -source files into your build tree. You'll most likely get the internal build -dependencies wrong or mess up the compiler flags. Treat LuaJIT like any -other external library and link your application with either the dynamic -or static library, depending on your needs.
  • -
  • If you want to load C modules compiled for plain Lua -with require(), you need to make sure the public symbols -(e.g. lua_pushnumber) are exported, too: -
    • On POSIX systems you can either link to the shared library -or link the static library into your application. In the latter case -you'll need to export all public symbols from your main executable -(e.g. -Wl,-E on Linux) and add the external dependencies -(e.g. -lm -ldl on Linux).
    • -
    • Since Windows symbols are bound to a specific DLL name, you need to -link to the lua51.dll created by the LuaJIT build (do not rename -the DLL). You may link LuaJIT statically on Windows only if you don't -intend to load Lua/C modules at runtime. -
    -
  • -
  • -If you're building a 64 bit application on OSX which links directly or -indirectly against LuaJIT, you need to link your main executable -with these flags: -
    --pagezero_size 10000 -image_base 100000000
    -
    -Also, it's recommended to rebase all (self-compiled) shared libraries -which are loaded at runtime on OSX/x64 (e.g. C extension modules for Lua). -See: man rebase -
  • -
-

Additional hints for initializing LuaJIT using the C API functions:

-
    -
  • Here's a -» simple example -for embedding Lua or LuaJIT into your application.
  • -
  • Make sure you use luaL_newstate. Avoid using -lua_newstate, since this uses the (slower) default memory -allocator from your system (no support for this on x64).
  • -
  • Make sure you use luaL_openlibs and not the old Lua 5.0 style -of calling luaopen_base etc. directly.
  • -
  • To change or extend the list of standard libraries to load, copy -src/lib_init.c to your project and modify it accordingly. -Make sure the jit library is loaded or the JIT compiler -will not be activated.
  • -
  • The bit.* module for bitwise operations -is already built-in. There's no need to statically link -» Lua BitOp to your application.
  • -
- -

Hints for Distribution Maintainers

-

-The LuaJIT build system has extra provisions for the needs of most -POSIX-based distributions. If you're a package maintainer for -a distribution, please make use of these features and -avoid patching, subverting, autotoolizing or messing up the build system -in unspeakable ways. -

-

-There should be absolutely no need to patch luaconf.h or any -of the Makefiles. And please do not hand-pick files for your packages — -simply use whatever make install creates. There's a reason -for all of the files and directories it creates. -

-

-The build system uses GNU make and auto-detects most settings based on -the host you're building it on. This should work fine for native builds, -even when sandboxed. You may need to pass some of the following flags to -both the make and the make install command lines -for a regular distribution build: -

-
    -
  • PREFIX overrides the installation path and should usually -be set to /usr. Setting this also changes the module paths and -the paths needed to locate the shared library.
  • -
  • DESTDIR is an absolute path which allows you to install -to a shadow tree instead of the root tree of the build system.
  • -
  • MULTILIB sets the architecture-specific library path component -for multilib systems. The default is lib.
  • -
  • Have a look at the top-level Makefile and src/Makefile -for additional variables to tweak. The following variables may be -overridden, but it's not recommended, except for special needs -like cross-builds: -BUILDMODE, CC, HOST_CC, STATIC_CC, DYNAMIC_CC, CFLAGS, HOST_CFLAGS, -TARGET_CFLAGS, LDFLAGS, HOST_LDFLAGS, TARGET_LDFLAGS, TARGET_SHLDFLAGS, -TARGET_FLAGS, LIBS, HOST_LIBS, TARGET_LIBS, CROSS, HOST_SYS, TARGET_SYS -
  • -
-

-The build system has a special target for an amalgamated build, i.e. -make amalg. This compiles the LuaJIT core as one huge C file -and allows GCC to generate faster and shorter code. Alas, this requires -lots of memory during the build. This may be a problem for some users, -that's why it's not enabled by default. But it shouldn't be a problem for -most build farms. It's recommended that binary distributions use this -target for their LuaJIT builds. -

-

-The tl;dr version of the above: -

-
-make amalg PREFIX=/usr && \
-make install PREFIX=/usr DESTDIR=/tmp/buildroot
-
-

-Finally, if you encounter any difficulties, please -contact me first, instead of releasing a broken -package onto unsuspecting users. Because they'll usually gonna complain -to me (the upstream) and not you (the package maintainer), anyway. -

-
-
- - - diff --git a/deps/luajit/doc/luajit.html b/deps/luajit/doc/luajit.html deleted file mode 100644 index 45507c1..0000000 --- a/deps/luajit/doc/luajit.html +++ /dev/null @@ -1,234 +0,0 @@ - - - -LuaJIT - - - - - - - - - - -
-Lua -
- - -
-

-LuaJIT is a Just-In-Time Compiler (JIT) for the -» Lua programming language. -Lua is a powerful, dynamic and light-weight programming language. -It may be embedded or used as a general-purpose, stand-alone language. -

-

-LuaJIT is Copyright © 2005-2015 Mike Pall, released under the -» MIT open source license. -

-

-

- -

Compatibility

- - -
WindowsLinuxBSDOSXPOSIX
- - -
EmbeddedAndroidiOS
- - -
PS3PS4PS VitaXbox 360
- - -
GCCCLANG
LLVM
MSVC
- - -
x86x64ARMPPCe500MIPS
- - -
Lua 5.1
API+ABI
+ JIT+ BitOp+ FFIDrop-in
DLL/.so
- -

Overview

- - - - - - - - - -
3x
-  100x
115 KB
VM
90 KB
JIT
63 KLOC
C
24 KLOC
ASM
11 KLOC
Lua
-

-LuaJIT has been successfully used as a scripting middleware in -games, appliances, network and graphics apps, numerical simulations, -trading platforms and many other specialty applications. It scales from -embedded devices, smartphones, desktops up to server farms. It combines -high flexibility with » high performance -and an unmatched low memory footprint. -

-

-LuaJIT has been in continuous development since 2005. It's widely -considered to be one of the fastest dynamic language -implementations. It has outperformed other dynamic languages on many -cross-language benchmarks since its first release — often by a -substantial margin. -

-

-For LuaJIT 2.0, the whole VM has been rewritten from the ground up -and relentlessly optimized for performance. It combines a high-speed -interpreter, written in assembler, with a state-of-the-art JIT -compiler. -

-

-An innovative trace compiler is integrated with advanced, -SSA-based optimizations and highly tuned code generation backends. -A substantial reduction of the overhead associated with dynamic languages -allows it to break into the performance range traditionally reserved for -offline, static language compilers. -

- -

More ...

-

-Please select a sub-topic in the navigation bar to learn more about LuaJIT. -

-
-
- - - diff --git a/deps/luajit/doc/running.html b/deps/luajit/doc/running.html deleted file mode 100644 index c6e1c29..0000000 --- a/deps/luajit/doc/running.html +++ /dev/null @@ -1,306 +0,0 @@ - - - -Running LuaJIT - - - - - - - - - -
-Lua -
- - -
-

-LuaJIT has only a single stand-alone executable, called luajit on -POSIX systems or luajit.exe on Windows. It can be used to run simple -Lua statements or whole Lua applications from the command line. It has an -interactive mode, too. -

- -

Command Line Options

-

-The luajit stand-alone executable is just a slightly modified -version of the regular lua stand-alone executable. -It supports the same basic options, too. luajit -h -prints a short list of the available options. Please have a look at the -» Lua manual -for details. -

-

-LuaJIT has some additional options: -

- -

-b[options] input output

-

-This option saves or lists bytecode. The following additional options -are accepted: -

-
    -
  • -l — Only list bytecode.
  • -
  • -s — Strip debug info (this is the default).
  • -
  • -g — Keep debug info.
  • -
  • -n name — Set module name (default: auto-detect from input name)
  • -
  • -t type — Set output file type (default: auto-detect from output name).
  • -
  • -a arch — Override architecture for object files (default: native).
  • -
  • -o os — Override OS for object files (default: native).
  • -
  • -e chunk — Use chunk string as input.
  • -
  • - (a single minus sign) — Use stdin as input and/or stdout as output.
  • -
-

-The output file type is auto-detected from the extension of the output -file name: -

-
    -
  • c — C source file, exported bytecode data.
  • -
  • h — C header file, static bytecode data.
  • -
  • obj or o — Object file, exported bytecode data -(OS- and architecture-specific).
  • -
  • raw or any other extension — Raw bytecode file (portable). -
-

-Notes: -

-
    -
  • See also string.dump() -for information on bytecode portability and compatibility.
  • -
  • A file in raw bytecode format is auto-detected and can be loaded like -any Lua source file. E.g. directly from the command line or with -loadfile(), dofile() etc.
  • -
  • To statically embed the bytecode of a module in your application, -generate an object file and just link it with your application.
  • -
  • On most ELF-based systems (e.g. Linux) you need to explicitly export the -global symbols when linking your application, e.g. with: -Wl,-E
  • -
  • require() tries to load embedded bytecode data from exported -symbols (in *.exe or lua51.dll on Windows) and from -shared libraries in package.cpath.
  • -
-

-Typical usage examples: -

-
-luajit -b test.lua test.out                 # Save bytecode to test.out
-luajit -bg test.lua test.out                # Keep debug info
-luajit -be "print('hello world')" test.out  # Save cmdline script
-
-luajit -bl test.lua                         # List to stdout
-luajit -bl test.lua test.txt                # List to test.txt
-luajit -ble "print('hello world')"          # List cmdline script
-
-luajit -b test.lua test.obj                 # Generate object file
-# Link test.obj with your application and load it with require("test")
-
- -

-j cmd[=arg[,arg...]]

-

-This option performs a LuaJIT control command or activates one of the -loadable extension modules. The command is first looked up in the -jit.* library. If no matching function is found, a module -named jit.<cmd> is loaded and the start() -function of the module is called with the specified arguments (if -any). The space between -j and cmd is optional. -

-

-Here are the available LuaJIT control commands: -

-
    -
  • -jon — Turns the JIT compiler on (default).
  • -
  • -joff — Turns the JIT compiler off (only use the interpreter).
  • -
  • -jflush — Flushes the whole cache of compiled code.
  • -
  • -jv — Shows verbose information about the progress of the JIT compiler.
  • -
  • -jdump — Dumps the code and structures used in various compiler stages.
  • -
-

-The -jv and -jdump commands are extension modules -written in Lua. They are mainly used for debugging the JIT compiler -itself. For a description of their options and output format, please -read the comment block at the start of their source. -They can be found in the lib directory of the source -distribution or installed under the jit directory. By default -this is /usr/local/share/luajit-2.0.4/jit on POSIX -systems. -

- -

-O[level]
--O[+]flag   -O-flag
--Oparam=value

-

-This options allows fine-tuned control of the optimizations used by -the JIT compiler. This is mainly intended for debugging LuaJIT itself. -Please note that the JIT compiler is extremely fast (we are talking -about the microsecond to millisecond range). Disabling optimizations -doesn't have any visible impact on its overhead, but usually generates -code that runs slower. -

-

-The first form sets an optimization level — this enables a -specific mix of optimization flags. -O0 turns off all -optimizations and higher numbers enable more optimizations. Omitting -the level (i.e. just -O) sets the default optimization level, -which is -O3 in the current version. -

-

-The second form adds or removes individual optimization flags. -The third form sets a parameter for the VM or the JIT compiler -to a specific value. -

-

-You can either use this option multiple times (like -Ocse --O-dce -Ohotloop=10) or separate several settings with a comma -(like -O+cse,-dce,hotloop=10). The settings are applied from -left to right and later settings override earlier ones. You can freely -mix the three forms, but note that setting an optimization level -overrides all earlier flags. -

-

-Here are the available flags and at what optimization levels they -are enabled: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Flag-O1-O2-O3 
foldConstant Folding, Simplifications and Reassociation
cseCommon-Subexpression Elimination
dceDead-Code Elimination
narrow Narrowing of numbers to integers
loop Loop Optimizations (code hoisting)
fwd  Load Forwarding (L2L) and Store Forwarding (S2L)
dse  Dead-Store Elimination
abc  Array Bounds Check Elimination
sink  Allocation/Store Sinking
fuse  Fusion of operands into instructions
-

-Here are the parameters and their default settings: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDefault 
maxtrace1000Max. number of traces in the cache
maxrecord4000Max. number of recorded IR instructions
maxirconst500Max. number of IR constants of a trace
maxside100Max. number of side traces of a root trace
maxsnap500Max. number of snapshots for a trace
hotloop56Number of iterations to detect a hot loop or hot call
hotexit10Number of taken exits to start a side trace
tryside4Number of attempts to compile a side trace
instunroll4Max. unroll factor for instable loops
loopunroll15Max. unroll factor for loop ops in side traces
callunroll3Max. unroll factor for pseudo-recursive calls
recunroll2Min. unroll factor for true recursion
sizemcode32Size of each machine code area in KBytes (Windows: 64K)
maxmcode512Max. total size of all machine code areas in KBytes
-
-
- - - diff --git a/deps/luajit/doc/status.html b/deps/luajit/doc/status.html deleted file mode 100644 index b4bbec7..0000000 --- a/deps/luajit/doc/status.html +++ /dev/null @@ -1,116 +0,0 @@ - - - -Status - - - - - - - - - -
-Lua -
- - -
-

-LuaJIT 2.0 is the current -stable branch. This branch is in -feature-freeze — new features will only be added to LuaJIT 2.1. -

- -

Current Status

-

-LuaJIT ought to run all Lua 5.1-compatible source code just fine. -It's considered a serious bug if the VM crashes or produces unexpected -results — please report this. -

-

-Known incompatibilities and issues in LuaJIT 2.0: -

-
    -
  • -There are some differences in implementation-defined behavior. -These either have a good reason, are arbitrary design choices -or are due to quirks in the VM. The latter cases may get fixed if a -demonstrable need is shown. -
  • -
  • -The Lua debug API is missing a couple of features (return -hooks for non-Lua functions) and shows slightly different behavior -in LuaJIT (no per-coroutine hooks, no tail call counting). -
  • -
  • -Some checks are missing in the JIT-compiled code for obscure situations -with open upvalues aliasing one of the SSA slots later on (or -vice versa). Bonus points, if you can find a real world test case for -this. -
  • -
  • -Currently some out-of-memory errors from on-trace code are not -handled correctly. The error may fall through an on-trace -pcall or it may be passed on to the function set with -lua_atpanic on x64. This issue will be fixed with the new -garbage collector. -
  • -
-
-
- - - diff --git a/deps/luajit/dynasm/dasm_arm.h b/deps/luajit/dynasm/dasm_arm.h deleted file mode 100644 index 57e0116..0000000 --- a/deps/luajit/dynasm/dasm_arm.h +++ /dev/null @@ -1,456 +0,0 @@ -/* -** DynASM ARM encoding engine. -** Copyright (C) 2005-2015 Mike Pall. All rights reserved. -** Released under the MIT license. See dynasm.lua for full copyright notice. -*/ - -#include -#include -#include -#include - -#define DASM_ARCH "arm" - -#ifndef DASM_EXTERN -#define DASM_EXTERN(a,b,c,d) 0 -#endif - -/* Action definitions. */ -enum { - DASM_STOP, DASM_SECTION, DASM_ESC, DASM_REL_EXT, - /* The following actions need a buffer position. */ - DASM_ALIGN, DASM_REL_LG, DASM_LABEL_LG, - /* The following actions also have an argument. */ - DASM_REL_PC, DASM_LABEL_PC, - DASM_IMM, DASM_IMM12, DASM_IMM16, DASM_IMML8, DASM_IMML12, DASM_IMMV8, - DASM__MAX -}; - -/* Maximum number of section buffer positions for a single dasm_put() call. */ -#define DASM_MAXSECPOS 25 - -/* DynASM encoder status codes. Action list offset or number are or'ed in. */ -#define DASM_S_OK 0x00000000 -#define DASM_S_NOMEM 0x01000000 -#define DASM_S_PHASE 0x02000000 -#define DASM_S_MATCH_SEC 0x03000000 -#define DASM_S_RANGE_I 0x11000000 -#define DASM_S_RANGE_SEC 0x12000000 -#define DASM_S_RANGE_LG 0x13000000 -#define DASM_S_RANGE_PC 0x14000000 -#define DASM_S_RANGE_REL 0x15000000 -#define DASM_S_UNDEF_LG 0x21000000 -#define DASM_S_UNDEF_PC 0x22000000 - -/* Macros to convert positions (8 bit section + 24 bit index). */ -#define DASM_POS2IDX(pos) ((pos)&0x00ffffff) -#define DASM_POS2BIAS(pos) ((pos)&0xff000000) -#define DASM_SEC2POS(sec) ((sec)<<24) -#define DASM_POS2SEC(pos) ((pos)>>24) -#define DASM_POS2PTR(D, pos) (D->sections[DASM_POS2SEC(pos)].rbuf + (pos)) - -/* Action list type. */ -typedef const unsigned int *dasm_ActList; - -/* Per-section structure. */ -typedef struct dasm_Section { - int *rbuf; /* Biased buffer pointer (negative section bias). */ - int *buf; /* True buffer pointer. */ - size_t bsize; /* Buffer size in bytes. */ - int pos; /* Biased buffer position. */ - int epos; /* End of biased buffer position - max single put. */ - int ofs; /* Byte offset into section. */ -} dasm_Section; - -/* Core structure holding the DynASM encoding state. */ -struct dasm_State { - size_t psize; /* Allocated size of this structure. */ - dasm_ActList actionlist; /* Current actionlist pointer. */ - int *lglabels; /* Local/global chain/pos ptrs. */ - size_t lgsize; - int *pclabels; /* PC label chains/pos ptrs. */ - size_t pcsize; - void **globals; /* Array of globals (bias -10). */ - dasm_Section *section; /* Pointer to active section. */ - size_t codesize; /* Total size of all code sections. */ - int maxsection; /* 0 <= sectionidx < maxsection. */ - int status; /* Status code. */ - dasm_Section sections[1]; /* All sections. Alloc-extended. */ -}; - -/* The size of the core structure depends on the max. number of sections. */ -#define DASM_PSZ(ms) (sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section)) - - -/* Initialize DynASM state. */ -void dasm_init(Dst_DECL, int maxsection) -{ - dasm_State *D; - size_t psz = 0; - int i; - Dst_REF = NULL; - DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection)); - D = Dst_REF; - D->psize = psz; - D->lglabels = NULL; - D->lgsize = 0; - D->pclabels = NULL; - D->pcsize = 0; - D->globals = NULL; - D->maxsection = maxsection; - for (i = 0; i < maxsection; i++) { - D->sections[i].buf = NULL; /* Need this for pass3. */ - D->sections[i].rbuf = D->sections[i].buf - DASM_SEC2POS(i); - D->sections[i].bsize = 0; - D->sections[i].epos = 0; /* Wrong, but is recalculated after resize. */ - } -} - -/* Free DynASM state. */ -void dasm_free(Dst_DECL) -{ - dasm_State *D = Dst_REF; - int i; - for (i = 0; i < D->maxsection; i++) - if (D->sections[i].buf) - DASM_M_FREE(Dst, D->sections[i].buf, D->sections[i].bsize); - if (D->pclabels) DASM_M_FREE(Dst, D->pclabels, D->pcsize); - if (D->lglabels) DASM_M_FREE(Dst, D->lglabels, D->lgsize); - DASM_M_FREE(Dst, D, D->psize); -} - -/* Setup global label array. Must be called before dasm_setup(). */ -void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl) -{ - dasm_State *D = Dst_REF; - D->globals = gl - 10; /* Negative bias to compensate for locals. */ - DASM_M_GROW(Dst, int, D->lglabels, D->lgsize, (10+maxgl)*sizeof(int)); -} - -/* Grow PC label array. Can be called after dasm_setup(), too. */ -void dasm_growpc(Dst_DECL, unsigned int maxpc) -{ - dasm_State *D = Dst_REF; - size_t osz = D->pcsize; - DASM_M_GROW(Dst, int, D->pclabels, D->pcsize, maxpc*sizeof(int)); - memset((void *)(((unsigned char *)D->pclabels)+osz), 0, D->pcsize-osz); -} - -/* Setup encoder. */ -void dasm_setup(Dst_DECL, const void *actionlist) -{ - dasm_State *D = Dst_REF; - int i; - D->actionlist = (dasm_ActList)actionlist; - D->status = DASM_S_OK; - D->section = &D->sections[0]; - memset((void *)D->lglabels, 0, D->lgsize); - if (D->pclabels) memset((void *)D->pclabels, 0, D->pcsize); - for (i = 0; i < D->maxsection; i++) { - D->sections[i].pos = DASM_SEC2POS(i); - D->sections[i].ofs = 0; - } -} - - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) { \ - D->status = DASM_S_##st|(p-D->actionlist-1); return; } } while (0) -#define CKPL(kind, st) \ - do { if ((size_t)((char *)pl-(char *)D->kind##labels) >= D->kind##size) { \ - D->status = DASM_S_RANGE_##st|(p-D->actionlist-1); return; } } while (0) -#else -#define CK(x, st) ((void)0) -#define CKPL(kind, st) ((void)0) -#endif - -static int dasm_imm12(unsigned int n) -{ - int i; - for (i = 0; i < 16; i++, n = (n << 2) | (n >> 30)) - if (n <= 255) return (int)(n + (i << 8)); - return -1; -} - -/* Pass 1: Store actions and args, link branches/labels, estimate offsets. */ -void dasm_put(Dst_DECL, int start, ...) -{ - va_list ap; - dasm_State *D = Dst_REF; - dasm_ActList p = D->actionlist + start; - dasm_Section *sec = D->section; - int pos = sec->pos, ofs = sec->ofs; - int *b; - - if (pos >= sec->epos) { - DASM_M_GROW(Dst, int, sec->buf, sec->bsize, - sec->bsize + 2*DASM_MAXSECPOS*sizeof(int)); - sec->rbuf = sec->buf - DASM_POS2BIAS(pos); - sec->epos = (int)sec->bsize/sizeof(int) - DASM_MAXSECPOS+DASM_POS2BIAS(pos); - } - - b = sec->rbuf; - b[pos++] = start; - - va_start(ap, start); - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16); - if (action >= DASM__MAX) { - ofs += 4; - } else { - int *pl, n = action >= DASM_REL_PC ? va_arg(ap, int) : 0; - switch (action) { - case DASM_STOP: goto stop; - case DASM_SECTION: - n = (ins & 255); CK(n < D->maxsection, RANGE_SEC); - D->section = &D->sections[n]; goto stop; - case DASM_ESC: p++; ofs += 4; break; - case DASM_REL_EXT: break; - case DASM_ALIGN: ofs += (ins & 255); b[pos++] = ofs; break; - case DASM_REL_LG: - n = (ins & 2047) - 10; pl = D->lglabels + n; - /* Bkwd rel or global. */ - if (n >= 0) { CK(n>=10||*pl<0, RANGE_LG); CKPL(lg, LG); goto putrel; } - pl += 10; n = *pl; - if (n < 0) n = 0; /* Start new chain for fwd rel if label exists. */ - goto linkrel; - case DASM_REL_PC: - pl = D->pclabels + n; CKPL(pc, PC); - putrel: - n = *pl; - if (n < 0) { /* Label exists. Get label pos and store it. */ - b[pos] = -n; - } else { - linkrel: - b[pos] = n; /* Else link to rel chain, anchored at label. */ - *pl = pos; - } - pos++; - break; - case DASM_LABEL_LG: - pl = D->lglabels + (ins & 2047) - 10; CKPL(lg, LG); goto putlabel; - case DASM_LABEL_PC: - pl = D->pclabels + n; CKPL(pc, PC); - putlabel: - n = *pl; /* n > 0: Collapse rel chain and replace with label pos. */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = pos; - } - *pl = -pos; /* Label exists now. */ - b[pos++] = ofs; /* Store pass1 offset estimate. */ - break; - case DASM_IMM: - case DASM_IMM16: -#ifdef DASM_CHECKS - CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I); - if ((ins & 0x8000)) - CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I); - else - CK((n>>((ins>>5)&31)) == 0, RANGE_I); -#endif - b[pos++] = n; - break; - case DASM_IMMV8: - CK((n & 3) == 0, RANGE_I); - n >>= 2; - case DASM_IMML8: - case DASM_IMML12: - CK(n >= 0 ? ((n>>((ins>>5)&31)) == 0) : - (((-n)>>((ins>>5)&31)) == 0), RANGE_I); - b[pos++] = n; - break; - case DASM_IMM12: - CK(dasm_imm12((unsigned int)n) != -1, RANGE_I); - b[pos++] = n; - break; - } - } - } -stop: - va_end(ap); - sec->pos = pos; - sec->ofs = ofs; -} -#undef CK - -/* Pass 2: Link sections, shrink aligns, fix label offsets. */ -int dasm_link(Dst_DECL, size_t *szp) -{ - dasm_State *D = Dst_REF; - int secnum; - int ofs = 0; - -#ifdef DASM_CHECKS - *szp = 0; - if (D->status != DASM_S_OK) return D->status; - { - int pc; - for (pc = 0; pc*sizeof(int) < D->pcsize; pc++) - if (D->pclabels[pc] > 0) return DASM_S_UNDEF_PC|pc; - } -#endif - - { /* Handle globals not defined in this translation unit. */ - int idx; - for (idx = 20; idx*sizeof(int) < D->lgsize; idx++) { - int n = D->lglabels[idx]; - /* Undefined label: Collapse rel chain and replace with marker (< 0). */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = -idx; } - } - } - - /* Combine all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->rbuf; - int pos = DASM_SEC2POS(secnum); - int lastpos = sec->pos; - - while (pos != lastpos) { - dasm_ActList p = D->actionlist + b[pos++]; - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16); - switch (action) { - case DASM_STOP: case DASM_SECTION: goto stop; - case DASM_ESC: p++; break; - case DASM_REL_EXT: break; - case DASM_ALIGN: ofs -= (b[pos++] + ofs) & (ins & 255); break; - case DASM_REL_LG: case DASM_REL_PC: pos++; break; - case DASM_LABEL_LG: case DASM_LABEL_PC: b[pos++] += ofs; break; - case DASM_IMM: case DASM_IMM12: case DASM_IMM16: - case DASM_IMML8: case DASM_IMML12: case DASM_IMMV8: pos++; break; - } - } - stop: (void)0; - } - ofs += sec->ofs; /* Next section starts right after current section. */ - } - - D->codesize = ofs; /* Total size of all code sections */ - *szp = ofs; - return DASM_S_OK; -} - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) return DASM_S_##st|(p-D->actionlist-1); } while (0) -#else -#define CK(x, st) ((void)0) -#endif - -/* Pass 3: Encode sections. */ -int dasm_encode(Dst_DECL, void *buffer) -{ - dasm_State *D = Dst_REF; - char *base = (char *)buffer; - unsigned int *cp = (unsigned int *)buffer; - int secnum; - - /* Encode all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->buf; - int *endb = sec->rbuf + sec->pos; - - while (b != endb) { - dasm_ActList p = D->actionlist + *b++; - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16); - int n = (action >= DASM_ALIGN && action < DASM__MAX) ? *b++ : 0; - switch (action) { - case DASM_STOP: case DASM_SECTION: goto stop; - case DASM_ESC: *cp++ = *p++; break; - case DASM_REL_EXT: - n = DASM_EXTERN(Dst, (unsigned char *)cp, (ins&2047), !(ins&2048)); - goto patchrel; - case DASM_ALIGN: - ins &= 255; while ((((char *)cp - base) & ins)) *cp++ = 0xe1a00000; - break; - case DASM_REL_LG: - CK(n >= 0, UNDEF_LG); - case DASM_REL_PC: - CK(n >= 0, UNDEF_PC); - n = *DASM_POS2PTR(D, n) - (int)((char *)cp - base) - 4; - patchrel: - if ((ins & 0x800) == 0) { - CK((n & 3) == 0 && ((n+0x02000000) >> 26) == 0, RANGE_REL); - cp[-1] |= ((n >> 2) & 0x00ffffff); - } else if ((ins & 0x1000)) { - CK((n & 3) == 0 && -256 <= n && n <= 256, RANGE_REL); - goto patchimml8; - } else if ((ins & 0x2000) == 0) { - CK((n & 3) == 0 && -4096 <= n && n <= 4096, RANGE_REL); - goto patchimml; - } else { - CK((n & 3) == 0 && -1020 <= n && n <= 1020, RANGE_REL); - n >>= 2; - goto patchimml; - } - break; - case DASM_LABEL_LG: - ins &= 2047; if (ins >= 20) D->globals[ins-10] = (void *)(base + n); - break; - case DASM_LABEL_PC: break; - case DASM_IMM: - cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31); - break; - case DASM_IMM12: - cp[-1] |= dasm_imm12((unsigned int)n); - break; - case DASM_IMM16: - cp[-1] |= ((n & 0xf000) << 4) | (n & 0x0fff); - break; - case DASM_IMML8: patchimml8: - cp[-1] |= n >= 0 ? (0x00800000 | (n & 0x0f) | ((n & 0xf0) << 4)) : - ((-n & 0x0f) | ((-n & 0xf0) << 4)); - break; - case DASM_IMML12: case DASM_IMMV8: patchimml: - cp[-1] |= n >= 0 ? (0x00800000 | n) : (-n); - break; - default: *cp++ = ins; break; - } - } - stop: (void)0; - } - } - - if (base + D->codesize != (char *)cp) /* Check for phase errors. */ - return DASM_S_PHASE; - return DASM_S_OK; -} -#undef CK - -/* Get PC label offset. */ -int dasm_getpclabel(Dst_DECL, unsigned int pc) -{ - dasm_State *D = Dst_REF; - if (pc*sizeof(int) < D->pcsize) { - int pos = D->pclabels[pc]; - if (pos < 0) return *DASM_POS2PTR(D, -pos); - if (pos > 0) return -1; /* Undefined. */ - } - return -2; /* Unused or out of range. */ -} - -#ifdef DASM_CHECKS -/* Optional sanity checker to call between isolated encoding steps. */ -int dasm_checkstep(Dst_DECL, int secmatch) -{ - dasm_State *D = Dst_REF; - if (D->status == DASM_S_OK) { - int i; - for (i = 1; i <= 9; i++) { - if (D->lglabels[i] > 0) { D->status = DASM_S_UNDEF_LG|i; break; } - D->lglabels[i] = 0; - } - } - if (D->status == DASM_S_OK && secmatch >= 0 && - D->section != &D->sections[secmatch]) - D->status = DASM_S_MATCH_SEC|(D->section-D->sections); - return D->status; -} -#endif - diff --git a/deps/luajit/dynasm/dasm_arm.lua b/deps/luajit/dynasm/dasm_arm.lua deleted file mode 100644 index 90a259c..0000000 --- a/deps/luajit/dynasm/dasm_arm.lua +++ /dev/null @@ -1,1125 +0,0 @@ ------------------------------------------------------------------------------- --- DynASM ARM module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- See dynasm.lua for full copyright notice. ------------------------------------------------------------------------------- - --- Module information: -local _info = { - arch = "arm", - description = "DynASM ARM module", - version = "1.3.0", - vernum = 10300, - release = "2011-05-05", - author = "Mike Pall", - license = "MIT", -} - --- Exported glue functions for the arch-specific module. -local _M = { _info = _info } - --- Cache library functions. -local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs -local assert, setmetatable, rawget = assert, setmetatable, rawget -local _s = string -local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char -local match, gmatch, gsub = _s.match, _s.gmatch, _s.gsub -local concat, sort, insert = table.concat, table.sort, table.insert -local bit = bit or require("bit") -local band, shl, shr, sar = bit.band, bit.lshift, bit.rshift, bit.arshift -local ror, tohex = bit.ror, bit.tohex - --- Inherited tables and callbacks. -local g_opt, g_arch -local wline, werror, wfatal, wwarn - --- Action name list. --- CHECK: Keep this in sync with the C code! -local action_names = { - "STOP", "SECTION", "ESC", "REL_EXT", - "ALIGN", "REL_LG", "LABEL_LG", - "REL_PC", "LABEL_PC", "IMM", "IMM12", "IMM16", "IMML8", "IMML12", "IMMV8", -} - --- Maximum number of section buffer positions for dasm_put(). --- CHECK: Keep this in sync with the C code! -local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines. - --- Action name -> action number. -local map_action = {} -for n,name in ipairs(action_names) do - map_action[name] = n-1 -end - --- Action list buffer. -local actlist = {} - --- Argument list for next dasm_put(). Start with offset 0 into action list. -local actargs = { 0 } - --- Current number of section buffer positions for dasm_put(). -local secpos = 1 - ------------------------------------------------------------------------------- - --- Dump action names and numbers. -local function dumpactions(out) - out:write("DynASM encoding engine action codes:\n") - for n,name in ipairs(action_names) do - local num = map_action[name] - out:write(format(" %-10s %02X %d\n", name, num, num)) - end - out:write("\n") -end - --- Write action list buffer as a huge static C array. -local function writeactions(out, name) - local nn = #actlist - if nn == 0 then nn = 1; actlist[0] = map_action.STOP end - out:write("static const unsigned int ", name, "[", nn, "] = {\n") - for i = 1,nn-1 do - assert(out:write("0x", tohex(actlist[i]), ",\n")) - end - assert(out:write("0x", tohex(actlist[nn]), "\n};\n\n")) -end - ------------------------------------------------------------------------------- - --- Add word to action list. -local function wputxw(n) - assert(n >= 0 and n <= 0xffffffff and n % 1 == 0, "word out of range") - actlist[#actlist+1] = n -end - --- Add action to list with optional arg. Advance buffer pos, too. -local function waction(action, val, a, num) - local w = assert(map_action[action], "bad action name `"..action.."'") - wputxw(w * 0x10000 + (val or 0)) - if a then actargs[#actargs+1] = a end - if a or num then secpos = secpos + (num or 1) end -end - --- Flush action list (intervening C code or buffer pos overflow). -local function wflush(term) - if #actlist == actargs[1] then return end -- Nothing to flush. - if not term then waction("STOP") end -- Terminate action list. - wline(format("dasm_put(Dst, %s);", concat(actargs, ", ")), true) - actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put(). - secpos = 1 -- The actionlist offset occupies a buffer position, too. -end - --- Put escaped word. -local function wputw(n) - if n <= 0x000fffff then waction("ESC") end - wputxw(n) -end - --- Reserve position for word. -local function wpos() - local pos = #actlist+1 - actlist[pos] = "" - return pos -end - --- Store word to reserved position. -local function wputpos(pos, n) - assert(n >= 0 and n <= 0xffffffff and n % 1 == 0, "word out of range") - if n <= 0x000fffff then - insert(actlist, pos+1, n) - n = map_action.ESC * 0x10000 - end - actlist[pos] = n -end - ------------------------------------------------------------------------------- - --- Global label name -> global label number. With auto assignment on 1st use. -local next_global = 20 -local map_global = setmetatable({}, { __index = function(t, name) - if not match(name, "^[%a_][%w_]*$") then werror("bad global label") end - local n = next_global - if n > 2047 then werror("too many global labels") end - next_global = n + 1 - t[name] = n - return n -end}) - --- Dump global labels. -local function dumpglobals(out, lvl) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("Global labels:\n") - for i=20,next_global-1 do - out:write(format(" %s\n", t[i])) - end - out:write("\n") -end - --- Write global label enum. -local function writeglobals(out, prefix) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("enum {\n") - for i=20,next_global-1 do - out:write(" ", prefix, t[i], ",\n") - end - out:write(" ", prefix, "_MAX\n};\n") -end - --- Write global label names. -local function writeglobalnames(out, name) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("static const char *const ", name, "[] = {\n") - for i=20,next_global-1 do - out:write(" \"", t[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Extern label name -> extern label number. With auto assignment on 1st use. -local next_extern = 0 -local map_extern_ = {} -local map_extern = setmetatable({}, { __index = function(t, name) - -- No restrictions on the name for now. - local n = next_extern - if n > 2047 then werror("too many extern labels") end - next_extern = n + 1 - t[name] = n - map_extern_[n] = name - return n -end}) - --- Dump extern labels. -local function dumpexterns(out, lvl) - out:write("Extern labels:\n") - for i=0,next_extern-1 do - out:write(format(" %s\n", map_extern_[i])) - end - out:write("\n") -end - --- Write extern label names. -local function writeexternnames(out, name) - out:write("static const char *const ", name, "[] = {\n") - for i=0,next_extern-1 do - out:write(" \"", map_extern_[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Arch-specific maps. - --- Ext. register name -> int. name. -local map_archdef = { sp = "r13", lr = "r14", pc = "r15", } - --- Int. register name -> ext. name. -local map_reg_rev = { r13 = "sp", r14 = "lr", r15 = "pc", } - -local map_type = {} -- Type name -> { ctype, reg } -local ctypenum = 0 -- Type number (for Dt... macros). - --- Reverse defines for registers. -function _M.revdef(s) - return map_reg_rev[s] or s -end - -local map_shift = { lsl = 0, lsr = 1, asr = 2, ror = 3, } - -local map_cond = { - eq = 0, ne = 1, cs = 2, cc = 3, mi = 4, pl = 5, vs = 6, vc = 7, - hi = 8, ls = 9, ge = 10, lt = 11, gt = 12, le = 13, al = 14, - hs = 2, lo = 3, -} - ------------------------------------------------------------------------------- - --- Template strings for ARM instructions. -local map_op = { - -- Basic data processing instructions. - and_3 = "e0000000DNPs", - eor_3 = "e0200000DNPs", - sub_3 = "e0400000DNPs", - rsb_3 = "e0600000DNPs", - add_3 = "e0800000DNPs", - adc_3 = "e0a00000DNPs", - sbc_3 = "e0c00000DNPs", - rsc_3 = "e0e00000DNPs", - tst_2 = "e1100000NP", - teq_2 = "e1300000NP", - cmp_2 = "e1500000NP", - cmn_2 = "e1700000NP", - orr_3 = "e1800000DNPs", - mov_2 = "e1a00000DPs", - bic_3 = "e1c00000DNPs", - mvn_2 = "e1e00000DPs", - - and_4 = "e0000000DNMps", - eor_4 = "e0200000DNMps", - sub_4 = "e0400000DNMps", - rsb_4 = "e0600000DNMps", - add_4 = "e0800000DNMps", - adc_4 = "e0a00000DNMps", - sbc_4 = "e0c00000DNMps", - rsc_4 = "e0e00000DNMps", - tst_3 = "e1100000NMp", - teq_3 = "e1300000NMp", - cmp_3 = "e1500000NMp", - cmn_3 = "e1700000NMp", - orr_4 = "e1800000DNMps", - mov_3 = "e1a00000DMps", - bic_4 = "e1c00000DNMps", - mvn_3 = "e1e00000DMps", - - lsl_3 = "e1a00000DMws", - lsr_3 = "e1a00020DMws", - asr_3 = "e1a00040DMws", - ror_3 = "e1a00060DMws", - rrx_2 = "e1a00060DMs", - - -- Multiply and multiply-accumulate. - mul_3 = "e0000090NMSs", - mla_4 = "e0200090NMSDs", - umaal_4 = "e0400090DNMSs", -- v6 - mls_4 = "e0600090DNMSs", -- v6T2 - umull_4 = "e0800090DNMSs", - umlal_4 = "e0a00090DNMSs", - smull_4 = "e0c00090DNMSs", - smlal_4 = "e0e00090DNMSs", - - -- Halfword multiply and multiply-accumulate. - smlabb_4 = "e1000080NMSD", -- v5TE - smlatb_4 = "e10000a0NMSD", -- v5TE - smlabt_4 = "e10000c0NMSD", -- v5TE - smlatt_4 = "e10000e0NMSD", -- v5TE - smlawb_4 = "e1200080NMSD", -- v5TE - smulwb_3 = "e12000a0NMS", -- v5TE - smlawt_4 = "e12000c0NMSD", -- v5TE - smulwt_3 = "e12000e0NMS", -- v5TE - smlalbb_4 = "e1400080NMSD", -- v5TE - smlaltb_4 = "e14000a0NMSD", -- v5TE - smlalbt_4 = "e14000c0NMSD", -- v5TE - smlaltt_4 = "e14000e0NMSD", -- v5TE - smulbb_3 = "e1600080NMS", -- v5TE - smultb_3 = "e16000a0NMS", -- v5TE - smulbt_3 = "e16000c0NMS", -- v5TE - smultt_3 = "e16000e0NMS", -- v5TE - - -- Miscellaneous data processing instructions. - clz_2 = "e16f0f10DM", -- v5T - rev_2 = "e6bf0f30DM", -- v6 - rev16_2 = "e6bf0fb0DM", -- v6 - revsh_2 = "e6ff0fb0DM", -- v6 - sel_3 = "e6800fb0DNM", -- v6 - usad8_3 = "e780f010NMS", -- v6 - usada8_4 = "e7800010NMSD", -- v6 - rbit_2 = "e6ff0f30DM", -- v6T2 - movw_2 = "e3000000DW", -- v6T2 - movt_2 = "e3400000DW", -- v6T2 - -- Note: the X encodes width-1, not width. - sbfx_4 = "e7a00050DMvX", -- v6T2 - ubfx_4 = "e7e00050DMvX", -- v6T2 - -- Note: the X encodes the msb field, not the width. - bfc_3 = "e7c0001fDvX", -- v6T2 - bfi_4 = "e7c00010DMvX", -- v6T2 - - -- Packing and unpacking instructions. - pkhbt_3 = "e6800010DNM", pkhbt_4 = "e6800010DNMv", -- v6 - pkhtb_3 = "e6800050DNM", pkhtb_4 = "e6800050DNMv", -- v6 - sxtab_3 = "e6a00070DNM", sxtab_4 = "e6a00070DNMv", -- v6 - sxtab16_3 = "e6800070DNM", sxtab16_4 = "e6800070DNMv", -- v6 - sxtah_3 = "e6b00070DNM", sxtah_4 = "e6b00070DNMv", -- v6 - sxtb_2 = "e6af0070DM", sxtb_3 = "e6af0070DMv", -- v6 - sxtb16_2 = "e68f0070DM", sxtb16_3 = "e68f0070DMv", -- v6 - sxth_2 = "e6bf0070DM", sxth_3 = "e6bf0070DMv", -- v6 - uxtab_3 = "e6e00070DNM", uxtab_4 = "e6e00070DNMv", -- v6 - uxtab16_3 = "e6c00070DNM", uxtab16_4 = "e6c00070DNMv", -- v6 - uxtah_3 = "e6f00070DNM", uxtah_4 = "e6f00070DNMv", -- v6 - uxtb_2 = "e6ef0070DM", uxtb_3 = "e6ef0070DMv", -- v6 - uxtb16_2 = "e6cf0070DM", uxtb16_3 = "e6cf0070DMv", -- v6 - uxth_2 = "e6ff0070DM", uxth_3 = "e6ff0070DMv", -- v6 - - -- Saturating instructions. - qadd_3 = "e1000050DMN", -- v5TE - qsub_3 = "e1200050DMN", -- v5TE - qdadd_3 = "e1400050DMN", -- v5TE - qdsub_3 = "e1600050DMN", -- v5TE - -- Note: the X for ssat* encodes sat_imm-1, not sat_imm. - ssat_3 = "e6a00010DXM", ssat_4 = "e6a00010DXMp", -- v6 - usat_3 = "e6e00010DXM", usat_4 = "e6e00010DXMp", -- v6 - ssat16_3 = "e6a00f30DXM", -- v6 - usat16_3 = "e6e00f30DXM", -- v6 - - -- Parallel addition and subtraction. - sadd16_3 = "e6100f10DNM", -- v6 - sasx_3 = "e6100f30DNM", -- v6 - ssax_3 = "e6100f50DNM", -- v6 - ssub16_3 = "e6100f70DNM", -- v6 - sadd8_3 = "e6100f90DNM", -- v6 - ssub8_3 = "e6100ff0DNM", -- v6 - qadd16_3 = "e6200f10DNM", -- v6 - qasx_3 = "e6200f30DNM", -- v6 - qsax_3 = "e6200f50DNM", -- v6 - qsub16_3 = "e6200f70DNM", -- v6 - qadd8_3 = "e6200f90DNM", -- v6 - qsub8_3 = "e6200ff0DNM", -- v6 - shadd16_3 = "e6300f10DNM", -- v6 - shasx_3 = "e6300f30DNM", -- v6 - shsax_3 = "e6300f50DNM", -- v6 - shsub16_3 = "e6300f70DNM", -- v6 - shadd8_3 = "e6300f90DNM", -- v6 - shsub8_3 = "e6300ff0DNM", -- v6 - uadd16_3 = "e6500f10DNM", -- v6 - uasx_3 = "e6500f30DNM", -- v6 - usax_3 = "e6500f50DNM", -- v6 - usub16_3 = "e6500f70DNM", -- v6 - uadd8_3 = "e6500f90DNM", -- v6 - usub8_3 = "e6500ff0DNM", -- v6 - uqadd16_3 = "e6600f10DNM", -- v6 - uqasx_3 = "e6600f30DNM", -- v6 - uqsax_3 = "e6600f50DNM", -- v6 - uqsub16_3 = "e6600f70DNM", -- v6 - uqadd8_3 = "e6600f90DNM", -- v6 - uqsub8_3 = "e6600ff0DNM", -- v6 - uhadd16_3 = "e6700f10DNM", -- v6 - uhasx_3 = "e6700f30DNM", -- v6 - uhsax_3 = "e6700f50DNM", -- v6 - uhsub16_3 = "e6700f70DNM", -- v6 - uhadd8_3 = "e6700f90DNM", -- v6 - uhsub8_3 = "e6700ff0DNM", -- v6 - - -- Load/store instructions. - str_2 = "e4000000DL", str_3 = "e4000000DL", str_4 = "e4000000DL", - strb_2 = "e4400000DL", strb_3 = "e4400000DL", strb_4 = "e4400000DL", - ldr_2 = "e4100000DL", ldr_3 = "e4100000DL", ldr_4 = "e4100000DL", - ldrb_2 = "e4500000DL", ldrb_3 = "e4500000DL", ldrb_4 = "e4500000DL", - strh_2 = "e00000b0DL", strh_3 = "e00000b0DL", - ldrh_2 = "e01000b0DL", ldrh_3 = "e01000b0DL", - ldrd_2 = "e00000d0DL", ldrd_3 = "e00000d0DL", -- v5TE - ldrsb_2 = "e01000d0DL", ldrsb_3 = "e01000d0DL", - strd_2 = "e00000f0DL", strd_3 = "e00000f0DL", -- v5TE - ldrsh_2 = "e01000f0DL", ldrsh_3 = "e01000f0DL", - - ldm_2 = "e8900000oR", ldmia_2 = "e8900000oR", ldmfd_2 = "e8900000oR", - ldmda_2 = "e8100000oR", ldmfa_2 = "e8100000oR", - ldmdb_2 = "e9100000oR", ldmea_2 = "e9100000oR", - ldmib_2 = "e9900000oR", ldmed_2 = "e9900000oR", - stm_2 = "e8800000oR", stmia_2 = "e8800000oR", stmfd_2 = "e8800000oR", - stmda_2 = "e8000000oR", stmfa_2 = "e8000000oR", - stmdb_2 = "e9000000oR", stmea_2 = "e9000000oR", - stmib_2 = "e9800000oR", stmed_2 = "e9800000oR", - pop_1 = "e8bd0000R", push_1 = "e92d0000R", - - -- Branch instructions. - b_1 = "ea000000B", - bl_1 = "eb000000B", - blx_1 = "e12fff30C", - bx_1 = "e12fff10M", - - -- Miscellaneous instructions. - nop_0 = "e1a00000", - mrs_1 = "e10f0000D", - bkpt_1 = "e1200070K", -- v5T - svc_1 = "ef000000T", swi_1 = "ef000000T", - ud_0 = "e7f001f0", - - -- VFP instructions. - ["vadd.f32_3"] = "ee300a00dnm", - ["vadd.f64_3"] = "ee300b00Gdnm", - ["vsub.f32_3"] = "ee300a40dnm", - ["vsub.f64_3"] = "ee300b40Gdnm", - ["vmul.f32_3"] = "ee200a00dnm", - ["vmul.f64_3"] = "ee200b00Gdnm", - ["vnmul.f32_3"] = "ee200a40dnm", - ["vnmul.f64_3"] = "ee200b40Gdnm", - ["vmla.f32_3"] = "ee000a00dnm", - ["vmla.f64_3"] = "ee000b00Gdnm", - ["vmls.f32_3"] = "ee000a40dnm", - ["vmls.f64_3"] = "ee000b40Gdnm", - ["vnmla.f32_3"] = "ee100a40dnm", - ["vnmla.f64_3"] = "ee100b40Gdnm", - ["vnmls.f32_3"] = "ee100a00dnm", - ["vnmls.f64_3"] = "ee100b00Gdnm", - ["vdiv.f32_3"] = "ee800a00dnm", - ["vdiv.f64_3"] = "ee800b00Gdnm", - - ["vabs.f32_2"] = "eeb00ac0dm", - ["vabs.f64_2"] = "eeb00bc0Gdm", - ["vneg.f32_2"] = "eeb10a40dm", - ["vneg.f64_2"] = "eeb10b40Gdm", - ["vsqrt.f32_2"] = "eeb10ac0dm", - ["vsqrt.f64_2"] = "eeb10bc0Gdm", - ["vcmp.f32_2"] = "eeb40a40dm", - ["vcmp.f64_2"] = "eeb40b40Gdm", - ["vcmpe.f32_2"] = "eeb40ac0dm", - ["vcmpe.f64_2"] = "eeb40bc0Gdm", - ["vcmpz.f32_1"] = "eeb50a40d", - ["vcmpz.f64_1"] = "eeb50b40Gd", - ["vcmpze.f32_1"] = "eeb50ac0d", - ["vcmpze.f64_1"] = "eeb50bc0Gd", - - vldr_2 = "ed100a00dl|ed100b00Gdl", - vstr_2 = "ed000a00dl|ed000b00Gdl", - vldm_2 = "ec900a00or", - vldmia_2 = "ec900a00or", - vldmdb_2 = "ed100a00or", - vpop_1 = "ecbd0a00r", - vstm_2 = "ec800a00or", - vstmia_2 = "ec800a00or", - vstmdb_2 = "ed000a00or", - vpush_1 = "ed2d0a00r", - - ["vmov.f32_2"] = "eeb00a40dm|eeb00a00dY", -- #imm is VFPv3 only - ["vmov.f64_2"] = "eeb00b40Gdm|eeb00b00GdY", -- #imm is VFPv3 only - vmov_2 = "ee100a10Dn|ee000a10nD", - vmov_3 = "ec500a10DNm|ec400a10mDN|ec500b10GDNm|ec400b10GmDN", - - vmrs_0 = "eef1fa10", - vmrs_1 = "eef10a10D", - vmsr_1 = "eee10a10D", - - ["vcvt.s32.f32_2"] = "eebd0ac0dm", - ["vcvt.s32.f64_2"] = "eebd0bc0dGm", - ["vcvt.u32.f32_2"] = "eebc0ac0dm", - ["vcvt.u32.f64_2"] = "eebc0bc0dGm", - ["vcvtr.s32.f32_2"] = "eebd0a40dm", - ["vcvtr.s32.f64_2"] = "eebd0b40dGm", - ["vcvtr.u32.f32_2"] = "eebc0a40dm", - ["vcvtr.u32.f64_2"] = "eebc0b40dGm", - ["vcvt.f32.s32_2"] = "eeb80ac0dm", - ["vcvt.f64.s32_2"] = "eeb80bc0GdFm", - ["vcvt.f32.u32_2"] = "eeb80a40dm", - ["vcvt.f64.u32_2"] = "eeb80b40GdFm", - ["vcvt.f32.f64_2"] = "eeb70bc0dGm", - ["vcvt.f64.f32_2"] = "eeb70ac0GdFm", - - -- VFPv4 only: - ["vfma.f32_3"] = "eea00a00dnm", - ["vfma.f64_3"] = "eea00b00Gdnm", - ["vfms.f32_3"] = "eea00a40dnm", - ["vfms.f64_3"] = "eea00b40Gdnm", - ["vfnma.f32_3"] = "ee900a40dnm", - ["vfnma.f64_3"] = "ee900b40Gdnm", - ["vfnms.f32_3"] = "ee900a00dnm", - ["vfnms.f64_3"] = "ee900b00Gdnm", - - -- NYI: Advanced SIMD instructions. - - -- NYI: I have no need for these instructions right now: - -- swp, swpb, strex, ldrex, strexd, ldrexd, strexb, ldrexb, strexh, ldrexh - -- msr, nopv6, yield, wfe, wfi, sev, dbg, bxj, smc, srs, rfe - -- cps, setend, pli, pld, pldw, clrex, dsb, dmb, isb - -- stc, ldc, mcr, mcr2, mrc, mrc2, mcrr, mcrr2, mrrc, mrrc2, cdp, cdp2 -} - --- Add mnemonics for "s" variants. -do - local t = {} - for k,v in pairs(map_op) do - if sub(v, -1) == "s" then - local v2 = sub(v, 1, 2)..char(byte(v, 3)+1)..sub(v, 4, -2) - t[sub(k, 1, -3).."s"..sub(k, -2)] = v2 - end - end - for k,v in pairs(t) do - map_op[k] = v - end -end - ------------------------------------------------------------------------------- - -local function parse_gpr(expr) - local tname, ovreg = match(expr, "^([%w_]+):(r1?[0-9])$") - local tp = map_type[tname or expr] - if tp then - local reg = ovreg or tp.reg - if not reg then - werror("type `"..(tname or expr).."' needs a register override") - end - expr = reg - end - local r = match(expr, "^r(1?[0-9])$") - if r then - r = tonumber(r) - if r <= 15 then return r, tp end - end - werror("bad register name `"..expr.."'") -end - -local function parse_gpr_pm(expr) - local pm, expr2 = match(expr, "^([+-]?)(.*)$") - return parse_gpr(expr2), (pm == "-") -end - -local function parse_vr(expr, tp) - local t, r = match(expr, "^([sd])([0-9]+)$") - if t == tp then - r = tonumber(r) - if r <= 31 then - if t == "s" then return shr(r, 1), band(r, 1) end - return band(r, 15), shr(r, 4) - end - end - werror("bad register name `"..expr.."'") -end - -local function parse_reglist(reglist) - reglist = match(reglist, "^{%s*([^}]*)}$") - if not reglist then werror("register list expected") end - local rr = 0 - for p in gmatch(reglist..",", "%s*([^,]*),") do - local rbit = shl(1, parse_gpr(gsub(p, "%s+$", ""))) - if band(rr, rbit) ~= 0 then - werror("duplicate register `"..p.."'") - end - rr = rr + rbit - end - return rr -end - -local function parse_vrlist(reglist) - local ta, ra, tb, rb = match(reglist, - "^{%s*([sd])([0-9]+)%s*%-%s*([sd])([0-9]+)%s*}$") - ra, rb = tonumber(ra), tonumber(rb) - if ta and ta == tb and ra and rb and ra <= 31 and rb <= 31 and ra <= rb then - local nr = rb+1 - ra - if ta == "s" then - return shl(shr(ra,1),12)+shl(band(ra,1),22) + nr - else - return shl(band(ra,15),12)+shl(shr(ra,4),22) + nr*2 + 0x100 - end - end - werror("register list expected") -end - -local function parse_imm(imm, bits, shift, scale, signed) - imm = match(imm, "^#(.*)$") - if not imm then werror("expected immediate operand") end - local n = tonumber(imm) - if n then - local m = sar(n, scale) - if shl(m, scale) == n then - if signed then - local s = sar(m, bits-1) - if s == 0 then return shl(m, shift) - elseif s == -1 then return shl(m + shl(1, bits), shift) end - else - if sar(m, bits) == 0 then return shl(m, shift) end - end - end - werror("out of range immediate `"..imm.."'") - else - waction("IMM", (signed and 32768 or 0)+scale*1024+bits*32+shift, imm) - return 0 - end -end - -local function parse_imm12(imm) - local n = tonumber(imm) - if n then - local m = band(n) - for i=0,-15,-1 do - if shr(m, 8) == 0 then return m + shl(band(i, 15), 8) end - m = ror(m, 2) - end - werror("out of range immediate `"..imm.."'") - else - waction("IMM12", 0, imm) - return 0 - end -end - -local function parse_imm16(imm) - imm = match(imm, "^#(.*)$") - if not imm then werror("expected immediate operand") end - local n = tonumber(imm) - if n then - if shr(n, 16) == 0 then return band(n, 0x0fff) + shl(band(n, 0xf000), 4) end - werror("out of range immediate `"..imm.."'") - else - waction("IMM16", 32*16, imm) - return 0 - end -end - -local function parse_imm_load(imm, ext) - local n = tonumber(imm) - if n then - if ext then - if n >= -255 and n <= 255 then - local up = 0x00800000 - if n < 0 then n = -n; up = 0 end - return shl(band(n, 0xf0), 4) + band(n, 0x0f) + up - end - else - if n >= -4095 and n <= 4095 then - if n >= 0 then return n+0x00800000 end - return -n - end - end - werror("out of range immediate `"..imm.."'") - else - waction(ext and "IMML8" or "IMML12", 32768 + shl(ext and 8 or 12, 5), imm) - return 0 - end -end - -local function parse_shift(shift, gprok) - if shift == "rrx" then - return 3 * 32 - else - local s, s2 = match(shift, "^(%S+)%s*(.*)$") - s = map_shift[s] - if not s then werror("expected shift operand") end - if sub(s2, 1, 1) == "#" then - return parse_imm(s2, 5, 7, 0, false) + shl(s, 5) - else - if not gprok then werror("expected immediate shift operand") end - return shl(parse_gpr(s2), 8) + shl(s, 5) + 16 - end - end -end - -local function parse_label(label, def) - local prefix = sub(label, 1, 2) - -- =>label (pc label reference) - if prefix == "=>" then - return "PC", 0, sub(label, 3) - end - -- ->name (global label reference) - if prefix == "->" then - return "LG", map_global[sub(label, 3)] - end - if def then - -- [1-9] (local label definition) - if match(label, "^[1-9]$") then - return "LG", 10+tonumber(label) - end - else - -- [<>][1-9] (local label reference) - local dir, lnum = match(label, "^([<>])([1-9])$") - if dir then -- Fwd: 1-9, Bkwd: 11-19. - return "LG", lnum + (dir == ">" and 0 or 10) - end - -- extern label (extern label reference) - local extname = match(label, "^extern%s+(%S+)$") - if extname then - return "EXT", map_extern[extname] - end - end - werror("bad label `"..label.."'") -end - -local function parse_load(params, nparams, n, op) - local oplo = band(op, 255) - local ext, ldrd = (oplo ~= 0), (oplo == 208) - local d - if (ldrd or oplo == 240) then - d = band(shr(op, 12), 15) - if band(d, 1) ~= 0 then werror("odd destination register") end - end - local pn = params[n] - local p1, wb = match(pn, "^%[%s*(.-)%s*%](!?)$") - local p2 = params[n+1] - if not p1 then - if not p2 then - if match(pn, "^[<>=%-]") or match(pn, "^extern%s+") then - local mode, n, s = parse_label(pn, false) - waction("REL_"..mode, n + (ext and 0x1800 or 0x0800), s, 1) - return op + 15 * 65536 + 0x01000000 + (ext and 0x00400000 or 0) - end - local reg, tailr = match(pn, "^([%w_:]+)%s*(.*)$") - if reg and tailr ~= "" then - local d, tp = parse_gpr(reg) - if tp then - waction(ext and "IMML8" or "IMML12", 32768 + 32*(ext and 8 or 12), - format(tp.ctypefmt, tailr)) - return op + shl(d, 16) + 0x01000000 + (ext and 0x00400000 or 0) - end - end - end - werror("expected address operand") - end - if wb == "!" then op = op + 0x00200000 end - if p2 then - if wb == "!" then werror("bad use of '!'") end - local p3 = params[n+2] - op = op + shl(parse_gpr(p1), 16) - local imm = match(p2, "^#(.*)$") - if imm then - local m = parse_imm_load(imm, ext) - if p3 then werror("too many parameters") end - op = op + m + (ext and 0x00400000 or 0) - else - local m, neg = parse_gpr_pm(p2) - if ldrd and (m == d or m-1 == d) then werror("register conflict") end - op = op + m + (neg and 0 or 0x00800000) + (ext and 0 or 0x02000000) - if p3 then op = op + parse_shift(p3) end - end - else - local p1a, p2 = match(p1, "^([^,%s]*)%s*(.*)$") - op = op + shl(parse_gpr(p1a), 16) + 0x01000000 - if p2 ~= "" then - local imm = match(p2, "^,%s*#(.*)$") - if imm then - local m = parse_imm_load(imm, ext) - op = op + m + (ext and 0x00400000 or 0) - else - local p2a, p3 = match(p2, "^,%s*([^,%s]*)%s*,?%s*(.*)$") - local m, neg = parse_gpr_pm(p2a) - if ldrd and (m == d or m-1 == d) then werror("register conflict") end - op = op + m + (neg and 0 or 0x00800000) + (ext and 0 or 0x02000000) - if p3 ~= "" then - if ext then werror("too many parameters") end - op = op + parse_shift(p3) - end - end - else - if wb == "!" then werror("bad use of '!'") end - op = op + (ext and 0x00c00000 or 0x00800000) - end - end - return op -end - -local function parse_vload(q) - local reg, imm = match(q, "^%[%s*([^,%s]*)%s*(.*)%]$") - if reg then - local d = shl(parse_gpr(reg), 16) - if imm == "" then return d end - imm = match(imm, "^,%s*#(.*)$") - if imm then - local n = tonumber(imm) - if n then - if n >= -1020 and n <= 1020 and n%4 == 0 then - return d + (n >= 0 and n/4+0x00800000 or -n/4) - end - werror("out of range immediate `"..imm.."'") - else - waction("IMMV8", 32768 + 32*8, imm) - return d - end - end - else - if match(q, "^[<>=%-]") or match(q, "^extern%s+") then - local mode, n, s = parse_label(q, false) - waction("REL_"..mode, n + 0x2800, s, 1) - return 15 * 65536 - end - local reg, tailr = match(q, "^([%w_:]+)%s*(.*)$") - if reg and tailr ~= "" then - local d, tp = parse_gpr(reg) - if tp then - waction("IMMV8", 32768 + 32*8, format(tp.ctypefmt, tailr)) - return shl(d, 16) - end - end - end - werror("expected address operand") -end - ------------------------------------------------------------------------------- - --- Handle opcodes defined with template strings. -local function parse_template(params, template, nparams, pos) - local op = tonumber(sub(template, 1, 8), 16) - local n = 1 - local vr = "s" - - -- Process each character. - for p in gmatch(sub(template, 9), ".") do - local q = params[n] - if p == "D" then - op = op + shl(parse_gpr(q), 12); n = n + 1 - elseif p == "N" then - op = op + shl(parse_gpr(q), 16); n = n + 1 - elseif p == "S" then - op = op + shl(parse_gpr(q), 8); n = n + 1 - elseif p == "M" then - op = op + parse_gpr(q); n = n + 1 - elseif p == "d" then - local r,h = parse_vr(q, vr); op = op+shl(r,12)+shl(h,22); n = n + 1 - elseif p == "n" then - local r,h = parse_vr(q, vr); op = op+shl(r,16)+shl(h,7); n = n + 1 - elseif p == "m" then - local r,h = parse_vr(q, vr); op = op+r+shl(h,5); n = n + 1 - elseif p == "P" then - local imm = match(q, "^#(.*)$") - if imm then - op = op + parse_imm12(imm) + 0x02000000 - else - op = op + parse_gpr(q) - end - n = n + 1 - elseif p == "p" then - op = op + parse_shift(q, true); n = n + 1 - elseif p == "L" then - op = parse_load(params, nparams, n, op) - elseif p == "l" then - op = op + parse_vload(q) - elseif p == "B" then - local mode, n, s = parse_label(q, false) - waction("REL_"..mode, n, s, 1) - elseif p == "C" then -- blx gpr vs. blx label. - if match(q, "^([%w_]+):(r1?[0-9])$") or match(q, "^r(1?[0-9])$") then - op = op + parse_gpr(q) - else - if op < 0xe0000000 then werror("unconditional instruction") end - local mode, n, s = parse_label(q, false) - waction("REL_"..mode, n, s, 1) - op = 0xfa000000 - end - elseif p == "F" then - vr = "s" - elseif p == "G" then - vr = "d" - elseif p == "o" then - local r, wb = match(q, "^([^!]*)(!?)$") - op = op + shl(parse_gpr(r), 16) + (wb == "!" and 0x00200000 or 0) - n = n + 1 - elseif p == "R" then - op = op + parse_reglist(q); n = n + 1 - elseif p == "r" then - op = op + parse_vrlist(q); n = n + 1 - elseif p == "W" then - op = op + parse_imm16(q); n = n + 1 - elseif p == "v" then - op = op + parse_imm(q, 5, 7, 0, false); n = n + 1 - elseif p == "w" then - local imm = match(q, "^#(.*)$") - if imm then - op = op + parse_imm(q, 5, 7, 0, false); n = n + 1 - else - op = op + shl(parse_gpr(q), 8) + 16 - end - elseif p == "X" then - op = op + parse_imm(q, 5, 16, 0, false); n = n + 1 - elseif p == "Y" then - local imm = tonumber(match(q, "^#(.*)$")); n = n + 1 - if not imm or shr(imm, 8) ~= 0 then - werror("bad immediate operand") - end - op = op + shl(band(imm, 0xf0), 12) + band(imm, 0x0f) - elseif p == "K" then - local imm = tonumber(match(q, "^#(.*)$")); n = n + 1 - if not imm or shr(imm, 16) ~= 0 then - werror("bad immediate operand") - end - op = op + shl(band(imm, 0xfff0), 4) + band(imm, 0x000f) - elseif p == "T" then - op = op + parse_imm(q, 24, 0, 0, false); n = n + 1 - elseif p == "s" then - -- Ignored. - else - assert(false) - end - end - wputpos(pos, op) -end - -map_op[".template__"] = function(params, template, nparams) - if not params then return template:gsub("%x%x%x%x%x%x%x%x", "") end - - -- Limit number of section buffer positions used by a single dasm_put(). - -- A single opcode needs a maximum of 3 positions. - if secpos+3 > maxsecpos then wflush() end - local pos = wpos() - local lpos, apos, spos = #actlist, #actargs, secpos - - local ok, err - for t in gmatch(template, "[^|]+") do - ok, err = pcall(parse_template, params, t, nparams, pos) - if ok then return end - secpos = spos - actlist[lpos+1] = nil - actlist[lpos+2] = nil - actlist[lpos+3] = nil - actargs[apos+1] = nil - actargs[apos+2] = nil - actargs[apos+3] = nil - end - error(err, 0) -end - ------------------------------------------------------------------------------- - --- Pseudo-opcode to mark the position where the action list is to be emitted. -map_op[".actionlist_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeactions(out, name) end) -end - --- Pseudo-opcode to mark the position where the global enum is to be emitted. -map_op[".globals_1"] = function(params) - if not params then return "prefix" end - local prefix = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobals(out, prefix) end) -end - --- Pseudo-opcode to mark the position where the global names are to be emitted. -map_op[".globalnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobalnames(out, name) end) -end - --- Pseudo-opcode to mark the position where the extern names are to be emitted. -map_op[".externnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeexternnames(out, name) end) -end - ------------------------------------------------------------------------------- - --- Label pseudo-opcode (converted from trailing colon form). -map_op[".label_1"] = function(params) - if not params then return "[1-9] | ->global | =>pcexpr" end - if secpos+1 > maxsecpos then wflush() end - local mode, n, s = parse_label(params[1], true) - if mode == "EXT" then werror("bad label definition") end - waction("LABEL_"..mode, n, s, 1) -end - ------------------------------------------------------------------------------- - --- Pseudo-opcodes for data storage. -map_op[".long_*"] = function(params) - if not params then return "imm..." end - for _,p in ipairs(params) do - local n = tonumber(p) - if not n then werror("bad immediate `"..p.."'") end - if n < 0 then n = n + 2^32 end - wputw(n) - if secpos+2 > maxsecpos then wflush() end - end -end - --- Alignment pseudo-opcode. -map_op[".align_1"] = function(params) - if not params then return "numpow2" end - if secpos+1 > maxsecpos then wflush() end - local align = tonumber(params[1]) - if align then - local x = align - -- Must be a power of 2 in the range (2 ... 256). - for i=1,8 do - x = x / 2 - if x == 1 then - waction("ALIGN", align-1, nil, 1) -- Action byte is 2**n-1. - return - end - end - end - werror("bad alignment") -end - ------------------------------------------------------------------------------- - --- Pseudo-opcode for (primitive) type definitions (map to C types). -map_op[".type_3"] = function(params, nparams) - if not params then - return nparams == 2 and "name, ctype" or "name, ctype, reg" - end - local name, ctype, reg = params[1], params[2], params[3] - if not match(name, "^[%a_][%w_]*$") then - werror("bad type name `"..name.."'") - end - local tp = map_type[name] - if tp then - werror("duplicate type `"..name.."'") - end - -- Add #type to defines. A bit unclean to put it in map_archdef. - map_archdef["#"..name] = "sizeof("..ctype..")" - -- Add new type and emit shortcut define. - local num = ctypenum + 1 - map_type[name] = { - ctype = ctype, - ctypefmt = format("Dt%X(%%s)", num), - reg = reg, - } - wline(format("#define Dt%X(_V) (int)(ptrdiff_t)&(((%s *)0)_V)", num, ctype)) - ctypenum = num -end -map_op[".type_2"] = map_op[".type_3"] - --- Dump type definitions. -local function dumptypes(out, lvl) - local t = {} - for name in pairs(map_type) do t[#t+1] = name end - sort(t) - out:write("Type definitions:\n") - for _,name in ipairs(t) do - local tp = map_type[name] - local reg = tp.reg or "" - out:write(format(" %-20s %-20s %s\n", name, tp.ctype, reg)) - end - out:write("\n") -end - ------------------------------------------------------------------------------- - --- Set the current section. -function _M.section(num) - waction("SECTION", num) - wflush(true) -- SECTION is a terminal action. -end - ------------------------------------------------------------------------------- - --- Dump architecture description. -function _M.dumparch(out) - out:write(format("DynASM %s version %s, released %s\n\n", - _info.arch, _info.version, _info.release)) - dumpactions(out) -end - --- Dump all user defined elements. -function _M.dumpdef(out, lvl) - dumptypes(out, lvl) - dumpglobals(out, lvl) - dumpexterns(out, lvl) -end - ------------------------------------------------------------------------------- - --- Pass callbacks from/to the DynASM core. -function _M.passcb(wl, we, wf, ww) - wline, werror, wfatal, wwarn = wl, we, wf, ww - return wflush -end - --- Setup the arch-specific module. -function _M.setup(arch, opt) - g_arch, g_opt = arch, opt -end - --- Merge the core maps and the arch-specific maps. -function _M.mergemaps(map_coreop, map_def) - setmetatable(map_op, { __index = function(t, k) - local v = map_coreop[k] - if v then return v end - local k1, cc, k2 = match(k, "^(.-)(..)([._].*)$") - local cv = map_cond[cc] - if cv then - local v = rawget(t, k1..k2) - if type(v) == "string" then - local scv = format("%x", cv) - return gsub(scv..sub(v, 2), "|e", "|"..scv) - end - end - end }) - setmetatable(map_def, { __index = map_archdef }) - return map_op, map_def -end - -return _M - ------------------------------------------------------------------------------- - diff --git a/deps/luajit/dynasm/dasm_mips.h b/deps/luajit/dynasm/dasm_mips.h deleted file mode 100644 index 2f4c2d2..0000000 --- a/deps/luajit/dynasm/dasm_mips.h +++ /dev/null @@ -1,416 +0,0 @@ -/* -** DynASM MIPS encoding engine. -** Copyright (C) 2005-2015 Mike Pall. All rights reserved. -** Released under the MIT license. See dynasm.lua for full copyright notice. -*/ - -#include -#include -#include -#include - -#define DASM_ARCH "mips" - -#ifndef DASM_EXTERN -#define DASM_EXTERN(a,b,c,d) 0 -#endif - -/* Action definitions. */ -enum { - DASM_STOP, DASM_SECTION, DASM_ESC, DASM_REL_EXT, - /* The following actions need a buffer position. */ - DASM_ALIGN, DASM_REL_LG, DASM_LABEL_LG, - /* The following actions also have an argument. */ - DASM_REL_PC, DASM_LABEL_PC, DASM_IMM, - DASM__MAX -}; - -/* Maximum number of section buffer positions for a single dasm_put() call. */ -#define DASM_MAXSECPOS 25 - -/* DynASM encoder status codes. Action list offset or number are or'ed in. */ -#define DASM_S_OK 0x00000000 -#define DASM_S_NOMEM 0x01000000 -#define DASM_S_PHASE 0x02000000 -#define DASM_S_MATCH_SEC 0x03000000 -#define DASM_S_RANGE_I 0x11000000 -#define DASM_S_RANGE_SEC 0x12000000 -#define DASM_S_RANGE_LG 0x13000000 -#define DASM_S_RANGE_PC 0x14000000 -#define DASM_S_RANGE_REL 0x15000000 -#define DASM_S_UNDEF_LG 0x21000000 -#define DASM_S_UNDEF_PC 0x22000000 - -/* Macros to convert positions (8 bit section + 24 bit index). */ -#define DASM_POS2IDX(pos) ((pos)&0x00ffffff) -#define DASM_POS2BIAS(pos) ((pos)&0xff000000) -#define DASM_SEC2POS(sec) ((sec)<<24) -#define DASM_POS2SEC(pos) ((pos)>>24) -#define DASM_POS2PTR(D, pos) (D->sections[DASM_POS2SEC(pos)].rbuf + (pos)) - -/* Action list type. */ -typedef const unsigned int *dasm_ActList; - -/* Per-section structure. */ -typedef struct dasm_Section { - int *rbuf; /* Biased buffer pointer (negative section bias). */ - int *buf; /* True buffer pointer. */ - size_t bsize; /* Buffer size in bytes. */ - int pos; /* Biased buffer position. */ - int epos; /* End of biased buffer position - max single put. */ - int ofs; /* Byte offset into section. */ -} dasm_Section; - -/* Core structure holding the DynASM encoding state. */ -struct dasm_State { - size_t psize; /* Allocated size of this structure. */ - dasm_ActList actionlist; /* Current actionlist pointer. */ - int *lglabels; /* Local/global chain/pos ptrs. */ - size_t lgsize; - int *pclabels; /* PC label chains/pos ptrs. */ - size_t pcsize; - void **globals; /* Array of globals (bias -10). */ - dasm_Section *section; /* Pointer to active section. */ - size_t codesize; /* Total size of all code sections. */ - int maxsection; /* 0 <= sectionidx < maxsection. */ - int status; /* Status code. */ - dasm_Section sections[1]; /* All sections. Alloc-extended. */ -}; - -/* The size of the core structure depends on the max. number of sections. */ -#define DASM_PSZ(ms) (sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section)) - - -/* Initialize DynASM state. */ -void dasm_init(Dst_DECL, int maxsection) -{ - dasm_State *D; - size_t psz = 0; - int i; - Dst_REF = NULL; - DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection)); - D = Dst_REF; - D->psize = psz; - D->lglabels = NULL; - D->lgsize = 0; - D->pclabels = NULL; - D->pcsize = 0; - D->globals = NULL; - D->maxsection = maxsection; - for (i = 0; i < maxsection; i++) { - D->sections[i].buf = NULL; /* Need this for pass3. */ - D->sections[i].rbuf = D->sections[i].buf - DASM_SEC2POS(i); - D->sections[i].bsize = 0; - D->sections[i].epos = 0; /* Wrong, but is recalculated after resize. */ - } -} - -/* Free DynASM state. */ -void dasm_free(Dst_DECL) -{ - dasm_State *D = Dst_REF; - int i; - for (i = 0; i < D->maxsection; i++) - if (D->sections[i].buf) - DASM_M_FREE(Dst, D->sections[i].buf, D->sections[i].bsize); - if (D->pclabels) DASM_M_FREE(Dst, D->pclabels, D->pcsize); - if (D->lglabels) DASM_M_FREE(Dst, D->lglabels, D->lgsize); - DASM_M_FREE(Dst, D, D->psize); -} - -/* Setup global label array. Must be called before dasm_setup(). */ -void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl) -{ - dasm_State *D = Dst_REF; - D->globals = gl - 10; /* Negative bias to compensate for locals. */ - DASM_M_GROW(Dst, int, D->lglabels, D->lgsize, (10+maxgl)*sizeof(int)); -} - -/* Grow PC label array. Can be called after dasm_setup(), too. */ -void dasm_growpc(Dst_DECL, unsigned int maxpc) -{ - dasm_State *D = Dst_REF; - size_t osz = D->pcsize; - DASM_M_GROW(Dst, int, D->pclabels, D->pcsize, maxpc*sizeof(int)); - memset((void *)(((unsigned char *)D->pclabels)+osz), 0, D->pcsize-osz); -} - -/* Setup encoder. */ -void dasm_setup(Dst_DECL, const void *actionlist) -{ - dasm_State *D = Dst_REF; - int i; - D->actionlist = (dasm_ActList)actionlist; - D->status = DASM_S_OK; - D->section = &D->sections[0]; - memset((void *)D->lglabels, 0, D->lgsize); - if (D->pclabels) memset((void *)D->pclabels, 0, D->pcsize); - for (i = 0; i < D->maxsection; i++) { - D->sections[i].pos = DASM_SEC2POS(i); - D->sections[i].ofs = 0; - } -} - - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) { \ - D->status = DASM_S_##st|(p-D->actionlist-1); return; } } while (0) -#define CKPL(kind, st) \ - do { if ((size_t)((char *)pl-(char *)D->kind##labels) >= D->kind##size) { \ - D->status = DASM_S_RANGE_##st|(p-D->actionlist-1); return; } } while (0) -#else -#define CK(x, st) ((void)0) -#define CKPL(kind, st) ((void)0) -#endif - -/* Pass 1: Store actions and args, link branches/labels, estimate offsets. */ -void dasm_put(Dst_DECL, int start, ...) -{ - va_list ap; - dasm_State *D = Dst_REF; - dasm_ActList p = D->actionlist + start; - dasm_Section *sec = D->section; - int pos = sec->pos, ofs = sec->ofs; - int *b; - - if (pos >= sec->epos) { - DASM_M_GROW(Dst, int, sec->buf, sec->bsize, - sec->bsize + 2*DASM_MAXSECPOS*sizeof(int)); - sec->rbuf = sec->buf - DASM_POS2BIAS(pos); - sec->epos = (int)sec->bsize/sizeof(int) - DASM_MAXSECPOS+DASM_POS2BIAS(pos); - } - - b = sec->rbuf; - b[pos++] = start; - - va_start(ap, start); - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16) - 0xff00; - if (action >= DASM__MAX) { - ofs += 4; - } else { - int *pl, n = action >= DASM_REL_PC ? va_arg(ap, int) : 0; - switch (action) { - case DASM_STOP: goto stop; - case DASM_SECTION: - n = (ins & 255); CK(n < D->maxsection, RANGE_SEC); - D->section = &D->sections[n]; goto stop; - case DASM_ESC: p++; ofs += 4; break; - case DASM_REL_EXT: break; - case DASM_ALIGN: ofs += (ins & 255); b[pos++] = ofs; break; - case DASM_REL_LG: - n = (ins & 2047) - 10; pl = D->lglabels + n; - /* Bkwd rel or global. */ - if (n >= 0) { CK(n>=10||*pl<0, RANGE_LG); CKPL(lg, LG); goto putrel; } - pl += 10; n = *pl; - if (n < 0) n = 0; /* Start new chain for fwd rel if label exists. */ - goto linkrel; - case DASM_REL_PC: - pl = D->pclabels + n; CKPL(pc, PC); - putrel: - n = *pl; - if (n < 0) { /* Label exists. Get label pos and store it. */ - b[pos] = -n; - } else { - linkrel: - b[pos] = n; /* Else link to rel chain, anchored at label. */ - *pl = pos; - } - pos++; - break; - case DASM_LABEL_LG: - pl = D->lglabels + (ins & 2047) - 10; CKPL(lg, LG); goto putlabel; - case DASM_LABEL_PC: - pl = D->pclabels + n; CKPL(pc, PC); - putlabel: - n = *pl; /* n > 0: Collapse rel chain and replace with label pos. */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = pos; - } - *pl = -pos; /* Label exists now. */ - b[pos++] = ofs; /* Store pass1 offset estimate. */ - break; - case DASM_IMM: -#ifdef DASM_CHECKS - CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I); -#endif - n >>= ((ins>>10)&31); -#ifdef DASM_CHECKS - if (ins & 0x8000) - CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I); - else - CK((n>>((ins>>5)&31)) == 0, RANGE_I); -#endif - b[pos++] = n; - break; - } - } - } -stop: - va_end(ap); - sec->pos = pos; - sec->ofs = ofs; -} -#undef CK - -/* Pass 2: Link sections, shrink aligns, fix label offsets. */ -int dasm_link(Dst_DECL, size_t *szp) -{ - dasm_State *D = Dst_REF; - int secnum; - int ofs = 0; - -#ifdef DASM_CHECKS - *szp = 0; - if (D->status != DASM_S_OK) return D->status; - { - int pc; - for (pc = 0; pc*sizeof(int) < D->pcsize; pc++) - if (D->pclabels[pc] > 0) return DASM_S_UNDEF_PC|pc; - } -#endif - - { /* Handle globals not defined in this translation unit. */ - int idx; - for (idx = 20; idx*sizeof(int) < D->lgsize; idx++) { - int n = D->lglabels[idx]; - /* Undefined label: Collapse rel chain and replace with marker (< 0). */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = -idx; } - } - } - - /* Combine all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->rbuf; - int pos = DASM_SEC2POS(secnum); - int lastpos = sec->pos; - - while (pos != lastpos) { - dasm_ActList p = D->actionlist + b[pos++]; - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16) - 0xff00; - switch (action) { - case DASM_STOP: case DASM_SECTION: goto stop; - case DASM_ESC: p++; break; - case DASM_REL_EXT: break; - case DASM_ALIGN: ofs -= (b[pos++] + ofs) & (ins & 255); break; - case DASM_REL_LG: case DASM_REL_PC: pos++; break; - case DASM_LABEL_LG: case DASM_LABEL_PC: b[pos++] += ofs; break; - case DASM_IMM: pos++; break; - } - } - stop: (void)0; - } - ofs += sec->ofs; /* Next section starts right after current section. */ - } - - D->codesize = ofs; /* Total size of all code sections */ - *szp = ofs; - return DASM_S_OK; -} - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) return DASM_S_##st|(p-D->actionlist-1); } while (0) -#else -#define CK(x, st) ((void)0) -#endif - -/* Pass 3: Encode sections. */ -int dasm_encode(Dst_DECL, void *buffer) -{ - dasm_State *D = Dst_REF; - char *base = (char *)buffer; - unsigned int *cp = (unsigned int *)buffer; - int secnum; - - /* Encode all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->buf; - int *endb = sec->rbuf + sec->pos; - - while (b != endb) { - dasm_ActList p = D->actionlist + *b++; - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16) - 0xff00; - int n = (action >= DASM_ALIGN && action < DASM__MAX) ? *b++ : 0; - switch (action) { - case DASM_STOP: case DASM_SECTION: goto stop; - case DASM_ESC: *cp++ = *p++; break; - case DASM_REL_EXT: - n = DASM_EXTERN(Dst, (unsigned char *)cp, (ins & 2047), 1); - goto patchrel; - case DASM_ALIGN: - ins &= 255; while ((((char *)cp - base) & ins)) *cp++ = 0x60000000; - break; - case DASM_REL_LG: - CK(n >= 0, UNDEF_LG); - case DASM_REL_PC: - CK(n >= 0, UNDEF_PC); - n = *DASM_POS2PTR(D, n); - if (ins & 2048) - n = n - (int)((char *)cp - base); - else - n = (n + (int)base) & 0x0fffffff; - patchrel: - CK((n & 3) == 0 && - ((n + ((ins & 2048) ? 0x00020000 : 0)) >> - ((ins & 2048) ? 18 : 28)) == 0, RANGE_REL); - cp[-1] |= ((n>>2) & ((ins & 2048) ? 0x0000ffff: 0x03ffffff)); - break; - case DASM_LABEL_LG: - ins &= 2047; if (ins >= 20) D->globals[ins-10] = (void *)(base + n); - break; - case DASM_LABEL_PC: break; - case DASM_IMM: - cp[-1] |= (n & ((1<<((ins>>5)&31))-1)) << (ins&31); - break; - default: *cp++ = ins; break; - } - } - stop: (void)0; - } - } - - if (base + D->codesize != (char *)cp) /* Check for phase errors. */ - return DASM_S_PHASE; - return DASM_S_OK; -} -#undef CK - -/* Get PC label offset. */ -int dasm_getpclabel(Dst_DECL, unsigned int pc) -{ - dasm_State *D = Dst_REF; - if (pc*sizeof(int) < D->pcsize) { - int pos = D->pclabels[pc]; - if (pos < 0) return *DASM_POS2PTR(D, -pos); - if (pos > 0) return -1; /* Undefined. */ - } - return -2; /* Unused or out of range. */ -} - -#ifdef DASM_CHECKS -/* Optional sanity checker to call between isolated encoding steps. */ -int dasm_checkstep(Dst_DECL, int secmatch) -{ - dasm_State *D = Dst_REF; - if (D->status == DASM_S_OK) { - int i; - for (i = 1; i <= 9; i++) { - if (D->lglabels[i] > 0) { D->status = DASM_S_UNDEF_LG|i; break; } - D->lglabels[i] = 0; - } - } - if (D->status == DASM_S_OK && secmatch >= 0 && - D->section != &D->sections[secmatch]) - D->status = DASM_S_MATCH_SEC|(D->section-D->sections); - return D->status; -} -#endif - diff --git a/deps/luajit/dynasm/dasm_mips.lua b/deps/luajit/dynasm/dasm_mips.lua deleted file mode 100644 index ae0dbd7..0000000 --- a/deps/luajit/dynasm/dasm_mips.lua +++ /dev/null @@ -1,953 +0,0 @@ ------------------------------------------------------------------------------- --- DynASM MIPS module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- See dynasm.lua for full copyright notice. ------------------------------------------------------------------------------- - --- Module information: -local _info = { - arch = "mips", - description = "DynASM MIPS module", - version = "1.3.0", - vernum = 10300, - release = "2012-01-23", - author = "Mike Pall", - license = "MIT", -} - --- Exported glue functions for the arch-specific module. -local _M = { _info = _info } - --- Cache library functions. -local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs -local assert, setmetatable = assert, setmetatable -local _s = string -local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char -local match, gmatch = _s.match, _s.gmatch -local concat, sort = table.concat, table.sort -local bit = bit or require("bit") -local band, shl, sar, tohex = bit.band, bit.lshift, bit.arshift, bit.tohex - --- Inherited tables and callbacks. -local g_opt, g_arch -local wline, werror, wfatal, wwarn - --- Action name list. --- CHECK: Keep this in sync with the C code! -local action_names = { - "STOP", "SECTION", "ESC", "REL_EXT", - "ALIGN", "REL_LG", "LABEL_LG", - "REL_PC", "LABEL_PC", "IMM", -} - --- Maximum number of section buffer positions for dasm_put(). --- CHECK: Keep this in sync with the C code! -local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines. - --- Action name -> action number. -local map_action = {} -for n,name in ipairs(action_names) do - map_action[name] = n-1 -end - --- Action list buffer. -local actlist = {} - --- Argument list for next dasm_put(). Start with offset 0 into action list. -local actargs = { 0 } - --- Current number of section buffer positions for dasm_put(). -local secpos = 1 - ------------------------------------------------------------------------------- - --- Dump action names and numbers. -local function dumpactions(out) - out:write("DynASM encoding engine action codes:\n") - for n,name in ipairs(action_names) do - local num = map_action[name] - out:write(format(" %-10s %02X %d\n", name, num, num)) - end - out:write("\n") -end - --- Write action list buffer as a huge static C array. -local function writeactions(out, name) - local nn = #actlist - if nn == 0 then nn = 1; actlist[0] = map_action.STOP end - out:write("static const unsigned int ", name, "[", nn, "] = {\n") - for i = 1,nn-1 do - assert(out:write("0x", tohex(actlist[i]), ",\n")) - end - assert(out:write("0x", tohex(actlist[nn]), "\n};\n\n")) -end - ------------------------------------------------------------------------------- - --- Add word to action list. -local function wputxw(n) - assert(n >= 0 and n <= 0xffffffff and n % 1 == 0, "word out of range") - actlist[#actlist+1] = n -end - --- Add action to list with optional arg. Advance buffer pos, too. -local function waction(action, val, a, num) - local w = assert(map_action[action], "bad action name `"..action.."'") - wputxw(0xff000000 + w * 0x10000 + (val or 0)) - if a then actargs[#actargs+1] = a end - if a or num then secpos = secpos + (num or 1) end -end - --- Flush action list (intervening C code or buffer pos overflow). -local function wflush(term) - if #actlist == actargs[1] then return end -- Nothing to flush. - if not term then waction("STOP") end -- Terminate action list. - wline(format("dasm_put(Dst, %s);", concat(actargs, ", ")), true) - actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put(). - secpos = 1 -- The actionlist offset occupies a buffer position, too. -end - --- Put escaped word. -local function wputw(n) - if n >= 0xff000000 then waction("ESC") end - wputxw(n) -end - --- Reserve position for word. -local function wpos() - local pos = #actlist+1 - actlist[pos] = "" - return pos -end - --- Store word to reserved position. -local function wputpos(pos, n) - assert(n >= 0 and n <= 0xffffffff and n % 1 == 0, "word out of range") - actlist[pos] = n -end - ------------------------------------------------------------------------------- - --- Global label name -> global label number. With auto assignment on 1st use. -local next_global = 20 -local map_global = setmetatable({}, { __index = function(t, name) - if not match(name, "^[%a_][%w_]*$") then werror("bad global label") end - local n = next_global - if n > 2047 then werror("too many global labels") end - next_global = n + 1 - t[name] = n - return n -end}) - --- Dump global labels. -local function dumpglobals(out, lvl) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("Global labels:\n") - for i=20,next_global-1 do - out:write(format(" %s\n", t[i])) - end - out:write("\n") -end - --- Write global label enum. -local function writeglobals(out, prefix) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("enum {\n") - for i=20,next_global-1 do - out:write(" ", prefix, t[i], ",\n") - end - out:write(" ", prefix, "_MAX\n};\n") -end - --- Write global label names. -local function writeglobalnames(out, name) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("static const char *const ", name, "[] = {\n") - for i=20,next_global-1 do - out:write(" \"", t[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Extern label name -> extern label number. With auto assignment on 1st use. -local next_extern = 0 -local map_extern_ = {} -local map_extern = setmetatable({}, { __index = function(t, name) - -- No restrictions on the name for now. - local n = next_extern - if n > 2047 then werror("too many extern labels") end - next_extern = n + 1 - t[name] = n - map_extern_[n] = name - return n -end}) - --- Dump extern labels. -local function dumpexterns(out, lvl) - out:write("Extern labels:\n") - for i=0,next_extern-1 do - out:write(format(" %s\n", map_extern_[i])) - end - out:write("\n") -end - --- Write extern label names. -local function writeexternnames(out, name) - out:write("static const char *const ", name, "[] = {\n") - for i=0,next_extern-1 do - out:write(" \"", map_extern_[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Arch-specific maps. -local map_archdef = { sp="r29", ra="r31" } -- Ext. register name -> int. name. - -local map_type = {} -- Type name -> { ctype, reg } -local ctypenum = 0 -- Type number (for Dt... macros). - --- Reverse defines for registers. -function _M.revdef(s) - if s == "r29" then return "sp" - elseif s == "r31" then return "ra" end - return s -end - ------------------------------------------------------------------------------- - --- Template strings for MIPS instructions. -local map_op = { - -- First-level opcodes. - j_1 = "08000000J", - jal_1 = "0c000000J", - b_1 = "10000000B", - beqz_2 = "10000000SB", - beq_3 = "10000000STB", - bnez_2 = "14000000SB", - bne_3 = "14000000STB", - blez_2 = "18000000SB", - bgtz_2 = "1c000000SB", - addi_3 = "20000000TSI", - li_2 = "24000000TI", - addiu_3 = "24000000TSI", - slti_3 = "28000000TSI", - sltiu_3 = "2c000000TSI", - andi_3 = "30000000TSU", - lu_2 = "34000000TU", - ori_3 = "34000000TSU", - xori_3 = "38000000TSU", - lui_2 = "3c000000TU", - beqzl_2 = "50000000SB", - beql_3 = "50000000STB", - bnezl_2 = "54000000SB", - bnel_3 = "54000000STB", - blezl_2 = "58000000SB", - bgtzl_2 = "5c000000SB", - lb_2 = "80000000TO", - lh_2 = "84000000TO", - lwl_2 = "88000000TO", - lw_2 = "8c000000TO", - lbu_2 = "90000000TO", - lhu_2 = "94000000TO", - lwr_2 = "98000000TO", - sb_2 = "a0000000TO", - sh_2 = "a4000000TO", - swl_2 = "a8000000TO", - sw_2 = "ac000000TO", - swr_2 = "b8000000TO", - cache_2 = "bc000000NO", - ll_2 = "c0000000TO", - lwc1_2 = "c4000000HO", - pref_2 = "cc000000NO", - ldc1_2 = "d4000000HO", - sc_2 = "e0000000TO", - swc1_2 = "e4000000HO", - sdc1_2 = "f4000000HO", - - -- Opcode SPECIAL. - nop_0 = "00000000", - sll_3 = "00000000DTA", - movf_2 = "00000001DS", - movf_3 = "00000001DSC", - movt_2 = "00010001DS", - movt_3 = "00010001DSC", - srl_3 = "00000002DTA", - rotr_3 = "00200002DTA", - sra_3 = "00000003DTA", - sllv_3 = "00000004DTS", - srlv_3 = "00000006DTS", - rotrv_3 = "00000046DTS", - srav_3 = "00000007DTS", - jr_1 = "00000008S", - jalr_1 = "0000f809S", - jalr_2 = "00000009DS", - movz_3 = "0000000aDST", - movn_3 = "0000000bDST", - syscall_0 = "0000000c", - syscall_1 = "0000000cY", - break_0 = "0000000d", - break_1 = "0000000dY", - sync_0 = "0000000f", - mfhi_1 = "00000010D", - mthi_1 = "00000011S", - mflo_1 = "00000012D", - mtlo_1 = "00000013S", - mult_2 = "00000018ST", - multu_2 = "00000019ST", - div_2 = "0000001aST", - divu_2 = "0000001bST", - add_3 = "00000020DST", - move_2 = "00000021DS", - addu_3 = "00000021DST", - sub_3 = "00000022DST", - negu_2 = "00000023DT", - subu_3 = "00000023DST", - and_3 = "00000024DST", - or_3 = "00000025DST", - xor_3 = "00000026DST", - not_2 = "00000027DS", - nor_3 = "00000027DST", - slt_3 = "0000002aDST", - sltu_3 = "0000002bDST", - tge_2 = "00000030ST", - tge_3 = "00000030STZ", - tgeu_2 = "00000031ST", - tgeu_3 = "00000031STZ", - tlt_2 = "00000032ST", - tlt_3 = "00000032STZ", - tltu_2 = "00000033ST", - tltu_3 = "00000033STZ", - teq_2 = "00000034ST", - teq_3 = "00000034STZ", - tne_2 = "00000036ST", - tne_3 = "00000036STZ", - - -- Opcode REGIMM. - bltz_2 = "04000000SB", - bgez_2 = "04010000SB", - bltzl_2 = "04020000SB", - bgezl_2 = "04030000SB", - tgei_2 = "04080000SI", - tgeiu_2 = "04090000SI", - tlti_2 = "040a0000SI", - tltiu_2 = "040b0000SI", - teqi_2 = "040c0000SI", - tnei_2 = "040e0000SI", - bltzal_2 = "04100000SB", - bal_1 = "04110000B", - bgezal_2 = "04110000SB", - bltzall_2 = "04120000SB", - bgezall_2 = "04130000SB", - synci_1 = "041f0000O", - - -- Opcode SPECIAL2. - madd_2 = "70000000ST", - maddu_2 = "70000001ST", - mul_3 = "70000002DST", - msub_2 = "70000004ST", - msubu_2 = "70000005ST", - clz_2 = "70000020DS=", - clo_2 = "70000021DS=", - sdbbp_0 = "7000003f", - sdbbp_1 = "7000003fY", - - -- Opcode SPECIAL3. - ext_4 = "7c000000TSAM", -- Note: last arg is msbd = size-1 - ins_4 = "7c000004TSAM", -- Note: last arg is msb = pos+size-1 - wsbh_2 = "7c0000a0DT", - seb_2 = "7c000420DT", - seh_2 = "7c000620DT", - rdhwr_2 = "7c00003bTD", - - -- Opcode COP0. - mfc0_2 = "40000000TD", - mfc0_3 = "40000000TDW", - mtc0_2 = "40800000TD", - mtc0_3 = "40800000TDW", - rdpgpr_2 = "41400000DT", - di_0 = "41606000", - di_1 = "41606000T", - ei_0 = "41606020", - ei_1 = "41606020T", - wrpgpr_2 = "41c00000DT", - tlbr_0 = "42000001", - tlbwi_0 = "42000002", - tlbwr_0 = "42000006", - tlbp_0 = "42000008", - eret_0 = "42000018", - deret_0 = "4200001f", - wait_0 = "42000020", - - -- Opcode COP1. - mfc1_2 = "44000000TG", - cfc1_2 = "44400000TG", - mfhc1_2 = "44600000TG", - mtc1_2 = "44800000TG", - ctc1_2 = "44c00000TG", - mthc1_2 = "44e00000TG", - - bc1f_1 = "45000000B", - bc1f_2 = "45000000CB", - bc1t_1 = "45010000B", - bc1t_2 = "45010000CB", - bc1fl_1 = "45020000B", - bc1fl_2 = "45020000CB", - bc1tl_1 = "45030000B", - bc1tl_2 = "45030000CB", - - ["add.s_3"] = "46000000FGH", - ["sub.s_3"] = "46000001FGH", - ["mul.s_3"] = "46000002FGH", - ["div.s_3"] = "46000003FGH", - ["sqrt.s_2"] = "46000004FG", - ["abs.s_2"] = "46000005FG", - ["mov.s_2"] = "46000006FG", - ["neg.s_2"] = "46000007FG", - ["round.l.s_2"] = "46000008FG", - ["trunc.l.s_2"] = "46000009FG", - ["ceil.l.s_2"] = "4600000aFG", - ["floor.l.s_2"] = "4600000bFG", - ["round.w.s_2"] = "4600000cFG", - ["trunc.w.s_2"] = "4600000dFG", - ["ceil.w.s_2"] = "4600000eFG", - ["floor.w.s_2"] = "4600000fFG", - ["movf.s_2"] = "46000011FG", - ["movf.s_3"] = "46000011FGC", - ["movt.s_2"] = "46010011FG", - ["movt.s_3"] = "46010011FGC", - ["movz.s_3"] = "46000012FGT", - ["movn.s_3"] = "46000013FGT", - ["recip.s_2"] = "46000015FG", - ["rsqrt.s_2"] = "46000016FG", - ["cvt.d.s_2"] = "46000021FG", - ["cvt.w.s_2"] = "46000024FG", - ["cvt.l.s_2"] = "46000025FG", - ["cvt.ps.s_3"] = "46000026FGH", - ["c.f.s_2"] = "46000030GH", - ["c.f.s_3"] = "46000030VGH", - ["c.un.s_2"] = "46000031GH", - ["c.un.s_3"] = "46000031VGH", - ["c.eq.s_2"] = "46000032GH", - ["c.eq.s_3"] = "46000032VGH", - ["c.ueq.s_2"] = "46000033GH", - ["c.ueq.s_3"] = "46000033VGH", - ["c.olt.s_2"] = "46000034GH", - ["c.olt.s_3"] = "46000034VGH", - ["c.ult.s_2"] = "46000035GH", - ["c.ult.s_3"] = "46000035VGH", - ["c.ole.s_2"] = "46000036GH", - ["c.ole.s_3"] = "46000036VGH", - ["c.ule.s_2"] = "46000037GH", - ["c.ule.s_3"] = "46000037VGH", - ["c.sf.s_2"] = "46000038GH", - ["c.sf.s_3"] = "46000038VGH", - ["c.ngle.s_2"] = "46000039GH", - ["c.ngle.s_3"] = "46000039VGH", - ["c.seq.s_2"] = "4600003aGH", - ["c.seq.s_3"] = "4600003aVGH", - ["c.ngl.s_2"] = "4600003bGH", - ["c.ngl.s_3"] = "4600003bVGH", - ["c.lt.s_2"] = "4600003cGH", - ["c.lt.s_3"] = "4600003cVGH", - ["c.nge.s_2"] = "4600003dGH", - ["c.nge.s_3"] = "4600003dVGH", - ["c.le.s_2"] = "4600003eGH", - ["c.le.s_3"] = "4600003eVGH", - ["c.ngt.s_2"] = "4600003fGH", - ["c.ngt.s_3"] = "4600003fVGH", - - ["add.d_3"] = "46200000FGH", - ["sub.d_3"] = "46200001FGH", - ["mul.d_3"] = "46200002FGH", - ["div.d_3"] = "46200003FGH", - ["sqrt.d_2"] = "46200004FG", - ["abs.d_2"] = "46200005FG", - ["mov.d_2"] = "46200006FG", - ["neg.d_2"] = "46200007FG", - ["round.l.d_2"] = "46200008FG", - ["trunc.l.d_2"] = "46200009FG", - ["ceil.l.d_2"] = "4620000aFG", - ["floor.l.d_2"] = "4620000bFG", - ["round.w.d_2"] = "4620000cFG", - ["trunc.w.d_2"] = "4620000dFG", - ["ceil.w.d_2"] = "4620000eFG", - ["floor.w.d_2"] = "4620000fFG", - ["movf.d_2"] = "46200011FG", - ["movf.d_3"] = "46200011FGC", - ["movt.d_2"] = "46210011FG", - ["movt.d_3"] = "46210011FGC", - ["movz.d_3"] = "46200012FGT", - ["movn.d_3"] = "46200013FGT", - ["recip.d_2"] = "46200015FG", - ["rsqrt.d_2"] = "46200016FG", - ["cvt.s.d_2"] = "46200020FG", - ["cvt.w.d_2"] = "46200024FG", - ["cvt.l.d_2"] = "46200025FG", - ["c.f.d_2"] = "46200030GH", - ["c.f.d_3"] = "46200030VGH", - ["c.un.d_2"] = "46200031GH", - ["c.un.d_3"] = "46200031VGH", - ["c.eq.d_2"] = "46200032GH", - ["c.eq.d_3"] = "46200032VGH", - ["c.ueq.d_2"] = "46200033GH", - ["c.ueq.d_3"] = "46200033VGH", - ["c.olt.d_2"] = "46200034GH", - ["c.olt.d_3"] = "46200034VGH", - ["c.ult.d_2"] = "46200035GH", - ["c.ult.d_3"] = "46200035VGH", - ["c.ole.d_2"] = "46200036GH", - ["c.ole.d_3"] = "46200036VGH", - ["c.ule.d_2"] = "46200037GH", - ["c.ule.d_3"] = "46200037VGH", - ["c.sf.d_2"] = "46200038GH", - ["c.sf.d_3"] = "46200038VGH", - ["c.ngle.d_2"] = "46200039GH", - ["c.ngle.d_3"] = "46200039VGH", - ["c.seq.d_2"] = "4620003aGH", - ["c.seq.d_3"] = "4620003aVGH", - ["c.ngl.d_2"] = "4620003bGH", - ["c.ngl.d_3"] = "4620003bVGH", - ["c.lt.d_2"] = "4620003cGH", - ["c.lt.d_3"] = "4620003cVGH", - ["c.nge.d_2"] = "4620003dGH", - ["c.nge.d_3"] = "4620003dVGH", - ["c.le.d_2"] = "4620003eGH", - ["c.le.d_3"] = "4620003eVGH", - ["c.ngt.d_2"] = "4620003fGH", - ["c.ngt.d_3"] = "4620003fVGH", - - ["add.ps_3"] = "46c00000FGH", - ["sub.ps_3"] = "46c00001FGH", - ["mul.ps_3"] = "46c00002FGH", - ["abs.ps_2"] = "46c00005FG", - ["mov.ps_2"] = "46c00006FG", - ["neg.ps_2"] = "46c00007FG", - ["movf.ps_2"] = "46c00011FG", - ["movf.ps_3"] = "46c00011FGC", - ["movt.ps_2"] = "46c10011FG", - ["movt.ps_3"] = "46c10011FGC", - ["movz.ps_3"] = "46c00012FGT", - ["movn.ps_3"] = "46c00013FGT", - ["cvt.s.pu_2"] = "46c00020FG", - ["cvt.s.pl_2"] = "46c00028FG", - ["pll.ps_3"] = "46c0002cFGH", - ["plu.ps_3"] = "46c0002dFGH", - ["pul.ps_3"] = "46c0002eFGH", - ["puu.ps_3"] = "46c0002fFGH", - ["c.f.ps_2"] = "46c00030GH", - ["c.f.ps_3"] = "46c00030VGH", - ["c.un.ps_2"] = "46c00031GH", - ["c.un.ps_3"] = "46c00031VGH", - ["c.eq.ps_2"] = "46c00032GH", - ["c.eq.ps_3"] = "46c00032VGH", - ["c.ueq.ps_2"] = "46c00033GH", - ["c.ueq.ps_3"] = "46c00033VGH", - ["c.olt.ps_2"] = "46c00034GH", - ["c.olt.ps_3"] = "46c00034VGH", - ["c.ult.ps_2"] = "46c00035GH", - ["c.ult.ps_3"] = "46c00035VGH", - ["c.ole.ps_2"] = "46c00036GH", - ["c.ole.ps_3"] = "46c00036VGH", - ["c.ule.ps_2"] = "46c00037GH", - ["c.ule.ps_3"] = "46c00037VGH", - ["c.sf.ps_2"] = "46c00038GH", - ["c.sf.ps_3"] = "46c00038VGH", - ["c.ngle.ps_2"] = "46c00039GH", - ["c.ngle.ps_3"] = "46c00039VGH", - ["c.seq.ps_2"] = "46c0003aGH", - ["c.seq.ps_3"] = "46c0003aVGH", - ["c.ngl.ps_2"] = "46c0003bGH", - ["c.ngl.ps_3"] = "46c0003bVGH", - ["c.lt.ps_2"] = "46c0003cGH", - ["c.lt.ps_3"] = "46c0003cVGH", - ["c.nge.ps_2"] = "46c0003dGH", - ["c.nge.ps_3"] = "46c0003dVGH", - ["c.le.ps_2"] = "46c0003eGH", - ["c.le.ps_3"] = "46c0003eVGH", - ["c.ngt.ps_2"] = "46c0003fGH", - ["c.ngt.ps_3"] = "46c0003fVGH", - - ["cvt.s.w_2"] = "46800020FG", - ["cvt.d.w_2"] = "46800021FG", - - ["cvt.s.l_2"] = "46a00020FG", - ["cvt.d.l_2"] = "46a00021FG", - - -- Opcode COP1X. - lwxc1_2 = "4c000000FX", - ldxc1_2 = "4c000001FX", - luxc1_2 = "4c000005FX", - swxc1_2 = "4c000008FX", - sdxc1_2 = "4c000009FX", - suxc1_2 = "4c00000dFX", - prefx_2 = "4c00000fMX", - ["alnv.ps_4"] = "4c00001eFGHS", - ["madd.s_4"] = "4c000020FRGH", - ["madd.d_4"] = "4c000021FRGH", - ["madd.ps_4"] = "4c000026FRGH", - ["msub.s_4"] = "4c000028FRGH", - ["msub.d_4"] = "4c000029FRGH", - ["msub.ps_4"] = "4c00002eFRGH", - ["nmadd.s_4"] = "4c000030FRGH", - ["nmadd.d_4"] = "4c000031FRGH", - ["nmadd.ps_4"] = "4c000036FRGH", - ["nmsub.s_4"] = "4c000038FRGH", - ["nmsub.d_4"] = "4c000039FRGH", - ["nmsub.ps_4"] = "4c00003eFRGH", -} - ------------------------------------------------------------------------------- - -local function parse_gpr(expr) - local tname, ovreg = match(expr, "^([%w_]+):(r[1-3]?[0-9])$") - local tp = map_type[tname or expr] - if tp then - local reg = ovreg or tp.reg - if not reg then - werror("type `"..(tname or expr).."' needs a register override") - end - expr = reg - end - local r = match(expr, "^r([1-3]?[0-9])$") - if r then - r = tonumber(r) - if r <= 31 then return r, tp end - end - werror("bad register name `"..expr.."'") -end - -local function parse_fpr(expr) - local r = match(expr, "^f([1-3]?[0-9])$") - if r then - r = tonumber(r) - if r <= 31 then return r end - end - werror("bad register name `"..expr.."'") -end - -local function parse_imm(imm, bits, shift, scale, signed) - local n = tonumber(imm) - if n then - local m = sar(n, scale) - if shl(m, scale) == n then - if signed then - local s = sar(m, bits-1) - if s == 0 then return shl(m, shift) - elseif s == -1 then return shl(m + shl(1, bits), shift) end - else - if sar(m, bits) == 0 then return shl(m, shift) end - end - end - werror("out of range immediate `"..imm.."'") - elseif match(imm, "^[rf]([1-3]?[0-9])$") or - match(imm, "^([%w_]+):([rf][1-3]?[0-9])$") then - werror("expected immediate operand, got register") - else - waction("IMM", (signed and 32768 or 0)+scale*1024+bits*32+shift, imm) - return 0 - end -end - -local function parse_disp(disp) - local imm, reg = match(disp, "^(.*)%(([%w_:]+)%)$") - if imm then - local r = shl(parse_gpr(reg), 21) - local extname = match(imm, "^extern%s+(%S+)$") - if extname then - waction("REL_EXT", map_extern[extname], nil, 1) - return r - else - return r + parse_imm(imm, 16, 0, 0, true) - end - end - local reg, tailr = match(disp, "^([%w_:]+)%s*(.*)$") - if reg and tailr ~= "" then - local r, tp = parse_gpr(reg) - if tp then - waction("IMM", 32768+16*32, format(tp.ctypefmt, tailr)) - return shl(r, 21) - end - end - werror("bad displacement `"..disp.."'") -end - -local function parse_index(idx) - local rt, rs = match(idx, "^(.*)%(([%w_:]+)%)$") - if rt then - rt = parse_gpr(rt) - rs = parse_gpr(rs) - return shl(rt, 16) + shl(rs, 21) - end - werror("bad index `"..idx.."'") -end - -local function parse_label(label, def) - local prefix = sub(label, 1, 2) - -- =>label (pc label reference) - if prefix == "=>" then - return "PC", 0, sub(label, 3) - end - -- ->name (global label reference) - if prefix == "->" then - return "LG", map_global[sub(label, 3)] - end - if def then - -- [1-9] (local label definition) - if match(label, "^[1-9]$") then - return "LG", 10+tonumber(label) - end - else - -- [<>][1-9] (local label reference) - local dir, lnum = match(label, "^([<>])([1-9])$") - if dir then -- Fwd: 1-9, Bkwd: 11-19. - return "LG", lnum + (dir == ">" and 0 or 10) - end - -- extern label (extern label reference) - local extname = match(label, "^extern%s+(%S+)$") - if extname then - return "EXT", map_extern[extname] - end - end - werror("bad label `"..label.."'") -end - ------------------------------------------------------------------------------- - --- Handle opcodes defined with template strings. -map_op[".template__"] = function(params, template, nparams) - if not params then return sub(template, 9) end - local op = tonumber(sub(template, 1, 8), 16) - local n = 1 - - -- Limit number of section buffer positions used by a single dasm_put(). - -- A single opcode needs a maximum of 2 positions (ins/ext). - if secpos+2 > maxsecpos then wflush() end - local pos = wpos() - - -- Process each character. - for p in gmatch(sub(template, 9), ".") do - if p == "D" then - op = op + shl(parse_gpr(params[n]), 11); n = n + 1 - elseif p == "T" then - op = op + shl(parse_gpr(params[n]), 16); n = n + 1 - elseif p == "S" then - op = op + shl(parse_gpr(params[n]), 21); n = n + 1 - elseif p == "F" then - op = op + shl(parse_fpr(params[n]), 6); n = n + 1 - elseif p == "G" then - op = op + shl(parse_fpr(params[n]), 11); n = n + 1 - elseif p == "H" then - op = op + shl(parse_fpr(params[n]), 16); n = n + 1 - elseif p == "R" then - op = op + shl(parse_fpr(params[n]), 21); n = n + 1 - elseif p == "I" then - op = op + parse_imm(params[n], 16, 0, 0, true); n = n + 1 - elseif p == "U" then - op = op + parse_imm(params[n], 16, 0, 0, false); n = n + 1 - elseif p == "O" then - op = op + parse_disp(params[n]); n = n + 1 - elseif p == "X" then - op = op + parse_index(params[n]); n = n + 1 - elseif p == "B" or p == "J" then - local mode, n, s = parse_label(params[n], false) - if p == "B" then n = n + 2048 end - waction("REL_"..mode, n, s, 1) - n = n + 1 - elseif p == "A" then - op = op + parse_imm(params[n], 5, 6, 0, false); n = n + 1 - elseif p == "M" then - op = op + parse_imm(params[n], 5, 11, 0, false); n = n + 1 - elseif p == "N" then - op = op + parse_imm(params[n], 5, 16, 0, false); n = n + 1 - elseif p == "C" then - op = op + parse_imm(params[n], 3, 18, 0, false); n = n + 1 - elseif p == "V" then - op = op + parse_imm(params[n], 3, 8, 0, false); n = n + 1 - elseif p == "W" then - op = op + parse_imm(params[n], 3, 0, 0, false); n = n + 1 - elseif p == "Y" then - op = op + parse_imm(params[n], 20, 6, 0, false); n = n + 1 - elseif p == "Z" then - op = op + parse_imm(params[n], 10, 6, 0, false); n = n + 1 - elseif p == "=" then - op = op + shl(band(op, 0xf800), 5) -- Copy D to T for clz, clo. - else - assert(false) - end - end - wputpos(pos, op) -end - ------------------------------------------------------------------------------- - --- Pseudo-opcode to mark the position where the action list is to be emitted. -map_op[".actionlist_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeactions(out, name) end) -end - --- Pseudo-opcode to mark the position where the global enum is to be emitted. -map_op[".globals_1"] = function(params) - if not params then return "prefix" end - local prefix = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobals(out, prefix) end) -end - --- Pseudo-opcode to mark the position where the global names are to be emitted. -map_op[".globalnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobalnames(out, name) end) -end - --- Pseudo-opcode to mark the position where the extern names are to be emitted. -map_op[".externnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeexternnames(out, name) end) -end - ------------------------------------------------------------------------------- - --- Label pseudo-opcode (converted from trailing colon form). -map_op[".label_1"] = function(params) - if not params then return "[1-9] | ->global | =>pcexpr" end - if secpos+1 > maxsecpos then wflush() end - local mode, n, s = parse_label(params[1], true) - if mode == "EXT" then werror("bad label definition") end - waction("LABEL_"..mode, n, s, 1) -end - ------------------------------------------------------------------------------- - --- Pseudo-opcodes for data storage. -map_op[".long_*"] = function(params) - if not params then return "imm..." end - for _,p in ipairs(params) do - local n = tonumber(p) - if not n then werror("bad immediate `"..p.."'") end - if n < 0 then n = n + 2^32 end - wputw(n) - if secpos+2 > maxsecpos then wflush() end - end -end - --- Alignment pseudo-opcode. -map_op[".align_1"] = function(params) - if not params then return "numpow2" end - if secpos+1 > maxsecpos then wflush() end - local align = tonumber(params[1]) - if align then - local x = align - -- Must be a power of 2 in the range (2 ... 256). - for i=1,8 do - x = x / 2 - if x == 1 then - waction("ALIGN", align-1, nil, 1) -- Action byte is 2**n-1. - return - end - end - end - werror("bad alignment") -end - ------------------------------------------------------------------------------- - --- Pseudo-opcode for (primitive) type definitions (map to C types). -map_op[".type_3"] = function(params, nparams) - if not params then - return nparams == 2 and "name, ctype" or "name, ctype, reg" - end - local name, ctype, reg = params[1], params[2], params[3] - if not match(name, "^[%a_][%w_]*$") then - werror("bad type name `"..name.."'") - end - local tp = map_type[name] - if tp then - werror("duplicate type `"..name.."'") - end - -- Add #type to defines. A bit unclean to put it in map_archdef. - map_archdef["#"..name] = "sizeof("..ctype..")" - -- Add new type and emit shortcut define. - local num = ctypenum + 1 - map_type[name] = { - ctype = ctype, - ctypefmt = format("Dt%X(%%s)", num), - reg = reg, - } - wline(format("#define Dt%X(_V) (int)(ptrdiff_t)&(((%s *)0)_V)", num, ctype)) - ctypenum = num -end -map_op[".type_2"] = map_op[".type_3"] - --- Dump type definitions. -local function dumptypes(out, lvl) - local t = {} - for name in pairs(map_type) do t[#t+1] = name end - sort(t) - out:write("Type definitions:\n") - for _,name in ipairs(t) do - local tp = map_type[name] - local reg = tp.reg or "" - out:write(format(" %-20s %-20s %s\n", name, tp.ctype, reg)) - end - out:write("\n") -end - ------------------------------------------------------------------------------- - --- Set the current section. -function _M.section(num) - waction("SECTION", num) - wflush(true) -- SECTION is a terminal action. -end - ------------------------------------------------------------------------------- - --- Dump architecture description. -function _M.dumparch(out) - out:write(format("DynASM %s version %s, released %s\n\n", - _info.arch, _info.version, _info.release)) - dumpactions(out) -end - --- Dump all user defined elements. -function _M.dumpdef(out, lvl) - dumptypes(out, lvl) - dumpglobals(out, lvl) - dumpexterns(out, lvl) -end - ------------------------------------------------------------------------------- - --- Pass callbacks from/to the DynASM core. -function _M.passcb(wl, we, wf, ww) - wline, werror, wfatal, wwarn = wl, we, wf, ww - return wflush -end - --- Setup the arch-specific module. -function _M.setup(arch, opt) - g_arch, g_opt = arch, opt -end - --- Merge the core maps and the arch-specific maps. -function _M.mergemaps(map_coreop, map_def) - setmetatable(map_op, { __index = map_coreop }) - setmetatable(map_def, { __index = map_archdef }) - return map_op, map_def -end - -return _M - ------------------------------------------------------------------------------- - diff --git a/deps/luajit/dynasm/dasm_ppc.h b/deps/luajit/dynasm/dasm_ppc.h deleted file mode 100644 index 7df4936..0000000 --- a/deps/luajit/dynasm/dasm_ppc.h +++ /dev/null @@ -1,412 +0,0 @@ -/* -** DynASM PPC encoding engine. -** Copyright (C) 2005-2015 Mike Pall. All rights reserved. -** Released under the MIT license. See dynasm.lua for full copyright notice. -*/ - -#include -#include -#include -#include - -#define DASM_ARCH "ppc" - -#ifndef DASM_EXTERN -#define DASM_EXTERN(a,b,c,d) 0 -#endif - -/* Action definitions. */ -enum { - DASM_STOP, DASM_SECTION, DASM_ESC, DASM_REL_EXT, - /* The following actions need a buffer position. */ - DASM_ALIGN, DASM_REL_LG, DASM_LABEL_LG, - /* The following actions also have an argument. */ - DASM_REL_PC, DASM_LABEL_PC, DASM_IMM, - DASM__MAX -}; - -/* Maximum number of section buffer positions for a single dasm_put() call. */ -#define DASM_MAXSECPOS 25 - -/* DynASM encoder status codes. Action list offset or number are or'ed in. */ -#define DASM_S_OK 0x00000000 -#define DASM_S_NOMEM 0x01000000 -#define DASM_S_PHASE 0x02000000 -#define DASM_S_MATCH_SEC 0x03000000 -#define DASM_S_RANGE_I 0x11000000 -#define DASM_S_RANGE_SEC 0x12000000 -#define DASM_S_RANGE_LG 0x13000000 -#define DASM_S_RANGE_PC 0x14000000 -#define DASM_S_RANGE_REL 0x15000000 -#define DASM_S_UNDEF_LG 0x21000000 -#define DASM_S_UNDEF_PC 0x22000000 - -/* Macros to convert positions (8 bit section + 24 bit index). */ -#define DASM_POS2IDX(pos) ((pos)&0x00ffffff) -#define DASM_POS2BIAS(pos) ((pos)&0xff000000) -#define DASM_SEC2POS(sec) ((sec)<<24) -#define DASM_POS2SEC(pos) ((pos)>>24) -#define DASM_POS2PTR(D, pos) (D->sections[DASM_POS2SEC(pos)].rbuf + (pos)) - -/* Action list type. */ -typedef const unsigned int *dasm_ActList; - -/* Per-section structure. */ -typedef struct dasm_Section { - int *rbuf; /* Biased buffer pointer (negative section bias). */ - int *buf; /* True buffer pointer. */ - size_t bsize; /* Buffer size in bytes. */ - int pos; /* Biased buffer position. */ - int epos; /* End of biased buffer position - max single put. */ - int ofs; /* Byte offset into section. */ -} dasm_Section; - -/* Core structure holding the DynASM encoding state. */ -struct dasm_State { - size_t psize; /* Allocated size of this structure. */ - dasm_ActList actionlist; /* Current actionlist pointer. */ - int *lglabels; /* Local/global chain/pos ptrs. */ - size_t lgsize; - int *pclabels; /* PC label chains/pos ptrs. */ - size_t pcsize; - void **globals; /* Array of globals (bias -10). */ - dasm_Section *section; /* Pointer to active section. */ - size_t codesize; /* Total size of all code sections. */ - int maxsection; /* 0 <= sectionidx < maxsection. */ - int status; /* Status code. */ - dasm_Section sections[1]; /* All sections. Alloc-extended. */ -}; - -/* The size of the core structure depends on the max. number of sections. */ -#define DASM_PSZ(ms) (sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section)) - - -/* Initialize DynASM state. */ -void dasm_init(Dst_DECL, int maxsection) -{ - dasm_State *D; - size_t psz = 0; - int i; - Dst_REF = NULL; - DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection)); - D = Dst_REF; - D->psize = psz; - D->lglabels = NULL; - D->lgsize = 0; - D->pclabels = NULL; - D->pcsize = 0; - D->globals = NULL; - D->maxsection = maxsection; - for (i = 0; i < maxsection; i++) { - D->sections[i].buf = NULL; /* Need this for pass3. */ - D->sections[i].rbuf = D->sections[i].buf - DASM_SEC2POS(i); - D->sections[i].bsize = 0; - D->sections[i].epos = 0; /* Wrong, but is recalculated after resize. */ - } -} - -/* Free DynASM state. */ -void dasm_free(Dst_DECL) -{ - dasm_State *D = Dst_REF; - int i; - for (i = 0; i < D->maxsection; i++) - if (D->sections[i].buf) - DASM_M_FREE(Dst, D->sections[i].buf, D->sections[i].bsize); - if (D->pclabels) DASM_M_FREE(Dst, D->pclabels, D->pcsize); - if (D->lglabels) DASM_M_FREE(Dst, D->lglabels, D->lgsize); - DASM_M_FREE(Dst, D, D->psize); -} - -/* Setup global label array. Must be called before dasm_setup(). */ -void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl) -{ - dasm_State *D = Dst_REF; - D->globals = gl - 10; /* Negative bias to compensate for locals. */ - DASM_M_GROW(Dst, int, D->lglabels, D->lgsize, (10+maxgl)*sizeof(int)); -} - -/* Grow PC label array. Can be called after dasm_setup(), too. */ -void dasm_growpc(Dst_DECL, unsigned int maxpc) -{ - dasm_State *D = Dst_REF; - size_t osz = D->pcsize; - DASM_M_GROW(Dst, int, D->pclabels, D->pcsize, maxpc*sizeof(int)); - memset((void *)(((unsigned char *)D->pclabels)+osz), 0, D->pcsize-osz); -} - -/* Setup encoder. */ -void dasm_setup(Dst_DECL, const void *actionlist) -{ - dasm_State *D = Dst_REF; - int i; - D->actionlist = (dasm_ActList)actionlist; - D->status = DASM_S_OK; - D->section = &D->sections[0]; - memset((void *)D->lglabels, 0, D->lgsize); - if (D->pclabels) memset((void *)D->pclabels, 0, D->pcsize); - for (i = 0; i < D->maxsection; i++) { - D->sections[i].pos = DASM_SEC2POS(i); - D->sections[i].ofs = 0; - } -} - - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) { \ - D->status = DASM_S_##st|(p-D->actionlist-1); return; } } while (0) -#define CKPL(kind, st) \ - do { if ((size_t)((char *)pl-(char *)D->kind##labels) >= D->kind##size) { \ - D->status = DASM_S_RANGE_##st|(p-D->actionlist-1); return; } } while (0) -#else -#define CK(x, st) ((void)0) -#define CKPL(kind, st) ((void)0) -#endif - -/* Pass 1: Store actions and args, link branches/labels, estimate offsets. */ -void dasm_put(Dst_DECL, int start, ...) -{ - va_list ap; - dasm_State *D = Dst_REF; - dasm_ActList p = D->actionlist + start; - dasm_Section *sec = D->section; - int pos = sec->pos, ofs = sec->ofs; - int *b; - - if (pos >= sec->epos) { - DASM_M_GROW(Dst, int, sec->buf, sec->bsize, - sec->bsize + 2*DASM_MAXSECPOS*sizeof(int)); - sec->rbuf = sec->buf - DASM_POS2BIAS(pos); - sec->epos = (int)sec->bsize/sizeof(int) - DASM_MAXSECPOS+DASM_POS2BIAS(pos); - } - - b = sec->rbuf; - b[pos++] = start; - - va_start(ap, start); - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16); - if (action >= DASM__MAX) { - ofs += 4; - } else { - int *pl, n = action >= DASM_REL_PC ? va_arg(ap, int) : 0; - switch (action) { - case DASM_STOP: goto stop; - case DASM_SECTION: - n = (ins & 255); CK(n < D->maxsection, RANGE_SEC); - D->section = &D->sections[n]; goto stop; - case DASM_ESC: p++; ofs += 4; break; - case DASM_REL_EXT: break; - case DASM_ALIGN: ofs += (ins & 255); b[pos++] = ofs; break; - case DASM_REL_LG: - n = (ins & 2047) - 10; pl = D->lglabels + n; - /* Bkwd rel or global. */ - if (n >= 0) { CK(n>=10||*pl<0, RANGE_LG); CKPL(lg, LG); goto putrel; } - pl += 10; n = *pl; - if (n < 0) n = 0; /* Start new chain for fwd rel if label exists. */ - goto linkrel; - case DASM_REL_PC: - pl = D->pclabels + n; CKPL(pc, PC); - putrel: - n = *pl; - if (n < 0) { /* Label exists. Get label pos and store it. */ - b[pos] = -n; - } else { - linkrel: - b[pos] = n; /* Else link to rel chain, anchored at label. */ - *pl = pos; - } - pos++; - break; - case DASM_LABEL_LG: - pl = D->lglabels + (ins & 2047) - 10; CKPL(lg, LG); goto putlabel; - case DASM_LABEL_PC: - pl = D->pclabels + n; CKPL(pc, PC); - putlabel: - n = *pl; /* n > 0: Collapse rel chain and replace with label pos. */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = pos; - } - *pl = -pos; /* Label exists now. */ - b[pos++] = ofs; /* Store pass1 offset estimate. */ - break; - case DASM_IMM: -#ifdef DASM_CHECKS - CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I); -#endif - n >>= ((ins>>10)&31); -#ifdef DASM_CHECKS - if (ins & 0x8000) - CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I); - else - CK((n>>((ins>>5)&31)) == 0, RANGE_I); -#endif - b[pos++] = n; - break; - } - } - } -stop: - va_end(ap); - sec->pos = pos; - sec->ofs = ofs; -} -#undef CK - -/* Pass 2: Link sections, shrink aligns, fix label offsets. */ -int dasm_link(Dst_DECL, size_t *szp) -{ - dasm_State *D = Dst_REF; - int secnum; - int ofs = 0; - -#ifdef DASM_CHECKS - *szp = 0; - if (D->status != DASM_S_OK) return D->status; - { - int pc; - for (pc = 0; pc*sizeof(int) < D->pcsize; pc++) - if (D->pclabels[pc] > 0) return DASM_S_UNDEF_PC|pc; - } -#endif - - { /* Handle globals not defined in this translation unit. */ - int idx; - for (idx = 20; idx*sizeof(int) < D->lgsize; idx++) { - int n = D->lglabels[idx]; - /* Undefined label: Collapse rel chain and replace with marker (< 0). */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = -idx; } - } - } - - /* Combine all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->rbuf; - int pos = DASM_SEC2POS(secnum); - int lastpos = sec->pos; - - while (pos != lastpos) { - dasm_ActList p = D->actionlist + b[pos++]; - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16); - switch (action) { - case DASM_STOP: case DASM_SECTION: goto stop; - case DASM_ESC: p++; break; - case DASM_REL_EXT: break; - case DASM_ALIGN: ofs -= (b[pos++] + ofs) & (ins & 255); break; - case DASM_REL_LG: case DASM_REL_PC: pos++; break; - case DASM_LABEL_LG: case DASM_LABEL_PC: b[pos++] += ofs; break; - case DASM_IMM: pos++; break; - } - } - stop: (void)0; - } - ofs += sec->ofs; /* Next section starts right after current section. */ - } - - D->codesize = ofs; /* Total size of all code sections */ - *szp = ofs; - return DASM_S_OK; -} - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) return DASM_S_##st|(p-D->actionlist-1); } while (0) -#else -#define CK(x, st) ((void)0) -#endif - -/* Pass 3: Encode sections. */ -int dasm_encode(Dst_DECL, void *buffer) -{ - dasm_State *D = Dst_REF; - char *base = (char *)buffer; - unsigned int *cp = (unsigned int *)buffer; - int secnum; - - /* Encode all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->buf; - int *endb = sec->rbuf + sec->pos; - - while (b != endb) { - dasm_ActList p = D->actionlist + *b++; - while (1) { - unsigned int ins = *p++; - unsigned int action = (ins >> 16); - int n = (action >= DASM_ALIGN && action < DASM__MAX) ? *b++ : 0; - switch (action) { - case DASM_STOP: case DASM_SECTION: goto stop; - case DASM_ESC: *cp++ = *p++; break; - case DASM_REL_EXT: - n = DASM_EXTERN(Dst, (unsigned char *)cp, (ins & 2047), 1) - 4; - goto patchrel; - case DASM_ALIGN: - ins &= 255; while ((((char *)cp - base) & ins)) *cp++ = 0x60000000; - break; - case DASM_REL_LG: - CK(n >= 0, UNDEF_LG); - case DASM_REL_PC: - CK(n >= 0, UNDEF_PC); - n = *DASM_POS2PTR(D, n) - (int)((char *)cp - base); - patchrel: - CK((n & 3) == 0 && - (((n+4) + ((ins & 2048) ? 0x00008000 : 0x02000000)) >> - ((ins & 2048) ? 16 : 26)) == 0, RANGE_REL); - cp[-1] |= ((n+4) & ((ins & 2048) ? 0x0000fffc: 0x03fffffc)); - break; - case DASM_LABEL_LG: - ins &= 2047; if (ins >= 20) D->globals[ins-10] = (void *)(base + n); - break; - case DASM_LABEL_PC: break; - case DASM_IMM: - cp[-1] |= (n & ((1<<((ins>>5)&31))-1)) << (ins&31); - break; - default: *cp++ = ins; break; - } - } - stop: (void)0; - } - } - - if (base + D->codesize != (char *)cp) /* Check for phase errors. */ - return DASM_S_PHASE; - return DASM_S_OK; -} -#undef CK - -/* Get PC label offset. */ -int dasm_getpclabel(Dst_DECL, unsigned int pc) -{ - dasm_State *D = Dst_REF; - if (pc*sizeof(int) < D->pcsize) { - int pos = D->pclabels[pc]; - if (pos < 0) return *DASM_POS2PTR(D, -pos); - if (pos > 0) return -1; /* Undefined. */ - } - return -2; /* Unused or out of range. */ -} - -#ifdef DASM_CHECKS -/* Optional sanity checker to call between isolated encoding steps. */ -int dasm_checkstep(Dst_DECL, int secmatch) -{ - dasm_State *D = Dst_REF; - if (D->status == DASM_S_OK) { - int i; - for (i = 1; i <= 9; i++) { - if (D->lglabels[i] > 0) { D->status = DASM_S_UNDEF_LG|i; break; } - D->lglabels[i] = 0; - } - } - if (D->status == DASM_S_OK && secmatch >= 0 && - D->section != &D->sections[secmatch]) - D->status = DASM_S_MATCH_SEC|(D->section-D->sections); - return D->status; -} -#endif - diff --git a/deps/luajit/dynasm/dasm_ppc.lua b/deps/luajit/dynasm/dasm_ppc.lua deleted file mode 100644 index 91f4ff9..0000000 --- a/deps/luajit/dynasm/dasm_ppc.lua +++ /dev/null @@ -1,1249 +0,0 @@ ------------------------------------------------------------------------------- --- DynASM PPC module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- See dynasm.lua for full copyright notice. ------------------------------------------------------------------------------- - --- Module information: -local _info = { - arch = "ppc", - description = "DynASM PPC module", - version = "1.3.0", - vernum = 10300, - release = "2011-05-05", - author = "Mike Pall", - license = "MIT", -} - --- Exported glue functions for the arch-specific module. -local _M = { _info = _info } - --- Cache library functions. -local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs -local assert, setmetatable = assert, setmetatable -local _s = string -local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char -local match, gmatch = _s.match, _s.gmatch -local concat, sort = table.concat, table.sort -local bit = bit or require("bit") -local band, shl, shr, sar = bit.band, bit.lshift, bit.rshift, bit.arshift -local tohex = bit.tohex - --- Inherited tables and callbacks. -local g_opt, g_arch -local wline, werror, wfatal, wwarn - --- Action name list. --- CHECK: Keep this in sync with the C code! -local action_names = { - "STOP", "SECTION", "ESC", "REL_EXT", - "ALIGN", "REL_LG", "LABEL_LG", - "REL_PC", "LABEL_PC", "IMM", -} - --- Maximum number of section buffer positions for dasm_put(). --- CHECK: Keep this in sync with the C code! -local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines. - --- Action name -> action number. -local map_action = {} -for n,name in ipairs(action_names) do - map_action[name] = n-1 -end - --- Action list buffer. -local actlist = {} - --- Argument list for next dasm_put(). Start with offset 0 into action list. -local actargs = { 0 } - --- Current number of section buffer positions for dasm_put(). -local secpos = 1 - ------------------------------------------------------------------------------- - --- Dump action names and numbers. -local function dumpactions(out) - out:write("DynASM encoding engine action codes:\n") - for n,name in ipairs(action_names) do - local num = map_action[name] - out:write(format(" %-10s %02X %d\n", name, num, num)) - end - out:write("\n") -end - --- Write action list buffer as a huge static C array. -local function writeactions(out, name) - local nn = #actlist - if nn == 0 then nn = 1; actlist[0] = map_action.STOP end - out:write("static const unsigned int ", name, "[", nn, "] = {\n") - for i = 1,nn-1 do - assert(out:write("0x", tohex(actlist[i]), ",\n")) - end - assert(out:write("0x", tohex(actlist[nn]), "\n};\n\n")) -end - ------------------------------------------------------------------------------- - --- Add word to action list. -local function wputxw(n) - assert(n >= 0 and n <= 0xffffffff and n % 1 == 0, "word out of range") - actlist[#actlist+1] = n -end - --- Add action to list with optional arg. Advance buffer pos, too. -local function waction(action, val, a, num) - local w = assert(map_action[action], "bad action name `"..action.."'") - wputxw(w * 0x10000 + (val or 0)) - if a then actargs[#actargs+1] = a end - if a or num then secpos = secpos + (num or 1) end -end - --- Flush action list (intervening C code or buffer pos overflow). -local function wflush(term) - if #actlist == actargs[1] then return end -- Nothing to flush. - if not term then waction("STOP") end -- Terminate action list. - wline(format("dasm_put(Dst, %s);", concat(actargs, ", ")), true) - actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put(). - secpos = 1 -- The actionlist offset occupies a buffer position, too. -end - --- Put escaped word. -local function wputw(n) - if n <= 0xffffff then waction("ESC") end - wputxw(n) -end - --- Reserve position for word. -local function wpos() - local pos = #actlist+1 - actlist[pos] = "" - return pos -end - --- Store word to reserved position. -local function wputpos(pos, n) - assert(n >= 0 and n <= 0xffffffff and n % 1 == 0, "word out of range") - actlist[pos] = n -end - ------------------------------------------------------------------------------- - --- Global label name -> global label number. With auto assignment on 1st use. -local next_global = 20 -local map_global = setmetatable({}, { __index = function(t, name) - if not match(name, "^[%a_][%w_]*$") then werror("bad global label") end - local n = next_global - if n > 2047 then werror("too many global labels") end - next_global = n + 1 - t[name] = n - return n -end}) - --- Dump global labels. -local function dumpglobals(out, lvl) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("Global labels:\n") - for i=20,next_global-1 do - out:write(format(" %s\n", t[i])) - end - out:write("\n") -end - --- Write global label enum. -local function writeglobals(out, prefix) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("enum {\n") - for i=20,next_global-1 do - out:write(" ", prefix, t[i], ",\n") - end - out:write(" ", prefix, "_MAX\n};\n") -end - --- Write global label names. -local function writeglobalnames(out, name) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("static const char *const ", name, "[] = {\n") - for i=20,next_global-1 do - out:write(" \"", t[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Extern label name -> extern label number. With auto assignment on 1st use. -local next_extern = 0 -local map_extern_ = {} -local map_extern = setmetatable({}, { __index = function(t, name) - -- No restrictions on the name for now. - local n = next_extern - if n > 2047 then werror("too many extern labels") end - next_extern = n + 1 - t[name] = n - map_extern_[n] = name - return n -end}) - --- Dump extern labels. -local function dumpexterns(out, lvl) - out:write("Extern labels:\n") - for i=0,next_extern-1 do - out:write(format(" %s\n", map_extern_[i])) - end - out:write("\n") -end - --- Write extern label names. -local function writeexternnames(out, name) - out:write("static const char *const ", name, "[] = {\n") - for i=0,next_extern-1 do - out:write(" \"", map_extern_[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Arch-specific maps. -local map_archdef = { sp = "r1" } -- Ext. register name -> int. name. - -local map_type = {} -- Type name -> { ctype, reg } -local ctypenum = 0 -- Type number (for Dt... macros). - --- Reverse defines for registers. -function _M.revdef(s) - if s == "r1" then return "sp" end - return s -end - -local map_cond = { - lt = 0, gt = 1, eq = 2, so = 3, - ge = 4, le = 5, ne = 6, ns = 7, -} - ------------------------------------------------------------------------------- - --- Template strings for PPC instructions. -local map_op = { - tdi_3 = "08000000ARI", - twi_3 = "0c000000ARI", - mulli_3 = "1c000000RRI", - subfic_3 = "20000000RRI", - cmplwi_3 = "28000000XRU", - cmplwi_2 = "28000000-RU", - cmpldi_3 = "28200000XRU", - cmpldi_2 = "28200000-RU", - cmpwi_3 = "2c000000XRI", - cmpwi_2 = "2c000000-RI", - cmpdi_3 = "2c200000XRI", - cmpdi_2 = "2c200000-RI", - addic_3 = "30000000RRI", - ["addic._3"] = "34000000RRI", - addi_3 = "38000000RR0I", - li_2 = "38000000RI", - la_2 = "38000000RD", - addis_3 = "3c000000RR0I", - lis_2 = "3c000000RI", - lus_2 = "3c000000RU", - bc_3 = "40000000AAK", - bcl_3 = "40000001AAK", - bdnz_1 = "42000000K", - bdz_1 = "42400000K", - sc_0 = "44000000", - b_1 = "48000000J", - bl_1 = "48000001J", - rlwimi_5 = "50000000RR~AAA.", - rlwinm_5 = "54000000RR~AAA.", - rlwnm_5 = "5c000000RR~RAA.", - ori_3 = "60000000RR~U", - nop_0 = "60000000", - oris_3 = "64000000RR~U", - xori_3 = "68000000RR~U", - xoris_3 = "6c000000RR~U", - ["andi._3"] = "70000000RR~U", - ["andis._3"] = "74000000RR~U", - lwz_2 = "80000000RD", - lwzu_2 = "84000000RD", - lbz_2 = "88000000RD", - lbzu_2 = "8c000000RD", - stw_2 = "90000000RD", - stwu_2 = "94000000RD", - stb_2 = "98000000RD", - stbu_2 = "9c000000RD", - lhz_2 = "a0000000RD", - lhzu_2 = "a4000000RD", - lha_2 = "a8000000RD", - lhau_2 = "ac000000RD", - sth_2 = "b0000000RD", - sthu_2 = "b4000000RD", - lmw_2 = "b8000000RD", - stmw_2 = "bc000000RD", - lfs_2 = "c0000000FD", - lfsu_2 = "c4000000FD", - lfd_2 = "c8000000FD", - lfdu_2 = "cc000000FD", - stfs_2 = "d0000000FD", - stfsu_2 = "d4000000FD", - stfd_2 = "d8000000FD", - stfdu_2 = "dc000000FD", - ld_2 = "e8000000RD", -- NYI: displacement must be divisible by 4. - ldu_2 = "e8000001RD", - lwa_2 = "e8000002RD", - std_2 = "f8000000RD", - stdu_2 = "f8000001RD", - - -- Primary opcode 19: - mcrf_2 = "4c000000XX", - isync_0 = "4c00012c", - crnor_3 = "4c000042CCC", - crnot_2 = "4c000042CC=", - crandc_3 = "4c000102CCC", - crxor_3 = "4c000182CCC", - crclr_1 = "4c000182C==", - crnand_3 = "4c0001c2CCC", - crand_3 = "4c000202CCC", - creqv_3 = "4c000242CCC", - crset_1 = "4c000242C==", - crorc_3 = "4c000342CCC", - cror_3 = "4c000382CCC", - crmove_2 = "4c000382CC=", - bclr_2 = "4c000020AA", - bclrl_2 = "4c000021AA", - bcctr_2 = "4c000420AA", - bcctrl_2 = "4c000421AA", - blr_0 = "4e800020", - blrl_0 = "4e800021", - bctr_0 = "4e800420", - bctrl_0 = "4e800421", - - -- Primary opcode 31: - cmpw_3 = "7c000000XRR", - cmpw_2 = "7c000000-RR", - cmpd_3 = "7c200000XRR", - cmpd_2 = "7c200000-RR", - tw_3 = "7c000008ARR", - subfc_3 = "7c000010RRR.", - subc_3 = "7c000010RRR~.", - mulhdu_3 = "7c000012RRR.", - addc_3 = "7c000014RRR.", - mulhwu_3 = "7c000016RRR.", - isel_4 = "7c00001eRRRC", - isellt_3 = "7c00001eRRR", - iselgt_3 = "7c00005eRRR", - iseleq_3 = "7c00009eRRR", - mfcr_1 = "7c000026R", - mfocrf_2 = "7c100026RG", - mtcrf_2 = "7c000120GR", - mtocrf_2 = "7c100120GR", - lwarx_3 = "7c000028RR0R", - ldx_3 = "7c00002aRR0R", - lwzx_3 = "7c00002eRR0R", - slw_3 = "7c000030RR~R.", - cntlzw_2 = "7c000034RR~", - sld_3 = "7c000036RR~R.", - and_3 = "7c000038RR~R.", - cmplw_3 = "7c000040XRR", - cmplw_2 = "7c000040-RR", - cmpld_3 = "7c200040XRR", - cmpld_2 = "7c200040-RR", - subf_3 = "7c000050RRR.", - sub_3 = "7c000050RRR~.", - ldux_3 = "7c00006aRR0R", - dcbst_2 = "7c00006c-RR", - lwzux_3 = "7c00006eRR0R", - cntlzd_2 = "7c000074RR~", - andc_3 = "7c000078RR~R.", - td_3 = "7c000088ARR", - mulhd_3 = "7c000092RRR.", - mulhw_3 = "7c000096RRR.", - ldarx_3 = "7c0000a8RR0R", - dcbf_2 = "7c0000ac-RR", - lbzx_3 = "7c0000aeRR0R", - neg_2 = "7c0000d0RR.", - lbzux_3 = "7c0000eeRR0R", - popcntb_2 = "7c0000f4RR~", - not_2 = "7c0000f8RR~%.", - nor_3 = "7c0000f8RR~R.", - subfe_3 = "7c000110RRR.", - sube_3 = "7c000110RRR~.", - adde_3 = "7c000114RRR.", - stdx_3 = "7c00012aRR0R", - stwcx_3 = "7c00012cRR0R.", - stwx_3 = "7c00012eRR0R", - prtyw_2 = "7c000134RR~", - stdux_3 = "7c00016aRR0R", - stwux_3 = "7c00016eRR0R", - prtyd_2 = "7c000174RR~", - subfze_2 = "7c000190RR.", - addze_2 = "7c000194RR.", - stdcx_3 = "7c0001acRR0R.", - stbx_3 = "7c0001aeRR0R", - subfme_2 = "7c0001d0RR.", - mulld_3 = "7c0001d2RRR.", - addme_2 = "7c0001d4RR.", - mullw_3 = "7c0001d6RRR.", - dcbtst_2 = "7c0001ec-RR", - stbux_3 = "7c0001eeRR0R", - add_3 = "7c000214RRR.", - dcbt_2 = "7c00022c-RR", - lhzx_3 = "7c00022eRR0R", - eqv_3 = "7c000238RR~R.", - eciwx_3 = "7c00026cRR0R", - lhzux_3 = "7c00026eRR0R", - xor_3 = "7c000278RR~R.", - mfspefscr_1 = "7c0082a6R", - mfxer_1 = "7c0102a6R", - mflr_1 = "7c0802a6R", - mfctr_1 = "7c0902a6R", - lwax_3 = "7c0002aaRR0R", - lhax_3 = "7c0002aeRR0R", - mftb_1 = "7c0c42e6R", - mftbu_1 = "7c0d42e6R", - lwaux_3 = "7c0002eaRR0R", - lhaux_3 = "7c0002eeRR0R", - sthx_3 = "7c00032eRR0R", - orc_3 = "7c000338RR~R.", - ecowx_3 = "7c00036cRR0R", - sthux_3 = "7c00036eRR0R", - or_3 = "7c000378RR~R.", - mr_2 = "7c000378RR~%.", - divdu_3 = "7c000392RRR.", - divwu_3 = "7c000396RRR.", - mtspefscr_1 = "7c0083a6R", - mtxer_1 = "7c0103a6R", - mtlr_1 = "7c0803a6R", - mtctr_1 = "7c0903a6R", - dcbi_2 = "7c0003ac-RR", - nand_3 = "7c0003b8RR~R.", - divd_3 = "7c0003d2RRR.", - divw_3 = "7c0003d6RRR.", - cmpb_3 = "7c0003f8RR~R.", - mcrxr_1 = "7c000400X", - subfco_3 = "7c000410RRR.", - subco_3 = "7c000410RRR~.", - addco_3 = "7c000414RRR.", - ldbrx_3 = "7c000428RR0R", - lswx_3 = "7c00042aRR0R", - lwbrx_3 = "7c00042cRR0R", - lfsx_3 = "7c00042eFR0R", - srw_3 = "7c000430RR~R.", - srd_3 = "7c000436RR~R.", - subfo_3 = "7c000450RRR.", - subo_3 = "7c000450RRR~.", - lfsux_3 = "7c00046eFR0R", - lswi_3 = "7c0004aaRR0A", - sync_0 = "7c0004ac", - lwsync_0 = "7c2004ac", - ptesync_0 = "7c4004ac", - lfdx_3 = "7c0004aeFR0R", - nego_2 = "7c0004d0RR.", - lfdux_3 = "7c0004eeFR0R", - subfeo_3 = "7c000510RRR.", - subeo_3 = "7c000510RRR~.", - addeo_3 = "7c000514RRR.", - stdbrx_3 = "7c000528RR0R", - stswx_3 = "7c00052aRR0R", - stwbrx_3 = "7c00052cRR0R", - stfsx_3 = "7c00052eFR0R", - stfsux_3 = "7c00056eFR0R", - subfzeo_2 = "7c000590RR.", - addzeo_2 = "7c000594RR.", - stswi_3 = "7c0005aaRR0A", - stfdx_3 = "7c0005aeFR0R", - subfmeo_2 = "7c0005d0RR.", - mulldo_3 = "7c0005d2RRR.", - addmeo_2 = "7c0005d4RR.", - mullwo_3 = "7c0005d6RRR.", - dcba_2 = "7c0005ec-RR", - stfdux_3 = "7c0005eeFR0R", - addo_3 = "7c000614RRR.", - lhbrx_3 = "7c00062cRR0R", - sraw_3 = "7c000630RR~R.", - srad_3 = "7c000634RR~R.", - srawi_3 = "7c000670RR~A.", - sradi_3 = "7c000674RR~H.", - eieio_0 = "7c0006ac", - lfiwax_3 = "7c0006aeFR0R", - sthbrx_3 = "7c00072cRR0R", - extsh_2 = "7c000734RR~.", - extsb_2 = "7c000774RR~.", - divduo_3 = "7c000792RRR.", - divwou_3 = "7c000796RRR.", - icbi_2 = "7c0007ac-RR", - stfiwx_3 = "7c0007aeFR0R", - extsw_2 = "7c0007b4RR~.", - divdo_3 = "7c0007d2RRR.", - divwo_3 = "7c0007d6RRR.", - dcbz_2 = "7c0007ec-RR", - - -- Primary opcode 30: - rldicl_4 = "78000000RR~HM.", - rldicr_4 = "78000004RR~HM.", - rldic_4 = "78000008RR~HM.", - rldimi_4 = "7800000cRR~HM.", - rldcl_4 = "78000010RR~RM.", - rldcr_4 = "78000012RR~RM.", - - -- Primary opcode 59: - fdivs_3 = "ec000024FFF.", - fsubs_3 = "ec000028FFF.", - fadds_3 = "ec00002aFFF.", - fsqrts_2 = "ec00002cF-F.", - fres_2 = "ec000030F-F.", - fmuls_3 = "ec000032FF-F.", - frsqrtes_2 = "ec000034F-F.", - fmsubs_4 = "ec000038FFFF~.", - fmadds_4 = "ec00003aFFFF~.", - fnmsubs_4 = "ec00003cFFFF~.", - fnmadds_4 = "ec00003eFFFF~.", - - -- Primary opcode 63: - fdiv_3 = "fc000024FFF.", - fsub_3 = "fc000028FFF.", - fadd_3 = "fc00002aFFF.", - fsqrt_2 = "fc00002cF-F.", - fsel_4 = "fc00002eFFFF~.", - fre_2 = "fc000030F-F.", - fmul_3 = "fc000032FF-F.", - frsqrte_2 = "fc000034F-F.", - fmsub_4 = "fc000038FFFF~.", - fmadd_4 = "fc00003aFFFF~.", - fnmsub_4 = "fc00003cFFFF~.", - fnmadd_4 = "fc00003eFFFF~.", - fcmpu_3 = "fc000000XFF", - fcpsgn_3 = "fc000010FFF.", - fcmpo_3 = "fc000040XFF", - mtfsb1_1 = "fc00004cA", - fneg_2 = "fc000050F-F.", - mcrfs_2 = "fc000080XX", - mtfsb0_1 = "fc00008cA", - fmr_2 = "fc000090F-F.", - frsp_2 = "fc000018F-F.", - fctiw_2 = "fc00001cF-F.", - fctiwz_2 = "fc00001eF-F.", - mtfsfi_2 = "fc00010cAA", -- NYI: upshift. - fnabs_2 = "fc000110F-F.", - fabs_2 = "fc000210F-F.", - frin_2 = "fc000310F-F.", - friz_2 = "fc000350F-F.", - frip_2 = "fc000390F-F.", - frim_2 = "fc0003d0F-F.", - mffs_1 = "fc00048eF.", - -- NYI: mtfsf, mtfsb0, mtfsb1. - fctid_2 = "fc00065cF-F.", - fctidz_2 = "fc00065eF-F.", - fcfid_2 = "fc00069cF-F.", - - -- Primary opcode 4, SPE APU extension: - evaddw_3 = "10000200RRR", - evaddiw_3 = "10000202RAR~", - evsubw_3 = "10000204RRR~", - evsubiw_3 = "10000206RAR~", - evabs_2 = "10000208RR", - evneg_2 = "10000209RR", - evextsb_2 = "1000020aRR", - evextsh_2 = "1000020bRR", - evrndw_2 = "1000020cRR", - evcntlzw_2 = "1000020dRR", - evcntlsw_2 = "1000020eRR", - brinc_3 = "1000020fRRR", - evand_3 = "10000211RRR", - evandc_3 = "10000212RRR", - evxor_3 = "10000216RRR", - evor_3 = "10000217RRR", - evmr_2 = "10000217RR=", - evnor_3 = "10000218RRR", - evnot_2 = "10000218RR=", - eveqv_3 = "10000219RRR", - evorc_3 = "1000021bRRR", - evnand_3 = "1000021eRRR", - evsrwu_3 = "10000220RRR", - evsrws_3 = "10000221RRR", - evsrwiu_3 = "10000222RRA", - evsrwis_3 = "10000223RRA", - evslw_3 = "10000224RRR", - evslwi_3 = "10000226RRA", - evrlw_3 = "10000228RRR", - evsplati_2 = "10000229RS", - evrlwi_3 = "1000022aRRA", - evsplatfi_2 = "1000022bRS", - evmergehi_3 = "1000022cRRR", - evmergelo_3 = "1000022dRRR", - evcmpgtu_3 = "10000230XRR", - evcmpgtu_2 = "10000230-RR", - evcmpgts_3 = "10000231XRR", - evcmpgts_2 = "10000231-RR", - evcmpltu_3 = "10000232XRR", - evcmpltu_2 = "10000232-RR", - evcmplts_3 = "10000233XRR", - evcmplts_2 = "10000233-RR", - evcmpeq_3 = "10000234XRR", - evcmpeq_2 = "10000234-RR", - evsel_4 = "10000278RRRW", - evsel_3 = "10000278RRR", - evfsadd_3 = "10000280RRR", - evfssub_3 = "10000281RRR", - evfsabs_2 = "10000284RR", - evfsnabs_2 = "10000285RR", - evfsneg_2 = "10000286RR", - evfsmul_3 = "10000288RRR", - evfsdiv_3 = "10000289RRR", - evfscmpgt_3 = "1000028cXRR", - evfscmpgt_2 = "1000028c-RR", - evfscmplt_3 = "1000028dXRR", - evfscmplt_2 = "1000028d-RR", - evfscmpeq_3 = "1000028eXRR", - evfscmpeq_2 = "1000028e-RR", - evfscfui_2 = "10000290R-R", - evfscfsi_2 = "10000291R-R", - evfscfuf_2 = "10000292R-R", - evfscfsf_2 = "10000293R-R", - evfsctui_2 = "10000294R-R", - evfsctsi_2 = "10000295R-R", - evfsctuf_2 = "10000296R-R", - evfsctsf_2 = "10000297R-R", - evfsctuiz_2 = "10000298R-R", - evfsctsiz_2 = "1000029aR-R", - evfststgt_3 = "1000029cXRR", - evfststgt_2 = "1000029c-RR", - evfststlt_3 = "1000029dXRR", - evfststlt_2 = "1000029d-RR", - evfststeq_3 = "1000029eXRR", - evfststeq_2 = "1000029e-RR", - efsadd_3 = "100002c0RRR", - efssub_3 = "100002c1RRR", - efsabs_2 = "100002c4RR", - efsnabs_2 = "100002c5RR", - efsneg_2 = "100002c6RR", - efsmul_3 = "100002c8RRR", - efsdiv_3 = "100002c9RRR", - efscmpgt_3 = "100002ccXRR", - efscmpgt_2 = "100002cc-RR", - efscmplt_3 = "100002cdXRR", - efscmplt_2 = "100002cd-RR", - efscmpeq_3 = "100002ceXRR", - efscmpeq_2 = "100002ce-RR", - efscfd_2 = "100002cfR-R", - efscfui_2 = "100002d0R-R", - efscfsi_2 = "100002d1R-R", - efscfuf_2 = "100002d2R-R", - efscfsf_2 = "100002d3R-R", - efsctui_2 = "100002d4R-R", - efsctsi_2 = "100002d5R-R", - efsctuf_2 = "100002d6R-R", - efsctsf_2 = "100002d7R-R", - efsctuiz_2 = "100002d8R-R", - efsctsiz_2 = "100002daR-R", - efststgt_3 = "100002dcXRR", - efststgt_2 = "100002dc-RR", - efststlt_3 = "100002ddXRR", - efststlt_2 = "100002dd-RR", - efststeq_3 = "100002deXRR", - efststeq_2 = "100002de-RR", - efdadd_3 = "100002e0RRR", - efdsub_3 = "100002e1RRR", - efdcfuid_2 = "100002e2R-R", - efdcfsid_2 = "100002e3R-R", - efdabs_2 = "100002e4RR", - efdnabs_2 = "100002e5RR", - efdneg_2 = "100002e6RR", - efdmul_3 = "100002e8RRR", - efddiv_3 = "100002e9RRR", - efdctuidz_2 = "100002eaR-R", - efdctsidz_2 = "100002ebR-R", - efdcmpgt_3 = "100002ecXRR", - efdcmpgt_2 = "100002ec-RR", - efdcmplt_3 = "100002edXRR", - efdcmplt_2 = "100002ed-RR", - efdcmpeq_3 = "100002eeXRR", - efdcmpeq_2 = "100002ee-RR", - efdcfs_2 = "100002efR-R", - efdcfui_2 = "100002f0R-R", - efdcfsi_2 = "100002f1R-R", - efdcfuf_2 = "100002f2R-R", - efdcfsf_2 = "100002f3R-R", - efdctui_2 = "100002f4R-R", - efdctsi_2 = "100002f5R-R", - efdctuf_2 = "100002f6R-R", - efdctsf_2 = "100002f7R-R", - efdctuiz_2 = "100002f8R-R", - efdctsiz_2 = "100002faR-R", - efdtstgt_3 = "100002fcXRR", - efdtstgt_2 = "100002fc-RR", - efdtstlt_3 = "100002fdXRR", - efdtstlt_2 = "100002fd-RR", - efdtsteq_3 = "100002feXRR", - efdtsteq_2 = "100002fe-RR", - evlddx_3 = "10000300RR0R", - evldd_2 = "10000301R8", - evldwx_3 = "10000302RR0R", - evldw_2 = "10000303R8", - evldhx_3 = "10000304RR0R", - evldh_2 = "10000305R8", - evlwhex_3 = "10000310RR0R", - evlwhe_2 = "10000311R4", - evlwhoux_3 = "10000314RR0R", - evlwhou_2 = "10000315R4", - evlwhosx_3 = "10000316RR0R", - evlwhos_2 = "10000317R4", - evstddx_3 = "10000320RR0R", - evstdd_2 = "10000321R8", - evstdwx_3 = "10000322RR0R", - evstdw_2 = "10000323R8", - evstdhx_3 = "10000324RR0R", - evstdh_2 = "10000325R8", - evstwhex_3 = "10000330RR0R", - evstwhe_2 = "10000331R4", - evstwhox_3 = "10000334RR0R", - evstwho_2 = "10000335R4", - evstwwex_3 = "10000338RR0R", - evstwwe_2 = "10000339R4", - evstwwox_3 = "1000033cRR0R", - evstwwo_2 = "1000033dR4", - evmhessf_3 = "10000403RRR", - evmhossf_3 = "10000407RRR", - evmheumi_3 = "10000408RRR", - evmhesmi_3 = "10000409RRR", - evmhesmf_3 = "1000040bRRR", - evmhoumi_3 = "1000040cRRR", - evmhosmi_3 = "1000040dRRR", - evmhosmf_3 = "1000040fRRR", - evmhessfa_3 = "10000423RRR", - evmhossfa_3 = "10000427RRR", - evmheumia_3 = "10000428RRR", - evmhesmia_3 = "10000429RRR", - evmhesmfa_3 = "1000042bRRR", - evmhoumia_3 = "1000042cRRR", - evmhosmia_3 = "1000042dRRR", - evmhosmfa_3 = "1000042fRRR", - evmwhssf_3 = "10000447RRR", - evmwlumi_3 = "10000448RRR", - evmwhumi_3 = "1000044cRRR", - evmwhsmi_3 = "1000044dRRR", - evmwhsmf_3 = "1000044fRRR", - evmwssf_3 = "10000453RRR", - evmwumi_3 = "10000458RRR", - evmwsmi_3 = "10000459RRR", - evmwsmf_3 = "1000045bRRR", - evmwhssfa_3 = "10000467RRR", - evmwlumia_3 = "10000468RRR", - evmwhumia_3 = "1000046cRRR", - evmwhsmia_3 = "1000046dRRR", - evmwhsmfa_3 = "1000046fRRR", - evmwssfa_3 = "10000473RRR", - evmwumia_3 = "10000478RRR", - evmwsmia_3 = "10000479RRR", - evmwsmfa_3 = "1000047bRRR", - evmra_2 = "100004c4RR", - evdivws_3 = "100004c6RRR", - evdivwu_3 = "100004c7RRR", - evmwssfaa_3 = "10000553RRR", - evmwumiaa_3 = "10000558RRR", - evmwsmiaa_3 = "10000559RRR", - evmwsmfaa_3 = "1000055bRRR", - evmwssfan_3 = "100005d3RRR", - evmwumian_3 = "100005d8RRR", - evmwsmian_3 = "100005d9RRR", - evmwsmfan_3 = "100005dbRRR", - evmergehilo_3 = "1000022eRRR", - evmergelohi_3 = "1000022fRRR", - evlhhesplatx_3 = "10000308RR0R", - evlhhesplat_2 = "10000309R2", - evlhhousplatx_3 = "1000030cRR0R", - evlhhousplat_2 = "1000030dR2", - evlhhossplatx_3 = "1000030eRR0R", - evlhhossplat_2 = "1000030fR2", - evlwwsplatx_3 = "10000318RR0R", - evlwwsplat_2 = "10000319R4", - evlwhsplatx_3 = "1000031cRR0R", - evlwhsplat_2 = "1000031dR4", - evaddusiaaw_2 = "100004c0RR", - evaddssiaaw_2 = "100004c1RR", - evsubfusiaaw_2 = "100004c2RR", - evsubfssiaaw_2 = "100004c3RR", - evaddumiaaw_2 = "100004c8RR", - evaddsmiaaw_2 = "100004c9RR", - evsubfumiaaw_2 = "100004caRR", - evsubfsmiaaw_2 = "100004cbRR", - evmheusiaaw_3 = "10000500RRR", - evmhessiaaw_3 = "10000501RRR", - evmhessfaaw_3 = "10000503RRR", - evmhousiaaw_3 = "10000504RRR", - evmhossiaaw_3 = "10000505RRR", - evmhossfaaw_3 = "10000507RRR", - evmheumiaaw_3 = "10000508RRR", - evmhesmiaaw_3 = "10000509RRR", - evmhesmfaaw_3 = "1000050bRRR", - evmhoumiaaw_3 = "1000050cRRR", - evmhosmiaaw_3 = "1000050dRRR", - evmhosmfaaw_3 = "1000050fRRR", - evmhegumiaa_3 = "10000528RRR", - evmhegsmiaa_3 = "10000529RRR", - evmhegsmfaa_3 = "1000052bRRR", - evmhogumiaa_3 = "1000052cRRR", - evmhogsmiaa_3 = "1000052dRRR", - evmhogsmfaa_3 = "1000052fRRR", - evmwlusiaaw_3 = "10000540RRR", - evmwlssiaaw_3 = "10000541RRR", - evmwlumiaaw_3 = "10000548RRR", - evmwlsmiaaw_3 = "10000549RRR", - evmheusianw_3 = "10000580RRR", - evmhessianw_3 = "10000581RRR", - evmhessfanw_3 = "10000583RRR", - evmhousianw_3 = "10000584RRR", - evmhossianw_3 = "10000585RRR", - evmhossfanw_3 = "10000587RRR", - evmheumianw_3 = "10000588RRR", - evmhesmianw_3 = "10000589RRR", - evmhesmfanw_3 = "1000058bRRR", - evmhoumianw_3 = "1000058cRRR", - evmhosmianw_3 = "1000058dRRR", - evmhosmfanw_3 = "1000058fRRR", - evmhegumian_3 = "100005a8RRR", - evmhegsmian_3 = "100005a9RRR", - evmhegsmfan_3 = "100005abRRR", - evmhogumian_3 = "100005acRRR", - evmhogsmian_3 = "100005adRRR", - evmhogsmfan_3 = "100005afRRR", - evmwlusianw_3 = "100005c0RRR", - evmwlssianw_3 = "100005c1RRR", - evmwlumianw_3 = "100005c8RRR", - evmwlsmianw_3 = "100005c9RRR", - - -- NYI: Book E instructions. -} - --- Add mnemonics for "." variants. -do - local t = {} - for k,v in pairs(map_op) do - if sub(v, -1) == "." then - local v2 = sub(v, 1, 7)..char(byte(v, 8)+1)..sub(v, 9, -2) - t[sub(k, 1, -3).."."..sub(k, -2)] = v2 - end - end - for k,v in pairs(t) do - map_op[k] = v - end -end - --- Add more branch mnemonics. -for cond,c in pairs(map_cond) do - local b1 = "b"..cond - local c1 = shl(band(c, 3), 16) + (c < 4 and 0x01000000 or 0) - -- bX[l] - map_op[b1.."_1"] = tohex(0x40800000 + c1).."K" - map_op[b1.."y_1"] = tohex(0x40a00000 + c1).."K" - map_op[b1.."l_1"] = tohex(0x40800001 + c1).."K" - map_op[b1.."_2"] = tohex(0x40800000 + c1).."-XK" - map_op[b1.."y_2"] = tohex(0x40a00000 + c1).."-XK" - map_op[b1.."l_2"] = tohex(0x40800001 + c1).."-XK" - -- bXlr[l] - map_op[b1.."lr_0"] = tohex(0x4c800020 + c1) - map_op[b1.."lrl_0"] = tohex(0x4c800021 + c1) - map_op[b1.."ctr_0"] = tohex(0x4c800420 + c1) - map_op[b1.."ctrl_0"] = tohex(0x4c800421 + c1) - -- bXctr[l] - map_op[b1.."lr_1"] = tohex(0x4c800020 + c1).."-X" - map_op[b1.."lrl_1"] = tohex(0x4c800021 + c1).."-X" - map_op[b1.."ctr_1"] = tohex(0x4c800420 + c1).."-X" - map_op[b1.."ctrl_1"] = tohex(0x4c800421 + c1).."-X" -end - ------------------------------------------------------------------------------- - -local function parse_gpr(expr) - local tname, ovreg = match(expr, "^([%w_]+):(r[1-3]?[0-9])$") - local tp = map_type[tname or expr] - if tp then - local reg = ovreg or tp.reg - if not reg then - werror("type `"..(tname or expr).."' needs a register override") - end - expr = reg - end - local r = match(expr, "^r([1-3]?[0-9])$") - if r then - r = tonumber(r) - if r <= 31 then return r, tp end - end - werror("bad register name `"..expr.."'") -end - -local function parse_fpr(expr) - local r = match(expr, "^f([1-3]?[0-9])$") - if r then - r = tonumber(r) - if r <= 31 then return r end - end - werror("bad register name `"..expr.."'") -end - -local function parse_cr(expr) - local r = match(expr, "^cr([0-7])$") - if r then return tonumber(r) end - werror("bad condition register name `"..expr.."'") -end - -local function parse_cond(expr) - local r, cond = match(expr, "^4%*cr([0-7])%+(%w%w)$") - if r then - r = tonumber(r) - local c = map_cond[cond] - if c and c < 4 then return r*4+c end - end - werror("bad condition bit name `"..expr.."'") -end - -local function parse_imm(imm, bits, shift, scale, signed) - local n = tonumber(imm) - if n then - local m = sar(n, scale) - if shl(m, scale) == n then - if signed then - local s = sar(m, bits-1) - if s == 0 then return shl(m, shift) - elseif s == -1 then return shl(m + shl(1, bits), shift) end - else - if sar(m, bits) == 0 then return shl(m, shift) end - end - end - werror("out of range immediate `"..imm.."'") - elseif match(imm, "^r([1-3]?[0-9])$") or - match(imm, "^([%w_]+):(r[1-3]?[0-9])$") then - werror("expected immediate operand, got register") - else - waction("IMM", (signed and 32768 or 0)+scale*1024+bits*32+shift, imm) - return 0 - end -end - -local function parse_shiftmask(imm, isshift) - local n = tonumber(imm) - if n then - if shr(n, 6) == 0 then - local lsb = band(imm, 31) - local msb = imm - lsb - return isshift and (shl(lsb, 11)+shr(msb, 4)) or (shl(lsb, 6)+msb) - end - werror("out of range immediate `"..imm.."'") - elseif match(imm, "^r([1-3]?[0-9])$") or - match(imm, "^([%w_]+):(r[1-3]?[0-9])$") then - werror("expected immediate operand, got register") - else - werror("NYI: parameterized 64 bit shift/mask") - end -end - -local function parse_disp(disp) - local imm, reg = match(disp, "^(.*)%(([%w_:]+)%)$") - if imm then - local r = parse_gpr(reg) - if r == 0 then werror("cannot use r0 in displacement") end - return shl(r, 16) + parse_imm(imm, 16, 0, 0, true) - end - local reg, tailr = match(disp, "^([%w_:]+)%s*(.*)$") - if reg and tailr ~= "" then - local r, tp = parse_gpr(reg) - if r == 0 then werror("cannot use r0 in displacement") end - if tp then - waction("IMM", 32768+16*32, format(tp.ctypefmt, tailr)) - return shl(r, 16) - end - end - werror("bad displacement `"..disp.."'") -end - -local function parse_u5disp(disp, scale) - local imm, reg = match(disp, "^(.*)%(([%w_:]+)%)$") - if imm then - local r = parse_gpr(reg) - if r == 0 then werror("cannot use r0 in displacement") end - return shl(r, 16) + parse_imm(imm, 5, 11, scale, false) - end - local reg, tailr = match(disp, "^([%w_:]+)%s*(.*)$") - if reg and tailr ~= "" then - local r, tp = parse_gpr(reg) - if r == 0 then werror("cannot use r0 in displacement") end - if tp then - waction("IMM", scale*1024+5*32+11, format(tp.ctypefmt, tailr)) - return shl(r, 16) - end - end - werror("bad displacement `"..disp.."'") -end - -local function parse_label(label, def) - local prefix = sub(label, 1, 2) - -- =>label (pc label reference) - if prefix == "=>" then - return "PC", 0, sub(label, 3) - end - -- ->name (global label reference) - if prefix == "->" then - return "LG", map_global[sub(label, 3)] - end - if def then - -- [1-9] (local label definition) - if match(label, "^[1-9]$") then - return "LG", 10+tonumber(label) - end - else - -- [<>][1-9] (local label reference) - local dir, lnum = match(label, "^([<>])([1-9])$") - if dir then -- Fwd: 1-9, Bkwd: 11-19. - return "LG", lnum + (dir == ">" and 0 or 10) - end - -- extern label (extern label reference) - local extname = match(label, "^extern%s+(%S+)$") - if extname then - return "EXT", map_extern[extname] - end - end - werror("bad label `"..label.."'") -end - ------------------------------------------------------------------------------- - --- Handle opcodes defined with template strings. -map_op[".template__"] = function(params, template, nparams) - if not params then return sub(template, 9) end - local op = tonumber(sub(template, 1, 8), 16) - local n, rs = 1, 26 - - -- Limit number of section buffer positions used by a single dasm_put(). - -- A single opcode needs a maximum of 3 positions (rlwinm). - if secpos+3 > maxsecpos then wflush() end - local pos = wpos() - - -- Process each character. - for p in gmatch(sub(template, 9), ".") do - if p == "R" then - rs = rs - 5; op = op + shl(parse_gpr(params[n]), rs); n = n + 1 - elseif p == "F" then - rs = rs - 5; op = op + shl(parse_fpr(params[n]), rs); n = n + 1 - elseif p == "A" then - rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, false); n = n + 1 - elseif p == "S" then - rs = rs - 5; op = op + parse_imm(params[n], 5, rs, 0, true); n = n + 1 - elseif p == "I" then - op = op + parse_imm(params[n], 16, 0, 0, true); n = n + 1 - elseif p == "U" then - op = op + parse_imm(params[n], 16, 0, 0, false); n = n + 1 - elseif p == "D" then - op = op + parse_disp(params[n]); n = n + 1 - elseif p == "2" then - op = op + parse_u5disp(params[n], 1); n = n + 1 - elseif p == "4" then - op = op + parse_u5disp(params[n], 2); n = n + 1 - elseif p == "8" then - op = op + parse_u5disp(params[n], 3); n = n + 1 - elseif p == "C" then - rs = rs - 5; op = op + shl(parse_cond(params[n]), rs); n = n + 1 - elseif p == "X" then - rs = rs - 5; op = op + shl(parse_cr(params[n]), rs+2); n = n + 1 - elseif p == "W" then - op = op + parse_cr(params[n]); n = n + 1 - elseif p == "G" then - op = op + parse_imm(params[n], 8, 12, 0, false); n = n + 1 - elseif p == "H" then - op = op + parse_shiftmask(params[n], true); n = n + 1 - elseif p == "M" then - op = op + parse_shiftmask(params[n], false); n = n + 1 - elseif p == "J" or p == "K" then - local mode, n, s = parse_label(params[n], false) - if p == "K" then n = n + 2048 end - waction("REL_"..mode, n, s, 1) - n = n + 1 - elseif p == "0" then - if band(shr(op, rs), 31) == 0 then werror("cannot use r0") end - elseif p == "=" or p == "%" then - local t = band(shr(op, p == "%" and rs+5 or rs), 31) - rs = rs - 5 - op = op + shl(t, rs) - elseif p == "~" then - local mm = shl(31, rs) - local lo = band(op, mm) - local hi = band(op, shl(mm, 5)) - op = op - lo - hi + shl(lo, 5) + shr(hi, 5) - elseif p == "-" then - rs = rs - 5 - elseif p == "." then - -- Ignored. - else - assert(false) - end - end - wputpos(pos, op) -end - ------------------------------------------------------------------------------- - --- Pseudo-opcode to mark the position where the action list is to be emitted. -map_op[".actionlist_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeactions(out, name) end) -end - --- Pseudo-opcode to mark the position where the global enum is to be emitted. -map_op[".globals_1"] = function(params) - if not params then return "prefix" end - local prefix = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobals(out, prefix) end) -end - --- Pseudo-opcode to mark the position where the global names are to be emitted. -map_op[".globalnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobalnames(out, name) end) -end - --- Pseudo-opcode to mark the position where the extern names are to be emitted. -map_op[".externnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeexternnames(out, name) end) -end - ------------------------------------------------------------------------------- - --- Label pseudo-opcode (converted from trailing colon form). -map_op[".label_1"] = function(params) - if not params then return "[1-9] | ->global | =>pcexpr" end - if secpos+1 > maxsecpos then wflush() end - local mode, n, s = parse_label(params[1], true) - if mode == "EXT" then werror("bad label definition") end - waction("LABEL_"..mode, n, s, 1) -end - ------------------------------------------------------------------------------- - --- Pseudo-opcodes for data storage. -map_op[".long_*"] = function(params) - if not params then return "imm..." end - for _,p in ipairs(params) do - local n = tonumber(p) - if not n then werror("bad immediate `"..p.."'") end - if n < 0 then n = n + 2^32 end - wputw(n) - if secpos+2 > maxsecpos then wflush() end - end -end - --- Alignment pseudo-opcode. -map_op[".align_1"] = function(params) - if not params then return "numpow2" end - if secpos+1 > maxsecpos then wflush() end - local align = tonumber(params[1]) - if align then - local x = align - -- Must be a power of 2 in the range (2 ... 256). - for i=1,8 do - x = x / 2 - if x == 1 then - waction("ALIGN", align-1, nil, 1) -- Action byte is 2**n-1. - return - end - end - end - werror("bad alignment") -end - ------------------------------------------------------------------------------- - --- Pseudo-opcode for (primitive) type definitions (map to C types). -map_op[".type_3"] = function(params, nparams) - if not params then - return nparams == 2 and "name, ctype" or "name, ctype, reg" - end - local name, ctype, reg = params[1], params[2], params[3] - if not match(name, "^[%a_][%w_]*$") then - werror("bad type name `"..name.."'") - end - local tp = map_type[name] - if tp then - werror("duplicate type `"..name.."'") - end - -- Add #type to defines. A bit unclean to put it in map_archdef. - map_archdef["#"..name] = "sizeof("..ctype..")" - -- Add new type and emit shortcut define. - local num = ctypenum + 1 - map_type[name] = { - ctype = ctype, - ctypefmt = format("Dt%X(%%s)", num), - reg = reg, - } - wline(format("#define Dt%X(_V) (int)(ptrdiff_t)&(((%s *)0)_V)", num, ctype)) - ctypenum = num -end -map_op[".type_2"] = map_op[".type_3"] - --- Dump type definitions. -local function dumptypes(out, lvl) - local t = {} - for name in pairs(map_type) do t[#t+1] = name end - sort(t) - out:write("Type definitions:\n") - for _,name in ipairs(t) do - local tp = map_type[name] - local reg = tp.reg or "" - out:write(format(" %-20s %-20s %s\n", name, tp.ctype, reg)) - end - out:write("\n") -end - ------------------------------------------------------------------------------- - --- Set the current section. -function _M.section(num) - waction("SECTION", num) - wflush(true) -- SECTION is a terminal action. -end - ------------------------------------------------------------------------------- - --- Dump architecture description. -function _M.dumparch(out) - out:write(format("DynASM %s version %s, released %s\n\n", - _info.arch, _info.version, _info.release)) - dumpactions(out) -end - --- Dump all user defined elements. -function _M.dumpdef(out, lvl) - dumptypes(out, lvl) - dumpglobals(out, lvl) - dumpexterns(out, lvl) -end - ------------------------------------------------------------------------------- - --- Pass callbacks from/to the DynASM core. -function _M.passcb(wl, we, wf, ww) - wline, werror, wfatal, wwarn = wl, we, wf, ww - return wflush -end - --- Setup the arch-specific module. -function _M.setup(arch, opt) - g_arch, g_opt = arch, opt -end - --- Merge the core maps and the arch-specific maps. -function _M.mergemaps(map_coreop, map_def) - setmetatable(map_op, { __index = map_coreop }) - setmetatable(map_def, { __index = map_archdef }) - return map_op, map_def -end - -return _M - ------------------------------------------------------------------------------- - diff --git a/deps/luajit/dynasm/dasm_proto.h b/deps/luajit/dynasm/dasm_proto.h deleted file mode 100644 index a8bc6fd..0000000 --- a/deps/luajit/dynasm/dasm_proto.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -** DynASM encoding engine prototypes. -** Copyright (C) 2005-2015 Mike Pall. All rights reserved. -** Released under the MIT license. See dynasm.lua for full copyright notice. -*/ - -#ifndef _DASM_PROTO_H -#define _DASM_PROTO_H - -#include -#include - -#define DASM_IDENT "DynASM 1.3.0" -#define DASM_VERSION 10300 /* 1.3.0 */ - -#ifndef Dst_DECL -#define Dst_DECL dasm_State **Dst -#endif - -#ifndef Dst_REF -#define Dst_REF (*Dst) -#endif - -#ifndef DASM_FDEF -#define DASM_FDEF extern -#endif - -#ifndef DASM_M_GROW -#define DASM_M_GROW(ctx, t, p, sz, need) \ - do { \ - size_t _sz = (sz), _need = (need); \ - if (_sz < _need) { \ - if (_sz < 16) _sz = 16; \ - while (_sz < _need) _sz += _sz; \ - (p) = (t *)realloc((p), _sz); \ - if ((p) == NULL) exit(1); \ - (sz) = _sz; \ - } \ - } while(0) -#endif - -#ifndef DASM_M_FREE -#define DASM_M_FREE(ctx, p, sz) free(p) -#endif - -/* Internal DynASM encoder state. */ -typedef struct dasm_State dasm_State; - - -/* Initialize and free DynASM state. */ -DASM_FDEF void dasm_init(Dst_DECL, int maxsection); -DASM_FDEF void dasm_free(Dst_DECL); - -/* Setup global array. Must be called before dasm_setup(). */ -DASM_FDEF void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl); - -/* Grow PC label array. Can be called after dasm_setup(), too. */ -DASM_FDEF void dasm_growpc(Dst_DECL, unsigned int maxpc); - -/* Setup encoder. */ -DASM_FDEF void dasm_setup(Dst_DECL, const void *actionlist); - -/* Feed encoder with actions. Calls are generated by pre-processor. */ -DASM_FDEF void dasm_put(Dst_DECL, int start, ...); - -/* Link sections and return the resulting size. */ -DASM_FDEF int dasm_link(Dst_DECL, size_t *szp); - -/* Encode sections into buffer. */ -DASM_FDEF int dasm_encode(Dst_DECL, void *buffer); - -/* Get PC label offset. */ -DASM_FDEF int dasm_getpclabel(Dst_DECL, unsigned int pc); - -#ifdef DASM_CHECKS -/* Optional sanity checker to call between isolated encoding steps. */ -DASM_FDEF int dasm_checkstep(Dst_DECL, int secmatch); -#else -#define dasm_checkstep(a, b) 0 -#endif - - -#endif /* _DASM_PROTO_H */ diff --git a/deps/luajit/dynasm/dasm_x64.lua b/deps/luajit/dynasm/dasm_x64.lua deleted file mode 100644 index b1b6202..0000000 --- a/deps/luajit/dynasm/dasm_x64.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------------------------------------------------------------------- --- DynASM x64 module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- See dynasm.lua for full copyright notice. ------------------------------------------------------------------------------- --- This module just sets 64 bit mode for the combined x86/x64 module. --- All the interesting stuff is there. ------------------------------------------------------------------------------- - -x64 = true -- Using a global is an ugly, but effective solution. -return require("dasm_x86") diff --git a/deps/luajit/dynasm/dasm_x86.h b/deps/luajit/dynasm/dasm_x86.h deleted file mode 100644 index 652e8c9..0000000 --- a/deps/luajit/dynasm/dasm_x86.h +++ /dev/null @@ -1,471 +0,0 @@ -/* -** DynASM x86 encoding engine. -** Copyright (C) 2005-2015 Mike Pall. All rights reserved. -** Released under the MIT license. See dynasm.lua for full copyright notice. -*/ - -#include -#include -#include -#include - -#define DASM_ARCH "x86" - -#ifndef DASM_EXTERN -#define DASM_EXTERN(a,b,c,d) 0 -#endif - -/* Action definitions. DASM_STOP must be 255. */ -enum { - DASM_DISP = 233, - DASM_IMM_S, DASM_IMM_B, DASM_IMM_W, DASM_IMM_D, DASM_IMM_WB, DASM_IMM_DB, - DASM_VREG, DASM_SPACE, DASM_SETLABEL, DASM_REL_A, DASM_REL_LG, DASM_REL_PC, - DASM_IMM_LG, DASM_IMM_PC, DASM_LABEL_LG, DASM_LABEL_PC, DASM_ALIGN, - DASM_EXTERN, DASM_ESC, DASM_MARK, DASM_SECTION, DASM_STOP -}; - -/* Maximum number of section buffer positions for a single dasm_put() call. */ -#define DASM_MAXSECPOS 25 - -/* DynASM encoder status codes. Action list offset or number are or'ed in. */ -#define DASM_S_OK 0x00000000 -#define DASM_S_NOMEM 0x01000000 -#define DASM_S_PHASE 0x02000000 -#define DASM_S_MATCH_SEC 0x03000000 -#define DASM_S_RANGE_I 0x11000000 -#define DASM_S_RANGE_SEC 0x12000000 -#define DASM_S_RANGE_LG 0x13000000 -#define DASM_S_RANGE_PC 0x14000000 -#define DASM_S_RANGE_VREG 0x15000000 -#define DASM_S_UNDEF_L 0x21000000 -#define DASM_S_UNDEF_PC 0x22000000 - -/* Macros to convert positions (8 bit section + 24 bit index). */ -#define DASM_POS2IDX(pos) ((pos)&0x00ffffff) -#define DASM_POS2BIAS(pos) ((pos)&0xff000000) -#define DASM_SEC2POS(sec) ((sec)<<24) -#define DASM_POS2SEC(pos) ((pos)>>24) -#define DASM_POS2PTR(D, pos) (D->sections[DASM_POS2SEC(pos)].rbuf + (pos)) - -/* Action list type. */ -typedef const unsigned char *dasm_ActList; - -/* Per-section structure. */ -typedef struct dasm_Section { - int *rbuf; /* Biased buffer pointer (negative section bias). */ - int *buf; /* True buffer pointer. */ - size_t bsize; /* Buffer size in bytes. */ - int pos; /* Biased buffer position. */ - int epos; /* End of biased buffer position - max single put. */ - int ofs; /* Byte offset into section. */ -} dasm_Section; - -/* Core structure holding the DynASM encoding state. */ -struct dasm_State { - size_t psize; /* Allocated size of this structure. */ - dasm_ActList actionlist; /* Current actionlist pointer. */ - int *lglabels; /* Local/global chain/pos ptrs. */ - size_t lgsize; - int *pclabels; /* PC label chains/pos ptrs. */ - size_t pcsize; - void **globals; /* Array of globals (bias -10). */ - dasm_Section *section; /* Pointer to active section. */ - size_t codesize; /* Total size of all code sections. */ - int maxsection; /* 0 <= sectionidx < maxsection. */ - int status; /* Status code. */ - dasm_Section sections[1]; /* All sections. Alloc-extended. */ -}; - -/* The size of the core structure depends on the max. number of sections. */ -#define DASM_PSZ(ms) (sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section)) - - -/* Initialize DynASM state. */ -void dasm_init(Dst_DECL, int maxsection) -{ - dasm_State *D; - size_t psz = 0; - int i; - Dst_REF = NULL; - DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection)); - D = Dst_REF; - D->psize = psz; - D->lglabels = NULL; - D->lgsize = 0; - D->pclabels = NULL; - D->pcsize = 0; - D->globals = NULL; - D->maxsection = maxsection; - for (i = 0; i < maxsection; i++) { - D->sections[i].buf = NULL; /* Need this for pass3. */ - D->sections[i].rbuf = D->sections[i].buf - DASM_SEC2POS(i); - D->sections[i].bsize = 0; - D->sections[i].epos = 0; /* Wrong, but is recalculated after resize. */ - } -} - -/* Free DynASM state. */ -void dasm_free(Dst_DECL) -{ - dasm_State *D = Dst_REF; - int i; - for (i = 0; i < D->maxsection; i++) - if (D->sections[i].buf) - DASM_M_FREE(Dst, D->sections[i].buf, D->sections[i].bsize); - if (D->pclabels) DASM_M_FREE(Dst, D->pclabels, D->pcsize); - if (D->lglabels) DASM_M_FREE(Dst, D->lglabels, D->lgsize); - DASM_M_FREE(Dst, D, D->psize); -} - -/* Setup global label array. Must be called before dasm_setup(). */ -void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl) -{ - dasm_State *D = Dst_REF; - D->globals = gl - 10; /* Negative bias to compensate for locals. */ - DASM_M_GROW(Dst, int, D->lglabels, D->lgsize, (10+maxgl)*sizeof(int)); -} - -/* Grow PC label array. Can be called after dasm_setup(), too. */ -void dasm_growpc(Dst_DECL, unsigned int maxpc) -{ - dasm_State *D = Dst_REF; - size_t osz = D->pcsize; - DASM_M_GROW(Dst, int, D->pclabels, D->pcsize, maxpc*sizeof(int)); - memset((void *)(((unsigned char *)D->pclabels)+osz), 0, D->pcsize-osz); -} - -/* Setup encoder. */ -void dasm_setup(Dst_DECL, const void *actionlist) -{ - dasm_State *D = Dst_REF; - int i; - D->actionlist = (dasm_ActList)actionlist; - D->status = DASM_S_OK; - D->section = &D->sections[0]; - memset((void *)D->lglabels, 0, D->lgsize); - if (D->pclabels) memset((void *)D->pclabels, 0, D->pcsize); - for (i = 0; i < D->maxsection; i++) { - D->sections[i].pos = DASM_SEC2POS(i); - D->sections[i].ofs = 0; - } -} - - -#ifdef DASM_CHECKS -#define CK(x, st) \ - do { if (!(x)) { \ - D->status = DASM_S_##st|(int)(p-D->actionlist-1); return; } } while (0) -#define CKPL(kind, st) \ - do { if ((size_t)((char *)pl-(char *)D->kind##labels) >= D->kind##size) { \ - D->status=DASM_S_RANGE_##st|(int)(p-D->actionlist-1); return; } } while (0) -#else -#define CK(x, st) ((void)0) -#define CKPL(kind, st) ((void)0) -#endif - -/* Pass 1: Store actions and args, link branches/labels, estimate offsets. */ -void dasm_put(Dst_DECL, int start, ...) -{ - va_list ap; - dasm_State *D = Dst_REF; - dasm_ActList p = D->actionlist + start; - dasm_Section *sec = D->section; - int pos = sec->pos, ofs = sec->ofs, mrm = 4; - int *b; - - if (pos >= sec->epos) { - DASM_M_GROW(Dst, int, sec->buf, sec->bsize, - sec->bsize + 2*DASM_MAXSECPOS*sizeof(int)); - sec->rbuf = sec->buf - DASM_POS2BIAS(pos); - sec->epos = (int)sec->bsize/sizeof(int) - DASM_MAXSECPOS+DASM_POS2BIAS(pos); - } - - b = sec->rbuf; - b[pos++] = start; - - va_start(ap, start); - while (1) { - int action = *p++; - if (action < DASM_DISP) { - ofs++; - } else if (action <= DASM_REL_A) { - int n = va_arg(ap, int); - b[pos++] = n; - switch (action) { - case DASM_DISP: - if (n == 0) { if ((mrm&7) == 4) mrm = p[-2]; if ((mrm&7) != 5) break; } - case DASM_IMM_DB: if (((n+128)&-256) == 0) goto ob; - case DASM_REL_A: /* Assumes ptrdiff_t is int. !x64 */ - case DASM_IMM_D: ofs += 4; break; - case DASM_IMM_S: CK(((n+128)&-256) == 0, RANGE_I); goto ob; - case DASM_IMM_B: CK((n&-256) == 0, RANGE_I); ob: ofs++; break; - case DASM_IMM_WB: if (((n+128)&-256) == 0) goto ob; - case DASM_IMM_W: CK((n&-65536) == 0, RANGE_I); ofs += 2; break; - case DASM_SPACE: p++; ofs += n; break; - case DASM_SETLABEL: b[pos-2] = -0x40000000; break; /* Neg. label ofs. */ - case DASM_VREG: CK((n&-8) == 0 && (n != 4 || (*p&1) == 0), RANGE_VREG); - if (*p++ == 1 && *p == DASM_DISP) mrm = n; continue; - } - mrm = 4; - } else { - int *pl, n; - switch (action) { - case DASM_REL_LG: - case DASM_IMM_LG: - n = *p++; pl = D->lglabels + n; - /* Bkwd rel or global. */ - if (n <= 246) { CK(n>=10||*pl<0, RANGE_LG); CKPL(lg, LG); goto putrel; } - pl -= 246; n = *pl; - if (n < 0) n = 0; /* Start new chain for fwd rel if label exists. */ - goto linkrel; - case DASM_REL_PC: - case DASM_IMM_PC: pl = D->pclabels + va_arg(ap, int); CKPL(pc, PC); - putrel: - n = *pl; - if (n < 0) { /* Label exists. Get label pos and store it. */ - b[pos] = -n; - } else { - linkrel: - b[pos] = n; /* Else link to rel chain, anchored at label. */ - *pl = pos; - } - pos++; - ofs += 4; /* Maximum offset needed. */ - if (action == DASM_REL_LG || action == DASM_REL_PC) - b[pos++] = ofs; /* Store pass1 offset estimate. */ - break; - case DASM_LABEL_LG: pl = D->lglabels + *p++; CKPL(lg, LG); goto putlabel; - case DASM_LABEL_PC: pl = D->pclabels + va_arg(ap, int); CKPL(pc, PC); - putlabel: - n = *pl; /* n > 0: Collapse rel chain and replace with label pos. */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = pos; } - *pl = -pos; /* Label exists now. */ - b[pos++] = ofs; /* Store pass1 offset estimate. */ - break; - case DASM_ALIGN: - ofs += *p++; /* Maximum alignment needed (arg is 2**n-1). */ - b[pos++] = ofs; /* Store pass1 offset estimate. */ - break; - case DASM_EXTERN: p += 2; ofs += 4; break; - case DASM_ESC: p++; ofs++; break; - case DASM_MARK: mrm = p[-2]; break; - case DASM_SECTION: - n = *p; CK(n < D->maxsection, RANGE_SEC); D->section = &D->sections[n]; - case DASM_STOP: goto stop; - } - } - } -stop: - va_end(ap); - sec->pos = pos; - sec->ofs = ofs; -} -#undef CK - -/* Pass 2: Link sections, shrink branches/aligns, fix label offsets. */ -int dasm_link(Dst_DECL, size_t *szp) -{ - dasm_State *D = Dst_REF; - int secnum; - int ofs = 0; - -#ifdef DASM_CHECKS - *szp = 0; - if (D->status != DASM_S_OK) return D->status; - { - int pc; - for (pc = 0; pc*sizeof(int) < D->pcsize; pc++) - if (D->pclabels[pc] > 0) return DASM_S_UNDEF_PC|pc; - } -#endif - - { /* Handle globals not defined in this translation unit. */ - int idx; - for (idx = 10; idx*sizeof(int) < D->lgsize; idx++) { - int n = D->lglabels[idx]; - /* Undefined label: Collapse rel chain and replace with marker (< 0). */ - while (n > 0) { int *pb = DASM_POS2PTR(D, n); n = *pb; *pb = -idx; } - } - } - - /* Combine all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->rbuf; - int pos = DASM_SEC2POS(secnum); - int lastpos = sec->pos; - - while (pos != lastpos) { - dasm_ActList p = D->actionlist + b[pos++]; - while (1) { - int op, action = *p++; - switch (action) { - case DASM_REL_LG: p++; op = p[-3]; goto rel_pc; - case DASM_REL_PC: op = p[-2]; rel_pc: { - int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0); - if (shrink) { /* Shrinkable branch opcode? */ - int lofs, lpos = b[pos]; - if (lpos < 0) goto noshrink; /* Ext global? */ - lofs = *DASM_POS2PTR(D, lpos); - if (lpos > pos) { /* Fwd label: add cumulative section offsets. */ - int i; - for (i = secnum; i < DASM_POS2SEC(lpos); i++) - lofs += D->sections[i].ofs; - } else { - lofs -= ofs; /* Bkwd label: unfix offset. */ - } - lofs -= b[pos+1]; /* Short branch ok? */ - if (lofs >= -128-shrink && lofs <= 127) ofs -= shrink; /* Yes. */ - else { noshrink: shrink = 0; } /* No, cannot shrink op. */ - } - b[pos+1] = shrink; - pos += 2; - break; - } - case DASM_SPACE: case DASM_IMM_LG: case DASM_VREG: p++; - case DASM_DISP: case DASM_IMM_S: case DASM_IMM_B: case DASM_IMM_W: - case DASM_IMM_D: case DASM_IMM_WB: case DASM_IMM_DB: - case DASM_SETLABEL: case DASM_REL_A: case DASM_IMM_PC: pos++; break; - case DASM_LABEL_LG: p++; - case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */ - case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */ - case DASM_EXTERN: p += 2; break; - case DASM_ESC: p++; break; - case DASM_MARK: break; - case DASM_SECTION: case DASM_STOP: goto stop; - } - } - stop: (void)0; - } - ofs += sec->ofs; /* Next section starts right after current section. */ - } - - D->codesize = ofs; /* Total size of all code sections */ - *szp = ofs; - return DASM_S_OK; -} - -#define dasmb(x) *cp++ = (unsigned char)(x) -#ifndef DASM_ALIGNED_WRITES -#define dasmw(x) \ - do { *((unsigned short *)cp) = (unsigned short)(x); cp+=2; } while (0) -#define dasmd(x) \ - do { *((unsigned int *)cp) = (unsigned int)(x); cp+=4; } while (0) -#else -#define dasmw(x) do { dasmb(x); dasmb((x)>>8); } while (0) -#define dasmd(x) do { dasmw(x); dasmw((x)>>16); } while (0) -#endif - -/* Pass 3: Encode sections. */ -int dasm_encode(Dst_DECL, void *buffer) -{ - dasm_State *D = Dst_REF; - unsigned char *base = (unsigned char *)buffer; - unsigned char *cp = base; - int secnum; - - /* Encode all code sections. No support for data sections (yet). */ - for (secnum = 0; secnum < D->maxsection; secnum++) { - dasm_Section *sec = D->sections + secnum; - int *b = sec->buf; - int *endb = sec->rbuf + sec->pos; - - while (b != endb) { - dasm_ActList p = D->actionlist + *b++; - unsigned char *mark = NULL; - while (1) { - int action = *p++; - int n = (action >= DASM_DISP && action <= DASM_ALIGN) ? *b++ : 0; - switch (action) { - case DASM_DISP: if (!mark) mark = cp; { - unsigned char *mm = mark; - if (*p != DASM_IMM_DB && *p != DASM_IMM_WB) mark = NULL; - if (n == 0) { int mrm = mm[-1]&7; if (mrm == 4) mrm = mm[0]&7; - if (mrm != 5) { mm[-1] -= 0x80; break; } } - if (((n+128) & -256) != 0) goto wd; else mm[-1] -= 0x40; - } - case DASM_IMM_S: case DASM_IMM_B: wb: dasmb(n); break; - case DASM_IMM_DB: if (((n+128)&-256) == 0) { - db: if (!mark) mark = cp; mark[-2] += 2; mark = NULL; goto wb; - } else mark = NULL; - case DASM_IMM_D: wd: dasmd(n); break; - case DASM_IMM_WB: if (((n+128)&-256) == 0) goto db; else mark = NULL; - case DASM_IMM_W: dasmw(n); break; - case DASM_VREG: { int t = *p++; if (t >= 2) n<<=3; cp[-1] |= n; break; } - case DASM_REL_LG: p++; if (n >= 0) goto rel_pc; - b++; n = (int)(ptrdiff_t)D->globals[-n]; - case DASM_REL_A: rel_a: n -= (int)(ptrdiff_t)(cp+4); goto wd; /* !x64 */ - case DASM_REL_PC: rel_pc: { - int shrink = *b++; - int *pb = DASM_POS2PTR(D, n); if (*pb < 0) { n = pb[1]; goto rel_a; } - n = *pb - ((int)(cp-base) + 4-shrink); - if (shrink == 0) goto wd; - if (shrink == 4) { cp--; cp[-1] = *cp-0x10; } else cp[-1] = 0xeb; - goto wb; - } - case DASM_IMM_LG: - p++; if (n < 0) { n = (int)(ptrdiff_t)D->globals[-n]; goto wd; } - case DASM_IMM_PC: { - int *pb = DASM_POS2PTR(D, n); - n = *pb < 0 ? pb[1] : (*pb + (int)(ptrdiff_t)base); - goto wd; - } - case DASM_LABEL_LG: { - int idx = *p++; - if (idx >= 10) - D->globals[idx] = (void *)(base + (*p == DASM_SETLABEL ? *b : n)); - break; - } - case DASM_LABEL_PC: case DASM_SETLABEL: break; - case DASM_SPACE: { int fill = *p++; while (n--) *cp++ = fill; break; } - case DASM_ALIGN: - n = *p++; - while (((cp-base) & n)) *cp++ = 0x90; /* nop */ - break; - case DASM_EXTERN: n = DASM_EXTERN(Dst, cp, p[1], *p); p += 2; goto wd; - case DASM_MARK: mark = cp; break; - case DASM_ESC: action = *p++; - default: *cp++ = action; break; - case DASM_SECTION: case DASM_STOP: goto stop; - } - } - stop: (void)0; - } - } - - if (base + D->codesize != cp) /* Check for phase errors. */ - return DASM_S_PHASE; - return DASM_S_OK; -} - -/* Get PC label offset. */ -int dasm_getpclabel(Dst_DECL, unsigned int pc) -{ - dasm_State *D = Dst_REF; - if (pc*sizeof(int) < D->pcsize) { - int pos = D->pclabels[pc]; - if (pos < 0) return *DASM_POS2PTR(D, -pos); - if (pos > 0) return -1; /* Undefined. */ - } - return -2; /* Unused or out of range. */ -} - -#ifdef DASM_CHECKS -/* Optional sanity checker to call between isolated encoding steps. */ -int dasm_checkstep(Dst_DECL, int secmatch) -{ - dasm_State *D = Dst_REF; - if (D->status == DASM_S_OK) { - int i; - for (i = 1; i <= 9; i++) { - if (D->lglabels[i] > 0) { D->status = DASM_S_UNDEF_L|i; break; } - D->lglabels[i] = 0; - } - } - if (D->status == DASM_S_OK && secmatch >= 0 && - D->section != &D->sections[secmatch]) - D->status = DASM_S_MATCH_SEC|(int)(D->section-D->sections); - return D->status; -} -#endif - diff --git a/deps/luajit/dynasm/dasm_x86.lua b/deps/luajit/dynasm/dasm_x86.lua deleted file mode 100644 index 7ca061d..0000000 --- a/deps/luajit/dynasm/dasm_x86.lua +++ /dev/null @@ -1,1945 +0,0 @@ ------------------------------------------------------------------------------- --- DynASM x86/x64 module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- See dynasm.lua for full copyright notice. ------------------------------------------------------------------------------- - -local x64 = x64 - --- Module information: -local _info = { - arch = x64 and "x64" or "x86", - description = "DynASM x86/x64 module", - version = "1.3.0", - vernum = 10300, - release = "2011-05-05", - author = "Mike Pall", - license = "MIT", -} - --- Exported glue functions for the arch-specific module. -local _M = { _info = _info } - --- Cache library functions. -local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs -local assert, unpack, setmetatable = assert, unpack or table.unpack, setmetatable -local _s = string -local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char -local find, match, gmatch, gsub = _s.find, _s.match, _s.gmatch, _s.gsub -local concat, sort = table.concat, table.sort -local bit = bit or require("bit") -local band, shl, shr = bit.band, bit.lshift, bit.rshift - --- Inherited tables and callbacks. -local g_opt, g_arch -local wline, werror, wfatal, wwarn - --- Action name list. --- CHECK: Keep this in sync with the C code! -local action_names = { - -- int arg, 1 buffer pos: - "DISP", "IMM_S", "IMM_B", "IMM_W", "IMM_D", "IMM_WB", "IMM_DB", - -- action arg (1 byte), int arg, 1 buffer pos (reg/num): - "VREG", "SPACE", -- !x64: VREG support NYI. - -- ptrdiff_t arg, 1 buffer pos (address): !x64 - "SETLABEL", "REL_A", - -- action arg (1 byte) or int arg, 2 buffer pos (link, offset): - "REL_LG", "REL_PC", - -- action arg (1 byte) or int arg, 1 buffer pos (link): - "IMM_LG", "IMM_PC", - -- action arg (1 byte) or int arg, 1 buffer pos (offset): - "LABEL_LG", "LABEL_PC", - -- action arg (1 byte), 1 buffer pos (offset): - "ALIGN", - -- action args (2 bytes), no buffer pos. - "EXTERN", - -- action arg (1 byte), no buffer pos. - "ESC", - -- no action arg, no buffer pos. - "MARK", - -- action arg (1 byte), no buffer pos, terminal action: - "SECTION", - -- no args, no buffer pos, terminal action: - "STOP" -} - --- Maximum number of section buffer positions for dasm_put(). --- CHECK: Keep this in sync with the C code! -local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines. - --- Action name -> action number (dynamically generated below). -local map_action = {} --- First action number. Everything below does not need to be escaped. -local actfirst = 256-#action_names - --- Action list buffer and string (only used to remove dupes). -local actlist = {} -local actstr = "" - --- Argument list for next dasm_put(). Start with offset 0 into action list. -local actargs = { 0 } - --- Current number of section buffer positions for dasm_put(). -local secpos = 1 - ------------------------------------------------------------------------------- - --- Compute action numbers for action names. -for n,name in ipairs(action_names) do - local num = actfirst + n - 1 - map_action[name] = num -end - --- Dump action names and numbers. -local function dumpactions(out) - out:write("DynASM encoding engine action codes:\n") - for n,name in ipairs(action_names) do - local num = map_action[name] - out:write(format(" %-10s %02X %d\n", name, num, num)) - end - out:write("\n") -end - --- Write action list buffer as a huge static C array. -local function writeactions(out, name) - local nn = #actlist - local last = actlist[nn] or 255 - actlist[nn] = nil -- Remove last byte. - if nn == 0 then nn = 1 end - out:write("static const unsigned char ", name, "[", nn, "] = {\n") - local s = " " - for n,b in ipairs(actlist) do - s = s..b.."," - if #s >= 75 then - assert(out:write(s, "\n")) - s = " " - end - end - out:write(s, last, "\n};\n\n") -- Add last byte back. -end - ------------------------------------------------------------------------------- - --- Add byte to action list. -local function wputxb(n) - assert(n >= 0 and n <= 255 and n % 1 == 0, "byte out of range") - actlist[#actlist+1] = n -end - --- Add action to list with optional arg. Advance buffer pos, too. -local function waction(action, a, num) - wputxb(assert(map_action[action], "bad action name `"..action.."'")) - if a then actargs[#actargs+1] = a end - if a or num then secpos = secpos + (num or 1) end -end - --- Add call to embedded DynASM C code. -local function wcall(func, args) - wline(format("dasm_%s(Dst, %s);", func, concat(args, ", ")), true) -end - --- Delete duplicate action list chunks. A tad slow, but so what. -local function dedupechunk(offset) - local al, as = actlist, actstr - local chunk = char(unpack(al, offset+1, #al)) - local orig = find(as, chunk, 1, true) - if orig then - actargs[1] = orig-1 -- Replace with original offset. - for i=offset+1,#al do al[i] = nil end -- Kill dupe. - else - actstr = as..chunk - end -end - --- Flush action list (intervening C code or buffer pos overflow). -local function wflush(term) - local offset = actargs[1] - if #actlist == offset then return end -- Nothing to flush. - if not term then waction("STOP") end -- Terminate action list. - dedupechunk(offset) - wcall("put", actargs) -- Add call to dasm_put(). - actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put(). - secpos = 1 -- The actionlist offset occupies a buffer position, too. -end - --- Put escaped byte. -local function wputb(n) - if n >= actfirst then waction("ESC") end -- Need to escape byte. - wputxb(n) -end - ------------------------------------------------------------------------------- - --- Global label name -> global label number. With auto assignment on 1st use. -local next_global = 10 -local map_global = setmetatable({}, { __index = function(t, name) - if not match(name, "^[%a_][%w_@]*$") then werror("bad global label") end - local n = next_global - if n > 246 then werror("too many global labels") end - next_global = n + 1 - t[name] = n - return n -end}) - --- Dump global labels. -local function dumpglobals(out, lvl) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("Global labels:\n") - for i=10,next_global-1 do - out:write(format(" %s\n", t[i])) - end - out:write("\n") -end - --- Write global label enum. -local function writeglobals(out, prefix) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("enum {\n") - for i=10,next_global-1 do - out:write(" ", prefix, gsub(t[i], "@.*", ""), ",\n") - end - out:write(" ", prefix, "_MAX\n};\n") -end - --- Write global label names. -local function writeglobalnames(out, name) - local t = {} - for name, n in pairs(map_global) do t[n] = name end - out:write("static const char *const ", name, "[] = {\n") - for i=10,next_global-1 do - out:write(" \"", t[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Extern label name -> extern label number. With auto assignment on 1st use. -local next_extern = -1 -local map_extern = setmetatable({}, { __index = function(t, name) - -- No restrictions on the name for now. - local n = next_extern - if n < -256 then werror("too many extern labels") end - next_extern = n - 1 - t[name] = n - return n -end}) - --- Dump extern labels. -local function dumpexterns(out, lvl) - local t = {} - for name, n in pairs(map_extern) do t[-n] = name end - out:write("Extern labels:\n") - for i=1,-next_extern-1 do - out:write(format(" %s\n", t[i])) - end - out:write("\n") -end - --- Write extern label names. -local function writeexternnames(out, name) - local t = {} - for name, n in pairs(map_extern) do t[-n] = name end - out:write("static const char *const ", name, "[] = {\n") - for i=1,-next_extern-1 do - out:write(" \"", t[i], "\",\n") - end - out:write(" (const char *)0\n};\n") -end - ------------------------------------------------------------------------------- - --- Arch-specific maps. -local map_archdef = {} -- Ext. register name -> int. name. -local map_reg_rev = {} -- Int. register name -> ext. name. -local map_reg_num = {} -- Int. register name -> register number. -local map_reg_opsize = {} -- Int. register name -> operand size. -local map_reg_valid_base = {} -- Int. register name -> valid base register? -local map_reg_valid_index = {} -- Int. register name -> valid index register? -local map_reg_needrex = {} -- Int. register name -> need rex vs. no rex. -local reg_list = {} -- Canonical list of int. register names. - -local map_type = {} -- Type name -> { ctype, reg } -local ctypenum = 0 -- Type number (for _PTx macros). - -local addrsize = x64 and "q" or "d" -- Size for address operands. - --- Helper functions to fill register maps. -local function mkrmap(sz, cl, names) - local cname = format("@%s", sz) - reg_list[#reg_list+1] = cname - map_archdef[cl] = cname - map_reg_rev[cname] = cl - map_reg_num[cname] = -1 - map_reg_opsize[cname] = sz - if sz == addrsize or sz == "d" then - map_reg_valid_base[cname] = true - map_reg_valid_index[cname] = true - end - if names then - for n,name in ipairs(names) do - local iname = format("@%s%x", sz, n-1) - reg_list[#reg_list+1] = iname - map_archdef[name] = iname - map_reg_rev[iname] = name - map_reg_num[iname] = n-1 - map_reg_opsize[iname] = sz - if sz == "b" and n > 4 then map_reg_needrex[iname] = false end - if sz == addrsize or sz == "d" then - map_reg_valid_base[iname] = true - map_reg_valid_index[iname] = true - end - end - end - for i=0,(x64 and sz ~= "f") and 15 or 7 do - local needrex = sz == "b" and i > 3 - local iname = format("@%s%x%s", sz, i, needrex and "R" or "") - if needrex then map_reg_needrex[iname] = true end - local name - if sz == "o" then name = format("xmm%d", i) - elseif sz == "f" then name = format("st%d", i) - else name = format("r%d%s", i, sz == addrsize and "" or sz) end - map_archdef[name] = iname - if not map_reg_rev[iname] then - reg_list[#reg_list+1] = iname - map_reg_rev[iname] = name - map_reg_num[iname] = i - map_reg_opsize[iname] = sz - if sz == addrsize or sz == "d" then - map_reg_valid_base[iname] = true - map_reg_valid_index[iname] = true - end - end - end - reg_list[#reg_list+1] = "" -end - --- Integer registers (qword, dword, word and byte sized). -if x64 then - mkrmap("q", "Rq", {"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi"}) -end -mkrmap("d", "Rd", {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"}) -mkrmap("w", "Rw", {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"}) -mkrmap("b", "Rb", {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}) -map_reg_valid_index[map_archdef.esp] = false -if x64 then map_reg_valid_index[map_archdef.rsp] = false end -map_archdef["Ra"] = "@"..addrsize - --- FP registers (internally tword sized, but use "f" as operand size). -mkrmap("f", "Rf") - --- SSE registers (oword sized, but qword and dword accessible). -mkrmap("o", "xmm") - --- Operand size prefixes to codes. -local map_opsize = { - byte = "b", word = "w", dword = "d", qword = "q", oword = "o", tword = "t", - aword = addrsize, -} - --- Operand size code to number. -local map_opsizenum = { - b = 1, w = 2, d = 4, q = 8, o = 16, t = 10, -} - --- Operand size code to name. -local map_opsizename = { - b = "byte", w = "word", d = "dword", q = "qword", o = "oword", t = "tword", - f = "fpword", -} - --- Valid index register scale factors. -local map_xsc = { - ["1"] = 0, ["2"] = 1, ["4"] = 2, ["8"] = 3, -} - --- Condition codes. -local map_cc = { - o = 0, no = 1, b = 2, nb = 3, e = 4, ne = 5, be = 6, nbe = 7, - s = 8, ns = 9, p = 10, np = 11, l = 12, nl = 13, le = 14, nle = 15, - c = 2, nae = 2, nc = 3, ae = 3, z = 4, nz = 5, na = 6, a = 7, - pe = 10, po = 11, nge = 12, ge = 13, ng = 14, g = 15, -} - - --- Reverse defines for registers. -function _M.revdef(s) - return gsub(s, "@%w+", map_reg_rev) -end - --- Dump register names and numbers -local function dumpregs(out) - out:write("Register names, sizes and internal numbers:\n") - for _,reg in ipairs(reg_list) do - if reg == "" then - out:write("\n") - else - local name = map_reg_rev[reg] - local num = map_reg_num[reg] - local opsize = map_opsizename[map_reg_opsize[reg]] - out:write(format(" %-5s %-8s %s\n", name, opsize, - num < 0 and "(variable)" or num)) - end - end -end - ------------------------------------------------------------------------------- - --- Put action for label arg (IMM_LG, IMM_PC, REL_LG, REL_PC). -local function wputlabel(aprefix, imm, num) - if type(imm) == "number" then - if imm < 0 then - waction("EXTERN") - wputxb(aprefix == "IMM_" and 0 or 1) - imm = -imm-1 - else - waction(aprefix.."LG", nil, num); - end - wputxb(imm) - else - waction(aprefix.."PC", imm, num) - end -end - --- Put signed byte or arg. -local function wputsbarg(n) - if type(n) == "number" then - if n < -128 or n > 127 then - werror("signed immediate byte out of range") - end - if n < 0 then n = n + 256 end - wputb(n) - else waction("IMM_S", n) end -end - --- Put unsigned byte or arg. -local function wputbarg(n) - if type(n) == "number" then - if n < 0 or n > 255 then - werror("unsigned immediate byte out of range") - end - wputb(n) - else waction("IMM_B", n) end -end - --- Put unsigned word or arg. -local function wputwarg(n) - if type(n) == "number" then - if shr(n, 16) ~= 0 then - werror("unsigned immediate word out of range") - end - wputb(band(n, 255)); wputb(shr(n, 8)); - else waction("IMM_W", n) end -end - --- Put signed or unsigned dword or arg. -local function wputdarg(n) - local tn = type(n) - if tn == "number" then - wputb(band(n, 255)) - wputb(band(shr(n, 8), 255)) - wputb(band(shr(n, 16), 255)) - wputb(shr(n, 24)) - elseif tn == "table" then - wputlabel("IMM_", n[1], 1) - else - waction("IMM_D", n) - end -end - --- Put operand-size dependent number or arg (defaults to dword). -local function wputszarg(sz, n) - if not sz or sz == "d" or sz == "q" then wputdarg(n) - elseif sz == "w" then wputwarg(n) - elseif sz == "b" then wputbarg(n) - elseif sz == "s" then wputsbarg(n) - else werror("bad operand size") end -end - --- Put multi-byte opcode with operand-size dependent modifications. -local function wputop(sz, op, rex) - local r - if rex ~= 0 and not x64 then werror("bad operand size") end - if sz == "w" then wputb(102) end - -- Needs >32 bit numbers, but only for crc32 eax, word [ebx] - if op >= 4294967296 then r = op%4294967296 wputb((op-r)/4294967296) op = r end - if op >= 16777216 then wputb(shr(op, 24)); op = band(op, 0xffffff) end - if op >= 65536 then - if rex ~= 0 then - local opc3 = band(op, 0xffff00) - if opc3 == 0x0f3a00 or opc3 == 0x0f3800 then - wputb(64 + band(rex, 15)); rex = 0 - end - end - wputb(shr(op, 16)); op = band(op, 0xffff) - end - if op >= 256 then - local b = shr(op, 8) - if b == 15 and rex ~= 0 then wputb(64 + band(rex, 15)); rex = 0 end - wputb(b) - op = band(op, 255) - end - if rex ~= 0 then wputb(64 + band(rex, 15)) end - if sz == "b" then op = op - 1 end - wputb(op) -end - --- Put ModRM or SIB formatted byte. -local function wputmodrm(m, s, rm, vs, vrm) - assert(m < 4 and s < 16 and rm < 16, "bad modrm operands") - wputb(shl(m, 6) + shl(band(s, 7), 3) + band(rm, 7)) -end - --- Put ModRM/SIB plus optional displacement. -local function wputmrmsib(t, imark, s, vsreg) - local vreg, vxreg - local reg, xreg = t.reg, t.xreg - if reg and reg < 0 then reg = 0; vreg = t.vreg end - if xreg and xreg < 0 then xreg = 0; vxreg = t.vxreg end - if s < 0 then s = 0 end - - -- Register mode. - if sub(t.mode, 1, 1) == "r" then - wputmodrm(3, s, reg) - if vsreg then waction("VREG", vsreg); wputxb(2) end - if vreg then waction("VREG", vreg); wputxb(0) end - return - end - - local disp = t.disp - local tdisp = type(disp) - -- No base register? - if not reg then - local riprel = false - if xreg then - -- Indexed mode with index register only. - -- [xreg*xsc+disp] -> (0, s, esp) (xsc, xreg, ebp) - wputmodrm(0, s, 4) - if imark == "I" then waction("MARK") end - if vsreg then waction("VREG", vsreg); wputxb(2) end - wputmodrm(t.xsc, xreg, 5) - if vxreg then waction("VREG", vxreg); wputxb(3) end - else - -- Pure 32 bit displacement. - if x64 and tdisp ~= "table" then - wputmodrm(0, s, 4) -- [disp] -> (0, s, esp) (0, esp, ebp) - if imark == "I" then waction("MARK") end - wputmodrm(0, 4, 5) - else - riprel = x64 - wputmodrm(0, s, 5) -- [disp|rip-label] -> (0, s, ebp) - if imark == "I" then waction("MARK") end - end - if vsreg then waction("VREG", vsreg); wputxb(2) end - end - if riprel then -- Emit rip-relative displacement. - if match("UWSiI", imark) then - werror("NYI: rip-relative displacement followed by immediate") - end - -- The previous byte in the action buffer cannot be 0xe9 or 0x80-0x8f. - wputlabel("REL_", disp[1], 2) - else - wputdarg(disp) - end - return - end - - local m - if tdisp == "number" then -- Check displacement size at assembly time. - if disp == 0 and band(reg, 7) ~= 5 then -- [ebp] -> [ebp+0] (in SIB, too) - if not vreg then m = 0 end -- Force DISP to allow [Rd(5)] -> [ebp+0] - elseif disp >= -128 and disp <= 127 then m = 1 - else m = 2 end - elseif tdisp == "table" then - m = 2 - end - - -- Index register present or esp as base register: need SIB encoding. - if xreg or band(reg, 7) == 4 then - wputmodrm(m or 2, s, 4) -- ModRM. - if m == nil or imark == "I" then waction("MARK") end - if vsreg then waction("VREG", vsreg); wputxb(2) end - wputmodrm(t.xsc or 0, xreg or 4, reg) -- SIB. - if vxreg then waction("VREG", vxreg); wputxb(3) end - if vreg then waction("VREG", vreg); wputxb(1) end - else - wputmodrm(m or 2, s, reg) -- ModRM. - if (imark == "I" and (m == 1 or m == 2)) or - (m == nil and (vsreg or vreg)) then waction("MARK") end - if vsreg then waction("VREG", vsreg); wputxb(2) end - if vreg then waction("VREG", vreg); wputxb(1) end - end - - -- Put displacement. - if m == 1 then wputsbarg(disp) - elseif m == 2 then wputdarg(disp) - elseif m == nil then waction("DISP", disp) end -end - ------------------------------------------------------------------------------- - --- Return human-readable operand mode string. -local function opmodestr(op, args) - local m = {} - for i=1,#args do - local a = args[i] - m[#m+1] = sub(a.mode, 1, 1)..(a.opsize or "?") - end - return op.." "..concat(m, ",") -end - --- Convert number to valid integer or nil. -local function toint(expr) - local n = tonumber(expr) - if n then - if n % 1 ~= 0 or n < -2147483648 or n > 4294967295 then - werror("bad integer number `"..expr.."'") - end - return n - end -end - --- Parse immediate expression. -local function immexpr(expr) - -- &expr (pointer) - if sub(expr, 1, 1) == "&" then - return "iPJ", format("(ptrdiff_t)(%s)", sub(expr,2)) - end - - local prefix = sub(expr, 1, 2) - -- =>expr (pc label reference) - if prefix == "=>" then - return "iJ", sub(expr, 3) - end - -- ->name (global label reference) - if prefix == "->" then - return "iJ", map_global[sub(expr, 3)] - end - - -- [<>][1-9] (local label reference) - local dir, lnum = match(expr, "^([<>])([1-9])$") - if dir then -- Fwd: 247-255, Bkwd: 1-9. - return "iJ", lnum + (dir == ">" and 246 or 0) - end - - local extname = match(expr, "^extern%s+(%S+)$") - if extname then - return "iJ", map_extern[extname] - end - - -- expr (interpreted as immediate) - return "iI", expr -end - --- Parse displacement expression: +-num, +-expr, +-opsize*num -local function dispexpr(expr) - local disp = expr == "" and 0 or toint(expr) - if disp then return disp end - local c, dispt = match(expr, "^([+-])%s*(.+)$") - if c == "+" then - expr = dispt - elseif not c then - werror("bad displacement expression `"..expr.."'") - end - local opsize, tailops = match(dispt, "^(%w+)%s*%*%s*(.+)$") - local ops, imm = map_opsize[opsize], toint(tailops) - if ops and imm then - if c == "-" then imm = -imm end - return imm*map_opsizenum[ops] - end - local mode, iexpr = immexpr(dispt) - if mode == "iJ" then - if c == "-" then werror("cannot invert label reference") end - return { iexpr } - end - return expr -- Need to return original signed expression. -end - --- Parse register or type expression. -local function rtexpr(expr) - if not expr then return end - local tname, ovreg = match(expr, "^([%w_]+):(@[%w_]+)$") - local tp = map_type[tname or expr] - if tp then - local reg = ovreg or tp.reg - local rnum = map_reg_num[reg] - if not rnum then - werror("type `"..(tname or expr).."' needs a register override") - end - if not map_reg_valid_base[reg] then - werror("bad base register override `"..(map_reg_rev[reg] or reg).."'") - end - return reg, rnum, tp - end - return expr, map_reg_num[expr] -end - --- Parse operand and return { mode, opsize, reg, xreg, xsc, disp, imm }. -local function parseoperand(param) - local t = {} - - local expr = param - local opsize, tailops = match(param, "^(%w+)%s*(.+)$") - if opsize then - t.opsize = map_opsize[opsize] - if t.opsize then expr = tailops end - end - - local br = match(expr, "^%[%s*(.-)%s*%]$") - repeat - if br then - t.mode = "xm" - - -- [disp] - t.disp = toint(br) - if t.disp then - t.mode = x64 and "xm" or "xmO" - break - end - - -- [reg...] - local tp - local reg, tailr = match(br, "^([@%w_:]+)%s*(.*)$") - reg, t.reg, tp = rtexpr(reg) - if not t.reg then - -- [expr] - t.mode = x64 and "xm" or "xmO" - t.disp = dispexpr("+"..br) - break - end - - if t.reg == -1 then - t.vreg, tailr = match(tailr, "^(%b())(.*)$") - if not t.vreg then werror("bad variable register expression") end - end - - -- [xreg*xsc] or [xreg*xsc+-disp] or [xreg*xsc+-expr] - local xsc, tailsc = match(tailr, "^%*%s*([1248])%s*(.*)$") - if xsc then - if not map_reg_valid_index[reg] then - werror("bad index register `"..map_reg_rev[reg].."'") - end - t.xsc = map_xsc[xsc] - t.xreg = t.reg - t.vxreg = t.vreg - t.reg = nil - t.vreg = nil - t.disp = dispexpr(tailsc) - break - end - if not map_reg_valid_base[reg] then - werror("bad base register `"..map_reg_rev[reg].."'") - end - - -- [reg] or [reg+-disp] - t.disp = toint(tailr) or (tailr == "" and 0) - if t.disp then break end - - -- [reg+xreg...] - local xreg, tailx = match(tailr, "^+%s*([@%w_:]+)%s*(.*)$") - xreg, t.xreg, tp = rtexpr(xreg) - if not t.xreg then - -- [reg+-expr] - t.disp = dispexpr(tailr) - break - end - if not map_reg_valid_index[xreg] then - werror("bad index register `"..map_reg_rev[xreg].."'") - end - - if t.xreg == -1 then - t.vxreg, tailx = match(tailx, "^(%b())(.*)$") - if not t.vxreg then werror("bad variable register expression") end - end - - -- [reg+xreg*xsc...] - local xsc, tailsc = match(tailx, "^%*%s*([1248])%s*(.*)$") - if xsc then - t.xsc = map_xsc[xsc] - tailx = tailsc - end - - -- [...] or [...+-disp] or [...+-expr] - t.disp = dispexpr(tailx) - else - -- imm or opsize*imm - local imm = toint(expr) - if not imm and sub(expr, 1, 1) == "*" and t.opsize then - imm = toint(sub(expr, 2)) - if imm then - imm = imm * map_opsizenum[t.opsize] - t.opsize = nil - end - end - if imm then - if t.opsize then werror("bad operand size override") end - local m = "i" - if imm == 1 then m = m.."1" end - if imm >= 4294967168 and imm <= 4294967295 then imm = imm-4294967296 end - if imm >= -128 and imm <= 127 then m = m.."S" end - t.imm = imm - t.mode = m - break - end - - local tp - local reg, tailr = match(expr, "^([@%w_:]+)%s*(.*)$") - reg, t.reg, tp = rtexpr(reg) - if t.reg then - if t.reg == -1 then - t.vreg, tailr = match(tailr, "^(%b())(.*)$") - if not t.vreg then werror("bad variable register expression") end - end - -- reg - if tailr == "" then - if t.opsize then werror("bad operand size override") end - t.opsize = map_reg_opsize[reg] - if t.opsize == "f" then - t.mode = t.reg == 0 and "fF" or "f" - else - if reg == "@w4" or (x64 and reg == "@d4") then - wwarn("bad idea, try again with `"..(x64 and "rsp'" or "esp'")) - end - t.mode = t.reg == 0 and "rmR" or (reg == "@b1" and "rmC" or "rm") - end - t.needrex = map_reg_needrex[reg] - break - end - - -- type[idx], type[idx].field, type->field -> [reg+offset_expr] - if not tp then werror("bad operand `"..param.."'") end - t.mode = "xm" - t.disp = format(tp.ctypefmt, tailr) - else - t.mode, t.imm = immexpr(expr) - if sub(t.mode, -1) == "J" then - if t.opsize and t.opsize ~= addrsize then - werror("bad operand size override") - end - t.opsize = addrsize - end - end - end - until true - return t -end - ------------------------------------------------------------------------------- --- x86 Template String Description --- =============================== --- --- Each template string is a list of [match:]pattern pairs, --- separated by "|". The first match wins. No match means a --- bad or unsupported combination of operand modes or sizes. --- --- The match part and the ":" is omitted if the operation has --- no operands. Otherwise the first N characters are matched --- against the mode strings of each of the N operands. --- --- The mode string for each operand type is (see parseoperand()): --- Integer register: "rm", +"R" for eax, ax, al, +"C" for cl --- FP register: "f", +"F" for st0 --- Index operand: "xm", +"O" for [disp] (pure offset) --- Immediate: "i", +"S" for signed 8 bit, +"1" for 1, --- +"I" for arg, +"P" for pointer --- Any: +"J" for valid jump targets --- --- So a match character "m" (mixed) matches both an integer register --- and an index operand (to be encoded with the ModRM/SIB scheme). --- But "r" matches only a register and "x" only an index operand --- (e.g. for FP memory access operations). --- --- The operand size match string starts right after the mode match --- characters and ends before the ":". "dwb" or "qdwb" is assumed, if empty. --- The effective data size of the operation is matched against this list. --- --- If only the regular "b", "w", "d", "q", "t" operand sizes are --- present, then all operands must be the same size. Unspecified sizes --- are ignored, but at least one operand must have a size or the pattern --- won't match (use the "byte", "word", "dword", "qword", "tword" --- operand size overrides. E.g.: mov dword [eax], 1). --- --- If the list has a "1" or "2" prefix, the operand size is taken --- from the respective operand and any other operand sizes are ignored. --- If the list contains only ".", all operand sizes are ignored. --- If the list has a "/" prefix, the concatenated (mixed) operand sizes --- are compared to the match. --- --- E.g. "rrdw" matches for either two dword registers or two word --- registers. "Fx2dq" matches an st0 operand plus an index operand --- pointing to a dword (float) or qword (double). --- --- Every character after the ":" is part of the pattern string: --- Hex chars are accumulated to form the opcode (left to right). --- "n" disables the standard opcode mods --- (otherwise: -1 for "b", o16 prefix for "w", rex.w for "q") --- "X" Force REX.W. --- "r"/"R" adds the reg. number from the 1st/2nd operand to the opcode. --- "m"/"M" generates ModRM/SIB from the 1st/2nd operand. --- The spare 3 bits are either filled with the last hex digit or --- the result from a previous "r"/"R". The opcode is restored. --- --- All of the following characters force a flush of the opcode: --- "o"/"O" stores a pure 32 bit disp (offset) from the 1st/2nd operand. --- "S" stores a signed 8 bit immediate from the last operand. --- "U" stores an unsigned 8 bit immediate from the last operand. --- "W" stores an unsigned 16 bit immediate from the last operand. --- "i" stores an operand sized immediate from the last operand. --- "I" dito, but generates an action code to optionally modify --- the opcode (+2) for a signed 8 bit immediate. --- "J" generates one of the REL action codes from the last operand. --- ------------------------------------------------------------------------------- - --- Template strings for x86 instructions. Ordered by first opcode byte. --- Unimplemented opcodes (deliberate omissions) are marked with *. -local map_op = { - -- 00-05: add... - -- 06: *push es - -- 07: *pop es - -- 08-0D: or... - -- 0E: *push cs - -- 0F: two byte opcode prefix - -- 10-15: adc... - -- 16: *push ss - -- 17: *pop ss - -- 18-1D: sbb... - -- 1E: *push ds - -- 1F: *pop ds - -- 20-25: and... - es_0 = "26", - -- 27: *daa - -- 28-2D: sub... - cs_0 = "2E", - -- 2F: *das - -- 30-35: xor... - ss_0 = "36", - -- 37: *aaa - -- 38-3D: cmp... - ds_0 = "3E", - -- 3F: *aas - inc_1 = x64 and "m:FF0m" or "rdw:40r|m:FF0m", - dec_1 = x64 and "m:FF1m" or "rdw:48r|m:FF1m", - push_1 = (x64 and "rq:n50r|rw:50r|mq:nFF6m|mw:FF6m" or - "rdw:50r|mdw:FF6m").."|S.:6AS|ib:n6Ai|i.:68i", - pop_1 = x64 and "rq:n58r|rw:58r|mq:n8F0m|mw:8F0m" or "rdw:58r|mdw:8F0m", - -- 60: *pusha, *pushad, *pushaw - -- 61: *popa, *popad, *popaw - -- 62: *bound rdw,x - -- 63: x86: *arpl mw,rw - movsxd_2 = x64 and "rm/qd:63rM", - fs_0 = "64", - gs_0 = "65", - o16_0 = "66", - a16_0 = not x64 and "67" or nil, - a32_0 = x64 and "67", - -- 68: push idw - -- 69: imul rdw,mdw,idw - -- 6A: push ib - -- 6B: imul rdw,mdw,S - -- 6C: *insb - -- 6D: *insd, *insw - -- 6E: *outsb - -- 6F: *outsd, *outsw - -- 70-7F: jcc lb - -- 80: add... mb,i - -- 81: add... mdw,i - -- 82: *undefined - -- 83: add... mdw,S - test_2 = "mr:85Rm|rm:85rM|Ri:A9ri|mi:F70mi", - -- 86: xchg rb,mb - -- 87: xchg rdw,mdw - -- 88: mov mb,r - -- 89: mov mdw,r - -- 8A: mov r,mb - -- 8B: mov r,mdw - -- 8C: *mov mdw,seg - lea_2 = "rx1dq:8DrM", - -- 8E: *mov seg,mdw - -- 8F: pop mdw - nop_0 = "90", - xchg_2 = "Rrqdw:90R|rRqdw:90r|rm:87rM|mr:87Rm", - cbw_0 = "6698", - cwde_0 = "98", - cdqe_0 = "4898", - cwd_0 = "6699", - cdq_0 = "99", - cqo_0 = "4899", - -- 9A: *call iw:idw - wait_0 = "9B", - fwait_0 = "9B", - pushf_0 = "9C", - pushfd_0 = not x64 and "9C", - pushfq_0 = x64 and "9C", - popf_0 = "9D", - popfd_0 = not x64 and "9D", - popfq_0 = x64 and "9D", - sahf_0 = "9E", - lahf_0 = "9F", - mov_2 = "OR:A3o|RO:A1O|mr:89Rm|rm:8BrM|rib:nB0ri|ridw:B8ri|mi:C70mi", - movsb_0 = "A4", - movsw_0 = "66A5", - movsd_0 = "A5", - cmpsb_0 = "A6", - cmpsw_0 = "66A7", - cmpsd_0 = "A7", - -- A8: test Rb,i - -- A9: test Rdw,i - stosb_0 = "AA", - stosw_0 = "66AB", - stosd_0 = "AB", - lodsb_0 = "AC", - lodsw_0 = "66AD", - lodsd_0 = "AD", - scasb_0 = "AE", - scasw_0 = "66AF", - scasd_0 = "AF", - -- B0-B7: mov rb,i - -- B8-BF: mov rdw,i - -- C0: rol... mb,i - -- C1: rol... mdw,i - ret_1 = "i.:nC2W", - ret_0 = "C3", - -- C4: *les rdw,mq - -- C5: *lds rdw,mq - -- C6: mov mb,i - -- C7: mov mdw,i - -- C8: *enter iw,ib - leave_0 = "C9", - -- CA: *retf iw - -- CB: *retf - int3_0 = "CC", - int_1 = "i.:nCDU", - into_0 = "CE", - -- CF: *iret - -- D0: rol... mb,1 - -- D1: rol... mdw,1 - -- D2: rol... mb,cl - -- D3: rol... mb,cl - -- D4: *aam ib - -- D5: *aad ib - -- D6: *salc - -- D7: *xlat - -- D8-DF: floating point ops - -- E0: *loopne - -- E1: *loope - -- E2: *loop - -- E3: *jcxz, *jecxz - -- E4: *in Rb,ib - -- E5: *in Rdw,ib - -- E6: *out ib,Rb - -- E7: *out ib,Rdw - call_1 = x64 and "mq:nFF2m|J.:E8nJ" or "md:FF2m|J.:E8J", - jmp_1 = x64 and "mq:nFF4m|J.:E9nJ" or "md:FF4m|J.:E9J", -- short: EB - -- EA: *jmp iw:idw - -- EB: jmp ib - -- EC: *in Rb,dx - -- ED: *in Rdw,dx - -- EE: *out dx,Rb - -- EF: *out dx,Rdw - lock_0 = "F0", - int1_0 = "F1", - repne_0 = "F2", - repnz_0 = "F2", - rep_0 = "F3", - repe_0 = "F3", - repz_0 = "F3", - -- F4: *hlt - cmc_0 = "F5", - -- F6: test... mb,i; div... mb - -- F7: test... mdw,i; div... mdw - clc_0 = "F8", - stc_0 = "F9", - -- FA: *cli - cld_0 = "FC", - std_0 = "FD", - -- FE: inc... mb - -- FF: inc... mdw - - -- misc ops - not_1 = "m:F72m", - neg_1 = "m:F73m", - mul_1 = "m:F74m", - imul_1 = "m:F75m", - div_1 = "m:F76m", - idiv_1 = "m:F77m", - - imul_2 = "rmqdw:0FAFrM|rIqdw:69rmI|rSqdw:6BrmS|riqdw:69rmi", - imul_3 = "rmIqdw:69rMI|rmSqdw:6BrMS|rmiqdw:69rMi", - - movzx_2 = "rm/db:0FB6rM|rm/qb:|rm/wb:0FB6rM|rm/dw:0FB7rM|rm/qw:", - movsx_2 = "rm/db:0FBErM|rm/qb:|rm/wb:0FBErM|rm/dw:0FBFrM|rm/qw:", - - bswap_1 = "rqd:0FC8r", - bsf_2 = "rmqdw:0FBCrM", - bsr_2 = "rmqdw:0FBDrM", - bt_2 = "mrqdw:0FA3Rm|miqdw:0FBA4mU", - btc_2 = "mrqdw:0FBBRm|miqdw:0FBA7mU", - btr_2 = "mrqdw:0FB3Rm|miqdw:0FBA6mU", - bts_2 = "mrqdw:0FABRm|miqdw:0FBA5mU", - - shld_3 = "mriqdw:0FA4RmU|mrCqdw:0FA5Rm", - shrd_3 = "mriqdw:0FACRmU|mrCqdw:0FADRm", - - rdtsc_0 = "0F31", -- P1+ - cpuid_0 = "0FA2", -- P1+ - - -- floating point ops - fst_1 = "ff:DDD0r|xd:D92m|xq:nDD2m", - fstp_1 = "ff:DDD8r|xd:D93m|xq:nDD3m|xt:DB7m", - fld_1 = "ff:D9C0r|xd:D90m|xq:nDD0m|xt:DB5m", - - fpop_0 = "DDD8", -- Alias for fstp st0. - - fist_1 = "xw:nDF2m|xd:DB2m", - fistp_1 = "xw:nDF3m|xd:DB3m|xq:nDF7m", - fild_1 = "xw:nDF0m|xd:DB0m|xq:nDF5m", - - fxch_0 = "D9C9", - fxch_1 = "ff:D9C8r", - fxch_2 = "fFf:D9C8r|Fff:D9C8R", - - fucom_1 = "ff:DDE0r", - fucom_2 = "Fff:DDE0R", - fucomp_1 = "ff:DDE8r", - fucomp_2 = "Fff:DDE8R", - fucomi_1 = "ff:DBE8r", -- P6+ - fucomi_2 = "Fff:DBE8R", -- P6+ - fucomip_1 = "ff:DFE8r", -- P6+ - fucomip_2 = "Fff:DFE8R", -- P6+ - fcomi_1 = "ff:DBF0r", -- P6+ - fcomi_2 = "Fff:DBF0R", -- P6+ - fcomip_1 = "ff:DFF0r", -- P6+ - fcomip_2 = "Fff:DFF0R", -- P6+ - fucompp_0 = "DAE9", - fcompp_0 = "DED9", - - fldenv_1 = "x.:D94m", - fnstenv_1 = "x.:D96m", - fstenv_1 = "x.:9BD96m", - fldcw_1 = "xw:nD95m", - fstcw_1 = "xw:n9BD97m", - fnstcw_1 = "xw:nD97m", - fstsw_1 = "Rw:n9BDFE0|xw:n9BDD7m", - fnstsw_1 = "Rw:nDFE0|xw:nDD7m", - fclex_0 = "9BDBE2", - fnclex_0 = "DBE2", - - fnop_0 = "D9D0", - -- D9D1-D9DF: unassigned - - fchs_0 = "D9E0", - fabs_0 = "D9E1", - -- D9E2: unassigned - -- D9E3: unassigned - ftst_0 = "D9E4", - fxam_0 = "D9E5", - -- D9E6: unassigned - -- D9E7: unassigned - fld1_0 = "D9E8", - fldl2t_0 = "D9E9", - fldl2e_0 = "D9EA", - fldpi_0 = "D9EB", - fldlg2_0 = "D9EC", - fldln2_0 = "D9ED", - fldz_0 = "D9EE", - -- D9EF: unassigned - - f2xm1_0 = "D9F0", - fyl2x_0 = "D9F1", - fptan_0 = "D9F2", - fpatan_0 = "D9F3", - fxtract_0 = "D9F4", - fprem1_0 = "D9F5", - fdecstp_0 = "D9F6", - fincstp_0 = "D9F7", - fprem_0 = "D9F8", - fyl2xp1_0 = "D9F9", - fsqrt_0 = "D9FA", - fsincos_0 = "D9FB", - frndint_0 = "D9FC", - fscale_0 = "D9FD", - fsin_0 = "D9FE", - fcos_0 = "D9FF", - - -- SSE, SSE2 - andnpd_2 = "rmo:660F55rM", - andnps_2 = "rmo:0F55rM", - andpd_2 = "rmo:660F54rM", - andps_2 = "rmo:0F54rM", - clflush_1 = "x.:0FAE7m", - cmppd_3 = "rmio:660FC2rMU", - cmpps_3 = "rmio:0FC2rMU", - cmpsd_3 = "rrio:F20FC2rMU|rxi/oq:", - cmpss_3 = "rrio:F30FC2rMU|rxi/od:", - comisd_2 = "rro:660F2FrM|rx/oq:", - comiss_2 = "rro:0F2FrM|rx/od:", - cvtdq2pd_2 = "rro:F30FE6rM|rx/oq:", - cvtdq2ps_2 = "rmo:0F5BrM", - cvtpd2dq_2 = "rmo:F20FE6rM", - cvtpd2ps_2 = "rmo:660F5ArM", - cvtpi2pd_2 = "rx/oq:660F2ArM", - cvtpi2ps_2 = "rx/oq:0F2ArM", - cvtps2dq_2 = "rmo:660F5BrM", - cvtps2pd_2 = "rro:0F5ArM|rx/oq:", - cvtsd2si_2 = "rr/do:F20F2DrM|rr/qo:|rx/dq:|rxq:", - cvtsd2ss_2 = "rro:F20F5ArM|rx/oq:", - cvtsi2sd_2 = "rm/od:F20F2ArM|rm/oq:F20F2ArXM", - cvtsi2ss_2 = "rm/od:F30F2ArM|rm/oq:F30F2ArXM", - cvtss2sd_2 = "rro:F30F5ArM|rx/od:", - cvtss2si_2 = "rr/do:F20F2CrM|rr/qo:|rxd:|rx/qd:", - cvttpd2dq_2 = "rmo:660FE6rM", - cvttps2dq_2 = "rmo:F30F5BrM", - cvttsd2si_2 = "rr/do:F20F2CrM|rr/qo:|rx/dq:|rxq:", - cvttss2si_2 = "rr/do:F30F2CrM|rr/qo:|rxd:|rx/qd:", - fxsave_1 = "x.:0FAE0m", - fxrstor_1 = "x.:0FAE1m", - ldmxcsr_1 = "xd:0FAE2m", - lfence_0 = "0FAEE8", - maskmovdqu_2 = "rro:660FF7rM", - mfence_0 = "0FAEF0", - movapd_2 = "rmo:660F28rM|mro:660F29Rm", - movaps_2 = "rmo:0F28rM|mro:0F29Rm", - movd_2 = "rm/od:660F6ErM|rm/oq:660F6ErXM|mr/do:660F7ERm|mr/qo:", - movdqa_2 = "rmo:660F6FrM|mro:660F7FRm", - movdqu_2 = "rmo:F30F6FrM|mro:F30F7FRm", - movhlps_2 = "rro:0F12rM", - movhpd_2 = "rx/oq:660F16rM|xr/qo:n660F17Rm", - movhps_2 = "rx/oq:0F16rM|xr/qo:n0F17Rm", - movlhps_2 = "rro:0F16rM", - movlpd_2 = "rx/oq:660F12rM|xr/qo:n660F13Rm", - movlps_2 = "rx/oq:0F12rM|xr/qo:n0F13Rm", - movmskpd_2 = "rr/do:660F50rM", - movmskps_2 = "rr/do:0F50rM", - movntdq_2 = "xro:660FE7Rm", - movnti_2 = "xrqd:0FC3Rm", - movntpd_2 = "xro:660F2BRm", - movntps_2 = "xro:0F2BRm", - movq_2 = "rro:F30F7ErM|rx/oq:|xr/qo:n660FD6Rm", - movsd_2 = "rro:F20F10rM|rx/oq:|xr/qo:nF20F11Rm", - movss_2 = "rro:F30F10rM|rx/od:|xr/do:F30F11Rm", - movupd_2 = "rmo:660F10rM|mro:660F11Rm", - movups_2 = "rmo:0F10rM|mro:0F11Rm", - orpd_2 = "rmo:660F56rM", - orps_2 = "rmo:0F56rM", - packssdw_2 = "rmo:660F6BrM", - packsswb_2 = "rmo:660F63rM", - packuswb_2 = "rmo:660F67rM", - paddb_2 = "rmo:660FFCrM", - paddd_2 = "rmo:660FFErM", - paddq_2 = "rmo:660FD4rM", - paddsb_2 = "rmo:660FECrM", - paddsw_2 = "rmo:660FEDrM", - paddusb_2 = "rmo:660FDCrM", - paddusw_2 = "rmo:660FDDrM", - paddw_2 = "rmo:660FFDrM", - pand_2 = "rmo:660FDBrM", - pandn_2 = "rmo:660FDFrM", - pause_0 = "F390", - pavgb_2 = "rmo:660FE0rM", - pavgw_2 = "rmo:660FE3rM", - pcmpeqb_2 = "rmo:660F74rM", - pcmpeqd_2 = "rmo:660F76rM", - pcmpeqw_2 = "rmo:660F75rM", - pcmpgtb_2 = "rmo:660F64rM", - pcmpgtd_2 = "rmo:660F66rM", - pcmpgtw_2 = "rmo:660F65rM", - pextrw_3 = "rri/do:660FC5rMU|xri/wo:660F3A15nrMU", -- Mem op: SSE4.1 only. - pinsrw_3 = "rri/od:660FC4rMU|rxi/ow:", - pmaddwd_2 = "rmo:660FF5rM", - pmaxsw_2 = "rmo:660FEErM", - pmaxub_2 = "rmo:660FDErM", - pminsw_2 = "rmo:660FEArM", - pminub_2 = "rmo:660FDArM", - pmovmskb_2 = "rr/do:660FD7rM", - pmulhuw_2 = "rmo:660FE4rM", - pmulhw_2 = "rmo:660FE5rM", - pmullw_2 = "rmo:660FD5rM", - pmuludq_2 = "rmo:660FF4rM", - por_2 = "rmo:660FEBrM", - prefetchnta_1 = "xb:n0F180m", - prefetcht0_1 = "xb:n0F181m", - prefetcht1_1 = "xb:n0F182m", - prefetcht2_1 = "xb:n0F183m", - psadbw_2 = "rmo:660FF6rM", - pshufd_3 = "rmio:660F70rMU", - pshufhw_3 = "rmio:F30F70rMU", - pshuflw_3 = "rmio:F20F70rMU", - pslld_2 = "rmo:660FF2rM|rio:660F726mU", - pslldq_2 = "rio:660F737mU", - psllq_2 = "rmo:660FF3rM|rio:660F736mU", - psllw_2 = "rmo:660FF1rM|rio:660F716mU", - psrad_2 = "rmo:660FE2rM|rio:660F724mU", - psraw_2 = "rmo:660FE1rM|rio:660F714mU", - psrld_2 = "rmo:660FD2rM|rio:660F722mU", - psrldq_2 = "rio:660F733mU", - psrlq_2 = "rmo:660FD3rM|rio:660F732mU", - psrlw_2 = "rmo:660FD1rM|rio:660F712mU", - psubb_2 = "rmo:660FF8rM", - psubd_2 = "rmo:660FFArM", - psubq_2 = "rmo:660FFBrM", - psubsb_2 = "rmo:660FE8rM", - psubsw_2 = "rmo:660FE9rM", - psubusb_2 = "rmo:660FD8rM", - psubusw_2 = "rmo:660FD9rM", - psubw_2 = "rmo:660FF9rM", - punpckhbw_2 = "rmo:660F68rM", - punpckhdq_2 = "rmo:660F6ArM", - punpckhqdq_2 = "rmo:660F6DrM", - punpckhwd_2 = "rmo:660F69rM", - punpcklbw_2 = "rmo:660F60rM", - punpckldq_2 = "rmo:660F62rM", - punpcklqdq_2 = "rmo:660F6CrM", - punpcklwd_2 = "rmo:660F61rM", - pxor_2 = "rmo:660FEFrM", - rcpps_2 = "rmo:0F53rM", - rcpss_2 = "rro:F30F53rM|rx/od:", - rsqrtps_2 = "rmo:0F52rM", - rsqrtss_2 = "rmo:F30F52rM", - sfence_0 = "0FAEF8", - shufpd_3 = "rmio:660FC6rMU", - shufps_3 = "rmio:0FC6rMU", - stmxcsr_1 = "xd:0FAE3m", - ucomisd_2 = "rro:660F2ErM|rx/oq:", - ucomiss_2 = "rro:0F2ErM|rx/od:", - unpckhpd_2 = "rmo:660F15rM", - unpckhps_2 = "rmo:0F15rM", - unpcklpd_2 = "rmo:660F14rM", - unpcklps_2 = "rmo:0F14rM", - xorpd_2 = "rmo:660F57rM", - xorps_2 = "rmo:0F57rM", - - -- SSE3 ops - fisttp_1 = "xw:nDF1m|xd:DB1m|xq:nDD1m", - addsubpd_2 = "rmo:660FD0rM", - addsubps_2 = "rmo:F20FD0rM", - haddpd_2 = "rmo:660F7CrM", - haddps_2 = "rmo:F20F7CrM", - hsubpd_2 = "rmo:660F7DrM", - hsubps_2 = "rmo:F20F7DrM", - lddqu_2 = "rxo:F20FF0rM", - movddup_2 = "rmo:F20F12rM", - movshdup_2 = "rmo:F30F16rM", - movsldup_2 = "rmo:F30F12rM", - - -- SSSE3 ops - pabsb_2 = "rmo:660F381CrM", - pabsd_2 = "rmo:660F381ErM", - pabsw_2 = "rmo:660F381DrM", - palignr_3 = "rmio:660F3A0FrMU", - phaddd_2 = "rmo:660F3802rM", - phaddsw_2 = "rmo:660F3803rM", - phaddw_2 = "rmo:660F3801rM", - phsubd_2 = "rmo:660F3806rM", - phsubsw_2 = "rmo:660F3807rM", - phsubw_2 = "rmo:660F3805rM", - pmaddubsw_2 = "rmo:660F3804rM", - pmulhrsw_2 = "rmo:660F380BrM", - pshufb_2 = "rmo:660F3800rM", - psignb_2 = "rmo:660F3808rM", - psignd_2 = "rmo:660F380ArM", - psignw_2 = "rmo:660F3809rM", - - -- SSE4.1 ops - blendpd_3 = "rmio:660F3A0DrMU", - blendps_3 = "rmio:660F3A0CrMU", - blendvpd_3 = "rmRo:660F3815rM", - blendvps_3 = "rmRo:660F3814rM", - dppd_3 = "rmio:660F3A41rMU", - dpps_3 = "rmio:660F3A40rMU", - extractps_3 = "mri/do:660F3A17RmU|rri/qo:660F3A17RXmU", - insertps_3 = "rrio:660F3A41rMU|rxi/od:", - movntdqa_2 = "rmo:660F382ArM", - mpsadbw_3 = "rmio:660F3A42rMU", - packusdw_2 = "rmo:660F382BrM", - pblendvb_3 = "rmRo:660F3810rM", - pblendw_3 = "rmio:660F3A0ErMU", - pcmpeqq_2 = "rmo:660F3829rM", - pextrb_3 = "rri/do:660F3A14nRmU|rri/qo:|xri/bo:", - pextrd_3 = "mri/do:660F3A16RmU", - pextrq_3 = "mri/qo:660F3A16RmU", - -- pextrw is SSE2, mem operand is SSE4.1 only - phminposuw_2 = "rmo:660F3841rM", - pinsrb_3 = "rri/od:660F3A20nrMU|rxi/ob:", - pinsrd_3 = "rmi/od:660F3A22rMU", - pinsrq_3 = "rmi/oq:660F3A22rXMU", - pmaxsb_2 = "rmo:660F383CrM", - pmaxsd_2 = "rmo:660F383DrM", - pmaxud_2 = "rmo:660F383FrM", - pmaxuw_2 = "rmo:660F383ErM", - pminsb_2 = "rmo:660F3838rM", - pminsd_2 = "rmo:660F3839rM", - pminud_2 = "rmo:660F383BrM", - pminuw_2 = "rmo:660F383ArM", - pmovsxbd_2 = "rro:660F3821rM|rx/od:", - pmovsxbq_2 = "rro:660F3822rM|rx/ow:", - pmovsxbw_2 = "rro:660F3820rM|rx/oq:", - pmovsxdq_2 = "rro:660F3825rM|rx/oq:", - pmovsxwd_2 = "rro:660F3823rM|rx/oq:", - pmovsxwq_2 = "rro:660F3824rM|rx/od:", - pmovzxbd_2 = "rro:660F3831rM|rx/od:", - pmovzxbq_2 = "rro:660F3832rM|rx/ow:", - pmovzxbw_2 = "rro:660F3830rM|rx/oq:", - pmovzxdq_2 = "rro:660F3835rM|rx/oq:", - pmovzxwd_2 = "rro:660F3833rM|rx/oq:", - pmovzxwq_2 = "rro:660F3834rM|rx/od:", - pmuldq_2 = "rmo:660F3828rM", - pmulld_2 = "rmo:660F3840rM", - ptest_2 = "rmo:660F3817rM", - roundpd_3 = "rmio:660F3A09rMU", - roundps_3 = "rmio:660F3A08rMU", - roundsd_3 = "rrio:660F3A0BrMU|rxi/oq:", - roundss_3 = "rrio:660F3A0ArMU|rxi/od:", - - -- SSE4.2 ops - crc32_2 = "rmqd:F20F38F1rM|rm/dw:66F20F38F1rM|rm/db:F20F38F0rM|rm/qb:", - pcmpestri_3 = "rmio:660F3A61rMU", - pcmpestrm_3 = "rmio:660F3A60rMU", - pcmpgtq_2 = "rmo:660F3837rM", - pcmpistri_3 = "rmio:660F3A63rMU", - pcmpistrm_3 = "rmio:660F3A62rMU", - popcnt_2 = "rmqdw:F30FB8rM", - - -- SSE4a - extrq_2 = "rro:660F79rM", - extrq_3 = "riio:660F780mUU", - insertq_2 = "rro:F20F79rM", - insertq_4 = "rriio:F20F78rMUU", - lzcnt_2 = "rmqdw:F30FBDrM", - movntsd_2 = "xr/qo:nF20F2BRm", - movntss_2 = "xr/do:F30F2BRm", - -- popcnt is also in SSE4.2 -} - ------------------------------------------------------------------------------- - --- Arithmetic ops. -for name,n in pairs{ add = 0, ["or"] = 1, adc = 2, sbb = 3, - ["and"] = 4, sub = 5, xor = 6, cmp = 7 } do - local n8 = shl(n, 3) - map_op[name.."_2"] = format( - "mr:%02XRm|rm:%02XrM|mI1qdw:81%XmI|mS1qdw:83%XmS|Ri1qdwb:%02Xri|mi1qdwb:81%Xmi", - 1+n8, 3+n8, n, n, 5+n8, n) -end - --- Shift ops. -for name,n in pairs{ rol = 0, ror = 1, rcl = 2, rcr = 3, - shl = 4, shr = 5, sar = 7, sal = 4 } do - map_op[name.."_2"] = format("m1:D1%Xm|mC1qdwb:D3%Xm|mi:C1%XmU", n, n, n) -end - --- Conditional ops. -for cc,n in pairs(map_cc) do - map_op["j"..cc.."_1"] = format("J.:n0F8%XJ", n) -- short: 7%X - map_op["set"..cc.."_1"] = format("mb:n0F9%X2m", n) - map_op["cmov"..cc.."_2"] = format("rmqdw:0F4%XrM", n) -- P6+ -end - --- FP arithmetic ops. -for name,n in pairs{ add = 0, mul = 1, com = 2, comp = 3, - sub = 4, subr = 5, div = 6, divr = 7 } do - local nc = 0xc0 + shl(n, 3) - local nr = nc + (n < 4 and 0 or (n % 2 == 0 and 8 or -8)) - local fn = "f"..name - map_op[fn.."_1"] = format("ff:D8%02Xr|xd:D8%Xm|xq:nDC%Xm", nc, n, n) - if n == 2 or n == 3 then - map_op[fn.."_2"] = format("Fff:D8%02XR|Fx2d:D8%XM|Fx2q:nDC%XM", nc, n, n) - else - map_op[fn.."_2"] = format("Fff:D8%02XR|fFf:DC%02Xr|Fx2d:D8%XM|Fx2q:nDC%XM", nc, nr, n, n) - map_op[fn.."p_1"] = format("ff:DE%02Xr", nr) - map_op[fn.."p_2"] = format("fFf:DE%02Xr", nr) - end - map_op["fi"..name.."_1"] = format("xd:DA%Xm|xw:nDE%Xm", n, n) -end - --- FP conditional moves. -for cc,n in pairs{ b=0, e=1, be=2, u=3, nb=4, ne=5, nbe=6, nu=7 } do - local nc = 0xdac0 + shl(band(n, 3), 3) + shl(band(n, 4), 6) - map_op["fcmov"..cc.."_1"] = format("ff:%04Xr", nc) -- P6+ - map_op["fcmov"..cc.."_2"] = format("Fff:%04XR", nc) -- P6+ -end - --- SSE FP arithmetic ops. -for name,n in pairs{ sqrt = 1, add = 8, mul = 9, - sub = 12, min = 13, div = 14, max = 15 } do - map_op[name.."ps_2"] = format("rmo:0F5%XrM", n) - map_op[name.."ss_2"] = format("rro:F30F5%XrM|rx/od:", n) - map_op[name.."pd_2"] = format("rmo:660F5%XrM", n) - map_op[name.."sd_2"] = format("rro:F20F5%XrM|rx/oq:", n) -end - ------------------------------------------------------------------------------- - --- Process pattern string. -local function dopattern(pat, args, sz, op, needrex) - local digit, addin - local opcode = 0 - local szov = sz - local narg = 1 - local rex = 0 - - -- Limit number of section buffer positions used by a single dasm_put(). - -- A single opcode needs a maximum of 5 positions. - if secpos+5 > maxsecpos then wflush() end - - -- Process each character. - for c in gmatch(pat.."|", ".") do - if match(c, "%x") then -- Hex digit. - digit = byte(c) - 48 - if digit > 48 then digit = digit - 39 - elseif digit > 16 then digit = digit - 7 end - opcode = opcode*16 + digit - addin = nil - elseif c == "n" then -- Disable operand size mods for opcode. - szov = nil - elseif c == "X" then -- Force REX.W. - rex = 8 - elseif c == "r" then -- Merge 1st operand regno. into opcode. - addin = args[1]; opcode = opcode + (addin.reg % 8) - if narg < 2 then narg = 2 end - elseif c == "R" then -- Merge 2nd operand regno. into opcode. - addin = args[2]; opcode = opcode + (addin.reg % 8) - narg = 3 - elseif c == "m" or c == "M" then -- Encode ModRM/SIB. - local s - if addin then - s = addin.reg - opcode = opcode - band(s, 7) -- Undo regno opcode merge. - else - s = band(opcode, 15) -- Undo last digit. - opcode = shr(opcode, 4) - end - local nn = c == "m" and 1 or 2 - local t = args[nn] - if narg <= nn then narg = nn + 1 end - if szov == "q" and rex == 0 then rex = rex + 8 end - if t.reg and t.reg > 7 then rex = rex + 1 end - if t.xreg and t.xreg > 7 then rex = rex + 2 end - if s > 7 then rex = rex + 4 end - if needrex then rex = rex + 16 end - wputop(szov, opcode, rex); opcode = nil - local imark = sub(pat, -1) -- Force a mark (ugly). - -- Put ModRM/SIB with regno/last digit as spare. - wputmrmsib(t, imark, s, addin and addin.vreg) - addin = nil - else - if opcode then -- Flush opcode. - if szov == "q" and rex == 0 then rex = rex + 8 end - if needrex then rex = rex + 16 end - if addin and addin.reg == -1 then - wputop(szov, opcode - 7, rex) - waction("VREG", addin.vreg); wputxb(0) - else - if addin and addin.reg > 7 then rex = rex + 1 end - wputop(szov, opcode, rex) - end - opcode = nil - end - if c == "|" then break end - if c == "o" then -- Offset (pure 32 bit displacement). - wputdarg(args[1].disp); if narg < 2 then narg = 2 end - elseif c == "O" then - wputdarg(args[2].disp); narg = 3 - else - -- Anything else is an immediate operand. - local a = args[narg] - narg = narg + 1 - local mode, imm = a.mode, a.imm - if mode == "iJ" and not match("iIJ", c) then - werror("bad operand size for label") - end - if c == "S" then - wputsbarg(imm) - elseif c == "U" then - wputbarg(imm) - elseif c == "W" then - wputwarg(imm) - elseif c == "i" or c == "I" then - if mode == "iJ" then - wputlabel("IMM_", imm, 1) - elseif mode == "iI" and c == "I" then - waction(sz == "w" and "IMM_WB" or "IMM_DB", imm) - else - wputszarg(sz, imm) - end - elseif c == "J" then - if mode == "iPJ" then - waction("REL_A", imm) -- !x64 (secpos) - else - wputlabel("REL_", imm, 2) - end - else - werror("bad char `"..c.."' in pattern `"..pat.."' for `"..op.."'") - end - end - end - end -end - ------------------------------------------------------------------------------- - --- Mapping of operand modes to short names. Suppress output with '#'. -local map_modename = { - r = "reg", R = "eax", C = "cl", x = "mem", m = "mrm", i = "imm", - f = "stx", F = "st0", J = "lbl", ["1"] = "1", - I = "#", S = "#", O = "#", -} - --- Return a table/string showing all possible operand modes. -local function templatehelp(template, nparams) - if nparams == 0 then return "" end - local t = {} - for tm in gmatch(template, "[^%|]+") do - local s = map_modename[sub(tm, 1, 1)] - s = s..gsub(sub(tm, 2, nparams), ".", function(c) - return ", "..map_modename[c] - end) - if not match(s, "#") then t[#t+1] = s end - end - return t -end - --- Match operand modes against mode match part of template. -local function matchtm(tm, args) - for i=1,#args do - if not match(args[i].mode, sub(tm, i, i)) then return end - end - return true -end - --- Handle opcodes defined with template strings. -map_op[".template__"] = function(params, template, nparams) - if not params then return templatehelp(template, nparams) end - local args = {} - - -- Zero-operand opcodes have no match part. - if #params == 0 then - dopattern(template, args, "d", params.op, nil) - return - end - - -- Determine common operand size (coerce undefined size) or flag as mixed. - local sz, szmix, needrex - for i,p in ipairs(params) do - args[i] = parseoperand(p) - local nsz = args[i].opsize - if nsz then - if sz and sz ~= nsz then szmix = true else sz = nsz end - end - local nrex = args[i].needrex - if nrex ~= nil then - if needrex == nil then - needrex = nrex - elseif needrex ~= nrex then - werror("bad mix of byte-addressable registers") - end - end - end - - -- Try all match:pattern pairs (separated by '|'). - local gotmatch, lastpat - for tm in gmatch(template, "[^%|]+") do - -- Split off size match (starts after mode match) and pattern string. - local szm, pat = match(tm, "^(.-):(.*)$", #args+1) - if pat == "" then pat = lastpat else lastpat = pat end - if matchtm(tm, args) then - local prefix = sub(szm, 1, 1) - if prefix == "/" then -- Match both operand sizes. - if args[1].opsize == sub(szm, 2, 2) and - args[2].opsize == sub(szm, 3, 3) then - dopattern(pat, args, sz, params.op, needrex) -- Process pattern. - return - end - else -- Match common operand size. - local szp = sz - if szm == "" then szm = x64 and "qdwb" or "dwb" end -- Default sizes. - if prefix == "1" then szp = args[1].opsize; szmix = nil - elseif prefix == "2" then szp = args[2].opsize; szmix = nil end - if not szmix and (prefix == "." or match(szm, szp or "#")) then - dopattern(pat, args, szp, params.op, needrex) -- Process pattern. - return - end - end - gotmatch = true - end - end - - local msg = "bad operand mode" - if gotmatch then - if szmix then - msg = "mixed operand size" - else - msg = sz and "bad operand size" or "missing operand size" - end - end - - werror(msg.." in `"..opmodestr(params.op, args).."'") -end - ------------------------------------------------------------------------------- - --- x64-specific opcode for 64 bit immediates and displacements. -if x64 then - function map_op.mov64_2(params) - if not params then return { "reg, imm", "reg, [disp]", "[disp], reg" } end - if secpos+2 > maxsecpos then wflush() end - local opcode, op64, sz, rex, vreg - local op64 = match(params[1], "^%[%s*(.-)%s*%]$") - if op64 then - local a = parseoperand(params[2]) - if a.mode ~= "rmR" then werror("bad operand mode") end - sz = a.opsize - rex = sz == "q" and 8 or 0 - opcode = 0xa3 - else - op64 = match(params[2], "^%[%s*(.-)%s*%]$") - local a = parseoperand(params[1]) - if op64 then - if a.mode ~= "rmR" then werror("bad operand mode") end - sz = a.opsize - rex = sz == "q" and 8 or 0 - opcode = 0xa1 - else - if sub(a.mode, 1, 1) ~= "r" or a.opsize ~= "q" then - werror("bad operand mode") - end - op64 = params[2] - if a.reg == -1 then - vreg = a.vreg - opcode = 0xb8 - else - opcode = 0xb8 + band(a.reg, 7) - end - rex = a.reg > 7 and 9 or 8 - end - end - wputop(sz, opcode, rex) - if vreg then waction("VREG", vreg); wputxb(0) end - waction("IMM_D", format("(unsigned int)(%s)", op64)) - waction("IMM_D", format("(unsigned int)((%s)>>32)", op64)) - end -end - ------------------------------------------------------------------------------- - --- Pseudo-opcodes for data storage. -local function op_data(params) - if not params then return "imm..." end - local sz = sub(params.op, 2, 2) - if sz == "a" then sz = addrsize end - for _,p in ipairs(params) do - local a = parseoperand(p) - if sub(a.mode, 1, 1) ~= "i" or (a.opsize and a.opsize ~= sz) then - werror("bad mode or size in `"..p.."'") - end - if a.mode == "iJ" then - wputlabel("IMM_", a.imm, 1) - else - wputszarg(sz, a.imm) - end - if secpos+2 > maxsecpos then wflush() end - end -end - -map_op[".byte_*"] = op_data -map_op[".sbyte_*"] = op_data -map_op[".word_*"] = op_data -map_op[".dword_*"] = op_data -map_op[".aword_*"] = op_data - ------------------------------------------------------------------------------- - --- Pseudo-opcode to mark the position where the action list is to be emitted. -map_op[".actionlist_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeactions(out, name) end) -end - --- Pseudo-opcode to mark the position where the global enum is to be emitted. -map_op[".globals_1"] = function(params) - if not params then return "prefix" end - local prefix = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobals(out, prefix) end) -end - --- Pseudo-opcode to mark the position where the global names are to be emitted. -map_op[".globalnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeglobalnames(out, name) end) -end - --- Pseudo-opcode to mark the position where the extern names are to be emitted. -map_op[".externnames_1"] = function(params) - if not params then return "cvar" end - local name = params[1] -- No syntax check. You get to keep the pieces. - wline(function(out) writeexternnames(out, name) end) -end - ------------------------------------------------------------------------------- - --- Label pseudo-opcode (converted from trailing colon form). -map_op[".label_2"] = function(params) - if not params then return "[1-9] | ->global | =>pcexpr [, addr]" end - if secpos+2 > maxsecpos then wflush() end - local a = parseoperand(params[1]) - local mode, imm = a.mode, a.imm - if type(imm) == "number" and (mode == "iJ" or (imm >= 1 and imm <= 9)) then - -- Local label (1: ... 9:) or global label (->global:). - waction("LABEL_LG", nil, 1) - wputxb(imm) - elseif mode == "iJ" then - -- PC label (=>pcexpr:). - waction("LABEL_PC", imm) - else - werror("bad label definition") - end - -- SETLABEL must immediately follow LABEL_LG/LABEL_PC. - local addr = params[2] - if addr then - local a = parseoperand(addr) - if a.mode == "iPJ" then - waction("SETLABEL", a.imm) - else - werror("bad label assignment") - end - end -end -map_op[".label_1"] = map_op[".label_2"] - ------------------------------------------------------------------------------- - --- Alignment pseudo-opcode. -map_op[".align_1"] = function(params) - if not params then return "numpow2" end - if secpos+1 > maxsecpos then wflush() end - local align = tonumber(params[1]) or map_opsizenum[map_opsize[params[1]]] - if align then - local x = align - -- Must be a power of 2 in the range (2 ... 256). - for i=1,8 do - x = x / 2 - if x == 1 then - waction("ALIGN", nil, 1) - wputxb(align-1) -- Action byte is 2**n-1. - return - end - end - end - werror("bad alignment") -end - --- Spacing pseudo-opcode. -map_op[".space_2"] = function(params) - if not params then return "num [, filler]" end - if secpos+1 > maxsecpos then wflush() end - waction("SPACE", params[1]) - local fill = params[2] - if fill then - fill = tonumber(fill) - if not fill or fill < 0 or fill > 255 then werror("bad filler") end - end - wputxb(fill or 0) -end -map_op[".space_1"] = map_op[".space_2"] - ------------------------------------------------------------------------------- - --- Pseudo-opcode for (primitive) type definitions (map to C types). -map_op[".type_3"] = function(params, nparams) - if not params then - return nparams == 2 and "name, ctype" or "name, ctype, reg" - end - local name, ctype, reg = params[1], params[2], params[3] - if not match(name, "^[%a_][%w_]*$") then - werror("bad type name `"..name.."'") - end - local tp = map_type[name] - if tp then - werror("duplicate type `"..name.."'") - end - if reg and not map_reg_valid_base[reg] then - werror("bad base register `"..(map_reg_rev[reg] or reg).."'") - end - -- Add #type to defines. A bit unclean to put it in map_archdef. - map_archdef["#"..name] = "sizeof("..ctype..")" - -- Add new type and emit shortcut define. - local num = ctypenum + 1 - map_type[name] = { - ctype = ctype, - ctypefmt = format("Dt%X(%%s)", num), - reg = reg, - } - wline(format("#define Dt%X(_V) (int)(ptrdiff_t)&(((%s *)0)_V)", num, ctype)) - ctypenum = num -end -map_op[".type_2"] = map_op[".type_3"] - --- Dump type definitions. -local function dumptypes(out, lvl) - local t = {} - for name in pairs(map_type) do t[#t+1] = name end - sort(t) - out:write("Type definitions:\n") - for _,name in ipairs(t) do - local tp = map_type[name] - local reg = tp.reg and map_reg_rev[tp.reg] or "" - out:write(format(" %-20s %-20s %s\n", name, tp.ctype, reg)) - end - out:write("\n") -end - ------------------------------------------------------------------------------- - --- Set the current section. -function _M.section(num) - waction("SECTION") - wputxb(num) - wflush(true) -- SECTION is a terminal action. -end - ------------------------------------------------------------------------------- - --- Dump architecture description. -function _M.dumparch(out) - out:write(format("DynASM %s version %s, released %s\n\n", - _info.arch, _info.version, _info.release)) - dumpregs(out) - dumpactions(out) -end - --- Dump all user defined elements. -function _M.dumpdef(out, lvl) - dumptypes(out, lvl) - dumpglobals(out, lvl) - dumpexterns(out, lvl) -end - ------------------------------------------------------------------------------- - --- Pass callbacks from/to the DynASM core. -function _M.passcb(wl, we, wf, ww) - wline, werror, wfatal, wwarn = wl, we, wf, ww - return wflush -end - --- Setup the arch-specific module. -function _M.setup(arch, opt) - g_arch, g_opt = arch, opt -end - --- Merge the core maps and the arch-specific maps. -function _M.mergemaps(map_coreop, map_def) - setmetatable(map_op, { __index = map_coreop }) - setmetatable(map_def, { __index = map_archdef }) - return map_op, map_def -end - -return _M - ------------------------------------------------------------------------------- - diff --git a/deps/luajit/dynasm/dynasm.lua b/deps/luajit/dynasm/dynasm.lua deleted file mode 100644 index fffda75..0000000 --- a/deps/luajit/dynasm/dynasm.lua +++ /dev/null @@ -1,1094 +0,0 @@ ------------------------------------------------------------------------------- --- DynASM. A dynamic assembler for code generation engines. --- Originally designed and implemented for LuaJIT. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- See below for full copyright notice. ------------------------------------------------------------------------------- - --- Application information. -local _info = { - name = "DynASM", - description = "A dynamic assembler for code generation engines", - version = "1.3.0", - vernum = 10300, - release = "2011-05-05", - author = "Mike Pall", - url = "http://luajit.org/dynasm.html", - license = "MIT", - copyright = [[ -Copyright (C) 2005-2015 Mike Pall. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -[ MIT license: http://www.opensource.org/licenses/mit-license.php ] -]], -} - --- Cache library functions. -local type, pairs, ipairs = type, pairs, ipairs -local pcall, error, assert = pcall, error, assert -local _s = string -local sub, match, gmatch, gsub = _s.sub, _s.match, _s.gmatch, _s.gsub -local format, rep, upper = _s.format, _s.rep, _s.upper -local _t = table -local insert, remove, concat, sort = _t.insert, _t.remove, _t.concat, _t.sort -local exit = os.exit -local io = io -local stdin, stdout, stderr = io.stdin, io.stdout, io.stderr - ------------------------------------------------------------------------------- - --- Program options. -local g_opt = {} - --- Global state for current file. -local g_fname, g_curline, g_indent, g_lineno, g_synclineno, g_arch -local g_errcount = 0 - --- Write buffer for output file. -local g_wbuffer, g_capbuffer - ------------------------------------------------------------------------------- - --- Write an output line (or callback function) to the buffer. -local function wline(line, needindent) - local buf = g_capbuffer or g_wbuffer - buf[#buf+1] = needindent and g_indent..line or line - g_synclineno = g_synclineno + 1 -end - --- Write assembler line as a comment, if requestd. -local function wcomment(aline) - if g_opt.comment then - wline(g_opt.comment..aline..g_opt.endcomment, true) - end -end - --- Resync CPP line numbers. -local function wsync() - if g_synclineno ~= g_lineno and g_opt.cpp then - wline("#line "..g_lineno..' "'..g_fname..'"') - g_synclineno = g_lineno - end -end - --- Dummy action flush function. Replaced with arch-specific function later. -local function wflush(term) -end - --- Dump all buffered output lines. -local function wdumplines(out, buf) - for _,line in ipairs(buf) do - if type(line) == "string" then - assert(out:write(line, "\n")) - else - -- Special callback to dynamically insert lines after end of processing. - line(out) - end - end -end - ------------------------------------------------------------------------------- - --- Emit an error. Processing continues with next statement. -local function werror(msg) - error(format("%s:%s: error: %s:\n%s", g_fname, g_lineno, msg, g_curline), 0) -end - --- Emit a fatal error. Processing stops. -local function wfatal(msg) - g_errcount = "fatal" - werror(msg) -end - --- Print a warning. Processing continues. -local function wwarn(msg) - stderr:write(format("%s:%s: warning: %s:\n%s\n", - g_fname, g_lineno, msg, g_curline)) -end - --- Print caught error message. But suppress excessive errors. -local function wprinterr(...) - if type(g_errcount) == "number" then - -- Regular error. - g_errcount = g_errcount + 1 - if g_errcount < 21 then -- Seems to be a reasonable limit. - stderr:write(...) - elseif g_errcount == 21 then - stderr:write(g_fname, - ":*: warning: too many errors (suppressed further messages).\n") - end - else - -- Fatal error. - stderr:write(...) - return true -- Stop processing. - end -end - ------------------------------------------------------------------------------- - --- Map holding all option handlers. -local opt_map = {} -local opt_current - --- Print error and exit with error status. -local function opterror(...) - stderr:write("dynasm.lua: ERROR: ", ...) - stderr:write("\n") - exit(1) -end - --- Get option parameter. -local function optparam(args) - local argn = args.argn - local p = args[argn] - if not p then - opterror("missing parameter for option `", opt_current, "'.") - end - args.argn = argn + 1 - return p -end - ------------------------------------------------------------------------------- - --- Core pseudo-opcodes. -local map_coreop = {} --- Dummy opcode map. Replaced by arch-specific map. -local map_op = {} - --- Forward declarations. -local dostmt -local readfile - ------------------------------------------------------------------------------- - --- Map for defines (initially empty, chains to arch-specific map). -local map_def = {} - --- Pseudo-opcode to define a substitution. -map_coreop[".define_2"] = function(params, nparams) - if not params then return nparams == 1 and "name" or "name, subst" end - local name, def = params[1], params[2] or "1" - if not match(name, "^[%a_][%w_]*$") then werror("bad or duplicate define") end - map_def[name] = def -end -map_coreop[".define_1"] = map_coreop[".define_2"] - --- Define a substitution on the command line. -function opt_map.D(args) - local namesubst = optparam(args) - local name, subst = match(namesubst, "^([%a_][%w_]*)=(.*)$") - if name then - map_def[name] = subst - elseif match(namesubst, "^[%a_][%w_]*$") then - map_def[namesubst] = "1" - else - opterror("bad define") - end -end - --- Undefine a substitution on the command line. -function opt_map.U(args) - local name = optparam(args) - if match(name, "^[%a_][%w_]*$") then - map_def[name] = nil - else - opterror("bad define") - end -end - --- Helper for definesubst. -local gotsubst - -local function definesubst_one(word) - local subst = map_def[word] - if subst then gotsubst = word; return subst else return word end -end - --- Iteratively substitute defines. -local function definesubst(stmt) - -- Limit number of iterations. - for i=1,100 do - gotsubst = false - stmt = gsub(stmt, "#?[%w_]+", definesubst_one) - if not gotsubst then break end - end - if gotsubst then wfatal("recursive define involving `"..gotsubst.."'") end - return stmt -end - --- Dump all defines. -local function dumpdefines(out, lvl) - local t = {} - for name in pairs(map_def) do - t[#t+1] = name - end - sort(t) - out:write("Defines:\n") - for _,name in ipairs(t) do - local subst = map_def[name] - if g_arch then subst = g_arch.revdef(subst) end - out:write(format(" %-20s %s\n", name, subst)) - end - out:write("\n") -end - ------------------------------------------------------------------------------- - --- Support variables for conditional assembly. -local condlevel = 0 -local condstack = {} - --- Evaluate condition with a Lua expression. Substitutions already performed. -local function cond_eval(cond) - local func, err - if setfenv then - func, err = loadstring("return "..cond, "=expr") - else - -- No globals. All unknown identifiers evaluate to nil. - func, err = load("return "..cond, "=expr", "t", {}) - end - if func then - if setfenv then - setfenv(func, {}) -- No globals. All unknown identifiers evaluate to nil. - end - local ok, res = pcall(func) - if ok then - if res == 0 then return false end -- Oh well. - return not not res - end - err = res - end - wfatal("bad condition: "..err) -end - --- Skip statements until next conditional pseudo-opcode at the same level. -local function stmtskip() - local dostmt_save = dostmt - local lvl = 0 - dostmt = function(stmt) - local op = match(stmt, "^%s*(%S+)") - if op == ".if" then - lvl = lvl + 1 - elseif lvl ~= 0 then - if op == ".endif" then lvl = lvl - 1 end - elseif op == ".elif" or op == ".else" or op == ".endif" then - dostmt = dostmt_save - dostmt(stmt) - end - end -end - --- Pseudo-opcodes for conditional assembly. -map_coreop[".if_1"] = function(params) - if not params then return "condition" end - local lvl = condlevel + 1 - local res = cond_eval(params[1]) - condlevel = lvl - condstack[lvl] = res - if not res then stmtskip() end -end - -map_coreop[".elif_1"] = function(params) - if not params then return "condition" end - if condlevel == 0 then wfatal(".elif without .if") end - local lvl = condlevel - local res = condstack[lvl] - if res then - if res == "else" then wfatal(".elif after .else") end - else - res = cond_eval(params[1]) - if res then - condstack[lvl] = res - return - end - end - stmtskip() -end - -map_coreop[".else_0"] = function(params) - if condlevel == 0 then wfatal(".else without .if") end - local lvl = condlevel - local res = condstack[lvl] - condstack[lvl] = "else" - if res then - if res == "else" then wfatal(".else after .else") end - stmtskip() - end -end - -map_coreop[".endif_0"] = function(params) - local lvl = condlevel - if lvl == 0 then wfatal(".endif without .if") end - condlevel = lvl - 1 -end - --- Check for unfinished conditionals. -local function checkconds() - if g_errcount ~= "fatal" and condlevel ~= 0 then - wprinterr(g_fname, ":*: error: unbalanced conditional\n") - end -end - ------------------------------------------------------------------------------- - --- Search for a file in the given path and open it for reading. -local function pathopen(path, name) - local dirsep = package and match(package.path, "\\") and "\\" or "/" - for _,p in ipairs(path) do - local fullname = p == "" and name or p..dirsep..name - local fin = io.open(fullname, "r") - if fin then - g_fname = fullname - return fin - end - end -end - --- Include a file. -map_coreop[".include_1"] = function(params) - if not params then return "filename" end - local name = params[1] - -- Save state. Ugly, I know. but upvalues are fast. - local gf, gl, gcl, gi = g_fname, g_lineno, g_curline, g_indent - -- Read the included file. - local fatal = readfile(pathopen(g_opt.include, name) or - wfatal("include file `"..name.."' not found")) - -- Restore state. - g_synclineno = -1 - g_fname, g_lineno, g_curline, g_indent = gf, gl, gcl, gi - if fatal then wfatal("in include file") end -end - --- Make .include and conditionals initially available, too. -map_op[".include_1"] = map_coreop[".include_1"] -map_op[".if_1"] = map_coreop[".if_1"] -map_op[".elif_1"] = map_coreop[".elif_1"] -map_op[".else_0"] = map_coreop[".else_0"] -map_op[".endif_0"] = map_coreop[".endif_0"] - ------------------------------------------------------------------------------- - --- Support variables for macros. -local mac_capture, mac_lineno, mac_name -local mac_active = {} -local mac_list = {} - --- Pseudo-opcode to define a macro. -map_coreop[".macro_*"] = function(mparams) - if not mparams then return "name [, params...]" end - -- Split off and validate macro name. - local name = remove(mparams, 1) - if not name then werror("missing macro name") end - if not (match(name, "^[%a_][%w_%.]*$") or match(name, "^%.[%w_%.]*$")) then - wfatal("bad macro name `"..name.."'") - end - -- Validate macro parameter names. - local mdup = {} - for _,mp in ipairs(mparams) do - if not match(mp, "^[%a_][%w_]*$") then - wfatal("bad macro parameter name `"..mp.."'") - end - if mdup[mp] then wfatal("duplicate macro parameter name `"..mp.."'") end - mdup[mp] = true - end - -- Check for duplicate or recursive macro definitions. - local opname = name.."_"..#mparams - if map_op[opname] or map_op[name.."_*"] then - wfatal("duplicate macro `"..name.."' ("..#mparams.." parameters)") - end - if mac_capture then wfatal("recursive macro definition") end - - -- Enable statement capture. - local lines = {} - mac_lineno = g_lineno - mac_name = name - mac_capture = function(stmt) -- Statement capture function. - -- Stop macro definition with .endmacro pseudo-opcode. - if not match(stmt, "^%s*.endmacro%s*$") then - lines[#lines+1] = stmt - return - end - mac_capture = nil - mac_lineno = nil - mac_name = nil - mac_list[#mac_list+1] = opname - -- Add macro-op definition. - map_op[opname] = function(params) - if not params then return mparams, lines end - -- Protect against recursive macro invocation. - if mac_active[opname] then wfatal("recursive macro invocation") end - mac_active[opname] = true - -- Setup substitution map. - local subst = {} - for i,mp in ipairs(mparams) do subst[mp] = params[i] end - local mcom - if g_opt.maccomment and g_opt.comment then - mcom = " MACRO "..name.." ("..#mparams..")" - wcomment("{"..mcom) - end - -- Loop through all captured statements - for _,stmt in ipairs(lines) do - -- Substitute macro parameters. - local st = gsub(stmt, "[%w_]+", subst) - st = definesubst(st) - st = gsub(st, "%s*%.%.%s*", "") -- Token paste a..b. - if mcom and sub(st, 1, 1) ~= "|" then wcomment(st) end - -- Emit statement. Use a protected call for better diagnostics. - local ok, err = pcall(dostmt, st) - if not ok then - -- Add the captured statement to the error. - wprinterr(err, "\n", g_indent, "| ", stmt, - "\t[MACRO ", name, " (", #mparams, ")]\n") - end - end - if mcom then wcomment("}"..mcom) end - mac_active[opname] = nil - end - end -end - --- An .endmacro pseudo-opcode outside of a macro definition is an error. -map_coreop[".endmacro_0"] = function(params) - wfatal(".endmacro without .macro") -end - --- Dump all macros and their contents (with -PP only). -local function dumpmacros(out, lvl) - sort(mac_list) - out:write("Macros:\n") - for _,opname in ipairs(mac_list) do - local name = sub(opname, 1, -3) - local params, lines = map_op[opname]() - out:write(format(" %-20s %s\n", name, concat(params, ", "))) - if lvl > 1 then - for _,line in ipairs(lines) do - out:write(" |", line, "\n") - end - out:write("\n") - end - end - out:write("\n") -end - --- Check for unfinished macro definitions. -local function checkmacros() - if mac_capture then - wprinterr(g_fname, ":", mac_lineno, - ": error: unfinished .macro `", mac_name ,"'\n") - end -end - ------------------------------------------------------------------------------- - --- Support variables for captures. -local cap_lineno, cap_name -local cap_buffers = {} -local cap_used = {} - --- Start a capture. -map_coreop[".capture_1"] = function(params) - if not params then return "name" end - wflush() - local name = params[1] - if not match(name, "^[%a_][%w_]*$") then - wfatal("bad capture name `"..name.."'") - end - if cap_name then - wfatal("already capturing to `"..cap_name.."' since line "..cap_lineno) - end - cap_name = name - cap_lineno = g_lineno - -- Create or continue a capture buffer and start the output line capture. - local buf = cap_buffers[name] - if not buf then buf = {}; cap_buffers[name] = buf end - g_capbuffer = buf - g_synclineno = 0 -end - --- Stop a capture. -map_coreop[".endcapture_0"] = function(params) - wflush() - if not cap_name then wfatal(".endcapture without a valid .capture") end - cap_name = nil - cap_lineno = nil - g_capbuffer = nil - g_synclineno = 0 -end - --- Dump a capture buffer. -map_coreop[".dumpcapture_1"] = function(params) - if not params then return "name" end - wflush() - local name = params[1] - if not match(name, "^[%a_][%w_]*$") then - wfatal("bad capture name `"..name.."'") - end - cap_used[name] = true - wline(function(out) - local buf = cap_buffers[name] - if buf then wdumplines(out, buf) end - end) - g_synclineno = 0 -end - --- Dump all captures and their buffers (with -PP only). -local function dumpcaptures(out, lvl) - out:write("Captures:\n") - for name,buf in pairs(cap_buffers) do - out:write(format(" %-20s %4s)\n", name, "("..#buf)) - if lvl > 1 then - local bar = rep("=", 76) - out:write(" ", bar, "\n") - for _,line in ipairs(buf) do - out:write(" ", line, "\n") - end - out:write(" ", bar, "\n\n") - end - end - out:write("\n") -end - --- Check for unfinished or unused captures. -local function checkcaptures() - if cap_name then - wprinterr(g_fname, ":", cap_lineno, - ": error: unfinished .capture `", cap_name,"'\n") - return - end - for name in pairs(cap_buffers) do - if not cap_used[name] then - wprinterr(g_fname, ":*: error: missing .dumpcapture ", name ,"\n") - end - end -end - ------------------------------------------------------------------------------- - --- Sections names. -local map_sections = {} - --- Pseudo-opcode to define code sections. --- TODO: Data sections, BSS sections. Needs extra C code and API. -map_coreop[".section_*"] = function(params) - if not params then return "name..." end - if #map_sections > 0 then werror("duplicate section definition") end - wflush() - for sn,name in ipairs(params) do - local opname = "."..name.."_0" - if not match(name, "^[%a][%w_]*$") or - map_op[opname] or map_op["."..name.."_*"] then - werror("bad section name `"..name.."'") - end - map_sections[#map_sections+1] = name - wline(format("#define DASM_SECTION_%s\t%d", upper(name), sn-1)) - map_op[opname] = function(params) g_arch.section(sn-1) end - end - wline(format("#define DASM_MAXSECTION\t\t%d", #map_sections)) -end - --- Dump all sections. -local function dumpsections(out, lvl) - out:write("Sections:\n") - for _,name in ipairs(map_sections) do - out:write(format(" %s\n", name)) - end - out:write("\n") -end - ------------------------------------------------------------------------------- - --- Replacement for customized Lua, which lacks the package library. -local prefix = "" -if not require then - function require(name) - local fp = assert(io.open(prefix..name..".lua")) - local s = fp:read("*a") - assert(fp:close()) - return assert(loadstring(s, "@"..name..".lua"))() - end -end - --- Load architecture-specific module. -local function loadarch(arch) - if not match(arch, "^[%w_]+$") then return "bad arch name" end - local ok, m_arch = pcall(require, "dasm_"..arch) - if not ok then return "cannot load module: "..m_arch end - g_arch = m_arch - wflush = m_arch.passcb(wline, werror, wfatal, wwarn) - m_arch.setup(arch, g_opt) - map_op, map_def = m_arch.mergemaps(map_coreop, map_def) -end - --- Dump architecture description. -function opt_map.dumparch(args) - local name = optparam(args) - if not g_arch then - local err = loadarch(name) - if err then opterror(err) end - end - - local t = {} - for name in pairs(map_coreop) do t[#t+1] = name end - for name in pairs(map_op) do t[#t+1] = name end - sort(t) - - local out = stdout - local _arch = g_arch._info - out:write(format("%s version %s, released %s, %s\n", - _info.name, _info.version, _info.release, _info.url)) - g_arch.dumparch(out) - - local pseudo = true - out:write("Pseudo-Opcodes:\n") - for _,sname in ipairs(t) do - local name, nparam = match(sname, "^(.+)_([0-9%*])$") - if name then - if pseudo and sub(name, 1, 1) ~= "." then - out:write("\nOpcodes:\n") - pseudo = false - end - local f = map_op[sname] - local s - if nparam ~= "*" then nparam = nparam + 0 end - if nparam == 0 then - s = "" - elseif type(f) == "string" then - s = map_op[".template__"](nil, f, nparam) - else - s = f(nil, nparam) - end - if type(s) == "table" then - for _,s2 in ipairs(s) do - out:write(format(" %-12s %s\n", name, s2)) - end - else - out:write(format(" %-12s %s\n", name, s)) - end - end - end - out:write("\n") - exit(0) -end - --- Pseudo-opcode to set the architecture. --- Only initially available (map_op is replaced when called). -map_op[".arch_1"] = function(params) - if not params then return "name" end - local err = loadarch(params[1]) - if err then wfatal(err) end - wline(format("#if DASM_VERSION != %d", _info.vernum)) - wline('#error "Version mismatch between DynASM and included encoding engine"') - wline("#endif") -end - --- Dummy .arch pseudo-opcode to improve the error report. -map_coreop[".arch_1"] = function(params) - if not params then return "name" end - wfatal("duplicate .arch statement") -end - ------------------------------------------------------------------------------- - --- Dummy pseudo-opcode. Don't confuse '.nop' with 'nop'. -map_coreop[".nop_*"] = function(params) - if not params then return "[ignored...]" end -end - --- Pseudo-opcodes to raise errors. -map_coreop[".error_1"] = function(params) - if not params then return "message" end - werror(params[1]) -end - -map_coreop[".fatal_1"] = function(params) - if not params then return "message" end - wfatal(params[1]) -end - --- Dump all user defined elements. -local function dumpdef(out) - local lvl = g_opt.dumpdef - if lvl == 0 then return end - dumpsections(out, lvl) - dumpdefines(out, lvl) - if g_arch then g_arch.dumpdef(out, lvl) end - dumpmacros(out, lvl) - dumpcaptures(out, lvl) -end - ------------------------------------------------------------------------------- - --- Helper for splitstmt. -local splitlvl - -local function splitstmt_one(c) - if c == "(" then - splitlvl = ")"..splitlvl - elseif c == "[" then - splitlvl = "]"..splitlvl - elseif c == "{" then - splitlvl = "}"..splitlvl - elseif c == ")" or c == "]" or c == "}" then - if sub(splitlvl, 1, 1) ~= c then werror("unbalanced (), [] or {}") end - splitlvl = sub(splitlvl, 2) - elseif splitlvl == "" then - return " \0 " - end - return c -end - --- Split statement into (pseudo-)opcode and params. -local function splitstmt(stmt) - -- Convert label with trailing-colon into .label statement. - local label = match(stmt, "^%s*(.+):%s*$") - if label then return ".label", {label} end - - -- Split at commas and equal signs, but obey parentheses and brackets. - splitlvl = "" - stmt = gsub(stmt, "[,%(%)%[%]{}]", splitstmt_one) - if splitlvl ~= "" then werror("unbalanced () or []") end - - -- Split off opcode. - local op, other = match(stmt, "^%s*([^%s%z]+)%s*(.*)$") - if not op then werror("bad statement syntax") end - - -- Split parameters. - local params = {} - for p in gmatch(other, "%s*(%Z+)%z?") do - params[#params+1] = gsub(p, "%s+$", "") - end - if #params > 16 then werror("too many parameters") end - - params.op = op - return op, params -end - --- Process a single statement. -dostmt = function(stmt) - -- Ignore empty statements. - if match(stmt, "^%s*$") then return end - - -- Capture macro defs before substitution. - if mac_capture then return mac_capture(stmt) end - stmt = definesubst(stmt) - - -- Emit C code without parsing the line. - if sub(stmt, 1, 1) == "|" then - local tail = sub(stmt, 2) - wflush() - if sub(tail, 1, 2) == "//" then wcomment(tail) else wline(tail, true) end - return - end - - -- Split into (pseudo-)opcode and params. - local op, params = splitstmt(stmt) - - -- Get opcode handler (matching # of parameters or generic handler). - local f = map_op[op.."_"..#params] or map_op[op.."_*"] - if not f then - if not g_arch then wfatal("first statement must be .arch") end - -- Improve error report. - for i=0,9 do - if map_op[op.."_"..i] then - werror("wrong number of parameters for `"..op.."'") - end - end - werror("unknown statement `"..op.."'") - end - - -- Call opcode handler or special handler for template strings. - if type(f) == "string" then - map_op[".template__"](params, f) - else - f(params) - end -end - --- Process a single line. -local function doline(line) - if g_opt.flushline then wflush() end - - -- Assembler line? - local indent, aline = match(line, "^(%s*)%|(.*)$") - if not aline then - -- No, plain C code line, need to flush first. - wflush() - wsync() - wline(line, false) - return - end - - g_indent = indent -- Remember current line indentation. - - -- Emit C code (even from macros). Avoids echo and line parsing. - if sub(aline, 1, 1) == "|" then - if not mac_capture then - wsync() - elseif g_opt.comment then - wsync() - wcomment(aline) - end - dostmt(aline) - return - end - - -- Echo assembler line as a comment. - if g_opt.comment then - wsync() - wcomment(aline) - end - - -- Strip assembler comments. - aline = gsub(aline, "//.*$", "") - - -- Split line into statements at semicolons. - if match(aline, ";") then - for stmt in gmatch(aline, "[^;]+") do dostmt(stmt) end - else - dostmt(aline) - end -end - ------------------------------------------------------------------------------- - --- Write DynASM header. -local function dasmhead(out) - out:write(format([[ -/* -** This file has been pre-processed with DynASM. -** %s -** DynASM version %s, DynASM %s version %s -** DO NOT EDIT! The original file is in "%s". -*/ - -]], _info.url, - _info.version, g_arch._info.arch, g_arch._info.version, - g_fname)) -end - --- Read input file. -readfile = function(fin) - g_indent = "" - g_lineno = 0 - g_synclineno = -1 - - -- Process all lines. - for line in fin:lines() do - g_lineno = g_lineno + 1 - g_curline = line - local ok, err = pcall(doline, line) - if not ok and wprinterr(err, "\n") then return true end - end - wflush() - - -- Close input file. - assert(fin == stdin or fin:close()) -end - --- Write output file. -local function writefile(outfile) - local fout - - -- Open output file. - if outfile == nil or outfile == "-" then - fout = stdout - else - fout = assert(io.open(outfile, "w")) - end - - -- Write all buffered lines - wdumplines(fout, g_wbuffer) - - -- Close output file. - assert(fout == stdout or fout:close()) - - -- Optionally dump definitions. - dumpdef(fout == stdout and stderr or stdout) -end - --- Translate an input file to an output file. -local function translate(infile, outfile) - g_wbuffer = {} - g_indent = "" - g_lineno = 0 - g_synclineno = -1 - - -- Put header. - wline(dasmhead) - - -- Read input file. - local fin - if infile == "-" then - g_fname = "(stdin)" - fin = stdin - else - g_fname = infile - fin = assert(io.open(infile, "r")) - end - readfile(fin) - - -- Check for errors. - if not g_arch then - wprinterr(g_fname, ":*: error: missing .arch directive\n") - end - checkconds() - checkmacros() - checkcaptures() - - if g_errcount ~= 0 then - stderr:write(g_fname, ":*: info: ", g_errcount, " error", - (type(g_errcount) == "number" and g_errcount > 1) and "s" or "", - " in input file -- no output file generated.\n") - dumpdef(stderr) - exit(1) - end - - -- Write output file. - writefile(outfile) -end - ------------------------------------------------------------------------------- - --- Print help text. -function opt_map.help() - stdout:write("DynASM -- ", _info.description, ".\n") - stdout:write("DynASM ", _info.version, " ", _info.release, " ", _info.url, "\n") - stdout:write[[ - -Usage: dynasm [OPTION]... INFILE.dasc|- - - -h, --help Display this help text. - -V, --version Display version and copyright information. - - -o, --outfile FILE Output file name (default is stdout). - -I, --include DIR Add directory to the include search path. - - -c, --ccomment Use /* */ comments for assembler lines. - -C, --cppcomment Use // comments for assembler lines (default). - -N, --nocomment Suppress assembler lines in output. - -M, --maccomment Show macro expansions as comments (default off). - - -L, --nolineno Suppress CPP line number information in output. - -F, --flushline Flush action list for every line. - - -D NAME[=SUBST] Define a substitution. - -U NAME Undefine a substitution. - - -P, --dumpdef Dump defines, macros, etc. Repeat for more output. - -A, --dumparch ARCH Load architecture ARCH and dump description. -]] - exit(0) -end - --- Print version information. -function opt_map.version() - stdout:write(format("%s version %s, released %s\n%s\n\n%s", - _info.name, _info.version, _info.release, _info.url, _info.copyright)) - exit(0) -end - --- Misc. options. -function opt_map.outfile(args) g_opt.outfile = optparam(args) end -function opt_map.include(args) insert(g_opt.include, 1, optparam(args)) end -function opt_map.ccomment() g_opt.comment = "/*|"; g_opt.endcomment = " */" end -function opt_map.cppcomment() g_opt.comment = "//|"; g_opt.endcomment = "" end -function opt_map.nocomment() g_opt.comment = false end -function opt_map.maccomment() g_opt.maccomment = true end -function opt_map.nolineno() g_opt.cpp = false end -function opt_map.flushline() g_opt.flushline = true end -function opt_map.dumpdef() g_opt.dumpdef = g_opt.dumpdef + 1 end - ------------------------------------------------------------------------------- - --- Short aliases for long options. -local opt_alias = { - h = "help", ["?"] = "help", V = "version", - o = "outfile", I = "include", - c = "ccomment", C = "cppcomment", N = "nocomment", M = "maccomment", - L = "nolineno", F = "flushline", - P = "dumpdef", A = "dumparch", -} - --- Parse single option. -local function parseopt(opt, args) - opt_current = #opt == 1 and "-"..opt or "--"..opt - local f = opt_map[opt] or opt_map[opt_alias[opt]] - if not f then - opterror("unrecognized option `", opt_current, "'. Try `--help'.\n") - end - f(args) -end - --- Parse arguments. -local function parseargs(args) - -- Default options. - g_opt.comment = "//|" - g_opt.endcomment = "" - g_opt.cpp = true - g_opt.dumpdef = 0 - g_opt.include = { "" } - - -- Process all option arguments. - args.argn = 1 - repeat - local a = args[args.argn] - if not a then break end - local lopt, opt = match(a, "^%-(%-?)(.+)") - if not opt then break end - args.argn = args.argn + 1 - if lopt == "" then - -- Loop through short options. - for o in gmatch(opt, ".") do parseopt(o, args) end - else - -- Long option. - parseopt(opt, args) - end - until false - - -- Check for proper number of arguments. - local nargs = #args - args.argn + 1 - if nargs ~= 1 then - if nargs == 0 then - if g_opt.dumpdef > 0 then return dumpdef(stdout) end - end - opt_map.help() - end - - -- Translate a single input file to a single output file - -- TODO: Handle multiple files? - translate(args[args.argn], g_opt.outfile) -end - ------------------------------------------------------------------------------- - --- Add the directory dynasm.lua resides in to the Lua module search path. -local arg = arg -if arg and arg[0] then - prefix = match(arg[0], "^(.*[/\\])") - if package and prefix then package.path = prefix.."?.lua;"..package.path end -end - --- Start DynASM. -parseargs{...} - ------------------------------------------------------------------------------- - diff --git a/deps/luajit/etc/luajit.1 b/deps/luajit/etc/luajit.1 deleted file mode 100644 index fd38b0a..0000000 --- a/deps/luajit/etc/luajit.1 +++ /dev/null @@ -1,88 +0,0 @@ -.TH luajit 1 "" "" "LuaJIT documentation" -.SH NAME -luajit \- Just-In-Time Compiler for the Lua Language -\fB -.SH SYNOPSIS -.B luajit -[\fIoptions\fR]... [\fIscript\fR [\fIargs\fR]...] -.SH "WEB SITE" -.IR http://luajit.org -.SH DESCRIPTION -.PP -This is the command-line program to run Lua programs with \fBLuaJIT\fR. -.PP -\fBLuaJIT\fR is a just-in-time (JIT) compiler for the Lua language. -The virtual machine (VM) is based on a fast interpreter combined with -a trace compiler. It can significantly improve the performance of Lua programs. -.PP -\fBLuaJIT\fR is API\- and ABI-compatible with the VM of the standard -Lua\ 5.1 interpreter. When embedding the VM into an application, -the built library can be used as a drop-in replacement. -.SH OPTIONS -.TP -.BI "\-e " chunk -Run the given chunk of Lua code. -.TP -.BI "\-l " library -Load the named library, just like \fBrequire("\fR\fIlibrary\fR\fB")\fR. -.TP -.BI "\-b " ... -Save or list bytecode. Run without arguments to get help on options. -.TP -.BI "\-j " command -Perform LuaJIT control command (optional space after \fB\-j\fR). -.TP -.BI "\-O" [opt] -Control LuaJIT optimizations. -.TP -.B "\-i" -Run in interactive mode. -.TP -.B "\-v" -Show \fBLuaJIT\fR version. -.TP -.B "\-E" -Ignore environment variables. -.TP -.B "\-\-" -Stop processing options. -.TP -.B "\-" -Read script from stdin instead. -.PP -After all options are processed, the given \fIscript\fR is run. -The arguments are passed in the global \fIarg\fR table. -.PP -Interactive mode is only entered, if no \fIscript\fR and no \fB\-e\fR -option is given. Interactive mode can be left with EOF (\fICtrl\-Z\fB). -.SH EXAMPLES -.TP -luajit hello.lua world - -Prints "Hello world", assuming \fIhello.lua\fR contains: -.br - print("Hello", arg[1]) -.TP -luajit \-e "local x=0; for i=1,1e9 do x=x+i end; print(x)" - -Calculates the sum of the numbers from 1 to 1000000000. -.br -And finishes in a reasonable amount of time, too. -.TP -luajit \-jv \-e "for i=1,10 do for j=1,10 do for k=1,100 do end end end" - -Runs some nested loops and shows the resulting traces. -.SH COPYRIGHT -.PP -\fBLuaJIT\fR is Copyright \(co 2005-2015 Mike Pall. -.br -\fBLuaJIT\fR is open source software, released under the MIT license. -.SH SEE ALSO -.PP -More details in the provided HTML docs or at: -.IR http://luajit.org -.br -More about the Lua language can be found at: -.IR http://lua.org/docs.html -.PP -lua(1) diff --git a/deps/luajit/etc/luajit.pc b/deps/luajit/etc/luajit.pc deleted file mode 100644 index a652b40..0000000 --- a/deps/luajit/etc/luajit.pc +++ /dev/null @@ -1,25 +0,0 @@ -# Package information for LuaJIT to be used by pkg-config. -majver=2 -minver=0 -relver=4 -version=${majver}.${minver}.${relver} -abiver=5.1 - -prefix=/usr/local -multilib=lib -exec_prefix=${prefix} -libdir=${exec_prefix}/${multilib} -libname=luajit-${abiver} -includedir=${prefix}/include/luajit-${majver}.${minver} - -INSTALL_LMOD=${prefix}/share/lua/${abiver} -INSTALL_CMOD=${prefix}/${multilib}/lua/${abiver} - -Name: LuaJIT -Description: Just-in-time compiler for Lua -URL: http://luajit.org -Version: ${version} -Requires: -Libs: -L${libdir} -l${libname} -Libs.private: -Wl,-E -lm -ldl -Cflags: -I${includedir} diff --git a/deps/luajit/src/Makefile b/deps/luajit/src/Makefile deleted file mode 100644 index 1d38fa2..0000000 --- a/deps/luajit/src/Makefile +++ /dev/null @@ -1,684 +0,0 @@ -############################################################################## -# LuaJIT Makefile. Requires GNU Make. -# -# Please read doc/install.html before changing any variables! -# -# Suitable for POSIX platforms (Linux, *BSD, OSX etc.). -# Also works with MinGW and Cygwin on Windows. -# Please check msvcbuild.bat for building with MSVC on Windows. -# -# Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -############################################################################## - -MAJVER= 2 -MINVER= 0 -RELVER= 4 -ABIVER= 5.1 -NODOTABIVER= 51 - -############################################################################## -############################# COMPILER OPTIONS ############################# -############################################################################## -# These options mainly affect the speed of the JIT compiler itself, not the -# speed of the JIT-compiled code. Turn any of the optional settings on by -# removing the '#' in front of them. Make sure you force a full recompile -# with "make clean", followed by "make" if you change any options. -# -# LuaJIT builds as a native 32 or 64 bit binary by default. -CC= gcc -# -# Use this if you want to force a 32 bit build on a 64 bit multilib OS. -#CC= gcc -m32 -# -# Since the assembler part does NOT maintain a frame pointer, it's pointless -# to slow down the C part by not omitting it. Debugging, tracebacks and -# unwinding are not affected -- the assembler part has frame unwind -# information and GCC emits it where needed (x64) or with -g (see CCDEBUG). -CCOPT= -O2 -fomit-frame-pointer -# Use this if you want to generate a smaller binary (but it's slower): -#CCOPT= -Os -fomit-frame-pointer -# Note: it's no longer recommended to use -O3 with GCC 4.x. -# The I-Cache bloat usually outweighs the benefits from aggressive inlining. -# -# Target-specific compiler options: -# -# x86 only: it's recommended to compile at least for i686. Better yet, -# compile for an architecture that has SSE2, too (-msse -msse2). -# -# x86/x64 only: For GCC 4.2 or higher and if you don't intend to distribute -# the binaries to a different machine you could also use: -march=native -# -CCOPT_x86= -march=i686 -CCOPT_x64= -CCOPT_arm= -CCOPT_ppc= -CCOPT_ppcspe= -CCOPT_mips= -# -CCDEBUG= -# Uncomment the next line to generate debug information: -#CCDEBUG= -g -# -CCWARN= -Wall -# Uncomment the next line to enable more warnings: -#CCWARN+= -Wextra -Wdeclaration-after-statement -Wredundant-decls -Wshadow -Wpointer-arith -# -############################################################################## - -############################################################################## -################################ BUILD MODE ################################ -############################################################################## -# The default build mode is mixed mode on POSIX. On Windows this is the same -# as dynamic mode. -# -# Mixed mode creates a static + dynamic library and a statically linked luajit. -BUILDMODE= mixed -# -# Static mode creates a static library and a statically linked luajit. -#BUILDMODE= static -# -# Dynamic mode creates a dynamic library and a dynamically linked luajit. -# Note: this executable will only run when the library is installed! -#BUILDMODE= dynamic -# -############################################################################## - -############################################################################## -################################# FEATURES ################################# -############################################################################## -# Enable/disable these features as needed, but make sure you force a full -# recompile with "make clean", followed by "make". -XCFLAGS= -# -# Permanently disable the FFI extension to reduce the size of the LuaJIT -# executable. But please consider that the FFI library is compiled-in, -# but NOT loaded by default. It only allocates any memory, if you actually -# make use of it. -#XCFLAGS+= -DLUAJIT_DISABLE_FFI -# -# Features from Lua 5.2 that are unlikely to break existing code are -# enabled by default. Some other features that *might* break some existing -# code (e.g. __pairs or os.execute() return values) can be enabled here. -# Note: this does not provide full compatibility with Lua 5.2 at this time. -#XCFLAGS+= -DLUAJIT_ENABLE_LUA52COMPAT -# -# Disable the JIT compiler, i.e. turn LuaJIT into a pure interpreter. -#XCFLAGS+= -DLUAJIT_DISABLE_JIT -# -# Some architectures (e.g. PPC) can use either single-number (1) or -# dual-number (2) mode. Uncomment one of these lines to override the -# default mode. Please see LJ_ARCH_NUMMODE in lj_arch.h for details. -#XCFLAGS+= -DLUAJIT_NUMMODE=1 -#XCFLAGS+= -DLUAJIT_NUMMODE=2 -# -############################################################################## - -############################################################################## -############################ DEBUGGING SUPPORT ############################# -############################################################################## -# Enable these options as needed, but make sure you force a full recompile -# with "make clean", followed by "make". -# Note that most of these are NOT suitable for benchmarking or release mode! -# -# Use the system provided memory allocator (realloc) instead of the -# bundled memory allocator. This is slower, but sometimes helpful for -# debugging. This option cannot be enabled on x64, since realloc usually -# doesn't return addresses in the right address range. -# OTOH this option is mandatory for Valgrind's memcheck tool on x64 and -# the only way to get useful results from it for all other architectures. -#XCFLAGS+= -DLUAJIT_USE_SYSMALLOC -# -# This define is required to run LuaJIT under Valgrind. The Valgrind -# header files must be installed. You should enable debug information, too. -# Use --suppressions=lj.supp to avoid some false positives. -#XCFLAGS+= -DLUAJIT_USE_VALGRIND -# -# This is the client for the GDB JIT API. GDB 7.0 or higher is required -# to make use of it. See lj_gdbjit.c for details. Enabling this causes -# a non-negligible overhead, even when not running under GDB. -#XCFLAGS+= -DLUAJIT_USE_GDBJIT -# -# Turn on assertions for the Lua/C API to debug problems with lua_* calls. -# This is rather slow -- use only while developing C libraries/embeddings. -#XCFLAGS+= -DLUA_USE_APICHECK -# -# Turn on assertions for the whole LuaJIT VM. This significantly slows down -# everything. Use only if you suspect a problem with LuaJIT itself. -#XCFLAGS+= -DLUA_USE_ASSERT -# -############################################################################## -# You probably don't need to change anything below this line! -############################################################################## - -############################################################################## -# Flags and options for host and target. -############################################################################## - -# You can override the following variables at the make command line: -# CC HOST_CC STATIC_CC DYNAMIC_CC -# CFLAGS HOST_CFLAGS TARGET_CFLAGS -# LDFLAGS HOST_LDFLAGS TARGET_LDFLAGS TARGET_SHLDFLAGS -# LIBS HOST_LIBS TARGET_LIBS -# CROSS HOST_SYS TARGET_SYS TARGET_FLAGS -# -# Cross-compilation examples: -# make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows -# make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu- - -CCOPTIONS= $(CCDEBUG) $(CCOPT) $(CCWARN) $(XCFLAGS) $(CFLAGS) -LDOPTIONS= $(CCDEBUG) $(LDFLAGS) - -HOST_CC= $(CC) -HOST_RM= rm -f -# If left blank, minilua is built and used. You can supply an installed -# copy of (plain) Lua 5.1 or 5.2, plus Lua BitOp. E.g. with: HOST_LUA=lua -HOST_LUA= - -HOST_XCFLAGS= -I. -HOST_XLDFLAGS= -HOST_XLIBS= -HOST_ACFLAGS= $(CCOPTIONS) $(HOST_XCFLAGS) $(TARGET_ARCH) $(HOST_CFLAGS) -HOST_ALDFLAGS= $(LDOPTIONS) $(HOST_XLDFLAGS) $(HOST_LDFLAGS) -HOST_ALIBS= $(HOST_XLIBS) $(LIBS) $(HOST_LIBS) - -STATIC_CC = $(CROSS)$(CC) -DYNAMIC_CC = $(CROSS)$(CC) -fPIC -TARGET_CC= $(STATIC_CC) -TARGET_STCC= $(STATIC_CC) -TARGET_DYNCC= $(DYNAMIC_CC) -TARGET_LD= $(CROSS)$(CC) -TARGET_AR= $(CROSS)ar rcus -TARGET_STRIP= $(CROSS)strip - -TARGET_LIBPATH= $(or $(PREFIX),/usr/local)/$(or $(MULTILIB),lib) -TARGET_SONAME= libluajit-$(ABIVER).so.$(MAJVER) -TARGET_DYLIBNAME= libluajit-$(ABIVER).$(MAJVER).dylib -TARGET_DYLIBPATH= $(TARGET_LIBPATH)/$(TARGET_DYLIBNAME) -TARGET_DLLNAME= lua$(NODOTABIVER).dll -TARGET_XSHLDFLAGS= -shared -fPIC -Wl,-soname,$(TARGET_SONAME) -TARGET_DYNXLDOPTS= - -TARGET_LFSFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -TARGET_XCFLAGS= $(TARGET_LFSFLAGS) -U_FORTIFY_SOURCE -TARGET_XLDFLAGS= -TARGET_XLIBS= -lm -TARGET_TCFLAGS= $(CCOPTIONS) $(TARGET_XCFLAGS) $(TARGET_FLAGS) $(TARGET_CFLAGS) -TARGET_ACFLAGS= $(CCOPTIONS) $(TARGET_XCFLAGS) $(TARGET_FLAGS) $(TARGET_CFLAGS) -TARGET_ALDFLAGS= $(LDOPTIONS) $(TARGET_XLDFLAGS) $(TARGET_FLAGS) $(TARGET_LDFLAGS) -TARGET_ASHLDFLAGS= $(LDOPTIONS) $(TARGET_XSHLDFLAGS) $(TARGET_FLAGS) $(TARGET_SHLDFLAGS) -TARGET_ALIBS= $(TARGET_XLIBS) $(LIBS) $(TARGET_LIBS) - -TARGET_TESTARCH=$(shell $(TARGET_CC) $(TARGET_TCFLAGS) -E lj_arch.h -dM) -ifneq (,$(findstring LJ_TARGET_X64 ,$(TARGET_TESTARCH))) - TARGET_LJARCH= x64 -else -ifneq (,$(findstring LJ_TARGET_X86 ,$(TARGET_TESTARCH))) - TARGET_LJARCH= x86 -else -ifneq (,$(findstring LJ_TARGET_ARM ,$(TARGET_TESTARCH))) - TARGET_LJARCH= arm -else -ifneq (,$(findstring LJ_TARGET_PPC ,$(TARGET_TESTARCH))) - TARGET_LJARCH= ppc -else -ifneq (,$(findstring LJ_TARGET_PPCSPE ,$(TARGET_TESTARCH))) - TARGET_LJARCH= ppcspe -else -ifneq (,$(findstring LJ_TARGET_MIPS ,$(TARGET_TESTARCH))) - ifneq (,$(findstring MIPSEL ,$(TARGET_TESTARCH))) - TARGET_ARCH= -D__MIPSEL__=1 - endif - TARGET_LJARCH= mips -else - $(error Unsupported target architecture) -endif -endif -endif -endif -endif -endif - -ifneq (,$(findstring LJ_TARGET_PS3 1,$(TARGET_TESTARCH))) - TARGET_SYS= PS3 - TARGET_ARCH+= -D__CELLOS_LV2__ - TARGET_XCFLAGS+= -DLUAJIT_USE_SYSMALLOC -endif -ifneq (,$(findstring LJ_NO_UNWIND 1,$(TARGET_TESTARCH))) - TARGET_ARCH+= -DLUAJIT_NO_UNWIND -endif - -TARGET_XCFLAGS+= $(CCOPT_$(TARGET_LJARCH)) -TARGET_ARCH+= $(patsubst %,-DLUAJIT_TARGET=LUAJIT_ARCH_%,$(TARGET_LJARCH)) - -ifneq (,$(PREFIX)) -ifneq (/usr/local,$(PREFIX)) - TARGET_XCFLAGS+= -DLUA_ROOT=\"$(PREFIX)\" - ifneq (/usr,$(PREFIX)) - TARGET_DYNXLDOPTS= -Wl,-rpath,$(TARGET_LIBPATH) - endif -endif -endif -ifneq (,$(MULTILIB)) - TARGET_XCFLAGS+= -DLUA_MULTILIB=\"$(MULTILIB)\" -endif -ifneq (,$(LMULTILIB)) - TARGET_XCFLAGS+= -DLUA_LMULTILIB=\"$(LMULTILIB)\" -endif - -############################################################################## -# System detection. -############################################################################## - -ifeq (Windows,$(findstring Windows,$(OS))$(MSYSTEM)$(TERM)) - HOST_SYS= Windows - HOST_RM= del -else - HOST_SYS:= $(shell uname -s) - ifneq (,$(findstring MINGW,$(HOST_SYS))) - HOST_SYS= Windows - HOST_MSYS= mingw - endif - ifneq (,$(findstring CYGWIN,$(HOST_SYS))) - HOST_SYS= Windows - HOST_MSYS= cygwin - endif -endif - -TARGET_SYS?= $(HOST_SYS) -ifeq (Windows,$(TARGET_SYS)) - TARGET_STRIP+= --strip-unneeded - TARGET_XSHLDFLAGS= -shared - TARGET_DYNXLDOPTS= -else -ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector 2>/dev/null || echo 1)) - TARGET_XCFLAGS+= -fno-stack-protector -endif -ifeq (Darwin,$(TARGET_SYS)) - ifeq (,$(MACOSX_DEPLOYMENT_TARGET)) - export MACOSX_DEPLOYMENT_TARGET=10.4 - endif - TARGET_STRIP+= -x - TARGET_AR+= 2>/dev/null - TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC - TARGET_DYNXLDOPTS= - TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER) - ifeq (x64,$(TARGET_LJARCH)) - TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000 - TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000 - endif -else -ifeq (iOS,$(TARGET_SYS)) - TARGET_STRIP+= -x - TARGET_AR+= 2>/dev/null - TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC - TARGET_DYNXLDOPTS= - TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER) -else - ifneq (SunOS,$(TARGET_SYS)) - ifneq (PS3,$(TARGET_SYS)) - TARGET_XLDFLAGS+= -Wl,-E - endif - endif - ifeq (Linux,$(TARGET_SYS)) - TARGET_XLIBS+= -ldl - endif - ifeq (GNU/kFreeBSD,$(TARGET_SYS)) - TARGET_XLIBS+= -ldl - endif -endif -endif -endif - -ifneq ($(HOST_SYS),$(TARGET_SYS)) - ifeq (Windows,$(TARGET_SYS)) - HOST_XCFLAGS+= -malign-double -DLUAJIT_OS=LUAJIT_OS_WINDOWS - else - ifeq (Linux,$(TARGET_SYS)) - HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_LINUX - else - ifeq (Darwin,$(TARGET_SYS)) - HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_OSX - else - ifeq (iOS,$(TARGET_SYS)) - HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_OSX - else - HOST_XCFLAGS+= -DLUAJIT_OS=LUAJIT_OS_OTHER - endif - endif - endif - endif -endif - -ifneq (,$(CCDEBUG)) - TARGET_STRIP= @: -endif - -############################################################################## -# Files and pathnames. -############################################################################## - -MINILUA_O= host/minilua.o -MINILUA_LIBS= -lm -MINILUA_T= host/minilua -MINILUA_X= $(MINILUA_T) - -ifeq (,$(HOST_LUA)) - HOST_LUA= $(MINILUA_X) - DASM_DEP= $(MINILUA_T) -endif - -DASM_DIR= ../dynasm -DASM= $(HOST_LUA) $(DASM_DIR)/dynasm.lua -DASM_XFLAGS= -DASM_AFLAGS= -DASM_ARCH= $(TARGET_LJARCH) - -ifneq (,$(findstring LJ_ARCH_BITS 64,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D P64 -endif -ifneq (,$(findstring LJ_HASJIT 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D JIT -endif -ifneq (,$(findstring LJ_HASFFI 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D FFI -endif -ifneq (,$(findstring LJ_DUALNUM 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D DUALNUM -endif -ifneq (,$(findstring LJ_ARCH_HASFPU 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D FPU - TARGET_ARCH+= -DLJ_ARCH_HASFPU=1 -else - TARGET_ARCH+= -DLJ_ARCH_HASFPU=0 -endif -ifeq (,$(findstring LJ_ABI_SOFTFP 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D HFABI - TARGET_ARCH+= -DLJ_ABI_SOFTFP=0 -else - TARGET_ARCH+= -DLJ_ABI_SOFTFP=1 -endif -DASM_AFLAGS+= -D VER=$(subst LJ_ARCH_VERSION_,,$(filter LJ_ARCH_VERSION_%,$(subst LJ_ARCH_VERSION ,LJ_ARCH_VERSION_,$(TARGET_TESTARCH)))) -ifeq (Windows,$(TARGET_SYS)) - DASM_AFLAGS+= -D WIN -endif -ifeq (x86,$(TARGET_LJARCH)) - ifneq (,$(findstring __SSE2__ 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D SSE - endif -else -ifeq (x64,$(TARGET_LJARCH)) - DASM_ARCH= x86 -else -ifeq (arm,$(TARGET_LJARCH)) - ifeq (iOS,$(TARGET_SYS)) - DASM_AFLAGS+= -D IOS - endif -else -ifeq (ppc,$(TARGET_LJARCH)) - ifneq (,$(findstring LJ_ARCH_SQRT 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D SQRT - endif - ifneq (,$(findstring LJ_ARCH_ROUND 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D ROUND - endif - ifneq (,$(findstring LJ_ARCH_PPC64 1,$(TARGET_TESTARCH))) - DASM_AFLAGS+= -D GPR64 - endif - ifeq (PS3,$(TARGET_SYS)) - DASM_AFLAGS+= -D PPE -D TOC - endif -endif -endif -endif -endif - -DASM_FLAGS= $(DASM_XFLAGS) $(DASM_AFLAGS) -DASM_DASC= vm_$(DASM_ARCH).dasc - -BUILDVM_O= host/buildvm.o host/buildvm_asm.o host/buildvm_peobj.o \ - host/buildvm_lib.o host/buildvm_fold.o -BUILDVM_T= host/buildvm -BUILDVM_X= $(BUILDVM_T) - -HOST_O= $(MINILUA_O) $(BUILDVM_O) -HOST_T= $(MINILUA_T) $(BUILDVM_T) - -LJVM_S= lj_vm.s -LJVM_O= lj_vm.o -LJVM_BOUT= $(LJVM_S) -LJVM_MODE= elfasm - -LJLIB_O= lib_base.o lib_math.o lib_bit.o lib_string.o lib_table.o \ - lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o lib_ffi.o -LJLIB_C= $(LJLIB_O:.o=.c) - -LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \ - lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o lj_debug.o \ - lj_state.o lj_dispatch.o lj_vmevent.o lj_vmmath.o lj_strscan.o \ - lj_api.o lj_lex.o lj_parse.o lj_bcread.o lj_bcwrite.o lj_load.o \ - lj_ir.o lj_opt_mem.o lj_opt_fold.o lj_opt_narrow.o \ - lj_opt_dce.o lj_opt_loop.o lj_opt_split.o lj_opt_sink.o \ - lj_mcode.o lj_snap.o lj_record.o lj_crecord.o lj_ffrecord.o \ - lj_asm.o lj_trace.o lj_gdbjit.o \ - lj_ctype.o lj_cdata.o lj_cconv.o lj_ccall.o lj_ccallback.o \ - lj_carith.o lj_clib.o lj_cparse.o \ - lj_lib.o lj_alloc.o lib_aux.o \ - $(LJLIB_O) lib_init.o - -LJVMCORE_O= $(LJVM_O) $(LJCORE_O) -LJVMCORE_DYNO= $(LJVMCORE_O:.o=_dyn.o) - -LIB_VMDEF= jit/vmdef.lua -LIB_VMDEFP= $(LIB_VMDEF) - -LUAJIT_O= luajit.o -LUAJIT_A= libluajit.a -LUAJIT_SO= libluajit.so -LUAJIT_T= luajit - -ALL_T= $(LUAJIT_T) $(LUAJIT_A) $(LUAJIT_SO) $(HOST_T) -ALL_HDRGEN= lj_bcdef.h lj_ffdef.h lj_libdef.h lj_recdef.h lj_folddef.h \ - host/buildvm_arch.h -ALL_GEN= $(LJVM_S) $(ALL_HDRGEN) $(LIB_VMDEFP) -WIN_RM= *.obj *.lib *.exp *.dll *.exe *.manifest *.pdb *.ilk -ALL_RM= $(ALL_T) $(ALL_GEN) *.o host/*.o $(WIN_RM) - -############################################################################## -# Build mode handling. -############################################################################## - -# Mixed mode defaults. -TARGET_O= $(LUAJIT_A) -TARGET_T= $(LUAJIT_T) $(LUAJIT_SO) -TARGET_DEP= $(LIB_VMDEF) $(LUAJIT_SO) - -ifeq (Windows,$(TARGET_SYS)) - TARGET_DYNCC= $(STATIC_CC) - LJVM_MODE= peobj - LJVM_BOUT= $(LJVM_O) - LUAJIT_T= luajit.exe - ifeq (cygwin,$(HOST_MSYS)) - LUAJIT_SO= cyg$(TARGET_DLLNAME) - else - LUAJIT_SO= $(TARGET_DLLNAME) - endif - # Mixed mode is not supported on Windows. And static mode doesn't work well. - # C modules cannot be loaded, because they bind to lua51.dll. - ifneq (static,$(BUILDMODE)) - BUILDMODE= dynamic - TARGET_XCFLAGS+= -DLUA_BUILD_AS_DLL - endif -endif -ifeq (Darwin,$(TARGET_SYS)) - LJVM_MODE= machasm -endif -ifeq (iOS,$(TARGET_SYS)) - LJVM_MODE= machasm -endif -ifeq (SunOS,$(TARGET_SYS)) - BUILDMODE= static -endif -ifeq (PS3,$(TARGET_SYS)) - BUILDMODE= static -endif - -ifeq (Windows,$(HOST_SYS)) - MINILUA_T= host/minilua.exe - BUILDVM_T= host/buildvm.exe - ifeq (,$(HOST_MSYS)) - MINILUA_X= host\minilua - BUILDVM_X= host\buildvm - ALL_RM:= $(subst /,\,$(ALL_RM)) - endif -endif - -ifeq (static,$(BUILDMODE)) - TARGET_DYNCC= @: - TARGET_T= $(LUAJIT_T) - TARGET_DEP= $(LIB_VMDEF) -else -ifeq (dynamic,$(BUILDMODE)) - ifneq (Windows,$(TARGET_SYS)) - TARGET_CC= $(DYNAMIC_CC) - endif - TARGET_DYNCC= @: - LJVMCORE_DYNO= $(LJVMCORE_O) - TARGET_O= $(LUAJIT_SO) - TARGET_XLDFLAGS+= $(TARGET_DYNXLDOPTS) -else -ifeq (Darwin,$(TARGET_SYS)) - TARGET_DYNCC= @: - LJVMCORE_DYNO= $(LJVMCORE_O) -endif -ifeq (iOS,$(TARGET_SYS)) - TARGET_DYNCC= @: - LJVMCORE_DYNO= $(LJVMCORE_O) -endif -endif -endif - -Q= @ -E= @echo -#Q= -#E= @: - -############################################################################## -# Make targets. -############################################################################## - -default all: $(TARGET_T) - -amalg: - @grep "^[+|]" ljamalg.c - $(MAKE) all "LJCORE_O=ljamalg.o" - -clean: - $(HOST_RM) $(ALL_RM) - -depend: - @for file in $(ALL_HDRGEN); do \ - test -f $$file || touch $$file; \ - done - @$(HOST_CC) $(HOST_ACFLAGS) -MM *.c host/*.c | \ - sed -e "s| [^ ]*/dasm_\S*\.h||g" \ - -e "s|^\([^l ]\)|host/\1|" \ - -e "s| lj_target_\S*\.h| lj_target_*.h|g" \ - -e "s| lj_emit_\S*\.h| lj_emit_*.h|g" \ - -e "s| lj_asm_\S*\.h| lj_asm_*.h|g" >Makefile.dep - @for file in $(ALL_HDRGEN); do \ - test -s $$file || $(HOST_RM) $$file; \ - done - -.PHONY: default all amalg clean depend - -############################################################################## -# Rules for generated files. -############################################################################## - -$(MINILUA_T): $(MINILUA_O) - $(E) "HOSTLINK $@" - $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(MINILUA_O) $(MINILUA_LIBS) $(HOST_ALIBS) - -host/buildvm_arch.h: $(DASM_DASC) $(DASM_DEP) - $(E) "DYNASM $@" - $(Q)$(DASM) $(DASM_FLAGS) -o $@ $(DASM_DASC) - -host/buildvm.o: $(DASM_DIR)/dasm_*.h - -$(BUILDVM_T): $(BUILDVM_O) - $(E) "HOSTLINK $@" - $(Q)$(HOST_CC) $(HOST_ALDFLAGS) -o $@ $(BUILDVM_O) $(HOST_ALIBS) - -$(LJVM_BOUT): $(BUILDVM_T) - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m $(LJVM_MODE) -o $@ - -lj_bcdef.h: $(BUILDVM_T) $(LJLIB_C) - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m bcdef -o $@ $(LJLIB_C) - -lj_ffdef.h: $(BUILDVM_T) $(LJLIB_C) - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m ffdef -o $@ $(LJLIB_C) - -lj_libdef.h: $(BUILDVM_T) $(LJLIB_C) - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m libdef -o $@ $(LJLIB_C) - -lj_recdef.h: $(BUILDVM_T) $(LJLIB_C) - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m recdef -o $@ $(LJLIB_C) - -$(LIB_VMDEF): $(BUILDVM_T) $(LJLIB_C) - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m vmdef -o $(LIB_VMDEFP) $(LJLIB_C) - -lj_folddef.h: $(BUILDVM_T) lj_opt_fold.c - $(E) "BUILDVM $@" - $(Q)$(BUILDVM_X) -m folddef -o $@ lj_opt_fold.c - -############################################################################## -# Object file rules. -############################################################################## - -%.o: %.c - $(E) "CC $@" - $(Q)$(TARGET_DYNCC) $(TARGET_ACFLAGS) -c -o $(@:.o=_dyn.o) $< - $(Q)$(TARGET_CC) $(TARGET_ACFLAGS) -c -o $@ $< - -%.o: %.s - $(E) "ASM $@" - $(Q)$(TARGET_DYNCC) $(TARGET_ACFLAGS) -c -o $(@:.o=_dyn.o) $< - $(Q)$(TARGET_CC) $(TARGET_ACFLAGS) -c -o $@ $< - -$(LUAJIT_O): - $(E) "CC $@" - $(Q)$(TARGET_STCC) $(TARGET_ACFLAGS) -c -o $@ $< - -$(HOST_O): %.o: %.c - $(E) "HOSTCC $@" - $(Q)$(HOST_CC) $(HOST_ACFLAGS) -c -o $@ $< - -include Makefile.dep - -############################################################################## -# Target file rules. -############################################################################## - -$(LUAJIT_A): $(LJVMCORE_O) - $(E) "AR $@" - $(Q)$(TARGET_AR) $@ $(LJVMCORE_O) - -# The dependency on _O, but linking with _DYNO is intentional. -$(LUAJIT_SO): $(LJVMCORE_O) - $(E) "DYNLINK $@" - $(Q)$(TARGET_LD) $(TARGET_ASHLDFLAGS) -o $@ $(LJVMCORE_DYNO) $(TARGET_ALIBS) - $(Q)$(TARGET_STRIP) $@ - -$(LUAJIT_T): $(TARGET_O) $(LUAJIT_O) $(TARGET_DEP) - $(E) "LINK $@" - $(Q)$(TARGET_LD) $(TARGET_ALDFLAGS) -o $@ $(LUAJIT_O) $(TARGET_O) $(TARGET_ALIBS) - $(Q)$(TARGET_STRIP) $@ - $(E) "OK Successfully built LuaJIT" - -############################################################################## diff --git a/deps/luajit/src/Makefile.dep b/deps/luajit/src/Makefile.dep deleted file mode 100644 index 9e14d61..0000000 --- a/deps/luajit/src/Makefile.dep +++ /dev/null @@ -1,226 +0,0 @@ -lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \ - lj_arch.h lj_err.h lj_errmsg.h lj_state.h lj_trace.h lj_jit.h lj_ir.h \ - lj_dispatch.h lj_bc.h lj_traceerr.h lj_lib.h lj_alloc.h -lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ - lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h \ - lj_tab.h lj_meta.h lj_state.h lj_ctype.h lj_cconv.h lj_bc.h lj_ff.h \ - lj_ffdef.h lj_dispatch.h lj_jit.h lj_ir.h lj_char.h lj_strscan.h \ - lj_lib.h lj_libdef.h -lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ - lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h -lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ - lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_lib.h \ - lj_libdef.h -lib_ffi.o: lib_ffi.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ - lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h \ - lj_ctype.h lj_cparse.h lj_cdata.h lj_cconv.h lj_carith.h lj_ccall.h \ - lj_ccallback.h lj_clib.h lj_ff.h lj_ffdef.h lj_lib.h lj_libdef.h -lib_init.o: lib_init.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h -lib_io.o: lib_io.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ - lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_ff.h \ - lj_ffdef.h lj_lib.h lj_libdef.h -lib_jit.o: lib_jit.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h \ - lj_obj.h lj_def.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h \ - lj_bc.h lj_ir.h lj_jit.h lj_ircall.h lj_iropt.h lj_target.h \ - lj_target_*.h lj_dispatch.h lj_vm.h lj_vmevent.h lj_lib.h luajit.h \ - lj_libdef.h -lib_math.o: lib_math.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ - lj_def.h lj_arch.h lj_lib.h lj_vm.h lj_libdef.h -lib_os.o: lib_os.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ - lj_arch.h lj_err.h lj_errmsg.h lj_lib.h lj_libdef.h -lib_package.o: lib_package.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ - lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h -lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ - lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ - lj_meta.h lj_state.h lj_ff.h lj_ffdef.h lj_bcdump.h lj_lex.h lj_char.h \ - lj_lib.h lj_libdef.h -lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ - lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \ - lj_libdef.h -lj_alloc.o: lj_alloc.c lj_def.h lua.h luaconf.h lj_arch.h lj_alloc.h -lj_api.o: lj_api.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_func.h lj_udata.h \ - lj_meta.h lj_state.h lj_bc.h lj_frame.h lj_trace.h lj_jit.h lj_ir.h \ - lj_dispatch.h lj_traceerr.h lj_vm.h lj_strscan.h -lj_asm.o: lj_asm.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_str.h lj_tab.h lj_frame.h lj_bc.h lj_ctype.h lj_ir.h lj_jit.h \ - lj_ircall.h lj_iropt.h lj_mcode.h lj_trace.h lj_dispatch.h lj_traceerr.h \ - lj_snap.h lj_asm.h lj_vm.h lj_target.h lj_target_*.h lj_emit_*.h \ - lj_asm_*.h -lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \ - lj_bcdef.h -lj_bcread.o: lj_bcread.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_bc.h lj_ctype.h \ - lj_cdata.h lualib.h lj_lex.h lj_bcdump.h lj_state.h -lj_bcwrite.o: lj_bcwrite.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_str.h lj_bc.h lj_ctype.h lj_dispatch.h lj_jit.h lj_ir.h \ - lj_bcdump.h lj_lex.h lj_err.h lj_errmsg.h lj_vm.h -lj_carith.o: lj_carith.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_meta.h lj_ctype.h lj_cconv.h \ - lj_cdata.h lj_carith.h -lj_ccall.o: lj_ccall.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cconv.h \ - lj_cdata.h lj_ccall.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_bc.h \ - lj_traceerr.h -lj_ccallback.o: lj_ccallback.c lj_obj.h lua.h luaconf.h lj_def.h \ - lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_state.h lj_frame.h \ - lj_bc.h lj_ctype.h lj_cconv.h lj_ccall.h lj_ccallback.h lj_target.h \ - lj_target_*.h lj_mcode.h lj_jit.h lj_ir.h lj_trace.h lj_dispatch.h \ - lj_traceerr.h lj_vm.h -lj_cconv.o: lj_cconv.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_tab.h lj_ctype.h lj_gc.h lj_cdata.h lj_cconv.h \ - lj_ccallback.h -lj_cdata.o: lj_cdata.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cconv.h \ - lj_cdata.h -lj_char.o: lj_char.c lj_char.h lj_def.h lua.h luaconf.h -lj_clib.o: lj_clib.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_tab.h lj_str.h lj_udata.h lj_ctype.h lj_cconv.h \ - lj_cdata.h lj_clib.h -lj_cparse.o: lj_cparse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_ctype.h lj_cparse.h lj_frame.h \ - lj_bc.h lj_vm.h lj_char.h lj_strscan.h -lj_crecord.o: lj_crecord.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_frame.h lj_bc.h lj_ctype.h \ - lj_gc.h lj_cdata.h lj_cparse.h lj_cconv.h lj_clib.h lj_ccall.h lj_ff.h \ - lj_ffdef.h lj_ir.h lj_jit.h lj_ircall.h lj_iropt.h lj_trace.h \ - lj_dispatch.h lj_traceerr.h lj_record.h lj_ffrecord.h lj_snap.h \ - lj_crecord.h -lj_ctype.o: lj_ctype.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_ccallback.h -lj_debug.o: lj_debug.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_state.h lj_frame.h \ - lj_bc.h lj_vm.h lj_jit.h lj_ir.h -lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_func.h lj_str.h lj_tab.h lj_meta.h lj_debug.h \ - lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h lj_jit.h lj_ir.h \ - lj_ccallback.h lj_ctype.h lj_gc.h lj_trace.h lj_dispatch.h lj_traceerr.h \ - lj_vm.h luajit.h -lj_err.o: lj_err.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_err.h \ - lj_errmsg.h lj_debug.h lj_str.h lj_func.h lj_state.h lj_frame.h lj_bc.h \ - lj_ff.h lj_ffdef.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h \ - lj_traceerr.h lj_vm.h -lj_ffrecord.o: lj_ffrecord.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_frame.h lj_bc.h lj_ff.h \ - lj_ffdef.h lj_ir.h lj_jit.h lj_ircall.h lj_iropt.h lj_trace.h \ - lj_dispatch.h lj_traceerr.h lj_record.h lj_ffrecord.h lj_crecord.h \ - lj_vm.h lj_strscan.h lj_recdef.h -lj_func.o: lj_func.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_func.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_bc.h \ - lj_traceerr.h lj_vm.h -lj_gc.o: lj_gc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_udata.h lj_meta.h \ - lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_cdata.h lj_trace.h lj_jit.h \ - lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h -lj_gdbjit.o: lj_gdbjit.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_frame.h lj_bc.h lj_jit.h \ - lj_ir.h lj_dispatch.h -lj_ir.o: lj_ir.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_str.h lj_tab.h lj_ir.h lj_jit.h lj_ircall.h lj_iropt.h lj_trace.h \ - lj_dispatch.h lj_bc.h lj_traceerr.h lj_ctype.h lj_cdata.h lj_carith.h \ - lj_vm.h lj_strscan.h lj_lib.h -lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cdata.h lualib.h \ - lj_state.h lj_lex.h lj_parse.h lj_char.h lj_strscan.h -lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \ - lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_strscan.h lj_lib.h -lj_load.o: lj_load.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \ - lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_func.h lj_frame.h \ - lj_bc.h lj_vm.h lj_lex.h lj_bcdump.h lj_parse.h -lj_mcode.o: lj_mcode.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_jit.h lj_ir.h lj_mcode.h lj_trace.h \ - lj_dispatch.h lj_bc.h lj_traceerr.h lj_vm.h -lj_meta.o: lj_meta.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h lj_frame.h lj_bc.h \ - lj_vm.h lj_strscan.h -lj_obj.o: lj_obj.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h -lj_opt_dce.o: lj_opt_dce.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_ir.h lj_jit.h lj_iropt.h -lj_opt_fold.o: lj_opt_fold.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_str.h lj_tab.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h lj_dispatch.h \ - lj_bc.h lj_traceerr.h lj_ctype.h lj_gc.h lj_carith.h lj_vm.h \ - lj_strscan.h lj_folddef.h -lj_opt_loop.o: lj_opt_loop.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_str.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h \ - lj_dispatch.h lj_bc.h lj_traceerr.h lj_snap.h lj_vm.h -lj_opt_mem.o: lj_opt_mem.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_tab.h lj_ir.h lj_jit.h lj_iropt.h -lj_opt_narrow.o: lj_opt_narrow.c lj_obj.h lua.h luaconf.h lj_def.h \ - lj_arch.h lj_bc.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h lj_dispatch.h \ - lj_traceerr.h lj_vm.h lj_strscan.h -lj_opt_sink.o: lj_opt_sink.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_ir.h lj_jit.h lj_iropt.h lj_target.h lj_target_*.h -lj_opt_split.o: lj_opt_split.c lj_obj.h lua.h luaconf.h lj_def.h \ - lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_ir.h lj_jit.h lj_ircall.h \ - lj_iropt.h lj_vm.h -lj_parse.o: lj_parse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_func.h \ - lj_state.h lj_bc.h lj_ctype.h lj_lex.h lj_parse.h lj_vm.h lj_vmevent.h -lj_record.o: lj_record.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h lj_frame.h lj_bc.h \ - lj_ctype.h lj_gc.h lj_ff.h lj_ffdef.h lj_ir.h lj_jit.h lj_ircall.h \ - lj_iropt.h lj_trace.h lj_dispatch.h lj_traceerr.h lj_record.h \ - lj_ffrecord.h lj_snap.h lj_vm.h -lj_snap.o: lj_snap.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_tab.h lj_state.h lj_frame.h lj_bc.h lj_ir.h lj_jit.h lj_iropt.h \ - lj_trace.h lj_dispatch.h lj_traceerr.h lj_snap.h lj_target.h \ - lj_target_*.h lj_ctype.h lj_cdata.h -lj_state.o: lj_state.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_meta.h \ - lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_trace.h lj_jit.h lj_ir.h \ - lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h -lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_char.h -lj_strscan.o: lj_strscan.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_char.h lj_strscan.h -lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ - lj_err.h lj_errmsg.h lj_tab.h -lj_trace.o: lj_trace.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_frame.h lj_bc.h \ - lj_state.h lj_ir.h lj_jit.h lj_iropt.h lj_mcode.h lj_trace.h \ - lj_dispatch.h lj_traceerr.h lj_snap.h lj_gdbjit.h lj_record.h lj_asm.h \ - lj_vm.h lj_vmevent.h lj_target.h lj_target_*.h -lj_udata.o: lj_udata.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_gc.h lj_udata.h -lj_vmevent.o: lj_vmevent.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_str.h lj_tab.h lj_state.h lj_dispatch.h lj_bc.h lj_jit.h lj_ir.h \ - lj_vm.h lj_vmevent.h -lj_vmmath.o: lj_vmmath.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ - lj_ir.h lj_vm.h -ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \ - lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \ - lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_cdata.h \ - lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c \ - lj_debug.h lj_ff.h lj_ffdef.h lj_char.c lj_char.h lj_bc.c lj_bcdef.h \ - lj_obj.c lj_str.c lj_tab.c lj_func.c lj_udata.c lj_meta.c lj_strscan.h \ - lj_debug.c lj_state.c lj_lex.h lj_alloc.h lj_dispatch.c lj_ccallback.h \ - luajit.h lj_vmevent.c lj_vmevent.h lj_vmmath.c lj_strscan.c lj_api.c \ - lj_lex.c lualib.h lj_parse.h lj_parse.c lj_bcread.c lj_bcdump.h \ - lj_bcwrite.c lj_load.c lj_ctype.c lj_cdata.c lj_cconv.h lj_cconv.c \ - lj_ccall.c lj_ccall.h lj_ccallback.c lj_target.h lj_target_*.h \ - lj_mcode.h lj_carith.c lj_carith.h lj_clib.c lj_clib.h lj_cparse.c \ - lj_cparse.h lj_lib.c lj_lib.h lj_ir.c lj_ircall.h lj_iropt.h \ - lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c lj_opt_dce.c \ - lj_opt_loop.c lj_snap.h lj_opt_split.c lj_opt_sink.c lj_mcode.c \ - lj_snap.c lj_record.c lj_record.h lj_ffrecord.h lj_crecord.c \ - lj_crecord.h lj_ffrecord.c lj_recdef.h lj_asm.c lj_asm.h lj_emit_*.h \ - lj_asm_*.h lj_trace.c lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c \ - lib_base.c lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c \ - lib_os.c lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_ffi.c \ - lib_init.c -luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h lj_arch.h -host/buildvm.o: host/buildvm.c host/buildvm.h lj_def.h lua.h luaconf.h \ - lj_arch.h lj_obj.h lj_def.h lj_arch.h lj_gc.h lj_obj.h lj_bc.h lj_ir.h \ - lj_ircall.h lj_ir.h lj_jit.h lj_frame.h lj_bc.h lj_dispatch.h lj_ctype.h \ - lj_gc.h lj_ccall.h lj_ctype.h luajit.h \ - host/buildvm_arch.h lj_traceerr.h -host/buildvm_asm.o: host/buildvm_asm.c host/buildvm.h lj_def.h lua.h luaconf.h \ - lj_arch.h lj_bc.h lj_def.h lj_arch.h -host/buildvm_fold.o: host/buildvm_fold.c host/buildvm.h lj_def.h lua.h \ - luaconf.h lj_arch.h lj_obj.h lj_def.h lj_arch.h lj_ir.h lj_obj.h -host/buildvm_lib.o: host/buildvm_lib.c host/buildvm.h lj_def.h lua.h luaconf.h \ - lj_arch.h lj_obj.h lj_def.h lj_arch.h lj_lib.h lj_obj.h -host/buildvm_peobj.o: host/buildvm_peobj.c host/buildvm.h lj_def.h lua.h \ - luaconf.h lj_arch.h lj_bc.h lj_def.h lj_arch.h -host/minilua.o: host/minilua.c diff --git a/deps/luajit/src/host/README b/deps/luajit/src/host/README deleted file mode 100644 index abfcdaa..0000000 --- a/deps/luajit/src/host/README +++ /dev/null @@ -1,4 +0,0 @@ -The files in this directory are only used during the build process of LuaJIT. -For cross-compilation, they must be executed on the host, not on the target. - -These files should NOT be installed! diff --git a/deps/luajit/src/host/buildvm.c b/deps/luajit/src/host/buildvm.c deleted file mode 100644 index 07122a6..0000000 --- a/deps/luajit/src/host/buildvm.c +++ /dev/null @@ -1,516 +0,0 @@ -/* -** LuaJIT VM builder. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** This is a tool to build the hand-tuned assembler code required for -** LuaJIT's bytecode interpreter. It supports a variety of output formats -** to feed different toolchains (see usage() below). -** -** This tool is not particularly optimized because it's only used while -** _building_ LuaJIT. There's no point in distributing or installing it. -** Only the object code generated by this tool is linked into LuaJIT. -** -** Caveat: some memory is not free'd, error handling is lazy. -** It's a one-shot tool -- any effort fixing this would be wasted. -*/ - -#include "buildvm.h" -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_bc.h" -#include "lj_ir.h" -#include "lj_ircall.h" -#include "lj_frame.h" -#include "lj_dispatch.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#include "lj_ccall.h" -#endif -#include "luajit.h" - -#if defined(_WIN32) -#include -#include -#endif - -/* ------------------------------------------------------------------------ */ - -/* DynASM glue definitions. */ -#define Dst ctx -#define Dst_DECL BuildCtx *ctx -#define Dst_REF (ctx->D) -#define DASM_CHECKS 1 - -#include "../dynasm/dasm_proto.h" - -/* Glue macros for DynASM. */ -static int collect_reloc(BuildCtx *ctx, uint8_t *addr, int idx, int type); - -#define DASM_EXTERN(ctx, addr, idx, type) \ - collect_reloc(ctx, addr, idx, type) - -/* ------------------------------------------------------------------------ */ - -/* Avoid trouble if cross-compiling for an x86 target. Speed doesn't matter. */ -#define DASM_ALIGNED_WRITES 1 - -/* Embed architecture-specific DynASM encoder. */ -#if LJ_TARGET_X86ORX64 -#include "../dynasm/dasm_x86.h" -#elif LJ_TARGET_ARM -#include "../dynasm/dasm_arm.h" -#elif LJ_TARGET_PPC -#include "../dynasm/dasm_ppc.h" -#elif LJ_TARGET_PPCSPE -#include "../dynasm/dasm_ppc.h" -#elif LJ_TARGET_MIPS -#include "../dynasm/dasm_mips.h" -#else -#error "No support for this architecture (yet)" -#endif - -/* Embed generated architecture-specific backend. */ -#include "buildvm_arch.h" - -/* ------------------------------------------------------------------------ */ - -void owrite(BuildCtx *ctx, const void *ptr, size_t sz) -{ - if (fwrite(ptr, 1, sz, ctx->fp) != sz) { - fprintf(stderr, "Error: cannot write to output file: %s\n", - strerror(errno)); - exit(1); - } -} - -/* ------------------------------------------------------------------------ */ - -/* Emit code as raw bytes. Only used for DynASM debugging. */ -static void emit_raw(BuildCtx *ctx) -{ - owrite(ctx, ctx->code, ctx->codesz); -} - -/* -- Build machine code -------------------------------------------------- */ - -static const char *sym_decorate(BuildCtx *ctx, - const char *prefix, const char *suffix) -{ - char name[256]; - char *p; -#if LJ_64 - const char *symprefix = ctx->mode == BUILD_machasm ? "_" : ""; -#elif LJ_TARGET_XBOX360 - const char *symprefix = ""; -#else - const char *symprefix = ctx->mode != BUILD_elfasm ? "_" : ""; -#endif - sprintf(name, "%s%s%s", symprefix, prefix, suffix); - p = strchr(name, '@'); - if (p) { -#if LJ_TARGET_X86ORX64 - if (!LJ_64 && (ctx->mode == BUILD_coffasm || ctx->mode == BUILD_peobj)) - name[0] = '@'; - else - *p = '\0'; -#elif (LJ_TARGET_PPC || LJ_TARGET_PPCSPE) && !LJ_TARGET_CONSOLE - /* Keep @plt. */ -#else - *p = '\0'; -#endif - } - p = (char *)malloc(strlen(name)+1); /* MSVC doesn't like strdup. */ - strcpy(p, name); - return p; -} - -#define NRELOCSYM (sizeof(extnames)/sizeof(extnames[0])-1) - -static int relocmap[NRELOCSYM]; - -/* Collect external relocations. */ -static int collect_reloc(BuildCtx *ctx, uint8_t *addr, int idx, int type) -{ - if (ctx->nreloc >= BUILD_MAX_RELOC) { - fprintf(stderr, "Error: too many relocations, increase BUILD_MAX_RELOC.\n"); - exit(1); - } - if (relocmap[idx] < 0) { - relocmap[idx] = ctx->nrelocsym; - ctx->relocsym[ctx->nrelocsym] = sym_decorate(ctx, "", extnames[idx]); - ctx->nrelocsym++; - } - ctx->reloc[ctx->nreloc].ofs = (int32_t)(addr - ctx->code); - ctx->reloc[ctx->nreloc].sym = relocmap[idx]; - ctx->reloc[ctx->nreloc].type = type; - ctx->nreloc++; -#if LJ_TARGET_XBOX360 - return (int)(ctx->code - addr) + 4; /* Encode symbol offset of .text. */ -#else - return 0; /* Encode symbol offset of 0. */ -#endif -} - -/* Naive insertion sort. Performance doesn't matter here. */ -static void sym_insert(BuildCtx *ctx, int32_t ofs, - const char *prefix, const char *suffix) -{ - ptrdiff_t i = ctx->nsym++; - while (i > 0) { - if (ctx->sym[i-1].ofs <= ofs) - break; - ctx->sym[i] = ctx->sym[i-1]; - i--; - } - ctx->sym[i].ofs = ofs; - ctx->sym[i].name = sym_decorate(ctx, prefix, suffix); -} - -/* Build the machine code. */ -static int build_code(BuildCtx *ctx) -{ - int status; - int i; - - /* Initialize DynASM structures. */ - ctx->nglob = GLOB__MAX; - ctx->glob = (void **)malloc(ctx->nglob*sizeof(void *)); - memset(ctx->glob, 0, ctx->nglob*sizeof(void *)); - ctx->nreloc = 0; - - ctx->globnames = globnames; - ctx->relocsym = (const char **)malloc(NRELOCSYM*sizeof(const char *)); - ctx->nrelocsym = 0; - for (i = 0; i < (int)NRELOCSYM; i++) relocmap[i] = -1; - - ctx->dasm_ident = DASM_IDENT; - ctx->dasm_arch = DASM_ARCH; - - dasm_init(Dst, DASM_MAXSECTION); - dasm_setupglobal(Dst, ctx->glob, ctx->nglob); - dasm_setup(Dst, build_actionlist); - - /* Call arch-specific backend to emit the code. */ - ctx->npc = build_backend(ctx); - - /* Finalize the code. */ - (void)dasm_checkstep(Dst, -1); - if ((status = dasm_link(Dst, &ctx->codesz))) return status; - ctx->code = (uint8_t *)malloc(ctx->codesz); - if ((status = dasm_encode(Dst, (void *)ctx->code))) return status; - - /* Allocate symbol table and bytecode offsets. */ - ctx->beginsym = sym_decorate(ctx, "", LABEL_PREFIX "vm_asm_begin"); - ctx->sym = (BuildSym *)malloc((ctx->npc+ctx->nglob+1)*sizeof(BuildSym)); - ctx->nsym = 0; - ctx->bc_ofs = (int32_t *)malloc(ctx->npc*sizeof(int32_t)); - - /* Collect the opcodes (PC labels). */ - for (i = 0; i < ctx->npc; i++) { - int32_t ofs = dasm_getpclabel(Dst, i); - if (ofs < 0) return 0x22000000|i; - ctx->bc_ofs[i] = ofs; - if ((LJ_HASJIT || - !(i == BC_JFORI || i == BC_JFORL || i == BC_JITERL || i == BC_JLOOP || - i == BC_IFORL || i == BC_IITERL || i == BC_ILOOP)) && - (LJ_HASFFI || i != BC_KCDATA)) - sym_insert(ctx, ofs, LABEL_PREFIX_BC, bc_names[i]); - } - - /* Collect the globals (named labels). */ - for (i = 0; i < ctx->nglob; i++) { - const char *gl = globnames[i]; - int len = (int)strlen(gl); - if (!ctx->glob[i]) { - fprintf(stderr, "Error: undefined global %s\n", gl); - exit(2); - } - /* Skip the _Z symbols. */ - if (!(len >= 2 && gl[len-2] == '_' && gl[len-1] == 'Z')) - sym_insert(ctx, (int32_t)((uint8_t *)(ctx->glob[i]) - ctx->code), - LABEL_PREFIX, globnames[i]); - } - - /* Close the address range. */ - sym_insert(ctx, (int32_t)ctx->codesz, "", ""); - ctx->nsym--; - - dasm_free(Dst); - - return 0; -} - -/* -- Generate VM enums --------------------------------------------------- */ - -const char *const bc_names[] = { -#define BCNAME(name, ma, mb, mc, mt) #name, -BCDEF(BCNAME) -#undef BCNAME - NULL -}; - -const char *const ir_names[] = { -#define IRNAME(name, m, m1, m2) #name, -IRDEF(IRNAME) -#undef IRNAME - NULL -}; - -const char *const irt_names[] = { -#define IRTNAME(name, size) #name, -IRTDEF(IRTNAME) -#undef IRTNAME - NULL -}; - -const char *const irfpm_names[] = { -#define FPMNAME(name) #name, -IRFPMDEF(FPMNAME) -#undef FPMNAME - NULL -}; - -const char *const irfield_names[] = { -#define FLNAME(name, ofs) #name, -IRFLDEF(FLNAME) -#undef FLNAME - NULL -}; - -const char *const ircall_names[] = { -#define IRCALLNAME(cond, name, nargs, kind, type, flags) #name, -IRCALLDEF(IRCALLNAME) -#undef IRCALLNAME - NULL -}; - -static const char *const trace_errors[] = { -#define TREDEF(name, msg) msg, -#include "lj_traceerr.h" - NULL -}; - -static const char *lower(char *buf, const char *s) -{ - char *p = buf; - while (*s) { - *p++ = (*s >= 'A' && *s <= 'Z') ? *s+0x20 : *s; - s++; - } - *p = '\0'; - return buf; -} - -/* Emit C source code for bytecode-related definitions. */ -static void emit_bcdef(BuildCtx *ctx) -{ - int i; - fprintf(ctx->fp, "/* This is a generated file. DO NOT EDIT! */\n\n"); - fprintf(ctx->fp, "LJ_DATADEF const uint16_t lj_bc_ofs[] = {\n"); - for (i = 0; i < ctx->npc; i++) { - if (i != 0) - fprintf(ctx->fp, ",\n"); - fprintf(ctx->fp, "%d", ctx->bc_ofs[i]); - } -} - -/* Emit VM definitions as Lua code for debug modules. */ -static void emit_vmdef(BuildCtx *ctx) -{ - char buf[80]; - int i; - fprintf(ctx->fp, "-- This is a generated file. DO NOT EDIT!\n\n"); - fprintf(ctx->fp, "module(...)\n\n"); - - fprintf(ctx->fp, "bcnames = \""); - for (i = 0; bc_names[i]; i++) fprintf(ctx->fp, "%-6s", bc_names[i]); - fprintf(ctx->fp, "\"\n\n"); - - fprintf(ctx->fp, "irnames = \""); - for (i = 0; ir_names[i]; i++) fprintf(ctx->fp, "%-6s", ir_names[i]); - fprintf(ctx->fp, "\"\n\n"); - - fprintf(ctx->fp, "irfpm = { [0]="); - for (i = 0; irfpm_names[i]; i++) - fprintf(ctx->fp, "\"%s\", ", lower(buf, irfpm_names[i])); - fprintf(ctx->fp, "}\n\n"); - - fprintf(ctx->fp, "irfield = { [0]="); - for (i = 0; irfield_names[i]; i++) { - char *p; - lower(buf, irfield_names[i]); - p = strchr(buf, '_'); - if (p) *p = '.'; - fprintf(ctx->fp, "\"%s\", ", buf); - } - fprintf(ctx->fp, "}\n\n"); - - fprintf(ctx->fp, "ircall = {\n[0]="); - for (i = 0; ircall_names[i]; i++) - fprintf(ctx->fp, "\"%s\",\n", ircall_names[i]); - fprintf(ctx->fp, "}\n\n"); - - fprintf(ctx->fp, "traceerr = {\n[0]="); - for (i = 0; trace_errors[i]; i++) - fprintf(ctx->fp, "\"%s\",\n", trace_errors[i]); - fprintf(ctx->fp, "}\n\n"); -} - -/* -- Argument parsing ---------------------------------------------------- */ - -/* Build mode names. */ -static const char *const modenames[] = { -#define BUILDNAME(name) #name, -BUILDDEF(BUILDNAME) -#undef BUILDNAME - NULL -}; - -/* Print usage information and exit. */ -static void usage(void) -{ - int i; - fprintf(stderr, LUAJIT_VERSION " VM builder.\n"); - fprintf(stderr, LUAJIT_COPYRIGHT ", " LUAJIT_URL "\n"); - fprintf(stderr, "Target architecture: " LJ_ARCH_NAME "\n\n"); - fprintf(stderr, "Usage: buildvm -m mode [-o outfile] [infiles...]\n\n"); - fprintf(stderr, "Available modes:\n"); - for (i = 0; i < BUILD__MAX; i++) - fprintf(stderr, " %s\n", modenames[i]); - exit(1); -} - -/* Parse the output mode name. */ -static BuildMode parsemode(const char *mode) -{ - int i; - for (i = 0; modenames[i]; i++) - if (!strcmp(mode, modenames[i])) - return (BuildMode)i; - usage(); - return (BuildMode)-1; -} - -/* Parse arguments. */ -static void parseargs(BuildCtx *ctx, char **argv) -{ - const char *a; - int i; - ctx->mode = (BuildMode)-1; - ctx->outname = "-"; - for (i = 1; (a = argv[i]) != NULL; i++) { - if (a[0] != '-') - break; - switch (a[1]) { - case '-': - if (a[2]) goto err; - i++; - goto ok; - case '\0': - goto ok; - case 'm': - i++; - if (a[2] || argv[i] == NULL) goto err; - ctx->mode = parsemode(argv[i]); - break; - case 'o': - i++; - if (a[2] || argv[i] == NULL) goto err; - ctx->outname = argv[i]; - break; - default: err: - usage(); - break; - } - } -ok: - ctx->args = argv+i; - if (ctx->mode == (BuildMode)-1) goto err; -} - -int main(int argc, char **argv) -{ - BuildCtx ctx_; - BuildCtx *ctx = &ctx_; - int status, binmode; - - if (sizeof(void *) != 4*LJ_32+8*LJ_64) { - fprintf(stderr,"Error: pointer size mismatch in cross-build.\n"); - fprintf(stderr,"Try: make HOST_CC=\"gcc -m32\" CROSS=...\n\n"); - return 1; - } - - UNUSED(argc); - parseargs(ctx, argv); - - if ((status = build_code(ctx))) { - fprintf(stderr,"Error: DASM error %08x\n", status); - return 1; - } - - switch (ctx->mode) { - case BUILD_peobj: - case BUILD_raw: - binmode = 1; - break; - default: - binmode = 0; - break; - } - - if (ctx->outname[0] == '-' && ctx->outname[1] == '\0') { - ctx->fp = stdout; -#if defined(_WIN32) - if (binmode) - _setmode(_fileno(stdout), _O_BINARY); /* Yuck. */ -#endif - } else if (!(ctx->fp = fopen(ctx->outname, binmode ? "wb" : "w"))) { - fprintf(stderr, "Error: cannot open output file '%s': %s\n", - ctx->outname, strerror(errno)); - exit(1); - } - - switch (ctx->mode) { - case BUILD_elfasm: - case BUILD_coffasm: - case BUILD_machasm: - emit_asm(ctx); - emit_asm_debug(ctx); - break; - case BUILD_peobj: - emit_peobj(ctx); - break; - case BUILD_raw: - emit_raw(ctx); - break; - case BUILD_bcdef: - emit_bcdef(ctx); - emit_lib(ctx); - break; - case BUILD_vmdef: - emit_vmdef(ctx); - emit_lib(ctx); - break; - case BUILD_ffdef: - case BUILD_libdef: - case BUILD_recdef: - emit_lib(ctx); - break; - case BUILD_folddef: - emit_fold(ctx); - break; - default: - break; - } - - fflush(ctx->fp); - if (ferror(ctx->fp)) { - fprintf(stderr, "Error: cannot write to output file: %s\n", - strerror(errno)); - exit(1); - } - fclose(ctx->fp); - - return 0; -} - diff --git a/deps/luajit/src/host/buildvm.h b/deps/luajit/src/host/buildvm.h deleted file mode 100644 index b262185..0000000 --- a/deps/luajit/src/host/buildvm.h +++ /dev/null @@ -1,104 +0,0 @@ -/* -** LuaJIT VM builder. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _BUILDVM_H -#define _BUILDVM_H - -#include -#include -#include -#include -#include - -#include "lj_def.h" -#include "lj_arch.h" - -/* Hardcoded limits. Increase as needed. */ -#define BUILD_MAX_RELOC 200 /* Max. number of relocations. */ -#define BUILD_MAX_FOLD 4096 /* Max. number of fold rules. */ - -/* Prefix for scanned library definitions. */ -#define LIBDEF_PREFIX "LJLIB_" - -/* Prefix for scanned fold definitions. */ -#define FOLDDEF_PREFIX "LJFOLD" - -/* Prefixes for generated labels. */ -#define LABEL_PREFIX "lj_" -#define LABEL_PREFIX_BC LABEL_PREFIX "BC_" -#define LABEL_PREFIX_FF LABEL_PREFIX "ff_" -#define LABEL_PREFIX_CF LABEL_PREFIX "cf_" -#define LABEL_PREFIX_FFH LABEL_PREFIX "ffh_" -#define LABEL_PREFIX_LIBCF LABEL_PREFIX "lib_cf_" -#define LABEL_PREFIX_LIBINIT LABEL_PREFIX "lib_init_" - -/* Forward declaration. */ -struct dasm_State; - -/* Build modes. */ -#define BUILDDEF(_) \ - _(elfasm) _(coffasm) _(machasm) _(peobj) _(raw) \ - _(bcdef) _(ffdef) _(libdef) _(recdef) _(vmdef) \ - _(folddef) - -typedef enum { -#define BUILDENUM(name) BUILD_##name, -BUILDDEF(BUILDENUM) -#undef BUILDENUM - BUILD__MAX -} BuildMode; - -/* Code relocation. */ -typedef struct BuildReloc { - int32_t ofs; - int sym; - int type; -} BuildReloc; - -typedef struct BuildSym { - const char *name; - int32_t ofs; -} BuildSym; - -/* Build context structure. */ -typedef struct BuildCtx { - /* DynASM state pointer. Should be first member. */ - struct dasm_State *D; - /* Parsed command line. */ - BuildMode mode; - FILE *fp; - const char *outname; - char **args; - /* Code and symbols generated by DynASM. */ - uint8_t *code; - size_t codesz; - int npc, nglob, nsym, nreloc, nrelocsym; - void **glob; - BuildSym *sym; - const char **relocsym; - int32_t *bc_ofs; - const char *beginsym; - /* Strings generated by DynASM. */ - const char *const *globnames; - const char *dasm_ident; - const char *dasm_arch; - /* Relocations. */ - BuildReloc reloc[BUILD_MAX_RELOC]; -} BuildCtx; - -extern void owrite(BuildCtx *ctx, const void *ptr, size_t sz); -extern void emit_asm(BuildCtx *ctx); -extern void emit_peobj(BuildCtx *ctx); -extern void emit_lib(BuildCtx *ctx); -extern void emit_fold(BuildCtx *ctx); - -extern const char *const bc_names[]; -extern const char *const ir_names[]; -extern const char *const irt_names[]; -extern const char *const irfpm_names[]; -extern const char *const irfield_names[]; -extern const char *const ircall_names[]; - -#endif diff --git a/deps/luajit/src/host/buildvm_asm.c b/deps/luajit/src/host/buildvm_asm.c deleted file mode 100644 index 2c9a2d4..0000000 --- a/deps/luajit/src/host/buildvm_asm.c +++ /dev/null @@ -1,313 +0,0 @@ -/* -** LuaJIT VM builder: Assembler source code emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "buildvm.h" -#include "lj_bc.h" - -/* ------------------------------------------------------------------------ */ - -#if LJ_TARGET_X86ORX64 -/* Emit bytes piecewise as assembler text. */ -static void emit_asm_bytes(BuildCtx *ctx, uint8_t *p, int n) -{ - int i; - for (i = 0; i < n; i++) { - if ((i & 15) == 0) - fprintf(ctx->fp, "\t.byte %d", p[i]); - else - fprintf(ctx->fp, ",%d", p[i]); - if ((i & 15) == 15) putc('\n', ctx->fp); - } - if ((n & 15) != 0) putc('\n', ctx->fp); -} - -/* Emit relocation */ -static void emit_asm_reloc(BuildCtx *ctx, int type, const char *sym) -{ - switch (ctx->mode) { - case BUILD_elfasm: - if (type) - fprintf(ctx->fp, "\t.long %s-.-4\n", sym); - else - fprintf(ctx->fp, "\t.long %s\n", sym); - break; - case BUILD_coffasm: - fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", sym); - if (type) - fprintf(ctx->fp, "\t.long %s-.-4\n", sym); - else - fprintf(ctx->fp, "\t.long %s\n", sym); - break; - default: /* BUILD_machasm for relative relocations handled below. */ - fprintf(ctx->fp, "\t.long %s\n", sym); - break; - } -} - -static const char *const jccnames[] = { - "jo", "jno", "jb", "jnb", "jz", "jnz", "jbe", "ja", - "js", "jns", "jpe", "jpo", "jl", "jge", "jle", "jg" -}; - -/* Emit relocation for the incredibly stupid OSX assembler. */ -static void emit_asm_reloc_mach(BuildCtx *ctx, uint8_t *cp, int n, - const char *sym) -{ - const char *opname = NULL; - if (--n < 0) goto err; - if (cp[n] == 0xe8) { - opname = "call"; - } else if (cp[n] == 0xe9) { - opname = "jmp"; - } else if (cp[n] >= 0x80 && cp[n] <= 0x8f && n > 0 && cp[n-1] == 0x0f) { - opname = jccnames[cp[n]-0x80]; - n--; - } else { -err: - fprintf(stderr, "Error: unsupported opcode for %s symbol relocation.\n", - sym); - exit(1); - } - emit_asm_bytes(ctx, cp, n); - fprintf(ctx->fp, "\t%s %s\n", opname, sym); -} -#else -/* Emit words piecewise as assembler text. */ -static void emit_asm_words(BuildCtx *ctx, uint8_t *p, int n) -{ - int i; - for (i = 0; i < n; i += 4) { - if ((i & 15) == 0) - fprintf(ctx->fp, "\t.long 0x%08x", *(uint32_t *)(p+i)); - else - fprintf(ctx->fp, ",0x%08x", *(uint32_t *)(p+i)); - if ((i & 15) == 12) putc('\n', ctx->fp); - } - if ((n & 15) != 0) putc('\n', ctx->fp); -} - -/* Emit relocation as part of an instruction. */ -static void emit_asm_wordreloc(BuildCtx *ctx, uint8_t *p, int n, - const char *sym) -{ - uint32_t ins; - emit_asm_words(ctx, p, n-4); - ins = *(uint32_t *)(p+n-4); -#if LJ_TARGET_ARM - if ((ins & 0xff000000u) == 0xfa000000u) { - fprintf(ctx->fp, "\tblx %s\n", sym); - } else if ((ins & 0x0e000000u) == 0x0a000000u) { - fprintf(ctx->fp, "\t%s%.2s %s\n", (ins & 0x01000000u) ? "bl" : "b", - &"eqnecsccmiplvsvchilsgeltgtle"[2*(ins >> 28)], sym); - } else { - fprintf(stderr, - "Error: unsupported opcode %08x for %s symbol relocation.\n", - ins, sym); - exit(1); - } -#elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE -#if LJ_TARGET_PS3 -#define TOCPREFIX "." -#else -#define TOCPREFIX "" -#endif - if ((ins >> 26) == 16) { - fprintf(ctx->fp, "\t%s %d, %d, " TOCPREFIX "%s\n", - (ins & 1) ? "bcl" : "bc", (ins >> 21) & 31, (ins >> 16) & 31, sym); - } else if ((ins >> 26) == 18) { - fprintf(ctx->fp, "\t%s " TOCPREFIX "%s\n", (ins & 1) ? "bl" : "b", sym); - } else { - fprintf(stderr, - "Error: unsupported opcode %08x for %s symbol relocation.\n", - ins, sym); - exit(1); - } -#elif LJ_TARGET_MIPS - fprintf(stderr, - "Error: unsupported opcode %08x for %s symbol relocation.\n", - ins, sym); - exit(1); -#else -#error "missing relocation support for this architecture" -#endif -} -#endif - -#if LJ_TARGET_ARM -#define ELFASM_PX "%%" -#else -#define ELFASM_PX "@" -#endif - -/* Emit an assembler label. */ -static void emit_asm_label(BuildCtx *ctx, const char *name, int size, int isfunc) -{ - switch (ctx->mode) { - case BUILD_elfasm: -#if LJ_TARGET_PS3 - if (!strncmp(name, "lj_vm_", 6) && - strcmp(name, ctx->beginsym) && - !strstr(name, "hook")) { - fprintf(ctx->fp, - "\n\t.globl %s\n" - "\t.section \".opd\",\"aw\"\n" - "%s:\n" - "\t.long .%s,.TOC.@tocbase32\n" - "\t.size %s,8\n" - "\t.previous\n" - "\t.globl .%s\n" - "\t.hidden .%s\n" - "\t.type .%s, " ELFASM_PX "function\n" - "\t.size .%s, %d\n" - ".%s:\n", - name, name, name, name, name, name, name, name, size, name); - break; - } -#endif - fprintf(ctx->fp, - "\n\t.globl %s\n" - "\t.hidden %s\n" - "\t.type %s, " ELFASM_PX "%s\n" - "\t.size %s, %d\n" - "%s:\n", - name, name, name, isfunc ? "function" : "object", name, size, name); - break; - case BUILD_coffasm: - fprintf(ctx->fp, "\n\t.globl %s\n", name); - if (isfunc) - fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", name); - fprintf(ctx->fp, "%s:\n", name); - break; - case BUILD_machasm: - fprintf(ctx->fp, - "\n\t.private_extern %s\n" - "%s:\n", name, name); - break; - default: - break; - } -} - -/* Emit alignment. */ -static void emit_asm_align(BuildCtx *ctx, int bits) -{ - switch (ctx->mode) { - case BUILD_elfasm: - case BUILD_coffasm: - fprintf(ctx->fp, "\t.p2align %d\n", bits); - break; - case BUILD_machasm: - fprintf(ctx->fp, "\t.align %d\n", bits); - break; - default: - break; - } -} - -/* ------------------------------------------------------------------------ */ - -/* Emit assembler source code. */ -void emit_asm(BuildCtx *ctx) -{ - int i, rel; - - fprintf(ctx->fp, "\t.file \"buildvm_%s.dasc\"\n", ctx->dasm_arch); - fprintf(ctx->fp, "\t.text\n"); - emit_asm_align(ctx, 4); - -#if LJ_TARGET_PS3 - emit_asm_label(ctx, ctx->beginsym, ctx->codesz, 0); -#else - emit_asm_label(ctx, ctx->beginsym, 0, 0); -#endif - if (ctx->mode != BUILD_machasm) - fprintf(ctx->fp, ".Lbegin:\n"); - -#if LJ_TARGET_ARM && defined(__GNUC__) && !LJ_NO_UNWIND - /* This should really be moved into buildvm_arm.dasc. */ - fprintf(ctx->fp, - ".fnstart\n" - ".save {r4, r5, r6, r7, r8, r9, r10, r11, lr}\n" - ".pad #28\n"); -#endif -#if LJ_TARGET_MIPS - fprintf(ctx->fp, ".set nomips16\n.abicalls\n.set noreorder\n.set nomacro\n"); -#endif - - for (i = rel = 0; i < ctx->nsym; i++) { - int32_t ofs = ctx->sym[i].ofs; - int32_t next = ctx->sym[i+1].ofs; -#if LJ_TARGET_ARM && defined(__GNUC__) && !LJ_NO_UNWIND && LJ_HASFFI - if (!strcmp(ctx->sym[i].name, "lj_vm_ffi_call")) - fprintf(ctx->fp, - ".globl lj_err_unwind_arm\n" - ".personality lj_err_unwind_arm\n" - ".fnend\n" - ".fnstart\n" - ".save {r4, r5, r11, lr}\n" - ".setfp r11, sp\n"); -#endif - emit_asm_label(ctx, ctx->sym[i].name, next - ofs, 1); - while (rel < ctx->nreloc && ctx->reloc[rel].ofs <= next) { - BuildReloc *r = &ctx->reloc[rel]; - int n = r->ofs - ofs; -#if LJ_TARGET_X86ORX64 - if (ctx->mode == BUILD_machasm && r->type != 0) { - emit_asm_reloc_mach(ctx, ctx->code+ofs, n, ctx->relocsym[r->sym]); - } else { - emit_asm_bytes(ctx, ctx->code+ofs, n); - emit_asm_reloc(ctx, r->type, ctx->relocsym[r->sym]); - } - ofs += n+4; -#else - emit_asm_wordreloc(ctx, ctx->code+ofs, n, ctx->relocsym[r->sym]); - ofs += n; -#endif - rel++; - } -#if LJ_TARGET_X86ORX64 - emit_asm_bytes(ctx, ctx->code+ofs, next-ofs); -#else - emit_asm_words(ctx, ctx->code+ofs, next-ofs); -#endif - } - -#if LJ_TARGET_ARM && defined(__GNUC__) && !LJ_NO_UNWIND - fprintf(ctx->fp, -#if !LJ_HASFFI - ".globl lj_err_unwind_arm\n" - ".personality lj_err_unwind_arm\n" -#endif - ".fnend\n"); -#endif - - fprintf(ctx->fp, "\n"); - switch (ctx->mode) { - case BUILD_elfasm: -#if !(LJ_TARGET_PS3 || LJ_TARGET_PSVITA) - fprintf(ctx->fp, "\t.section .note.GNU-stack,\"\"," ELFASM_PX "progbits\n"); -#endif -#if LJ_TARGET_PPCSPE - /* Soft-float ABI + SPE. */ - fprintf(ctx->fp, "\t.gnu_attribute 4, 2\n\t.gnu_attribute 8, 3\n"); -#elif LJ_TARGET_PPC && !LJ_TARGET_PS3 - /* Hard-float ABI. */ - fprintf(ctx->fp, "\t.gnu_attribute 4, 1\n"); -#endif - /* fallthrough */ - case BUILD_coffasm: - fprintf(ctx->fp, "\t.ident \"%s\"\n", ctx->dasm_ident); - break; - case BUILD_machasm: - fprintf(ctx->fp, - "\t.cstring\n" - "\t.ascii \"%s\\0\"\n", ctx->dasm_ident); - break; - default: - break; - } - fprintf(ctx->fp, "\n"); -} - diff --git a/deps/luajit/src/host/buildvm_fold.c b/deps/luajit/src/host/buildvm_fold.c deleted file mode 100644 index daed7ec..0000000 --- a/deps/luajit/src/host/buildvm_fold.c +++ /dev/null @@ -1,229 +0,0 @@ -/* -** LuaJIT VM builder: IR folding hash table generator. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "buildvm.h" -#include "lj_obj.h" -#include "lj_ir.h" - -/* Context for the folding hash table generator. */ -static int lineno; -static int funcidx; -static uint32_t foldkeys[BUILD_MAX_FOLD]; -static uint32_t nkeys; - -/* Try to fill the hash table with keys using the hash parameters. */ -static int tryhash(uint32_t *htab, uint32_t sz, uint32_t r, int dorol) -{ - uint32_t i; - if (dorol && ((r & 31) == 0 || (r>>5) == 0)) - return 0; /* Avoid zero rotates. */ - memset(htab, 0xff, (sz+1)*sizeof(uint32_t)); - for (i = 0; i < nkeys; i++) { - uint32_t key = foldkeys[i]; - uint32_t k = key & 0xffffff; - uint32_t h = (dorol ? lj_rol(lj_rol(k, r>>5) - k, r&31) : - (((k << (r>>5)) - k) << (r&31))) % sz; - if (htab[h] != 0xffffffff) { /* Collision on primary slot. */ - if (htab[h+1] != 0xffffffff) { /* Collision on secondary slot. */ - /* Try to move the colliding key, if possible. */ - if (h < sz-1 && htab[h+2] == 0xffffffff) { - uint32_t k2 = htab[h+1] & 0xffffff; - uint32_t h2 = (dorol ? lj_rol(lj_rol(k2, r>>5) - k2, r&31) : - (((k2 << (r>>5)) - k2) << (r&31))) % sz; - if (h2 != h+1) return 0; /* Cannot resolve collision. */ - htab[h+2] = htab[h+1]; /* Move colliding key to secondary slot. */ - } else { - return 0; /* Collision. */ - } - } - htab[h+1] = key; - } else { - htab[h] = key; - } - } - return 1; /* Success, all keys could be stored. */ -} - -/* Print the generated hash table. */ -static void printhash(BuildCtx *ctx, uint32_t *htab, uint32_t sz) -{ - uint32_t i; - fprintf(ctx->fp, "static const uint32_t fold_hash[%d] = {\n0x%08x", - sz+1, htab[0]); - for (i = 1; i < sz+1; i++) - fprintf(ctx->fp, ",\n0x%08x", htab[i]); - fprintf(ctx->fp, "\n};\n\n"); -} - -/* Exhaustive search for the shortest semi-perfect hash table. */ -static void makehash(BuildCtx *ctx) -{ - uint32_t htab[BUILD_MAX_FOLD*2+1]; - uint32_t sz, r; - /* Search for the smallest hash table with an odd size. */ - for (sz = (nkeys|1); sz < BUILD_MAX_FOLD*2; sz += 2) { - /* First try all shift hash combinations. */ - for (r = 0; r < 32*32; r++) { - if (tryhash(htab, sz, r, 0)) { - printhash(ctx, htab, sz); - fprintf(ctx->fp, - "#define fold_hashkey(k)\t(((((k)<<%u)-(k))<<%u)%%%u)\n\n", - r>>5, r&31, sz); - return; - } - } - /* Then try all rotate hash combinations. */ - for (r = 0; r < 32*32; r++) { - if (tryhash(htab, sz, r, 1)) { - printhash(ctx, htab, sz); - fprintf(ctx->fp, - "#define fold_hashkey(k)\t(lj_rol(lj_rol((k),%u)-(k),%u)%%%u)\n\n", - r>>5, r&31, sz); - return; - } - } - } - fprintf(stderr, "Error: search for perfect hash failed\n"); - exit(1); -} - -/* Parse one token of a fold rule. */ -static uint32_t nexttoken(char **pp, int allowlit, int allowany) -{ - char *p = *pp; - if (p) { - uint32_t i; - char *q = strchr(p, ' '); - if (q) *q++ = '\0'; - *pp = q; - if (allowlit && !strncmp(p, "IRFPM_", 6)) { - for (i = 0; irfpm_names[i]; i++) - if (!strcmp(irfpm_names[i], p+6)) - return i; - } else if (allowlit && !strncmp(p, "IRFL_", 5)) { - for (i = 0; irfield_names[i]; i++) - if (!strcmp(irfield_names[i], p+5)) - return i; - } else if (allowlit && !strncmp(p, "IRCALL_", 7)) { - for (i = 0; ircall_names[i]; i++) - if (!strcmp(ircall_names[i], p+7)) - return i; - } else if (allowlit && !strncmp(p, "IRCONV_", 7)) { - for (i = 0; irt_names[i]; i++) { - const char *r = strchr(p+7, '_'); - if (r && !strncmp(irt_names[i], p+7, r-(p+7))) { - uint32_t j; - for (j = 0; irt_names[j]; j++) - if (!strcmp(irt_names[j], r+1)) - return (i << 5) + j; - } - } - } else if (allowlit && *p >= '0' && *p <= '9') { - for (i = 0; *p >= '0' && *p <= '9'; p++) - i = i*10 + (*p - '0'); - if (*p == '\0') - return i; - } else if (allowany && !strcmp("any", p)) { - return allowany; - } else { - for (i = 0; ir_names[i]; i++) - if (!strcmp(ir_names[i], p)) - return i; - } - fprintf(stderr, "Error: bad fold definition token \"%s\" at line %d\n", p, lineno); - exit(1); - } - return 0; -} - -/* Parse a fold rule. */ -static void foldrule(char *p) -{ - uint32_t op = nexttoken(&p, 0, 0); - uint32_t left = nexttoken(&p, 0, 0x7f); - uint32_t right = nexttoken(&p, 1, 0x3ff); - uint32_t key = (funcidx << 24) | (op << 17) | (left << 10) | right; - uint32_t i; - if (nkeys >= BUILD_MAX_FOLD) { - fprintf(stderr, "Error: too many fold rules, increase BUILD_MAX_FOLD.\n"); - exit(1); - } - /* Simple insertion sort to detect duplicates. */ - for (i = nkeys; i > 0; i--) { - if ((foldkeys[i-1]&0xffffff) < (key & 0xffffff)) - break; - if ((foldkeys[i-1]&0xffffff) == (key & 0xffffff)) { - fprintf(stderr, "Error: duplicate fold definition at line %d\n", lineno); - exit(1); - } - foldkeys[i] = foldkeys[i-1]; - } - foldkeys[i] = key; - nkeys++; -} - -/* Emit C source code for IR folding hash table. */ -void emit_fold(BuildCtx *ctx) -{ - char buf[256]; /* We don't care about analyzing lines longer than that. */ - const char *fname = ctx->args[0]; - FILE *fp; - - if (fname == NULL) { - fprintf(stderr, "Error: missing input filename\n"); - exit(1); - } - - if (fname[0] == '-' && fname[1] == '\0') { - fp = stdin; - } else { - fp = fopen(fname, "r"); - if (!fp) { - fprintf(stderr, "Error: cannot open input file '%s': %s\n", - fname, strerror(errno)); - exit(1); - } - } - - fprintf(ctx->fp, "/* This is a generated file. DO NOT EDIT! */\n\n"); - fprintf(ctx->fp, "static const FoldFunc fold_func[] = {\n"); - - lineno = 0; - funcidx = 0; - nkeys = 0; - while (fgets(buf, sizeof(buf), fp) != NULL) { - lineno++; - /* The prefix must be at the start of a line, otherwise it's ignored. */ - if (!strncmp(buf, FOLDDEF_PREFIX, sizeof(FOLDDEF_PREFIX)-1)) { - char *p = buf+sizeof(FOLDDEF_PREFIX)-1; - char *q = strchr(p, ')'); - if (p[0] == '(' && q) { - p++; - *q = '\0'; - foldrule(p); - } else if ((p[0] == 'F' || p[0] == 'X') && p[1] == '(' && q) { - p += 2; - *q = '\0'; - if (funcidx) - fprintf(ctx->fp, ",\n"); - if (p[-2] == 'X') - fprintf(ctx->fp, " %s", p); - else - fprintf(ctx->fp, " fold_%s", p); - funcidx++; - } else { - buf[strlen(buf)-1] = '\0'; - fprintf(stderr, "Error: unknown fold definition tag %s%s at line %d\n", - FOLDDEF_PREFIX, p, lineno); - exit(1); - } - } - } - fclose(fp); - fprintf(ctx->fp, "\n};\n\n"); - - makehash(ctx); -} - diff --git a/deps/luajit/src/host/buildvm_lib.c b/deps/luajit/src/host/buildvm_lib.c deleted file mode 100644 index c37301d..0000000 --- a/deps/luajit/src/host/buildvm_lib.c +++ /dev/null @@ -1,398 +0,0 @@ -/* -** LuaJIT VM builder: library definition compiler. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "buildvm.h" -#include "lj_obj.h" -#include "lj_lib.h" - -/* Context for library definitions. */ -static uint8_t obuf[8192]; -static uint8_t *optr; -static char modname[80]; -static size_t modnamelen; -static char funcname[80]; -static int modstate, regfunc; -static int ffid, recffid, ffasmfunc; - -enum { - REGFUNC_OK, - REGFUNC_NOREG, - REGFUNC_NOREGUV -}; - -static void libdef_name(const char *p, int kind) -{ - size_t n = strlen(p); - if (kind != LIBINIT_STRING) { - if (n > modnamelen && p[modnamelen] == '_' && - !strncmp(p, modname, modnamelen)) { - p += modnamelen+1; - n -= modnamelen+1; - } - } - if (n > LIBINIT_MAXSTR) { - fprintf(stderr, "Error: string too long: '%s'\n", p); - exit(1); - } - if (optr+1+n+2 > obuf+sizeof(obuf)) { /* +2 for caller. */ - fprintf(stderr, "Error: output buffer overflow\n"); - exit(1); - } - *optr++ = (uint8_t)(n | kind); - memcpy(optr, p, n); - optr += n; -} - -static void libdef_endmodule(BuildCtx *ctx) -{ - if (modstate != 0) { - char line[80]; - const uint8_t *p; - int n; - if (modstate == 1) - fprintf(ctx->fp, " (lua_CFunction)0"); - fprintf(ctx->fp, "\n};\n"); - fprintf(ctx->fp, "static const uint8_t %s%s[] = {\n", - LABEL_PREFIX_LIBINIT, modname); - line[0] = '\0'; - for (n = 0, p = obuf; p < optr; p++) { - n += sprintf(line+n, "%d,", *p); - if (n >= 75) { - fprintf(ctx->fp, "%s\n", line); - n = 0; - line[0] = '\0'; - } - } - fprintf(ctx->fp, "%s%d\n};\n#endif\n\n", line, LIBINIT_END); - } -} - -static void libdef_module(BuildCtx *ctx, char *p, int arg) -{ - UNUSED(arg); - if (ctx->mode == BUILD_libdef) { - libdef_endmodule(ctx); - optr = obuf; - *optr++ = (uint8_t)ffid; - *optr++ = (uint8_t)ffasmfunc; - *optr++ = 0; /* Hash table size. */ - modstate = 1; - fprintf(ctx->fp, "#ifdef %sMODULE_%s\n", LIBDEF_PREFIX, p); - fprintf(ctx->fp, "#undef %sMODULE_%s\n", LIBDEF_PREFIX, p); - fprintf(ctx->fp, "static const lua_CFunction %s%s[] = {\n", - LABEL_PREFIX_LIBCF, p); - } - modnamelen = strlen(p); - if (modnamelen > sizeof(modname)-1) { - fprintf(stderr, "Error: module name too long: '%s'\n", p); - exit(1); - } - strcpy(modname, p); -} - -static int find_ffofs(BuildCtx *ctx, const char *name) -{ - int i; - for (i = 0; i < ctx->nglob; i++) { - const char *gl = ctx->globnames[i]; - if (gl[0] == 'f' && gl[1] == 'f' && gl[2] == '_' && !strcmp(gl+3, name)) { - return (int)((uint8_t *)ctx->glob[i] - ctx->code); - } - } - fprintf(stderr, "Error: undefined fast function %s%s\n", - LABEL_PREFIX_FF, name); - exit(1); -} - -static void libdef_func(BuildCtx *ctx, char *p, int arg) -{ - if (arg != LIBINIT_CF) - ffasmfunc++; - if (ctx->mode == BUILD_libdef) { - if (modstate == 0) { - fprintf(stderr, "Error: no module for function definition %s\n", p); - exit(1); - } - if (regfunc == REGFUNC_NOREG) { - if (optr+1 > obuf+sizeof(obuf)) { - fprintf(stderr, "Error: output buffer overflow\n"); - exit(1); - } - *optr++ = LIBINIT_FFID; - } else { - if (arg != LIBINIT_ASM_) { - if (modstate != 1) fprintf(ctx->fp, ",\n"); - modstate = 2; - fprintf(ctx->fp, " %s%s", arg ? LABEL_PREFIX_FFH : LABEL_PREFIX_CF, p); - } - if (regfunc != REGFUNC_NOREGUV) obuf[2]++; /* Bump hash table size. */ - libdef_name(regfunc == REGFUNC_NOREGUV ? "" : p, arg); - } - } else if (ctx->mode == BUILD_ffdef) { - fprintf(ctx->fp, "FFDEF(%s)\n", p); - } else if (ctx->mode == BUILD_recdef) { - if (strlen(p) > sizeof(funcname)-1) { - fprintf(stderr, "Error: function name too long: '%s'\n", p); - exit(1); - } - strcpy(funcname, p); - } else if (ctx->mode == BUILD_vmdef) { - int i; - for (i = 1; p[i] && modname[i-1]; i++) - if (p[i] == '_') p[i] = '.'; - fprintf(ctx->fp, "\"%s\",\n", p); - } else if (ctx->mode == BUILD_bcdef) { - if (arg != LIBINIT_CF) - fprintf(ctx->fp, ",\n%d", find_ffofs(ctx, p)); - } - ffid++; - regfunc = REGFUNC_OK; -} - -static uint32_t find_rec(char *name) -{ - char *p = (char *)obuf; - uint32_t n; - for (n = 2; *p; n++) { - if (strcmp(p, name) == 0) - return n; - p += strlen(p)+1; - } - if (p+strlen(name)+1 >= (char *)obuf+sizeof(obuf)) { - fprintf(stderr, "Error: output buffer overflow\n"); - exit(1); - } - strcpy(p, name); - return n; -} - -static void libdef_rec(BuildCtx *ctx, char *p, int arg) -{ - UNUSED(arg); - if (ctx->mode == BUILD_recdef) { - char *q; - uint32_t n; - for (; recffid+1 < ffid; recffid++) - fprintf(ctx->fp, ",\n0"); - recffid = ffid; - if (*p == '.') p = funcname; - q = strchr(p, ' '); - if (q) *q++ = '\0'; - n = find_rec(p); - if (q) - fprintf(ctx->fp, ",\n0x%02x00+(%s)", n, q); - else - fprintf(ctx->fp, ",\n0x%02x00", n); - } -} - -static void memcpy_endian(void *dst, void *src, size_t n) -{ - union { uint8_t b; uint32_t u; } host_endian; - host_endian.u = 1; - if (host_endian.b == LJ_ENDIAN_SELECT(1, 0)) { - memcpy(dst, src, n); - } else { - size_t i; - for (i = 0; i < n; i++) - ((uint8_t *)dst)[i] = ((uint8_t *)src)[n-i-1]; - } -} - -static void libdef_push(BuildCtx *ctx, char *p, int arg) -{ - UNUSED(arg); - if (ctx->mode == BUILD_libdef) { - int len = (int)strlen(p); - if (*p == '"') { - if (len > 1 && p[len-1] == '"') { - p[len-1] = '\0'; - libdef_name(p+1, LIBINIT_STRING); - return; - } - } else if (*p >= '0' && *p <= '9') { - char *ep; - double d = strtod(p, &ep); - if (*ep == '\0') { - if (optr+1+sizeof(double) > obuf+sizeof(obuf)) { - fprintf(stderr, "Error: output buffer overflow\n"); - exit(1); - } - *optr++ = LIBINIT_NUMBER; - memcpy_endian(optr, &d, sizeof(double)); - optr += sizeof(double); - return; - } - } else if (!strcmp(p, "lastcl")) { - if (optr+1 > obuf+sizeof(obuf)) { - fprintf(stderr, "Error: output buffer overflow\n"); - exit(1); - } - *optr++ = LIBINIT_LASTCL; - return; - } else if (len > 4 && !strncmp(p, "top-", 4)) { - if (optr+2 > obuf+sizeof(obuf)) { - fprintf(stderr, "Error: output buffer overflow\n"); - exit(1); - } - *optr++ = LIBINIT_COPY; - *optr++ = (uint8_t)atoi(p+4); - return; - } - fprintf(stderr, "Error: bad value for %sPUSH(%s)\n", LIBDEF_PREFIX, p); - exit(1); - } -} - -static void libdef_set(BuildCtx *ctx, char *p, int arg) -{ - UNUSED(arg); - if (ctx->mode == BUILD_libdef) { - if (p[0] == '!' && p[1] == '\0') p[0] = '\0'; /* Set env. */ - libdef_name(p, LIBINIT_STRING); - *optr++ = LIBINIT_SET; - obuf[2]++; /* Bump hash table size. */ - } -} - -static void libdef_regfunc(BuildCtx *ctx, char *p, int arg) -{ - UNUSED(ctx); UNUSED(p); - regfunc = arg; -} - -typedef void (*LibDefFunc)(BuildCtx *ctx, char *p, int arg); - -typedef struct LibDefHandler { - const char *suffix; - const char *stop; - const LibDefFunc func; - const int arg; -} LibDefHandler; - -static const LibDefHandler libdef_handlers[] = { - { "MODULE_", " \t\r\n", libdef_module, 0 }, - { "CF(", ")", libdef_func, LIBINIT_CF }, - { "ASM(", ")", libdef_func, LIBINIT_ASM }, - { "ASM_(", ")", libdef_func, LIBINIT_ASM_ }, - { "REC(", ")", libdef_rec, 0 }, - { "PUSH(", ")", libdef_push, 0 }, - { "SET(", ")", libdef_set, 0 }, - { "NOREGUV", NULL, libdef_regfunc, REGFUNC_NOREGUV }, - { "NOREG", NULL, libdef_regfunc, REGFUNC_NOREG }, - { NULL, NULL, (LibDefFunc)0, 0 } -}; - -/* Emit C source code for library function definitions. */ -void emit_lib(BuildCtx *ctx) -{ - const char *fname; - - if (ctx->mode == BUILD_ffdef || ctx->mode == BUILD_libdef || - ctx->mode == BUILD_recdef) - fprintf(ctx->fp, "/* This is a generated file. DO NOT EDIT! */\n\n"); - else if (ctx->mode == BUILD_vmdef) - fprintf(ctx->fp, "ffnames = {\n[0]=\"Lua\",\n\"C\",\n"); - if (ctx->mode == BUILD_recdef) - fprintf(ctx->fp, "static const uint16_t recff_idmap[] = {\n0,\n0x0100"); - recffid = ffid = FF_C+1; - ffasmfunc = 0; - - while ((fname = *ctx->args++)) { - char buf[256]; /* We don't care about analyzing lines longer than that. */ - FILE *fp; - if (fname[0] == '-' && fname[1] == '\0') { - fp = stdin; - } else { - fp = fopen(fname, "r"); - if (!fp) { - fprintf(stderr, "Error: cannot open input file '%s': %s\n", - fname, strerror(errno)); - exit(1); - } - } - modstate = 0; - regfunc = REGFUNC_OK; - while (fgets(buf, sizeof(buf), fp) != NULL) { - char *p; - /* Simplistic pre-processor. Only handles top-level #if/#endif. */ - if (buf[0] == '#' && buf[1] == 'i' && buf[2] == 'f') { - int ok = 1; - if (!strcmp(buf, "#if LJ_52\n")) - ok = LJ_52; - else if (!strcmp(buf, "#if LJ_HASJIT\n")) - ok = LJ_HASJIT; - else if (!strcmp(buf, "#if LJ_HASFFI\n")) - ok = LJ_HASFFI; - if (!ok) { - int lvl = 1; - while (fgets(buf, sizeof(buf), fp) != NULL) { - if (buf[0] == '#' && buf[1] == 'e' && buf[2] == 'n') { - if (--lvl == 0) break; - } else if (buf[0] == '#' && buf[1] == 'i' && buf[2] == 'f') { - lvl++; - } - } - continue; - } - } - for (p = buf; (p = strstr(p, LIBDEF_PREFIX)) != NULL; ) { - const LibDefHandler *ldh; - p += sizeof(LIBDEF_PREFIX)-1; - for (ldh = libdef_handlers; ldh->suffix != NULL; ldh++) { - size_t n, len = strlen(ldh->suffix); - if (!strncmp(p, ldh->suffix, len)) { - p += len; - n = ldh->stop ? strcspn(p, ldh->stop) : 0; - if (!p[n]) break; - p[n] = '\0'; - ldh->func(ctx, p, ldh->arg); - p += n+1; - break; - } - } - if (ldh->suffix == NULL) { - buf[strlen(buf)-1] = '\0'; - fprintf(stderr, "Error: unknown library definition tag %s%s\n", - LIBDEF_PREFIX, p); - exit(1); - } - } - } - fclose(fp); - if (ctx->mode == BUILD_libdef) { - libdef_endmodule(ctx); - } - } - - if (ctx->mode == BUILD_ffdef) { - fprintf(ctx->fp, "\n#undef FFDEF\n\n"); - fprintf(ctx->fp, - "#ifndef FF_NUM_ASMFUNC\n#define FF_NUM_ASMFUNC %d\n#endif\n\n", - ffasmfunc); - } else if (ctx->mode == BUILD_vmdef) { - fprintf(ctx->fp, "}\n\n"); - } else if (ctx->mode == BUILD_bcdef) { - int i; - fprintf(ctx->fp, "\n};\n\n"); - fprintf(ctx->fp, "LJ_DATADEF const uint16_t lj_bc_mode[] = {\n"); - fprintf(ctx->fp, "BCDEF(BCMODE)\n"); - for (i = ffasmfunc-1; i > 0; i--) - fprintf(ctx->fp, "BCMODE_FF,\n"); - fprintf(ctx->fp, "BCMODE_FF\n};\n\n"); - } else if (ctx->mode == BUILD_recdef) { - char *p = (char *)obuf; - fprintf(ctx->fp, "\n};\n\n"); - fprintf(ctx->fp, "static const RecordFunc recff_func[] = {\n" - "recff_nyi,\n" - "recff_c"); - while (*p) { - fprintf(ctx->fp, ",\nrecff_%s", p); - p += strlen(p)+1; - } - fprintf(ctx->fp, "\n};\n\n"); - } -} - diff --git a/deps/luajit/src/host/buildvm_peobj.c b/deps/luajit/src/host/buildvm_peobj.c deleted file mode 100644 index 4279f50..0000000 --- a/deps/luajit/src/host/buildvm_peobj.c +++ /dev/null @@ -1,368 +0,0 @@ -/* -** LuaJIT VM builder: PE object emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Only used for building on Windows, since we cannot assume the presence -** of a suitable assembler. The host and target byte order must match. -*/ - -#include "buildvm.h" -#include "lj_bc.h" - -#if LJ_TARGET_X86ORX64 || LJ_TARGET_PPC - -/* Context for PE object emitter. */ -static char *strtab; -static size_t strtabofs; - -/* -- PE object definitions ----------------------------------------------- */ - -/* PE header. */ -typedef struct PEheader { - uint16_t arch; - uint16_t nsects; - uint32_t time; - uint32_t symtabofs; - uint32_t nsyms; - uint16_t opthdrsz; - uint16_t flags; -} PEheader; - -/* PE section. */ -typedef struct PEsection { - char name[8]; - uint32_t vsize; - uint32_t vaddr; - uint32_t size; - uint32_t ofs; - uint32_t relocofs; - uint32_t lineofs; - uint16_t nreloc; - uint16_t nline; - uint32_t flags; -} PEsection; - -/* PE relocation. */ -typedef struct PEreloc { - uint32_t vaddr; - uint32_t symidx; - uint16_t type; -} PEreloc; - -/* Cannot use sizeof, because it pads up to the max. alignment. */ -#define PEOBJ_RELOC_SIZE (4+4+2) - -/* PE symbol table entry. */ -typedef struct PEsym { - union { - char name[8]; - uint32_t nameref[2]; - } n; - uint32_t value; - int16_t sect; - uint16_t type; - uint8_t scl; - uint8_t naux; -} PEsym; - -/* PE symbol table auxiliary entry for a section. */ -typedef struct PEsymaux { - uint32_t size; - uint16_t nreloc; - uint16_t nline; - uint32_t cksum; - uint16_t assoc; - uint8_t comdatsel; - uint8_t unused[3]; -} PEsymaux; - -/* Cannot use sizeof, because it pads up to the max. alignment. */ -#define PEOBJ_SYM_SIZE (8+4+2+2+1+1) - -/* PE object CPU specific defines. */ -#if LJ_TARGET_X86 -#define PEOBJ_ARCH_TARGET 0x014c -#define PEOBJ_RELOC_REL32 0x14 /* MS: REL32, GNU: DISP32. */ -#define PEOBJ_RELOC_DIR32 0x06 -#define PEOBJ_RELOC_OFS 0 -#define PEOBJ_TEXT_FLAGS 0x60500020 /* 60=r+x, 50=align16, 20=code. */ -#elif LJ_TARGET_X64 -#define PEOBJ_ARCH_TARGET 0x8664 -#define PEOBJ_RELOC_REL32 0x04 /* MS: REL32, GNU: DISP32. */ -#define PEOBJ_RELOC_DIR32 0x02 -#define PEOBJ_RELOC_ADDR32NB 0x03 -#define PEOBJ_RELOC_OFS 0 -#define PEOBJ_TEXT_FLAGS 0x60500020 /* 60=r+x, 50=align16, 20=code. */ -#elif LJ_TARGET_PPC -#define PEOBJ_ARCH_TARGET 0x01f2 -#define PEOBJ_RELOC_REL32 0x06 -#define PEOBJ_RELOC_DIR32 0x02 -#define PEOBJ_RELOC_OFS (-4) -#define PEOBJ_TEXT_FLAGS 0x60400020 /* 60=r+x, 40=align8, 20=code. */ -#endif - -/* Section numbers (0-based). */ -enum { - PEOBJ_SECT_ABS = -2, - PEOBJ_SECT_UNDEF = -1, - PEOBJ_SECT_TEXT, -#if LJ_TARGET_X64 - PEOBJ_SECT_PDATA, - PEOBJ_SECT_XDATA, -#endif - PEOBJ_SECT_RDATA_Z, - PEOBJ_NSECTIONS -}; - -/* Symbol types. */ -#define PEOBJ_TYPE_NULL 0 -#define PEOBJ_TYPE_FUNC 0x20 - -/* Symbol storage class. */ -#define PEOBJ_SCL_EXTERN 2 -#define PEOBJ_SCL_STATIC 3 - -/* -- PE object emitter --------------------------------------------------- */ - -/* Emit PE object symbol. */ -static void emit_peobj_sym(BuildCtx *ctx, const char *name, uint32_t value, - int sect, int type, int scl) -{ - PEsym sym; - size_t len = strlen(name); - if (!strtab) { /* Pass 1: only calculate string table length. */ - if (len > 8) strtabofs += len+1; - return; - } - if (len <= 8) { - memcpy(sym.n.name, name, len); - memset(sym.n.name+len, 0, 8-len); - } else { - sym.n.nameref[0] = 0; - sym.n.nameref[1] = (uint32_t)strtabofs; - memcpy(strtab + strtabofs, name, len); - strtab[strtabofs+len] = 0; - strtabofs += len+1; - } - sym.value = value; - sym.sect = (int16_t)(sect+1); /* 1-based section number. */ - sym.type = (uint16_t)type; - sym.scl = (uint8_t)scl; - sym.naux = 0; - owrite(ctx, &sym, PEOBJ_SYM_SIZE); -} - -/* Emit PE object section symbol. */ -static void emit_peobj_sym_sect(BuildCtx *ctx, PEsection *pesect, int sect) -{ - PEsym sym; - PEsymaux aux; - if (!strtab) return; /* Pass 1: no output. */ - memcpy(sym.n.name, pesect[sect].name, 8); - sym.value = 0; - sym.sect = (int16_t)(sect+1); /* 1-based section number. */ - sym.type = PEOBJ_TYPE_NULL; - sym.scl = PEOBJ_SCL_STATIC; - sym.naux = 1; - owrite(ctx, &sym, PEOBJ_SYM_SIZE); - memset(&aux, 0, sizeof(PEsymaux)); - aux.size = pesect[sect].size; - aux.nreloc = pesect[sect].nreloc; - owrite(ctx, &aux, PEOBJ_SYM_SIZE); -} - -/* Emit Windows PE object file. */ -void emit_peobj(BuildCtx *ctx) -{ - PEheader pehdr; - PEsection pesect[PEOBJ_NSECTIONS]; - uint32_t sofs; - int i, nrsym; - union { uint8_t b; uint32_t u; } host_endian; - - sofs = sizeof(PEheader) + PEOBJ_NSECTIONS*sizeof(PEsection); - - /* Fill in PE sections. */ - memset(&pesect, 0, PEOBJ_NSECTIONS*sizeof(PEsection)); - memcpy(pesect[PEOBJ_SECT_TEXT].name, ".text", sizeof(".text")-1); - pesect[PEOBJ_SECT_TEXT].ofs = sofs; - sofs += (pesect[PEOBJ_SECT_TEXT].size = (uint32_t)ctx->codesz); - pesect[PEOBJ_SECT_TEXT].relocofs = sofs; - sofs += (pesect[PEOBJ_SECT_TEXT].nreloc = (uint16_t)ctx->nreloc) * PEOBJ_RELOC_SIZE; - /* Flags: 60 = read+execute, 50 = align16, 20 = code. */ - pesect[PEOBJ_SECT_TEXT].flags = PEOBJ_TEXT_FLAGS; - -#if LJ_TARGET_X64 - memcpy(pesect[PEOBJ_SECT_PDATA].name, ".pdata", sizeof(".pdata")-1); - pesect[PEOBJ_SECT_PDATA].ofs = sofs; - sofs += (pesect[PEOBJ_SECT_PDATA].size = 6*4); - pesect[PEOBJ_SECT_PDATA].relocofs = sofs; - sofs += (pesect[PEOBJ_SECT_PDATA].nreloc = 6) * PEOBJ_RELOC_SIZE; - /* Flags: 40 = read, 30 = align4, 40 = initialized data. */ - pesect[PEOBJ_SECT_PDATA].flags = 0x40300040; - - memcpy(pesect[PEOBJ_SECT_XDATA].name, ".xdata", sizeof(".xdata")-1); - pesect[PEOBJ_SECT_XDATA].ofs = sofs; - sofs += (pesect[PEOBJ_SECT_XDATA].size = 8*2+4+6*2); /* See below. */ - pesect[PEOBJ_SECT_XDATA].relocofs = sofs; - sofs += (pesect[PEOBJ_SECT_XDATA].nreloc = 1) * PEOBJ_RELOC_SIZE; - /* Flags: 40 = read, 30 = align4, 40 = initialized data. */ - pesect[PEOBJ_SECT_XDATA].flags = 0x40300040; -#endif - - memcpy(pesect[PEOBJ_SECT_RDATA_Z].name, ".rdata$Z", sizeof(".rdata$Z")-1); - pesect[PEOBJ_SECT_RDATA_Z].ofs = sofs; - sofs += (pesect[PEOBJ_SECT_RDATA_Z].size = (uint32_t)strlen(ctx->dasm_ident)+1); - /* Flags: 40 = read, 30 = align4, 40 = initialized data. */ - pesect[PEOBJ_SECT_RDATA_Z].flags = 0x40300040; - - /* Fill in PE header. */ - pehdr.arch = PEOBJ_ARCH_TARGET; - pehdr.nsects = PEOBJ_NSECTIONS; - pehdr.time = 0; /* Timestamp is optional. */ - pehdr.symtabofs = sofs; - pehdr.opthdrsz = 0; - pehdr.flags = 0; - - /* Compute the size of the symbol table: - ** @feat.00 + nsections*2 - ** + asm_start + nsym - ** + nrsym - */ - nrsym = ctx->nrelocsym; - pehdr.nsyms = 1+PEOBJ_NSECTIONS*2 + 1+ctx->nsym + nrsym; -#if LJ_TARGET_X64 - pehdr.nsyms += 1; /* Symbol for lj_err_unwind_win64. */ -#endif - - /* Write PE object header and all sections. */ - owrite(ctx, &pehdr, sizeof(PEheader)); - owrite(ctx, &pesect, sizeof(PEsection)*PEOBJ_NSECTIONS); - - /* Write .text section. */ - host_endian.u = 1; - if (host_endian.b != LJ_ENDIAN_SELECT(1, 0)) { -#if LJ_TARGET_PPC - uint32_t *p = (uint32_t *)ctx->code; - int n = (int)(ctx->codesz >> 2); - for (i = 0; i < n; i++, p++) - *p = lj_bswap(*p); /* Byteswap .text section. */ -#else - fprintf(stderr, "Error: different byte order for host and target\n"); - exit(1); -#endif - } - owrite(ctx, ctx->code, ctx->codesz); - for (i = 0; i < ctx->nreloc; i++) { - PEreloc reloc; - reloc.vaddr = (uint32_t)ctx->reloc[i].ofs + PEOBJ_RELOC_OFS; - reloc.symidx = 1+2+ctx->reloc[i].sym; /* Reloc syms are after .text sym. */ - reloc.type = ctx->reloc[i].type ? PEOBJ_RELOC_REL32 : PEOBJ_RELOC_DIR32; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - } - -#if LJ_TARGET_X64 - { /* Write .pdata section. */ - uint32_t fcofs = (uint32_t)ctx->sym[ctx->nsym-1].ofs; - uint32_t pdata[3]; /* Start of .text, end of .text and .xdata. */ - PEreloc reloc; - pdata[0] = 0; pdata[1] = fcofs; pdata[2] = 0; - owrite(ctx, &pdata, sizeof(pdata)); - pdata[0] = fcofs; pdata[1] = (uint32_t)ctx->codesz; pdata[2] = 20; - owrite(ctx, &pdata, sizeof(pdata)); - reloc.vaddr = 0; reloc.symidx = 1+2+nrsym+2+2+1; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - reloc.vaddr = 4; reloc.symidx = 1+2+nrsym+2+2+1; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - reloc.vaddr = 8; reloc.symidx = 1+2+nrsym+2; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - reloc.vaddr = 12; reloc.symidx = 1+2+nrsym+2+2+1; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - reloc.vaddr = 16; reloc.symidx = 1+2+nrsym+2+2+1; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - reloc.vaddr = 20; reloc.symidx = 1+2+nrsym+2; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - } - { /* Write .xdata section. */ - uint16_t xdata[8+2+6]; - PEreloc reloc; - xdata[0] = 0x01|0x08|0x10; /* Ver. 1, uhandler/ehandler, prolog size 0. */ - xdata[1] = 0x0005; /* Number of unwind codes, no frame pointer. */ - xdata[2] = 0x4200; /* Stack offset 4*8+8 = aword*5. */ - xdata[3] = 0x3000; /* Push rbx. */ - xdata[4] = 0x6000; /* Push rsi. */ - xdata[5] = 0x7000; /* Push rdi. */ - xdata[6] = 0x5000; /* Push rbp. */ - xdata[7] = 0; /* Alignment. */ - xdata[8] = xdata[9] = 0; /* Relocated address of exception handler. */ - xdata[10] = 0x01; /* Ver. 1, no handler, prolog size 0. */ - xdata[11] = 0x1504; /* Number of unwind codes, fp = rbp, fpofs = 16. */ - xdata[12] = 0x0300; /* set_fpreg. */ - xdata[13] = 0x0200; /* stack offset 0*8+8 = aword*1. */ - xdata[14] = 0x3000; /* Push rbx. */ - xdata[15] = 0x5000; /* Push rbp. */ - owrite(ctx, &xdata, sizeof(xdata)); - reloc.vaddr = 2*8; reloc.symidx = 1+2+nrsym+2+2; - reloc.type = PEOBJ_RELOC_ADDR32NB; - owrite(ctx, &reloc, PEOBJ_RELOC_SIZE); - } -#endif - - /* Write .rdata$Z section. */ - owrite(ctx, ctx->dasm_ident, strlen(ctx->dasm_ident)+1); - - /* Write symbol table. */ - strtab = NULL; /* 1st pass: collect string sizes. */ - for (;;) { - strtabofs = 4; - /* Mark as SafeSEH compliant. */ - emit_peobj_sym(ctx, "@feat.00", 1, - PEOBJ_SECT_ABS, PEOBJ_TYPE_NULL, PEOBJ_SCL_STATIC); - - emit_peobj_sym_sect(ctx, pesect, PEOBJ_SECT_TEXT); - for (i = 0; i < nrsym; i++) - emit_peobj_sym(ctx, ctx->relocsym[i], 0, - PEOBJ_SECT_UNDEF, PEOBJ_TYPE_FUNC, PEOBJ_SCL_EXTERN); - -#if LJ_TARGET_X64 - emit_peobj_sym_sect(ctx, pesect, PEOBJ_SECT_PDATA); - emit_peobj_sym_sect(ctx, pesect, PEOBJ_SECT_XDATA); - emit_peobj_sym(ctx, "lj_err_unwind_win64", 0, - PEOBJ_SECT_UNDEF, PEOBJ_TYPE_FUNC, PEOBJ_SCL_EXTERN); -#endif - - emit_peobj_sym(ctx, ctx->beginsym, 0, - PEOBJ_SECT_TEXT, PEOBJ_TYPE_NULL, PEOBJ_SCL_EXTERN); - for (i = 0; i < ctx->nsym; i++) - emit_peobj_sym(ctx, ctx->sym[i].name, (uint32_t)ctx->sym[i].ofs, - PEOBJ_SECT_TEXT, PEOBJ_TYPE_FUNC, PEOBJ_SCL_EXTERN); - - emit_peobj_sym_sect(ctx, pesect, PEOBJ_SECT_RDATA_Z); - - if (strtab) - break; - /* 2nd pass: alloc strtab, write syms and copy strings. */ - strtab = (char *)malloc(strtabofs); - *(uint32_t *)strtab = (uint32_t)strtabofs; - } - - /* Write string table. */ - owrite(ctx, strtab, strtabofs); -} - -#else - -void emit_peobj(BuildCtx *ctx) -{ - UNUSED(ctx); - fprintf(stderr, "Error: no PE object support for this target\n"); - exit(1); -} - -#endif diff --git a/deps/luajit/src/host/genminilua.lua b/deps/luajit/src/host/genminilua.lua deleted file mode 100644 index cd0d946..0000000 --- a/deps/luajit/src/host/genminilua.lua +++ /dev/null @@ -1,428 +0,0 @@ ----------------------------------------------------------------------------- --- Lua script to generate a customized, minified version of Lua. --- The resulting 'minilua' is used for the build process of LuaJIT. ----------------------------------------------------------------------------- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- - -local sub, match, gsub = string.sub, string.match, string.gsub - -local LUA_VERSION = "5.1.5" -local LUA_SOURCE - -local function usage() - io.stderr:write("Usage: ", arg and arg[0] or "genminilua", - " lua-", LUA_VERSION, "-source-dir\n") - os.exit(1) -end - -local function find_sources() - LUA_SOURCE = arg and arg[1] - if not LUA_SOURCE then usage() end - if sub(LUA_SOURCE, -1) ~= "/" then LUA_SOURCE = LUA_SOURCE.."/" end - local fp = io.open(LUA_SOURCE .. "lua.h") - if not fp then - LUA_SOURCE = LUA_SOURCE.."src/" - fp = io.open(LUA_SOURCE .. "lua.h") - if not fp then usage() end - end - local all = fp:read("*a") - fp:close() - if not match(all, 'LUA_RELEASE%s*"Lua '..LUA_VERSION..'"') then - io.stderr:write("Error: version mismatch\n") - usage() - end -end - -local LUA_FILES = { -"lmem.c", "lobject.c", "ltm.c", "lfunc.c", "ldo.c", "lstring.c", "ltable.c", -"lgc.c", "lstate.c", "ldebug.c", "lzio.c", "lopcodes.c", -"llex.c", "lcode.c", "lparser.c", "lvm.c", "lapi.c", "lauxlib.c", -"lbaselib.c", "ltablib.c", "liolib.c", "loslib.c", "lstrlib.c", "linit.c", -} - -local REMOVE_LIB = {} -gsub([[ -collectgarbage dofile gcinfo getfenv getmetatable load print rawequal rawset -select tostring xpcall -foreach foreachi getn maxn setn -popen tmpfile seek setvbuf __tostring -clock date difftime execute getenv rename setlocale time tmpname -dump gfind len reverse -LUA_LOADLIBNAME LUA_MATHLIBNAME LUA_DBLIBNAME -]], "%S+", function(name) - REMOVE_LIB[name] = true -end) - -local REMOVE_EXTINC = { [""] = true, [""] = true, } - -local CUSTOM_MAIN = [[ -typedef unsigned int UB; -static UB barg(lua_State *L,int idx){ -union{lua_Number n;U64 b;}bn; -bn.n=lua_tonumber(L,idx)+6755399441055744.0; -if (bn.n==0.0&&!lua_isnumber(L,idx))luaL_typerror(L,idx,"number"); -return(UB)bn.b; -} -#define BRET(b) lua_pushnumber(L,(lua_Number)(int)(b));return 1; -static int tobit(lua_State *L){ -BRET(barg(L,1))} -static int bnot(lua_State *L){ -BRET(~barg(L,1))} -static int band(lua_State *L){ -int i;UB b=barg(L,1);for(i=lua_gettop(L);i>1;i--)b&=barg(L,i);BRET(b)} -static int bor(lua_State *L){ -int i;UB b=barg(L,1);for(i=lua_gettop(L);i>1;i--)b|=barg(L,i);BRET(b)} -static int bxor(lua_State *L){ -int i;UB b=barg(L,1);for(i=lua_gettop(L);i>1;i--)b^=barg(L,i);BRET(b)} -static int lshift(lua_State *L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET(b<>n)} -static int arshift(lua_State *L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET((int)b>>n)} -static int rol(lua_State *L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET((b<>(32-n)))} -static int ror(lua_State *L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET((b>>n)|(b<<(32-n)))} -static int bswap(lua_State *L){ -UB b=barg(L,1);b=(b>>24)|((b>>8)&0xff00)|((b&0xff00)<<8)|(b<<24);BRET(b)} -static int tohex(lua_State *L){ -UB b=barg(L,1); -int n=lua_isnone(L,2)?8:(int)barg(L,2); -const char *hexdigits="0123456789abcdef"; -char buf[8]; -int i; -if(n<0){n=-n;hexdigits="0123456789ABCDEF";} -if(n>8)n=8; -for(i=(int)n;--i>=0;){buf[i]=hexdigits[b&15];b>>=4;} -lua_pushlstring(L,buf,(size_t)n); -return 1; -} -static const struct luaL_Reg bitlib[] = { -{"tobit",tobit}, -{"bnot",bnot}, -{"band",band}, -{"bor",bor}, -{"bxor",bxor}, -{"lshift",lshift}, -{"rshift",rshift}, -{"arshift",arshift}, -{"rol",rol}, -{"ror",ror}, -{"bswap",bswap}, -{"tohex",tohex}, -{NULL,NULL} -}; -int main(int argc, char **argv){ - lua_State *L = luaL_newstate(); - int i; - luaL_openlibs(L); - luaL_register(L, "bit", bitlib); - if (argc < 2) return sizeof(void *); - lua_createtable(L, 0, 1); - lua_pushstring(L, argv[1]); - lua_rawseti(L, -2, 0); - lua_setglobal(L, "arg"); - if (luaL_loadfile(L, argv[1])) - goto err; - for (i = 2; i < argc; i++) - lua_pushstring(L, argv[i]); - if (lua_pcall(L, argc - 2, 0, 0)) { - err: - fprintf(stderr, "Error: %s\n", lua_tostring(L, -1)); - return 1; - } - lua_close(L); - return 0; -} -]] - -local function read_sources() - local t = {} - for i, name in ipairs(LUA_FILES) do - local fp = assert(io.open(LUA_SOURCE..name, "r")) - t[i] = fp:read("*a") - assert(fp:close()) - end - t[#t+1] = CUSTOM_MAIN - return table.concat(t) -end - -local includes = {} - -local function merge_includes(src) - return gsub(src, '#include%s*"([^"]*)"%s*\n', function(name) - if includes[name] then return "" end - includes[name] = true - local fp = assert(io.open(LUA_SOURCE..name, "r")) - local src = fp:read("*a") - assert(fp:close()) - src = gsub(src, "#ifndef%s+%w+_h\n#define%s+%w+_h\n", "") - src = gsub(src, "#endif%s*$", "") - return merge_includes(src) - end) -end - -local function get_license(src) - return match(src, "/%*+\n%* Copyright %(.-%*/\n") -end - -local function fold_lines(src) - return gsub(src, "\\\n", " ") -end - -local strings = {} - -local function save_str(str) - local n = #strings+1 - strings[n] = str - return "\1"..n.."\2" -end - -local function save_strings(src) - src = gsub(src, '"[^"\n]*"', save_str) - return gsub(src, "'[^'\n]*'", save_str) -end - -local function restore_strings(src) - return gsub(src, "\1(%d+)\2", function(numstr) - return strings[tonumber(numstr)] - end) -end - -local function def_istrue(def) - return def == "INT_MAX > 2147483640L" or - def == "LUAI_BITSINT >= 32" or - def == "SIZE_Bx < LUAI_BITSINT-1" or - def == "cast" or - def == "defined(LUA_CORE)" or - def == "MINSTRTABSIZE" or - def == "LUA_MINBUFFER" or - def == "HARDSTACKTESTS" or - def == "UNUSED" -end - -local head, defs = {[[ -#ifdef _MSC_VER -typedef unsigned __int64 U64; -#else -typedef unsigned long long U64; -#endif -int _CRT_glob = 0; -]]}, {} - -local function preprocess(src) - local t = { match(src, "^(.-)#") } - local lvl, on, oldon = 0, true, {} - for pp, def, txt in string.gmatch(src, "#(%w+) *([^\n]*)\n([^#]*)") do - if pp == "if" or pp == "ifdef" or pp == "ifndef" then - lvl = lvl + 1 - oldon[lvl] = on - on = def_istrue(def) - elseif pp == "else" then - if oldon[lvl] then - if on == false then on = true else on = false end - end - elseif pp == "elif" then - if oldon[lvl] then - on = def_istrue(def) - end - elseif pp == "endif" then - on = oldon[lvl] - lvl = lvl - 1 - elseif on then - if pp == "include" then - if not head[def] and not REMOVE_EXTINC[def] then - head[def] = true - head[#head+1] = "#include "..def.."\n" - end - elseif pp == "define" then - local k, sp, v = match(def, "([%w_]+)(%s*)(.*)") - if k and not (sp == "" and sub(v, 1, 1) == "(") then - defs[k] = gsub(v, "%a[%w_]*", function(tok) - return defs[tok] or tok - end) - else - t[#t+1] = "#define "..def.."\n" - end - elseif pp ~= "undef" then - error("unexpected directive: "..pp.." "..def) - end - end - if on then t[#t+1] = txt end - end - return gsub(table.concat(t), "%a[%w_]*", function(tok) - return defs[tok] or tok - end) -end - -local function merge_header(src, license) - local hdr = string.format([[ -/* This is a heavily customized and minimized copy of Lua %s. */ -/* It's only used to build LuaJIT. It does NOT have all standard functions! */ -]], LUA_VERSION) - return hdr..license..table.concat(head)..src -end - -local function strip_unused1(src) - return gsub(src, '( {"?([%w_]+)"?,%s+%a[%w_]*},\n)', function(line, func) - return REMOVE_LIB[func] and "" or line - end) -end - -local function strip_unused2(src) - return gsub(src, "Symbolic Execution.-}=", "") -end - -local function strip_unused3(src) - src = gsub(src, "extern", "static") - src = gsub(src, "\nstatic([^\n]-)%(([^)]*)%)%(", "\nstatic%1 %2(") - src = gsub(src, "#define lua_assert[^\n]*\n", "") - src = gsub(src, "lua_assert%b();?", "") - src = gsub(src, "default:\n}", "default:;\n}") - src = gsub(src, "lua_lock%b();", "") - src = gsub(src, "lua_unlock%b();", "") - src = gsub(src, "luai_threadyield%b();", "") - src = gsub(src, "luai_userstateopen%b();", "{}") - src = gsub(src, "luai_userstate%w+%b();", "") - src = gsub(src, "%(%(c==.*luaY_parser%)", "luaY_parser") - src = gsub(src, "trydecpoint%(ls,seminfo%)", - "luaX_lexerror(ls,\"malformed number\",TK_NUMBER)") - src = gsub(src, "int c=luaZ_lookahead%b();", "") - src = gsub(src, "luaL_register%(L,[^,]*,co_funcs%);\nreturn 2;", - "return 1;") - src = gsub(src, "getfuncname%b():", "NULL:") - src = gsub(src, "getobjname%b():", "NULL:") - src = gsub(src, "if%([^\n]*hookmask[^\n]*%)\n[^\n]*\n", "") - src = gsub(src, "if%([^\n]*hookmask[^\n]*%)%b{}\n", "") - src = gsub(src, "if%([^\n]*hookmask[^\n]*&&\n[^\n]*%b{}\n", "") - src = gsub(src, "(twoto%b()%()", "%1(size_t)") - src = gsub(src, "i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -typedef enum{ -TM_INDEX, -TM_NEWINDEX, -TM_GC, -TM_MODE, -TM_EQ, -TM_ADD, -TM_SUB, -TM_MUL, -TM_DIV, -TM_MOD, -TM_POW, -TM_UNM, -TM_LEN, -TM_LT, -TM_LE, -TM_CONCAT, -TM_CALL, -TM_N -}TMS; -enum OpMode{iABC,iABx,iAsBx}; -typedef enum{ -OP_MOVE, -OP_LOADK, -OP_LOADBOOL, -OP_LOADNIL, -OP_GETUPVAL, -OP_GETGLOBAL, -OP_GETTABLE, -OP_SETGLOBAL, -OP_SETUPVAL, -OP_SETTABLE, -OP_NEWTABLE, -OP_SELF, -OP_ADD, -OP_SUB, -OP_MUL, -OP_DIV, -OP_MOD, -OP_POW, -OP_UNM, -OP_NOT, -OP_LEN, -OP_CONCAT, -OP_JMP, -OP_EQ, -OP_LT, -OP_LE, -OP_TEST, -OP_TESTSET, -OP_CALL, -OP_TAILCALL, -OP_RETURN, -OP_FORLOOP, -OP_FORPREP, -OP_TFORLOOP, -OP_SETLIST, -OP_CLOSE, -OP_CLOSURE, -OP_VARARG -}OpCode; -enum OpArgMask{ -OpArgN, -OpArgU, -OpArgR, -OpArgK -}; -typedef enum{ -VVOID, -VNIL, -VTRUE, -VFALSE, -VK, -VKNUM, -VLOCAL, -VUPVAL, -VGLOBAL, -VINDEXED, -VJMP, -VRELOCABLE, -VNONRELOC, -VCALL, -VVARARG -}expkind; -enum RESERVED{ -TK_AND=257,TK_BREAK, -TK_DO,TK_ELSE,TK_ELSEIF,TK_END,TK_FALSE,TK_FOR,TK_FUNCTION, -TK_IF,TK_IN,TK_LOCAL,TK_NIL,TK_NOT,TK_OR,TK_REPEAT, -TK_RETURN,TK_THEN,TK_TRUE,TK_UNTIL,TK_WHILE, -TK_CONCAT,TK_DOTS,TK_EQ,TK_GE,TK_LE,TK_NE,TK_NUMBER, -TK_NAME,TK_STRING,TK_EOS -}; -typedef enum BinOpr{ -OPR_ADD,OPR_SUB,OPR_MUL,OPR_DIV,OPR_MOD,OPR_POW, -OPR_CONCAT, -OPR_NE,OPR_EQ, -OPR_LT,OPR_LE,OPR_GT,OPR_GE, -OPR_AND,OPR_OR, -OPR_NOBINOPR -}BinOpr; -typedef enum UnOpr{OPR_MINUS,OPR_NOT,OPR_LEN,OPR_NOUNOPR}UnOpr; -#define LUA_QL(x)"'"x"'" -#define luai_apicheck(L,o){(void)L;} -#define lua_number2str(s,n)sprintf((s),"%.14g",(n)) -#define lua_str2number(s,p)strtod((s),(p)) -#define luai_numadd(a,b)((a)+(b)) -#define luai_numsub(a,b)((a)-(b)) -#define luai_nummul(a,b)((a)*(b)) -#define luai_numdiv(a,b)((a)/(b)) -#define luai_nummod(a,b)((a)-floor((a)/(b))*(b)) -#define luai_numpow(a,b)(pow(a,b)) -#define luai_numunm(a)(-(a)) -#define luai_numeq(a,b)((a)==(b)) -#define luai_numlt(a,b)((a)<(b)) -#define luai_numle(a,b)((a)<=(b)) -#define luai_numisnan(a)(!luai_numeq((a),(a))) -#define lua_number2int(i,d)((i)=(int)(d)) -#define lua_number2integer(i,d)((i)=(lua_Integer)(d)) -#define LUAI_THROW(L,c)longjmp((c)->b,1) -#define LUAI_TRY(L,c,a)if(setjmp((c)->b)==0){a} -#define lua_pclose(L,file)((void)((void)L,file),0) -#define lua_upvalueindex(i)((-10002)-(i)) -typedef struct lua_State lua_State; -typedef int(*lua_CFunction)(lua_State*L); -typedef const char*(*lua_Reader)(lua_State*L,void*ud,size_t*sz); -typedef void*(*lua_Alloc)(void*ud,void*ptr,size_t osize,size_t nsize); -typedef double lua_Number; -typedef ptrdiff_t lua_Integer; -static void lua_settop(lua_State*L,int idx); -static int lua_type(lua_State*L,int idx); -static const char* lua_tolstring(lua_State*L,int idx,size_t*len); -static size_t lua_objlen(lua_State*L,int idx); -static void lua_pushlstring(lua_State*L,const char*s,size_t l); -static void lua_pushcclosure(lua_State*L,lua_CFunction fn,int n); -static void lua_createtable(lua_State*L,int narr,int nrec); -static void lua_setfield(lua_State*L,int idx,const char*k); -#define lua_pop(L,n)lua_settop(L,-(n)-1) -#define lua_newtable(L)lua_createtable(L,0,0) -#define lua_pushcfunction(L,f)lua_pushcclosure(L,(f),0) -#define lua_strlen(L,i)lua_objlen(L,(i)) -#define lua_isfunction(L,n)(lua_type(L,(n))==6) -#define lua_istable(L,n)(lua_type(L,(n))==5) -#define lua_isnil(L,n)(lua_type(L,(n))==0) -#define lua_isboolean(L,n)(lua_type(L,(n))==1) -#define lua_isnone(L,n)(lua_type(L,(n))==(-1)) -#define lua_isnoneornil(L,n)(lua_type(L,(n))<=0) -#define lua_pushliteral(L,s)lua_pushlstring(L,""s,(sizeof(s)/sizeof(char))-1) -#define lua_setglobal(L,s)lua_setfield(L,(-10002),(s)) -#define lua_tostring(L,i)lua_tolstring(L,(i),NULL) -typedef struct lua_Debug lua_Debug; -typedef void(*lua_Hook)(lua_State*L,lua_Debug*ar); -struct lua_Debug{ -int event; -const char*name; -const char*namewhat; -const char*what; -const char*source; -int currentline; -int nups; -int linedefined; -int lastlinedefined; -char short_src[60]; -int i_ci; -}; -typedef unsigned int lu_int32; -typedef size_t lu_mem; -typedef ptrdiff_t l_mem; -typedef unsigned char lu_byte; -#define IntPoint(p)((unsigned int)(lu_mem)(p)) -typedef union{double u;void*s;long l;}L_Umaxalign; -typedef double l_uacNumber; -#define check_exp(c,e)(e) -#define UNUSED(x)((void)(x)) -#define cast(t,exp)((t)(exp)) -#define cast_byte(i)cast(lu_byte,(i)) -#define cast_num(i)cast(lua_Number,(i)) -#define cast_int(i)cast(int,(i)) -typedef lu_int32 Instruction; -#define condhardstacktests(x)((void)0) -typedef union GCObject GCObject; -typedef struct GCheader{ -GCObject*next;lu_byte tt;lu_byte marked; -}GCheader; -typedef union{ -GCObject*gc; -void*p; -lua_Number n; -int b; -}Value; -typedef struct lua_TValue{ -Value value;int tt; -}TValue; -#define ttisnil(o)(ttype(o)==0) -#define ttisnumber(o)(ttype(o)==3) -#define ttisstring(o)(ttype(o)==4) -#define ttistable(o)(ttype(o)==5) -#define ttisfunction(o)(ttype(o)==6) -#define ttisboolean(o)(ttype(o)==1) -#define ttisuserdata(o)(ttype(o)==7) -#define ttisthread(o)(ttype(o)==8) -#define ttislightuserdata(o)(ttype(o)==2) -#define ttype(o)((o)->tt) -#define gcvalue(o)check_exp(iscollectable(o),(o)->value.gc) -#define pvalue(o)check_exp(ttislightuserdata(o),(o)->value.p) -#define nvalue(o)check_exp(ttisnumber(o),(o)->value.n) -#define rawtsvalue(o)check_exp(ttisstring(o),&(o)->value.gc->ts) -#define tsvalue(o)(&rawtsvalue(o)->tsv) -#define rawuvalue(o)check_exp(ttisuserdata(o),&(o)->value.gc->u) -#define uvalue(o)(&rawuvalue(o)->uv) -#define clvalue(o)check_exp(ttisfunction(o),&(o)->value.gc->cl) -#define hvalue(o)check_exp(ttistable(o),&(o)->value.gc->h) -#define bvalue(o)check_exp(ttisboolean(o),(o)->value.b) -#define thvalue(o)check_exp(ttisthread(o),&(o)->value.gc->th) -#define l_isfalse(o)(ttisnil(o)||(ttisboolean(o)&&bvalue(o)==0)) -#define checkconsistency(obj) -#define checkliveness(g,obj) -#define setnilvalue(obj)((obj)->tt=0) -#define setnvalue(obj,x){TValue*i_o=(obj);i_o->value.n=(x);i_o->tt=3;} -#define setbvalue(obj,x){TValue*i_o=(obj);i_o->value.b=(x);i_o->tt=1;} -#define setsvalue(L,obj,x){TValue*i_o=(obj);i_o->value.gc=cast(GCObject*,(x));i_o->tt=4;checkliveness(G(L),i_o);} -#define setuvalue(L,obj,x){TValue*i_o=(obj);i_o->value.gc=cast(GCObject*,(x));i_o->tt=7;checkliveness(G(L),i_o);} -#define setthvalue(L,obj,x){TValue*i_o=(obj);i_o->value.gc=cast(GCObject*,(x));i_o->tt=8;checkliveness(G(L),i_o);} -#define setclvalue(L,obj,x){TValue*i_o=(obj);i_o->value.gc=cast(GCObject*,(x));i_o->tt=6;checkliveness(G(L),i_o);} -#define sethvalue(L,obj,x){TValue*i_o=(obj);i_o->value.gc=cast(GCObject*,(x));i_o->tt=5;checkliveness(G(L),i_o);} -#define setptvalue(L,obj,x){TValue*i_o=(obj);i_o->value.gc=cast(GCObject*,(x));i_o->tt=(8+1);checkliveness(G(L),i_o);} -#define setobj(L,obj1,obj2){const TValue*o2=(obj2);TValue*o1=(obj1);o1->value=o2->value;o1->tt=o2->tt;checkliveness(G(L),o1);} -#define setttype(obj,tt)(ttype(obj)=(tt)) -#define iscollectable(o)(ttype(o)>=4) -typedef TValue*StkId; -typedef union TString{ -L_Umaxalign dummy; -struct{ -GCObject*next;lu_byte tt;lu_byte marked; -lu_byte reserved; -unsigned int hash; -size_t len; -}tsv; -}TString; -#define getstr(ts)cast(const char*,(ts)+1) -#define svalue(o)getstr(rawtsvalue(o)) -typedef union Udata{ -L_Umaxalign dummy; -struct{ -GCObject*next;lu_byte tt;lu_byte marked; -struct Table*metatable; -struct Table*env; -size_t len; -}uv; -}Udata; -typedef struct Proto{ -GCObject*next;lu_byte tt;lu_byte marked; -TValue*k; -Instruction*code; -struct Proto**p; -int*lineinfo; -struct LocVar*locvars; -TString**upvalues; -TString*source; -int sizeupvalues; -int sizek; -int sizecode; -int sizelineinfo; -int sizep; -int sizelocvars; -int linedefined; -int lastlinedefined; -GCObject*gclist; -lu_byte nups; -lu_byte numparams; -lu_byte is_vararg; -lu_byte maxstacksize; -}Proto; -typedef struct LocVar{ -TString*varname; -int startpc; -int endpc; -}LocVar; -typedef struct UpVal{ -GCObject*next;lu_byte tt;lu_byte marked; -TValue*v; -union{ -TValue value; -struct{ -struct UpVal*prev; -struct UpVal*next; -}l; -}u; -}UpVal; -typedef struct CClosure{ -GCObject*next;lu_byte tt;lu_byte marked;lu_byte isC;lu_byte nupvalues;GCObject*gclist;struct Table*env; -lua_CFunction f; -TValue upvalue[1]; -}CClosure; -typedef struct LClosure{ -GCObject*next;lu_byte tt;lu_byte marked;lu_byte isC;lu_byte nupvalues;GCObject*gclist;struct Table*env; -struct Proto*p; -UpVal*upvals[1]; -}LClosure; -typedef union Closure{ -CClosure c; -LClosure l; -}Closure; -#define iscfunction(o)(ttype(o)==6&&clvalue(o)->c.isC) -typedef union TKey{ -struct{ -Value value;int tt; -struct Node*next; -}nk; -TValue tvk; -}TKey; -typedef struct Node{ -TValue i_val; -TKey i_key; -}Node; -typedef struct Table{ -GCObject*next;lu_byte tt;lu_byte marked; -lu_byte flags; -lu_byte lsizenode; -struct Table*metatable; -TValue*array; -Node*node; -Node*lastfree; -GCObject*gclist; -int sizearray; -}Table; -#define lmod(s,size)(check_exp((size&(size-1))==0,(cast(int,(s)&((size)-1))))) -#define twoto(x)((size_t)1<<(x)) -#define sizenode(t)(twoto((t)->lsizenode)) -static const TValue luaO_nilobject_; -#define ceillog2(x)(luaO_log2((x)-1)+1) -static int luaO_log2(unsigned int x); -#define gfasttm(g,et,e)((et)==NULL?NULL:((et)->flags&(1u<<(e)))?NULL:luaT_gettm(et,e,(g)->tmname[e])) -#define fasttm(l,et,e)gfasttm(G(l),et,e) -static const TValue*luaT_gettm(Table*events,TMS event,TString*ename); -#define luaM_reallocv(L,b,on,n,e)((cast(size_t,(n)+1)<=((size_t)(~(size_t)0)-2)/(e))?luaM_realloc_(L,(b),(on)*(e),(n)*(e)):luaM_toobig(L)) -#define luaM_freemem(L,b,s)luaM_realloc_(L,(b),(s),0) -#define luaM_free(L,b)luaM_realloc_(L,(b),sizeof(*(b)),0) -#define luaM_freearray(L,b,n,t)luaM_reallocv(L,(b),n,0,sizeof(t)) -#define luaM_malloc(L,t)luaM_realloc_(L,NULL,0,(t)) -#define luaM_new(L,t)cast(t*,luaM_malloc(L,sizeof(t))) -#define luaM_newvector(L,n,t)cast(t*,luaM_reallocv(L,NULL,0,n,sizeof(t))) -#define luaM_growvector(L,v,nelems,size,t,limit,e)if((nelems)+1>(size))((v)=cast(t*,luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) -#define luaM_reallocvector(L,v,oldn,n,t)((v)=cast(t*,luaM_reallocv(L,v,oldn,n,sizeof(t)))) -static void*luaM_realloc_(lua_State*L,void*block,size_t oldsize, -size_t size); -static void*luaM_toobig(lua_State*L); -static void*luaM_growaux_(lua_State*L,void*block,int*size, -size_t size_elem,int limit, -const char*errormsg); -typedef struct Zio ZIO; -#define char2int(c)cast(int,cast(unsigned char,(c))) -#define zgetc(z)(((z)->n--)>0?char2int(*(z)->p++):luaZ_fill(z)) -typedef struct Mbuffer{ -char*buffer; -size_t n; -size_t buffsize; -}Mbuffer; -#define luaZ_initbuffer(L,buff)((buff)->buffer=NULL,(buff)->buffsize=0) -#define luaZ_buffer(buff)((buff)->buffer) -#define luaZ_sizebuffer(buff)((buff)->buffsize) -#define luaZ_bufflen(buff)((buff)->n) -#define luaZ_resetbuffer(buff)((buff)->n=0) -#define luaZ_resizebuffer(L,buff,size)(luaM_reallocvector(L,(buff)->buffer,(buff)->buffsize,size,char),(buff)->buffsize=size) -#define luaZ_freebuffer(L,buff)luaZ_resizebuffer(L,buff,0) -struct Zio{ -size_t n; -const char*p; -lua_Reader reader; -void*data; -lua_State*L; -}; -static int luaZ_fill(ZIO*z); -struct lua_longjmp; -#define gt(L)(&L->l_gt) -#define registry(L)(&G(L)->l_registry) -typedef struct stringtable{ -GCObject**hash; -lu_int32 nuse; -int size; -}stringtable; -typedef struct CallInfo{ -StkId base; -StkId func; -StkId top; -const Instruction*savedpc; -int nresults; -int tailcalls; -}CallInfo; -#define curr_func(L)(clvalue(L->ci->func)) -#define ci_func(ci)(clvalue((ci)->func)) -#define f_isLua(ci)(!ci_func(ci)->c.isC) -#define isLua(ci)(ttisfunction((ci)->func)&&f_isLua(ci)) -typedef struct global_State{ -stringtable strt; -lua_Alloc frealloc; -void*ud; -lu_byte currentwhite; -lu_byte gcstate; -int sweepstrgc; -GCObject*rootgc; -GCObject**sweepgc; -GCObject*gray; -GCObject*grayagain; -GCObject*weak; -GCObject*tmudata; -Mbuffer buff; -lu_mem GCthreshold; -lu_mem totalbytes; -lu_mem estimate; -lu_mem gcdept; -int gcpause; -int gcstepmul; -lua_CFunction panic; -TValue l_registry; -struct lua_State*mainthread; -UpVal uvhead; -struct Table*mt[(8+1)]; -TString*tmname[TM_N]; -}global_State; -struct lua_State{ -GCObject*next;lu_byte tt;lu_byte marked; -lu_byte status; -StkId top; -StkId base; -global_State*l_G; -CallInfo*ci; -const Instruction*savedpc; -StkId stack_last; -StkId stack; -CallInfo*end_ci; -CallInfo*base_ci; -int stacksize; -int size_ci; -unsigned short nCcalls; -unsigned short baseCcalls; -lu_byte hookmask; -lu_byte allowhook; -int basehookcount; -int hookcount; -lua_Hook hook; -TValue l_gt; -TValue env; -GCObject*openupval; -GCObject*gclist; -struct lua_longjmp*errorJmp; -ptrdiff_t errfunc; -}; -#define G(L)(L->l_G) -union GCObject{ -GCheader gch; -union TString ts; -union Udata u; -union Closure cl; -struct Table h; -struct Proto p; -struct UpVal uv; -struct lua_State th; -}; -#define rawgco2ts(o)check_exp((o)->gch.tt==4,&((o)->ts)) -#define gco2ts(o)(&rawgco2ts(o)->tsv) -#define rawgco2u(o)check_exp((o)->gch.tt==7,&((o)->u)) -#define gco2u(o)(&rawgco2u(o)->uv) -#define gco2cl(o)check_exp((o)->gch.tt==6,&((o)->cl)) -#define gco2h(o)check_exp((o)->gch.tt==5,&((o)->h)) -#define gco2p(o)check_exp((o)->gch.tt==(8+1),&((o)->p)) -#define gco2uv(o)check_exp((o)->gch.tt==(8+2),&((o)->uv)) -#define ngcotouv(o)check_exp((o)==NULL||(o)->gch.tt==(8+2),&((o)->uv)) -#define gco2th(o)check_exp((o)->gch.tt==8,&((o)->th)) -#define obj2gco(v)(cast(GCObject*,(v))) -static void luaE_freethread(lua_State*L,lua_State*L1); -#define pcRel(pc,p)(cast(int,(pc)-(p)->code)-1) -#define getline_(f,pc)(((f)->lineinfo)?(f)->lineinfo[pc]:0) -#define resethookcount(L)(L->hookcount=L->basehookcount) -static void luaG_typeerror(lua_State*L,const TValue*o, -const char*opname); -static void luaG_runerror(lua_State*L,const char*fmt,...); -#define luaD_checkstack(L,n)if((char*)L->stack_last-(char*)L->top<=(n)*(int)sizeof(TValue))luaD_growstack(L,n);else condhardstacktests(luaD_reallocstack(L,L->stacksize-5-1)); -#define incr_top(L){luaD_checkstack(L,1);L->top++;} -#define savestack(L,p)((char*)(p)-(char*)L->stack) -#define restorestack(L,n)((TValue*)((char*)L->stack+(n))) -#define saveci(L,p)((char*)(p)-(char*)L->base_ci) -#define restoreci(L,n)((CallInfo*)((char*)L->base_ci+(n))) -typedef void(*Pfunc)(lua_State*L,void*ud); -static int luaD_poscall(lua_State*L,StkId firstResult); -static void luaD_reallocCI(lua_State*L,int newsize); -static void luaD_reallocstack(lua_State*L,int newsize); -static void luaD_growstack(lua_State*L,int n); -static void luaD_throw(lua_State*L,int errcode); -static void*luaM_growaux_(lua_State*L,void*block,int*size,size_t size_elems, -int limit,const char*errormsg){ -void*newblock; -int newsize; -if(*size>=limit/2){ -if(*size>=limit) -luaG_runerror(L,errormsg); -newsize=limit; -} -else{ -newsize=(*size)*2; -if(newsize<4) -newsize=4; -} -newblock=luaM_reallocv(L,block,*size,newsize,size_elems); -*size=newsize; -return newblock; -} -static void*luaM_toobig(lua_State*L){ -luaG_runerror(L,"memory allocation error: block too big"); -return NULL; -} -static void*luaM_realloc_(lua_State*L,void*block,size_t osize,size_t nsize){ -global_State*g=G(L); -block=(*g->frealloc)(g->ud,block,osize,nsize); -if(block==NULL&&nsize>0) -luaD_throw(L,4); -g->totalbytes=(g->totalbytes-osize)+nsize; -return block; -} -#define resetbits(x,m)((x)&=cast(lu_byte,~(m))) -#define setbits(x,m)((x)|=(m)) -#define testbits(x,m)((x)&(m)) -#define bitmask(b)(1<<(b)) -#define bit2mask(b1,b2)(bitmask(b1)|bitmask(b2)) -#define l_setbit(x,b)setbits(x,bitmask(b)) -#define resetbit(x,b)resetbits(x,bitmask(b)) -#define testbit(x,b)testbits(x,bitmask(b)) -#define set2bits(x,b1,b2)setbits(x,(bit2mask(b1,b2))) -#define reset2bits(x,b1,b2)resetbits(x,(bit2mask(b1,b2))) -#define test2bits(x,b1,b2)testbits(x,(bit2mask(b1,b2))) -#define iswhite(x)test2bits((x)->gch.marked,0,1) -#define isblack(x)testbit((x)->gch.marked,2) -#define isgray(x)(!isblack(x)&&!iswhite(x)) -#define otherwhite(g)(g->currentwhite^bit2mask(0,1)) -#define isdead(g,v)((v)->gch.marked&otherwhite(g)&bit2mask(0,1)) -#define changewhite(x)((x)->gch.marked^=bit2mask(0,1)) -#define gray2black(x)l_setbit((x)->gch.marked,2) -#define valiswhite(x)(iscollectable(x)&&iswhite(gcvalue(x))) -#define luaC_white(g)cast(lu_byte,(g)->currentwhite&bit2mask(0,1)) -#define luaC_checkGC(L){condhardstacktests(luaD_reallocstack(L,L->stacksize-5-1));if(G(L)->totalbytes>=G(L)->GCthreshold)luaC_step(L);} -#define luaC_barrier(L,p,v){if(valiswhite(v)&&isblack(obj2gco(p)))luaC_barrierf(L,obj2gco(p),gcvalue(v));} -#define luaC_barriert(L,t,v){if(valiswhite(v)&&isblack(obj2gco(t)))luaC_barrierback(L,t);} -#define luaC_objbarrier(L,p,o){if(iswhite(obj2gco(o))&&isblack(obj2gco(p)))luaC_barrierf(L,obj2gco(p),obj2gco(o));} -#define luaC_objbarriert(L,t,o){if(iswhite(obj2gco(o))&&isblack(obj2gco(t)))luaC_barrierback(L,t);} -static void luaC_step(lua_State*L); -static void luaC_link(lua_State*L,GCObject*o,lu_byte tt); -static void luaC_linkupval(lua_State*L,UpVal*uv); -static void luaC_barrierf(lua_State*L,GCObject*o,GCObject*v); -static void luaC_barrierback(lua_State*L,Table*t); -#define sizestring(s)(sizeof(union TString)+((s)->len+1)*sizeof(char)) -#define sizeudata(u)(sizeof(union Udata)+(u)->len) -#define luaS_new(L,s)(luaS_newlstr(L,s,strlen(s))) -#define luaS_newliteral(L,s)(luaS_newlstr(L,""s,(sizeof(s)/sizeof(char))-1)) -#define luaS_fix(s)l_setbit((s)->tsv.marked,5) -static TString*luaS_newlstr(lua_State*L,const char*str,size_t l); -#define tostring(L,o)((ttype(o)==4)||(luaV_tostring(L,o))) -#define tonumber(o,n)(ttype(o)==3||(((o)=luaV_tonumber(o,n))!=NULL)) -#define equalobj(L,o1,o2)(ttype(o1)==ttype(o2)&&luaV_equalval(L,o1,o2)) -static int luaV_equalval(lua_State*L,const TValue*t1,const TValue*t2); -static const TValue*luaV_tonumber(const TValue*obj,TValue*n); -static int luaV_tostring(lua_State*L,StkId obj); -static void luaV_execute(lua_State*L,int nexeccalls); -static void luaV_concat(lua_State*L,int total,int last); -static const TValue luaO_nilobject_={{NULL},0}; -static int luaO_int2fb(unsigned int x){ -int e=0; -while(x>=16){ -x=(x+1)>>1; -e++; -} -if(x<8)return x; -else return((e+1)<<3)|(cast_int(x)-8); -} -static int luaO_fb2int(int x){ -int e=(x>>3)&31; -if(e==0)return x; -else return((x&7)+8)<<(e-1); -} -static int luaO_log2(unsigned int x){ -static const lu_byte log_2[256]={ -0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, -7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, -8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 -}; -int l=-1; -while(x>=256){l+=8;x>>=8;} -return l+log_2[x]; -} -static int luaO_rawequalObj(const TValue*t1,const TValue*t2){ -if(ttype(t1)!=ttype(t2))return 0; -else switch(ttype(t1)){ -case 0: -return 1; -case 3: -return luai_numeq(nvalue(t1),nvalue(t2)); -case 1: -return bvalue(t1)==bvalue(t2); -case 2: -return pvalue(t1)==pvalue(t2); -default: -return gcvalue(t1)==gcvalue(t2); -} -} -static int luaO_str2d(const char*s,lua_Number*result){ -char*endptr; -*result=lua_str2number(s,&endptr); -if(endptr==s)return 0; -if(*endptr=='x'||*endptr=='X') -*result=cast_num(strtoul(s,&endptr,16)); -if(*endptr=='\0')return 1; -while(isspace(cast(unsigned char,*endptr)))endptr++; -if(*endptr!='\0')return 0; -return 1; -} -static void pushstr(lua_State*L,const char*str){ -setsvalue(L,L->top,luaS_new(L,str)); -incr_top(L); -} -static const char*luaO_pushvfstring(lua_State*L,const char*fmt,va_list argp){ -int n=1; -pushstr(L,""); -for(;;){ -const char*e=strchr(fmt,'%'); -if(e==NULL)break; -setsvalue(L,L->top,luaS_newlstr(L,fmt,e-fmt)); -incr_top(L); -switch(*(e+1)){ -case's':{ -const char*s=va_arg(argp,char*); -if(s==NULL)s="(null)"; -pushstr(L,s); -break; -} -case'c':{ -char buff[2]; -buff[0]=cast(char,va_arg(argp,int)); -buff[1]='\0'; -pushstr(L,buff); -break; -} -case'd':{ -setnvalue(L->top,cast_num(va_arg(argp,int))); -incr_top(L); -break; -} -case'f':{ -setnvalue(L->top,cast_num(va_arg(argp,l_uacNumber))); -incr_top(L); -break; -} -case'p':{ -char buff[4*sizeof(void*)+8]; -sprintf(buff,"%p",va_arg(argp,void*)); -pushstr(L,buff); -break; -} -case'%':{ -pushstr(L,"%"); -break; -} -default:{ -char buff[3]; -buff[0]='%'; -buff[1]=*(e+1); -buff[2]='\0'; -pushstr(L,buff); -break; -} -} -n+=2; -fmt=e+2; -} -pushstr(L,fmt); -luaV_concat(L,n+1,cast_int(L->top-L->base)-1); -L->top-=n; -return svalue(L->top-1); -} -static const char*luaO_pushfstring(lua_State*L,const char*fmt,...){ -const char*msg; -va_list argp; -va_start(argp,fmt); -msg=luaO_pushvfstring(L,fmt,argp); -va_end(argp); -return msg; -} -static void luaO_chunkid(char*out,const char*source,size_t bufflen){ -if(*source=='='){ -strncpy(out,source+1,bufflen); -out[bufflen-1]='\0'; -} -else{ -if(*source=='@'){ -size_t l; -source++; -bufflen-=sizeof(" '...' "); -l=strlen(source); -strcpy(out,""); -if(l>bufflen){ -source+=(l-bufflen); -strcat(out,"..."); -} -strcat(out,source); -} -else{ -size_t len=strcspn(source,"\n\r"); -bufflen-=sizeof(" [string \"...\"] "); -if(len>bufflen)len=bufflen; -strcpy(out,"[string \""); -if(source[len]!='\0'){ -strncat(out,source,len); -strcat(out,"..."); -} -else -strcat(out,source); -strcat(out,"\"]"); -} -} -} -#define gnode(t,i)(&(t)->node[i]) -#define gkey(n)(&(n)->i_key.nk) -#define gval(n)(&(n)->i_val) -#define gnext(n)((n)->i_key.nk.next) -#define key2tval(n)(&(n)->i_key.tvk) -static TValue*luaH_setnum(lua_State*L,Table*t,int key); -static const TValue*luaH_getstr(Table*t,TString*key); -static TValue*luaH_set(lua_State*L,Table*t,const TValue*key); -static const char*const luaT_typenames[]={ -"nil","boolean","userdata","number", -"string","table","function","userdata","thread", -"proto","upval" -}; -static void luaT_init(lua_State*L){ -static const char*const luaT_eventname[]={ -"__index","__newindex", -"__gc","__mode","__eq", -"__add","__sub","__mul","__div","__mod", -"__pow","__unm","__len","__lt","__le", -"__concat","__call" -}; -int i; -for(i=0;itmname[i]=luaS_new(L,luaT_eventname[i]); -luaS_fix(G(L)->tmname[i]); -} -} -static const TValue*luaT_gettm(Table*events,TMS event,TString*ename){ -const TValue*tm=luaH_getstr(events,ename); -if(ttisnil(tm)){ -events->flags|=cast_byte(1u<metatable; -break; -case 7: -mt=uvalue(o)->metatable; -break; -default: -mt=G(L)->mt[ttype(o)]; -} -return(mt?luaH_getstr(mt,G(L)->tmname[event]):(&luaO_nilobject_)); -} -#define sizeCclosure(n)(cast(int,sizeof(CClosure))+cast(int,sizeof(TValue)*((n)-1))) -#define sizeLclosure(n)(cast(int,sizeof(LClosure))+cast(int,sizeof(TValue*)*((n)-1))) -static Closure*luaF_newCclosure(lua_State*L,int nelems,Table*e){ -Closure*c=cast(Closure*,luaM_malloc(L,sizeCclosure(nelems))); -luaC_link(L,obj2gco(c),6); -c->c.isC=1; -c->c.env=e; -c->c.nupvalues=cast_byte(nelems); -return c; -} -static Closure*luaF_newLclosure(lua_State*L,int nelems,Table*e){ -Closure*c=cast(Closure*,luaM_malloc(L,sizeLclosure(nelems))); -luaC_link(L,obj2gco(c),6); -c->l.isC=0; -c->l.env=e; -c->l.nupvalues=cast_byte(nelems); -while(nelems--)c->l.upvals[nelems]=NULL; -return c; -} -static UpVal*luaF_newupval(lua_State*L){ -UpVal*uv=luaM_new(L,UpVal); -luaC_link(L,obj2gco(uv),(8+2)); -uv->v=&uv->u.value; -setnilvalue(uv->v); -return uv; -} -static UpVal*luaF_findupval(lua_State*L,StkId level){ -global_State*g=G(L); -GCObject**pp=&L->openupval; -UpVal*p; -UpVal*uv; -while(*pp!=NULL&&(p=ngcotouv(*pp))->v>=level){ -if(p->v==level){ -if(isdead(g,obj2gco(p))) -changewhite(obj2gco(p)); -return p; -} -pp=&p->next; -} -uv=luaM_new(L,UpVal); -uv->tt=(8+2); -uv->marked=luaC_white(g); -uv->v=level; -uv->next=*pp; -*pp=obj2gco(uv); -uv->u.l.prev=&g->uvhead; -uv->u.l.next=g->uvhead.u.l.next; -uv->u.l.next->u.l.prev=uv; -g->uvhead.u.l.next=uv; -return uv; -} -static void unlinkupval(UpVal*uv){ -uv->u.l.next->u.l.prev=uv->u.l.prev; -uv->u.l.prev->u.l.next=uv->u.l.next; -} -static void luaF_freeupval(lua_State*L,UpVal*uv){ -if(uv->v!=&uv->u.value) -unlinkupval(uv); -luaM_free(L,uv); -} -static void luaF_close(lua_State*L,StkId level){ -UpVal*uv; -global_State*g=G(L); -while(L->openupval!=NULL&&(uv=ngcotouv(L->openupval))->v>=level){ -GCObject*o=obj2gco(uv); -L->openupval=uv->next; -if(isdead(g,o)) -luaF_freeupval(L,uv); -else{ -unlinkupval(uv); -setobj(L,&uv->u.value,uv->v); -uv->v=&uv->u.value; -luaC_linkupval(L,uv); -} -} -} -static Proto*luaF_newproto(lua_State*L){ -Proto*f=luaM_new(L,Proto); -luaC_link(L,obj2gco(f),(8+1)); -f->k=NULL; -f->sizek=0; -f->p=NULL; -f->sizep=0; -f->code=NULL; -f->sizecode=0; -f->sizelineinfo=0; -f->sizeupvalues=0; -f->nups=0; -f->upvalues=NULL; -f->numparams=0; -f->is_vararg=0; -f->maxstacksize=0; -f->lineinfo=NULL; -f->sizelocvars=0; -f->locvars=NULL; -f->linedefined=0; -f->lastlinedefined=0; -f->source=NULL; -return f; -} -static void luaF_freeproto(lua_State*L,Proto*f){ -luaM_freearray(L,f->code,f->sizecode,Instruction); -luaM_freearray(L,f->p,f->sizep,Proto*); -luaM_freearray(L,f->k,f->sizek,TValue); -luaM_freearray(L,f->lineinfo,f->sizelineinfo,int); -luaM_freearray(L,f->locvars,f->sizelocvars,struct LocVar); -luaM_freearray(L,f->upvalues,f->sizeupvalues,TString*); -luaM_free(L,f); -} -static void luaF_freeclosure(lua_State*L,Closure*c){ -int size=(c->c.isC)?sizeCclosure(c->c.nupvalues): -sizeLclosure(c->l.nupvalues); -luaM_freemem(L,c,size); -} -#define MASK1(n,p)((~((~(Instruction)0)<>0)&MASK1(6,0))) -#define SET_OPCODE(i,o)((i)=(((i)&MASK0(6,0))|((cast(Instruction,o)<<0)&MASK1(6,0)))) -#define GETARG_A(i)(cast(int,((i)>>(0+6))&MASK1(8,0))) -#define SETARG_A(i,u)((i)=(((i)&MASK0(8,(0+6)))|((cast(Instruction,u)<<(0+6))&MASK1(8,(0+6))))) -#define GETARG_B(i)(cast(int,((i)>>(((0+6)+8)+9))&MASK1(9,0))) -#define SETARG_B(i,b)((i)=(((i)&MASK0(9,(((0+6)+8)+9)))|((cast(Instruction,b)<<(((0+6)+8)+9))&MASK1(9,(((0+6)+8)+9))))) -#define GETARG_C(i)(cast(int,((i)>>((0+6)+8))&MASK1(9,0))) -#define SETARG_C(i,b)((i)=(((i)&MASK0(9,((0+6)+8)))|((cast(Instruction,b)<<((0+6)+8))&MASK1(9,((0+6)+8))))) -#define GETARG_Bx(i)(cast(int,((i)>>((0+6)+8))&MASK1((9+9),0))) -#define SETARG_Bx(i,b)((i)=(((i)&MASK0((9+9),((0+6)+8)))|((cast(Instruction,b)<<((0+6)+8))&MASK1((9+9),((0+6)+8))))) -#define GETARG_sBx(i)(GETARG_Bx(i)-(((1<<(9+9))-1)>>1)) -#define SETARG_sBx(i,b)SETARG_Bx((i),cast(unsigned int,(b)+(((1<<(9+9))-1)>>1))) -#define CREATE_ABC(o,a,b,c)((cast(Instruction,o)<<0)|(cast(Instruction,a)<<(0+6))|(cast(Instruction,b)<<(((0+6)+8)+9))|(cast(Instruction,c)<<((0+6)+8))) -#define CREATE_ABx(o,a,bc)((cast(Instruction,o)<<0)|(cast(Instruction,a)<<(0+6))|(cast(Instruction,bc)<<((0+6)+8))) -#define ISK(x)((x)&(1<<(9-1))) -#define INDEXK(r)((int)(r)&~(1<<(9-1))) -#define RKASK(x)((x)|(1<<(9-1))) -static const lu_byte luaP_opmodes[(cast(int,OP_VARARG)+1)]; -#define getBMode(m)(cast(enum OpArgMask,(luaP_opmodes[m]>>4)&3)) -#define getCMode(m)(cast(enum OpArgMask,(luaP_opmodes[m]>>2)&3)) -#define testTMode(m)(luaP_opmodes[m]&(1<<7)) -typedef struct expdesc{ -expkind k; -union{ -struct{int info,aux;}s; -lua_Number nval; -}u; -int t; -int f; -}expdesc; -typedef struct upvaldesc{ -lu_byte k; -lu_byte info; -}upvaldesc; -struct BlockCnt; -typedef struct FuncState{ -Proto*f; -Table*h; -struct FuncState*prev; -struct LexState*ls; -struct lua_State*L; -struct BlockCnt*bl; -int pc; -int lasttarget; -int jpc; -int freereg; -int nk; -int np; -short nlocvars; -lu_byte nactvar; -upvaldesc upvalues[60]; -unsigned short actvar[200]; -}FuncState; -static Proto*luaY_parser(lua_State*L,ZIO*z,Mbuffer*buff, -const char*name); -struct lua_longjmp{ -struct lua_longjmp*previous; -jmp_buf b; -volatile int status; -}; -static void luaD_seterrorobj(lua_State*L,int errcode,StkId oldtop){ -switch(errcode){ -case 4:{ -setsvalue(L,oldtop,luaS_newliteral(L,"not enough memory")); -break; -} -case 5:{ -setsvalue(L,oldtop,luaS_newliteral(L,"error in error handling")); -break; -} -case 3: -case 2:{ -setobj(L,oldtop,L->top-1); -break; -} -} -L->top=oldtop+1; -} -static void restore_stack_limit(lua_State*L){ -if(L->size_ci>20000){ -int inuse=cast_int(L->ci-L->base_ci); -if(inuse+1<20000) -luaD_reallocCI(L,20000); -} -} -static void resetstack(lua_State*L,int status){ -L->ci=L->base_ci; -L->base=L->ci->base; -luaF_close(L,L->base); -luaD_seterrorobj(L,status,L->base); -L->nCcalls=L->baseCcalls; -L->allowhook=1; -restore_stack_limit(L); -L->errfunc=0; -L->errorJmp=NULL; -} -static void luaD_throw(lua_State*L,int errcode){ -if(L->errorJmp){ -L->errorJmp->status=errcode; -LUAI_THROW(L,L->errorJmp); -} -else{ -L->status=cast_byte(errcode); -if(G(L)->panic){ -resetstack(L,errcode); -G(L)->panic(L); -} -exit(EXIT_FAILURE); -} -} -static int luaD_rawrunprotected(lua_State*L,Pfunc f,void*ud){ -struct lua_longjmp lj; -lj.status=0; -lj.previous=L->errorJmp; -L->errorJmp=&lj; -LUAI_TRY(L,&lj, -(*f)(L,ud); -); -L->errorJmp=lj.previous; -return lj.status; -} -static void correctstack(lua_State*L,TValue*oldstack){ -CallInfo*ci; -GCObject*up; -L->top=(L->top-oldstack)+L->stack; -for(up=L->openupval;up!=NULL;up=up->gch.next) -gco2uv(up)->v=(gco2uv(up)->v-oldstack)+L->stack; -for(ci=L->base_ci;ci<=L->ci;ci++){ -ci->top=(ci->top-oldstack)+L->stack; -ci->base=(ci->base-oldstack)+L->stack; -ci->func=(ci->func-oldstack)+L->stack; -} -L->base=(L->base-oldstack)+L->stack; -} -static void luaD_reallocstack(lua_State*L,int newsize){ -TValue*oldstack=L->stack; -int realsize=newsize+1+5; -luaM_reallocvector(L,L->stack,L->stacksize,realsize,TValue); -L->stacksize=realsize; -L->stack_last=L->stack+newsize; -correctstack(L,oldstack); -} -static void luaD_reallocCI(lua_State*L,int newsize){ -CallInfo*oldci=L->base_ci; -luaM_reallocvector(L,L->base_ci,L->size_ci,newsize,CallInfo); -L->size_ci=newsize; -L->ci=(L->ci-oldci)+L->base_ci; -L->end_ci=L->base_ci+L->size_ci-1; -} -static void luaD_growstack(lua_State*L,int n){ -if(n<=L->stacksize) -luaD_reallocstack(L,2*L->stacksize); -else -luaD_reallocstack(L,L->stacksize+n); -} -static CallInfo*growCI(lua_State*L){ -if(L->size_ci>20000) -luaD_throw(L,5); -else{ -luaD_reallocCI(L,2*L->size_ci); -if(L->size_ci>20000) -luaG_runerror(L,"stack overflow"); -} -return++L->ci; -} -static StkId adjust_varargs(lua_State*L,Proto*p,int actual){ -int i; -int nfixargs=p->numparams; -Table*htab=NULL; -StkId base,fixed; -for(;actualtop++); -fixed=L->top-actual; -base=L->top; -for(i=0;itop++,fixed+i); -setnilvalue(fixed+i); -} -if(htab){ -sethvalue(L,L->top++,htab); -} -return base; -} -static StkId tryfuncTM(lua_State*L,StkId func){ -const TValue*tm=luaT_gettmbyobj(L,func,TM_CALL); -StkId p; -ptrdiff_t funcr=savestack(L,func); -if(!ttisfunction(tm)) -luaG_typeerror(L,func,"call"); -for(p=L->top;p>func;p--)setobj(L,p,p-1); -incr_top(L); -func=restorestack(L,funcr); -setobj(L,func,tm); -return func; -} -#define inc_ci(L)((L->ci==L->end_ci)?growCI(L):(condhardstacktests(luaD_reallocCI(L,L->size_ci)),++L->ci)) -static int luaD_precall(lua_State*L,StkId func,int nresults){ -LClosure*cl; -ptrdiff_t funcr; -if(!ttisfunction(func)) -func=tryfuncTM(L,func); -funcr=savestack(L,func); -cl=&clvalue(func)->l; -L->ci->savedpc=L->savedpc; -if(!cl->isC){ -CallInfo*ci; -StkId st,base; -Proto*p=cl->p; -luaD_checkstack(L,p->maxstacksize); -func=restorestack(L,funcr); -if(!p->is_vararg){ -base=func+1; -if(L->top>base+p->numparams) -L->top=base+p->numparams; -} -else{ -int nargs=cast_int(L->top-func)-1; -base=adjust_varargs(L,p,nargs); -func=restorestack(L,funcr); -} -ci=inc_ci(L); -ci->func=func; -L->base=ci->base=base; -ci->top=L->base+p->maxstacksize; -L->savedpc=p->code; -ci->tailcalls=0; -ci->nresults=nresults; -for(st=L->top;sttop;st++) -setnilvalue(st); -L->top=ci->top; -return 0; -} -else{ -CallInfo*ci; -int n; -luaD_checkstack(L,20); -ci=inc_ci(L); -ci->func=restorestack(L,funcr); -L->base=ci->base=ci->func+1; -ci->top=L->top+20; -ci->nresults=nresults; -n=(*curr_func(L)->c.f)(L); -if(n<0) -return 2; -else{ -luaD_poscall(L,L->top-n); -return 1; -} -} -} -static int luaD_poscall(lua_State*L,StkId firstResult){ -StkId res; -int wanted,i; -CallInfo*ci; -ci=L->ci--; -res=ci->func; -wanted=ci->nresults; -L->base=(ci-1)->base; -L->savedpc=(ci-1)->savedpc; -for(i=wanted;i!=0&&firstResulttop;i--) -setobj(L,res++,firstResult++); -while(i-->0) -setnilvalue(res++); -L->top=res; -return(wanted-(-1)); -} -static void luaD_call(lua_State*L,StkId func,int nResults){ -if(++L->nCcalls>=200){ -if(L->nCcalls==200) -luaG_runerror(L,"C stack overflow"); -else if(L->nCcalls>=(200+(200>>3))) -luaD_throw(L,5); -} -if(luaD_precall(L,func,nResults)==0) -luaV_execute(L,1); -L->nCcalls--; -luaC_checkGC(L); -} -static int luaD_pcall(lua_State*L,Pfunc func,void*u, -ptrdiff_t old_top,ptrdiff_t ef){ -int status; -unsigned short oldnCcalls=L->nCcalls; -ptrdiff_t old_ci=saveci(L,L->ci); -lu_byte old_allowhooks=L->allowhook; -ptrdiff_t old_errfunc=L->errfunc; -L->errfunc=ef; -status=luaD_rawrunprotected(L,func,u); -if(status!=0){ -StkId oldtop=restorestack(L,old_top); -luaF_close(L,oldtop); -luaD_seterrorobj(L,status,oldtop); -L->nCcalls=oldnCcalls; -L->ci=restoreci(L,old_ci); -L->base=L->ci->base; -L->savedpc=L->ci->savedpc; -L->allowhook=old_allowhooks; -restore_stack_limit(L); -} -L->errfunc=old_errfunc; -return status; -} -struct SParser{ -ZIO*z; -Mbuffer buff; -const char*name; -}; -static void f_parser(lua_State*L,void*ud){ -int i; -Proto*tf; -Closure*cl; -struct SParser*p=cast(struct SParser*,ud); -luaC_checkGC(L); -tf=luaY_parser(L,p->z, -&p->buff,p->name); -cl=luaF_newLclosure(L,tf->nups,hvalue(gt(L))); -cl->l.p=tf; -for(i=0;inups;i++) -cl->l.upvals[i]=luaF_newupval(L); -setclvalue(L,L->top,cl); -incr_top(L); -} -static int luaD_protectedparser(lua_State*L,ZIO*z,const char*name){ -struct SParser p; -int status; -p.z=z;p.name=name; -luaZ_initbuffer(L,&p.buff); -status=luaD_pcall(L,f_parser,&p,savestack(L,L->top),L->errfunc); -luaZ_freebuffer(L,&p.buff); -return status; -} -static void luaS_resize(lua_State*L,int newsize){ -GCObject**newhash; -stringtable*tb; -int i; -if(G(L)->gcstate==2) -return; -newhash=luaM_newvector(L,newsize,GCObject*); -tb=&G(L)->strt; -for(i=0;isize;i++){ -GCObject*p=tb->hash[i]; -while(p){ -GCObject*next=p->gch.next; -unsigned int h=gco2ts(p)->hash; -int h1=lmod(h,newsize); -p->gch.next=newhash[h1]; -newhash[h1]=p; -p=next; -} -} -luaM_freearray(L,tb->hash,tb->size,TString*); -tb->size=newsize; -tb->hash=newhash; -} -static TString*newlstr(lua_State*L,const char*str,size_t l, -unsigned int h){ -TString*ts; -stringtable*tb; -if(l+1>(((size_t)(~(size_t)0)-2)-sizeof(TString))/sizeof(char)) -luaM_toobig(L); -ts=cast(TString*,luaM_malloc(L,(l+1)*sizeof(char)+sizeof(TString))); -ts->tsv.len=l; -ts->tsv.hash=h; -ts->tsv.marked=luaC_white(G(L)); -ts->tsv.tt=4; -ts->tsv.reserved=0; -memcpy(ts+1,str,l*sizeof(char)); -((char*)(ts+1))[l]='\0'; -tb=&G(L)->strt; -h=lmod(h,tb->size); -ts->tsv.next=tb->hash[h]; -tb->hash[h]=obj2gco(ts); -tb->nuse++; -if(tb->nuse>cast(lu_int32,tb->size)&&tb->size<=(INT_MAX-2)/2) -luaS_resize(L,tb->size*2); -return ts; -} -static TString*luaS_newlstr(lua_State*L,const char*str,size_t l){ -GCObject*o; -unsigned int h=cast(unsigned int,l); -size_t step=(l>>5)+1; -size_t l1; -for(l1=l;l1>=step;l1-=step) -h=h^((h<<5)+(h>>2)+cast(unsigned char,str[l1-1])); -for(o=G(L)->strt.hash[lmod(h,G(L)->strt.size)]; -o!=NULL; -o=o->gch.next){ -TString*ts=rawgco2ts(o); -if(ts->tsv.len==l&&(memcmp(str,getstr(ts),l)==0)){ -if(isdead(G(L),o))changewhite(o); -return ts; -} -} -return newlstr(L,str,l,h); -} -static Udata*luaS_newudata(lua_State*L,size_t s,Table*e){ -Udata*u; -if(s>((size_t)(~(size_t)0)-2)-sizeof(Udata)) -luaM_toobig(L); -u=cast(Udata*,luaM_malloc(L,s+sizeof(Udata))); -u->uv.marked=luaC_white(G(L)); -u->uv.tt=7; -u->uv.len=s; -u->uv.metatable=NULL; -u->uv.env=e; -u->uv.next=G(L)->mainthread->next; -G(L)->mainthread->next=obj2gco(u); -return u; -} -#define hashpow2(t,n)(gnode(t,lmod((n),sizenode(t)))) -#define hashstr(t,str)hashpow2(t,(str)->tsv.hash) -#define hashboolean(t,p)hashpow2(t,p) -#define hashmod(t,n)(gnode(t,((n)%((sizenode(t)-1)|1)))) -#define hashpointer(t,p)hashmod(t,IntPoint(p)) -static const Node dummynode_={ -{{NULL},0}, -{{{NULL},0,NULL}} -}; -static Node*hashnum(const Table*t,lua_Number n){ -unsigned int a[cast_int(sizeof(lua_Number)/sizeof(int))]; -int i; -if(luai_numeq(n,0)) -return gnode(t,0); -memcpy(a,&n,sizeof(a)); -for(i=1;isizearray) -return i-1; -else{ -Node*n=mainposition(t,key); -do{ -if(luaO_rawequalObj(key2tval(n),key)|| -(ttype(gkey(n))==(8+3)&&iscollectable(key)&& -gcvalue(gkey(n))==gcvalue(key))){ -i=cast_int(n-gnode(t,0)); -return i+t->sizearray; -} -else n=gnext(n); -}while(n); -luaG_runerror(L,"invalid key to "LUA_QL("next")); -return 0; -} -} -static int luaH_next(lua_State*L,Table*t,StkId key){ -int i=findindex(L,t,key); -for(i++;isizearray;i++){ -if(!ttisnil(&t->array[i])){ -setnvalue(key,cast_num(i+1)); -setobj(L,key+1,&t->array[i]); -return 1; -} -} -for(i-=t->sizearray;i<(int)sizenode(t);i++){ -if(!ttisnil(gval(gnode(t,i)))){ -setobj(L,key,key2tval(gnode(t,i))); -setobj(L,key+1,gval(gnode(t,i))); -return 1; -} -} -return 0; -} -static int computesizes(int nums[],int*narray){ -int i; -int twotoi; -int a=0; -int na=0; -int n=0; -for(i=0,twotoi=1;twotoi/2<*narray;i++,twotoi*=2){ -if(nums[i]>0){ -a+=nums[i]; -if(a>twotoi/2){ -n=twotoi; -na=a; -} -} -if(a==*narray)break; -} -*narray=n; -return na; -} -static int countint(const TValue*key,int*nums){ -int k=arrayindex(key); -if(0t->sizearray){ -lim=t->sizearray; -if(i>lim) -break; -} -for(;i<=lim;i++){ -if(!ttisnil(&t->array[i-1])) -lc++; -} -nums[lg]+=lc; -ause+=lc; -} -return ause; -} -static int numusehash(const Table*t,int*nums,int*pnasize){ -int totaluse=0; -int ause=0; -int i=sizenode(t); -while(i--){ -Node*n=&t->node[i]; -if(!ttisnil(gval(n))){ -ause+=countint(key2tval(n),nums); -totaluse++; -} -} -*pnasize+=ause; -return totaluse; -} -static void setarrayvector(lua_State*L,Table*t,int size){ -int i; -luaM_reallocvector(L,t->array,t->sizearray,size,TValue); -for(i=t->sizearray;iarray[i]); -t->sizearray=size; -} -static void setnodevector(lua_State*L,Table*t,int size){ -int lsize; -if(size==0){ -t->node=cast(Node*,(&dummynode_)); -lsize=0; -} -else{ -int i; -lsize=ceillog2(size); -if(lsize>(32-2)) -luaG_runerror(L,"table overflow"); -size=twoto(lsize); -t->node=luaM_newvector(L,size,Node); -for(i=0;ilsizenode=cast_byte(lsize); -t->lastfree=gnode(t,size); -} -static void resize(lua_State*L,Table*t,int nasize,int nhsize){ -int i; -int oldasize=t->sizearray; -int oldhsize=t->lsizenode; -Node*nold=t->node; -if(nasize>oldasize) -setarrayvector(L,t,nasize); -setnodevector(L,t,nhsize); -if(nasizesizearray=nasize; -for(i=nasize;iarray[i])) -setobj(L,luaH_setnum(L,t,i+1),&t->array[i]); -} -luaM_reallocvector(L,t->array,oldasize,nasize,TValue); -} -for(i=twoto(oldhsize)-1;i>=0;i--){ -Node*old=nold+i; -if(!ttisnil(gval(old))) -setobj(L,luaH_set(L,t,key2tval(old)),gval(old)); -} -if(nold!=(&dummynode_)) -luaM_freearray(L,nold,twoto(oldhsize),Node); -} -static void luaH_resizearray(lua_State*L,Table*t,int nasize){ -int nsize=(t->node==(&dummynode_))?0:sizenode(t); -resize(L,t,nasize,nsize); -} -static void rehash(lua_State*L,Table*t,const TValue*ek){ -int nasize,na; -int nums[(32-2)+1]; -int i; -int totaluse; -for(i=0;i<=(32-2);i++)nums[i]=0; -nasize=numusearray(t,nums); -totaluse=nasize; -totaluse+=numusehash(t,nums,&nasize); -nasize+=countint(ek,nums); -totaluse++; -na=computesizes(nums,&nasize); -resize(L,t,nasize,totaluse-na); -} -static Table*luaH_new(lua_State*L,int narray,int nhash){ -Table*t=luaM_new(L,Table); -luaC_link(L,obj2gco(t),5); -t->metatable=NULL; -t->flags=cast_byte(~0); -t->array=NULL; -t->sizearray=0; -t->lsizenode=0; -t->node=cast(Node*,(&dummynode_)); -setarrayvector(L,t,narray); -setnodevector(L,t,nhash); -return t; -} -static void luaH_free(lua_State*L,Table*t){ -if(t->node!=(&dummynode_)) -luaM_freearray(L,t->node,sizenode(t),Node); -luaM_freearray(L,t->array,t->sizearray,TValue); -luaM_free(L,t); -} -static Node*getfreepos(Table*t){ -while(t->lastfree-->t->node){ -if(ttisnil(gkey(t->lastfree))) -return t->lastfree; -} -return NULL; -} -static TValue*newkey(lua_State*L,Table*t,const TValue*key){ -Node*mp=mainposition(t,key); -if(!ttisnil(gval(mp))||mp==(&dummynode_)){ -Node*othern; -Node*n=getfreepos(t); -if(n==NULL){ -rehash(L,t,key); -return luaH_set(L,t,key); -} -othern=mainposition(t,key2tval(mp)); -if(othern!=mp){ -while(gnext(othern)!=mp)othern=gnext(othern); -gnext(othern)=n; -*n=*mp; -gnext(mp)=NULL; -setnilvalue(gval(mp)); -} -else{ -gnext(n)=gnext(mp); -gnext(mp)=n; -mp=n; -} -} -gkey(mp)->value=key->value;gkey(mp)->tt=key->tt; -luaC_barriert(L,t,key); -return gval(mp); -} -static const TValue*luaH_getnum(Table*t,int key){ -if(cast(unsigned int,key-1)sizearray)) -return&t->array[key-1]; -else{ -lua_Number nk=cast_num(key); -Node*n=hashnum(t,nk); -do{ -if(ttisnumber(gkey(n))&&luai_numeq(nvalue(gkey(n)),nk)) -return gval(n); -else n=gnext(n); -}while(n); -return(&luaO_nilobject_); -} -} -static const TValue*luaH_getstr(Table*t,TString*key){ -Node*n=hashstr(t,key); -do{ -if(ttisstring(gkey(n))&&rawtsvalue(gkey(n))==key) -return gval(n); -else n=gnext(n); -}while(n); -return(&luaO_nilobject_); -} -static const TValue*luaH_get(Table*t,const TValue*key){ -switch(ttype(key)){ -case 0:return(&luaO_nilobject_); -case 4:return luaH_getstr(t,rawtsvalue(key)); -case 3:{ -int k; -lua_Number n=nvalue(key); -lua_number2int(k,n); -if(luai_numeq(cast_num(k),nvalue(key))) -return luaH_getnum(t,k); -} -default:{ -Node*n=mainposition(t,key); -do{ -if(luaO_rawequalObj(key2tval(n),key)) -return gval(n); -else n=gnext(n); -}while(n); -return(&luaO_nilobject_); -} -} -} -static TValue*luaH_set(lua_State*L,Table*t,const TValue*key){ -const TValue*p=luaH_get(t,key); -t->flags=0; -if(p!=(&luaO_nilobject_)) -return cast(TValue*,p); -else{ -if(ttisnil(key))luaG_runerror(L,"table index is nil"); -else if(ttisnumber(key)&&luai_numisnan(nvalue(key))) -luaG_runerror(L,"table index is NaN"); -return newkey(L,t,key); -} -} -static TValue*luaH_setnum(lua_State*L,Table*t,int key){ -const TValue*p=luaH_getnum(t,key); -if(p!=(&luaO_nilobject_)) -return cast(TValue*,p); -else{ -TValue k; -setnvalue(&k,cast_num(key)); -return newkey(L,t,&k); -} -} -static TValue*luaH_setstr(lua_State*L,Table*t,TString*key){ -const TValue*p=luaH_getstr(t,key); -if(p!=(&luaO_nilobject_)) -return cast(TValue*,p); -else{ -TValue k; -setsvalue(L,&k,key); -return newkey(L,t,&k); -} -} -static int unbound_search(Table*t,unsigned int j){ -unsigned int i=j; -j++; -while(!ttisnil(luaH_getnum(t,j))){ -i=j; -j*=2; -if(j>cast(unsigned int,(INT_MAX-2))){ -i=1; -while(!ttisnil(luaH_getnum(t,i)))i++; -return i-1; -} -} -while(j-i>1){ -unsigned int m=(i+j)/2; -if(ttisnil(luaH_getnum(t,m)))j=m; -else i=m; -} -return i; -} -static int luaH_getn(Table*t){ -unsigned int j=t->sizearray; -if(j>0&&ttisnil(&t->array[j-1])){ -unsigned int i=0; -while(j-i>1){ -unsigned int m=(i+j)/2; -if(ttisnil(&t->array[m-1]))j=m; -else i=m; -} -return i; -} -else if(t->node==(&dummynode_)) -return j; -else return unbound_search(t,j); -} -#define makewhite(g,x)((x)->gch.marked=cast_byte(((x)->gch.marked&cast_byte(~(bitmask(2)|bit2mask(0,1))))|luaC_white(g))) -#define white2gray(x)reset2bits((x)->gch.marked,0,1) -#define black2gray(x)resetbit((x)->gch.marked,2) -#define stringmark(s)reset2bits((s)->tsv.marked,0,1) -#define isfinalized(u)testbit((u)->marked,3) -#define markfinalized(u)l_setbit((u)->marked,3) -#define markvalue(g,o){checkconsistency(o);if(iscollectable(o)&&iswhite(gcvalue(o)))reallymarkobject(g,gcvalue(o));} -#define markobject(g,t){if(iswhite(obj2gco(t)))reallymarkobject(g,obj2gco(t));} -#define setthreshold(g)(g->GCthreshold=(g->estimate/100)*g->gcpause) -static void removeentry(Node*n){ -if(iscollectable(gkey(n))) -setttype(gkey(n),(8+3)); -} -static void reallymarkobject(global_State*g,GCObject*o){ -white2gray(o); -switch(o->gch.tt){ -case 4:{ -return; -} -case 7:{ -Table*mt=gco2u(o)->metatable; -gray2black(o); -if(mt)markobject(g,mt); -markobject(g,gco2u(o)->env); -return; -} -case(8+2):{ -UpVal*uv=gco2uv(o); -markvalue(g,uv->v); -if(uv->v==&uv->u.value) -gray2black(o); -return; -} -case 6:{ -gco2cl(o)->c.gclist=g->gray; -g->gray=o; -break; -} -case 5:{ -gco2h(o)->gclist=g->gray; -g->gray=o; -break; -} -case 8:{ -gco2th(o)->gclist=g->gray; -g->gray=o; -break; -} -case(8+1):{ -gco2p(o)->gclist=g->gray; -g->gray=o; -break; -} -default:; -} -} -static void marktmu(global_State*g){ -GCObject*u=g->tmudata; -if(u){ -do{ -u=u->gch.next; -makewhite(g,u); -reallymarkobject(g,u); -}while(u!=g->tmudata); -} -} -static size_t luaC_separateudata(lua_State*L,int all){ -global_State*g=G(L); -size_t deadmem=0; -GCObject**p=&g->mainthread->next; -GCObject*curr; -while((curr=*p)!=NULL){ -if(!(iswhite(curr)||all)||isfinalized(gco2u(curr))) -p=&curr->gch.next; -else if(fasttm(L,gco2u(curr)->metatable,TM_GC)==NULL){ -markfinalized(gco2u(curr)); -p=&curr->gch.next; -} -else{ -deadmem+=sizeudata(gco2u(curr)); -markfinalized(gco2u(curr)); -*p=curr->gch.next; -if(g->tmudata==NULL) -g->tmudata=curr->gch.next=curr; -else{ -curr->gch.next=g->tmudata->gch.next; -g->tmudata->gch.next=curr; -g->tmudata=curr; -} -} -} -return deadmem; -} -static int traversetable(global_State*g,Table*h){ -int i; -int weakkey=0; -int weakvalue=0; -const TValue*mode; -if(h->metatable) -markobject(g,h->metatable); -mode=gfasttm(g,h->metatable,TM_MODE); -if(mode&&ttisstring(mode)){ -weakkey=(strchr(svalue(mode),'k')!=NULL); -weakvalue=(strchr(svalue(mode),'v')!=NULL); -if(weakkey||weakvalue){ -h->marked&=~(bitmask(3)|bitmask(4)); -h->marked|=cast_byte((weakkey<<3)| -(weakvalue<<4)); -h->gclist=g->weak; -g->weak=obj2gco(h); -} -} -if(weakkey&&weakvalue)return 1; -if(!weakvalue){ -i=h->sizearray; -while(i--) -markvalue(g,&h->array[i]); -} -i=sizenode(h); -while(i--){ -Node*n=gnode(h,i); -if(ttisnil(gval(n))) -removeentry(n); -else{ -if(!weakkey)markvalue(g,gkey(n)); -if(!weakvalue)markvalue(g,gval(n)); -} -} -return weakkey||weakvalue; -} -static void traverseproto(global_State*g,Proto*f){ -int i; -if(f->source)stringmark(f->source); -for(i=0;isizek;i++) -markvalue(g,&f->k[i]); -for(i=0;isizeupvalues;i++){ -if(f->upvalues[i]) -stringmark(f->upvalues[i]); -} -for(i=0;isizep;i++){ -if(f->p[i]) -markobject(g,f->p[i]); -} -for(i=0;isizelocvars;i++){ -if(f->locvars[i].varname) -stringmark(f->locvars[i].varname); -} -} -static void traverseclosure(global_State*g,Closure*cl){ -markobject(g,cl->c.env); -if(cl->c.isC){ -int i; -for(i=0;ic.nupvalues;i++) -markvalue(g,&cl->c.upvalue[i]); -} -else{ -int i; -markobject(g,cl->l.p); -for(i=0;il.nupvalues;i++) -markobject(g,cl->l.upvals[i]); -} -} -static void checkstacksizes(lua_State*L,StkId max){ -int ci_used=cast_int(L->ci-L->base_ci); -int s_used=cast_int(max-L->stack); -if(L->size_ci>20000) -return; -if(4*ci_usedsize_ci&&2*8size_ci) -luaD_reallocCI(L,L->size_ci/2); -condhardstacktests(luaD_reallocCI(L,ci_used+1)); -if(4*s_usedstacksize&& -2*((2*20)+5)stacksize) -luaD_reallocstack(L,L->stacksize/2); -condhardstacktests(luaD_reallocstack(L,s_used)); -} -static void traversestack(global_State*g,lua_State*l){ -StkId o,lim; -CallInfo*ci; -markvalue(g,gt(l)); -lim=l->top; -for(ci=l->base_ci;ci<=l->ci;ci++){ -if(limtop)lim=ci->top; -} -for(o=l->stack;otop;o++) -markvalue(g,o); -for(;o<=lim;o++) -setnilvalue(o); -checkstacksizes(l,lim); -} -static l_mem propagatemark(global_State*g){ -GCObject*o=g->gray; -gray2black(o); -switch(o->gch.tt){ -case 5:{ -Table*h=gco2h(o); -g->gray=h->gclist; -if(traversetable(g,h)) -black2gray(o); -return sizeof(Table)+sizeof(TValue)*h->sizearray+ -sizeof(Node)*sizenode(h); -} -case 6:{ -Closure*cl=gco2cl(o); -g->gray=cl->c.gclist; -traverseclosure(g,cl); -return(cl->c.isC)?sizeCclosure(cl->c.nupvalues): -sizeLclosure(cl->l.nupvalues); -} -case 8:{ -lua_State*th=gco2th(o); -g->gray=th->gclist; -th->gclist=g->grayagain; -g->grayagain=o; -black2gray(o); -traversestack(g,th); -return sizeof(lua_State)+sizeof(TValue)*th->stacksize+ -sizeof(CallInfo)*th->size_ci; -} -case(8+1):{ -Proto*p=gco2p(o); -g->gray=p->gclist; -traverseproto(g,p); -return sizeof(Proto)+sizeof(Instruction)*p->sizecode+ -sizeof(Proto*)*p->sizep+ -sizeof(TValue)*p->sizek+ -sizeof(int)*p->sizelineinfo+ -sizeof(LocVar)*p->sizelocvars+ -sizeof(TString*)*p->sizeupvalues; -} -default:return 0; -} -} -static size_t propagateall(global_State*g){ -size_t m=0; -while(g->gray)m+=propagatemark(g); -return m; -} -static int iscleared(const TValue*o,int iskey){ -if(!iscollectable(o))return 0; -if(ttisstring(o)){ -stringmark(rawtsvalue(o)); -return 0; -} -return iswhite(gcvalue(o))|| -(ttisuserdata(o)&&(!iskey&&isfinalized(uvalue(o)))); -} -static void cleartable(GCObject*l){ -while(l){ -Table*h=gco2h(l); -int i=h->sizearray; -if(testbit(h->marked,4)){ -while(i--){ -TValue*o=&h->array[i]; -if(iscleared(o,0)) -setnilvalue(o); -} -} -i=sizenode(h); -while(i--){ -Node*n=gnode(h,i); -if(!ttisnil(gval(n))&& -(iscleared(key2tval(n),1)||iscleared(gval(n),0))){ -setnilvalue(gval(n)); -removeentry(n); -} -} -l=h->gclist; -} -} -static void freeobj(lua_State*L,GCObject*o){ -switch(o->gch.tt){ -case(8+1):luaF_freeproto(L,gco2p(o));break; -case 6:luaF_freeclosure(L,gco2cl(o));break; -case(8+2):luaF_freeupval(L,gco2uv(o));break; -case 5:luaH_free(L,gco2h(o));break; -case 8:{ -luaE_freethread(L,gco2th(o)); -break; -} -case 4:{ -G(L)->strt.nuse--; -luaM_freemem(L,o,sizestring(gco2ts(o))); -break; -} -case 7:{ -luaM_freemem(L,o,sizeudata(gco2u(o))); -break; -} -default:; -} -} -#define sweepwholelist(L,p)sweeplist(L,p,((lu_mem)(~(lu_mem)0)-2)) -static GCObject**sweeplist(lua_State*L,GCObject**p,lu_mem count){ -GCObject*curr; -global_State*g=G(L); -int deadmask=otherwhite(g); -while((curr=*p)!=NULL&&count-->0){ -if(curr->gch.tt==8) -sweepwholelist(L,&gco2th(curr)->openupval); -if((curr->gch.marked^bit2mask(0,1))&deadmask){ -makewhite(g,curr); -p=&curr->gch.next; -} -else{ -*p=curr->gch.next; -if(curr==g->rootgc) -g->rootgc=curr->gch.next; -freeobj(L,curr); -} -} -return p; -} -static void checkSizes(lua_State*L){ -global_State*g=G(L); -if(g->strt.nusestrt.size/4)&& -g->strt.size>32*2) -luaS_resize(L,g->strt.size/2); -if(luaZ_sizebuffer(&g->buff)>32*2){ -size_t newsize=luaZ_sizebuffer(&g->buff)/2; -luaZ_resizebuffer(L,&g->buff,newsize); -} -} -static void GCTM(lua_State*L){ -global_State*g=G(L); -GCObject*o=g->tmudata->gch.next; -Udata*udata=rawgco2u(o); -const TValue*tm; -if(o==g->tmudata) -g->tmudata=NULL; -else -g->tmudata->gch.next=udata->uv.next; -udata->uv.next=g->mainthread->next; -g->mainthread->next=o; -makewhite(g,o); -tm=fasttm(L,udata->uv.metatable,TM_GC); -if(tm!=NULL){ -lu_byte oldah=L->allowhook; -lu_mem oldt=g->GCthreshold; -L->allowhook=0; -g->GCthreshold=2*g->totalbytes; -setobj(L,L->top,tm); -setuvalue(L,L->top+1,udata); -L->top+=2; -luaD_call(L,L->top-2,0); -L->allowhook=oldah; -g->GCthreshold=oldt; -} -} -static void luaC_callGCTM(lua_State*L){ -while(G(L)->tmudata) -GCTM(L); -} -static void luaC_freeall(lua_State*L){ -global_State*g=G(L); -int i; -g->currentwhite=bit2mask(0,1)|bitmask(6); -sweepwholelist(L,&g->rootgc); -for(i=0;istrt.size;i++) -sweepwholelist(L,&g->strt.hash[i]); -} -static void markmt(global_State*g){ -int i; -for(i=0;i<(8+1);i++) -if(g->mt[i])markobject(g,g->mt[i]); -} -static void markroot(lua_State*L){ -global_State*g=G(L); -g->gray=NULL; -g->grayagain=NULL; -g->weak=NULL; -markobject(g,g->mainthread); -markvalue(g,gt(g->mainthread)); -markvalue(g,registry(L)); -markmt(g); -g->gcstate=1; -} -static void remarkupvals(global_State*g){ -UpVal*uv; -for(uv=g->uvhead.u.l.next;uv!=&g->uvhead;uv=uv->u.l.next){ -if(isgray(obj2gco(uv))) -markvalue(g,uv->v); -} -} -static void atomic(lua_State*L){ -global_State*g=G(L); -size_t udsize; -remarkupvals(g); -propagateall(g); -g->gray=g->weak; -g->weak=NULL; -markobject(g,L); -markmt(g); -propagateall(g); -g->gray=g->grayagain; -g->grayagain=NULL; -propagateall(g); -udsize=luaC_separateudata(L,0); -marktmu(g); -udsize+=propagateall(g); -cleartable(g->weak); -g->currentwhite=cast_byte(otherwhite(g)); -g->sweepstrgc=0; -g->sweepgc=&g->rootgc; -g->gcstate=2; -g->estimate=g->totalbytes-udsize; -} -static l_mem singlestep(lua_State*L){ -global_State*g=G(L); -switch(g->gcstate){ -case 0:{ -markroot(L); -return 0; -} -case 1:{ -if(g->gray) -return propagatemark(g); -else{ -atomic(L); -return 0; -} -} -case 2:{ -lu_mem old=g->totalbytes; -sweepwholelist(L,&g->strt.hash[g->sweepstrgc++]); -if(g->sweepstrgc>=g->strt.size) -g->gcstate=3; -g->estimate-=old-g->totalbytes; -return 10; -} -case 3:{ -lu_mem old=g->totalbytes; -g->sweepgc=sweeplist(L,g->sweepgc,40); -if(*g->sweepgc==NULL){ -checkSizes(L); -g->gcstate=4; -} -g->estimate-=old-g->totalbytes; -return 40*10; -} -case 4:{ -if(g->tmudata){ -GCTM(L); -if(g->estimate>100) -g->estimate-=100; -return 100; -} -else{ -g->gcstate=0; -g->gcdept=0; -return 0; -} -} -default:return 0; -} -} -static void luaC_step(lua_State*L){ -global_State*g=G(L); -l_mem lim=(1024u/100)*g->gcstepmul; -if(lim==0) -lim=(((lu_mem)(~(lu_mem)0)-2)-1)/2; -g->gcdept+=g->totalbytes-g->GCthreshold; -do{ -lim-=singlestep(L); -if(g->gcstate==0) -break; -}while(lim>0); -if(g->gcstate!=0){ -if(g->gcdept<1024u) -g->GCthreshold=g->totalbytes+1024u; -else{ -g->gcdept-=1024u; -g->GCthreshold=g->totalbytes; -} -} -else{ -setthreshold(g); -} -} -static void luaC_barrierf(lua_State*L,GCObject*o,GCObject*v){ -global_State*g=G(L); -if(g->gcstate==1) -reallymarkobject(g,v); -else -makewhite(g,o); -} -static void luaC_barrierback(lua_State*L,Table*t){ -global_State*g=G(L); -GCObject*o=obj2gco(t); -black2gray(o); -t->gclist=g->grayagain; -g->grayagain=o; -} -static void luaC_link(lua_State*L,GCObject*o,lu_byte tt){ -global_State*g=G(L); -o->gch.next=g->rootgc; -g->rootgc=o; -o->gch.marked=luaC_white(g); -o->gch.tt=tt; -} -static void luaC_linkupval(lua_State*L,UpVal*uv){ -global_State*g=G(L); -GCObject*o=obj2gco(uv); -o->gch.next=g->rootgc; -g->rootgc=o; -if(isgray(o)){ -if(g->gcstate==1){ -gray2black(o); -luaC_barrier(L,uv,uv->v); -} -else{ -makewhite(g,o); -} -} -} -typedef union{ -lua_Number r; -TString*ts; -}SemInfo; -typedef struct Token{ -int token; -SemInfo seminfo; -}Token; -typedef struct LexState{ -int current; -int linenumber; -int lastline; -Token t; -Token lookahead; -struct FuncState*fs; -struct lua_State*L; -ZIO*z; -Mbuffer*buff; -TString*source; -char decpoint; -}LexState; -static void luaX_init(lua_State*L); -static void luaX_lexerror(LexState*ls,const char*msg,int token); -#define state_size(x)(sizeof(x)+0) -#define fromstate(l)(cast(lu_byte*,(l))-0) -#define tostate(l)(cast(lua_State*,cast(lu_byte*,l)+0)) -typedef struct LG{ -lua_State l; -global_State g; -}LG; -static void stack_init(lua_State*L1,lua_State*L){ -L1->base_ci=luaM_newvector(L,8,CallInfo); -L1->ci=L1->base_ci; -L1->size_ci=8; -L1->end_ci=L1->base_ci+L1->size_ci-1; -L1->stack=luaM_newvector(L,(2*20)+5,TValue); -L1->stacksize=(2*20)+5; -L1->top=L1->stack; -L1->stack_last=L1->stack+(L1->stacksize-5)-1; -L1->ci->func=L1->top; -setnilvalue(L1->top++); -L1->base=L1->ci->base=L1->top; -L1->ci->top=L1->top+20; -} -static void freestack(lua_State*L,lua_State*L1){ -luaM_freearray(L,L1->base_ci,L1->size_ci,CallInfo); -luaM_freearray(L,L1->stack,L1->stacksize,TValue); -} -static void f_luaopen(lua_State*L,void*ud){ -global_State*g=G(L); -UNUSED(ud); -stack_init(L,L); -sethvalue(L,gt(L),luaH_new(L,0,2)); -sethvalue(L,registry(L),luaH_new(L,0,2)); -luaS_resize(L,32); -luaT_init(L); -luaX_init(L); -luaS_fix(luaS_newliteral(L,"not enough memory")); -g->GCthreshold=4*g->totalbytes; -} -static void preinit_state(lua_State*L,global_State*g){ -G(L)=g; -L->stack=NULL; -L->stacksize=0; -L->errorJmp=NULL; -L->hook=NULL; -L->hookmask=0; -L->basehookcount=0; -L->allowhook=1; -resethookcount(L); -L->openupval=NULL; -L->size_ci=0; -L->nCcalls=L->baseCcalls=0; -L->status=0; -L->base_ci=L->ci=NULL; -L->savedpc=NULL; -L->errfunc=0; -setnilvalue(gt(L)); -} -static void close_state(lua_State*L){ -global_State*g=G(L); -luaF_close(L,L->stack); -luaC_freeall(L); -luaM_freearray(L,G(L)->strt.hash,G(L)->strt.size,TString*); -luaZ_freebuffer(L,&g->buff); -freestack(L,L); -(*g->frealloc)(g->ud,fromstate(L),state_size(LG),0); -} -static void luaE_freethread(lua_State*L,lua_State*L1){ -luaF_close(L1,L1->stack); -freestack(L,L1); -luaM_freemem(L,fromstate(L1),state_size(lua_State)); -} -static lua_State*lua_newstate(lua_Alloc f,void*ud){ -int i; -lua_State*L; -global_State*g; -void*l=(*f)(ud,NULL,0,state_size(LG)); -if(l==NULL)return NULL; -L=tostate(l); -g=&((LG*)L)->g; -L->next=NULL; -L->tt=8; -g->currentwhite=bit2mask(0,5); -L->marked=luaC_white(g); -set2bits(L->marked,5,6); -preinit_state(L,g); -g->frealloc=f; -g->ud=ud; -g->mainthread=L; -g->uvhead.u.l.prev=&g->uvhead; -g->uvhead.u.l.next=&g->uvhead; -g->GCthreshold=0; -g->strt.size=0; -g->strt.nuse=0; -g->strt.hash=NULL; -setnilvalue(registry(L)); -luaZ_initbuffer(L,&g->buff); -g->panic=NULL; -g->gcstate=0; -g->rootgc=obj2gco(L); -g->sweepstrgc=0; -g->sweepgc=&g->rootgc; -g->gray=NULL; -g->grayagain=NULL; -g->weak=NULL; -g->tmudata=NULL; -g->totalbytes=sizeof(LG); -g->gcpause=200; -g->gcstepmul=200; -g->gcdept=0; -for(i=0;i<(8+1);i++)g->mt[i]=NULL; -if(luaD_rawrunprotected(L,f_luaopen,NULL)!=0){ -close_state(L); -L=NULL; -} -else -{} -return L; -} -static void callallgcTM(lua_State*L,void*ud){ -UNUSED(ud); -luaC_callGCTM(L); -} -static void lua_close(lua_State*L){ -L=G(L)->mainthread; -luaF_close(L,L->stack); -luaC_separateudata(L,1); -L->errfunc=0; -do{ -L->ci=L->base_ci; -L->base=L->top=L->ci->base; -L->nCcalls=L->baseCcalls=0; -}while(luaD_rawrunprotected(L,callallgcTM,NULL)!=0); -close_state(L); -} -#define getcode(fs,e)((fs)->f->code[(e)->u.s.info]) -#define luaK_codeAsBx(fs,o,A,sBx)luaK_codeABx(fs,o,A,(sBx)+(((1<<(9+9))-1)>>1)) -#define luaK_setmultret(fs,e)luaK_setreturns(fs,e,(-1)) -static int luaK_codeABx(FuncState*fs,OpCode o,int A,unsigned int Bx); -static int luaK_codeABC(FuncState*fs,OpCode o,int A,int B,int C); -static void luaK_setreturns(FuncState*fs,expdesc*e,int nresults); -static void luaK_patchtohere(FuncState*fs,int list); -static void luaK_concat(FuncState*fs,int*l1,int l2); -static int currentpc(lua_State*L,CallInfo*ci){ -if(!isLua(ci))return-1; -if(ci==L->ci) -ci->savedpc=L->savedpc; -return pcRel(ci->savedpc,ci_func(ci)->l.p); -} -static int currentline(lua_State*L,CallInfo*ci){ -int pc=currentpc(L,ci); -if(pc<0) -return-1; -else -return getline_(ci_func(ci)->l.p,pc); -} -static int lua_getstack(lua_State*L,int level,lua_Debug*ar){ -int status; -CallInfo*ci; -for(ci=L->ci;level>0&&ci>L->base_ci;ci--){ -level--; -if(f_isLua(ci)) -level-=ci->tailcalls; -} -if(level==0&&ci>L->base_ci){ -status=1; -ar->i_ci=cast_int(ci-L->base_ci); -} -else if(level<0){ -status=1; -ar->i_ci=0; -} -else status=0; -return status; -} -static Proto*getluaproto(CallInfo*ci){ -return(isLua(ci)?ci_func(ci)->l.p:NULL); -} -static void funcinfo(lua_Debug*ar,Closure*cl){ -if(cl->c.isC){ -ar->source="=[C]"; -ar->linedefined=-1; -ar->lastlinedefined=-1; -ar->what="C"; -} -else{ -ar->source=getstr(cl->l.p->source); -ar->linedefined=cl->l.p->linedefined; -ar->lastlinedefined=cl->l.p->lastlinedefined; -ar->what=(ar->linedefined==0)?"main":"Lua"; -} -luaO_chunkid(ar->short_src,ar->source,60); -} -static void info_tailcall(lua_Debug*ar){ -ar->name=ar->namewhat=""; -ar->what="tail"; -ar->lastlinedefined=ar->linedefined=ar->currentline=-1; -ar->source="=(tail call)"; -luaO_chunkid(ar->short_src,ar->source,60); -ar->nups=0; -} -static void collectvalidlines(lua_State*L,Closure*f){ -if(f==NULL||f->c.isC){ -setnilvalue(L->top); -} -else{ -Table*t=luaH_new(L,0,0); -int*lineinfo=f->l.p->lineinfo; -int i; -for(i=0;il.p->sizelineinfo;i++) -setbvalue(luaH_setnum(L,t,lineinfo[i]),1); -sethvalue(L,L->top,t); -} -incr_top(L); -} -static int auxgetinfo(lua_State*L,const char*what,lua_Debug*ar, -Closure*f,CallInfo*ci){ -int status=1; -if(f==NULL){ -info_tailcall(ar); -return status; -} -for(;*what;what++){ -switch(*what){ -case'S':{ -funcinfo(ar,f); -break; -} -case'l':{ -ar->currentline=(ci)?currentline(L,ci):-1; -break; -} -case'u':{ -ar->nups=f->c.nupvalues; -break; -} -case'n':{ -ar->namewhat=(ci)?NULL:NULL; -if(ar->namewhat==NULL){ -ar->namewhat=""; -ar->name=NULL; -} -break; -} -case'L': -case'f': -break; -default:status=0; -} -} -return status; -} -static int lua_getinfo(lua_State*L,const char*what,lua_Debug*ar){ -int status; -Closure*f=NULL; -CallInfo*ci=NULL; -if(*what=='>'){ -StkId func=L->top-1; -luai_apicheck(L,ttisfunction(func)); -what++; -f=clvalue(func); -L->top--; -} -else if(ar->i_ci!=0){ -ci=L->base_ci+ar->i_ci; -f=clvalue(ci->func); -} -status=auxgetinfo(L,what,ar,f,ci); -if(strchr(what,'f')){ -if(f==NULL)setnilvalue(L->top); -else setclvalue(L,L->top,f); -incr_top(L); -} -if(strchr(what,'L')) -collectvalidlines(L,f); -return status; -} -static int isinstack(CallInfo*ci,const TValue*o){ -StkId p; -for(p=ci->base;ptop;p++) -if(o==p)return 1; -return 0; -} -static void luaG_typeerror(lua_State*L,const TValue*o,const char*op){ -const char*name=NULL; -const char*t=luaT_typenames[ttype(o)]; -const char*kind=(isinstack(L->ci,o))? -NULL: -NULL; -if(kind) -luaG_runerror(L,"attempt to %s %s "LUA_QL("%s")" (a %s value)", -op,kind,name,t); -else -luaG_runerror(L,"attempt to %s a %s value",op,t); -} -static void luaG_concaterror(lua_State*L,StkId p1,StkId p2){ -if(ttisstring(p1)||ttisnumber(p1))p1=p2; -luaG_typeerror(L,p1,"concatenate"); -} -static void luaG_aritherror(lua_State*L,const TValue*p1,const TValue*p2){ -TValue temp; -if(luaV_tonumber(p1,&temp)==NULL) -p2=p1; -luaG_typeerror(L,p2,"perform arithmetic on"); -} -static int luaG_ordererror(lua_State*L,const TValue*p1,const TValue*p2){ -const char*t1=luaT_typenames[ttype(p1)]; -const char*t2=luaT_typenames[ttype(p2)]; -if(t1[2]==t2[2]) -luaG_runerror(L,"attempt to compare two %s values",t1); -else -luaG_runerror(L,"attempt to compare %s with %s",t1,t2); -return 0; -} -static void addinfo(lua_State*L,const char*msg){ -CallInfo*ci=L->ci; -if(isLua(ci)){ -char buff[60]; -int line=currentline(L,ci); -luaO_chunkid(buff,getstr(getluaproto(ci)->source),60); -luaO_pushfstring(L,"%s:%d: %s",buff,line,msg); -} -} -static void luaG_errormsg(lua_State*L){ -if(L->errfunc!=0){ -StkId errfunc=restorestack(L,L->errfunc); -if(!ttisfunction(errfunc))luaD_throw(L,5); -setobj(L,L->top,L->top-1); -setobj(L,L->top-1,errfunc); -incr_top(L); -luaD_call(L,L->top-2,1); -} -luaD_throw(L,2); -} -static void luaG_runerror(lua_State*L,const char*fmt,...){ -va_list argp; -va_start(argp,fmt); -addinfo(L,luaO_pushvfstring(L,fmt,argp)); -va_end(argp); -luaG_errormsg(L); -} -static int luaZ_fill(ZIO*z){ -size_t size; -lua_State*L=z->L; -const char*buff; -buff=z->reader(L,z->data,&size); -if(buff==NULL||size==0)return(-1); -z->n=size-1; -z->p=buff; -return char2int(*(z->p++)); -} -static void luaZ_init(lua_State*L,ZIO*z,lua_Reader reader,void*data){ -z->L=L; -z->reader=reader; -z->data=data; -z->n=0; -z->p=NULL; -} -static char*luaZ_openspace(lua_State*L,Mbuffer*buff,size_t n){ -if(n>buff->buffsize){ -if(n<32)n=32; -luaZ_resizebuffer(L,buff,n); -} -return buff->buffer; -} -#define opmode(t,a,b,c,m)(((t)<<7)|((a)<<6)|((b)<<4)|((c)<<2)|(m)) -static const lu_byte luaP_opmodes[(cast(int,OP_VARARG)+1)]={ -opmode(0,1,OpArgR,OpArgN,iABC) -,opmode(0,1,OpArgK,OpArgN,iABx) -,opmode(0,1,OpArgU,OpArgU,iABC) -,opmode(0,1,OpArgR,OpArgN,iABC) -,opmode(0,1,OpArgU,OpArgN,iABC) -,opmode(0,1,OpArgK,OpArgN,iABx) -,opmode(0,1,OpArgR,OpArgK,iABC) -,opmode(0,0,OpArgK,OpArgN,iABx) -,opmode(0,0,OpArgU,OpArgN,iABC) -,opmode(0,0,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgU,OpArgU,iABC) -,opmode(0,1,OpArgR,OpArgK,iABC) -,opmode(0,1,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgK,OpArgK,iABC) -,opmode(0,1,OpArgR,OpArgN,iABC) -,opmode(0,1,OpArgR,OpArgN,iABC) -,opmode(0,1,OpArgR,OpArgN,iABC) -,opmode(0,1,OpArgR,OpArgR,iABC) -,opmode(0,0,OpArgR,OpArgN,iAsBx) -,opmode(1,0,OpArgK,OpArgK,iABC) -,opmode(1,0,OpArgK,OpArgK,iABC) -,opmode(1,0,OpArgK,OpArgK,iABC) -,opmode(1,1,OpArgR,OpArgU,iABC) -,opmode(1,1,OpArgR,OpArgU,iABC) -,opmode(0,1,OpArgU,OpArgU,iABC) -,opmode(0,1,OpArgU,OpArgU,iABC) -,opmode(0,0,OpArgU,OpArgN,iABC) -,opmode(0,1,OpArgR,OpArgN,iAsBx) -,opmode(0,1,OpArgR,OpArgN,iAsBx) -,opmode(1,0,OpArgN,OpArgU,iABC) -,opmode(0,0,OpArgU,OpArgU,iABC) -,opmode(0,0,OpArgN,OpArgN,iABC) -,opmode(0,1,OpArgU,OpArgN,iABx) -,opmode(0,1,OpArgU,OpArgN,iABC) -}; -#define next(ls)(ls->current=zgetc(ls->z)) -#define currIsNewline(ls)(ls->current=='\n'||ls->current=='\r') -static const char*const luaX_tokens[]={ -"and","break","do","else","elseif", -"end","false","for","function","if", -"in","local","nil","not","or","repeat", -"return","then","true","until","while", -"..","...","==",">=","<=","~=", -"","","","", -NULL -}; -#define save_and_next(ls)(save(ls,ls->current),next(ls)) -static void save(LexState*ls,int c){ -Mbuffer*b=ls->buff; -if(b->n+1>b->buffsize){ -size_t newsize; -if(b->buffsize>=((size_t)(~(size_t)0)-2)/2) -luaX_lexerror(ls,"lexical element too long",0); -newsize=b->buffsize*2; -luaZ_resizebuffer(ls->L,b,newsize); -} -b->buffer[b->n++]=cast(char,c); -} -static void luaX_init(lua_State*L){ -int i; -for(i=0;i<(cast(int,TK_WHILE-257+1));i++){ -TString*ts=luaS_new(L,luaX_tokens[i]); -luaS_fix(ts); -ts->tsv.reserved=cast_byte(i+1); -} -} -static const char*luaX_token2str(LexState*ls,int token){ -if(token<257){ -return(iscntrl(token))?luaO_pushfstring(ls->L,"char(%d)",token): -luaO_pushfstring(ls->L,"%c",token); -} -else -return luaX_tokens[token-257]; -} -static const char*txtToken(LexState*ls,int token){ -switch(token){ -case TK_NAME: -case TK_STRING: -case TK_NUMBER: -save(ls,'\0'); -return luaZ_buffer(ls->buff); -default: -return luaX_token2str(ls,token); -} -} -static void luaX_lexerror(LexState*ls,const char*msg,int token){ -char buff[80]; -luaO_chunkid(buff,getstr(ls->source),80); -msg=luaO_pushfstring(ls->L,"%s:%d: %s",buff,ls->linenumber,msg); -if(token) -luaO_pushfstring(ls->L,"%s near "LUA_QL("%s"),msg,txtToken(ls,token)); -luaD_throw(ls->L,3); -} -static void luaX_syntaxerror(LexState*ls,const char*msg){ -luaX_lexerror(ls,msg,ls->t.token); -} -static TString*luaX_newstring(LexState*ls,const char*str,size_t l){ -lua_State*L=ls->L; -TString*ts=luaS_newlstr(L,str,l); -TValue*o=luaH_setstr(L,ls->fs->h,ts); -if(ttisnil(o)){ -setbvalue(o,1); -luaC_checkGC(L); -} -return ts; -} -static void inclinenumber(LexState*ls){ -int old=ls->current; -next(ls); -if(currIsNewline(ls)&&ls->current!=old) -next(ls); -if(++ls->linenumber>=(INT_MAX-2)) -luaX_syntaxerror(ls,"chunk has too many lines"); -} -static void luaX_setinput(lua_State*L,LexState*ls,ZIO*z,TString*source){ -ls->decpoint='.'; -ls->L=L; -ls->lookahead.token=TK_EOS; -ls->z=z; -ls->fs=NULL; -ls->linenumber=1; -ls->lastline=1; -ls->source=source; -luaZ_resizebuffer(ls->L,ls->buff,32); -next(ls); -} -static int check_next(LexState*ls,const char*set){ -if(!strchr(set,ls->current)) -return 0; -save_and_next(ls); -return 1; -} -static void buffreplace(LexState*ls,char from,char to){ -size_t n=luaZ_bufflen(ls->buff); -char*p=luaZ_buffer(ls->buff); -while(n--) -if(p[n]==from)p[n]=to; -} -static void read_numeral(LexState*ls,SemInfo*seminfo){ -do{ -save_and_next(ls); -}while(isdigit(ls->current)||ls->current=='.'); -if(check_next(ls,"Ee")) -check_next(ls,"+-"); -while(isalnum(ls->current)||ls->current=='_') -save_and_next(ls); -save(ls,'\0'); -buffreplace(ls,'.',ls->decpoint); -if(!luaO_str2d(luaZ_buffer(ls->buff),&seminfo->r)) -luaX_lexerror(ls,"malformed number",TK_NUMBER); -} -static int skip_sep(LexState*ls){ -int count=0; -int s=ls->current; -save_and_next(ls); -while(ls->current=='='){ -save_and_next(ls); -count++; -} -return(ls->current==s)?count:(-count)-1; -} -static void read_long_string(LexState*ls,SemInfo*seminfo,int sep){ -int cont=0; -(void)(cont); -save_and_next(ls); -if(currIsNewline(ls)) -inclinenumber(ls); -for(;;){ -switch(ls->current){ -case(-1): -luaX_lexerror(ls,(seminfo)?"unfinished long string": -"unfinished long comment",TK_EOS); -break; -case']':{ -if(skip_sep(ls)==sep){ -save_and_next(ls); -goto endloop; -} -break; -} -case'\n': -case'\r':{ -save(ls,'\n'); -inclinenumber(ls); -if(!seminfo)luaZ_resetbuffer(ls->buff); -break; -} -default:{ -if(seminfo)save_and_next(ls); -else next(ls); -} -} -}endloop: -if(seminfo) -seminfo->ts=luaX_newstring(ls,luaZ_buffer(ls->buff)+(2+sep), -luaZ_bufflen(ls->buff)-2*(2+sep)); -} -static void read_string(LexState*ls,int del,SemInfo*seminfo){ -save_and_next(ls); -while(ls->current!=del){ -switch(ls->current){ -case(-1): -luaX_lexerror(ls,"unfinished string",TK_EOS); -continue; -case'\n': -case'\r': -luaX_lexerror(ls,"unfinished string",TK_STRING); -continue; -case'\\':{ -int c; -next(ls); -switch(ls->current){ -case'a':c='\a';break; -case'b':c='\b';break; -case'f':c='\f';break; -case'n':c='\n';break; -case'r':c='\r';break; -case't':c='\t';break; -case'v':c='\v';break; -case'\n': -case'\r':save(ls,'\n');inclinenumber(ls);continue; -case(-1):continue; -default:{ -if(!isdigit(ls->current)) -save_and_next(ls); -else{ -int i=0; -c=0; -do{ -c=10*c+(ls->current-'0'); -next(ls); -}while(++i<3&&isdigit(ls->current)); -if(c>UCHAR_MAX) -luaX_lexerror(ls,"escape sequence too large",TK_STRING); -save(ls,c); -} -continue; -} -} -save(ls,c); -next(ls); -continue; -} -default: -save_and_next(ls); -} -} -save_and_next(ls); -seminfo->ts=luaX_newstring(ls,luaZ_buffer(ls->buff)+1, -luaZ_bufflen(ls->buff)-2); -} -static int llex(LexState*ls,SemInfo*seminfo){ -luaZ_resetbuffer(ls->buff); -for(;;){ -switch(ls->current){ -case'\n': -case'\r':{ -inclinenumber(ls); -continue; -} -case'-':{ -next(ls); -if(ls->current!='-')return'-'; -next(ls); -if(ls->current=='['){ -int sep=skip_sep(ls); -luaZ_resetbuffer(ls->buff); -if(sep>=0){ -read_long_string(ls,NULL,sep); -luaZ_resetbuffer(ls->buff); -continue; -} -} -while(!currIsNewline(ls)&&ls->current!=(-1)) -next(ls); -continue; -} -case'[':{ -int sep=skip_sep(ls); -if(sep>=0){ -read_long_string(ls,seminfo,sep); -return TK_STRING; -} -else if(sep==-1)return'['; -else luaX_lexerror(ls,"invalid long string delimiter",TK_STRING); -} -case'=':{ -next(ls); -if(ls->current!='=')return'='; -else{next(ls);return TK_EQ;} -} -case'<':{ -next(ls); -if(ls->current!='=')return'<'; -else{next(ls);return TK_LE;} -} -case'>':{ -next(ls); -if(ls->current!='=')return'>'; -else{next(ls);return TK_GE;} -} -case'~':{ -next(ls); -if(ls->current!='=')return'~'; -else{next(ls);return TK_NE;} -} -case'"': -case'\'':{ -read_string(ls,ls->current,seminfo); -return TK_STRING; -} -case'.':{ -save_and_next(ls); -if(check_next(ls,".")){ -if(check_next(ls,".")) -return TK_DOTS; -else return TK_CONCAT; -} -else if(!isdigit(ls->current))return'.'; -else{ -read_numeral(ls,seminfo); -return TK_NUMBER; -} -} -case(-1):{ -return TK_EOS; -} -default:{ -if(isspace(ls->current)){ -next(ls); -continue; -} -else if(isdigit(ls->current)){ -read_numeral(ls,seminfo); -return TK_NUMBER; -} -else if(isalpha(ls->current)||ls->current=='_'){ -TString*ts; -do{ -save_and_next(ls); -}while(isalnum(ls->current)||ls->current=='_'); -ts=luaX_newstring(ls,luaZ_buffer(ls->buff), -luaZ_bufflen(ls->buff)); -if(ts->tsv.reserved>0) -return ts->tsv.reserved-1+257; -else{ -seminfo->ts=ts; -return TK_NAME; -} -} -else{ -int c=ls->current; -next(ls); -return c; -} -} -} -} -} -static void luaX_next(LexState*ls){ -ls->lastline=ls->linenumber; -if(ls->lookahead.token!=TK_EOS){ -ls->t=ls->lookahead; -ls->lookahead.token=TK_EOS; -} -else -ls->t.token=llex(ls,&ls->t.seminfo); -} -static void luaX_lookahead(LexState*ls){ -ls->lookahead.token=llex(ls,&ls->lookahead.seminfo); -} -#define hasjumps(e)((e)->t!=(e)->f) -static int isnumeral(expdesc*e){ -return(e->k==VKNUM&&e->t==(-1)&&e->f==(-1)); -} -static void luaK_nil(FuncState*fs,int from,int n){ -Instruction*previous; -if(fs->pc>fs->lasttarget){ -if(fs->pc==0){ -if(from>=fs->nactvar) -return; -} -else{ -previous=&fs->f->code[fs->pc-1]; -if(GET_OPCODE(*previous)==OP_LOADNIL){ -int pfrom=GETARG_A(*previous); -int pto=GETARG_B(*previous); -if(pfrom<=from&&from<=pto+1){ -if(from+n-1>pto) -SETARG_B(*previous,from+n-1); -return; -} -} -} -} -luaK_codeABC(fs,OP_LOADNIL,from,from+n-1,0); -} -static int luaK_jump(FuncState*fs){ -int jpc=fs->jpc; -int j; -fs->jpc=(-1); -j=luaK_codeAsBx(fs,OP_JMP,0,(-1)); -luaK_concat(fs,&j,jpc); -return j; -} -static void luaK_ret(FuncState*fs,int first,int nret){ -luaK_codeABC(fs,OP_RETURN,first,nret+1,0); -} -static int condjump(FuncState*fs,OpCode op,int A,int B,int C){ -luaK_codeABC(fs,op,A,B,C); -return luaK_jump(fs); -} -static void fixjump(FuncState*fs,int pc,int dest){ -Instruction*jmp=&fs->f->code[pc]; -int offset=dest-(pc+1); -if(abs(offset)>(((1<<(9+9))-1)>>1)) -luaX_syntaxerror(fs->ls,"control structure too long"); -SETARG_sBx(*jmp,offset); -} -static int luaK_getlabel(FuncState*fs){ -fs->lasttarget=fs->pc; -return fs->pc; -} -static int getjump(FuncState*fs,int pc){ -int offset=GETARG_sBx(fs->f->code[pc]); -if(offset==(-1)) -return(-1); -else -return(pc+1)+offset; -} -static Instruction*getjumpcontrol(FuncState*fs,int pc){ -Instruction*pi=&fs->f->code[pc]; -if(pc>=1&&testTMode(GET_OPCODE(*(pi-1)))) -return pi-1; -else -return pi; -} -static int need_value(FuncState*fs,int list){ -for(;list!=(-1);list=getjump(fs,list)){ -Instruction i=*getjumpcontrol(fs,list); -if(GET_OPCODE(i)!=OP_TESTSET)return 1; -} -return 0; -} -static int patchtestreg(FuncState*fs,int node,int reg){ -Instruction*i=getjumpcontrol(fs,node); -if(GET_OPCODE(*i)!=OP_TESTSET) -return 0; -if(reg!=((1<<8)-1)&®!=GETARG_B(*i)) -SETARG_A(*i,reg); -else -*i=CREATE_ABC(OP_TEST,GETARG_B(*i),0,GETARG_C(*i)); -return 1; -} -static void removevalues(FuncState*fs,int list){ -for(;list!=(-1);list=getjump(fs,list)) -patchtestreg(fs,list,((1<<8)-1)); -} -static void patchlistaux(FuncState*fs,int list,int vtarget,int reg, -int dtarget){ -while(list!=(-1)){ -int next=getjump(fs,list); -if(patchtestreg(fs,list,reg)) -fixjump(fs,list,vtarget); -else -fixjump(fs,list,dtarget); -list=next; -} -} -static void dischargejpc(FuncState*fs){ -patchlistaux(fs,fs->jpc,fs->pc,((1<<8)-1),fs->pc); -fs->jpc=(-1); -} -static void luaK_patchlist(FuncState*fs,int list,int target){ -if(target==fs->pc) -luaK_patchtohere(fs,list); -else{ -patchlistaux(fs,list,target,((1<<8)-1),target); -} -} -static void luaK_patchtohere(FuncState*fs,int list){ -luaK_getlabel(fs); -luaK_concat(fs,&fs->jpc,list); -} -static void luaK_concat(FuncState*fs,int*l1,int l2){ -if(l2==(-1))return; -else if(*l1==(-1)) -*l1=l2; -else{ -int list=*l1; -int next; -while((next=getjump(fs,list))!=(-1)) -list=next; -fixjump(fs,list,l2); -} -} -static void luaK_checkstack(FuncState*fs,int n){ -int newstack=fs->freereg+n; -if(newstack>fs->f->maxstacksize){ -if(newstack>=250) -luaX_syntaxerror(fs->ls,"function or expression too complex"); -fs->f->maxstacksize=cast_byte(newstack); -} -} -static void luaK_reserveregs(FuncState*fs,int n){ -luaK_checkstack(fs,n); -fs->freereg+=n; -} -static void freereg(FuncState*fs,int reg){ -if(!ISK(reg)&®>=fs->nactvar){ -fs->freereg--; -} -} -static void freeexp(FuncState*fs,expdesc*e){ -if(e->k==VNONRELOC) -freereg(fs,e->u.s.info); -} -static int addk(FuncState*fs,TValue*k,TValue*v){ -lua_State*L=fs->L; -TValue*idx=luaH_set(L,fs->h,k); -Proto*f=fs->f; -int oldsize=f->sizek; -if(ttisnumber(idx)){ -return cast_int(nvalue(idx)); -} -else{ -setnvalue(idx,cast_num(fs->nk)); -luaM_growvector(L,f->k,fs->nk,f->sizek,TValue, -((1<<(9+9))-1),"constant table overflow"); -while(oldsizesizek)setnilvalue(&f->k[oldsize++]); -setobj(L,&f->k[fs->nk],v); -luaC_barrier(L,f,v); -return fs->nk++; -} -} -static int luaK_stringK(FuncState*fs,TString*s){ -TValue o; -setsvalue(fs->L,&o,s); -return addk(fs,&o,&o); -} -static int luaK_numberK(FuncState*fs,lua_Number r){ -TValue o; -setnvalue(&o,r); -return addk(fs,&o,&o); -} -static int boolK(FuncState*fs,int b){ -TValue o; -setbvalue(&o,b); -return addk(fs,&o,&o); -} -static int nilK(FuncState*fs){ -TValue k,v; -setnilvalue(&v); -sethvalue(fs->L,&k,fs->h); -return addk(fs,&k,&v); -} -static void luaK_setreturns(FuncState*fs,expdesc*e,int nresults){ -if(e->k==VCALL){ -SETARG_C(getcode(fs,e),nresults+1); -} -else if(e->k==VVARARG){ -SETARG_B(getcode(fs,e),nresults+1); -SETARG_A(getcode(fs,e),fs->freereg); -luaK_reserveregs(fs,1); -} -} -static void luaK_setoneret(FuncState*fs,expdesc*e){ -if(e->k==VCALL){ -e->k=VNONRELOC; -e->u.s.info=GETARG_A(getcode(fs,e)); -} -else if(e->k==VVARARG){ -SETARG_B(getcode(fs,e),2); -e->k=VRELOCABLE; -} -} -static void luaK_dischargevars(FuncState*fs,expdesc*e){ -switch(e->k){ -case VLOCAL:{ -e->k=VNONRELOC; -break; -} -case VUPVAL:{ -e->u.s.info=luaK_codeABC(fs,OP_GETUPVAL,0,e->u.s.info,0); -e->k=VRELOCABLE; -break; -} -case VGLOBAL:{ -e->u.s.info=luaK_codeABx(fs,OP_GETGLOBAL,0,e->u.s.info); -e->k=VRELOCABLE; -break; -} -case VINDEXED:{ -freereg(fs,e->u.s.aux); -freereg(fs,e->u.s.info); -e->u.s.info=luaK_codeABC(fs,OP_GETTABLE,0,e->u.s.info,e->u.s.aux); -e->k=VRELOCABLE; -break; -} -case VVARARG: -case VCALL:{ -luaK_setoneret(fs,e); -break; -} -default:break; -} -} -static int code_label(FuncState*fs,int A,int b,int jump){ -luaK_getlabel(fs); -return luaK_codeABC(fs,OP_LOADBOOL,A,b,jump); -} -static void discharge2reg(FuncState*fs,expdesc*e,int reg){ -luaK_dischargevars(fs,e); -switch(e->k){ -case VNIL:{ -luaK_nil(fs,reg,1); -break; -} -case VFALSE:case VTRUE:{ -luaK_codeABC(fs,OP_LOADBOOL,reg,e->k==VTRUE,0); -break; -} -case VK:{ -luaK_codeABx(fs,OP_LOADK,reg,e->u.s.info); -break; -} -case VKNUM:{ -luaK_codeABx(fs,OP_LOADK,reg,luaK_numberK(fs,e->u.nval)); -break; -} -case VRELOCABLE:{ -Instruction*pc=&getcode(fs,e); -SETARG_A(*pc,reg); -break; -} -case VNONRELOC:{ -if(reg!=e->u.s.info) -luaK_codeABC(fs,OP_MOVE,reg,e->u.s.info,0); -break; -} -default:{ -return; -} -} -e->u.s.info=reg; -e->k=VNONRELOC; -} -static void discharge2anyreg(FuncState*fs,expdesc*e){ -if(e->k!=VNONRELOC){ -luaK_reserveregs(fs,1); -discharge2reg(fs,e,fs->freereg-1); -} -} -static void exp2reg(FuncState*fs,expdesc*e,int reg){ -discharge2reg(fs,e,reg); -if(e->k==VJMP) -luaK_concat(fs,&e->t,e->u.s.info); -if(hasjumps(e)){ -int final; -int p_f=(-1); -int p_t=(-1); -if(need_value(fs,e->t)||need_value(fs,e->f)){ -int fj=(e->k==VJMP)?(-1):luaK_jump(fs); -p_f=code_label(fs,reg,0,1); -p_t=code_label(fs,reg,1,0); -luaK_patchtohere(fs,fj); -} -final=luaK_getlabel(fs); -patchlistaux(fs,e->f,final,reg,p_f); -patchlistaux(fs,e->t,final,reg,p_t); -} -e->f=e->t=(-1); -e->u.s.info=reg; -e->k=VNONRELOC; -} -static void luaK_exp2nextreg(FuncState*fs,expdesc*e){ -luaK_dischargevars(fs,e); -freeexp(fs,e); -luaK_reserveregs(fs,1); -exp2reg(fs,e,fs->freereg-1); -} -static int luaK_exp2anyreg(FuncState*fs,expdesc*e){ -luaK_dischargevars(fs,e); -if(e->k==VNONRELOC){ -if(!hasjumps(e))return e->u.s.info; -if(e->u.s.info>=fs->nactvar){ -exp2reg(fs,e,e->u.s.info); -return e->u.s.info; -} -} -luaK_exp2nextreg(fs,e); -return e->u.s.info; -} -static void luaK_exp2val(FuncState*fs,expdesc*e){ -if(hasjumps(e)) -luaK_exp2anyreg(fs,e); -else -luaK_dischargevars(fs,e); -} -static int luaK_exp2RK(FuncState*fs,expdesc*e){ -luaK_exp2val(fs,e); -switch(e->k){ -case VKNUM: -case VTRUE: -case VFALSE: -case VNIL:{ -if(fs->nk<=((1<<(9-1))-1)){ -e->u.s.info=(e->k==VNIL)?nilK(fs): -(e->k==VKNUM)?luaK_numberK(fs,e->u.nval): -boolK(fs,(e->k==VTRUE)); -e->k=VK; -return RKASK(e->u.s.info); -} -else break; -} -case VK:{ -if(e->u.s.info<=((1<<(9-1))-1)) -return RKASK(e->u.s.info); -else break; -} -default:break; -} -return luaK_exp2anyreg(fs,e); -} -static void luaK_storevar(FuncState*fs,expdesc*var,expdesc*ex){ -switch(var->k){ -case VLOCAL:{ -freeexp(fs,ex); -exp2reg(fs,ex,var->u.s.info); -return; -} -case VUPVAL:{ -int e=luaK_exp2anyreg(fs,ex); -luaK_codeABC(fs,OP_SETUPVAL,e,var->u.s.info,0); -break; -} -case VGLOBAL:{ -int e=luaK_exp2anyreg(fs,ex); -luaK_codeABx(fs,OP_SETGLOBAL,e,var->u.s.info); -break; -} -case VINDEXED:{ -int e=luaK_exp2RK(fs,ex); -luaK_codeABC(fs,OP_SETTABLE,var->u.s.info,var->u.s.aux,e); -break; -} -default:{ -break; -} -} -freeexp(fs,ex); -} -static void luaK_self(FuncState*fs,expdesc*e,expdesc*key){ -int func; -luaK_exp2anyreg(fs,e); -freeexp(fs,e); -func=fs->freereg; -luaK_reserveregs(fs,2); -luaK_codeABC(fs,OP_SELF,func,e->u.s.info,luaK_exp2RK(fs,key)); -freeexp(fs,key); -e->u.s.info=func; -e->k=VNONRELOC; -} -static void invertjump(FuncState*fs,expdesc*e){ -Instruction*pc=getjumpcontrol(fs,e->u.s.info); -SETARG_A(*pc,!(GETARG_A(*pc))); -} -static int jumponcond(FuncState*fs,expdesc*e,int cond){ -if(e->k==VRELOCABLE){ -Instruction ie=getcode(fs,e); -if(GET_OPCODE(ie)==OP_NOT){ -fs->pc--; -return condjump(fs,OP_TEST,GETARG_B(ie),0,!cond); -} -} -discharge2anyreg(fs,e); -freeexp(fs,e); -return condjump(fs,OP_TESTSET,((1<<8)-1),e->u.s.info,cond); -} -static void luaK_goiftrue(FuncState*fs,expdesc*e){ -int pc; -luaK_dischargevars(fs,e); -switch(e->k){ -case VK:case VKNUM:case VTRUE:{ -pc=(-1); -break; -} -case VJMP:{ -invertjump(fs,e); -pc=e->u.s.info; -break; -} -default:{ -pc=jumponcond(fs,e,0); -break; -} -} -luaK_concat(fs,&e->f,pc); -luaK_patchtohere(fs,e->t); -e->t=(-1); -} -static void luaK_goiffalse(FuncState*fs,expdesc*e){ -int pc; -luaK_dischargevars(fs,e); -switch(e->k){ -case VNIL:case VFALSE:{ -pc=(-1); -break; -} -case VJMP:{ -pc=e->u.s.info; -break; -} -default:{ -pc=jumponcond(fs,e,1); -break; -} -} -luaK_concat(fs,&e->t,pc); -luaK_patchtohere(fs,e->f); -e->f=(-1); -} -static void codenot(FuncState*fs,expdesc*e){ -luaK_dischargevars(fs,e); -switch(e->k){ -case VNIL:case VFALSE:{ -e->k=VTRUE; -break; -} -case VK:case VKNUM:case VTRUE:{ -e->k=VFALSE; -break; -} -case VJMP:{ -invertjump(fs,e); -break; -} -case VRELOCABLE: -case VNONRELOC:{ -discharge2anyreg(fs,e); -freeexp(fs,e); -e->u.s.info=luaK_codeABC(fs,OP_NOT,0,e->u.s.info,0); -e->k=VRELOCABLE; -break; -} -default:{ -break; -} -} -{int temp=e->f;e->f=e->t;e->t=temp;} -removevalues(fs,e->f); -removevalues(fs,e->t); -} -static void luaK_indexed(FuncState*fs,expdesc*t,expdesc*k){ -t->u.s.aux=luaK_exp2RK(fs,k); -t->k=VINDEXED; -} -static int constfolding(OpCode op,expdesc*e1,expdesc*e2){ -lua_Number v1,v2,r; -if(!isnumeral(e1)||!isnumeral(e2))return 0; -v1=e1->u.nval; -v2=e2->u.nval; -switch(op){ -case OP_ADD:r=luai_numadd(v1,v2);break; -case OP_SUB:r=luai_numsub(v1,v2);break; -case OP_MUL:r=luai_nummul(v1,v2);break; -case OP_DIV: -if(v2==0)return 0; -r=luai_numdiv(v1,v2);break; -case OP_MOD: -if(v2==0)return 0; -r=luai_nummod(v1,v2);break; -case OP_POW:r=luai_numpow(v1,v2);break; -case OP_UNM:r=luai_numunm(v1);break; -case OP_LEN:return 0; -default:r=0;break; -} -if(luai_numisnan(r))return 0; -e1->u.nval=r; -return 1; -} -static void codearith(FuncState*fs,OpCode op,expdesc*e1,expdesc*e2){ -if(constfolding(op,e1,e2)) -return; -else{ -int o2=(op!=OP_UNM&&op!=OP_LEN)?luaK_exp2RK(fs,e2):0; -int o1=luaK_exp2RK(fs,e1); -if(o1>o2){ -freeexp(fs,e1); -freeexp(fs,e2); -} -else{ -freeexp(fs,e2); -freeexp(fs,e1); -} -e1->u.s.info=luaK_codeABC(fs,op,0,o1,o2); -e1->k=VRELOCABLE; -} -} -static void codecomp(FuncState*fs,OpCode op,int cond,expdesc*e1, -expdesc*e2){ -int o1=luaK_exp2RK(fs,e1); -int o2=luaK_exp2RK(fs,e2); -freeexp(fs,e2); -freeexp(fs,e1); -if(cond==0&&op!=OP_EQ){ -int temp; -temp=o1;o1=o2;o2=temp; -cond=1; -} -e1->u.s.info=condjump(fs,op,cond,o1,o2); -e1->k=VJMP; -} -static void luaK_prefix(FuncState*fs,UnOpr op,expdesc*e){ -expdesc e2; -e2.t=e2.f=(-1);e2.k=VKNUM;e2.u.nval=0; -switch(op){ -case OPR_MINUS:{ -if(!isnumeral(e)) -luaK_exp2anyreg(fs,e); -codearith(fs,OP_UNM,e,&e2); -break; -} -case OPR_NOT:codenot(fs,e);break; -case OPR_LEN:{ -luaK_exp2anyreg(fs,e); -codearith(fs,OP_LEN,e,&e2); -break; -} -default:; -} -} -static void luaK_infix(FuncState*fs,BinOpr op,expdesc*v){ -switch(op){ -case OPR_AND:{ -luaK_goiftrue(fs,v); -break; -} -case OPR_OR:{ -luaK_goiffalse(fs,v); -break; -} -case OPR_CONCAT:{ -luaK_exp2nextreg(fs,v); -break; -} -case OPR_ADD:case OPR_SUB:case OPR_MUL:case OPR_DIV: -case OPR_MOD:case OPR_POW:{ -if(!isnumeral(v))luaK_exp2RK(fs,v); -break; -} -default:{ -luaK_exp2RK(fs,v); -break; -} -} -} -static void luaK_posfix(FuncState*fs,BinOpr op,expdesc*e1,expdesc*e2){ -switch(op){ -case OPR_AND:{ -luaK_dischargevars(fs,e2); -luaK_concat(fs,&e2->f,e1->f); -*e1=*e2; -break; -} -case OPR_OR:{ -luaK_dischargevars(fs,e2); -luaK_concat(fs,&e2->t,e1->t); -*e1=*e2; -break; -} -case OPR_CONCAT:{ -luaK_exp2val(fs,e2); -if(e2->k==VRELOCABLE&&GET_OPCODE(getcode(fs,e2))==OP_CONCAT){ -freeexp(fs,e1); -SETARG_B(getcode(fs,e2),e1->u.s.info); -e1->k=VRELOCABLE;e1->u.s.info=e2->u.s.info; -} -else{ -luaK_exp2nextreg(fs,e2); -codearith(fs,OP_CONCAT,e1,e2); -} -break; -} -case OPR_ADD:codearith(fs,OP_ADD,e1,e2);break; -case OPR_SUB:codearith(fs,OP_SUB,e1,e2);break; -case OPR_MUL:codearith(fs,OP_MUL,e1,e2);break; -case OPR_DIV:codearith(fs,OP_DIV,e1,e2);break; -case OPR_MOD:codearith(fs,OP_MOD,e1,e2);break; -case OPR_POW:codearith(fs,OP_POW,e1,e2);break; -case OPR_EQ:codecomp(fs,OP_EQ,1,e1,e2);break; -case OPR_NE:codecomp(fs,OP_EQ,0,e1,e2);break; -case OPR_LT:codecomp(fs,OP_LT,1,e1,e2);break; -case OPR_LE:codecomp(fs,OP_LE,1,e1,e2);break; -case OPR_GT:codecomp(fs,OP_LT,0,e1,e2);break; -case OPR_GE:codecomp(fs,OP_LE,0,e1,e2);break; -default:; -} -} -static void luaK_fixline(FuncState*fs,int line){ -fs->f->lineinfo[fs->pc-1]=line; -} -static int luaK_code(FuncState*fs,Instruction i,int line){ -Proto*f=fs->f; -dischargejpc(fs); -luaM_growvector(fs->L,f->code,fs->pc,f->sizecode,Instruction, -(INT_MAX-2),"code size overflow"); -f->code[fs->pc]=i; -luaM_growvector(fs->L,f->lineinfo,fs->pc,f->sizelineinfo,int, -(INT_MAX-2),"code size overflow"); -f->lineinfo[fs->pc]=line; -return fs->pc++; -} -static int luaK_codeABC(FuncState*fs,OpCode o,int a,int b,int c){ -return luaK_code(fs,CREATE_ABC(o,a,b,c),fs->ls->lastline); -} -static int luaK_codeABx(FuncState*fs,OpCode o,int a,unsigned int bc){ -return luaK_code(fs,CREATE_ABx(o,a,bc),fs->ls->lastline); -} -static void luaK_setlist(FuncState*fs,int base,int nelems,int tostore){ -int c=(nelems-1)/50+1; -int b=(tostore==(-1))?0:tostore; -if(c<=((1<<9)-1)) -luaK_codeABC(fs,OP_SETLIST,base,b,c); -else{ -luaK_codeABC(fs,OP_SETLIST,base,b,0); -luaK_code(fs,cast(Instruction,c),fs->ls->lastline); -} -fs->freereg=base+1; -} -#define hasmultret(k)((k)==VCALL||(k)==VVARARG) -#define getlocvar(fs,i)((fs)->f->locvars[(fs)->actvar[i]]) -#define luaY_checklimit(fs,v,l,m)if((v)>(l))errorlimit(fs,l,m) -typedef struct BlockCnt{ -struct BlockCnt*previous; -int breaklist; -lu_byte nactvar; -lu_byte upval; -lu_byte isbreakable; -}BlockCnt; -static void chunk(LexState*ls); -static void expr(LexState*ls,expdesc*v); -static void anchor_token(LexState*ls){ -if(ls->t.token==TK_NAME||ls->t.token==TK_STRING){ -TString*ts=ls->t.seminfo.ts; -luaX_newstring(ls,getstr(ts),ts->tsv.len); -} -} -static void error_expected(LexState*ls,int token){ -luaX_syntaxerror(ls, -luaO_pushfstring(ls->L,LUA_QL("%s")" expected",luaX_token2str(ls,token))); -} -static void errorlimit(FuncState*fs,int limit,const char*what){ -const char*msg=(fs->f->linedefined==0)? -luaO_pushfstring(fs->L,"main function has more than %d %s",limit,what): -luaO_pushfstring(fs->L,"function at line %d has more than %d %s", -fs->f->linedefined,limit,what); -luaX_lexerror(fs->ls,msg,0); -} -static int testnext(LexState*ls,int c){ -if(ls->t.token==c){ -luaX_next(ls); -return 1; -} -else return 0; -} -static void check(LexState*ls,int c){ -if(ls->t.token!=c) -error_expected(ls,c); -} -static void checknext(LexState*ls,int c){ -check(ls,c); -luaX_next(ls); -} -#define check_condition(ls,c,msg){if(!(c))luaX_syntaxerror(ls,msg);} -static void check_match(LexState*ls,int what,int who,int where){ -if(!testnext(ls,what)){ -if(where==ls->linenumber) -error_expected(ls,what); -else{ -luaX_syntaxerror(ls,luaO_pushfstring(ls->L, -LUA_QL("%s")" expected (to close "LUA_QL("%s")" at line %d)", -luaX_token2str(ls,what),luaX_token2str(ls,who),where)); -} -} -} -static TString*str_checkname(LexState*ls){ -TString*ts; -check(ls,TK_NAME); -ts=ls->t.seminfo.ts; -luaX_next(ls); -return ts; -} -static void init_exp(expdesc*e,expkind k,int i){ -e->f=e->t=(-1); -e->k=k; -e->u.s.info=i; -} -static void codestring(LexState*ls,expdesc*e,TString*s){ -init_exp(e,VK,luaK_stringK(ls->fs,s)); -} -static void checkname(LexState*ls,expdesc*e){ -codestring(ls,e,str_checkname(ls)); -} -static int registerlocalvar(LexState*ls,TString*varname){ -FuncState*fs=ls->fs; -Proto*f=fs->f; -int oldsize=f->sizelocvars; -luaM_growvector(ls->L,f->locvars,fs->nlocvars,f->sizelocvars, -LocVar,SHRT_MAX,"too many local variables"); -while(oldsizesizelocvars)f->locvars[oldsize++].varname=NULL; -f->locvars[fs->nlocvars].varname=varname; -luaC_objbarrier(ls->L,f,varname); -return fs->nlocvars++; -} -#define new_localvarliteral(ls,v,n)new_localvar(ls,luaX_newstring(ls,""v,(sizeof(v)/sizeof(char))-1),n) -static void new_localvar(LexState*ls,TString*name,int n){ -FuncState*fs=ls->fs; -luaY_checklimit(fs,fs->nactvar+n+1,200,"local variables"); -fs->actvar[fs->nactvar+n]=cast(unsigned short,registerlocalvar(ls,name)); -} -static void adjustlocalvars(LexState*ls,int nvars){ -FuncState*fs=ls->fs; -fs->nactvar=cast_byte(fs->nactvar+nvars); -for(;nvars;nvars--){ -getlocvar(fs,fs->nactvar-nvars).startpc=fs->pc; -} -} -static void removevars(LexState*ls,int tolevel){ -FuncState*fs=ls->fs; -while(fs->nactvar>tolevel) -getlocvar(fs,--fs->nactvar).endpc=fs->pc; -} -static int indexupvalue(FuncState*fs,TString*name,expdesc*v){ -int i; -Proto*f=fs->f; -int oldsize=f->sizeupvalues; -for(i=0;inups;i++){ -if(fs->upvalues[i].k==v->k&&fs->upvalues[i].info==v->u.s.info){ -return i; -} -} -luaY_checklimit(fs,f->nups+1,60,"upvalues"); -luaM_growvector(fs->L,f->upvalues,f->nups,f->sizeupvalues, -TString*,(INT_MAX-2),""); -while(oldsizesizeupvalues)f->upvalues[oldsize++]=NULL; -f->upvalues[f->nups]=name; -luaC_objbarrier(fs->L,f,name); -fs->upvalues[f->nups].k=cast_byte(v->k); -fs->upvalues[f->nups].info=cast_byte(v->u.s.info); -return f->nups++; -} -static int searchvar(FuncState*fs,TString*n){ -int i; -for(i=fs->nactvar-1;i>=0;i--){ -if(n==getlocvar(fs,i).varname) -return i; -} -return-1; -} -static void markupval(FuncState*fs,int level){ -BlockCnt*bl=fs->bl; -while(bl&&bl->nactvar>level)bl=bl->previous; -if(bl)bl->upval=1; -} -static int singlevaraux(FuncState*fs,TString*n,expdesc*var,int base){ -if(fs==NULL){ -init_exp(var,VGLOBAL,((1<<8)-1)); -return VGLOBAL; -} -else{ -int v=searchvar(fs,n); -if(v>=0){ -init_exp(var,VLOCAL,v); -if(!base) -markupval(fs,v); -return VLOCAL; -} -else{ -if(singlevaraux(fs->prev,n,var,0)==VGLOBAL) -return VGLOBAL; -var->u.s.info=indexupvalue(fs,n,var); -var->k=VUPVAL; -return VUPVAL; -} -} -} -static void singlevar(LexState*ls,expdesc*var){ -TString*varname=str_checkname(ls); -FuncState*fs=ls->fs; -if(singlevaraux(fs,varname,var,1)==VGLOBAL) -var->u.s.info=luaK_stringK(fs,varname); -} -static void adjust_assign(LexState*ls,int nvars,int nexps,expdesc*e){ -FuncState*fs=ls->fs; -int extra=nvars-nexps; -if(hasmultret(e->k)){ -extra++; -if(extra<0)extra=0; -luaK_setreturns(fs,e,extra); -if(extra>1)luaK_reserveregs(fs,extra-1); -} -else{ -if(e->k!=VVOID)luaK_exp2nextreg(fs,e); -if(extra>0){ -int reg=fs->freereg; -luaK_reserveregs(fs,extra); -luaK_nil(fs,reg,extra); -} -} -} -static void enterlevel(LexState*ls){ -if(++ls->L->nCcalls>200) -luaX_lexerror(ls,"chunk has too many syntax levels",0); -} -#define leavelevel(ls)((ls)->L->nCcalls--) -static void enterblock(FuncState*fs,BlockCnt*bl,lu_byte isbreakable){ -bl->breaklist=(-1); -bl->isbreakable=isbreakable; -bl->nactvar=fs->nactvar; -bl->upval=0; -bl->previous=fs->bl; -fs->bl=bl; -} -static void leaveblock(FuncState*fs){ -BlockCnt*bl=fs->bl; -fs->bl=bl->previous; -removevars(fs->ls,bl->nactvar); -if(bl->upval) -luaK_codeABC(fs,OP_CLOSE,bl->nactvar,0,0); -fs->freereg=fs->nactvar; -luaK_patchtohere(fs,bl->breaklist); -} -static void pushclosure(LexState*ls,FuncState*func,expdesc*v){ -FuncState*fs=ls->fs; -Proto*f=fs->f; -int oldsize=f->sizep; -int i; -luaM_growvector(ls->L,f->p,fs->np,f->sizep,Proto*, -((1<<(9+9))-1),"constant table overflow"); -while(oldsizesizep)f->p[oldsize++]=NULL; -f->p[fs->np++]=func->f; -luaC_objbarrier(ls->L,f,func->f); -init_exp(v,VRELOCABLE,luaK_codeABx(fs,OP_CLOSURE,0,fs->np-1)); -for(i=0;if->nups;i++){ -OpCode o=(func->upvalues[i].k==VLOCAL)?OP_MOVE:OP_GETUPVAL; -luaK_codeABC(fs,o,0,func->upvalues[i].info,0); -} -} -static void open_func(LexState*ls,FuncState*fs){ -lua_State*L=ls->L; -Proto*f=luaF_newproto(L); -fs->f=f; -fs->prev=ls->fs; -fs->ls=ls; -fs->L=L; -ls->fs=fs; -fs->pc=0; -fs->lasttarget=-1; -fs->jpc=(-1); -fs->freereg=0; -fs->nk=0; -fs->np=0; -fs->nlocvars=0; -fs->nactvar=0; -fs->bl=NULL; -f->source=ls->source; -f->maxstacksize=2; -fs->h=luaH_new(L,0,0); -sethvalue(L,L->top,fs->h); -incr_top(L); -setptvalue(L,L->top,f); -incr_top(L); -} -static void close_func(LexState*ls){ -lua_State*L=ls->L; -FuncState*fs=ls->fs; -Proto*f=fs->f; -removevars(ls,0); -luaK_ret(fs,0,0); -luaM_reallocvector(L,f->code,f->sizecode,fs->pc,Instruction); -f->sizecode=fs->pc; -luaM_reallocvector(L,f->lineinfo,f->sizelineinfo,fs->pc,int); -f->sizelineinfo=fs->pc; -luaM_reallocvector(L,f->k,f->sizek,fs->nk,TValue); -f->sizek=fs->nk; -luaM_reallocvector(L,f->p,f->sizep,fs->np,Proto*); -f->sizep=fs->np; -luaM_reallocvector(L,f->locvars,f->sizelocvars,fs->nlocvars,LocVar); -f->sizelocvars=fs->nlocvars; -luaM_reallocvector(L,f->upvalues,f->sizeupvalues,f->nups,TString*); -f->sizeupvalues=f->nups; -ls->fs=fs->prev; -if(fs)anchor_token(ls); -L->top-=2; -} -static Proto*luaY_parser(lua_State*L,ZIO*z,Mbuffer*buff,const char*name){ -struct LexState lexstate; -struct FuncState funcstate; -lexstate.buff=buff; -luaX_setinput(L,&lexstate,z,luaS_new(L,name)); -open_func(&lexstate,&funcstate); -funcstate.f->is_vararg=2; -luaX_next(&lexstate); -chunk(&lexstate); -check(&lexstate,TK_EOS); -close_func(&lexstate); -return funcstate.f; -} -static void field(LexState*ls,expdesc*v){ -FuncState*fs=ls->fs; -expdesc key; -luaK_exp2anyreg(fs,v); -luaX_next(ls); -checkname(ls,&key); -luaK_indexed(fs,v,&key); -} -static void yindex(LexState*ls,expdesc*v){ -luaX_next(ls); -expr(ls,v); -luaK_exp2val(ls->fs,v); -checknext(ls,']'); -} -struct ConsControl{ -expdesc v; -expdesc*t; -int nh; -int na; -int tostore; -}; -static void recfield(LexState*ls,struct ConsControl*cc){ -FuncState*fs=ls->fs; -int reg=ls->fs->freereg; -expdesc key,val; -int rkkey; -if(ls->t.token==TK_NAME){ -luaY_checklimit(fs,cc->nh,(INT_MAX-2),"items in a constructor"); -checkname(ls,&key); -} -else -yindex(ls,&key); -cc->nh++; -checknext(ls,'='); -rkkey=luaK_exp2RK(fs,&key); -expr(ls,&val); -luaK_codeABC(fs,OP_SETTABLE,cc->t->u.s.info,rkkey,luaK_exp2RK(fs,&val)); -fs->freereg=reg; -} -static void closelistfield(FuncState*fs,struct ConsControl*cc){ -if(cc->v.k==VVOID)return; -luaK_exp2nextreg(fs,&cc->v); -cc->v.k=VVOID; -if(cc->tostore==50){ -luaK_setlist(fs,cc->t->u.s.info,cc->na,cc->tostore); -cc->tostore=0; -} -} -static void lastlistfield(FuncState*fs,struct ConsControl*cc){ -if(cc->tostore==0)return; -if(hasmultret(cc->v.k)){ -luaK_setmultret(fs,&cc->v); -luaK_setlist(fs,cc->t->u.s.info,cc->na,(-1)); -cc->na--; -} -else{ -if(cc->v.k!=VVOID) -luaK_exp2nextreg(fs,&cc->v); -luaK_setlist(fs,cc->t->u.s.info,cc->na,cc->tostore); -} -} -static void listfield(LexState*ls,struct ConsControl*cc){ -expr(ls,&cc->v); -luaY_checklimit(ls->fs,cc->na,(INT_MAX-2),"items in a constructor"); -cc->na++; -cc->tostore++; -} -static void constructor(LexState*ls,expdesc*t){ -FuncState*fs=ls->fs; -int line=ls->linenumber; -int pc=luaK_codeABC(fs,OP_NEWTABLE,0,0,0); -struct ConsControl cc; -cc.na=cc.nh=cc.tostore=0; -cc.t=t; -init_exp(t,VRELOCABLE,pc); -init_exp(&cc.v,VVOID,0); -luaK_exp2nextreg(ls->fs,t); -checknext(ls,'{'); -do{ -if(ls->t.token=='}')break; -closelistfield(fs,&cc); -switch(ls->t.token){ -case TK_NAME:{ -luaX_lookahead(ls); -if(ls->lookahead.token!='=') -listfield(ls,&cc); -else -recfield(ls,&cc); -break; -} -case'[':{ -recfield(ls,&cc); -break; -} -default:{ -listfield(ls,&cc); -break; -} -} -}while(testnext(ls,',')||testnext(ls,';')); -check_match(ls,'}','{',line); -lastlistfield(fs,&cc); -SETARG_B(fs->f->code[pc],luaO_int2fb(cc.na)); -SETARG_C(fs->f->code[pc],luaO_int2fb(cc.nh)); -} -static void parlist(LexState*ls){ -FuncState*fs=ls->fs; -Proto*f=fs->f; -int nparams=0; -f->is_vararg=0; -if(ls->t.token!=')'){ -do{ -switch(ls->t.token){ -case TK_NAME:{ -new_localvar(ls,str_checkname(ls),nparams++); -break; -} -case TK_DOTS:{ -luaX_next(ls); -f->is_vararg|=2; -break; -} -default:luaX_syntaxerror(ls," or "LUA_QL("...")" expected"); -} -}while(!f->is_vararg&&testnext(ls,',')); -} -adjustlocalvars(ls,nparams); -f->numparams=cast_byte(fs->nactvar-(f->is_vararg&1)); -luaK_reserveregs(fs,fs->nactvar); -} -static void body(LexState*ls,expdesc*e,int needself,int line){ -FuncState new_fs; -open_func(ls,&new_fs); -new_fs.f->linedefined=line; -checknext(ls,'('); -if(needself){ -new_localvarliteral(ls,"self",0); -adjustlocalvars(ls,1); -} -parlist(ls); -checknext(ls,')'); -chunk(ls); -new_fs.f->lastlinedefined=ls->linenumber; -check_match(ls,TK_END,TK_FUNCTION,line); -close_func(ls); -pushclosure(ls,&new_fs,e); -} -static int explist1(LexState*ls,expdesc*v){ -int n=1; -expr(ls,v); -while(testnext(ls,',')){ -luaK_exp2nextreg(ls->fs,v); -expr(ls,v); -n++; -} -return n; -} -static void funcargs(LexState*ls,expdesc*f){ -FuncState*fs=ls->fs; -expdesc args; -int base,nparams; -int line=ls->linenumber; -switch(ls->t.token){ -case'(':{ -if(line!=ls->lastline) -luaX_syntaxerror(ls,"ambiguous syntax (function call x new statement)"); -luaX_next(ls); -if(ls->t.token==')') -args.k=VVOID; -else{ -explist1(ls,&args); -luaK_setmultret(fs,&args); -} -check_match(ls,')','(',line); -break; -} -case'{':{ -constructor(ls,&args); -break; -} -case TK_STRING:{ -codestring(ls,&args,ls->t.seminfo.ts); -luaX_next(ls); -break; -} -default:{ -luaX_syntaxerror(ls,"function arguments expected"); -return; -} -} -base=f->u.s.info; -if(hasmultret(args.k)) -nparams=(-1); -else{ -if(args.k!=VVOID) -luaK_exp2nextreg(fs,&args); -nparams=fs->freereg-(base+1); -} -init_exp(f,VCALL,luaK_codeABC(fs,OP_CALL,base,nparams+1,2)); -luaK_fixline(fs,line); -fs->freereg=base+1; -} -static void prefixexp(LexState*ls,expdesc*v){ -switch(ls->t.token){ -case'(':{ -int line=ls->linenumber; -luaX_next(ls); -expr(ls,v); -check_match(ls,')','(',line); -luaK_dischargevars(ls->fs,v); -return; -} -case TK_NAME:{ -singlevar(ls,v); -return; -} -default:{ -luaX_syntaxerror(ls,"unexpected symbol"); -return; -} -} -} -static void primaryexp(LexState*ls,expdesc*v){ -FuncState*fs=ls->fs; -prefixexp(ls,v); -for(;;){ -switch(ls->t.token){ -case'.':{ -field(ls,v); -break; -} -case'[':{ -expdesc key; -luaK_exp2anyreg(fs,v); -yindex(ls,&key); -luaK_indexed(fs,v,&key); -break; -} -case':':{ -expdesc key; -luaX_next(ls); -checkname(ls,&key); -luaK_self(fs,v,&key); -funcargs(ls,v); -break; -} -case'(':case TK_STRING:case'{':{ -luaK_exp2nextreg(fs,v); -funcargs(ls,v); -break; -} -default:return; -} -} -} -static void simpleexp(LexState*ls,expdesc*v){ -switch(ls->t.token){ -case TK_NUMBER:{ -init_exp(v,VKNUM,0); -v->u.nval=ls->t.seminfo.r; -break; -} -case TK_STRING:{ -codestring(ls,v,ls->t.seminfo.ts); -break; -} -case TK_NIL:{ -init_exp(v,VNIL,0); -break; -} -case TK_TRUE:{ -init_exp(v,VTRUE,0); -break; -} -case TK_FALSE:{ -init_exp(v,VFALSE,0); -break; -} -case TK_DOTS:{ -FuncState*fs=ls->fs; -check_condition(ls,fs->f->is_vararg, -"cannot use "LUA_QL("...")" outside a vararg function"); -fs->f->is_vararg&=~4; -init_exp(v,VVARARG,luaK_codeABC(fs,OP_VARARG,0,1,0)); -break; -} -case'{':{ -constructor(ls,v); -return; -} -case TK_FUNCTION:{ -luaX_next(ls); -body(ls,v,0,ls->linenumber); -return; -} -default:{ -primaryexp(ls,v); -return; -} -} -luaX_next(ls); -} -static UnOpr getunopr(int op){ -switch(op){ -case TK_NOT:return OPR_NOT; -case'-':return OPR_MINUS; -case'#':return OPR_LEN; -default:return OPR_NOUNOPR; -} -} -static BinOpr getbinopr(int op){ -switch(op){ -case'+':return OPR_ADD; -case'-':return OPR_SUB; -case'*':return OPR_MUL; -case'/':return OPR_DIV; -case'%':return OPR_MOD; -case'^':return OPR_POW; -case TK_CONCAT:return OPR_CONCAT; -case TK_NE:return OPR_NE; -case TK_EQ:return OPR_EQ; -case'<':return OPR_LT; -case TK_LE:return OPR_LE; -case'>':return OPR_GT; -case TK_GE:return OPR_GE; -case TK_AND:return OPR_AND; -case TK_OR:return OPR_OR; -default:return OPR_NOBINOPR; -} -} -static const struct{ -lu_byte left; -lu_byte right; -}priority[]={ -{6,6},{6,6},{7,7},{7,7},{7,7}, -{10,9},{5,4}, -{3,3},{3,3}, -{3,3},{3,3},{3,3},{3,3}, -{2,2},{1,1} -}; -static BinOpr subexpr(LexState*ls,expdesc*v,unsigned int limit){ -BinOpr op; -UnOpr uop; -enterlevel(ls); -uop=getunopr(ls->t.token); -if(uop!=OPR_NOUNOPR){ -luaX_next(ls); -subexpr(ls,v,8); -luaK_prefix(ls->fs,uop,v); -} -else simpleexp(ls,v); -op=getbinopr(ls->t.token); -while(op!=OPR_NOBINOPR&&priority[op].left>limit){ -expdesc v2; -BinOpr nextop; -luaX_next(ls); -luaK_infix(ls->fs,op,v); -nextop=subexpr(ls,&v2,priority[op].right); -luaK_posfix(ls->fs,op,v,&v2); -op=nextop; -} -leavelevel(ls); -return op; -} -static void expr(LexState*ls,expdesc*v){ -subexpr(ls,v,0); -} -static int block_follow(int token){ -switch(token){ -case TK_ELSE:case TK_ELSEIF:case TK_END: -case TK_UNTIL:case TK_EOS: -return 1; -default:return 0; -} -} -static void block(LexState*ls){ -FuncState*fs=ls->fs; -BlockCnt bl; -enterblock(fs,&bl,0); -chunk(ls); -leaveblock(fs); -} -struct LHS_assign{ -struct LHS_assign*prev; -expdesc v; -}; -static void check_conflict(LexState*ls,struct LHS_assign*lh,expdesc*v){ -FuncState*fs=ls->fs; -int extra=fs->freereg; -int conflict=0; -for(;lh;lh=lh->prev){ -if(lh->v.k==VINDEXED){ -if(lh->v.u.s.info==v->u.s.info){ -conflict=1; -lh->v.u.s.info=extra; -} -if(lh->v.u.s.aux==v->u.s.info){ -conflict=1; -lh->v.u.s.aux=extra; -} -} -} -if(conflict){ -luaK_codeABC(fs,OP_MOVE,fs->freereg,v->u.s.info,0); -luaK_reserveregs(fs,1); -} -} -static void assignment(LexState*ls,struct LHS_assign*lh,int nvars){ -expdesc e; -check_condition(ls,VLOCAL<=lh->v.k&&lh->v.k<=VINDEXED, -"syntax error"); -if(testnext(ls,',')){ -struct LHS_assign nv; -nv.prev=lh; -primaryexp(ls,&nv.v); -if(nv.v.k==VLOCAL) -check_conflict(ls,lh,&nv.v); -luaY_checklimit(ls->fs,nvars,200-ls->L->nCcalls, -"variables in assignment"); -assignment(ls,&nv,nvars+1); -} -else{ -int nexps; -checknext(ls,'='); -nexps=explist1(ls,&e); -if(nexps!=nvars){ -adjust_assign(ls,nvars,nexps,&e); -if(nexps>nvars) -ls->fs->freereg-=nexps-nvars; -} -else{ -luaK_setoneret(ls->fs,&e); -luaK_storevar(ls->fs,&lh->v,&e); -return; -} -} -init_exp(&e,VNONRELOC,ls->fs->freereg-1); -luaK_storevar(ls->fs,&lh->v,&e); -} -static int cond(LexState*ls){ -expdesc v; -expr(ls,&v); -if(v.k==VNIL)v.k=VFALSE; -luaK_goiftrue(ls->fs,&v); -return v.f; -} -static void breakstat(LexState*ls){ -FuncState*fs=ls->fs; -BlockCnt*bl=fs->bl; -int upval=0; -while(bl&&!bl->isbreakable){ -upval|=bl->upval; -bl=bl->previous; -} -if(!bl) -luaX_syntaxerror(ls,"no loop to break"); -if(upval) -luaK_codeABC(fs,OP_CLOSE,bl->nactvar,0,0); -luaK_concat(fs,&bl->breaklist,luaK_jump(fs)); -} -static void whilestat(LexState*ls,int line){ -FuncState*fs=ls->fs; -int whileinit; -int condexit; -BlockCnt bl; -luaX_next(ls); -whileinit=luaK_getlabel(fs); -condexit=cond(ls); -enterblock(fs,&bl,1); -checknext(ls,TK_DO); -block(ls); -luaK_patchlist(fs,luaK_jump(fs),whileinit); -check_match(ls,TK_END,TK_WHILE,line); -leaveblock(fs); -luaK_patchtohere(fs,condexit); -} -static void repeatstat(LexState*ls,int line){ -int condexit; -FuncState*fs=ls->fs; -int repeat_init=luaK_getlabel(fs); -BlockCnt bl1,bl2; -enterblock(fs,&bl1,1); -enterblock(fs,&bl2,0); -luaX_next(ls); -chunk(ls); -check_match(ls,TK_UNTIL,TK_REPEAT,line); -condexit=cond(ls); -if(!bl2.upval){ -leaveblock(fs); -luaK_patchlist(ls->fs,condexit,repeat_init); -} -else{ -breakstat(ls); -luaK_patchtohere(ls->fs,condexit); -leaveblock(fs); -luaK_patchlist(ls->fs,luaK_jump(fs),repeat_init); -} -leaveblock(fs); -} -static int exp1(LexState*ls){ -expdesc e; -int k; -expr(ls,&e); -k=e.k; -luaK_exp2nextreg(ls->fs,&e); -return k; -} -static void forbody(LexState*ls,int base,int line,int nvars,int isnum){ -BlockCnt bl; -FuncState*fs=ls->fs; -int prep,endfor; -adjustlocalvars(ls,3); -checknext(ls,TK_DO); -prep=isnum?luaK_codeAsBx(fs,OP_FORPREP,base,(-1)):luaK_jump(fs); -enterblock(fs,&bl,0); -adjustlocalvars(ls,nvars); -luaK_reserveregs(fs,nvars); -block(ls); -leaveblock(fs); -luaK_patchtohere(fs,prep); -endfor=(isnum)?luaK_codeAsBx(fs,OP_FORLOOP,base,(-1)): -luaK_codeABC(fs,OP_TFORLOOP,base,0,nvars); -luaK_fixline(fs,line); -luaK_patchlist(fs,(isnum?endfor:luaK_jump(fs)),prep+1); -} -static void fornum(LexState*ls,TString*varname,int line){ -FuncState*fs=ls->fs; -int base=fs->freereg; -new_localvarliteral(ls,"(for index)",0); -new_localvarliteral(ls,"(for limit)",1); -new_localvarliteral(ls,"(for step)",2); -new_localvar(ls,varname,3); -checknext(ls,'='); -exp1(ls); -checknext(ls,','); -exp1(ls); -if(testnext(ls,',')) -exp1(ls); -else{ -luaK_codeABx(fs,OP_LOADK,fs->freereg,luaK_numberK(fs,1)); -luaK_reserveregs(fs,1); -} -forbody(ls,base,line,1,1); -} -static void forlist(LexState*ls,TString*indexname){ -FuncState*fs=ls->fs; -expdesc e; -int nvars=0; -int line; -int base=fs->freereg; -new_localvarliteral(ls,"(for generator)",nvars++); -new_localvarliteral(ls,"(for state)",nvars++); -new_localvarliteral(ls,"(for control)",nvars++); -new_localvar(ls,indexname,nvars++); -while(testnext(ls,',')) -new_localvar(ls,str_checkname(ls),nvars++); -checknext(ls,TK_IN); -line=ls->linenumber; -adjust_assign(ls,3,explist1(ls,&e),&e); -luaK_checkstack(fs,3); -forbody(ls,base,line,nvars-3,0); -} -static void forstat(LexState*ls,int line){ -FuncState*fs=ls->fs; -TString*varname; -BlockCnt bl; -enterblock(fs,&bl,1); -luaX_next(ls); -varname=str_checkname(ls); -switch(ls->t.token){ -case'=':fornum(ls,varname,line);break; -case',':case TK_IN:forlist(ls,varname);break; -default:luaX_syntaxerror(ls,LUA_QL("=")" or "LUA_QL("in")" expected"); -} -check_match(ls,TK_END,TK_FOR,line); -leaveblock(fs); -} -static int test_then_block(LexState*ls){ -int condexit; -luaX_next(ls); -condexit=cond(ls); -checknext(ls,TK_THEN); -block(ls); -return condexit; -} -static void ifstat(LexState*ls,int line){ -FuncState*fs=ls->fs; -int flist; -int escapelist=(-1); -flist=test_then_block(ls); -while(ls->t.token==TK_ELSEIF){ -luaK_concat(fs,&escapelist,luaK_jump(fs)); -luaK_patchtohere(fs,flist); -flist=test_then_block(ls); -} -if(ls->t.token==TK_ELSE){ -luaK_concat(fs,&escapelist,luaK_jump(fs)); -luaK_patchtohere(fs,flist); -luaX_next(ls); -block(ls); -} -else -luaK_concat(fs,&escapelist,flist); -luaK_patchtohere(fs,escapelist); -check_match(ls,TK_END,TK_IF,line); -} -static void localfunc(LexState*ls){ -expdesc v,b; -FuncState*fs=ls->fs; -new_localvar(ls,str_checkname(ls),0); -init_exp(&v,VLOCAL,fs->freereg); -luaK_reserveregs(fs,1); -adjustlocalvars(ls,1); -body(ls,&b,0,ls->linenumber); -luaK_storevar(fs,&v,&b); -getlocvar(fs,fs->nactvar-1).startpc=fs->pc; -} -static void localstat(LexState*ls){ -int nvars=0; -int nexps; -expdesc e; -do{ -new_localvar(ls,str_checkname(ls),nvars++); -}while(testnext(ls,',')); -if(testnext(ls,'=')) -nexps=explist1(ls,&e); -else{ -e.k=VVOID; -nexps=0; -} -adjust_assign(ls,nvars,nexps,&e); -adjustlocalvars(ls,nvars); -} -static int funcname(LexState*ls,expdesc*v){ -int needself=0; -singlevar(ls,v); -while(ls->t.token=='.') -field(ls,v); -if(ls->t.token==':'){ -needself=1; -field(ls,v); -} -return needself; -} -static void funcstat(LexState*ls,int line){ -int needself; -expdesc v,b; -luaX_next(ls); -needself=funcname(ls,&v); -body(ls,&b,needself,line); -luaK_storevar(ls->fs,&v,&b); -luaK_fixline(ls->fs,line); -} -static void exprstat(LexState*ls){ -FuncState*fs=ls->fs; -struct LHS_assign v; -primaryexp(ls,&v.v); -if(v.v.k==VCALL) -SETARG_C(getcode(fs,&v.v),1); -else{ -v.prev=NULL; -assignment(ls,&v,1); -} -} -static void retstat(LexState*ls){ -FuncState*fs=ls->fs; -expdesc e; -int first,nret; -luaX_next(ls); -if(block_follow(ls->t.token)||ls->t.token==';') -first=nret=0; -else{ -nret=explist1(ls,&e); -if(hasmultret(e.k)){ -luaK_setmultret(fs,&e); -if(e.k==VCALL&&nret==1){ -SET_OPCODE(getcode(fs,&e),OP_TAILCALL); -} -first=fs->nactvar; -nret=(-1); -} -else{ -if(nret==1) -first=luaK_exp2anyreg(fs,&e); -else{ -luaK_exp2nextreg(fs,&e); -first=fs->nactvar; -} -} -} -luaK_ret(fs,first,nret); -} -static int statement(LexState*ls){ -int line=ls->linenumber; -switch(ls->t.token){ -case TK_IF:{ -ifstat(ls,line); -return 0; -} -case TK_WHILE:{ -whilestat(ls,line); -return 0; -} -case TK_DO:{ -luaX_next(ls); -block(ls); -check_match(ls,TK_END,TK_DO,line); -return 0; -} -case TK_FOR:{ -forstat(ls,line); -return 0; -} -case TK_REPEAT:{ -repeatstat(ls,line); -return 0; -} -case TK_FUNCTION:{ -funcstat(ls,line); -return 0; -} -case TK_LOCAL:{ -luaX_next(ls); -if(testnext(ls,TK_FUNCTION)) -localfunc(ls); -else -localstat(ls); -return 0; -} -case TK_RETURN:{ -retstat(ls); -return 1; -} -case TK_BREAK:{ -luaX_next(ls); -breakstat(ls); -return 1; -} -default:{ -exprstat(ls); -return 0; -} -} -} -static void chunk(LexState*ls){ -int islast=0; -enterlevel(ls); -while(!islast&&!block_follow(ls->t.token)){ -islast=statement(ls); -testnext(ls,';'); -ls->fs->freereg=ls->fs->nactvar; -} -leavelevel(ls); -} -static const TValue*luaV_tonumber(const TValue*obj,TValue*n){ -lua_Number num; -if(ttisnumber(obj))return obj; -if(ttisstring(obj)&&luaO_str2d(svalue(obj),&num)){ -setnvalue(n,num); -return n; -} -else -return NULL; -} -static int luaV_tostring(lua_State*L,StkId obj){ -if(!ttisnumber(obj)) -return 0; -else{ -char s[32]; -lua_Number n=nvalue(obj); -lua_number2str(s,n); -setsvalue(L,obj,luaS_new(L,s)); -return 1; -} -} -static void callTMres(lua_State*L,StkId res,const TValue*f, -const TValue*p1,const TValue*p2){ -ptrdiff_t result=savestack(L,res); -setobj(L,L->top,f); -setobj(L,L->top+1,p1); -setobj(L,L->top+2,p2); -luaD_checkstack(L,3); -L->top+=3; -luaD_call(L,L->top-3,1); -res=restorestack(L,result); -L->top--; -setobj(L,res,L->top); -} -static void callTM(lua_State*L,const TValue*f,const TValue*p1, -const TValue*p2,const TValue*p3){ -setobj(L,L->top,f); -setobj(L,L->top+1,p1); -setobj(L,L->top+2,p2); -setobj(L,L->top+3,p3); -luaD_checkstack(L,4); -L->top+=4; -luaD_call(L,L->top-4,0); -} -static void luaV_gettable(lua_State*L,const TValue*t,TValue*key,StkId val){ -int loop; -for(loop=0;loop<100;loop++){ -const TValue*tm; -if(ttistable(t)){ -Table*h=hvalue(t); -const TValue*res=luaH_get(h,key); -if(!ttisnil(res)|| -(tm=fasttm(L,h->metatable,TM_INDEX))==NULL){ -setobj(L,val,res); -return; -} -} -else if(ttisnil(tm=luaT_gettmbyobj(L,t,TM_INDEX))) -luaG_typeerror(L,t,"index"); -if(ttisfunction(tm)){ -callTMres(L,val,tm,t,key); -return; -} -t=tm; -} -luaG_runerror(L,"loop in gettable"); -} -static void luaV_settable(lua_State*L,const TValue*t,TValue*key,StkId val){ -int loop; -TValue temp; -for(loop=0;loop<100;loop++){ -const TValue*tm; -if(ttistable(t)){ -Table*h=hvalue(t); -TValue*oldval=luaH_set(L,h,key); -if(!ttisnil(oldval)|| -(tm=fasttm(L,h->metatable,TM_NEWINDEX))==NULL){ -setobj(L,oldval,val); -h->flags=0; -luaC_barriert(L,h,val); -return; -} -} -else if(ttisnil(tm=luaT_gettmbyobj(L,t,TM_NEWINDEX))) -luaG_typeerror(L,t,"index"); -if(ttisfunction(tm)){ -callTM(L,tm,t,key,val); -return; -} -setobj(L,&temp,tm); -t=&temp; -} -luaG_runerror(L,"loop in settable"); -} -static int call_binTM(lua_State*L,const TValue*p1,const TValue*p2, -StkId res,TMS event){ -const TValue*tm=luaT_gettmbyobj(L,p1,event); -if(ttisnil(tm)) -tm=luaT_gettmbyobj(L,p2,event); -if(ttisnil(tm))return 0; -callTMres(L,res,tm,p1,p2); -return 1; -} -static const TValue*get_compTM(lua_State*L,Table*mt1,Table*mt2, -TMS event){ -const TValue*tm1=fasttm(L,mt1,event); -const TValue*tm2; -if(tm1==NULL)return NULL; -if(mt1==mt2)return tm1; -tm2=fasttm(L,mt2,event); -if(tm2==NULL)return NULL; -if(luaO_rawequalObj(tm1,tm2)) -return tm1; -return NULL; -} -static int call_orderTM(lua_State*L,const TValue*p1,const TValue*p2, -TMS event){ -const TValue*tm1=luaT_gettmbyobj(L,p1,event); -const TValue*tm2; -if(ttisnil(tm1))return-1; -tm2=luaT_gettmbyobj(L,p2,event); -if(!luaO_rawequalObj(tm1,tm2)) -return-1; -callTMres(L,L->top,tm1,p1,p2); -return!l_isfalse(L->top); -} -static int l_strcmp(const TString*ls,const TString*rs){ -const char*l=getstr(ls); -size_t ll=ls->tsv.len; -const char*r=getstr(rs); -size_t lr=rs->tsv.len; -for(;;){ -int temp=strcoll(l,r); -if(temp!=0)return temp; -else{ -size_t len=strlen(l); -if(len==lr) -return(len==ll)?0:1; -else if(len==ll) -return-1; -len++; -l+=len;ll-=len;r+=len;lr-=len; -} -} -} -static int luaV_lessthan(lua_State*L,const TValue*l,const TValue*r){ -int res; -if(ttype(l)!=ttype(r)) -return luaG_ordererror(L,l,r); -else if(ttisnumber(l)) -return luai_numlt(nvalue(l),nvalue(r)); -else if(ttisstring(l)) -return l_strcmp(rawtsvalue(l),rawtsvalue(r))<0; -else if((res=call_orderTM(L,l,r,TM_LT))!=-1) -return res; -return luaG_ordererror(L,l,r); -} -static int lessequal(lua_State*L,const TValue*l,const TValue*r){ -int res; -if(ttype(l)!=ttype(r)) -return luaG_ordererror(L,l,r); -else if(ttisnumber(l)) -return luai_numle(nvalue(l),nvalue(r)); -else if(ttisstring(l)) -return l_strcmp(rawtsvalue(l),rawtsvalue(r))<=0; -else if((res=call_orderTM(L,l,r,TM_LE))!=-1) -return res; -else if((res=call_orderTM(L,r,l,TM_LT))!=-1) -return!res; -return luaG_ordererror(L,l,r); -} -static int luaV_equalval(lua_State*L,const TValue*t1,const TValue*t2){ -const TValue*tm; -switch(ttype(t1)){ -case 0:return 1; -case 3:return luai_numeq(nvalue(t1),nvalue(t2)); -case 1:return bvalue(t1)==bvalue(t2); -case 2:return pvalue(t1)==pvalue(t2); -case 7:{ -if(uvalue(t1)==uvalue(t2))return 1; -tm=get_compTM(L,uvalue(t1)->metatable,uvalue(t2)->metatable, -TM_EQ); -break; -} -case 5:{ -if(hvalue(t1)==hvalue(t2))return 1; -tm=get_compTM(L,hvalue(t1)->metatable,hvalue(t2)->metatable,TM_EQ); -break; -} -default:return gcvalue(t1)==gcvalue(t2); -} -if(tm==NULL)return 0; -callTMres(L,L->top,tm,t1,t2); -return!l_isfalse(L->top); -} -static void luaV_concat(lua_State*L,int total,int last){ -do{ -StkId top=L->base+last+1; -int n=2; -if(!(ttisstring(top-2)||ttisnumber(top-2))||!tostring(L,top-1)){ -if(!call_binTM(L,top-2,top-1,top-2,TM_CONCAT)) -luaG_concaterror(L,top-2,top-1); -}else if(tsvalue(top-1)->len==0) -(void)tostring(L,top-2); -else{ -size_t tl=tsvalue(top-1)->len; -char*buffer; -int i; -for(n=1;nlen; -if(l>=((size_t)(~(size_t)0)-2)-tl)luaG_runerror(L,"string length overflow"); -tl+=l; -} -buffer=luaZ_openspace(L,&G(L)->buff,tl); -tl=0; -for(i=n;i>0;i--){ -size_t l=tsvalue(top-i)->len; -memcpy(buffer+tl,svalue(top-i),l); -tl+=l; -} -setsvalue(L,top-n,luaS_newlstr(L,buffer,tl)); -} -total-=n-1; -last-=n-1; -}while(total>1); -} -static void Arith(lua_State*L,StkId ra,const TValue*rb, -const TValue*rc,TMS op){ -TValue tempb,tempc; -const TValue*b,*c; -if((b=luaV_tonumber(rb,&tempb))!=NULL&& -(c=luaV_tonumber(rc,&tempc))!=NULL){ -lua_Number nb=nvalue(b),nc=nvalue(c); -switch(op){ -case TM_ADD:setnvalue(ra,luai_numadd(nb,nc));break; -case TM_SUB:setnvalue(ra,luai_numsub(nb,nc));break; -case TM_MUL:setnvalue(ra,luai_nummul(nb,nc));break; -case TM_DIV:setnvalue(ra,luai_numdiv(nb,nc));break; -case TM_MOD:setnvalue(ra,luai_nummod(nb,nc));break; -case TM_POW:setnvalue(ra,luai_numpow(nb,nc));break; -case TM_UNM:setnvalue(ra,luai_numunm(nb));break; -default:break; -} -} -else if(!call_binTM(L,rb,rc,ra,op)) -luaG_aritherror(L,rb,rc); -} -#define runtime_check(L,c){if(!(c))break;} -#define RA(i)(base+GETARG_A(i)) -#define RB(i)check_exp(getBMode(GET_OPCODE(i))==OpArgR,base+GETARG_B(i)) -#define RKB(i)check_exp(getBMode(GET_OPCODE(i))==OpArgK,ISK(GETARG_B(i))?k+INDEXK(GETARG_B(i)):base+GETARG_B(i)) -#define RKC(i)check_exp(getCMode(GET_OPCODE(i))==OpArgK,ISK(GETARG_C(i))?k+INDEXK(GETARG_C(i)):base+GETARG_C(i)) -#define KBx(i)check_exp(getBMode(GET_OPCODE(i))==OpArgK,k+GETARG_Bx(i)) -#define dojump(L,pc,i){(pc)+=(i);} -#define Protect(x){L->savedpc=pc;{x;};base=L->base;} -#define arith_op(op,tm){TValue*rb=RKB(i);TValue*rc=RKC(i);if(ttisnumber(rb)&&ttisnumber(rc)){lua_Number nb=nvalue(rb),nc=nvalue(rc);setnvalue(ra,op(nb,nc));}else Protect(Arith(L,ra,rb,rc,tm));} -static void luaV_execute(lua_State*L,int nexeccalls){ -LClosure*cl; -StkId base; -TValue*k; -const Instruction*pc; -reentry: -pc=L->savedpc; -cl=&clvalue(L->ci->func)->l; -base=L->base; -k=cl->p->k; -for(;;){ -const Instruction i=*pc++; -StkId ra; -ra=RA(i); -switch(GET_OPCODE(i)){ -case OP_MOVE:{ -setobj(L,ra,RB(i)); -continue; -} -case OP_LOADK:{ -setobj(L,ra,KBx(i)); -continue; -} -case OP_LOADBOOL:{ -setbvalue(ra,GETARG_B(i)); -if(GETARG_C(i))pc++; -continue; -} -case OP_LOADNIL:{ -TValue*rb=RB(i); -do{ -setnilvalue(rb--); -}while(rb>=ra); -continue; -} -case OP_GETUPVAL:{ -int b=GETARG_B(i); -setobj(L,ra,cl->upvals[b]->v); -continue; -} -case OP_GETGLOBAL:{ -TValue g; -TValue*rb=KBx(i); -sethvalue(L,&g,cl->env); -Protect(luaV_gettable(L,&g,rb,ra)); -continue; -} -case OP_GETTABLE:{ -Protect(luaV_gettable(L,RB(i),RKC(i),ra)); -continue; -} -case OP_SETGLOBAL:{ -TValue g; -sethvalue(L,&g,cl->env); -Protect(luaV_settable(L,&g,KBx(i),ra)); -continue; -} -case OP_SETUPVAL:{ -UpVal*uv=cl->upvals[GETARG_B(i)]; -setobj(L,uv->v,ra); -luaC_barrier(L,uv,ra); -continue; -} -case OP_SETTABLE:{ -Protect(luaV_settable(L,ra,RKB(i),RKC(i))); -continue; -} -case OP_NEWTABLE:{ -int b=GETARG_B(i); -int c=GETARG_C(i); -sethvalue(L,ra,luaH_new(L,luaO_fb2int(b),luaO_fb2int(c))); -Protect(luaC_checkGC(L)); -continue; -} -case OP_SELF:{ -StkId rb=RB(i); -setobj(L,ra+1,rb); -Protect(luaV_gettable(L,rb,RKC(i),ra)); -continue; -} -case OP_ADD:{ -arith_op(luai_numadd,TM_ADD); -continue; -} -case OP_SUB:{ -arith_op(luai_numsub,TM_SUB); -continue; -} -case OP_MUL:{ -arith_op(luai_nummul,TM_MUL); -continue; -} -case OP_DIV:{ -arith_op(luai_numdiv,TM_DIV); -continue; -} -case OP_MOD:{ -arith_op(luai_nummod,TM_MOD); -continue; -} -case OP_POW:{ -arith_op(luai_numpow,TM_POW); -continue; -} -case OP_UNM:{ -TValue*rb=RB(i); -if(ttisnumber(rb)){ -lua_Number nb=nvalue(rb); -setnvalue(ra,luai_numunm(nb)); -} -else{ -Protect(Arith(L,ra,rb,rb,TM_UNM)); -} -continue; -} -case OP_NOT:{ -int res=l_isfalse(RB(i)); -setbvalue(ra,res); -continue; -} -case OP_LEN:{ -const TValue*rb=RB(i); -switch(ttype(rb)){ -case 5:{ -setnvalue(ra,cast_num(luaH_getn(hvalue(rb)))); -break; -} -case 4:{ -setnvalue(ra,cast_num(tsvalue(rb)->len)); -break; -} -default:{ -Protect( -if(!call_binTM(L,rb,(&luaO_nilobject_),ra,TM_LEN)) -luaG_typeerror(L,rb,"get length of"); -) -} -} -continue; -} -case OP_CONCAT:{ -int b=GETARG_B(i); -int c=GETARG_C(i); -Protect(luaV_concat(L,c-b+1,c);luaC_checkGC(L)); -setobj(L,RA(i),base+b); -continue; -} -case OP_JMP:{ -dojump(L,pc,GETARG_sBx(i)); -continue; -} -case OP_EQ:{ -TValue*rb=RKB(i); -TValue*rc=RKC(i); -Protect( -if(equalobj(L,rb,rc)==GETARG_A(i)) -dojump(L,pc,GETARG_sBx(*pc)); -) -pc++; -continue; -} -case OP_LT:{ -Protect( -if(luaV_lessthan(L,RKB(i),RKC(i))==GETARG_A(i)) -dojump(L,pc,GETARG_sBx(*pc)); -) -pc++; -continue; -} -case OP_LE:{ -Protect( -if(lessequal(L,RKB(i),RKC(i))==GETARG_A(i)) -dojump(L,pc,GETARG_sBx(*pc)); -) -pc++; -continue; -} -case OP_TEST:{ -if(l_isfalse(ra)!=GETARG_C(i)) -dojump(L,pc,GETARG_sBx(*pc)); -pc++; -continue; -} -case OP_TESTSET:{ -TValue*rb=RB(i); -if(l_isfalse(rb)!=GETARG_C(i)){ -setobj(L,ra,rb); -dojump(L,pc,GETARG_sBx(*pc)); -} -pc++; -continue; -} -case OP_CALL:{ -int b=GETARG_B(i); -int nresults=GETARG_C(i)-1; -if(b!=0)L->top=ra+b; -L->savedpc=pc; -switch(luaD_precall(L,ra,nresults)){ -case 0:{ -nexeccalls++; -goto reentry; -} -case 1:{ -if(nresults>=0)L->top=L->ci->top; -base=L->base; -continue; -} -default:{ -return; -} -} -} -case OP_TAILCALL:{ -int b=GETARG_B(i); -if(b!=0)L->top=ra+b; -L->savedpc=pc; -switch(luaD_precall(L,ra,(-1))){ -case 0:{ -CallInfo*ci=L->ci-1; -int aux; -StkId func=ci->func; -StkId pfunc=(ci+1)->func; -if(L->openupval)luaF_close(L,ci->base); -L->base=ci->base=ci->func+((ci+1)->base-pfunc); -for(aux=0;pfunc+auxtop;aux++) -setobj(L,func+aux,pfunc+aux); -ci->top=L->top=func+aux; -ci->savedpc=L->savedpc; -ci->tailcalls++; -L->ci--; -goto reentry; -} -case 1:{ -base=L->base; -continue; -} -default:{ -return; -} -} -} -case OP_RETURN:{ -int b=GETARG_B(i); -if(b!=0)L->top=ra+b-1; -if(L->openupval)luaF_close(L,base); -L->savedpc=pc; -b=luaD_poscall(L,ra); -if(--nexeccalls==0) -return; -else{ -if(b)L->top=L->ci->top; -goto reentry; -} -} -case OP_FORLOOP:{ -lua_Number step=nvalue(ra+2); -lua_Number idx=luai_numadd(nvalue(ra),step); -lua_Number limit=nvalue(ra+1); -if(luai_numlt(0,step)?luai_numle(idx,limit) -:luai_numle(limit,idx)){ -dojump(L,pc,GETARG_sBx(i)); -setnvalue(ra,idx); -setnvalue(ra+3,idx); -} -continue; -} -case OP_FORPREP:{ -const TValue*init=ra; -const TValue*plimit=ra+1; -const TValue*pstep=ra+2; -L->savedpc=pc; -if(!tonumber(init,ra)) -luaG_runerror(L,LUA_QL("for")" initial value must be a number"); -else if(!tonumber(plimit,ra+1)) -luaG_runerror(L,LUA_QL("for")" limit must be a number"); -else if(!tonumber(pstep,ra+2)) -luaG_runerror(L,LUA_QL("for")" step must be a number"); -setnvalue(ra,luai_numsub(nvalue(ra),nvalue(pstep))); -dojump(L,pc,GETARG_sBx(i)); -continue; -} -case OP_TFORLOOP:{ -StkId cb=ra+3; -setobj(L,cb+2,ra+2); -setobj(L,cb+1,ra+1); -setobj(L,cb,ra); -L->top=cb+3; -Protect(luaD_call(L,cb,GETARG_C(i))); -L->top=L->ci->top; -cb=RA(i)+3; -if(!ttisnil(cb)){ -setobj(L,cb-1,cb); -dojump(L,pc,GETARG_sBx(*pc)); -} -pc++; -continue; -} -case OP_SETLIST:{ -int n=GETARG_B(i); -int c=GETARG_C(i); -int last; -Table*h; -if(n==0){ -n=cast_int(L->top-ra)-1; -L->top=L->ci->top; -} -if(c==0)c=cast_int(*pc++); -runtime_check(L,ttistable(ra)); -h=hvalue(ra); -last=((c-1)*50)+n; -if(last>h->sizearray) -luaH_resizearray(L,h,last); -for(;n>0;n--){ -TValue*val=ra+n; -setobj(L,luaH_setnum(L,h,last--),val); -luaC_barriert(L,h,val); -} -continue; -} -case OP_CLOSE:{ -luaF_close(L,ra); -continue; -} -case OP_CLOSURE:{ -Proto*p; -Closure*ncl; -int nup,j; -p=cl->p->p[GETARG_Bx(i)]; -nup=p->nups; -ncl=luaF_newLclosure(L,nup,cl->env); -ncl->l.p=p; -for(j=0;jl.upvals[j]=cl->upvals[GETARG_B(*pc)]; -else{ -ncl->l.upvals[j]=luaF_findupval(L,base+GETARG_B(*pc)); -} -} -setclvalue(L,ra,ncl); -Protect(luaC_checkGC(L)); -continue; -} -case OP_VARARG:{ -int b=GETARG_B(i)-1; -int j; -CallInfo*ci=L->ci; -int n=cast_int(ci->base-ci->func)-cl->p->numparams-1; -if(b==(-1)){ -Protect(luaD_checkstack(L,n)); -ra=RA(i); -b=n; -L->top=ra+n; -} -for(j=0;jbase-n+j); -} -else{ -setnilvalue(ra+j); -} -} -continue; -} -} -} -} -#define api_checknelems(L,n)luai_apicheck(L,(n)<=(L->top-L->base)) -#define api_checkvalidindex(L,i)luai_apicheck(L,(i)!=(&luaO_nilobject_)) -#define api_incr_top(L){luai_apicheck(L,L->topci->top);L->top++;} -static TValue*index2adr(lua_State*L,int idx){ -if(idx>0){ -TValue*o=L->base+(idx-1); -luai_apicheck(L,idx<=L->ci->top-L->base); -if(o>=L->top)return cast(TValue*,(&luaO_nilobject_)); -else return o; -} -else if(idx>(-10000)){ -luai_apicheck(L,idx!=0&&-idx<=L->top-L->base); -return L->top+idx; -} -else switch(idx){ -case(-10000):return registry(L); -case(-10001):{ -Closure*func=curr_func(L); -sethvalue(L,&L->env,func->c.env); -return&L->env; -} -case(-10002):return gt(L); -default:{ -Closure*func=curr_func(L); -idx=(-10002)-idx; -return(idx<=func->c.nupvalues) -?&func->c.upvalue[idx-1] -:cast(TValue*,(&luaO_nilobject_)); -} -} -} -static Table*getcurrenv(lua_State*L){ -if(L->ci==L->base_ci) -return hvalue(gt(L)); -else{ -Closure*func=curr_func(L); -return func->c.env; -} -} -static int lua_checkstack(lua_State*L,int size){ -int res=1; -if(size>8000||(L->top-L->base+size)>8000) -res=0; -else if(size>0){ -luaD_checkstack(L,size); -if(L->ci->toptop+size) -L->ci->top=L->top+size; -} -return res; -} -static lua_CFunction lua_atpanic(lua_State*L,lua_CFunction panicf){ -lua_CFunction old; -old=G(L)->panic; -G(L)->panic=panicf; -return old; -} -static int lua_gettop(lua_State*L){ -return cast_int(L->top-L->base); -} -static void lua_settop(lua_State*L,int idx){ -if(idx>=0){ -luai_apicheck(L,idx<=L->stack_last-L->base); -while(L->topbase+idx) -setnilvalue(L->top++); -L->top=L->base+idx; -} -else{ -luai_apicheck(L,-(idx+1)<=(L->top-L->base)); -L->top+=idx+1; -} -} -static void lua_remove(lua_State*L,int idx){ -StkId p; -p=index2adr(L,idx); -api_checkvalidindex(L,p); -while(++ptop)setobj(L,p-1,p); -L->top--; -} -static void lua_insert(lua_State*L,int idx){ -StkId p; -StkId q; -p=index2adr(L,idx); -api_checkvalidindex(L,p); -for(q=L->top;q>p;q--)setobj(L,q,q-1); -setobj(L,p,L->top); -} -static void lua_replace(lua_State*L,int idx){ -StkId o; -if(idx==(-10001)&&L->ci==L->base_ci) -luaG_runerror(L,"no calling environment"); -api_checknelems(L,1); -o=index2adr(L,idx); -api_checkvalidindex(L,o); -if(idx==(-10001)){ -Closure*func=curr_func(L); -luai_apicheck(L,ttistable(L->top-1)); -func->c.env=hvalue(L->top-1); -luaC_barrier(L,func,L->top-1); -} -else{ -setobj(L,o,L->top-1); -if(idx<(-10002)) -luaC_barrier(L,curr_func(L),L->top-1); -} -L->top--; -} -static void lua_pushvalue(lua_State*L,int idx){ -setobj(L,L->top,index2adr(L,idx)); -api_incr_top(L); -} -static int lua_type(lua_State*L,int idx){ -StkId o=index2adr(L,idx); -return(o==(&luaO_nilobject_))?(-1):ttype(o); -} -static const char*lua_typename(lua_State*L,int t){ -UNUSED(L); -return(t==(-1))?"no value":luaT_typenames[t]; -} -static int lua_iscfunction(lua_State*L,int idx){ -StkId o=index2adr(L,idx); -return iscfunction(o); -} -static int lua_isnumber(lua_State*L,int idx){ -TValue n; -const TValue*o=index2adr(L,idx); -return tonumber(o,&n); -} -static int lua_isstring(lua_State*L,int idx){ -int t=lua_type(L,idx); -return(t==4||t==3); -} -static int lua_rawequal(lua_State*L,int index1,int index2){ -StkId o1=index2adr(L,index1); -StkId o2=index2adr(L,index2); -return(o1==(&luaO_nilobject_)||o2==(&luaO_nilobject_))?0 -:luaO_rawequalObj(o1,o2); -} -static int lua_lessthan(lua_State*L,int index1,int index2){ -StkId o1,o2; -int i; -o1=index2adr(L,index1); -o2=index2adr(L,index2); -i=(o1==(&luaO_nilobject_)||o2==(&luaO_nilobject_))?0 -:luaV_lessthan(L,o1,o2); -return i; -} -static lua_Number lua_tonumber(lua_State*L,int idx){ -TValue n; -const TValue*o=index2adr(L,idx); -if(tonumber(o,&n)) -return nvalue(o); -else -return 0; -} -static lua_Integer lua_tointeger(lua_State*L,int idx){ -TValue n; -const TValue*o=index2adr(L,idx); -if(tonumber(o,&n)){ -lua_Integer res; -lua_Number num=nvalue(o); -lua_number2integer(res,num); -return res; -} -else -return 0; -} -static int lua_toboolean(lua_State*L,int idx){ -const TValue*o=index2adr(L,idx); -return!l_isfalse(o); -} -static const char*lua_tolstring(lua_State*L,int idx,size_t*len){ -StkId o=index2adr(L,idx); -if(!ttisstring(o)){ -if(!luaV_tostring(L,o)){ -if(len!=NULL)*len=0; -return NULL; -} -luaC_checkGC(L); -o=index2adr(L,idx); -} -if(len!=NULL)*len=tsvalue(o)->len; -return svalue(o); -} -static size_t lua_objlen(lua_State*L,int idx){ -StkId o=index2adr(L,idx); -switch(ttype(o)){ -case 4:return tsvalue(o)->len; -case 7:return uvalue(o)->len; -case 5:return luaH_getn(hvalue(o)); -case 3:{ -size_t l; -l=(luaV_tostring(L,o)?tsvalue(o)->len:0); -return l; -} -default:return 0; -} -} -static lua_CFunction lua_tocfunction(lua_State*L,int idx){ -StkId o=index2adr(L,idx); -return(!iscfunction(o))?NULL:clvalue(o)->c.f; -} -static void*lua_touserdata(lua_State*L,int idx){ -StkId o=index2adr(L,idx); -switch(ttype(o)){ -case 7:return(rawuvalue(o)+1); -case 2:return pvalue(o); -default:return NULL; -} -} -static void lua_pushnil(lua_State*L){ -setnilvalue(L->top); -api_incr_top(L); -} -static void lua_pushnumber(lua_State*L,lua_Number n){ -setnvalue(L->top,n); -api_incr_top(L); -} -static void lua_pushinteger(lua_State*L,lua_Integer n){ -setnvalue(L->top,cast_num(n)); -api_incr_top(L); -} -static void lua_pushlstring(lua_State*L,const char*s,size_t len){ -luaC_checkGC(L); -setsvalue(L,L->top,luaS_newlstr(L,s,len)); -api_incr_top(L); -} -static void lua_pushstring(lua_State*L,const char*s){ -if(s==NULL) -lua_pushnil(L); -else -lua_pushlstring(L,s,strlen(s)); -} -static const char*lua_pushvfstring(lua_State*L,const char*fmt, -va_list argp){ -const char*ret; -luaC_checkGC(L); -ret=luaO_pushvfstring(L,fmt,argp); -return ret; -} -static const char*lua_pushfstring(lua_State*L,const char*fmt,...){ -const char*ret; -va_list argp; -luaC_checkGC(L); -va_start(argp,fmt); -ret=luaO_pushvfstring(L,fmt,argp); -va_end(argp); -return ret; -} -static void lua_pushcclosure(lua_State*L,lua_CFunction fn,int n){ -Closure*cl; -luaC_checkGC(L); -api_checknelems(L,n); -cl=luaF_newCclosure(L,n,getcurrenv(L)); -cl->c.f=fn; -L->top-=n; -while(n--) -setobj(L,&cl->c.upvalue[n],L->top+n); -setclvalue(L,L->top,cl); -api_incr_top(L); -} -static void lua_pushboolean(lua_State*L,int b){ -setbvalue(L->top,(b!=0)); -api_incr_top(L); -} -static int lua_pushthread(lua_State*L){ -setthvalue(L,L->top,L); -api_incr_top(L); -return(G(L)->mainthread==L); -} -static void lua_gettable(lua_State*L,int idx){ -StkId t; -t=index2adr(L,idx); -api_checkvalidindex(L,t); -luaV_gettable(L,t,L->top-1,L->top-1); -} -static void lua_getfield(lua_State*L,int idx,const char*k){ -StkId t; -TValue key; -t=index2adr(L,idx); -api_checkvalidindex(L,t); -setsvalue(L,&key,luaS_new(L,k)); -luaV_gettable(L,t,&key,L->top); -api_incr_top(L); -} -static void lua_rawget(lua_State*L,int idx){ -StkId t; -t=index2adr(L,idx); -luai_apicheck(L,ttistable(t)); -setobj(L,L->top-1,luaH_get(hvalue(t),L->top-1)); -} -static void lua_rawgeti(lua_State*L,int idx,int n){ -StkId o; -o=index2adr(L,idx); -luai_apicheck(L,ttistable(o)); -setobj(L,L->top,luaH_getnum(hvalue(o),n)); -api_incr_top(L); -} -static void lua_createtable(lua_State*L,int narray,int nrec){ -luaC_checkGC(L); -sethvalue(L,L->top,luaH_new(L,narray,nrec)); -api_incr_top(L); -} -static int lua_getmetatable(lua_State*L,int objindex){ -const TValue*obj; -Table*mt=NULL; -int res; -obj=index2adr(L,objindex); -switch(ttype(obj)){ -case 5: -mt=hvalue(obj)->metatable; -break; -case 7: -mt=uvalue(obj)->metatable; -break; -default: -mt=G(L)->mt[ttype(obj)]; -break; -} -if(mt==NULL) -res=0; -else{ -sethvalue(L,L->top,mt); -api_incr_top(L); -res=1; -} -return res; -} -static void lua_getfenv(lua_State*L,int idx){ -StkId o; -o=index2adr(L,idx); -api_checkvalidindex(L,o); -switch(ttype(o)){ -case 6: -sethvalue(L,L->top,clvalue(o)->c.env); -break; -case 7: -sethvalue(L,L->top,uvalue(o)->env); -break; -case 8: -setobj(L,L->top,gt(thvalue(o))); -break; -default: -setnilvalue(L->top); -break; -} -api_incr_top(L); -} -static void lua_settable(lua_State*L,int idx){ -StkId t; -api_checknelems(L,2); -t=index2adr(L,idx); -api_checkvalidindex(L,t); -luaV_settable(L,t,L->top-2,L->top-1); -L->top-=2; -} -static void lua_setfield(lua_State*L,int idx,const char*k){ -StkId t; -TValue key; -api_checknelems(L,1); -t=index2adr(L,idx); -api_checkvalidindex(L,t); -setsvalue(L,&key,luaS_new(L,k)); -luaV_settable(L,t,&key,L->top-1); -L->top--; -} -static void lua_rawset(lua_State*L,int idx){ -StkId t; -api_checknelems(L,2); -t=index2adr(L,idx); -luai_apicheck(L,ttistable(t)); -setobj(L,luaH_set(L,hvalue(t),L->top-2),L->top-1); -luaC_barriert(L,hvalue(t),L->top-1); -L->top-=2; -} -static void lua_rawseti(lua_State*L,int idx,int n){ -StkId o; -api_checknelems(L,1); -o=index2adr(L,idx); -luai_apicheck(L,ttistable(o)); -setobj(L,luaH_setnum(L,hvalue(o),n),L->top-1); -luaC_barriert(L,hvalue(o),L->top-1); -L->top--; -} -static int lua_setmetatable(lua_State*L,int objindex){ -TValue*obj; -Table*mt; -api_checknelems(L,1); -obj=index2adr(L,objindex); -api_checkvalidindex(L,obj); -if(ttisnil(L->top-1)) -mt=NULL; -else{ -luai_apicheck(L,ttistable(L->top-1)); -mt=hvalue(L->top-1); -} -switch(ttype(obj)){ -case 5:{ -hvalue(obj)->metatable=mt; -if(mt) -luaC_objbarriert(L,hvalue(obj),mt); -break; -} -case 7:{ -uvalue(obj)->metatable=mt; -if(mt) -luaC_objbarrier(L,rawuvalue(obj),mt); -break; -} -default:{ -G(L)->mt[ttype(obj)]=mt; -break; -} -} -L->top--; -return 1; -} -static int lua_setfenv(lua_State*L,int idx){ -StkId o; -int res=1; -api_checknelems(L,1); -o=index2adr(L,idx); -api_checkvalidindex(L,o); -luai_apicheck(L,ttistable(L->top-1)); -switch(ttype(o)){ -case 6: -clvalue(o)->c.env=hvalue(L->top-1); -break; -case 7: -uvalue(o)->env=hvalue(L->top-1); -break; -case 8: -sethvalue(L,gt(thvalue(o)),hvalue(L->top-1)); -break; -default: -res=0; -break; -} -if(res)luaC_objbarrier(L,gcvalue(o),hvalue(L->top-1)); -L->top--; -return res; -} -#define adjustresults(L,nres){if(nres==(-1)&&L->top>=L->ci->top)L->ci->top=L->top;} -#define checkresults(L,na,nr)luai_apicheck(L,(nr)==(-1)||(L->ci->top-L->top>=(nr)-(na))) -static void lua_call(lua_State*L,int nargs,int nresults){ -StkId func; -api_checknelems(L,nargs+1); -checkresults(L,nargs,nresults); -func=L->top-(nargs+1); -luaD_call(L,func,nresults); -adjustresults(L,nresults); -} -struct CallS{ -StkId func; -int nresults; -}; -static void f_call(lua_State*L,void*ud){ -struct CallS*c=cast(struct CallS*,ud); -luaD_call(L,c->func,c->nresults); -} -static int lua_pcall(lua_State*L,int nargs,int nresults,int errfunc){ -struct CallS c; -int status; -ptrdiff_t func; -api_checknelems(L,nargs+1); -checkresults(L,nargs,nresults); -if(errfunc==0) -func=0; -else{ -StkId o=index2adr(L,errfunc); -api_checkvalidindex(L,o); -func=savestack(L,o); -} -c.func=L->top-(nargs+1); -c.nresults=nresults; -status=luaD_pcall(L,f_call,&c,savestack(L,c.func),func); -adjustresults(L,nresults); -return status; -} -static int lua_load(lua_State*L,lua_Reader reader,void*data, -const char*chunkname){ -ZIO z; -int status; -if(!chunkname)chunkname="?"; -luaZ_init(L,&z,reader,data); -status=luaD_protectedparser(L,&z,chunkname); -return status; -} -static int lua_error(lua_State*L){ -api_checknelems(L,1); -luaG_errormsg(L); -return 0; -} -static int lua_next(lua_State*L,int idx){ -StkId t; -int more; -t=index2adr(L,idx); -luai_apicheck(L,ttistable(t)); -more=luaH_next(L,hvalue(t),L->top-1); -if(more){ -api_incr_top(L); -} -else -L->top-=1; -return more; -} -static void lua_concat(lua_State*L,int n){ -api_checknelems(L,n); -if(n>=2){ -luaC_checkGC(L); -luaV_concat(L,n,cast_int(L->top-L->base)-1); -L->top-=(n-1); -} -else if(n==0){ -setsvalue(L,L->top,luaS_newlstr(L,"",0)); -api_incr_top(L); -} -} -static void*lua_newuserdata(lua_State*L,size_t size){ -Udata*u; -luaC_checkGC(L); -u=luaS_newudata(L,size,getcurrenv(L)); -setuvalue(L,L->top,u); -api_incr_top(L); -return u+1; -} -#define luaL_getn(L,i)((int)lua_objlen(L,i)) -#define luaL_setn(L,i,j)((void)0) -typedef struct luaL_Reg{ -const char*name; -lua_CFunction func; -}luaL_Reg; -static void luaI_openlib(lua_State*L,const char*libname, -const luaL_Reg*l,int nup); -static int luaL_argerror(lua_State*L,int numarg,const char*extramsg); -static const char* luaL_checklstring(lua_State*L,int numArg, -size_t*l); -static const char* luaL_optlstring(lua_State*L,int numArg, -const char*def,size_t*l); -static lua_Integer luaL_checkinteger(lua_State*L,int numArg); -static lua_Integer luaL_optinteger(lua_State*L,int nArg, -lua_Integer def); -static int luaL_error(lua_State*L,const char*fmt,...); -static const char* luaL_findtable(lua_State*L,int idx, -const char*fname,int szhint); -#define luaL_argcheck(L,cond,numarg,extramsg)((void)((cond)||luaL_argerror(L,(numarg),(extramsg)))) -#define luaL_checkstring(L,n)(luaL_checklstring(L,(n),NULL)) -#define luaL_optstring(L,n,d)(luaL_optlstring(L,(n),(d),NULL)) -#define luaL_checkint(L,n)((int)luaL_checkinteger(L,(n))) -#define luaL_optint(L,n,d)((int)luaL_optinteger(L,(n),(d))) -#define luaL_typename(L,i)lua_typename(L,lua_type(L,(i))) -#define luaL_getmetatable(L,n)(lua_getfield(L,(-10000),(n))) -#define luaL_opt(L,f,n,d)(lua_isnoneornil(L,(n))?(d):f(L,(n))) -typedef struct luaL_Buffer{ -char*p; -int lvl; -lua_State*L; -char buffer[BUFSIZ]; -}luaL_Buffer; -#define luaL_addchar(B,c)((void)((B)->p<((B)->buffer+BUFSIZ)||luaL_prepbuffer(B)),(*(B)->p++=(char)(c))) -#define luaL_addsize(B,n)((B)->p+=(n)) -static char* luaL_prepbuffer(luaL_Buffer*B); -static int luaL_argerror(lua_State*L,int narg,const char*extramsg){ -lua_Debug ar; -if(!lua_getstack(L,0,&ar)) -return luaL_error(L,"bad argument #%d (%s)",narg,extramsg); -lua_getinfo(L,"n",&ar); -if(strcmp(ar.namewhat,"method")==0){ -narg--; -if(narg==0) -return luaL_error(L,"calling "LUA_QL("%s")" on bad self (%s)", -ar.name,extramsg); -} -if(ar.name==NULL) -ar.name="?"; -return luaL_error(L,"bad argument #%d to "LUA_QL("%s")" (%s)", -narg,ar.name,extramsg); -} -static int luaL_typerror(lua_State*L,int narg,const char*tname){ -const char*msg=lua_pushfstring(L,"%s expected, got %s", -tname,luaL_typename(L,narg)); -return luaL_argerror(L,narg,msg); -} -static void tag_error(lua_State*L,int narg,int tag){ -luaL_typerror(L,narg,lua_typename(L,tag)); -} -static void luaL_where(lua_State*L,int level){ -lua_Debug ar; -if(lua_getstack(L,level,&ar)){ -lua_getinfo(L,"Sl",&ar); -if(ar.currentline>0){ -lua_pushfstring(L,"%s:%d: ",ar.short_src,ar.currentline); -return; -} -} -lua_pushliteral(L,""); -} -static int luaL_error(lua_State*L,const char*fmt,...){ -va_list argp; -va_start(argp,fmt); -luaL_where(L,1); -lua_pushvfstring(L,fmt,argp); -va_end(argp); -lua_concat(L,2); -return lua_error(L); -} -static int luaL_newmetatable(lua_State*L,const char*tname){ -lua_getfield(L,(-10000),tname); -if(!lua_isnil(L,-1)) -return 0; -lua_pop(L,1); -lua_newtable(L); -lua_pushvalue(L,-1); -lua_setfield(L,(-10000),tname); -return 1; -} -static void*luaL_checkudata(lua_State*L,int ud,const char*tname){ -void*p=lua_touserdata(L,ud); -if(p!=NULL){ -if(lua_getmetatable(L,ud)){ -lua_getfield(L,(-10000),tname); -if(lua_rawequal(L,-1,-2)){ -lua_pop(L,2); -return p; -} -} -} -luaL_typerror(L,ud,tname); -return NULL; -} -static void luaL_checkstack(lua_State*L,int space,const char*mes){ -if(!lua_checkstack(L,space)) -luaL_error(L,"stack overflow (%s)",mes); -} -static void luaL_checktype(lua_State*L,int narg,int t){ -if(lua_type(L,narg)!=t) -tag_error(L,narg,t); -} -static void luaL_checkany(lua_State*L,int narg){ -if(lua_type(L,narg)==(-1)) -luaL_argerror(L,narg,"value expected"); -} -static const char*luaL_checklstring(lua_State*L,int narg,size_t*len){ -const char*s=lua_tolstring(L,narg,len); -if(!s)tag_error(L,narg,4); -return s; -} -static const char*luaL_optlstring(lua_State*L,int narg, -const char*def,size_t*len){ -if(lua_isnoneornil(L,narg)){ -if(len) -*len=(def?strlen(def):0); -return def; -} -else return luaL_checklstring(L,narg,len); -} -static lua_Number luaL_checknumber(lua_State*L,int narg){ -lua_Number d=lua_tonumber(L,narg); -if(d==0&&!lua_isnumber(L,narg)) -tag_error(L,narg,3); -return d; -} -static lua_Integer luaL_checkinteger(lua_State*L,int narg){ -lua_Integer d=lua_tointeger(L,narg); -if(d==0&&!lua_isnumber(L,narg)) -tag_error(L,narg,3); -return d; -} -static lua_Integer luaL_optinteger(lua_State*L,int narg, -lua_Integer def){ -return luaL_opt(L,luaL_checkinteger,narg,def); -} -static int luaL_getmetafield(lua_State*L,int obj,const char*event){ -if(!lua_getmetatable(L,obj)) -return 0; -lua_pushstring(L,event); -lua_rawget(L,-2); -if(lua_isnil(L,-1)){ -lua_pop(L,2); -return 0; -} -else{ -lua_remove(L,-2); -return 1; -} -} -static void luaL_register(lua_State*L,const char*libname, -const luaL_Reg*l){ -luaI_openlib(L,libname,l,0); -} -static int libsize(const luaL_Reg*l){ -int size=0; -for(;l->name;l++)size++; -return size; -} -static void luaI_openlib(lua_State*L,const char*libname, -const luaL_Reg*l,int nup){ -if(libname){ -int size=libsize(l); -luaL_findtable(L,(-10000),"_LOADED",1); -lua_getfield(L,-1,libname); -if(!lua_istable(L,-1)){ -lua_pop(L,1); -if(luaL_findtable(L,(-10002),libname,size)!=NULL) -luaL_error(L,"name conflict for module "LUA_QL("%s"),libname); -lua_pushvalue(L,-1); -lua_setfield(L,-3,libname); -} -lua_remove(L,-2); -lua_insert(L,-(nup+1)); -} -for(;l->name;l++){ -int i; -for(i=0;ifunc,nup); -lua_setfield(L,-(nup+2),l->name); -} -lua_pop(L,nup); -} -static const char*luaL_findtable(lua_State*L,int idx, -const char*fname,int szhint){ -const char*e; -lua_pushvalue(L,idx); -do{ -e=strchr(fname,'.'); -if(e==NULL)e=fname+strlen(fname); -lua_pushlstring(L,fname,e-fname); -lua_rawget(L,-2); -if(lua_isnil(L,-1)){ -lua_pop(L,1); -lua_createtable(L,0,(*e=='.'?1:szhint)); -lua_pushlstring(L,fname,e-fname); -lua_pushvalue(L,-2); -lua_settable(L,-4); -} -else if(!lua_istable(L,-1)){ -lua_pop(L,2); -return fname; -} -lua_remove(L,-2); -fname=e+1; -}while(*e=='.'); -return NULL; -} -#define bufflen(B)((B)->p-(B)->buffer) -#define bufffree(B)((size_t)(BUFSIZ-bufflen(B))) -static int emptybuffer(luaL_Buffer*B){ -size_t l=bufflen(B); -if(l==0)return 0; -else{ -lua_pushlstring(B->L,B->buffer,l); -B->p=B->buffer; -B->lvl++; -return 1; -} -} -static void adjuststack(luaL_Buffer*B){ -if(B->lvl>1){ -lua_State*L=B->L; -int toget=1; -size_t toplen=lua_strlen(L,-1); -do{ -size_t l=lua_strlen(L,-(toget+1)); -if(B->lvl-toget+1>=(20/2)||toplen>l){ -toplen+=l; -toget++; -} -else break; -}while(togetlvl); -lua_concat(L,toget); -B->lvl=B->lvl-toget+1; -} -} -static char*luaL_prepbuffer(luaL_Buffer*B){ -if(emptybuffer(B)) -adjuststack(B); -return B->buffer; -} -static void luaL_addlstring(luaL_Buffer*B,const char*s,size_t l){ -while(l--) -luaL_addchar(B,*s++); -} -static void luaL_pushresult(luaL_Buffer*B){ -emptybuffer(B); -lua_concat(B->L,B->lvl); -B->lvl=1; -} -static void luaL_addvalue(luaL_Buffer*B){ -lua_State*L=B->L; -size_t vl; -const char*s=lua_tolstring(L,-1,&vl); -if(vl<=bufffree(B)){ -memcpy(B->p,s,vl); -B->p+=vl; -lua_pop(L,1); -} -else{ -if(emptybuffer(B)) -lua_insert(L,-2); -B->lvl++; -adjuststack(B); -} -} -static void luaL_buffinit(lua_State*L,luaL_Buffer*B){ -B->L=L; -B->p=B->buffer; -B->lvl=0; -} -typedef struct LoadF{ -int extraline; -FILE*f; -char buff[BUFSIZ]; -}LoadF; -static const char*getF(lua_State*L,void*ud,size_t*size){ -LoadF*lf=(LoadF*)ud; -(void)L; -if(lf->extraline){ -lf->extraline=0; -*size=1; -return"\n"; -} -if(feof(lf->f))return NULL; -*size=fread(lf->buff,1,sizeof(lf->buff),lf->f); -return(*size>0)?lf->buff:NULL; -} -static int errfile(lua_State*L,const char*what,int fnameindex){ -const char*serr=strerror(errno); -const char*filename=lua_tostring(L,fnameindex)+1; -lua_pushfstring(L,"cannot %s %s: %s",what,filename,serr); -lua_remove(L,fnameindex); -return(5+1); -} -static int luaL_loadfile(lua_State*L,const char*filename){ -LoadF lf; -int status,readstatus; -int c; -int fnameindex=lua_gettop(L)+1; -lf.extraline=0; -if(filename==NULL){ -lua_pushliteral(L,"=stdin"); -lf.f=stdin; -} -else{ -lua_pushfstring(L,"@%s",filename); -lf.f=fopen(filename,"r"); -if(lf.f==NULL)return errfile(L,"open",fnameindex); -} -c=getc(lf.f); -if(c=='#'){ -lf.extraline=1; -while((c=getc(lf.f))!=EOF&&c!='\n'); -if(c=='\n')c=getc(lf.f); -} -if(c=="\033Lua"[0]&&filename){ -lf.f=freopen(filename,"rb",lf.f); -if(lf.f==NULL)return errfile(L,"reopen",fnameindex); -while((c=getc(lf.f))!=EOF&&c!="\033Lua"[0]); -lf.extraline=0; -} -ungetc(c,lf.f); -status=lua_load(L,getF,&lf,lua_tostring(L,-1)); -readstatus=ferror(lf.f); -if(filename)fclose(lf.f); -if(readstatus){ -lua_settop(L,fnameindex); -return errfile(L,"read",fnameindex); -} -lua_remove(L,fnameindex); -return status; -} -typedef struct LoadS{ -const char*s; -size_t size; -}LoadS; -static const char*getS(lua_State*L,void*ud,size_t*size){ -LoadS*ls=(LoadS*)ud; -(void)L; -if(ls->size==0)return NULL; -*size=ls->size; -ls->size=0; -return ls->s; -} -static int luaL_loadbuffer(lua_State*L,const char*buff,size_t size, -const char*name){ -LoadS ls; -ls.s=buff; -ls.size=size; -return lua_load(L,getS,&ls,name); -} -static void*l_alloc(void*ud,void*ptr,size_t osize,size_t nsize){ -(void)ud; -(void)osize; -if(nsize==0){ -free(ptr); -return NULL; -} -else -return realloc(ptr,nsize); -} -static int panic(lua_State*L){ -(void)L; -fprintf(stderr,"PANIC: unprotected error in call to Lua API (%s)\n", -lua_tostring(L,-1)); -return 0; -} -static lua_State*luaL_newstate(void){ -lua_State*L=lua_newstate(l_alloc,NULL); -if(L)lua_atpanic(L,&panic); -return L; -} -static int luaB_tonumber(lua_State*L){ -int base=luaL_optint(L,2,10); -if(base==10){ -luaL_checkany(L,1); -if(lua_isnumber(L,1)){ -lua_pushnumber(L,lua_tonumber(L,1)); -return 1; -} -} -else{ -const char*s1=luaL_checkstring(L,1); -char*s2; -unsigned long n; -luaL_argcheck(L,2<=base&&base<=36,2,"base out of range"); -n=strtoul(s1,&s2,base); -if(s1!=s2){ -while(isspace((unsigned char)(*s2)))s2++; -if(*s2=='\0'){ -lua_pushnumber(L,(lua_Number)n); -return 1; -} -} -} -lua_pushnil(L); -return 1; -} -static int luaB_error(lua_State*L){ -int level=luaL_optint(L,2,1); -lua_settop(L,1); -if(lua_isstring(L,1)&&level>0){ -luaL_where(L,level); -lua_pushvalue(L,1); -lua_concat(L,2); -} -return lua_error(L); -} -static int luaB_setmetatable(lua_State*L){ -int t=lua_type(L,2); -luaL_checktype(L,1,5); -luaL_argcheck(L,t==0||t==5,2, -"nil or table expected"); -if(luaL_getmetafield(L,1,"__metatable")) -luaL_error(L,"cannot change a protected metatable"); -lua_settop(L,2); -lua_setmetatable(L,1); -return 1; -} -static void getfunc(lua_State*L,int opt){ -if(lua_isfunction(L,1))lua_pushvalue(L,1); -else{ -lua_Debug ar; -int level=opt?luaL_optint(L,1,1):luaL_checkint(L,1); -luaL_argcheck(L,level>=0,1,"level must be non-negative"); -if(lua_getstack(L,level,&ar)==0) -luaL_argerror(L,1,"invalid level"); -lua_getinfo(L,"f",&ar); -if(lua_isnil(L,-1)) -luaL_error(L,"no function environment for tail call at level %d", -level); -} -} -static int luaB_setfenv(lua_State*L){ -luaL_checktype(L,2,5); -getfunc(L,0); -lua_pushvalue(L,2); -if(lua_isnumber(L,1)&&lua_tonumber(L,1)==0){ -lua_pushthread(L); -lua_insert(L,-2); -lua_setfenv(L,-2); -return 0; -} -else if(lua_iscfunction(L,-2)||lua_setfenv(L,-2)==0) -luaL_error(L, -LUA_QL("setfenv")" cannot change environment of given object"); -return 1; -} -static int luaB_rawget(lua_State*L){ -luaL_checktype(L,1,5); -luaL_checkany(L,2); -lua_settop(L,2); -lua_rawget(L,1); -return 1; -} -static int luaB_type(lua_State*L){ -luaL_checkany(L,1); -lua_pushstring(L,luaL_typename(L,1)); -return 1; -} -static int luaB_next(lua_State*L){ -luaL_checktype(L,1,5); -lua_settop(L,2); -if(lua_next(L,1)) -return 2; -else{ -lua_pushnil(L); -return 1; -} -} -static int luaB_pairs(lua_State*L){ -luaL_checktype(L,1,5); -lua_pushvalue(L,lua_upvalueindex(1)); -lua_pushvalue(L,1); -lua_pushnil(L); -return 3; -} -static int ipairsaux(lua_State*L){ -int i=luaL_checkint(L,2); -luaL_checktype(L,1,5); -i++; -lua_pushinteger(L,i); -lua_rawgeti(L,1,i); -return(lua_isnil(L,-1))?0:2; -} -static int luaB_ipairs(lua_State*L){ -luaL_checktype(L,1,5); -lua_pushvalue(L,lua_upvalueindex(1)); -lua_pushvalue(L,1); -lua_pushinteger(L,0); -return 3; -} -static int load_aux(lua_State*L,int status){ -if(status==0) -return 1; -else{ -lua_pushnil(L); -lua_insert(L,-2); -return 2; -} -} -static int luaB_loadstring(lua_State*L){ -size_t l; -const char*s=luaL_checklstring(L,1,&l); -const char*chunkname=luaL_optstring(L,2,s); -return load_aux(L,luaL_loadbuffer(L,s,l,chunkname)); -} -static int luaB_loadfile(lua_State*L){ -const char*fname=luaL_optstring(L,1,NULL); -return load_aux(L,luaL_loadfile(L,fname)); -} -static int luaB_assert(lua_State*L){ -luaL_checkany(L,1); -if(!lua_toboolean(L,1)) -return luaL_error(L,"%s",luaL_optstring(L,2,"assertion failed!")); -return lua_gettop(L); -} -static int luaB_unpack(lua_State*L){ -int i,e,n; -luaL_checktype(L,1,5); -i=luaL_optint(L,2,1); -e=luaL_opt(L,luaL_checkint,3,luaL_getn(L,1)); -if(i>e)return 0; -n=e-i+1; -if(n<=0||!lua_checkstack(L,n)) -return luaL_error(L,"too many results to unpack"); -lua_rawgeti(L,1,i); -while(i++e)e=pos; -for(i=e;i>pos;i--){ -lua_rawgeti(L,1,i-1); -lua_rawseti(L,1,i); -} -break; -} -default:{ -return luaL_error(L,"wrong number of arguments to "LUA_QL("insert")); -} -} -luaL_setn(L,1,e); -lua_rawseti(L,1,pos); -return 0; -} -static int tremove(lua_State*L){ -int e=aux_getn(L,1); -int pos=luaL_optint(L,2,e); -if(!(1<=pos&&pos<=e)) -return 0; -luaL_setn(L,1,e-1); -lua_rawgeti(L,1,pos); -for(;posu)luaL_error(L,"invalid order function for sorting"); -lua_pop(L,1); -} -while(lua_rawgeti(L,1,--j),sort_comp(L,-3,-1)){ -if(j0); -} -l=strlen(p); -if(l==0||p[l-1]!='\n') -luaL_addsize(&b,l); -else{ -luaL_addsize(&b,l-1); -luaL_pushresult(&b); -return 1; -} -} -} -static int read_chars(lua_State*L,FILE*f,size_t n){ -size_t rlen; -size_t nr; -luaL_Buffer b; -luaL_buffinit(L,&b); -rlen=BUFSIZ; -do{ -char*p=luaL_prepbuffer(&b); -if(rlen>n)rlen=n; -nr=fread(p,sizeof(char),rlen,f); -luaL_addsize(&b,nr); -n-=nr; -}while(n>0&&nr==rlen); -luaL_pushresult(&b); -return(n==0||lua_objlen(L,-1)>0); -} -static int g_read(lua_State*L,FILE*f,int first){ -int nargs=lua_gettop(L)-1; -int success; -int n; -clearerr(f); -if(nargs==0){ -success=read_line(L,f); -n=first+1; -} -else{ -luaL_checkstack(L,nargs+20,"too many arguments"); -success=1; -for(n=first;nargs--&&success;n++){ -if(lua_type(L,n)==3){ -size_t l=(size_t)lua_tointeger(L,n); -success=(l==0)?test_eof(L,f):read_chars(L,f,l); -} -else{ -const char*p=lua_tostring(L,n); -luaL_argcheck(L,p&&p[0]=='*',n,"invalid option"); -switch(p[1]){ -case'n': -success=read_number(L,f); -break; -case'l': -success=read_line(L,f); -break; -case'a': -read_chars(L,f,~((size_t)0)); -success=1; -break; -default: -return luaL_argerror(L,n,"invalid format"); -} -} -} -} -if(ferror(f)) -return pushresult(L,0,NULL); -if(!success){ -lua_pop(L,1); -lua_pushnil(L); -} -return n-first; -} -static int io_read(lua_State*L){ -return g_read(L,getiofile(L,1),1); -} -static int f_read(lua_State*L){ -return g_read(L,tofile(L),2); -} -static int io_readline(lua_State*L){ -FILE*f=*(FILE**)lua_touserdata(L,lua_upvalueindex(1)); -int sucess; -if(f==NULL) -luaL_error(L,"file is already closed"); -sucess=read_line(L,f); -if(ferror(f)) -return luaL_error(L,"%s",strerror(errno)); -if(sucess)return 1; -else{ -if(lua_toboolean(L,lua_upvalueindex(2))){ -lua_settop(L,0); -lua_pushvalue(L,lua_upvalueindex(1)); -aux_close(L); -} -return 0; -} -} -static int g_write(lua_State*L,FILE*f,int arg){ -int nargs=lua_gettop(L)-1; -int status=1; -for(;nargs--;arg++){ -if(lua_type(L,arg)==3){ -status=status&& -fprintf(f,"%.14g",lua_tonumber(L,arg))>0; -} -else{ -size_t l; -const char*s=luaL_checklstring(L,arg,&l); -status=status&&(fwrite(s,sizeof(char),l,f)==l); -} -} -return pushresult(L,status,NULL); -} -static int io_write(lua_State*L){ -return g_write(L,getiofile(L,2),1); -} -static int f_write(lua_State*L){ -return g_write(L,tofile(L),2); -} -static int io_flush(lua_State*L){ -return pushresult(L,fflush(getiofile(L,2))==0,NULL); -} -static int f_flush(lua_State*L){ -return pushresult(L,fflush(tofile(L))==0,NULL); -} -static const luaL_Reg iolib[]={ -{"close",io_close}, -{"flush",io_flush}, -{"input",io_input}, -{"lines",io_lines}, -{"open",io_open}, -{"output",io_output}, -{"read",io_read}, -{"type",io_type}, -{"write",io_write}, -{NULL,NULL} -}; -static const luaL_Reg flib[]={ -{"close",io_close}, -{"flush",f_flush}, -{"lines",f_lines}, -{"read",f_read}, -{"write",f_write}, -{"__gc",io_gc}, -{NULL,NULL} -}; -static void createmeta(lua_State*L){ -luaL_newmetatable(L,"FILE*"); -lua_pushvalue(L,-1); -lua_setfield(L,-2,"__index"); -luaL_register(L,NULL,flib); -} -static void createstdfile(lua_State*L,FILE*f,int k,const char*fname){ -*newfile(L)=f; -if(k>0){ -lua_pushvalue(L,-1); -lua_rawseti(L,(-10001),k); -} -lua_pushvalue(L,-2); -lua_setfenv(L,-2); -lua_setfield(L,-3,fname); -} -static void newfenv(lua_State*L,lua_CFunction cls){ -lua_createtable(L,0,1); -lua_pushcfunction(L,cls); -lua_setfield(L,-2,"__close"); -} -static int luaopen_io(lua_State*L){ -createmeta(L); -newfenv(L,io_fclose); -lua_replace(L,(-10001)); -luaL_register(L,"io",iolib); -newfenv(L,io_noclose); -createstdfile(L,stdin,1,"stdin"); -createstdfile(L,stdout,2,"stdout"); -createstdfile(L,stderr,0,"stderr"); -lua_pop(L,1); -lua_getfield(L,-1,"popen"); -newfenv(L,io_pclose); -lua_setfenv(L,-2); -lua_pop(L,1); -return 1; -} -static int os_pushresult(lua_State*L,int i,const char*filename){ -int en=errno; -if(i){ -lua_pushboolean(L,1); -return 1; -} -else{ -lua_pushnil(L); -lua_pushfstring(L,"%s: %s",filename,strerror(en)); -lua_pushinteger(L,en); -return 3; -} -} -static int os_remove(lua_State*L){ -const char*filename=luaL_checkstring(L,1); -return os_pushresult(L,remove(filename)==0,filename); -} -static int os_exit(lua_State*L){ -exit(luaL_optint(L,1,EXIT_SUCCESS)); -} -static const luaL_Reg syslib[]={ -{"exit",os_exit}, -{"remove",os_remove}, -{NULL,NULL} -}; -static int luaopen_os(lua_State*L){ -luaL_register(L,"os",syslib); -return 1; -} -#define uchar(c)((unsigned char)(c)) -static ptrdiff_t posrelat(ptrdiff_t pos,size_t len){ -if(pos<0)pos+=(ptrdiff_t)len+1; -return(pos>=0)?pos:0; -} -static int str_sub(lua_State*L){ -size_t l; -const char*s=luaL_checklstring(L,1,&l); -ptrdiff_t start=posrelat(luaL_checkinteger(L,2),l); -ptrdiff_t end=posrelat(luaL_optinteger(L,3,-1),l); -if(start<1)start=1; -if(end>(ptrdiff_t)l)end=(ptrdiff_t)l; -if(start<=end) -lua_pushlstring(L,s+start-1,end-start+1); -else lua_pushliteral(L,""); -return 1; -} -static int str_lower(lua_State*L){ -size_t l; -size_t i; -luaL_Buffer b; -const char*s=luaL_checklstring(L,1,&l); -luaL_buffinit(L,&b); -for(i=0;i0) -luaL_addlstring(&b,s,l); -luaL_pushresult(&b); -return 1; -} -static int str_byte(lua_State*L){ -size_t l; -const char*s=luaL_checklstring(L,1,&l); -ptrdiff_t posi=posrelat(luaL_optinteger(L,2,1),l); -ptrdiff_t pose=posrelat(luaL_optinteger(L,3,posi),l); -int n,i; -if(posi<=0)posi=1; -if((size_t)pose>l)pose=l; -if(posi>pose)return 0; -n=(int)(pose-posi+1); -if(posi+n<=pose) -luaL_error(L,"string slice too long"); -luaL_checkstack(L,n,"string slice too long"); -for(i=0;i=ms->level||ms->capture[l].len==(-1)) -return luaL_error(ms->L,"invalid capture index"); -return l; -} -static int capture_to_close(MatchState*ms){ -int level=ms->level; -for(level--;level>=0;level--) -if(ms->capture[level].len==(-1))return level; -return luaL_error(ms->L,"invalid pattern capture"); -} -static const char*classend(MatchState*ms,const char*p){ -switch(*p++){ -case'%':{ -if(*p=='\0') -luaL_error(ms->L,"malformed pattern (ends with "LUA_QL("%%")")"); -return p+1; -} -case'[':{ -if(*p=='^')p++; -do{ -if(*p=='\0') -luaL_error(ms->L,"malformed pattern (missing "LUA_QL("]")")"); -if(*(p++)=='%'&&*p!='\0') -p++; -}while(*p!=']'); -return p+1; -} -default:{ -return p; -} -} -} -static int match_class(int c,int cl){ -int res; -switch(tolower(cl)){ -case'a':res=isalpha(c);break; -case'c':res=iscntrl(c);break; -case'd':res=isdigit(c);break; -case'l':res=islower(c);break; -case'p':res=ispunct(c);break; -case's':res=isspace(c);break; -case'u':res=isupper(c);break; -case'w':res=isalnum(c);break; -case'x':res=isxdigit(c);break; -case'z':res=(c==0);break; -default:return(cl==c); -} -return(islower(cl)?res:!res); -} -static int matchbracketclass(int c,const char*p,const char*ec){ -int sig=1; -if(*(p+1)=='^'){ -sig=0; -p++; -} -while(++pL,"unbalanced pattern"); -if(*s!=*p)return NULL; -else{ -int b=*p; -int e=*(p+1); -int cont=1; -while(++ssrc_end){ -if(*s==e){ -if(--cont==0)return s+1; -} -else if(*s==b)cont++; -} -} -return NULL; -} -static const char*max_expand(MatchState*ms,const char*s, -const char*p,const char*ep){ -ptrdiff_t i=0; -while((s+i)src_end&&singlematch(uchar(*(s+i)),p,ep)) -i++; -while(i>=0){ -const char*res=match(ms,(s+i),ep+1); -if(res)return res; -i--; -} -return NULL; -} -static const char*min_expand(MatchState*ms,const char*s, -const char*p,const char*ep){ -for(;;){ -const char*res=match(ms,s,ep+1); -if(res!=NULL) -return res; -else if(ssrc_end&&singlematch(uchar(*s),p,ep)) -s++; -else return NULL; -} -} -static const char*start_capture(MatchState*ms,const char*s, -const char*p,int what){ -const char*res; -int level=ms->level; -if(level>=32)luaL_error(ms->L,"too many captures"); -ms->capture[level].init=s; -ms->capture[level].len=what; -ms->level=level+1; -if((res=match(ms,s,p))==NULL) -ms->level--; -return res; -} -static const char*end_capture(MatchState*ms,const char*s, -const char*p){ -int l=capture_to_close(ms); -const char*res; -ms->capture[l].len=s-ms->capture[l].init; -if((res=match(ms,s,p))==NULL) -ms->capture[l].len=(-1); -return res; -} -static const char*match_capture(MatchState*ms,const char*s,int l){ -size_t len; -l=check_capture(ms,l); -len=ms->capture[l].len; -if((size_t)(ms->src_end-s)>=len&& -memcmp(ms->capture[l].init,s,len)==0) -return s+len; -else return NULL; -} -static const char*match(MatchState*ms,const char*s,const char*p){ -init: -switch(*p){ -case'(':{ -if(*(p+1)==')') -return start_capture(ms,s,p+2,(-2)); -else -return start_capture(ms,s,p+1,(-1)); -} -case')':{ -return end_capture(ms,s,p+1); -} -case'%':{ -switch(*(p+1)){ -case'b':{ -s=matchbalance(ms,s,p+2); -if(s==NULL)return NULL; -p+=4;goto init; -} -case'f':{ -const char*ep;char previous; -p+=2; -if(*p!='[') -luaL_error(ms->L,"missing "LUA_QL("[")" after " -LUA_QL("%%f")" in pattern"); -ep=classend(ms,p); -previous=(s==ms->src_init)?'\0':*(s-1); -if(matchbracketclass(uchar(previous),p,ep-1)|| -!matchbracketclass(uchar(*s),p,ep-1))return NULL; -p=ep;goto init; -} -default:{ -if(isdigit(uchar(*(p+1)))){ -s=match_capture(ms,s,uchar(*(p+1))); -if(s==NULL)return NULL; -p+=2;goto init; -} -goto dflt; -} -} -} -case'\0':{ -return s; -} -case'$':{ -if(*(p+1)=='\0') -return(s==ms->src_end)?s:NULL; -else goto dflt; -} -default:dflt:{ -const char*ep=classend(ms,p); -int m=ssrc_end&&singlematch(uchar(*s),p,ep); -switch(*ep){ -case'?':{ -const char*res; -if(m&&((res=match(ms,s+1,ep+1))!=NULL)) -return res; -p=ep+1;goto init; -} -case'*':{ -return max_expand(ms,s,p,ep); -} -case'+':{ -return(m?max_expand(ms,s+1,p,ep):NULL); -} -case'-':{ -return min_expand(ms,s,p,ep); -} -default:{ -if(!m)return NULL; -s++;p=ep;goto init; -} -} -} -} -} -static const char*lmemfind(const char*s1,size_t l1, -const char*s2,size_t l2){ -if(l2==0)return s1; -else if(l2>l1)return NULL; -else{ -const char*init; -l2--; -l1=l1-l2; -while(l1>0&&(init=(const char*)memchr(s1,*s2,l1))!=NULL){ -init++; -if(memcmp(init,s2+1,l2)==0) -return init-1; -else{ -l1-=init-s1; -s1=init; -} -} -return NULL; -} -} -static void push_onecapture(MatchState*ms,int i,const char*s, -const char*e){ -if(i>=ms->level){ -if(i==0) -lua_pushlstring(ms->L,s,e-s); -else -luaL_error(ms->L,"invalid capture index"); -} -else{ -ptrdiff_t l=ms->capture[i].len; -if(l==(-1))luaL_error(ms->L,"unfinished capture"); -if(l==(-2)) -lua_pushinteger(ms->L,ms->capture[i].init-ms->src_init+1); -else -lua_pushlstring(ms->L,ms->capture[i].init,l); -} -} -static int push_captures(MatchState*ms,const char*s,const char*e){ -int i; -int nlevels=(ms->level==0&&s)?1:ms->level; -luaL_checkstack(ms->L,nlevels,"too many captures"); -for(i=0;il1)init=(ptrdiff_t)l1; -if(find&&(lua_toboolean(L,4)|| -strpbrk(p,"^$*+?.([%-")==NULL)){ -const char*s2=lmemfind(s+init,l1-init,p,l2); -if(s2){ -lua_pushinteger(L,s2-s+1); -lua_pushinteger(L,s2-s+l2); -return 2; -} -} -else{ -MatchState ms; -int anchor=(*p=='^')?(p++,1):0; -const char*s1=s+init; -ms.L=L; -ms.src_init=s; -ms.src_end=s+l1; -do{ -const char*res; -ms.level=0; -if((res=match(&ms,s1,p))!=NULL){ -if(find){ -lua_pushinteger(L,s1-s+1); -lua_pushinteger(L,res-s); -return push_captures(&ms,NULL,0)+2; -} -else -return push_captures(&ms,s1,res); -} -}while(s1++L,3,&l); -for(i=0;iL; -switch(lua_type(L,3)){ -case 3: -case 4:{ -add_s(ms,b,s,e); -return; -} -case 6:{ -int n; -lua_pushvalue(L,3); -n=push_captures(ms,s,e); -lua_call(L,n,1); -break; -} -case 5:{ -push_onecapture(ms,0,s,e); -lua_gettable(L,3); -break; -} -} -if(!lua_toboolean(L,-1)){ -lua_pop(L,1); -lua_pushlstring(L,s,e-s); -} -else if(!lua_isstring(L,-1)) -luaL_error(L,"invalid replacement value (a %s)",luaL_typename(L,-1)); -luaL_addvalue(b); -} -static int str_gsub(lua_State*L){ -size_t srcl; -const char*src=luaL_checklstring(L,1,&srcl); -const char*p=luaL_checkstring(L,2); -int tr=lua_type(L,3); -int max_s=luaL_optint(L,4,srcl+1); -int anchor=(*p=='^')?(p++,1):0; -int n=0; -MatchState ms; -luaL_Buffer b; -luaL_argcheck(L,tr==3||tr==4|| -tr==6||tr==5,3, -"string/function/table expected"); -luaL_buffinit(L,&b); -ms.L=L; -ms.src_init=src; -ms.src_end=src+srcl; -while(nsrc) -src=e; -else if(src=sizeof("-+ #0")) -luaL_error(L,"invalid format (repeated flags)"); -if(isdigit(uchar(*p)))p++; -if(isdigit(uchar(*p)))p++; -if(*p=='.'){ -p++; -if(isdigit(uchar(*p)))p++; -if(isdigit(uchar(*p)))p++; -} -if(isdigit(uchar(*p))) -luaL_error(L,"invalid format (width or precision too long)"); -*(form++)='%'; -strncpy(form,strfrmt,p-strfrmt+1); -form+=p-strfrmt+1; -*form='\0'; -return p; -} -static void addintlen(char*form){ -size_t l=strlen(form); -char spec=form[l-1]; -strcpy(form+l-1,"l"); -form[l+sizeof("l")-2]=spec; -form[l+sizeof("l")-1]='\0'; -} -static int str_format(lua_State*L){ -int top=lua_gettop(L); -int arg=1; -size_t sfl; -const char*strfrmt=luaL_checklstring(L,arg,&sfl); -const char*strfrmt_end=strfrmt+sfl; -luaL_Buffer b; -luaL_buffinit(L,&b); -while(strfrmttop) -luaL_argerror(L,arg,"no value"); -strfrmt=scanformat(L,strfrmt,form); -switch(*strfrmt++){ -case'c':{ -sprintf(buff,form,(int)luaL_checknumber(L,arg)); -break; -} -case'd':case'i':{ -addintlen(form); -sprintf(buff,form,(long)luaL_checknumber(L,arg)); -break; -} -case'o':case'u':case'x':case'X':{ -addintlen(form); -sprintf(buff,form,(unsigned long)luaL_checknumber(L,arg)); -break; -} -case'e':case'E':case'f': -case'g':case'G':{ -sprintf(buff,form,(double)luaL_checknumber(L,arg)); -break; -} -case'q':{ -addquoted(L,&b,arg); -continue; -} -case's':{ -size_t l; -const char*s=luaL_checklstring(L,arg,&l); -if(!strchr(form,'.')&&l>=100){ -lua_pushvalue(L,arg); -luaL_addvalue(&b); -continue; -} -else{ -sprintf(buff,form,s); -break; -} -} -default:{ -return luaL_error(L,"invalid option "LUA_QL("%%%c")" to " -LUA_QL("format"),*(strfrmt-1)); -} -} -luaL_addlstring(&b,buff,strlen(buff)); -} -} -luaL_pushresult(&b); -return 1; -} -static const luaL_Reg strlib[]={ -{"byte",str_byte}, -{"char",str_char}, -{"find",str_find}, -{"format",str_format}, -{"gmatch",gmatch}, -{"gsub",str_gsub}, -{"lower",str_lower}, -{"match",str_match}, -{"rep",str_rep}, -{"sub",str_sub}, -{"upper",str_upper}, -{NULL,NULL} -}; -static void createmetatable(lua_State*L){ -lua_createtable(L,0,1); -lua_pushliteral(L,""); -lua_pushvalue(L,-2); -lua_setmetatable(L,-2); -lua_pop(L,1); -lua_pushvalue(L,-2); -lua_setfield(L,-2,"__index"); -lua_pop(L,1); -} -static int luaopen_string(lua_State*L){ -luaL_register(L,"string",strlib); -createmetatable(L); -return 1; -} -static const luaL_Reg lualibs[]={ -{"",luaopen_base}, -{"table",luaopen_table}, -{"io",luaopen_io}, -{"os",luaopen_os}, -{"string",luaopen_string}, -{NULL,NULL} -}; -static void luaL_openlibs(lua_State*L){ -const luaL_Reg*lib=lualibs; -for(;lib->func;lib++){ -lua_pushcfunction(L,lib->func); -lua_pushstring(L,lib->name); -lua_call(L,1,0); -} -} -typedef unsigned int UB; -static UB barg(lua_State*L,int idx){ -union{lua_Number n;U64 b;}bn; -bn.n=lua_tonumber(L,idx)+6755399441055744.0; -if(bn.n==0.0&&!lua_isnumber(L,idx))luaL_typerror(L,idx,"number"); -return(UB)bn.b; -} -#define BRET(b)lua_pushnumber(L,(lua_Number)(int)(b));return 1; -static int tobit(lua_State*L){ -BRET(barg(L,1))} -static int bnot(lua_State*L){ -BRET(~barg(L,1))} -static int band(lua_State*L){ -int i;UB b=barg(L,1);for(i=lua_gettop(L);i>1;i--)b&=barg(L,i);BRET(b)} -static int bor(lua_State*L){ -int i;UB b=barg(L,1);for(i=lua_gettop(L);i>1;i--)b|=barg(L,i);BRET(b)} -static int bxor(lua_State*L){ -int i;UB b=barg(L,1);for(i=lua_gettop(L);i>1;i--)b^=barg(L,i);BRET(b)} -static int lshift(lua_State*L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET(b<>n)} -static int arshift(lua_State*L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET((int)b>>n)} -static int rol(lua_State*L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET((b<>(32-n)))} -static int ror(lua_State*L){ -UB b=barg(L,1),n=barg(L,2)&31;BRET((b>>n)|(b<<(32-n)))} -static int bswap(lua_State*L){ -UB b=barg(L,1);b=(b>>24)|((b>>8)&0xff00)|((b&0xff00)<<8)|(b<<24);BRET(b)} -static int tohex(lua_State*L){ -UB b=barg(L,1); -int n=lua_isnone(L,2)?8:(int)barg(L,2); -const char*hexdigits="0123456789abcdef"; -char buf[8]; -int i; -if(n<0){n=-n;hexdigits="0123456789ABCDEF";} -if(n>8)n=8; -for(i=(int)n;--i>=0;){buf[i]=hexdigits[b&15];b>>=4;} -lua_pushlstring(L,buf,(size_t)n); -return 1; -} -static const struct luaL_Reg bitlib[]={ -{"tobit",tobit}, -{"bnot",bnot}, -{"band",band}, -{"bor",bor}, -{"bxor",bxor}, -{"lshift",lshift}, -{"rshift",rshift}, -{"arshift",arshift}, -{"rol",rol}, -{"ror",ror}, -{"bswap",bswap}, -{"tohex",tohex}, -{NULL,NULL} -}; -int main(int argc,char**argv){ -lua_State*L=luaL_newstate(); -int i; -luaL_openlibs(L); -luaL_register(L,"bit",bitlib); -if(argc<2)return sizeof(void*); -lua_createtable(L,0,1); -lua_pushstring(L,argv[1]); -lua_rawseti(L,-2,0); -lua_setglobal(L,"arg"); -if(luaL_loadfile(L,argv[1])) -goto err; -for(i=2;i -- BYTECODE -- [...] --- print(bc.line(foo, 2)) --> 0002 KSTR 1 1 ; "hello" --- --- local out = { --- -- Do something with each line: --- write = function(t, ...) io.write(...) end, --- close = function(t) end, --- flush = function(t) end, --- } --- bc.dump(foo, out) --- ------------------------------------------------------------------------------- - --- Cache some library functions and objects. -local jit = require("jit") -assert(jit.version_num == 20004, "LuaJIT core/library version mismatch") -local jutil = require("jit.util") -local vmdef = require("jit.vmdef") -local bit = require("bit") -local sub, gsub, format = string.sub, string.gsub, string.format -local byte, band, shr = string.byte, bit.band, bit.rshift -local funcinfo, funcbc, funck = jutil.funcinfo, jutil.funcbc, jutil.funck -local funcuvname = jutil.funcuvname -local bcnames = vmdef.bcnames -local stdout, stderr = io.stdout, io.stderr - ------------------------------------------------------------------------------- - -local function ctlsub(c) - if c == "\n" then return "\\n" - elseif c == "\r" then return "\\r" - elseif c == "\t" then return "\\t" - else return format("\\%03d", byte(c)) - end -end - --- Return one bytecode line. -local function bcline(func, pc, prefix) - local ins, m = funcbc(func, pc) - if not ins then return end - local ma, mb, mc = band(m, 7), band(m, 15*8), band(m, 15*128) - local a = band(shr(ins, 8), 0xff) - local oidx = 6*band(ins, 0xff) - local op = sub(bcnames, oidx+1, oidx+6) - local s = format("%04d %s %-6s %3s ", - pc, prefix or " ", op, ma == 0 and "" or a) - local d = shr(ins, 16) - if mc == 13*128 then -- BCMjump - return format("%s=> %04d\n", s, pc+d-0x7fff) - end - if mb ~= 0 then - d = band(d, 0xff) - elseif mc == 0 then - return s.."\n" - end - local kc - if mc == 10*128 then -- BCMstr - kc = funck(func, -d-1) - kc = format(#kc > 40 and '"%.40s"~' or '"%s"', gsub(kc, "%c", ctlsub)) - elseif mc == 9*128 then -- BCMnum - kc = funck(func, d) - if op == "TSETM " then kc = kc - 2^52 end - elseif mc == 12*128 then -- BCMfunc - local fi = funcinfo(funck(func, -d-1)) - if fi.ffid then - kc = vmdef.ffnames[fi.ffid] - else - kc = fi.loc - end - elseif mc == 5*128 then -- BCMuv - kc = funcuvname(func, d) - end - if ma == 5 then -- BCMuv - local ka = funcuvname(func, a) - if kc then kc = ka.." ; "..kc else kc = ka end - end - if mb ~= 0 then - local b = shr(ins, 24) - if kc then return format("%s%3d %3d ; %s\n", s, b, d, kc) end - return format("%s%3d %3d\n", s, b, d) - end - if kc then return format("%s%3d ; %s\n", s, d, kc) end - if mc == 7*128 and d > 32767 then d = d - 65536 end -- BCMlits - return format("%s%3d\n", s, d) -end - --- Collect branch targets of a function. -local function bctargets(func) - local target = {} - for pc=1,1000000000 do - local ins, m = funcbc(func, pc) - if not ins then break end - if band(m, 15*128) == 13*128 then target[pc+shr(ins, 16)-0x7fff] = true end - end - return target -end - --- Dump bytecode instructions of a function. -local function bcdump(func, out, all) - if not out then out = stdout end - local fi = funcinfo(func) - if all and fi.children then - for n=-1,-1000000000,-1 do - local k = funck(func, n) - if not k then break end - if type(k) == "proto" then bcdump(k, out, true) end - end - end - out:write(format("-- BYTECODE -- %s-%d\n", fi.loc, fi.lastlinedefined)) - local target = bctargets(func) - for pc=1,1000000000 do - local s = bcline(func, pc, target[pc] and "=>") - if not s then break end - out:write(s) - end - out:write("\n") - out:flush() -end - ------------------------------------------------------------------------------- - --- Active flag and output file handle. -local active, out - --- List handler. -local function h_list(func) - return bcdump(func, out) -end - --- Detach list handler. -local function bclistoff() - if active then - active = false - jit.attach(h_list) - if out and out ~= stdout and out ~= stderr then out:close() end - out = nil - end -end - --- Open the output file and attach list handler. -local function bcliston(outfile) - if active then bclistoff() end - if not outfile then outfile = os.getenv("LUAJIT_LISTFILE") end - if outfile then - out = outfile == "-" and stdout or assert(io.open(outfile, "w")) - else - out = stderr - end - jit.attach(h_list, "bc") - active = true -end - --- Public module functions. -module(...) - -line = bcline -dump = bcdump -targets = bctargets - -on = bcliston -off = bclistoff -start = bcliston -- For -j command line option. - diff --git a/deps/luajit/src/jit/bcsave.lua b/deps/luajit/src/jit/bcsave.lua deleted file mode 100644 index 0319b3d..0000000 --- a/deps/luajit/src/jit/bcsave.lua +++ /dev/null @@ -1,659 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT module to save/list bytecode. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- --- This module saves or lists the bytecode for an input file. --- It's run by the -b command line option. --- ------------------------------------------------------------------------------- - -local jit = require("jit") -assert(jit.version_num == 20004, "LuaJIT core/library version mismatch") -local bit = require("bit") - --- Symbol name prefix for LuaJIT bytecode. -local LJBC_PREFIX = "luaJIT_BC_" - ------------------------------------------------------------------------------- - -local function usage() - io.stderr:write[[ -Save LuaJIT bytecode: luajit -b[options] input output - -l Only list bytecode. - -s Strip debug info (default). - -g Keep debug info. - -n name Set module name (default: auto-detect from input name). - -t type Set output file type (default: auto-detect from output name). - -a arch Override architecture for object files (default: native). - -o os Override OS for object files (default: native). - -e chunk Use chunk string as input. - -- Stop handling options. - - Use stdin as input and/or stdout as output. - -File types: c h obj o raw (default) -]] - os.exit(1) -end - -local function check(ok, ...) - if ok then return ok, ... end - io.stderr:write("luajit: ", ...) - io.stderr:write("\n") - os.exit(1) -end - -local function readfile(input) - if type(input) == "function" then return input end - if input == "-" then input = nil end - return check(loadfile(input)) -end - -local function savefile(name, mode) - if name == "-" then return io.stdout end - return check(io.open(name, mode)) -end - ------------------------------------------------------------------------------- - -local map_type = { - raw = "raw", c = "c", h = "h", o = "obj", obj = "obj", -} - -local map_arch = { - x86 = true, x64 = true, arm = true, ppc = true, ppcspe = true, - mips = true, mipsel = true, -} - -local map_os = { - linux = true, windows = true, osx = true, freebsd = true, netbsd = true, - openbsd = true, dragonfly = true, solaris = true, -} - -local function checkarg(str, map, err) - str = string.lower(str) - local s = check(map[str], "unknown ", err) - return s == true and str or s -end - -local function detecttype(str) - local ext = string.match(string.lower(str), "%.(%a+)$") - return map_type[ext] or "raw" -end - -local function checkmodname(str) - check(string.match(str, "^[%w_.%-]+$"), "bad module name") - return string.gsub(str, "[%.%-]", "_") -end - -local function detectmodname(str) - if type(str) == "string" then - local tail = string.match(str, "[^/\\]+$") - if tail then str = tail end - local head = string.match(str, "^(.*)%.[^.]*$") - if head then str = head end - str = string.match(str, "^[%w_.%-]+") - else - str = nil - end - check(str, "cannot derive module name, use -n name") - return string.gsub(str, "[%.%-]", "_") -end - ------------------------------------------------------------------------------- - -local function bcsave_tail(fp, output, s) - local ok, err = fp:write(s) - if ok and output ~= "-" then ok, err = fp:close() end - check(ok, "cannot write ", output, ": ", err) -end - -local function bcsave_raw(output, s) - local fp = savefile(output, "wb") - bcsave_tail(fp, output, s) -end - -local function bcsave_c(ctx, output, s) - local fp = savefile(output, "w") - if ctx.type == "c" then - fp:write(string.format([[ -#ifdef _cplusplus -extern "C" -#endif -#ifdef _WIN32 -__declspec(dllexport) -#endif -const char %s%s[] = { -]], LJBC_PREFIX, ctx.modname)) - else - fp:write(string.format([[ -#define %s%s_SIZE %d -static const char %s%s[] = { -]], LJBC_PREFIX, ctx.modname, #s, LJBC_PREFIX, ctx.modname)) - end - local t, n, m = {}, 0, 0 - for i=1,#s do - local b = tostring(string.byte(s, i)) - m = m + #b + 1 - if m > 78 then - fp:write(table.concat(t, ",", 1, n), ",\n") - n, m = 0, #b + 1 - end - n = n + 1 - t[n] = b - end - bcsave_tail(fp, output, table.concat(t, ",", 1, n).."\n};\n") -end - -local function bcsave_elfobj(ctx, output, s, ffi) - ffi.cdef[[ -typedef struct { - uint8_t emagic[4], eclass, eendian, eversion, eosabi, eabiversion, epad[7]; - uint16_t type, machine; - uint32_t version; - uint32_t entry, phofs, shofs; - uint32_t flags; - uint16_t ehsize, phentsize, phnum, shentsize, shnum, shstridx; -} ELF32header; -typedef struct { - uint8_t emagic[4], eclass, eendian, eversion, eosabi, eabiversion, epad[7]; - uint16_t type, machine; - uint32_t version; - uint64_t entry, phofs, shofs; - uint32_t flags; - uint16_t ehsize, phentsize, phnum, shentsize, shnum, shstridx; -} ELF64header; -typedef struct { - uint32_t name, type, flags, addr, ofs, size, link, info, align, entsize; -} ELF32sectheader; -typedef struct { - uint32_t name, type; - uint64_t flags, addr, ofs, size; - uint32_t link, info; - uint64_t align, entsize; -} ELF64sectheader; -typedef struct { - uint32_t name, value, size; - uint8_t info, other; - uint16_t sectidx; -} ELF32symbol; -typedef struct { - uint32_t name; - uint8_t info, other; - uint16_t sectidx; - uint64_t value, size; -} ELF64symbol; -typedef struct { - ELF32header hdr; - ELF32sectheader sect[6]; - ELF32symbol sym[2]; - uint8_t space[4096]; -} ELF32obj; -typedef struct { - ELF64header hdr; - ELF64sectheader sect[6]; - ELF64symbol sym[2]; - uint8_t space[4096]; -} ELF64obj; -]] - local symname = LJBC_PREFIX..ctx.modname - local is64, isbe = false, false - if ctx.arch == "x64" then - is64 = true - elseif ctx.arch == "ppc" or ctx.arch == "ppcspe" or ctx.arch == "mips" then - isbe = true - end - - -- Handle different host/target endianess. - local function f32(x) return x end - local f16, fofs = f32, f32 - if ffi.abi("be") ~= isbe then - f32 = bit.bswap - function f16(x) return bit.rshift(bit.bswap(x), 16) end - if is64 then - local two32 = ffi.cast("int64_t", 2^32) - function fofs(x) return bit.bswap(x)*two32 end - else - fofs = f32 - end - end - - -- Create ELF object and fill in header. - local o = ffi.new(is64 and "ELF64obj" or "ELF32obj") - local hdr = o.hdr - if ctx.os == "bsd" or ctx.os == "other" then -- Determine native hdr.eosabi. - local bf = assert(io.open("/bin/ls", "rb")) - local bs = bf:read(9) - bf:close() - ffi.copy(o, bs, 9) - check(hdr.emagic[0] == 127, "no support for writing native object files") - else - hdr.emagic = "\127ELF" - hdr.eosabi = ({ freebsd=9, netbsd=2, openbsd=12, solaris=6 })[ctx.os] or 0 - end - hdr.eclass = is64 and 2 or 1 - hdr.eendian = isbe and 2 or 1 - hdr.eversion = 1 - hdr.type = f16(1) - hdr.machine = f16(({ x86=3, x64=62, arm=40, ppc=20, ppcspe=20, mips=8, mipsel=8 })[ctx.arch]) - if ctx.arch == "mips" or ctx.arch == "mipsel" then - hdr.flags = 0x50001006 - end - hdr.version = f32(1) - hdr.shofs = fofs(ffi.offsetof(o, "sect")) - hdr.ehsize = f16(ffi.sizeof(hdr)) - hdr.shentsize = f16(ffi.sizeof(o.sect[0])) - hdr.shnum = f16(6) - hdr.shstridx = f16(2) - - -- Fill in sections and symbols. - local sofs, ofs = ffi.offsetof(o, "space"), 1 - for i,name in ipairs{ - ".symtab", ".shstrtab", ".strtab", ".rodata", ".note.GNU-stack", - } do - local sect = o.sect[i] - sect.align = fofs(1) - sect.name = f32(ofs) - ffi.copy(o.space+ofs, name) - ofs = ofs + #name+1 - end - o.sect[1].type = f32(2) -- .symtab - o.sect[1].link = f32(3) - o.sect[1].info = f32(1) - o.sect[1].align = fofs(8) - o.sect[1].ofs = fofs(ffi.offsetof(o, "sym")) - o.sect[1].entsize = fofs(ffi.sizeof(o.sym[0])) - o.sect[1].size = fofs(ffi.sizeof(o.sym)) - o.sym[1].name = f32(1) - o.sym[1].sectidx = f16(4) - o.sym[1].size = fofs(#s) - o.sym[1].info = 17 - o.sect[2].type = f32(3) -- .shstrtab - o.sect[2].ofs = fofs(sofs) - o.sect[2].size = fofs(ofs) - o.sect[3].type = f32(3) -- .strtab - o.sect[3].ofs = fofs(sofs + ofs) - o.sect[3].size = fofs(#symname+1) - ffi.copy(o.space+ofs+1, symname) - ofs = ofs + #symname + 2 - o.sect[4].type = f32(1) -- .rodata - o.sect[4].flags = fofs(2) - o.sect[4].ofs = fofs(sofs + ofs) - o.sect[4].size = fofs(#s) - o.sect[5].type = f32(1) -- .note.GNU-stack - o.sect[5].ofs = fofs(sofs + ofs + #s) - - -- Write ELF object file. - local fp = savefile(output, "wb") - fp:write(ffi.string(o, ffi.sizeof(o)-4096+ofs)) - bcsave_tail(fp, output, s) -end - -local function bcsave_peobj(ctx, output, s, ffi) - ffi.cdef[[ -typedef struct { - uint16_t arch, nsects; - uint32_t time, symtabofs, nsyms; - uint16_t opthdrsz, flags; -} PEheader; -typedef struct { - char name[8]; - uint32_t vsize, vaddr, size, ofs, relocofs, lineofs; - uint16_t nreloc, nline; - uint32_t flags; -} PEsection; -typedef struct __attribute((packed)) { - union { - char name[8]; - uint32_t nameref[2]; - }; - uint32_t value; - int16_t sect; - uint16_t type; - uint8_t scl, naux; -} PEsym; -typedef struct __attribute((packed)) { - uint32_t size; - uint16_t nreloc, nline; - uint32_t cksum; - uint16_t assoc; - uint8_t comdatsel, unused[3]; -} PEsymaux; -typedef struct { - PEheader hdr; - PEsection sect[2]; - // Must be an even number of symbol structs. - PEsym sym0; - PEsymaux sym0aux; - PEsym sym1; - PEsymaux sym1aux; - PEsym sym2; - PEsym sym3; - uint32_t strtabsize; - uint8_t space[4096]; -} PEobj; -]] - local symname = LJBC_PREFIX..ctx.modname - local is64 = false - if ctx.arch == "x86" then - symname = "_"..symname - elseif ctx.arch == "x64" then - is64 = true - end - local symexport = " /EXPORT:"..symname..",DATA " - - -- The file format is always little-endian. Swap if the host is big-endian. - local function f32(x) return x end - local f16 = f32 - if ffi.abi("be") then - f32 = bit.bswap - function f16(x) return bit.rshift(bit.bswap(x), 16) end - end - - -- Create PE object and fill in header. - local o = ffi.new("PEobj") - local hdr = o.hdr - hdr.arch = f16(({ x86=0x14c, x64=0x8664, arm=0x1c0, ppc=0x1f2, mips=0x366, mipsel=0x366 })[ctx.arch]) - hdr.nsects = f16(2) - hdr.symtabofs = f32(ffi.offsetof(o, "sym0")) - hdr.nsyms = f32(6) - - -- Fill in sections and symbols. - o.sect[0].name = ".drectve" - o.sect[0].size = f32(#symexport) - o.sect[0].flags = f32(0x00100a00) - o.sym0.sect = f16(1) - o.sym0.scl = 3 - o.sym0.name = ".drectve" - o.sym0.naux = 1 - o.sym0aux.size = f32(#symexport) - o.sect[1].name = ".rdata" - o.sect[1].size = f32(#s) - o.sect[1].flags = f32(0x40300040) - o.sym1.sect = f16(2) - o.sym1.scl = 3 - o.sym1.name = ".rdata" - o.sym1.naux = 1 - o.sym1aux.size = f32(#s) - o.sym2.sect = f16(2) - o.sym2.scl = 2 - o.sym2.nameref[1] = f32(4) - o.sym3.sect = f16(-1) - o.sym3.scl = 2 - o.sym3.value = f32(1) - o.sym3.name = "@feat.00" -- Mark as SafeSEH compliant. - ffi.copy(o.space, symname) - local ofs = #symname + 1 - o.strtabsize = f32(ofs + 4) - o.sect[0].ofs = f32(ffi.offsetof(o, "space") + ofs) - ffi.copy(o.space + ofs, symexport) - ofs = ofs + #symexport - o.sect[1].ofs = f32(ffi.offsetof(o, "space") + ofs) - - -- Write PE object file. - local fp = savefile(output, "wb") - fp:write(ffi.string(o, ffi.sizeof(o)-4096+ofs)) - bcsave_tail(fp, output, s) -end - -local function bcsave_machobj(ctx, output, s, ffi) - ffi.cdef[[ -typedef struct -{ - uint32_t magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags; -} mach_header; -typedef struct -{ - mach_header; uint32_t reserved; -} mach_header_64; -typedef struct { - uint32_t cmd, cmdsize; - char segname[16]; - uint32_t vmaddr, vmsize, fileoff, filesize; - uint32_t maxprot, initprot, nsects, flags; -} mach_segment_command; -typedef struct { - uint32_t cmd, cmdsize; - char segname[16]; - uint64_t vmaddr, vmsize, fileoff, filesize; - uint32_t maxprot, initprot, nsects, flags; -} mach_segment_command_64; -typedef struct { - char sectname[16], segname[16]; - uint32_t addr, size; - uint32_t offset, align, reloff, nreloc, flags; - uint32_t reserved1, reserved2; -} mach_section; -typedef struct { - char sectname[16], segname[16]; - uint64_t addr, size; - uint32_t offset, align, reloff, nreloc, flags; - uint32_t reserved1, reserved2, reserved3; -} mach_section_64; -typedef struct { - uint32_t cmd, cmdsize, symoff, nsyms, stroff, strsize; -} mach_symtab_command; -typedef struct { - int32_t strx; - uint8_t type, sect; - int16_t desc; - uint32_t value; -} mach_nlist; -typedef struct { - uint32_t strx; - uint8_t type, sect; - uint16_t desc; - uint64_t value; -} mach_nlist_64; -typedef struct -{ - uint32_t magic, nfat_arch; -} mach_fat_header; -typedef struct -{ - uint32_t cputype, cpusubtype, offset, size, align; -} mach_fat_arch; -typedef struct { - struct { - mach_header hdr; - mach_segment_command seg; - mach_section sec; - mach_symtab_command sym; - } arch[1]; - mach_nlist sym_entry; - uint8_t space[4096]; -} mach_obj; -typedef struct { - struct { - mach_header_64 hdr; - mach_segment_command_64 seg; - mach_section_64 sec; - mach_symtab_command sym; - } arch[1]; - mach_nlist_64 sym_entry; - uint8_t space[4096]; -} mach_obj_64; -typedef struct { - mach_fat_header fat; - mach_fat_arch fat_arch[4]; - struct { - mach_header hdr; - mach_segment_command seg; - mach_section sec; - mach_symtab_command sym; - } arch[4]; - mach_nlist sym_entry; - uint8_t space[4096]; -} mach_fat_obj; -]] - local symname = '_'..LJBC_PREFIX..ctx.modname - local isfat, is64, align, mobj = false, false, 4, "mach_obj" - if ctx.arch == "x64" then - is64, align, mobj = true, 8, "mach_obj_64" - elseif ctx.arch == "arm" then - isfat, mobj = true, "mach_fat_obj" - else - check(ctx.arch == "x86", "unsupported architecture for OSX") - end - local function aligned(v, a) return bit.band(v+a-1, -a) end - local be32 = bit.bswap -- Mach-O FAT is BE, supported archs are LE. - - -- Create Mach-O object and fill in header. - local o = ffi.new(mobj) - local mach_size = aligned(ffi.offsetof(o, "space")+#symname+2, align) - local cputype = ({ x86={7}, x64={0x01000007}, arm={7,12,12,12} })[ctx.arch] - local cpusubtype = ({ x86={3}, x64={3}, arm={3,6,9,11} })[ctx.arch] - if isfat then - o.fat.magic = be32(0xcafebabe) - o.fat.nfat_arch = be32(#cpusubtype) - end - - -- Fill in sections and symbols. - for i=0,#cpusubtype-1 do - local ofs = 0 - if isfat then - local a = o.fat_arch[i] - a.cputype = be32(cputype[i+1]) - a.cpusubtype = be32(cpusubtype[i+1]) - -- Subsequent slices overlap each other to share data. - ofs = ffi.offsetof(o, "arch") + i*ffi.sizeof(o.arch[0]) - a.offset = be32(ofs) - a.size = be32(mach_size-ofs+#s) - end - local a = o.arch[i] - a.hdr.magic = is64 and 0xfeedfacf or 0xfeedface - a.hdr.cputype = cputype[i+1] - a.hdr.cpusubtype = cpusubtype[i+1] - a.hdr.filetype = 1 - a.hdr.ncmds = 2 - a.hdr.sizeofcmds = ffi.sizeof(a.seg)+ffi.sizeof(a.sec)+ffi.sizeof(a.sym) - a.seg.cmd = is64 and 0x19 or 0x1 - a.seg.cmdsize = ffi.sizeof(a.seg)+ffi.sizeof(a.sec) - a.seg.vmsize = #s - a.seg.fileoff = mach_size-ofs - a.seg.filesize = #s - a.seg.maxprot = 1 - a.seg.initprot = 1 - a.seg.nsects = 1 - ffi.copy(a.sec.sectname, "__data") - ffi.copy(a.sec.segname, "__DATA") - a.sec.size = #s - a.sec.offset = mach_size-ofs - a.sym.cmd = 2 - a.sym.cmdsize = ffi.sizeof(a.sym) - a.sym.symoff = ffi.offsetof(o, "sym_entry")-ofs - a.sym.nsyms = 1 - a.sym.stroff = ffi.offsetof(o, "sym_entry")+ffi.sizeof(o.sym_entry)-ofs - a.sym.strsize = aligned(#symname+2, align) - end - o.sym_entry.type = 0xf - o.sym_entry.sect = 1 - o.sym_entry.strx = 1 - ffi.copy(o.space+1, symname) - - -- Write Macho-O object file. - local fp = savefile(output, "wb") - fp:write(ffi.string(o, mach_size)) - bcsave_tail(fp, output, s) -end - -local function bcsave_obj(ctx, output, s) - local ok, ffi = pcall(require, "ffi") - check(ok, "FFI library required to write this file type") - if ctx.os == "windows" then - return bcsave_peobj(ctx, output, s, ffi) - elseif ctx.os == "osx" then - return bcsave_machobj(ctx, output, s, ffi) - else - return bcsave_elfobj(ctx, output, s, ffi) - end -end - ------------------------------------------------------------------------------- - -local function bclist(input, output) - local f = readfile(input) - require("jit.bc").dump(f, savefile(output, "w"), true) -end - -local function bcsave(ctx, input, output) - local f = readfile(input) - local s = string.dump(f, ctx.strip) - local t = ctx.type - if not t then - t = detecttype(output) - ctx.type = t - end - if t == "raw" then - bcsave_raw(output, s) - else - if not ctx.modname then ctx.modname = detectmodname(input) end - if t == "obj" then - bcsave_obj(ctx, output, s) - else - bcsave_c(ctx, output, s) - end - end -end - -local function docmd(...) - local arg = {...} - local n = 1 - local list = false - local ctx = { - strip = true, arch = jit.arch, os = string.lower(jit.os), - type = false, modname = false, - } - while n <= #arg do - local a = arg[n] - if type(a) == "string" and string.sub(a, 1, 1) == "-" and a ~= "-" then - table.remove(arg, n) - if a == "--" then break end - for m=2,#a do - local opt = string.sub(a, m, m) - if opt == "l" then - list = true - elseif opt == "s" then - ctx.strip = true - elseif opt == "g" then - ctx.strip = false - else - if arg[n] == nil or m ~= #a then usage() end - if opt == "e" then - if n ~= 1 then usage() end - arg[1] = check(loadstring(arg[1])) - elseif opt == "n" then - ctx.modname = checkmodname(table.remove(arg, n)) - elseif opt == "t" then - ctx.type = checkarg(table.remove(arg, n), map_type, "file type") - elseif opt == "a" then - ctx.arch = checkarg(table.remove(arg, n), map_arch, "architecture") - elseif opt == "o" then - ctx.os = checkarg(table.remove(arg, n), map_os, "OS name") - else - usage() - end - end - end - else - n = n + 1 - end - end - if list then - if #arg == 0 or #arg > 2 then usage() end - bclist(arg[1], arg[2] or "-") - else - if #arg ~= 2 then usage() end - bcsave(ctx, arg[1], arg[2]) - end -end - ------------------------------------------------------------------------------- - --- Public module functions. -module(...) - -start = docmd -- Process -b command line option. - diff --git a/deps/luajit/src/jit/dis_arm.lua b/deps/luajit/src/jit/dis_arm.lua deleted file mode 100644 index 59be715..0000000 --- a/deps/luajit/src/jit/dis_arm.lua +++ /dev/null @@ -1,689 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT ARM disassembler module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- This is a helper module used by the LuaJIT machine code dumper module. --- --- It disassembles most user-mode ARMv7 instructions --- NYI: Advanced SIMD and VFP instructions. ------------------------------------------------------------------------------- - -local type = type -local sub, byte, format = string.sub, string.byte, string.format -local match, gmatch, gsub = string.match, string.gmatch, string.gsub -local concat = table.concat -local bit = require("bit") -local band, bor, ror, tohex = bit.band, bit.bor, bit.ror, bit.tohex -local lshift, rshift, arshift = bit.lshift, bit.rshift, bit.arshift - ------------------------------------------------------------------------------- --- Opcode maps ------------------------------------------------------------------------------- - -local map_loadc = { - shift = 8, mask = 15, - [10] = { - shift = 20, mask = 1, - [0] = { - shift = 23, mask = 3, - [0] = "vmovFmDN", "vstmFNdr", - _ = { - shift = 21, mask = 1, - [0] = "vstrFdl", - { shift = 16, mask = 15, [13] = "vpushFdr", _ = "vstmdbFNdr", } - }, - }, - { - shift = 23, mask = 3, - [0] = "vmovFDNm", - { shift = 16, mask = 15, [13] = "vpopFdr", _ = "vldmFNdr", }, - _ = { - shift = 21, mask = 1, - [0] = "vldrFdl", "vldmdbFNdr", - }, - }, - }, - [11] = { - shift = 20, mask = 1, - [0] = { - shift = 23, mask = 3, - [0] = "vmovGmDN", "vstmGNdr", - _ = { - shift = 21, mask = 1, - [0] = "vstrGdl", - { shift = 16, mask = 15, [13] = "vpushGdr", _ = "vstmdbGNdr", } - }, - }, - { - shift = 23, mask = 3, - [0] = "vmovGDNm", - { shift = 16, mask = 15, [13] = "vpopGdr", _ = "vldmGNdr", }, - _ = { - shift = 21, mask = 1, - [0] = "vldrGdl", "vldmdbGNdr", - }, - }, - }, - _ = { - shift = 0, mask = 0 -- NYI ldc, mcrr, mrrc. - }, -} - -local map_vfps = { - shift = 6, mask = 0x2c001, - [0] = "vmlaF.dnm", "vmlsF.dnm", - [0x04000] = "vnmlsF.dnm", [0x04001] = "vnmlaF.dnm", - [0x08000] = "vmulF.dnm", [0x08001] = "vnmulF.dnm", - [0x0c000] = "vaddF.dnm", [0x0c001] = "vsubF.dnm", - [0x20000] = "vdivF.dnm", - [0x24000] = "vfnmsF.dnm", [0x24001] = "vfnmaF.dnm", - [0x28000] = "vfmaF.dnm", [0x28001] = "vfmsF.dnm", - [0x2c000] = "vmovF.dY", - [0x2c001] = { - shift = 7, mask = 0x1e01, - [0] = "vmovF.dm", "vabsF.dm", - [0x0200] = "vnegF.dm", [0x0201] = "vsqrtF.dm", - [0x0800] = "vcmpF.dm", [0x0801] = "vcmpeF.dm", - [0x0a00] = "vcmpzF.d", [0x0a01] = "vcmpzeF.d", - [0x0e01] = "vcvtG.dF.m", - [0x1000] = "vcvt.f32.u32Fdm", [0x1001] = "vcvt.f32.s32Fdm", - [0x1800] = "vcvtr.u32F.dm", [0x1801] = "vcvt.u32F.dm", - [0x1a00] = "vcvtr.s32F.dm", [0x1a01] = "vcvt.s32F.dm", - }, -} - -local map_vfpd = { - shift = 6, mask = 0x2c001, - [0] = "vmlaG.dnm", "vmlsG.dnm", - [0x04000] = "vnmlsG.dnm", [0x04001] = "vnmlaG.dnm", - [0x08000] = "vmulG.dnm", [0x08001] = "vnmulG.dnm", - [0x0c000] = "vaddG.dnm", [0x0c001] = "vsubG.dnm", - [0x20000] = "vdivG.dnm", - [0x24000] = "vfnmsG.dnm", [0x24001] = "vfnmaG.dnm", - [0x28000] = "vfmaG.dnm", [0x28001] = "vfmsG.dnm", - [0x2c000] = "vmovG.dY", - [0x2c001] = { - shift = 7, mask = 0x1e01, - [0] = "vmovG.dm", "vabsG.dm", - [0x0200] = "vnegG.dm", [0x0201] = "vsqrtG.dm", - [0x0800] = "vcmpG.dm", [0x0801] = "vcmpeG.dm", - [0x0a00] = "vcmpzG.d", [0x0a01] = "vcmpzeG.d", - [0x0e01] = "vcvtF.dG.m", - [0x1000] = "vcvt.f64.u32GdFm", [0x1001] = "vcvt.f64.s32GdFm", - [0x1800] = "vcvtr.u32FdG.m", [0x1801] = "vcvt.u32FdG.m", - [0x1a00] = "vcvtr.s32FdG.m", [0x1a01] = "vcvt.s32FdG.m", - }, -} - -local map_datac = { - shift = 24, mask = 1, - [0] = { - shift = 4, mask = 1, - [0] = { - shift = 8, mask = 15, - [10] = map_vfps, - [11] = map_vfpd, - -- NYI cdp, mcr, mrc. - }, - { - shift = 8, mask = 15, - [10] = { - shift = 20, mask = 15, - [0] = "vmovFnD", "vmovFDn", - [14] = "vmsrD", - [15] = { shift = 12, mask = 15, [15] = "vmrs", _ = "vmrsD", }, - }, - }, - }, - "svcT", -} - -local map_loadcu = { - shift = 0, mask = 0, -- NYI unconditional CP load/store. -} - -local map_datacu = { - shift = 0, mask = 0, -- NYI unconditional CP data. -} - -local map_simddata = { - shift = 0, mask = 0, -- NYI SIMD data. -} - -local map_simdload = { - shift = 0, mask = 0, -- NYI SIMD load/store, preload. -} - -local map_preload = { - shift = 0, mask = 0, -- NYI preload. -} - -local map_media = { - shift = 20, mask = 31, - [0] = false, - { --01 - shift = 5, mask = 7, - [0] = "sadd16DNM", "sasxDNM", "ssaxDNM", "ssub16DNM", - "sadd8DNM", false, false, "ssub8DNM", - }, - { --02 - shift = 5, mask = 7, - [0] = "qadd16DNM", "qasxDNM", "qsaxDNM", "qsub16DNM", - "qadd8DNM", false, false, "qsub8DNM", - }, - { --03 - shift = 5, mask = 7, - [0] = "shadd16DNM", "shasxDNM", "shsaxDNM", "shsub16DNM", - "shadd8DNM", false, false, "shsub8DNM", - }, - false, - { --05 - shift = 5, mask = 7, - [0] = "uadd16DNM", "uasxDNM", "usaxDNM", "usub16DNM", - "uadd8DNM", false, false, "usub8DNM", - }, - { --06 - shift = 5, mask = 7, - [0] = "uqadd16DNM", "uqasxDNM", "uqsaxDNM", "uqsub16DNM", - "uqadd8DNM", false, false, "uqsub8DNM", - }, - { --07 - shift = 5, mask = 7, - [0] = "uhadd16DNM", "uhasxDNM", "uhsaxDNM", "uhsub16DNM", - "uhadd8DNM", false, false, "uhsub8DNM", - }, - { --08 - shift = 5, mask = 7, - [0] = "pkhbtDNMU", false, "pkhtbDNMU", - { shift = 16, mask = 15, [15] = "sxtb16DMU", _ = "sxtab16DNMU", }, - "pkhbtDNMU", "selDNM", "pkhtbDNMU", - }, - false, - { --0a - shift = 5, mask = 7, - [0] = "ssatDxMu", "ssat16DxM", "ssatDxMu", - { shift = 16, mask = 15, [15] = "sxtbDMU", _ = "sxtabDNMU", }, - "ssatDxMu", false, "ssatDxMu", - }, - { --0b - shift = 5, mask = 7, - [0] = "ssatDxMu", "revDM", "ssatDxMu", - { shift = 16, mask = 15, [15] = "sxthDMU", _ = "sxtahDNMU", }, - "ssatDxMu", "rev16DM", "ssatDxMu", - }, - { --0c - shift = 5, mask = 7, - [3] = { shift = 16, mask = 15, [15] = "uxtb16DMU", _ = "uxtab16DNMU", }, - }, - false, - { --0e - shift = 5, mask = 7, - [0] = "usatDwMu", "usat16DwM", "usatDwMu", - { shift = 16, mask = 15, [15] = "uxtbDMU", _ = "uxtabDNMU", }, - "usatDwMu", false, "usatDwMu", - }, - { --0f - shift = 5, mask = 7, - [0] = "usatDwMu", "rbitDM", "usatDwMu", - { shift = 16, mask = 15, [15] = "uxthDMU", _ = "uxtahDNMU", }, - "usatDwMu", "revshDM", "usatDwMu", - }, - { --10 - shift = 12, mask = 15, - [15] = { - shift = 5, mask = 7, - "smuadNMS", "smuadxNMS", "smusdNMS", "smusdxNMS", - }, - _ = { - shift = 5, mask = 7, - [0] = "smladNMSD", "smladxNMSD", "smlsdNMSD", "smlsdxNMSD", - }, - }, - false, false, false, - { --14 - shift = 5, mask = 7, - [0] = "smlaldDNMS", "smlaldxDNMS", "smlsldDNMS", "smlsldxDNMS", - }, - { --15 - shift = 5, mask = 7, - [0] = { shift = 12, mask = 15, [15] = "smmulNMS", _ = "smmlaNMSD", }, - { shift = 12, mask = 15, [15] = "smmulrNMS", _ = "smmlarNMSD", }, - false, false, false, false, - "smmlsNMSD", "smmlsrNMSD", - }, - false, false, - { --18 - shift = 5, mask = 7, - [0] = { shift = 12, mask = 15, [15] = "usad8NMS", _ = "usada8NMSD", }, - }, - false, - { --1a - shift = 5, mask = 3, [2] = "sbfxDMvw", - }, - { --1b - shift = 5, mask = 3, [2] = "sbfxDMvw", - }, - { --1c - shift = 5, mask = 3, - [0] = { shift = 0, mask = 15, [15] = "bfcDvX", _ = "bfiDMvX", }, - }, - { --1d - shift = 5, mask = 3, - [0] = { shift = 0, mask = 15, [15] = "bfcDvX", _ = "bfiDMvX", }, - }, - { --1e - shift = 5, mask = 3, [2] = "ubfxDMvw", - }, - { --1f - shift = 5, mask = 3, [2] = "ubfxDMvw", - }, -} - -local map_load = { - shift = 21, mask = 9, - { - shift = 20, mask = 5, - [0] = "strtDL", "ldrtDL", [4] = "strbtDL", [5] = "ldrbtDL", - }, - _ = { - shift = 20, mask = 5, - [0] = "strDL", "ldrDL", [4] = "strbDL", [5] = "ldrbDL", - } -} - -local map_load1 = { - shift = 4, mask = 1, - [0] = map_load, map_media, -} - -local map_loadm = { - shift = 20, mask = 1, - [0] = { - shift = 23, mask = 3, - [0] = "stmdaNR", "stmNR", - { shift = 16, mask = 63, [45] = "pushR", _ = "stmdbNR", }, "stmibNR", - }, - { - shift = 23, mask = 3, - [0] = "ldmdaNR", { shift = 16, mask = 63, [61] = "popR", _ = "ldmNR", }, - "ldmdbNR", "ldmibNR", - }, -} - -local map_data = { - shift = 21, mask = 15, - [0] = "andDNPs", "eorDNPs", "subDNPs", "rsbDNPs", - "addDNPs", "adcDNPs", "sbcDNPs", "rscDNPs", - "tstNP", "teqNP", "cmpNP", "cmnNP", - "orrDNPs", "movDPs", "bicDNPs", "mvnDPs", -} - -local map_mul = { - shift = 21, mask = 7, - [0] = "mulNMSs", "mlaNMSDs", "umaalDNMS", "mlsDNMS", - "umullDNMSs", "umlalDNMSs", "smullDNMSs", "smlalDNMSs", -} - -local map_sync = { - shift = 20, mask = 15, -- NYI: brackets around N. R(D+1) for ldrexd/strexd. - [0] = "swpDMN", false, false, false, - "swpbDMN", false, false, false, - "strexDMN", "ldrexDN", "strexdDN", "ldrexdDN", - "strexbDMN", "ldrexbDN", "strexhDN", "ldrexhDN", -} - -local map_mulh = { - shift = 21, mask = 3, - [0] = { shift = 5, mask = 3, - [0] = "smlabbNMSD", "smlatbNMSD", "smlabtNMSD", "smlattNMSD", }, - { shift = 5, mask = 3, - [0] = "smlawbNMSD", "smulwbNMS", "smlawtNMSD", "smulwtNMS", }, - { shift = 5, mask = 3, - [0] = "smlalbbDNMS", "smlaltbDNMS", "smlalbtDNMS", "smlalttDNMS", }, - { shift = 5, mask = 3, - [0] = "smulbbNMS", "smultbNMS", "smulbtNMS", "smulttNMS", }, -} - -local map_misc = { - shift = 4, mask = 7, - -- NYI: decode PSR bits of msr. - [0] = { shift = 21, mask = 1, [0] = "mrsD", "msrM", }, - { shift = 21, mask = 3, "bxM", false, "clzDM", }, - { shift = 21, mask = 3, "bxjM", }, - { shift = 21, mask = 3, "blxM", }, - false, - { shift = 21, mask = 3, [0] = "qaddDMN", "qsubDMN", "qdaddDMN", "qdsubDMN", }, - false, - { shift = 21, mask = 3, "bkptK", }, -} - -local map_datar = { - shift = 4, mask = 9, - [9] = { - shift = 5, mask = 3, - [0] = { shift = 24, mask = 1, [0] = map_mul, map_sync, }, - { shift = 20, mask = 1, [0] = "strhDL", "ldrhDL", }, - { shift = 20, mask = 1, [0] = "ldrdDL", "ldrsbDL", }, - { shift = 20, mask = 1, [0] = "strdDL", "ldrshDL", }, - }, - _ = { - shift = 20, mask = 25, - [16] = { shift = 7, mask = 1, [0] = map_misc, map_mulh, }, - _ = { - shift = 0, mask = 0xffffffff, - [bor(0xe1a00000)] = "nop", - _ = map_data, - } - }, -} - -local map_datai = { - shift = 20, mask = 31, -- NYI: decode PSR bits of msr. Decode imm12. - [16] = "movwDW", [20] = "movtDW", - [18] = { shift = 0, mask = 0xf00ff, [0] = "nopv6", _ = "msrNW", }, - [22] = "msrNW", - _ = map_data, -} - -local map_branch = { - shift = 24, mask = 1, - [0] = "bB", "blB" -} - -local map_condins = { - [0] = map_datar, map_datai, map_load, map_load1, - map_loadm, map_branch, map_loadc, map_datac -} - --- NYI: setend. -local map_uncondins = { - [0] = false, map_simddata, map_simdload, map_preload, - false, "blxB", map_loadcu, map_datacu, -} - ------------------------------------------------------------------------------- - -local map_gpr = { - [0] = "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc", -} - -local map_cond = { - [0] = "eq", "ne", "hs", "lo", "mi", "pl", "vs", "vc", - "hi", "ls", "ge", "lt", "gt", "le", "al", -} - -local map_shift = { [0] = "lsl", "lsr", "asr", "ror", } - ------------------------------------------------------------------------------- - --- Output a nicely formatted line with an opcode and operands. -local function putop(ctx, text, operands) - local pos = ctx.pos - local extra = "" - if ctx.rel then - local sym = ctx.symtab[ctx.rel] - if sym then - extra = "\t->"..sym - elseif band(ctx.op, 0x0e000000) ~= 0x0a000000 then - extra = "\t; 0x"..tohex(ctx.rel) - end - end - if ctx.hexdump > 0 then - ctx.out(format("%08x %s %-5s %s%s\n", - ctx.addr+pos, tohex(ctx.op), text, concat(operands, ", "), extra)) - else - ctx.out(format("%08x %-5s %s%s\n", - ctx.addr+pos, text, concat(operands, ", "), extra)) - end - ctx.pos = pos + 4 -end - --- Fallback for unknown opcodes. -local function unknown(ctx) - return putop(ctx, ".long", { "0x"..tohex(ctx.op) }) -end - --- Format operand 2 of load/store opcodes. -local function fmtload(ctx, op, pos) - local base = map_gpr[band(rshift(op, 16), 15)] - local x, ofs - local ext = (band(op, 0x04000000) == 0) - if not ext and band(op, 0x02000000) == 0 then - ofs = band(op, 4095) - if band(op, 0x00800000) == 0 then ofs = -ofs end - if base == "pc" then ctx.rel = ctx.addr + pos + 8 + ofs end - ofs = "#"..ofs - elseif ext and band(op, 0x00400000) ~= 0 then - ofs = band(op, 15) + band(rshift(op, 4), 0xf0) - if band(op, 0x00800000) == 0 then ofs = -ofs end - if base == "pc" then ctx.rel = ctx.addr + pos + 8 + ofs end - ofs = "#"..ofs - else - ofs = map_gpr[band(op, 15)] - if ext or band(op, 0xfe0) == 0 then - elseif band(op, 0xfe0) == 0x60 then - ofs = format("%s, rrx", ofs) - else - local sh = band(rshift(op, 7), 31) - if sh == 0 then sh = 32 end - ofs = format("%s, %s #%d", ofs, map_shift[band(rshift(op, 5), 3)], sh) - end - if band(op, 0x00800000) == 0 then ofs = "-"..ofs end - end - if ofs == "#0" then - x = format("[%s]", base) - elseif band(op, 0x01000000) == 0 then - x = format("[%s], %s", base, ofs) - else - x = format("[%s, %s]", base, ofs) - end - if band(op, 0x01200000) == 0x01200000 then x = x.."!" end - return x -end - --- Format operand 2 of vector load/store opcodes. -local function fmtvload(ctx, op, pos) - local base = map_gpr[band(rshift(op, 16), 15)] - local ofs = band(op, 255)*4 - if band(op, 0x00800000) == 0 then ofs = -ofs end - if base == "pc" then ctx.rel = ctx.addr + pos + 8 + ofs end - if ofs == 0 then - return format("[%s]", base) - else - return format("[%s, #%d]", base, ofs) - end -end - -local function fmtvr(op, vr, sh0, sh1) - if vr == "s" then - return format("s%d", 2*band(rshift(op, sh0), 15)+band(rshift(op, sh1), 1)) - else - return format("d%d", band(rshift(op, sh0), 15)+band(rshift(op, sh1-4), 16)) - end -end - --- Disassemble a single instruction. -local function disass_ins(ctx) - local pos = ctx.pos - local b0, b1, b2, b3 = byte(ctx.code, pos+1, pos+4) - local op = bor(lshift(b3, 24), lshift(b2, 16), lshift(b1, 8), b0) - local operands = {} - local suffix = "" - local last, name, pat - local vr - ctx.op = op - ctx.rel = nil - - local cond = rshift(op, 28) - local opat - if cond == 15 then - opat = map_uncondins[band(rshift(op, 25), 7)] - else - if cond ~= 14 then suffix = map_cond[cond] end - opat = map_condins[band(rshift(op, 25), 7)] - end - while type(opat) ~= "string" do - if not opat then return unknown(ctx) end - opat = opat[band(rshift(op, opat.shift), opat.mask)] or opat._ - end - name, pat = match(opat, "^([a-z0-9]*)(.*)") - if sub(pat, 1, 1) == "." then - local s2, p2 = match(pat, "^([a-z0-9.]*)(.*)") - suffix = suffix..s2 - pat = p2 - end - - for p in gmatch(pat, ".") do - local x = nil - if p == "D" then - x = map_gpr[band(rshift(op, 12), 15)] - elseif p == "N" then - x = map_gpr[band(rshift(op, 16), 15)] - elseif p == "S" then - x = map_gpr[band(rshift(op, 8), 15)] - elseif p == "M" then - x = map_gpr[band(op, 15)] - elseif p == "d" then - x = fmtvr(op, vr, 12, 22) - elseif p == "n" then - x = fmtvr(op, vr, 16, 7) - elseif p == "m" then - x = fmtvr(op, vr, 0, 5) - elseif p == "P" then - if band(op, 0x02000000) ~= 0 then - x = ror(band(op, 255), 2*band(rshift(op, 8), 15)) - else - x = map_gpr[band(op, 15)] - if band(op, 0xff0) ~= 0 then - operands[#operands+1] = x - local s = map_shift[band(rshift(op, 5), 3)] - local r = nil - if band(op, 0xf90) == 0 then - if s == "ror" then s = "rrx" else r = "#32" end - elseif band(op, 0x10) == 0 then - r = "#"..band(rshift(op, 7), 31) - else - r = map_gpr[band(rshift(op, 8), 15)] - end - if name == "mov" then name = s; x = r - elseif r then x = format("%s %s", s, r) - else x = s end - end - end - elseif p == "L" then - x = fmtload(ctx, op, pos) - elseif p == "l" then - x = fmtvload(ctx, op, pos) - elseif p == "B" then - local addr = ctx.addr + pos + 8 + arshift(lshift(op, 8), 6) - if cond == 15 then addr = addr + band(rshift(op, 23), 2) end - ctx.rel = addr - x = "0x"..tohex(addr) - elseif p == "F" then - vr = "s" - elseif p == "G" then - vr = "d" - elseif p == "." then - suffix = suffix..(vr == "s" and ".f32" or ".f64") - elseif p == "R" then - if band(op, 0x00200000) ~= 0 and #operands == 1 then - operands[1] = operands[1].."!" - end - local t = {} - for i=0,15 do - if band(rshift(op, i), 1) == 1 then t[#t+1] = map_gpr[i] end - end - x = "{"..concat(t, ", ").."}" - elseif p == "r" then - if band(op, 0x00200000) ~= 0 and #operands == 2 then - operands[1] = operands[1].."!" - end - local s = tonumber(sub(last, 2)) - local n = band(op, 255) - if vr == "d" then n = rshift(n, 1) end - operands[#operands] = format("{%s-%s%d}", last, vr, s+n-1) - elseif p == "W" then - x = band(op, 0x0fff) + band(rshift(op, 4), 0xf000) - elseif p == "T" then - x = "#0x"..tohex(band(op, 0x00ffffff), 6) - elseif p == "U" then - x = band(rshift(op, 7), 31) - if x == 0 then x = nil end - elseif p == "u" then - x = band(rshift(op, 7), 31) - if band(op, 0x40) == 0 then - if x == 0 then x = nil else x = "lsl #"..x end - else - if x == 0 then x = "asr #32" else x = "asr #"..x end - end - elseif p == "v" then - x = band(rshift(op, 7), 31) - elseif p == "w" then - x = band(rshift(op, 16), 31) - elseif p == "x" then - x = band(rshift(op, 16), 31) + 1 - elseif p == "X" then - x = band(rshift(op, 16), 31) - last + 1 - elseif p == "Y" then - x = band(rshift(op, 12), 0xf0) + band(op, 0x0f) - elseif p == "K" then - x = "#0x"..tohex(band(rshift(op, 4), 0x0000fff0) + band(op, 15), 4) - elseif p == "s" then - if band(op, 0x00100000) ~= 0 then suffix = "s"..suffix end - else - assert(false) - end - if x then - last = x - if type(x) == "number" then x = "#"..x end - operands[#operands+1] = x - end - end - - return putop(ctx, name..suffix, operands) -end - ------------------------------------------------------------------------------- - --- Disassemble a block of code. -local function disass_block(ctx, ofs, len) - if not ofs then ofs = 0 end - local stop = len and ofs+len or #ctx.code - ctx.pos = ofs - ctx.rel = nil - while ctx.pos < stop do disass_ins(ctx) end -end - --- Extended API: create a disassembler context. Then call ctx:disass(ofs, len). -local function create_(code, addr, out) - local ctx = {} - ctx.code = code - ctx.addr = addr or 0 - ctx.out = out or io.write - ctx.symtab = {} - ctx.disass = disass_block - ctx.hexdump = 8 - return ctx -end - --- Simple API: disassemble code (a string) at address and output via out. -local function disass_(code, addr, out) - create_(code, addr, out):disass() -end - --- Return register name for RID. -local function regname_(r) - if r < 16 then return map_gpr[r] end - return "d"..(r-16) -end - --- Public module functions. -module(...) - -create = create_ -disass = disass_ -regname = regname_ - diff --git a/deps/luajit/src/jit/dis_mips.lua b/deps/luajit/src/jit/dis_mips.lua deleted file mode 100644 index acdd2be..0000000 --- a/deps/luajit/src/jit/dis_mips.lua +++ /dev/null @@ -1,428 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT MIPS disassembler module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT/X license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- This is a helper module used by the LuaJIT machine code dumper module. --- --- It disassembles all standard MIPS32R1/R2 instructions. --- Default mode is big-endian, but see: dis_mipsel.lua ------------------------------------------------------------------------------- - -local type = type -local sub, byte, format = string.sub, string.byte, string.format -local match, gmatch, gsub = string.match, string.gmatch, string.gsub -local concat = table.concat -local bit = require("bit") -local band, bor, tohex = bit.band, bit.bor, bit.tohex -local lshift, rshift, arshift = bit.lshift, bit.rshift, bit.arshift - ------------------------------------------------------------------------------- --- Primary and extended opcode maps ------------------------------------------------------------------------------- - -local map_movci = { shift = 16, mask = 1, [0] = "movfDSC", "movtDSC", } -local map_srl = { shift = 21, mask = 1, [0] = "srlDTA", "rotrDTA", } -local map_srlv = { shift = 6, mask = 1, [0] = "srlvDTS", "rotrvDTS", } - -local map_special = { - shift = 0, mask = 63, - [0] = { shift = 0, mask = -1, [0] = "nop", _ = "sllDTA" }, - map_movci, map_srl, "sraDTA", - "sllvDTS", false, map_srlv, "sravDTS", - "jrS", "jalrD1S", "movzDST", "movnDST", - "syscallY", "breakY", false, "sync", - "mfhiD", "mthiS", "mfloD", "mtloS", - false, false, false, false, - "multST", "multuST", "divST", "divuST", - false, false, false, false, - "addDST", "addu|moveDST0", "subDST", "subu|neguDS0T", - "andDST", "orDST", "xorDST", "nor|notDST0", - false, false, "sltDST", "sltuDST", - false, false, false, false, - "tgeSTZ", "tgeuSTZ", "tltSTZ", "tltuSTZ", - "teqSTZ", false, "tneSTZ", -} - -local map_special2 = { - shift = 0, mask = 63, - [0] = "maddST", "madduST", "mulDST", false, - "msubST", "msubuST", - [32] = "clzDS", [33] = "cloDS", - [63] = "sdbbpY", -} - -local map_bshfl = { - shift = 6, mask = 31, - [2] = "wsbhDT", - [16] = "sebDT", - [24] = "sehDT", -} - -local map_special3 = { - shift = 0, mask = 63, - [0] = "extTSAK", [4] = "insTSAL", - [32] = map_bshfl, - [59] = "rdhwrTD", -} - -local map_regimm = { - shift = 16, mask = 31, - [0] = "bltzSB", "bgezSB", "bltzlSB", "bgezlSB", - false, false, false, false, - "tgeiSI", "tgeiuSI", "tltiSI", "tltiuSI", - "teqiSI", false, "tneiSI", false, - "bltzalSB", "bgezalSB", "bltzallSB", "bgezallSB", - false, false, false, false, - false, false, false, false, - false, false, false, "synciSO", -} - -local map_cop0 = { - shift = 25, mask = 1, - [0] = { - shift = 21, mask = 15, - [0] = "mfc0TDW", [4] = "mtc0TDW", - [10] = "rdpgprDT", - [11] = { shift = 5, mask = 1, [0] = "diT0", "eiT0", }, - [14] = "wrpgprDT", - }, { - shift = 0, mask = 63, - [1] = "tlbr", [2] = "tlbwi", [6] = "tlbwr", [8] = "tlbp", - [24] = "eret", [31] = "deret", - [32] = "wait", - }, -} - -local map_cop1s = { - shift = 0, mask = 63, - [0] = "add.sFGH", "sub.sFGH", "mul.sFGH", "div.sFGH", - "sqrt.sFG", "abs.sFG", "mov.sFG", "neg.sFG", - "round.l.sFG", "trunc.l.sFG", "ceil.l.sFG", "floor.l.sFG", - "round.w.sFG", "trunc.w.sFG", "ceil.w.sFG", "floor.w.sFG", - false, - { shift = 16, mask = 1, [0] = "movf.sFGC", "movt.sFGC" }, - "movz.sFGT", "movn.sFGT", - false, "recip.sFG", "rsqrt.sFG", false, - false, false, false, false, - false, false, false, false, - false, "cvt.d.sFG", false, false, - "cvt.w.sFG", "cvt.l.sFG", "cvt.ps.sFGH", false, - false, false, false, false, - false, false, false, false, - "c.f.sVGH", "c.un.sVGH", "c.eq.sVGH", "c.ueq.sVGH", - "c.olt.sVGH", "c.ult.sVGH", "c.ole.sVGH", "c.ule.sVGH", - "c.sf.sVGH", "c.ngle.sVGH", "c.seq.sVGH", "c.ngl.sVGH", - "c.lt.sVGH", "c.nge.sVGH", "c.le.sVGH", "c.ngt.sVGH", -} - -local map_cop1d = { - shift = 0, mask = 63, - [0] = "add.dFGH", "sub.dFGH", "mul.dFGH", "div.dFGH", - "sqrt.dFG", "abs.dFG", "mov.dFG", "neg.dFG", - "round.l.dFG", "trunc.l.dFG", "ceil.l.dFG", "floor.l.dFG", - "round.w.dFG", "trunc.w.dFG", "ceil.w.dFG", "floor.w.dFG", - false, - { shift = 16, mask = 1, [0] = "movf.dFGC", "movt.dFGC" }, - "movz.dFGT", "movn.dFGT", - false, "recip.dFG", "rsqrt.dFG", false, - false, false, false, false, - false, false, false, false, - "cvt.s.dFG", false, false, false, - "cvt.w.dFG", "cvt.l.dFG", false, false, - false, false, false, false, - false, false, false, false, - "c.f.dVGH", "c.un.dVGH", "c.eq.dVGH", "c.ueq.dVGH", - "c.olt.dVGH", "c.ult.dVGH", "c.ole.dVGH", "c.ule.dVGH", - "c.df.dVGH", "c.ngle.dVGH", "c.deq.dVGH", "c.ngl.dVGH", - "c.lt.dVGH", "c.nge.dVGH", "c.le.dVGH", "c.ngt.dVGH", -} - -local map_cop1ps = { - shift = 0, mask = 63, - [0] = "add.psFGH", "sub.psFGH", "mul.psFGH", false, - false, "abs.psFG", "mov.psFG", "neg.psFG", - false, false, false, false, - false, false, false, false, - false, - { shift = 16, mask = 1, [0] = "movf.psFGC", "movt.psFGC" }, - "movz.psFGT", "movn.psFGT", - false, false, false, false, - false, false, false, false, - false, false, false, false, - "cvt.s.puFG", false, false, false, - false, false, false, false, - "cvt.s.plFG", false, false, false, - "pll.psFGH", "plu.psFGH", "pul.psFGH", "puu.psFGH", - "c.f.psVGH", "c.un.psVGH", "c.eq.psVGH", "c.ueq.psVGH", - "c.olt.psVGH", "c.ult.psVGH", "c.ole.psVGH", "c.ule.psVGH", - "c.psf.psVGH", "c.ngle.psVGH", "c.pseq.psVGH", "c.ngl.psVGH", - "c.lt.psVGH", "c.nge.psVGH", "c.le.psVGH", "c.ngt.psVGH", -} - -local map_cop1w = { - shift = 0, mask = 63, - [32] = "cvt.s.wFG", [33] = "cvt.d.wFG", -} - -local map_cop1l = { - shift = 0, mask = 63, - [32] = "cvt.s.lFG", [33] = "cvt.d.lFG", -} - -local map_cop1bc = { - shift = 16, mask = 3, - [0] = "bc1fCB", "bc1tCB", "bc1flCB", "bc1tlCB", -} - -local map_cop1 = { - shift = 21, mask = 31, - [0] = "mfc1TG", false, "cfc1TG", "mfhc1TG", - "mtc1TG", false, "ctc1TG", "mthc1TG", - map_cop1bc, false, false, false, - false, false, false, false, - map_cop1s, map_cop1d, false, false, - map_cop1w, map_cop1l, map_cop1ps, -} - -local map_cop1x = { - shift = 0, mask = 63, - [0] = "lwxc1FSX", "ldxc1FSX", false, false, - false, "luxc1FSX", false, false, - "swxc1FSX", "sdxc1FSX", false, false, - false, "suxc1FSX", false, "prefxMSX", - false, false, false, false, - false, false, false, false, - false, false, false, false, - false, false, "alnv.psFGHS", false, - "madd.sFRGH", "madd.dFRGH", false, false, - false, false, "madd.psFRGH", false, - "msub.sFRGH", "msub.dFRGH", false, false, - false, false, "msub.psFRGH", false, - "nmadd.sFRGH", "nmadd.dFRGH", false, false, - false, false, "nmadd.psFRGH", false, - "nmsub.sFRGH", "nmsub.dFRGH", false, false, - false, false, "nmsub.psFRGH", false, -} - -local map_pri = { - [0] = map_special, map_regimm, "jJ", "jalJ", - "beq|beqz|bST00B", "bne|bnezST0B", "blezSB", "bgtzSB", - "addiTSI", "addiu|liTS0I", "sltiTSI", "sltiuTSI", - "andiTSU", "ori|liTS0U", "xoriTSU", "luiTU", - map_cop0, map_cop1, false, map_cop1x, - "beql|beqzlST0B", "bnel|bnezlST0B", "blezlSB", "bgtzlSB", - false, false, false, false, - map_special2, false, false, map_special3, - "lbTSO", "lhTSO", "lwlTSO", "lwTSO", - "lbuTSO", "lhuTSO", "lwrTSO", false, - "sbTSO", "shTSO", "swlTSO", "swTSO", - false, false, "swrTSO", "cacheNSO", - "llTSO", "lwc1HSO", "lwc2TSO", "prefNSO", - false, "ldc1HSO", "ldc2TSO", false, - "scTSO", "swc1HSO", "swc2TSO", false, - false, "sdc1HSO", "sdc2TSO", false, -} - ------------------------------------------------------------------------------- - -local map_gpr = { - [0] = "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", - "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", - "r24", "r25", "r26", "r27", "r28", "sp", "r30", "ra", -} - ------------------------------------------------------------------------------- - --- Output a nicely formatted line with an opcode and operands. -local function putop(ctx, text, operands) - local pos = ctx.pos - local extra = "" - if ctx.rel then - local sym = ctx.symtab[ctx.rel] - if sym then extra = "\t->"..sym end - end - if ctx.hexdump > 0 then - ctx.out(format("%08x %s %-7s %s%s\n", - ctx.addr+pos, tohex(ctx.op), text, concat(operands, ", "), extra)) - else - ctx.out(format("%08x %-7s %s%s\n", - ctx.addr+pos, text, concat(operands, ", "), extra)) - end - ctx.pos = pos + 4 -end - --- Fallback for unknown opcodes. -local function unknown(ctx) - return putop(ctx, ".long", { "0x"..tohex(ctx.op) }) -end - -local function get_be(ctx) - local pos = ctx.pos - local b0, b1, b2, b3 = byte(ctx.code, pos+1, pos+4) - return bor(lshift(b0, 24), lshift(b1, 16), lshift(b2, 8), b3) -end - -local function get_le(ctx) - local pos = ctx.pos - local b0, b1, b2, b3 = byte(ctx.code, pos+1, pos+4) - return bor(lshift(b3, 24), lshift(b2, 16), lshift(b1, 8), b0) -end - --- Disassemble a single instruction. -local function disass_ins(ctx) - local op = ctx:get() - local operands = {} - local last = nil - ctx.op = op - ctx.rel = nil - - local opat = map_pri[rshift(op, 26)] - while type(opat) ~= "string" do - if not opat then return unknown(ctx) end - opat = opat[band(rshift(op, opat.shift), opat.mask)] or opat._ - end - local name, pat = match(opat, "^([a-z0-9_.]*)(.*)") - local altname, pat2 = match(pat, "|([a-z0-9_.|]*)(.*)") - if altname then pat = pat2 end - - for p in gmatch(pat, ".") do - local x = nil - if p == "S" then - x = map_gpr[band(rshift(op, 21), 31)] - elseif p == "T" then - x = map_gpr[band(rshift(op, 16), 31)] - elseif p == "D" then - x = map_gpr[band(rshift(op, 11), 31)] - elseif p == "F" then - x = "f"..band(rshift(op, 6), 31) - elseif p == "G" then - x = "f"..band(rshift(op, 11), 31) - elseif p == "H" then - x = "f"..band(rshift(op, 16), 31) - elseif p == "R" then - x = "f"..band(rshift(op, 21), 31) - elseif p == "A" then - x = band(rshift(op, 6), 31) - elseif p == "M" then - x = band(rshift(op, 11), 31) - elseif p == "N" then - x = band(rshift(op, 16), 31) - elseif p == "C" then - x = band(rshift(op, 18), 7) - if x == 0 then x = nil end - elseif p == "K" then - x = band(rshift(op, 11), 31) + 1 - elseif p == "L" then - x = band(rshift(op, 11), 31) - last + 1 - elseif p == "I" then - x = arshift(lshift(op, 16), 16) - elseif p == "U" then - x = band(op, 0xffff) - elseif p == "O" then - local disp = arshift(lshift(op, 16), 16) - operands[#operands] = format("%d(%s)", disp, last) - elseif p == "X" then - local index = map_gpr[band(rshift(op, 16), 31)] - operands[#operands] = format("%s(%s)", index, last) - elseif p == "B" then - x = ctx.addr + ctx.pos + arshift(lshift(op, 16), 16)*4 + 4 - ctx.rel = x - x = "0x"..tohex(x) - elseif p == "J" then - x = band(ctx.addr + ctx.pos, 0xf0000000) + band(op, 0x03ffffff)*4 - ctx.rel = x - x = "0x"..tohex(x) - elseif p == "V" then - x = band(rshift(op, 8), 7) - if x == 0 then x = nil end - elseif p == "W" then - x = band(op, 7) - if x == 0 then x = nil end - elseif p == "Y" then - x = band(rshift(op, 6), 0x000fffff) - if x == 0 then x = nil end - elseif p == "Z" then - x = band(rshift(op, 6), 1023) - if x == 0 then x = nil end - elseif p == "0" then - if last == "r0" or last == 0 then - local n = #operands - operands[n] = nil - last = operands[n-1] - if altname then - local a1, a2 = match(altname, "([^|]*)|(.*)") - if a1 then name, altname = a1, a2 - else name = altname end - end - end - elseif p == "1" then - if last == "ra" then - operands[#operands] = nil - end - else - assert(false) - end - if x then operands[#operands+1] = x; last = x end - end - - return putop(ctx, name, operands) -end - ------------------------------------------------------------------------------- - --- Disassemble a block of code. -local function disass_block(ctx, ofs, len) - if not ofs then ofs = 0 end - local stop = len and ofs+len or #ctx.code - stop = stop - stop % 4 - ctx.pos = ofs - ofs % 4 - ctx.rel = nil - while ctx.pos < stop do disass_ins(ctx) end -end - --- Extended API: create a disassembler context. Then call ctx:disass(ofs, len). -local function create_(code, addr, out) - local ctx = {} - ctx.code = code - ctx.addr = addr or 0 - ctx.out = out or io.write - ctx.symtab = {} - ctx.disass = disass_block - ctx.hexdump = 8 - ctx.get = get_be - return ctx -end - -local function create_el_(code, addr, out) - local ctx = create_(code, addr, out) - ctx.get = get_le - return ctx -end - --- Simple API: disassemble code (a string) at address and output via out. -local function disass_(code, addr, out) - create_(code, addr, out):disass() -end - -local function disass_el_(code, addr, out) - create_el_(code, addr, out):disass() -end - --- Return register name for RID. -local function regname_(r) - if r < 32 then return map_gpr[r] end - return "f"..(r-32) -end - --- Public module functions. -module(...) - -create = create_ -create_el = create_el_ -disass = disass_ -disass_el = disass_el_ -regname = regname_ - diff --git a/deps/luajit/src/jit/dis_mipsel.lua b/deps/luajit/src/jit/dis_mipsel.lua deleted file mode 100644 index dd9d26a..0000000 --- a/deps/luajit/src/jit/dis_mipsel.lua +++ /dev/null @@ -1,20 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT MIPSEL disassembler wrapper module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- This module just exports the little-endian functions from the --- MIPS disassembler module. All the interesting stuff is there. ------------------------------------------------------------------------------- - -local require = require - -module(...) - -local dis_mips = require(_PACKAGE.."dis_mips") - -create = dis_mips.create_el -disass = dis_mips.disass_el -regname = dis_mips.regname - diff --git a/deps/luajit/src/jit/dis_ppc.lua b/deps/luajit/src/jit/dis_ppc.lua deleted file mode 100644 index d05c431..0000000 --- a/deps/luajit/src/jit/dis_ppc.lua +++ /dev/null @@ -1,591 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT PPC disassembler module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT/X license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- This is a helper module used by the LuaJIT machine code dumper module. --- --- It disassembles all common, non-privileged 32/64 bit PowerPC instructions --- plus the e500 SPE instructions and some Cell/Xenon extensions. --- --- NYI: VMX, VMX128 ------------------------------------------------------------------------------- - -local type = type -local sub, byte, format = string.sub, string.byte, string.format -local match, gmatch, gsub = string.match, string.gmatch, string.gsub -local concat = table.concat -local bit = require("bit") -local band, bor, tohex = bit.band, bit.bor, bit.tohex -local lshift, rshift, arshift = bit.lshift, bit.rshift, bit.arshift - ------------------------------------------------------------------------------- --- Primary and extended opcode maps ------------------------------------------------------------------------------- - -local map_crops = { - shift = 1, mask = 1023, - [0] = "mcrfXX", - [33] = "crnor|crnotCCC=", [129] = "crandcCCC", - [193] = "crxor|crclrCCC%", [225] = "crnandCCC", - [257] = "crandCCC", [289] = "creqv|crsetCCC%", - [417] = "crorcCCC", [449] = "cror|crmoveCCC=", - [16] = "b_lrKB", [528] = "b_ctrKB", - [150] = "isync", -} - -local map_rlwinm = setmetatable({ - shift = 0, mask = -1, -}, -{ __index = function(t, x) - local rot = band(rshift(x, 11), 31) - local mb = band(rshift(x, 6), 31) - local me = band(rshift(x, 1), 31) - if mb == 0 and me == 31-rot then - return "slwiRR~A." - elseif me == 31 and mb == 32-rot then - return "srwiRR~-A." - else - return "rlwinmRR~AAA." - end - end -}) - -local map_rld = { - shift = 2, mask = 7, - [0] = "rldiclRR~HM.", "rldicrRR~HM.", "rldicRR~HM.", "rldimiRR~HM.", - { - shift = 1, mask = 1, - [0] = "rldclRR~RM.", "rldcrRR~RM.", - }, -} - -local map_ext = setmetatable({ - shift = 1, mask = 1023, - - [0] = "cmp_YLRR", [32] = "cmpl_YLRR", - [4] = "twARR", [68] = "tdARR", - - [8] = "subfcRRR.", [40] = "subfRRR.", - [104] = "negRR.", [136] = "subfeRRR.", - [200] = "subfzeRR.", [232] = "subfmeRR.", - [520] = "subfcoRRR.", [552] = "subfoRRR.", - [616] = "negoRR.", [648] = "subfeoRRR.", - [712] = "subfzeoRR.", [744] = "subfmeoRR.", - - [9] = "mulhduRRR.", [73] = "mulhdRRR.", [233] = "mulldRRR.", - [457] = "divduRRR.", [489] = "divdRRR.", - [745] = "mulldoRRR.", - [969] = "divduoRRR.", [1001] = "divdoRRR.", - - [10] = "addcRRR.", [138] = "addeRRR.", - [202] = "addzeRR.", [234] = "addmeRR.", [266] = "addRRR.", - [522] = "addcoRRR.", [650] = "addeoRRR.", - [714] = "addzeoRR.", [746] = "addmeoRR.", [778] = "addoRRR.", - - [11] = "mulhwuRRR.", [75] = "mulhwRRR.", [235] = "mullwRRR.", - [459] = "divwuRRR.", [491] = "divwRRR.", - [747] = "mullwoRRR.", - [971] = "divwouRRR.", [1003] = "divwoRRR.", - - [15] = "iselltRRR", [47] = "iselgtRRR", [79] = "iseleqRRR", - - [144] = { shift = 20, mask = 1, [0] = "mtcrfRZ~", "mtocrfRZ~", }, - [19] = { shift = 20, mask = 1, [0] = "mfcrR", "mfocrfRZ", }, - [371] = { shift = 11, mask = 1023, [392] = "mftbR", [424] = "mftbuR", }, - [339] = { - shift = 11, mask = 1023, - [32] = "mferR", [256] = "mflrR", [288] = "mfctrR", [16] = "mfspefscrR", - }, - [467] = { - shift = 11, mask = 1023, - [32] = "mtxerR", [256] = "mtlrR", [288] = "mtctrR", [16] = "mtspefscrR", - }, - - [20] = "lwarxRR0R", [84] = "ldarxRR0R", - - [21] = "ldxRR0R", [53] = "lduxRRR", - [149] = "stdxRR0R", [181] = "stduxRRR", - [341] = "lwaxRR0R", [373] = "lwauxRRR", - - [23] = "lwzxRR0R", [55] = "lwzuxRRR", - [87] = "lbzxRR0R", [119] = "lbzuxRRR", - [151] = "stwxRR0R", [183] = "stwuxRRR", - [215] = "stbxRR0R", [247] = "stbuxRRR", - [279] = "lhzxRR0R", [311] = "lhzuxRRR", - [343] = "lhaxRR0R", [375] = "lhauxRRR", - [407] = "sthxRR0R", [439] = "sthuxRRR", - - [54] = "dcbst-R0R", [86] = "dcbf-R0R", - [150] = "stwcxRR0R.", [214] = "stdcxRR0R.", - [246] = "dcbtst-R0R", [278] = "dcbt-R0R", - [310] = "eciwxRR0R", [438] = "ecowxRR0R", - [470] = "dcbi-RR", - - [598] = { - shift = 21, mask = 3, - [0] = "sync", "lwsync", "ptesync", - }, - [758] = "dcba-RR", - [854] = "eieio", [982] = "icbi-R0R", [1014] = "dcbz-R0R", - - [26] = "cntlzwRR~", [58] = "cntlzdRR~", - [122] = "popcntbRR~", - [154] = "prtywRR~", [186] = "prtydRR~", - - [28] = "andRR~R.", [60] = "andcRR~R.", [124] = "nor|notRR~R=.", - [284] = "eqvRR~R.", [316] = "xorRR~R.", - [412] = "orcRR~R.", [444] = "or|mrRR~R=.", [476] = "nandRR~R.", - [508] = "cmpbRR~R", - - [512] = "mcrxrX", - - [532] = "ldbrxRR0R", [660] = "stdbrxRR0R", - - [533] = "lswxRR0R", [597] = "lswiRR0A", - [661] = "stswxRR0R", [725] = "stswiRR0A", - - [534] = "lwbrxRR0R", [662] = "stwbrxRR0R", - [790] = "lhbrxRR0R", [918] = "sthbrxRR0R", - - [535] = "lfsxFR0R", [567] = "lfsuxFRR", - [599] = "lfdxFR0R", [631] = "lfduxFRR", - [663] = "stfsxFR0R", [695] = "stfsuxFRR", - [727] = "stfdxFR0R", [759] = "stfduxFR0R", - [855] = "lfiwaxFR0R", - [983] = "stfiwxFR0R", - - [24] = "slwRR~R.", - - [27] = "sldRR~R.", [536] = "srwRR~R.", - [792] = "srawRR~R.", [824] = "srawiRR~A.", - - [794] = "sradRR~R.", [826] = "sradiRR~H.", [827] = "sradiRR~H.", - [922] = "extshRR~.", [954] = "extsbRR~.", [986] = "extswRR~.", - - [539] = "srdRR~R.", -}, -{ __index = function(t, x) - if band(x, 31) == 15 then return "iselRRRC" end - end -}) - -local map_ld = { - shift = 0, mask = 3, - [0] = "ldRRE", "lduRRE", "lwaRRE", -} - -local map_std = { - shift = 0, mask = 3, - [0] = "stdRRE", "stduRRE", -} - -local map_fps = { - shift = 5, mask = 1, - { - shift = 1, mask = 15, - [0] = false, false, "fdivsFFF.", false, - "fsubsFFF.", "faddsFFF.", "fsqrtsF-F.", false, - "fresF-F.", "fmulsFF-F.", "frsqrtesF-F.", false, - "fmsubsFFFF~.", "fmaddsFFFF~.", "fnmsubsFFFF~.", "fnmaddsFFFF~.", - } -} - -local map_fpd = { - shift = 5, mask = 1, - [0] = { - shift = 1, mask = 1023, - [0] = "fcmpuXFF", [32] = "fcmpoXFF", [64] = "mcrfsXX", - [38] = "mtfsb1A.", [70] = "mtfsb0A.", [134] = "mtfsfiA>>-A>", - [8] = "fcpsgnFFF.", [40] = "fnegF-F.", [72] = "fmrF-F.", - [136] = "fnabsF-F.", [264] = "fabsF-F.", - [12] = "frspF-F.", - [14] = "fctiwF-F.", [15] = "fctiwzF-F.", - [583] = "mffsF.", [711] = "mtfsfZF.", - [392] = "frinF-F.", [424] = "frizF-F.", - [456] = "fripF-F.", [488] = "frimF-F.", - [814] = "fctidF-F.", [815] = "fctidzF-F.", [846] = "fcfidF-F.", - }, - { - shift = 1, mask = 15, - [0] = false, false, "fdivFFF.", false, - "fsubFFF.", "faddFFF.", "fsqrtF-F.", "fselFFFF~.", - "freF-F.", "fmulFF-F.", "frsqrteF-F.", false, - "fmsubFFFF~.", "fmaddFFFF~.", "fnmsubFFFF~.", "fnmaddFFFF~.", - } -} - -local map_spe = { - shift = 0, mask = 2047, - - [512] = "evaddwRRR", [514] = "evaddiwRAR~", - [516] = "evsubwRRR~", [518] = "evsubiwRAR~", - [520] = "evabsRR", [521] = "evnegRR", - [522] = "evextsbRR", [523] = "evextshRR", [524] = "evrndwRR", - [525] = "evcntlzwRR", [526] = "evcntlswRR", - - [527] = "brincRRR", - - [529] = "evandRRR", [530] = "evandcRRR", [534] = "evxorRRR", - [535] = "evor|evmrRRR=", [536] = "evnor|evnotRRR=", - [537] = "eveqvRRR", [539] = "evorcRRR", [542] = "evnandRRR", - - [544] = "evsrwuRRR", [545] = "evsrwsRRR", - [546] = "evsrwiuRRA", [547] = "evsrwisRRA", - [548] = "evslwRRR", [550] = "evslwiRRA", - [552] = "evrlwRRR", [553] = "evsplatiRS", - [554] = "evrlwiRRA", [555] = "evsplatfiRS", - [556] = "evmergehiRRR", [557] = "evmergeloRRR", - [558] = "evmergehiloRRR", [559] = "evmergelohiRRR", - - [560] = "evcmpgtuYRR", [561] = "evcmpgtsYRR", - [562] = "evcmpltuYRR", [563] = "evcmpltsYRR", - [564] = "evcmpeqYRR", - - [632] = "evselRRR", [633] = "evselRRRW", - [634] = "evselRRRW", [635] = "evselRRRW", - [636] = "evselRRRW", [637] = "evselRRRW", - [638] = "evselRRRW", [639] = "evselRRRW", - - [640] = "evfsaddRRR", [641] = "evfssubRRR", - [644] = "evfsabsRR", [645] = "evfsnabsRR", [646] = "evfsnegRR", - [648] = "evfsmulRRR", [649] = "evfsdivRRR", - [652] = "evfscmpgtYRR", [653] = "evfscmpltYRR", [654] = "evfscmpeqYRR", - [656] = "evfscfuiR-R", [657] = "evfscfsiR-R", - [658] = "evfscfufR-R", [659] = "evfscfsfR-R", - [660] = "evfsctuiR-R", [661] = "evfsctsiR-R", - [662] = "evfsctufR-R", [663] = "evfsctsfR-R", - [664] = "evfsctuizR-R", [666] = "evfsctsizR-R", - [668] = "evfststgtYRR", [669] = "evfststltYRR", [670] = "evfststeqYRR", - - [704] = "efsaddRRR", [705] = "efssubRRR", - [708] = "efsabsRR", [709] = "efsnabsRR", [710] = "efsnegRR", - [712] = "efsmulRRR", [713] = "efsdivRRR", - [716] = "efscmpgtYRR", [717] = "efscmpltYRR", [718] = "efscmpeqYRR", - [719] = "efscfdR-R", - [720] = "efscfuiR-R", [721] = "efscfsiR-R", - [722] = "efscfufR-R", [723] = "efscfsfR-R", - [724] = "efsctuiR-R", [725] = "efsctsiR-R", - [726] = "efsctufR-R", [727] = "efsctsfR-R", - [728] = "efsctuizR-R", [730] = "efsctsizR-R", - [732] = "efststgtYRR", [733] = "efststltYRR", [734] = "efststeqYRR", - - [736] = "efdaddRRR", [737] = "efdsubRRR", - [738] = "efdcfuidR-R", [739] = "efdcfsidR-R", - [740] = "efdabsRR", [741] = "efdnabsRR", [742] = "efdnegRR", - [744] = "efdmulRRR", [745] = "efddivRRR", - [746] = "efdctuidzR-R", [747] = "efdctsidzR-R", - [748] = "efdcmpgtYRR", [749] = "efdcmpltYRR", [750] = "efdcmpeqYRR", - [751] = "efdcfsR-R", - [752] = "efdcfuiR-R", [753] = "efdcfsiR-R", - [754] = "efdcfufR-R", [755] = "efdcfsfR-R", - [756] = "efdctuiR-R", [757] = "efdctsiR-R", - [758] = "efdctufR-R", [759] = "efdctsfR-R", - [760] = "efdctuizR-R", [762] = "efdctsizR-R", - [764] = "efdtstgtYRR", [765] = "efdtstltYRR", [766] = "efdtsteqYRR", - - [768] = "evlddxRR0R", [769] = "evlddRR8", - [770] = "evldwxRR0R", [771] = "evldwRR8", - [772] = "evldhxRR0R", [773] = "evldhRR8", - [776] = "evlhhesplatxRR0R", [777] = "evlhhesplatRR2", - [780] = "evlhhousplatxRR0R", [781] = "evlhhousplatRR2", - [782] = "evlhhossplatxRR0R", [783] = "evlhhossplatRR2", - [784] = "evlwhexRR0R", [785] = "evlwheRR4", - [788] = "evlwhouxRR0R", [789] = "evlwhouRR4", - [790] = "evlwhosxRR0R", [791] = "evlwhosRR4", - [792] = "evlwwsplatxRR0R", [793] = "evlwwsplatRR4", - [796] = "evlwhsplatxRR0R", [797] = "evlwhsplatRR4", - - [800] = "evstddxRR0R", [801] = "evstddRR8", - [802] = "evstdwxRR0R", [803] = "evstdwRR8", - [804] = "evstdhxRR0R", [805] = "evstdhRR8", - [816] = "evstwhexRR0R", [817] = "evstwheRR4", - [820] = "evstwhoxRR0R", [821] = "evstwhoRR4", - [824] = "evstwwexRR0R", [825] = "evstwweRR4", - [828] = "evstwwoxRR0R", [829] = "evstwwoRR4", - - [1027] = "evmhessfRRR", [1031] = "evmhossfRRR", [1032] = "evmheumiRRR", - [1033] = "evmhesmiRRR", [1035] = "evmhesmfRRR", [1036] = "evmhoumiRRR", - [1037] = "evmhosmiRRR", [1039] = "evmhosmfRRR", [1059] = "evmhessfaRRR", - [1063] = "evmhossfaRRR", [1064] = "evmheumiaRRR", [1065] = "evmhesmiaRRR", - [1067] = "evmhesmfaRRR", [1068] = "evmhoumiaRRR", [1069] = "evmhosmiaRRR", - [1071] = "evmhosmfaRRR", [1095] = "evmwhssfRRR", [1096] = "evmwlumiRRR", - [1100] = "evmwhumiRRR", [1101] = "evmwhsmiRRR", [1103] = "evmwhsmfRRR", - [1107] = "evmwssfRRR", [1112] = "evmwumiRRR", [1113] = "evmwsmiRRR", - [1115] = "evmwsmfRRR", [1127] = "evmwhssfaRRR", [1128] = "evmwlumiaRRR", - [1132] = "evmwhumiaRRR", [1133] = "evmwhsmiaRRR", [1135] = "evmwhsmfaRRR", - [1139] = "evmwssfaRRR", [1144] = "evmwumiaRRR", [1145] = "evmwsmiaRRR", - [1147] = "evmwsmfaRRR", - - [1216] = "evaddusiaawRR", [1217] = "evaddssiaawRR", - [1218] = "evsubfusiaawRR", [1219] = "evsubfssiaawRR", - [1220] = "evmraRR", - [1222] = "evdivwsRRR", [1223] = "evdivwuRRR", - [1224] = "evaddumiaawRR", [1225] = "evaddsmiaawRR", - [1226] = "evsubfumiaawRR", [1227] = "evsubfsmiaawRR", - - [1280] = "evmheusiaawRRR", [1281] = "evmhessiaawRRR", - [1283] = "evmhessfaawRRR", [1284] = "evmhousiaawRRR", - [1285] = "evmhossiaawRRR", [1287] = "evmhossfaawRRR", - [1288] = "evmheumiaawRRR", [1289] = "evmhesmiaawRRR", - [1291] = "evmhesmfaawRRR", [1292] = "evmhoumiaawRRR", - [1293] = "evmhosmiaawRRR", [1295] = "evmhosmfaawRRR", - [1320] = "evmhegumiaaRRR", [1321] = "evmhegsmiaaRRR", - [1323] = "evmhegsmfaaRRR", [1324] = "evmhogumiaaRRR", - [1325] = "evmhogsmiaaRRR", [1327] = "evmhogsmfaaRRR", - [1344] = "evmwlusiaawRRR", [1345] = "evmwlssiaawRRR", - [1352] = "evmwlumiaawRRR", [1353] = "evmwlsmiaawRRR", - [1363] = "evmwssfaaRRR", [1368] = "evmwumiaaRRR", - [1369] = "evmwsmiaaRRR", [1371] = "evmwsmfaaRRR", - [1408] = "evmheusianwRRR", [1409] = "evmhessianwRRR", - [1411] = "evmhessfanwRRR", [1412] = "evmhousianwRRR", - [1413] = "evmhossianwRRR", [1415] = "evmhossfanwRRR", - [1416] = "evmheumianwRRR", [1417] = "evmhesmianwRRR", - [1419] = "evmhesmfanwRRR", [1420] = "evmhoumianwRRR", - [1421] = "evmhosmianwRRR", [1423] = "evmhosmfanwRRR", - [1448] = "evmhegumianRRR", [1449] = "evmhegsmianRRR", - [1451] = "evmhegsmfanRRR", [1452] = "evmhogumianRRR", - [1453] = "evmhogsmianRRR", [1455] = "evmhogsmfanRRR", - [1472] = "evmwlusianwRRR", [1473] = "evmwlssianwRRR", - [1480] = "evmwlumianwRRR", [1481] = "evmwlsmianwRRR", - [1491] = "evmwssfanRRR", [1496] = "evmwumianRRR", - [1497] = "evmwsmianRRR", [1499] = "evmwsmfanRRR", -} - -local map_pri = { - [0] = false, false, "tdiARI", "twiARI", - map_spe, false, false, "mulliRRI", - "subficRRI", false, "cmpl_iYLRU", "cmp_iYLRI", - "addicRRI", "addic.RRI", "addi|liRR0I", "addis|lisRR0I", - "b_KBJ", "sc", "bKJ", map_crops, - "rlwimiRR~AAA.", map_rlwinm, false, "rlwnmRR~RAA.", - "oriNRR~U", "orisRR~U", "xoriRR~U", "xorisRR~U", - "andi.RR~U", "andis.RR~U", map_rld, map_ext, - "lwzRRD", "lwzuRRD", "lbzRRD", "lbzuRRD", - "stwRRD", "stwuRRD", "stbRRD", "stbuRRD", - "lhzRRD", "lhzuRRD", "lhaRRD", "lhauRRD", - "sthRRD", "sthuRRD", "lmwRRD", "stmwRRD", - "lfsFRD", "lfsuFRD", "lfdFRD", "lfduFRD", - "stfsFRD", "stfsuFRD", "stfdFRD", "stfduFRD", - false, false, map_ld, map_fps, - false, false, map_std, map_fpd, -} - ------------------------------------------------------------------------------- - -local map_gpr = { - [0] = "r0", "sp", "r2", "r3", "r4", "r5", "r6", "r7", - "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", - "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", - "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", -} - -local map_cond = { [0] = "lt", "gt", "eq", "so", "ge", "le", "ne", "ns", } - --- Format a condition bit. -local function condfmt(cond) - if cond <= 3 then - return map_cond[band(cond, 3)] - else - return format("4*cr%d+%s", rshift(cond, 2), map_cond[band(cond, 3)]) - end -end - ------------------------------------------------------------------------------- - --- Output a nicely formatted line with an opcode and operands. -local function putop(ctx, text, operands) - local pos = ctx.pos - local extra = "" - if ctx.rel then - local sym = ctx.symtab[ctx.rel] - if sym then extra = "\t->"..sym end - end - if ctx.hexdump > 0 then - ctx.out(format("%08x %s %-7s %s%s\n", - ctx.addr+pos, tohex(ctx.op), text, concat(operands, ", "), extra)) - else - ctx.out(format("%08x %-7s %s%s\n", - ctx.addr+pos, text, concat(operands, ", "), extra)) - end - ctx.pos = pos + 4 -end - --- Fallback for unknown opcodes. -local function unknown(ctx) - return putop(ctx, ".long", { "0x"..tohex(ctx.op) }) -end - --- Disassemble a single instruction. -local function disass_ins(ctx) - local pos = ctx.pos - local b0, b1, b2, b3 = byte(ctx.code, pos+1, pos+4) - local op = bor(lshift(b0, 24), lshift(b1, 16), lshift(b2, 8), b3) - local operands = {} - local last = nil - local rs = 21 - ctx.op = op - ctx.rel = nil - - local opat = map_pri[rshift(b0, 2)] - while type(opat) ~= "string" do - if not opat then return unknown(ctx) end - opat = opat[band(rshift(op, opat.shift), opat.mask)] - end - local name, pat = match(opat, "^([a-z0-9_.]*)(.*)") - local altname, pat2 = match(pat, "|([a-z0-9_.]*)(.*)") - if altname then pat = pat2 end - - for p in gmatch(pat, ".") do - local x = nil - if p == "R" then - x = map_gpr[band(rshift(op, rs), 31)] - rs = rs - 5 - elseif p == "F" then - x = "f"..band(rshift(op, rs), 31) - rs = rs - 5 - elseif p == "A" then - x = band(rshift(op, rs), 31) - rs = rs - 5 - elseif p == "S" then - x = arshift(lshift(op, 27-rs), 27) - rs = rs - 5 - elseif p == "I" then - x = arshift(lshift(op, 16), 16) - elseif p == "U" then - x = band(op, 0xffff) - elseif p == "D" or p == "E" then - local disp = arshift(lshift(op, 16), 16) - if p == "E" then disp = band(disp, -4) end - if last == "r0" then last = "0" end - operands[#operands] = format("%d(%s)", disp, last) - elseif p >= "2" and p <= "8" then - local disp = band(rshift(op, rs), 31) * p - if last == "r0" then last = "0" end - operands[#operands] = format("%d(%s)", disp, last) - elseif p == "H" then - x = band(rshift(op, rs), 31) + lshift(band(op, 2), 4) - rs = rs - 5 - elseif p == "M" then - x = band(rshift(op, rs), 31) + band(op, 0x20) - elseif p == "C" then - x = condfmt(band(rshift(op, rs), 31)) - rs = rs - 5 - elseif p == "B" then - local bo = rshift(op, 21) - local cond = band(rshift(op, 16), 31) - local cn = "" - rs = rs - 10 - if band(bo, 4) == 0 then - cn = band(bo, 2) == 0 and "dnz" or "dz" - if band(bo, 0x10) == 0 then - cn = cn..(band(bo, 8) == 0 and "f" or "t") - end - if band(bo, 0x10) == 0 then x = condfmt(cond) end - name = name..(band(bo, 1) == band(rshift(op, 15), 1) and "-" or "+") - elseif band(bo, 0x10) == 0 then - cn = map_cond[band(cond, 3) + (band(bo, 8) == 0 and 4 or 0)] - if cond > 3 then x = "cr"..rshift(cond, 2) end - name = name..(band(bo, 1) == band(rshift(op, 15), 1) and "-" or "+") - end - name = gsub(name, "_", cn) - elseif p == "J" then - x = arshift(lshift(op, 27-rs), 29-rs)*4 - if band(op, 2) == 0 then x = ctx.addr + pos + x end - ctx.rel = x - x = "0x"..tohex(x) - elseif p == "K" then - if band(op, 1) ~= 0 then name = name.."l" end - if band(op, 2) ~= 0 then name = name.."a" end - elseif p == "X" or p == "Y" then - x = band(rshift(op, rs+2), 7) - if x == 0 and p == "Y" then x = nil else x = "cr"..x end - rs = rs - 5 - elseif p == "W" then - x = "cr"..band(op, 7) - elseif p == "Z" then - x = band(rshift(op, rs-4), 255) - rs = rs - 10 - elseif p == ">" then - operands[#operands] = rshift(operands[#operands], 1) - elseif p == "0" then - if last == "r0" then - operands[#operands] = nil - if altname then name = altname end - end - elseif p == "L" then - name = gsub(name, "_", band(op, 0x00200000) ~= 0 and "d" or "w") - elseif p == "." then - if band(op, 1) == 1 then name = name.."." end - elseif p == "N" then - if op == 0x60000000 then name = "nop"; break end - elseif p == "~" then - local n = #operands - operands[n-1], operands[n] = operands[n], operands[n-1] - elseif p == "=" then - local n = #operands - if last == operands[n-1] then - operands[n] = nil - name = altname - end - elseif p == "%" then - local n = #operands - if last == operands[n-1] and last == operands[n-2] then - operands[n] = nil - operands[n-1] = nil - name = altname - end - elseif p == "-" then - rs = rs - 5 - else - assert(false) - end - if x then operands[#operands+1] = x; last = x end - end - - return putop(ctx, name, operands) -end - ------------------------------------------------------------------------------- - --- Disassemble a block of code. -local function disass_block(ctx, ofs, len) - if not ofs then ofs = 0 end - local stop = len and ofs+len or #ctx.code - stop = stop - stop % 4 - ctx.pos = ofs - ofs % 4 - ctx.rel = nil - while ctx.pos < stop do disass_ins(ctx) end -end - --- Extended API: create a disassembler context. Then call ctx:disass(ofs, len). -local function create_(code, addr, out) - local ctx = {} - ctx.code = code - ctx.addr = addr or 0 - ctx.out = out or io.write - ctx.symtab = {} - ctx.disass = disass_block - ctx.hexdump = 8 - return ctx -end - --- Simple API: disassemble code (a string) at address and output via out. -local function disass_(code, addr, out) - create_(code, addr, out):disass() -end - --- Return register name for RID. -local function regname_(r) - if r < 32 then return map_gpr[r] end - return "f"..(r-32) -end - --- Public module functions. -module(...) - -create = create_ -disass = disass_ -regname = regname_ - diff --git a/deps/luajit/src/jit/dis_x64.lua b/deps/luajit/src/jit/dis_x64.lua deleted file mode 100644 index a80981b..0000000 --- a/deps/luajit/src/jit/dis_x64.lua +++ /dev/null @@ -1,20 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT x64 disassembler wrapper module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- This module just exports the 64 bit functions from the combined --- x86/x64 disassembler module. All the interesting stuff is there. ------------------------------------------------------------------------------- - -local require = require - -module(...) - -local dis_x86 = require(_PACKAGE.."dis_x86") - -create = dis_x86.create64 -disass = dis_x86.disass64 -regname = dis_x86.regname64 - diff --git a/deps/luajit/src/jit/dis_x86.lua b/deps/luajit/src/jit/dis_x86.lua deleted file mode 100644 index 078d609..0000000 --- a/deps/luajit/src/jit/dis_x86.lua +++ /dev/null @@ -1,836 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT x86/x64 disassembler module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- This is a helper module used by the LuaJIT machine code dumper module. --- --- Sending small code snippets to an external disassembler and mixing the --- output with our own stuff was too fragile. So I had to bite the bullet --- and write yet another x86 disassembler. Oh well ... --- --- The output format is very similar to what ndisasm generates. But it has --- been developed independently by looking at the opcode tables from the --- Intel and AMD manuals. The supported instruction set is quite extensive --- and reflects what a current generation Intel or AMD CPU implements in --- 32 bit and 64 bit mode. Yes, this includes MMX, SSE, SSE2, SSE3, SSSE3, --- SSE4.1, SSE4.2, SSE4a and even privileged and hypervisor (VMX/SVM) --- instructions. --- --- Notes: --- * The (useless) a16 prefix, 3DNow and pre-586 opcodes are unsupported. --- * No attempt at optimization has been made -- it's fast enough for my needs. --- * The public API may change when more architectures are added. ------------------------------------------------------------------------------- - -local type = type -local sub, byte, format = string.sub, string.byte, string.format -local match, gmatch, gsub = string.match, string.gmatch, string.gsub -local lower, rep = string.lower, string.rep - --- Map for 1st opcode byte in 32 bit mode. Ugly? Well ... read on. -local map_opc1_32 = { ---0x -[0]="addBmr","addVmr","addBrm","addVrm","addBai","addVai","push es","pop es", -"orBmr","orVmr","orBrm","orVrm","orBai","orVai","push cs","opc2*", ---1x -"adcBmr","adcVmr","adcBrm","adcVrm","adcBai","adcVai","push ss","pop ss", -"sbbBmr","sbbVmr","sbbBrm","sbbVrm","sbbBai","sbbVai","push ds","pop ds", ---2x -"andBmr","andVmr","andBrm","andVrm","andBai","andVai","es:seg","daa", -"subBmr","subVmr","subBrm","subVrm","subBai","subVai","cs:seg","das", ---3x -"xorBmr","xorVmr","xorBrm","xorVrm","xorBai","xorVai","ss:seg","aaa", -"cmpBmr","cmpVmr","cmpBrm","cmpVrm","cmpBai","cmpVai","ds:seg","aas", ---4x -"incVR","incVR","incVR","incVR","incVR","incVR","incVR","incVR", -"decVR","decVR","decVR","decVR","decVR","decVR","decVR","decVR", ---5x -"pushUR","pushUR","pushUR","pushUR","pushUR","pushUR","pushUR","pushUR", -"popUR","popUR","popUR","popUR","popUR","popUR","popUR","popUR", ---6x -"sz*pushaw,pusha","sz*popaw,popa","boundVrm","arplWmr", -"fs:seg","gs:seg","o16:","a16", -"pushUi","imulVrmi","pushBs","imulVrms", -"insb","insVS","outsb","outsVS", ---7x -"joBj","jnoBj","jbBj","jnbBj","jzBj","jnzBj","jbeBj","jaBj", -"jsBj","jnsBj","jpeBj","jpoBj","jlBj","jgeBj","jleBj","jgBj", ---8x -"arith!Bmi","arith!Vmi","arith!Bmi","arith!Vms", -"testBmr","testVmr","xchgBrm","xchgVrm", -"movBmr","movVmr","movBrm","movVrm", -"movVmg","leaVrm","movWgm","popUm", ---9x -"nop*xchgVaR|pause|xchgWaR|repne nop","xchgVaR","xchgVaR","xchgVaR", -"xchgVaR","xchgVaR","xchgVaR","xchgVaR", -"sz*cbw,cwde,cdqe","sz*cwd,cdq,cqo","call farViw","wait", -"sz*pushfw,pushf","sz*popfw,popf","sahf","lahf", ---Ax -"movBao","movVao","movBoa","movVoa", -"movsb","movsVS","cmpsb","cmpsVS", -"testBai","testVai","stosb","stosVS", -"lodsb","lodsVS","scasb","scasVS", ---Bx -"movBRi","movBRi","movBRi","movBRi","movBRi","movBRi","movBRi","movBRi", -"movVRI","movVRI","movVRI","movVRI","movVRI","movVRI","movVRI","movVRI", ---Cx -"shift!Bmu","shift!Vmu","retBw","ret","$lesVrm","$ldsVrm","movBmi","movVmi", -"enterBwu","leave","retfBw","retf","int3","intBu","into","iretVS", ---Dx -"shift!Bm1","shift!Vm1","shift!Bmc","shift!Vmc","aamBu","aadBu","salc","xlatb", -"fp*0","fp*1","fp*2","fp*3","fp*4","fp*5","fp*6","fp*7", ---Ex -"loopneBj","loopeBj","loopBj","sz*jcxzBj,jecxzBj,jrcxzBj", -"inBau","inVau","outBua","outVua", -"callVj","jmpVj","jmp farViw","jmpBj","inBad","inVad","outBda","outVda", ---Fx -"lock:","int1","repne:rep","rep:","hlt","cmc","testb!Bm","testv!Vm", -"clc","stc","cli","sti","cld","std","incb!Bm","incd!Vm", -} -assert(#map_opc1_32 == 255) - --- Map for 1st opcode byte in 64 bit mode (overrides only). -local map_opc1_64 = setmetatable({ - [0x06]=false, [0x07]=false, [0x0e]=false, - [0x16]=false, [0x17]=false, [0x1e]=false, [0x1f]=false, - [0x27]=false, [0x2f]=false, [0x37]=false, [0x3f]=false, - [0x60]=false, [0x61]=false, [0x62]=false, [0x63]="movsxdVrDmt", [0x67]="a32:", - [0x40]="rex*", [0x41]="rex*b", [0x42]="rex*x", [0x43]="rex*xb", - [0x44]="rex*r", [0x45]="rex*rb", [0x46]="rex*rx", [0x47]="rex*rxb", - [0x48]="rex*w", [0x49]="rex*wb", [0x4a]="rex*wx", [0x4b]="rex*wxb", - [0x4c]="rex*wr", [0x4d]="rex*wrb", [0x4e]="rex*wrx", [0x4f]="rex*wrxb", - [0x82]=false, [0x9a]=false, [0xc4]=false, [0xc5]=false, [0xce]=false, - [0xd4]=false, [0xd5]=false, [0xd6]=false, [0xea]=false, -}, { __index = map_opc1_32 }) - --- Map for 2nd opcode byte (0F xx). True CISC hell. Hey, I told you. --- Prefix dependent MMX/SSE opcodes: (none)|rep|o16|repne, -|F3|66|F2 -local map_opc2 = { ---0x -[0]="sldt!Dmp","sgdt!Ump","larVrm","lslVrm",nil,"syscall","clts","sysret", -"invd","wbinvd",nil,"ud1",nil,"$prefetch!Bm","femms","3dnowMrmu", ---1x -"movupsXrm|movssXrm|movupdXrm|movsdXrm", -"movupsXmr|movssXmr|movupdXmr|movsdXmr", -"movhlpsXrm$movlpsXrm|movsldupXrm|movlpdXrm|movddupXrm", -"movlpsXmr||movlpdXmr", -"unpcklpsXrm||unpcklpdXrm", -"unpckhpsXrm||unpckhpdXrm", -"movlhpsXrm$movhpsXrm|movshdupXrm|movhpdXrm", -"movhpsXmr||movhpdXmr", -"$prefetcht!Bm","hintnopVm","hintnopVm","hintnopVm", -"hintnopVm","hintnopVm","hintnopVm","hintnopVm", ---2x -"movUmx$","movUmy$","movUxm$","movUym$","movUmz$",nil,"movUzm$",nil, -"movapsXrm||movapdXrm", -"movapsXmr||movapdXmr", -"cvtpi2psXrMm|cvtsi2ssXrVmt|cvtpi2pdXrMm|cvtsi2sdXrVmt", -"movntpsXmr|movntssXmr|movntpdXmr|movntsdXmr", -"cvttps2piMrXm|cvttss2siVrXm|cvttpd2piMrXm|cvttsd2siVrXm", -"cvtps2piMrXm|cvtss2siVrXm|cvtpd2piMrXm|cvtsd2siVrXm", -"ucomissXrm||ucomisdXrm", -"comissXrm||comisdXrm", ---3x -"wrmsr","rdtsc","rdmsr","rdpmc","sysenter","sysexit",nil,"getsec", -"opc3*38",nil,"opc3*3a",nil,nil,nil,nil,nil, ---4x -"cmovoVrm","cmovnoVrm","cmovbVrm","cmovnbVrm", -"cmovzVrm","cmovnzVrm","cmovbeVrm","cmovaVrm", -"cmovsVrm","cmovnsVrm","cmovpeVrm","cmovpoVrm", -"cmovlVrm","cmovgeVrm","cmovleVrm","cmovgVrm", ---5x -"movmskpsVrXm$||movmskpdVrXm$","sqrtpsXrm|sqrtssXrm|sqrtpdXrm|sqrtsdXrm", -"rsqrtpsXrm|rsqrtssXrm","rcppsXrm|rcpssXrm", -"andpsXrm||andpdXrm","andnpsXrm||andnpdXrm", -"orpsXrm||orpdXrm","xorpsXrm||xorpdXrm", -"addpsXrm|addssXrm|addpdXrm|addsdXrm","mulpsXrm|mulssXrm|mulpdXrm|mulsdXrm", -"cvtps2pdXrm|cvtss2sdXrm|cvtpd2psXrm|cvtsd2ssXrm", -"cvtdq2psXrm|cvttps2dqXrm|cvtps2dqXrm", -"subpsXrm|subssXrm|subpdXrm|subsdXrm","minpsXrm|minssXrm|minpdXrm|minsdXrm", -"divpsXrm|divssXrm|divpdXrm|divsdXrm","maxpsXrm|maxssXrm|maxpdXrm|maxsdXrm", ---6x -"punpcklbwPrm","punpcklwdPrm","punpckldqPrm","packsswbPrm", -"pcmpgtbPrm","pcmpgtwPrm","pcmpgtdPrm","packuswbPrm", -"punpckhbwPrm","punpckhwdPrm","punpckhdqPrm","packssdwPrm", -"||punpcklqdqXrm","||punpckhqdqXrm", -"movPrVSm","movqMrm|movdquXrm|movdqaXrm", ---7x -"pshufwMrmu|pshufhwXrmu|pshufdXrmu|pshuflwXrmu","pshiftw!Pmu", -"pshiftd!Pmu","pshiftq!Mmu||pshiftdq!Xmu", -"pcmpeqbPrm","pcmpeqwPrm","pcmpeqdPrm","emms|", -"vmreadUmr||extrqXmuu$|insertqXrmuu$","vmwriteUrm||extrqXrm$|insertqXrm$", -nil,nil, -"||haddpdXrm|haddpsXrm","||hsubpdXrm|hsubpsXrm", -"movVSmMr|movqXrm|movVSmXr","movqMmr|movdquXmr|movdqaXmr", ---8x -"joVj","jnoVj","jbVj","jnbVj","jzVj","jnzVj","jbeVj","jaVj", -"jsVj","jnsVj","jpeVj","jpoVj","jlVj","jgeVj","jleVj","jgVj", ---9x -"setoBm","setnoBm","setbBm","setnbBm","setzBm","setnzBm","setbeBm","setaBm", -"setsBm","setnsBm","setpeBm","setpoBm","setlBm","setgeBm","setleBm","setgBm", ---Ax -"push fs","pop fs","cpuid","btVmr","shldVmru","shldVmrc",nil,nil, -"push gs","pop gs","rsm","btsVmr","shrdVmru","shrdVmrc","fxsave!Dmp","imulVrm", ---Bx -"cmpxchgBmr","cmpxchgVmr","$lssVrm","btrVmr", -"$lfsVrm","$lgsVrm","movzxVrBmt","movzxVrWmt", -"|popcntVrm","ud2Dp","bt!Vmu","btcVmr", -"bsfVrm","bsrVrm|lzcntVrm|bsrWrm","movsxVrBmt","movsxVrWmt", ---Cx -"xaddBmr","xaddVmr", -"cmppsXrmu|cmpssXrmu|cmppdXrmu|cmpsdXrmu","$movntiVmr|", -"pinsrwPrWmu","pextrwDrPmu", -"shufpsXrmu||shufpdXrmu","$cmpxchg!Qmp", -"bswapVR","bswapVR","bswapVR","bswapVR","bswapVR","bswapVR","bswapVR","bswapVR", ---Dx -"||addsubpdXrm|addsubpsXrm","psrlwPrm","psrldPrm","psrlqPrm", -"paddqPrm","pmullwPrm", -"|movq2dqXrMm|movqXmr|movdq2qMrXm$","pmovmskbVrMm||pmovmskbVrXm", -"psubusbPrm","psubuswPrm","pminubPrm","pandPrm", -"paddusbPrm","padduswPrm","pmaxubPrm","pandnPrm", ---Ex -"pavgbPrm","psrawPrm","psradPrm","pavgwPrm", -"pmulhuwPrm","pmulhwPrm", -"|cvtdq2pdXrm|cvttpd2dqXrm|cvtpd2dqXrm","$movntqMmr||$movntdqXmr", -"psubsbPrm","psubswPrm","pminswPrm","porPrm", -"paddsbPrm","paddswPrm","pmaxswPrm","pxorPrm", ---Fx -"|||lddquXrm","psllwPrm","pslldPrm","psllqPrm", -"pmuludqPrm","pmaddwdPrm","psadbwPrm","maskmovqMrm||maskmovdquXrm$", -"psubbPrm","psubwPrm","psubdPrm","psubqPrm", -"paddbPrm","paddwPrm","padddPrm","ud", -} -assert(map_opc2[255] == "ud") - --- Map for three-byte opcodes. Can't wait for their next invention. -local map_opc3 = { -["38"] = { -- [66] 0f 38 xx ---0x -[0]="pshufbPrm","phaddwPrm","phadddPrm","phaddswPrm", -"pmaddubswPrm","phsubwPrm","phsubdPrm","phsubswPrm", -"psignbPrm","psignwPrm","psigndPrm","pmulhrswPrm", -nil,nil,nil,nil, ---1x -"||pblendvbXrma",nil,nil,nil, -"||blendvpsXrma","||blendvpdXrma",nil,"||ptestXrm", -nil,nil,nil,nil, -"pabsbPrm","pabswPrm","pabsdPrm",nil, ---2x -"||pmovsxbwXrm","||pmovsxbdXrm","||pmovsxbqXrm","||pmovsxwdXrm", -"||pmovsxwqXrm","||pmovsxdqXrm",nil,nil, -"||pmuldqXrm","||pcmpeqqXrm","||$movntdqaXrm","||packusdwXrm", -nil,nil,nil,nil, ---3x -"||pmovzxbwXrm","||pmovzxbdXrm","||pmovzxbqXrm","||pmovzxwdXrm", -"||pmovzxwqXrm","||pmovzxdqXrm",nil,"||pcmpgtqXrm", -"||pminsbXrm","||pminsdXrm","||pminuwXrm","||pminudXrm", -"||pmaxsbXrm","||pmaxsdXrm","||pmaxuwXrm","||pmaxudXrm", ---4x -"||pmulddXrm","||phminposuwXrm", ---Fx -[0xf0] = "|||crc32TrBmt",[0xf1] = "|||crc32TrVmt", -}, - -["3a"] = { -- [66] 0f 3a xx ---0x -[0x00]=nil,nil,nil,nil,nil,nil,nil,nil, -"||roundpsXrmu","||roundpdXrmu","||roundssXrmu","||roundsdXrmu", -"||blendpsXrmu","||blendpdXrmu","||pblendwXrmu","palignrPrmu", ---1x -nil,nil,nil,nil, -"||pextrbVmXru","||pextrwVmXru","||pextrVmSXru","||extractpsVmXru", -nil,nil,nil,nil,nil,nil,nil,nil, ---2x -"||pinsrbXrVmu","||insertpsXrmu","||pinsrXrVmuS",nil, ---4x -[0x40] = "||dppsXrmu", -[0x41] = "||dppdXrmu", -[0x42] = "||mpsadbwXrmu", ---6x -[0x60] = "||pcmpestrmXrmu",[0x61] = "||pcmpestriXrmu", -[0x62] = "||pcmpistrmXrmu",[0x63] = "||pcmpistriXrmu", -}, -} - --- Map for VMX/SVM opcodes 0F 01 C0-FF (sgdt group with register operands). -local map_opcvm = { -[0xc1]="vmcall",[0xc2]="vmlaunch",[0xc3]="vmresume",[0xc4]="vmxoff", -[0xc8]="monitor",[0xc9]="mwait", -[0xd8]="vmrun",[0xd9]="vmmcall",[0xda]="vmload",[0xdb]="vmsave", -[0xdc]="stgi",[0xdd]="clgi",[0xde]="skinit",[0xdf]="invlpga", -[0xf8]="swapgs",[0xf9]="rdtscp", -} - --- Map for FP opcodes. And you thought stack machines are simple? -local map_opcfp = { --- D8-DF 00-BF: opcodes with a memory operand. --- D8 -[0]="faddFm","fmulFm","fcomFm","fcompFm","fsubFm","fsubrFm","fdivFm","fdivrFm", -"fldFm",nil,"fstFm","fstpFm","fldenvVm","fldcwWm","fnstenvVm","fnstcwWm", --- DA -"fiaddDm","fimulDm","ficomDm","ficompDm", -"fisubDm","fisubrDm","fidivDm","fidivrDm", --- DB -"fildDm","fisttpDm","fistDm","fistpDm",nil,"fld twordFmp",nil,"fstp twordFmp", --- DC -"faddGm","fmulGm","fcomGm","fcompGm","fsubGm","fsubrGm","fdivGm","fdivrGm", --- DD -"fldGm","fisttpQm","fstGm","fstpGm","frstorDmp",nil,"fnsaveDmp","fnstswWm", --- DE -"fiaddWm","fimulWm","ficomWm","ficompWm", -"fisubWm","fisubrWm","fidivWm","fidivrWm", --- DF -"fildWm","fisttpWm","fistWm","fistpWm", -"fbld twordFmp","fildQm","fbstp twordFmp","fistpQm", --- xx C0-FF: opcodes with a pseudo-register operand. --- D8 -"faddFf","fmulFf","fcomFf","fcompFf","fsubFf","fsubrFf","fdivFf","fdivrFf", --- D9 -"fldFf","fxchFf",{"fnop"},nil, -{"fchs","fabs",nil,nil,"ftst","fxam"}, -{"fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz"}, -{"f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp"}, -{"fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos"}, --- DA -"fcmovbFf","fcmoveFf","fcmovbeFf","fcmovuFf",nil,{nil,"fucompp"},nil,nil, --- DB -"fcmovnbFf","fcmovneFf","fcmovnbeFf","fcmovnuFf", -{nil,nil,"fnclex","fninit"},"fucomiFf","fcomiFf",nil, --- DC -"fadd toFf","fmul toFf",nil,nil, -"fsub toFf","fsubr toFf","fdivr toFf","fdiv toFf", --- DD -"ffreeFf",nil,"fstFf","fstpFf","fucomFf","fucompFf",nil,nil, --- DE -"faddpFf","fmulpFf",nil,{nil,"fcompp"}, -"fsubrpFf","fsubpFf","fdivrpFf","fdivpFf", --- DF -nil,nil,nil,nil,{"fnstsw ax"},"fucomipFf","fcomipFf",nil, -} -assert(map_opcfp[126] == "fcomipFf") - --- Map for opcode groups. The subkey is sp from the ModRM byte. -local map_opcgroup = { - arith = { "add", "or", "adc", "sbb", "and", "sub", "xor", "cmp" }, - shift = { "rol", "ror", "rcl", "rcr", "shl", "shr", "sal", "sar" }, - testb = { "testBmi", "testBmi", "not", "neg", "mul", "imul", "div", "idiv" }, - testv = { "testVmi", "testVmi", "not", "neg", "mul", "imul", "div", "idiv" }, - incb = { "inc", "dec" }, - incd = { "inc", "dec", "callUmp", "$call farDmp", - "jmpUmp", "$jmp farDmp", "pushUm" }, - sldt = { "sldt", "str", "lldt", "ltr", "verr", "verw" }, - sgdt = { "vm*$sgdt", "vm*$sidt", "$lgdt", "vm*$lidt", - "smsw", nil, "lmsw", "vm*$invlpg" }, - bt = { nil, nil, nil, nil, "bt", "bts", "btr", "btc" }, - cmpxchg = { nil, "sz*,cmpxchg8bQmp,cmpxchg16bXmp", nil, nil, - nil, nil, "vmptrld|vmxon|vmclear", "vmptrst" }, - pshiftw = { nil, nil, "psrlw", nil, "psraw", nil, "psllw" }, - pshiftd = { nil, nil, "psrld", nil, "psrad", nil, "pslld" }, - pshiftq = { nil, nil, "psrlq", nil, nil, nil, "psllq" }, - pshiftdq = { nil, nil, "psrlq", "psrldq", nil, nil, "psllq", "pslldq" }, - fxsave = { "$fxsave", "$fxrstor", "$ldmxcsr", "$stmxcsr", - nil, "lfenceDp$", "mfenceDp$", "sfenceDp$clflush" }, - prefetch = { "prefetch", "prefetchw" }, - prefetcht = { "prefetchnta", "prefetcht0", "prefetcht1", "prefetcht2" }, -} - ------------------------------------------------------------------------------- - --- Maps for register names. -local map_regs = { - B = { "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh", - "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" }, - B64 = { "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", - "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" }, - W = { "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", - "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" }, - D = { "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", - "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" }, - Q = { "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", - "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" }, - M = { "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7", - "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" }, -- No x64 ext! - X = { "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", - "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15" }, -} -local map_segregs = { "es", "cs", "ss", "ds", "fs", "gs", "segr6", "segr7" } - --- Maps for size names. -local map_sz2n = { - B = 1, W = 2, D = 4, Q = 8, M = 8, X = 16, -} -local map_sz2prefix = { - B = "byte", W = "word", D = "dword", - Q = "qword", - M = "qword", X = "xword", - F = "dword", G = "qword", -- No need for sizes/register names for these two. -} - ------------------------------------------------------------------------------- - --- Output a nicely formatted line with an opcode and operands. -local function putop(ctx, text, operands) - local code, pos, hex = ctx.code, ctx.pos, "" - local hmax = ctx.hexdump - if hmax > 0 then - for i=ctx.start,pos-1 do - hex = hex..format("%02X", byte(code, i, i)) - end - if #hex > hmax then hex = sub(hex, 1, hmax)..". " - else hex = hex..rep(" ", hmax-#hex+2) end - end - if operands then text = text.." "..operands end - if ctx.o16 then text = "o16 "..text; ctx.o16 = false end - if ctx.a32 then text = "a32 "..text; ctx.a32 = false end - if ctx.rep then text = ctx.rep.." "..text; ctx.rep = false end - if ctx.rex then - local t = (ctx.rexw and "w" or "")..(ctx.rexr and "r" or "").. - (ctx.rexx and "x" or "")..(ctx.rexb and "b" or "") - if t ~= "" then text = "rex."..t.." "..text end - ctx.rexw = false; ctx.rexr = false; ctx.rexx = false; ctx.rexb = false - ctx.rex = false - end - if ctx.seg then - local text2, n = gsub(text, "%[", "["..ctx.seg..":") - if n == 0 then text = ctx.seg.." "..text else text = text2 end - ctx.seg = false - end - if ctx.lock then text = "lock "..text; ctx.lock = false end - local imm = ctx.imm - if imm then - local sym = ctx.symtab[imm] - if sym then text = text.."\t->"..sym end - end - ctx.out(format("%08x %s%s\n", ctx.addr+ctx.start, hex, text)) - ctx.mrm = false - ctx.start = pos - ctx.imm = nil -end - --- Clear all prefix flags. -local function clearprefixes(ctx) - ctx.o16 = false; ctx.seg = false; ctx.lock = false; ctx.rep = false - ctx.rexw = false; ctx.rexr = false; ctx.rexx = false; ctx.rexb = false - ctx.rex = false; ctx.a32 = false -end - --- Fallback for incomplete opcodes at the end. -local function incomplete(ctx) - ctx.pos = ctx.stop+1 - clearprefixes(ctx) - return putop(ctx, "(incomplete)") -end - --- Fallback for unknown opcodes. -local function unknown(ctx) - clearprefixes(ctx) - return putop(ctx, "(unknown)") -end - --- Return an immediate of the specified size. -local function getimm(ctx, pos, n) - if pos+n-1 > ctx.stop then return incomplete(ctx) end - local code = ctx.code - if n == 1 then - local b1 = byte(code, pos, pos) - return b1 - elseif n == 2 then - local b1, b2 = byte(code, pos, pos+1) - return b1+b2*256 - else - local b1, b2, b3, b4 = byte(code, pos, pos+3) - local imm = b1+b2*256+b3*65536+b4*16777216 - ctx.imm = imm - return imm - end -end - --- Process pattern string and generate the operands. -local function putpat(ctx, name, pat) - local operands, regs, sz, mode, sp, rm, sc, rx, sdisp - local code, pos, stop = ctx.code, ctx.pos, ctx.stop - - -- Chars used: 1DFGIMPQRSTUVWXacdfgijmoprstuwxyz - for p in gmatch(pat, ".") do - local x = nil - if p == "V" or p == "U" then - if ctx.rexw then sz = "Q"; ctx.rexw = false - elseif ctx.o16 then sz = "W"; ctx.o16 = false - elseif p == "U" and ctx.x64 then sz = "Q" - else sz = "D" end - regs = map_regs[sz] - elseif p == "T" then - if ctx.rexw then sz = "Q"; ctx.rexw = false else sz = "D" end - regs = map_regs[sz] - elseif p == "B" then - sz = "B" - regs = ctx.rex and map_regs.B64 or map_regs.B - elseif match(p, "[WDQMXFG]") then - sz = p - regs = map_regs[sz] - elseif p == "P" then - sz = ctx.o16 and "X" or "M"; ctx.o16 = false - regs = map_regs[sz] - elseif p == "S" then - name = name..lower(sz) - elseif p == "s" then - local imm = getimm(ctx, pos, 1); if not imm then return end - x = imm <= 127 and format("+0x%02x", imm) - or format("-0x%02x", 256-imm) - pos = pos+1 - elseif p == "u" then - local imm = getimm(ctx, pos, 1); if not imm then return end - x = format("0x%02x", imm) - pos = pos+1 - elseif p == "w" then - local imm = getimm(ctx, pos, 2); if not imm then return end - x = format("0x%x", imm) - pos = pos+2 - elseif p == "o" then -- [offset] - if ctx.x64 then - local imm1 = getimm(ctx, pos, 4); if not imm1 then return end - local imm2 = getimm(ctx, pos+4, 4); if not imm2 then return end - x = format("[0x%08x%08x]", imm2, imm1) - pos = pos+8 - else - local imm = getimm(ctx, pos, 4); if not imm then return end - x = format("[0x%08x]", imm) - pos = pos+4 - end - elseif p == "i" or p == "I" then - local n = map_sz2n[sz] - if n == 8 and ctx.x64 and p == "I" then - local imm1 = getimm(ctx, pos, 4); if not imm1 then return end - local imm2 = getimm(ctx, pos+4, 4); if not imm2 then return end - x = format("0x%08x%08x", imm2, imm1) - else - if n == 8 then n = 4 end - local imm = getimm(ctx, pos, n); if not imm then return end - if sz == "Q" and (imm < 0 or imm > 0x7fffffff) then - imm = (0xffffffff+1)-imm - x = format(imm > 65535 and "-0x%08x" or "-0x%x", imm) - else - x = format(imm > 65535 and "0x%08x" or "0x%x", imm) - end - end - pos = pos+n - elseif p == "j" then - local n = map_sz2n[sz] - if n == 8 then n = 4 end - local imm = getimm(ctx, pos, n); if not imm then return end - if sz == "B" and imm > 127 then imm = imm-256 - elseif imm > 2147483647 then imm = imm-4294967296 end - pos = pos+n - imm = imm + pos + ctx.addr - if imm > 4294967295 and not ctx.x64 then imm = imm-4294967296 end - ctx.imm = imm - if sz == "W" then - x = format("word 0x%04x", imm%65536) - elseif ctx.x64 then - local lo = imm % 0x1000000 - x = format("0x%02x%06x", (imm-lo) / 0x1000000, lo) - else - x = format("0x%08x", imm) - end - elseif p == "R" then - local r = byte(code, pos-1, pos-1)%8 - if ctx.rexb then r = r + 8; ctx.rexb = false end - x = regs[r+1] - elseif p == "a" then x = regs[1] - elseif p == "c" then x = "cl" - elseif p == "d" then x = "dx" - elseif p == "1" then x = "1" - else - if not mode then - mode = ctx.mrm - if not mode then - if pos > stop then return incomplete(ctx) end - mode = byte(code, pos, pos) - pos = pos+1 - end - rm = mode%8; mode = (mode-rm)/8 - sp = mode%8; mode = (mode-sp)/8 - sdisp = "" - if mode < 3 then - if rm == 4 then - if pos > stop then return incomplete(ctx) end - sc = byte(code, pos, pos) - pos = pos+1 - rm = sc%8; sc = (sc-rm)/8 - rx = sc%8; sc = (sc-rx)/8 - if ctx.rexx then rx = rx + 8; ctx.rexx = false end - if rx == 4 then rx = nil end - end - if mode > 0 or rm == 5 then - local dsz = mode - if dsz ~= 1 then dsz = 4 end - local disp = getimm(ctx, pos, dsz); if not disp then return end - if mode == 0 then rm = nil end - if rm or rx or (not sc and ctx.x64 and not ctx.a32) then - if dsz == 1 and disp > 127 then - sdisp = format("-0x%x", 256-disp) - elseif disp >= 0 and disp <= 0x7fffffff then - sdisp = format("+0x%x", disp) - else - sdisp = format("-0x%x", (0xffffffff+1)-disp) - end - else - sdisp = format(ctx.x64 and not ctx.a32 and - not (disp >= 0 and disp <= 0x7fffffff) - and "0xffffffff%08x" or "0x%08x", disp) - end - pos = pos+dsz - end - end - if rm and ctx.rexb then rm = rm + 8; ctx.rexb = false end - if ctx.rexr then sp = sp + 8; ctx.rexr = false end - end - if p == "m" then - if mode == 3 then x = regs[rm+1] - else - local aregs = ctx.a32 and map_regs.D or ctx.aregs - local srm, srx = "", "" - if rm then srm = aregs[rm+1] - elseif not sc and ctx.x64 and not ctx.a32 then srm = "rip" end - ctx.a32 = false - if rx then - if rm then srm = srm.."+" end - srx = aregs[rx+1] - if sc > 0 then srx = srx.."*"..(2^sc) end - end - x = format("[%s%s%s]", srm, srx, sdisp) - end - if mode < 3 and - (not match(pat, "[aRrgp]") or match(pat, "t")) then -- Yuck. - x = map_sz2prefix[sz].." "..x - end - elseif p == "r" then x = regs[sp+1] - elseif p == "g" then x = map_segregs[sp+1] - elseif p == "p" then -- Suppress prefix. - elseif p == "f" then x = "st"..rm - elseif p == "x" then - if sp == 0 and ctx.lock and not ctx.x64 then - x = "CR8"; ctx.lock = false - else - x = "CR"..sp - end - elseif p == "y" then x = "DR"..sp - elseif p == "z" then x = "TR"..sp - elseif p == "t" then - else - error("bad pattern `"..pat.."'") - end - end - if x then operands = operands and operands..", "..x or x end - end - ctx.pos = pos - return putop(ctx, name, operands) -end - --- Forward declaration. -local map_act - --- Fetch and cache MRM byte. -local function getmrm(ctx) - local mrm = ctx.mrm - if not mrm then - local pos = ctx.pos - if pos > ctx.stop then return nil end - mrm = byte(ctx.code, pos, pos) - ctx.pos = pos+1 - ctx.mrm = mrm - end - return mrm -end - --- Dispatch to handler depending on pattern. -local function dispatch(ctx, opat, patgrp) - if not opat then return unknown(ctx) end - if match(opat, "%|") then -- MMX/SSE variants depending on prefix. - local p - if ctx.rep then - p = ctx.rep=="rep" and "%|([^%|]*)" or "%|[^%|]*%|[^%|]*%|([^%|]*)" - ctx.rep = false - elseif ctx.o16 then p = "%|[^%|]*%|([^%|]*)"; ctx.o16 = false - else p = "^[^%|]*" end - opat = match(opat, p) - if not opat then return unknown(ctx) end --- ctx.rep = false; ctx.o16 = false - --XXX fails for 66 f2 0f 38 f1 06 crc32 eax,WORD PTR [esi] - --XXX remove in branches? - end - if match(opat, "%$") then -- reg$mem variants. - local mrm = getmrm(ctx); if not mrm then return incomplete(ctx) end - opat = match(opat, mrm >= 192 and "^[^%$]*" or "%$(.*)") - if opat == "" then return unknown(ctx) end - end - if opat == "" then return unknown(ctx) end - local name, pat = match(opat, "^([a-z0-9 ]*)(.*)") - if pat == "" and patgrp then pat = patgrp end - return map_act[sub(pat, 1, 1)](ctx, name, pat) -end - --- Get a pattern from an opcode map and dispatch to handler. -local function dispatchmap(ctx, opcmap) - local pos = ctx.pos - local opat = opcmap[byte(ctx.code, pos, pos)] - pos = pos + 1 - ctx.pos = pos - return dispatch(ctx, opat) -end - --- Map for action codes. The key is the first char after the name. -map_act = { - -- Simple opcodes without operands. - [""] = function(ctx, name, pat) - return putop(ctx, name) - end, - - -- Operand size chars fall right through. - B = putpat, W = putpat, D = putpat, Q = putpat, - V = putpat, U = putpat, T = putpat, - M = putpat, X = putpat, P = putpat, - F = putpat, G = putpat, - - -- Collect prefixes. - [":"] = function(ctx, name, pat) - ctx[pat == ":" and name or sub(pat, 2)] = name - if ctx.pos - ctx.start > 5 then return unknown(ctx) end -- Limit #prefixes. - end, - - -- Chain to special handler specified by name. - ["*"] = function(ctx, name, pat) - return map_act[name](ctx, name, sub(pat, 2)) - end, - - -- Use named subtable for opcode group. - ["!"] = function(ctx, name, pat) - local mrm = getmrm(ctx); if not mrm then return incomplete(ctx) end - return dispatch(ctx, map_opcgroup[name][((mrm-(mrm%8))/8)%8+1], sub(pat, 2)) - end, - - -- o16,o32[,o64] variants. - sz = function(ctx, name, pat) - if ctx.o16 then ctx.o16 = false - else - pat = match(pat, ",(.*)") - if ctx.rexw then - local p = match(pat, ",(.*)") - if p then pat = p; ctx.rexw = false end - end - end - pat = match(pat, "^[^,]*") - return dispatch(ctx, pat) - end, - - -- Two-byte opcode dispatch. - opc2 = function(ctx, name, pat) - return dispatchmap(ctx, map_opc2) - end, - - -- Three-byte opcode dispatch. - opc3 = function(ctx, name, pat) - return dispatchmap(ctx, map_opc3[pat]) - end, - - -- VMX/SVM dispatch. - vm = function(ctx, name, pat) - return dispatch(ctx, map_opcvm[ctx.mrm]) - end, - - -- Floating point opcode dispatch. - fp = function(ctx, name, pat) - local mrm = getmrm(ctx); if not mrm then return incomplete(ctx) end - local rm = mrm%8 - local idx = pat*8 + ((mrm-rm)/8)%8 - if mrm >= 192 then idx = idx + 64 end - local opat = map_opcfp[idx] - if type(opat) == "table" then opat = opat[rm+1] end - return dispatch(ctx, opat) - end, - - -- REX prefix. - rex = function(ctx, name, pat) - if ctx.rex then return unknown(ctx) end -- Only 1 REX prefix allowed. - for p in gmatch(pat, ".") do ctx["rex"..p] = true end - ctx.rex = true - end, - - -- Special case for nop with REX prefix. - nop = function(ctx, name, pat) - return dispatch(ctx, ctx.rex and pat or "nop") - end, -} - ------------------------------------------------------------------------------- - --- Disassemble a block of code. -local function disass_block(ctx, ofs, len) - if not ofs then ofs = 0 end - local stop = len and ofs+len or #ctx.code - ofs = ofs + 1 - ctx.start = ofs - ctx.pos = ofs - ctx.stop = stop - ctx.imm = nil - ctx.mrm = false - clearprefixes(ctx) - while ctx.pos <= stop do dispatchmap(ctx, ctx.map1) end - if ctx.pos ~= ctx.start then incomplete(ctx) end -end - --- Extended API: create a disassembler context. Then call ctx:disass(ofs, len). -local function create_(code, addr, out) - local ctx = {} - ctx.code = code - ctx.addr = (addr or 0) - 1 - ctx.out = out or io.write - ctx.symtab = {} - ctx.disass = disass_block - ctx.hexdump = 16 - ctx.x64 = false - ctx.map1 = map_opc1_32 - ctx.aregs = map_regs.D - return ctx -end - -local function create64_(code, addr, out) - local ctx = create_(code, addr, out) - ctx.x64 = true - ctx.map1 = map_opc1_64 - ctx.aregs = map_regs.Q - return ctx -end - --- Simple API: disassemble code (a string) at address and output via out. -local function disass_(code, addr, out) - create_(code, addr, out):disass() -end - -local function disass64_(code, addr, out) - create64_(code, addr, out):disass() -end - --- Return register name for RID. -local function regname_(r) - if r < 8 then return map_regs.D[r+1] end - return map_regs.X[r-7] -end - -local function regname64_(r) - if r < 16 then return map_regs.Q[r+1] end - return map_regs.X[r-15] -end - --- Public module functions. -module(...) - -create = create_ -create64 = create64_ -disass = disass_ -disass64 = disass64_ -regname = regname_ -regname64 = regname64_ - diff --git a/deps/luajit/src/jit/dump.lua b/deps/luajit/src/jit/dump.lua deleted file mode 100644 index d15c528..0000000 --- a/deps/luajit/src/jit/dump.lua +++ /dev/null @@ -1,699 +0,0 @@ ----------------------------------------------------------------------------- --- LuaJIT compiler dump module. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- --- This module can be used to debug the JIT compiler itself. It dumps the --- code representations and structures used in various compiler stages. --- --- Example usage: --- --- luajit -jdump -e "local x=0; for i=1,1e6 do x=x+i end; print(x)" --- luajit -jdump=im -e "for i=1,1000 do for j=1,1000 do end end" | less -R --- luajit -jdump=is myapp.lua | less -R --- luajit -jdump=-b myapp.lua --- luajit -jdump=+aH,myapp.html myapp.lua --- luajit -jdump=ixT,myapp.dump myapp.lua --- --- The first argument specifies the dump mode. The second argument gives --- the output file name. Default output is to stdout, unless the environment --- variable LUAJIT_DUMPFILE is set. The file is overwritten every time the --- module is started. --- --- Different features can be turned on or off with the dump mode. If the --- mode starts with a '+', the following features are added to the default --- set of features; a '-' removes them. Otherwise the features are replaced. --- --- The following dump features are available (* marks the default): --- --- * t Print a line for each started, ended or aborted trace (see also -jv). --- * b Dump the traced bytecode. --- * i Dump the IR (intermediate representation). --- r Augment the IR with register/stack slots. --- s Dump the snapshot map. --- * m Dump the generated machine code. --- x Print each taken trace exit. --- X Print each taken trace exit and the contents of all registers. --- a Print the IR of aborted traces, too. --- --- The output format can be set with the following characters: --- --- T Plain text output. --- A ANSI-colored text output --- H Colorized HTML + CSS output. --- --- The default output format is plain text. It's set to ANSI-colored text --- if the COLORTERM variable is set. Note: this is independent of any output --- redirection, which is actually considered a feature. --- --- You probably want to use less -R to enjoy viewing ANSI-colored text from --- a pipe or a file. Add this to your ~/.bashrc: export LESS="-R" --- ------------------------------------------------------------------------------- - --- Cache some library functions and objects. -local jit = require("jit") -assert(jit.version_num == 20004, "LuaJIT core/library version mismatch") -local jutil = require("jit.util") -local vmdef = require("jit.vmdef") -local funcinfo, funcbc = jutil.funcinfo, jutil.funcbc -local traceinfo, traceir, tracek = jutil.traceinfo, jutil.traceir, jutil.tracek -local tracemc, tracesnap = jutil.tracemc, jutil.tracesnap -local traceexitstub, ircalladdr = jutil.traceexitstub, jutil.ircalladdr -local bit = require("bit") -local band, shl, shr = bit.band, bit.lshift, bit.rshift -local sub, gsub, format = string.sub, string.gsub, string.format -local byte, char, rep = string.byte, string.char, string.rep -local type, tostring = type, tostring -local stdout, stderr = io.stdout, io.stderr - --- Load other modules on-demand. -local bcline, disass - --- Active flag, output file handle and dump mode. -local active, out, dumpmode - ------------------------------------------------------------------------------- - -local symtabmt = { __index = false } -local symtab = {} -local nexitsym = 0 - --- Fill nested symbol table with per-trace exit stub addresses. -local function fillsymtab_tr(tr, nexit) - local t = {} - symtabmt.__index = t - if jit.arch == "mips" or jit.arch == "mipsel" then - t[traceexitstub(tr, 0)] = "exit" - return - end - for i=0,nexit-1 do - local addr = traceexitstub(tr, i) - t[addr] = tostring(i) - end - local addr = traceexitstub(tr, nexit) - if addr then t[addr] = "stack_check" end -end - --- Fill symbol table with trace exit stub addresses. -local function fillsymtab(tr, nexit) - local t = symtab - if nexitsym == 0 then - local ircall = vmdef.ircall - for i=0,#ircall do - local addr = ircalladdr(i) - if addr ~= 0 then t[addr] = ircall[i] end - end - end - if nexitsym == 1000000 then -- Per-trace exit stubs. - fillsymtab_tr(tr, nexit) - elseif nexit > nexitsym then -- Shared exit stubs. - for i=nexitsym,nexit-1 do - local addr = traceexitstub(i) - if addr == nil then -- Fall back to per-trace exit stubs. - fillsymtab_tr(tr, nexit) - setmetatable(symtab, symtabmt) - nexit = 1000000 - break - end - t[addr] = tostring(i) - end - nexitsym = nexit - end - return t -end - -local function dumpwrite(s) - out:write(s) -end - --- Disassemble machine code. -local function dump_mcode(tr) - local info = traceinfo(tr) - if not info then return end - local mcode, addr, loop = tracemc(tr) - if not mcode then return end - if not disass then disass = require("jit.dis_"..jit.arch) end - out:write("---- TRACE ", tr, " mcode ", #mcode, "\n") - local ctx = disass.create(mcode, addr, dumpwrite) - ctx.hexdump = 0 - ctx.symtab = fillsymtab(tr, info.nexit) - if loop ~= 0 then - symtab[addr+loop] = "LOOP" - ctx:disass(0, loop) - out:write("->LOOP:\n") - ctx:disass(loop, #mcode-loop) - symtab[addr+loop] = nil - else - ctx:disass(0, #mcode) - end -end - ------------------------------------------------------------------------------- - -local irtype_text = { - [0] = "nil", - "fal", - "tru", - "lud", - "str", - "p32", - "thr", - "pro", - "fun", - "p64", - "cdt", - "tab", - "udt", - "flt", - "num", - "i8 ", - "u8 ", - "i16", - "u16", - "int", - "u32", - "i64", - "u64", - "sfp", -} - -local colortype_ansi = { - [0] = "%s", - "%s", - "%s", - "\027[36m%s\027[m", - "\027[32m%s\027[m", - "%s", - "\027[1m%s\027[m", - "%s", - "\027[1m%s\027[m", - "%s", - "\027[33m%s\027[m", - "\027[31m%s\027[m", - "\027[36m%s\027[m", - "\027[34m%s\027[m", - "\027[34m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", - "\027[35m%s\027[m", -} - -local function colorize_text(s, t) - return s -end - -local function colorize_ansi(s, t) - return format(colortype_ansi[t], s) -end - -local irtype_ansi = setmetatable({}, - { __index = function(tab, t) - local s = colorize_ansi(irtype_text[t], t); tab[t] = s; return s; end }) - -local html_escape = { ["<"] = "<", [">"] = ">", ["&"] = "&", } - -local function colorize_html(s, t) - s = gsub(s, "[<>&]", html_escape) - return format('%s', irtype_text[t], s) -end - -local irtype_html = setmetatable({}, - { __index = function(tab, t) - local s = colorize_html(irtype_text[t], t); tab[t] = s; return s; end }) - -local header_html = [[ - -]] - -local colorize, irtype - --- Lookup tables to convert some literals into names. -local litname = { - ["SLOAD "] = setmetatable({}, { __index = function(t, mode) - local s = "" - if band(mode, 1) ~= 0 then s = s.."P" end - if band(mode, 2) ~= 0 then s = s.."F" end - if band(mode, 4) ~= 0 then s = s.."T" end - if band(mode, 8) ~= 0 then s = s.."C" end - if band(mode, 16) ~= 0 then s = s.."R" end - if band(mode, 32) ~= 0 then s = s.."I" end - t[mode] = s - return s - end}), - ["XLOAD "] = { [0] = "", "R", "V", "RV", "U", "RU", "VU", "RVU", }, - ["CONV "] = setmetatable({}, { __index = function(t, mode) - local s = irtype[band(mode, 31)] - s = irtype[band(shr(mode, 5), 31)].."."..s - if band(mode, 0x400) ~= 0 then s = s.." trunc" - elseif band(mode, 0x800) ~= 0 then s = s.." sext" end - local c = shr(mode, 14) - if c == 2 then s = s.." index" elseif c == 3 then s = s.." check" end - t[mode] = s - return s - end}), - ["FLOAD "] = vmdef.irfield, - ["FREF "] = vmdef.irfield, - ["FPMATH"] = vmdef.irfpm, -} - -local function ctlsub(c) - if c == "\n" then return "\\n" - elseif c == "\r" then return "\\r" - elseif c == "\t" then return "\\t" - else return format("\\%03d", byte(c)) - end -end - -local function fmtfunc(func, pc) - local fi = funcinfo(func, pc) - if fi.loc then - return fi.loc - elseif fi.ffid then - return vmdef.ffnames[fi.ffid] - elseif fi.addr then - return format("C:%x", fi.addr) - else - return "(?)" - end -end - -local function formatk(tr, idx) - local k, t, slot = tracek(tr, idx) - local tn = type(k) - local s - if tn == "number" then - if k == 2^52+2^51 then - s = "bias" - else - s = format("%+.14g", k) - end - elseif tn == "string" then - s = format(#k > 20 and '"%.20s"~' or '"%s"', gsub(k, "%c", ctlsub)) - elseif tn == "function" then - s = fmtfunc(k) - elseif tn == "table" then - s = format("{%p}", k) - elseif tn == "userdata" then - if t == 12 then - s = format("userdata:%p", k) - else - s = format("[%p]", k) - if s == "[0x00000000]" then s = "NULL" end - end - elseif t == 21 then -- int64_t - s = sub(tostring(k), 1, -3) - if sub(s, 1, 1) ~= "-" then s = "+"..s end - else - s = tostring(k) -- For primitives. - end - s = colorize(format("%-4s", s), t) - if slot then - s = format("%s @%d", s, slot) - end - return s -end - -local function printsnap(tr, snap) - local n = 2 - for s=0,snap[1]-1 do - local sn = snap[n] - if shr(sn, 24) == s then - n = n + 1 - local ref = band(sn, 0xffff) - 0x8000 -- REF_BIAS - if ref < 0 then - out:write(formatk(tr, ref)) - elseif band(sn, 0x80000) ~= 0 then -- SNAP_SOFTFPNUM - out:write(colorize(format("%04d/%04d", ref, ref+1), 14)) - else - local m, ot, op1, op2 = traceir(tr, ref) - out:write(colorize(format("%04d", ref), band(ot, 31))) - end - out:write(band(sn, 0x10000) == 0 and " " or "|") -- SNAP_FRAME - else - out:write("---- ") - end - end - out:write("]\n") -end - --- Dump snapshots (not interleaved with IR). -local function dump_snap(tr) - out:write("---- TRACE ", tr, " snapshots\n") - for i=0,1000000000 do - local snap = tracesnap(tr, i) - if not snap then break end - out:write(format("#%-3d %04d [ ", i, snap[0])) - printsnap(tr, snap) - end -end - --- Return a register name or stack slot for a rid/sp location. -local function ridsp_name(ridsp, ins) - if not disass then disass = require("jit.dis_"..jit.arch) end - local rid, slot = band(ridsp, 0xff), shr(ridsp, 8) - if rid == 253 or rid == 254 then - return (slot == 0 or slot == 255) and " {sink" or format(" {%04d", ins-slot) - end - if ridsp > 255 then return format("[%x]", slot*4) end - if rid < 128 then return disass.regname(rid) end - return "" -end - --- Dump CALL* function ref and return optional ctype. -local function dumpcallfunc(tr, ins) - local ctype - if ins > 0 then - local m, ot, op1, op2 = traceir(tr, ins) - if band(ot, 31) == 0 then -- nil type means CARG(func, ctype). - ins = op1 - ctype = formatk(tr, op2) - end - end - if ins < 0 then - out:write(format("[0x%x](", tonumber((tracek(tr, ins))))) - else - out:write(format("%04d (", ins)) - end - return ctype -end - --- Recursively gather CALL* args and dump them. -local function dumpcallargs(tr, ins) - if ins < 0 then - out:write(formatk(tr, ins)) - else - local m, ot, op1, op2 = traceir(tr, ins) - local oidx = 6*shr(ot, 8) - local op = sub(vmdef.irnames, oidx+1, oidx+6) - if op == "CARG " then - dumpcallargs(tr, op1) - if op2 < 0 then - out:write(" ", formatk(tr, op2)) - else - out:write(" ", format("%04d", op2)) - end - else - out:write(format("%04d", ins)) - end - end -end - --- Dump IR and interleaved snapshots. -local function dump_ir(tr, dumpsnap, dumpreg) - local info = traceinfo(tr) - if not info then return end - local nins = info.nins - out:write("---- TRACE ", tr, " IR\n") - local irnames = vmdef.irnames - local snapref = 65536 - local snap, snapno - if dumpsnap then - snap = tracesnap(tr, 0) - snapref = snap[0] - snapno = 0 - end - for ins=1,nins do - if ins >= snapref then - if dumpreg then - out:write(format(".... SNAP #%-3d [ ", snapno)) - else - out:write(format(".... SNAP #%-3d [ ", snapno)) - end - printsnap(tr, snap) - snapno = snapno + 1 - snap = tracesnap(tr, snapno) - snapref = snap and snap[0] or 65536 - end - local m, ot, op1, op2, ridsp = traceir(tr, ins) - local oidx, t = 6*shr(ot, 8), band(ot, 31) - local op = sub(irnames, oidx+1, oidx+6) - if op == "LOOP " then - if dumpreg then - out:write(format("%04d ------------ LOOP ------------\n", ins)) - else - out:write(format("%04d ------ LOOP ------------\n", ins)) - end - elseif op ~= "NOP " and op ~= "CARG " and - (dumpreg or op ~= "RENAME") then - local rid = band(ridsp, 255) - if dumpreg then - out:write(format("%04d %-6s", ins, ridsp_name(ridsp, ins))) - else - out:write(format("%04d ", ins)) - end - out:write(format("%s%s %s %s ", - (rid == 254 or rid == 253) and "}" or - (band(ot, 128) == 0 and " " or ">"), - band(ot, 64) == 0 and " " or "+", - irtype[t], op)) - local m1, m2 = band(m, 3), band(m, 3*4) - if sub(op, 1, 4) == "CALL" then - local ctype - if m2 == 1*4 then -- op2 == IRMlit - out:write(format("%-10s (", vmdef.ircall[op2])) - else - ctype = dumpcallfunc(tr, op2) - end - if op1 ~= -1 then dumpcallargs(tr, op1) end - out:write(")") - if ctype then out:write(" ctype ", ctype) end - elseif op == "CNEW " and op2 == -1 then - out:write(formatk(tr, op1)) - elseif m1 ~= 3 then -- op1 != IRMnone - if op1 < 0 then - out:write(formatk(tr, op1)) - else - out:write(format(m1 == 0 and "%04d" or "#%-3d", op1)) - end - if m2 ~= 3*4 then -- op2 != IRMnone - if m2 == 1*4 then -- op2 == IRMlit - local litn = litname[op] - if litn and litn[op2] then - out:write(" ", litn[op2]) - elseif op == "UREFO " or op == "UREFC " then - out:write(format(" #%-3d", shr(op2, 8))) - else - out:write(format(" #%-3d", op2)) - end - elseif op2 < 0 then - out:write(" ", formatk(tr, op2)) - else - out:write(format(" %04d", op2)) - end - end - end - out:write("\n") - end - end - if snap then - if dumpreg then - out:write(format(".... SNAP #%-3d [ ", snapno)) - else - out:write(format(".... SNAP #%-3d [ ", snapno)) - end - printsnap(tr, snap) - end -end - ------------------------------------------------------------------------------- - -local recprefix = "" -local recdepth = 0 - --- Format trace error message. -local function fmterr(err, info) - if type(err) == "number" then - if type(info) == "function" then info = fmtfunc(info) end - err = format(vmdef.traceerr[err], info) - end - return err -end - --- Dump trace states. -local function dump_trace(what, tr, func, pc, otr, oex) - if what == "stop" or (what == "abort" and dumpmode.a) then - if dumpmode.i then dump_ir(tr, dumpmode.s, dumpmode.r and what == "stop") - elseif dumpmode.s then dump_snap(tr) end - if dumpmode.m then dump_mcode(tr) end - end - if what == "start" then - if dumpmode.H then out:write('
\n') end
-    out:write("---- TRACE ", tr, " ", what)
-    if otr then out:write(" ", otr, "/", oex) end
-    out:write(" ", fmtfunc(func, pc), "\n")
-  elseif what == "stop" or what == "abort" then
-    out:write("---- TRACE ", tr, " ", what)
-    if what == "abort" then
-      out:write(" ", fmtfunc(func, pc), " -- ", fmterr(otr, oex), "\n")
-    else
-      local info = traceinfo(tr)
-      local link, ltype = info.link, info.linktype
-      if link == tr or link == 0 then
-	out:write(" -> ", ltype, "\n")
-      elseif ltype == "root" then
-	out:write(" -> ", link, "\n")
-      else
-	out:write(" -> ", link, " ", ltype, "\n")
-      end
-    end
-    if dumpmode.H then out:write("
\n\n") else out:write("\n") end - else - out:write("---- TRACE ", what, "\n\n") - end - out:flush() -end - --- Dump recorded bytecode. -local function dump_record(tr, func, pc, depth, callee) - if depth ~= recdepth then - recdepth = depth - recprefix = rep(" .", depth) - end - local line - if pc >= 0 then - line = bcline(func, pc, recprefix) - if dumpmode.H then line = gsub(line, "[<>&]", html_escape) end - else - line = "0000 "..recprefix.." FUNCC \n" - callee = func - end - if pc <= 0 then - out:write(sub(line, 1, -2), " ; ", fmtfunc(func), "\n") - else - out:write(line) - end - if pc >= 0 and band(funcbc(func, pc), 0xff) < 16 then -- ORDER BC - out:write(bcline(func, pc+1, recprefix)) -- Write JMP for cond. - end -end - ------------------------------------------------------------------------------- - --- Dump taken trace exits. -local function dump_texit(tr, ex, ngpr, nfpr, ...) - out:write("---- TRACE ", tr, " exit ", ex, "\n") - if dumpmode.X then - local regs = {...} - if jit.arch == "x64" then - for i=1,ngpr do - out:write(format(" %016x", regs[i])) - if i % 4 == 0 then out:write("\n") end - end - else - for i=1,ngpr do - out:write(format(" %08x", regs[i])) - if i % 8 == 0 then out:write("\n") end - end - end - if jit.arch == "mips" or jit.arch == "mipsel" then - for i=1,nfpr,2 do - out:write(format(" %+17.14g", regs[ngpr+i])) - if i % 8 == 7 then out:write("\n") end - end - else - for i=1,nfpr do - out:write(format(" %+17.14g", regs[ngpr+i])) - if i % 4 == 0 then out:write("\n") end - end - end - end -end - ------------------------------------------------------------------------------- - --- Detach dump handlers. -local function dumpoff() - if active then - active = false - jit.attach(dump_texit) - jit.attach(dump_record) - jit.attach(dump_trace) - if out and out ~= stdout and out ~= stderr then out:close() end - out = nil - end -end - --- Open the output file and attach dump handlers. -local function dumpon(opt, outfile) - if active then dumpoff() end - - local colormode = os.getenv("COLORTERM") and "A" or "T" - if opt then - opt = gsub(opt, "[TAH]", function(mode) colormode = mode; return ""; end) - end - - local m = { t=true, b=true, i=true, m=true, } - if opt and opt ~= "" then - local o = sub(opt, 1, 1) - if o ~= "+" and o ~= "-" then m = {} end - for i=1,#opt do m[sub(opt, i, i)] = (o ~= "-") end - end - dumpmode = m - - if m.t or m.b or m.i or m.s or m.m then - jit.attach(dump_trace, "trace") - end - if m.b then - jit.attach(dump_record, "record") - if not bcline then bcline = require("jit.bc").line end - end - if m.x or m.X then - jit.attach(dump_texit, "texit") - end - - if not outfile then outfile = os.getenv("LUAJIT_DUMPFILE") end - if outfile then - out = outfile == "-" and stdout or assert(io.open(outfile, "w")) - else - out = stdout - end - - m[colormode] = true - if colormode == "A" then - colorize = colorize_ansi - irtype = irtype_ansi - elseif colormode == "H" then - colorize = colorize_html - irtype = irtype_html - out:write(header_html) - else - colorize = colorize_text - irtype = irtype_text - end - - active = true -end - --- Public module functions. -module(...) - -on = dumpon -off = dumpoff -start = dumpon -- For -j command line option. - diff --git a/deps/luajit/src/jit/v.lua b/deps/luajit/src/jit/v.lua deleted file mode 100644 index 32666fd..0000000 --- a/deps/luajit/src/jit/v.lua +++ /dev/null @@ -1,167 +0,0 @@ ----------------------------------------------------------------------------- --- Verbose mode of the LuaJIT compiler. --- --- Copyright (C) 2005-2015 Mike Pall. All rights reserved. --- Released under the MIT license. See Copyright Notice in luajit.h ----------------------------------------------------------------------------- --- --- This module shows verbose information about the progress of the --- JIT compiler. It prints one line for each generated trace. This module --- is useful to see which code has been compiled or where the compiler --- punts and falls back to the interpreter. --- --- Example usage: --- --- luajit -jv -e "for i=1,1000 do for j=1,1000 do end end" --- luajit -jv=myapp.out myapp.lua --- --- Default output is to stderr. To redirect the output to a file, pass a --- filename as an argument (use '-' for stdout) or set the environment --- variable LUAJIT_VERBOSEFILE. The file is overwritten every time the --- module is started. --- --- The output from the first example should look like this: --- --- [TRACE 1 (command line):1 loop] --- [TRACE 2 (1/3) (command line):1 -> 1] --- --- The first number in each line is the internal trace number. Next are --- the file name ('(command line)') and the line number (':1') where the --- trace has started. Side traces also show the parent trace number and --- the exit number where they are attached to in parentheses ('(1/3)'). --- An arrow at the end shows where the trace links to ('-> 1'), unless --- it loops to itself. --- --- In this case the inner loop gets hot and is traced first, generating --- a root trace. Then the last exit from the 1st trace gets hot, too, --- and triggers generation of the 2nd trace. The side trace follows the --- path along the outer loop and *around* the inner loop, back to its --- start, and then links to the 1st trace. Yes, this may seem unusual, --- if you know how traditional compilers work. Trace compilers are full --- of surprises like this -- have fun! :-) --- --- Aborted traces are shown like this: --- --- [TRACE --- foo.lua:44 -- leaving loop in root trace at foo:lua:50] --- --- Don't worry -- trace aborts are quite common, even in programs which --- can be fully compiled. The compiler may retry several times until it --- finds a suitable trace. --- --- Of course this doesn't work with features that are not-yet-implemented --- (NYI error messages). The VM simply falls back to the interpreter. This --- may not matter at all if the particular trace is not very high up in --- the CPU usage profile. Oh, and the interpreter is quite fast, too. --- --- Also check out the -jdump module, which prints all the gory details. --- ------------------------------------------------------------------------------- - --- Cache some library functions and objects. -local jit = require("jit") -assert(jit.version_num == 20004, "LuaJIT core/library version mismatch") -local jutil = require("jit.util") -local vmdef = require("jit.vmdef") -local funcinfo, traceinfo = jutil.funcinfo, jutil.traceinfo -local type, format = type, string.format -local stdout, stderr = io.stdout, io.stderr - --- Active flag and output file handle. -local active, out - ------------------------------------------------------------------------------- - -local startloc, startex - -local function fmtfunc(func, pc) - local fi = funcinfo(func, pc) - if fi.loc then - return fi.loc - elseif fi.ffid then - return vmdef.ffnames[fi.ffid] - elseif fi.addr then - return format("C:%x", fi.addr) - else - return "(?)" - end -end - --- Format trace error message. -local function fmterr(err, info) - if type(err) == "number" then - if type(info) == "function" then info = fmtfunc(info) end - err = format(vmdef.traceerr[err], info) - end - return err -end - --- Dump trace states. -local function dump_trace(what, tr, func, pc, otr, oex) - if what == "start" then - startloc = fmtfunc(func, pc) - startex = otr and "("..otr.."/"..oex..") " or "" - else - if what == "abort" then - local loc = fmtfunc(func, pc) - if loc ~= startloc then - out:write(format("[TRACE --- %s%s -- %s at %s]\n", - startex, startloc, fmterr(otr, oex), loc)) - else - out:write(format("[TRACE --- %s%s -- %s]\n", - startex, startloc, fmterr(otr, oex))) - end - elseif what == "stop" then - local info = traceinfo(tr) - local link, ltype = info.link, info.linktype - if ltype == "interpreter" then - out:write(format("[TRACE %3s %s%s -- fallback to interpreter]\n", - tr, startex, startloc)) - elseif link == tr or link == 0 then - out:write(format("[TRACE %3s %s%s %s]\n", - tr, startex, startloc, ltype)) - elseif ltype == "root" then - out:write(format("[TRACE %3s %s%s -> %d]\n", - tr, startex, startloc, link)) - else - out:write(format("[TRACE %3s %s%s -> %d %s]\n", - tr, startex, startloc, link, ltype)) - end - else - out:write(format("[TRACE %s]\n", what)) - end - out:flush() - end -end - ------------------------------------------------------------------------------- - --- Detach dump handlers. -local function dumpoff() - if active then - active = false - jit.attach(dump_trace) - if out and out ~= stdout and out ~= stderr then out:close() end - out = nil - end -end - --- Open the output file and attach dump handlers. -local function dumpon(outfile) - if active then dumpoff() end - if not outfile then outfile = os.getenv("LUAJIT_VERBOSEFILE") end - if outfile then - out = outfile == "-" and stdout or assert(io.open(outfile, "w")) - else - out = stderr - end - jit.attach(dump_trace, "trace") - active = true -end - --- Public module functions. -module(...) - -on = dumpon -off = dumpoff -start = dumpon -- For -j command line option. - diff --git a/deps/luajit/src/lauxlib.h b/deps/luajit/src/lauxlib.h deleted file mode 100644 index fed1491..0000000 --- a/deps/luajit/src/lauxlib.h +++ /dev/null @@ -1,167 +0,0 @@ -/* -** $Id: lauxlib.h,v 1.88.1.1 2007/12/27 13:02:25 roberto Exp $ -** Auxiliary functions for building Lua libraries -** See Copyright Notice in lua.h -*/ - - -#ifndef lauxlib_h -#define lauxlib_h - - -#include -#include - -#include "lua.h" - - -#define luaL_getn(L,i) ((int)lua_objlen(L, i)) -#define luaL_setn(L,i,j) ((void)0) /* no op! */ - -/* extra error code for `luaL_load' */ -#define LUA_ERRFILE (LUA_ERRERR+1) - -typedef struct luaL_Reg { - const char *name; - lua_CFunction func; -} luaL_Reg; - -LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, - const luaL_Reg *l, int nup); -LUALIB_API void (luaL_register) (lua_State *L, const char *libname, - const luaL_Reg *l); -LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); -LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); -LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); -LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); -LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, - size_t *l); -LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, - const char *def, size_t *l); -LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); -LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); - -LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); -LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, - lua_Integer def); - -LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); -LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); -LUALIB_API void (luaL_checkany) (lua_State *L, int narg); - -LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); -LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); - -LUALIB_API void (luaL_where) (lua_State *L, int lvl); -LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); - -LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, - const char *const lst[]); - -LUALIB_API int (luaL_ref) (lua_State *L, int t); -LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); - -LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); -LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, - const char *name); -LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); - -LUALIB_API lua_State *(luaL_newstate) (void); - - -LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, - const char *r); - -LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, - const char *fname, int szhint); - -/* From Lua 5.2. */ -LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname); -LUALIB_API int luaL_execresult(lua_State *L, int stat); -LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, - const char *mode); -LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, - const char *name, const char *mode); -LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, - int level); - - -/* -** =============================================================== -** some useful macros -** =============================================================== -*/ - -#define luaL_argcheck(L, cond,numarg,extramsg) \ - ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) -#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) -#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) -#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) -#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) -#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) -#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) - -#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) - -#define luaL_dofile(L, fn) \ - (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) - -#define luaL_dostring(L, s) \ - (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) - -#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) - -#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) - -/* -** {====================================================== -** Generic Buffer manipulation -** ======================================================= -*/ - - - -typedef struct luaL_Buffer { - char *p; /* current position in buffer */ - int lvl; /* number of strings in the stack (level) */ - lua_State *L; - char buffer[LUAL_BUFFERSIZE]; -} luaL_Buffer; - -#define luaL_addchar(B,c) \ - ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ - (*(B)->p++ = (char)(c))) - -/* compatibility only */ -#define luaL_putchar(B,c) luaL_addchar(B,c) - -#define luaL_addsize(B,n) ((B)->p += (n)) - -LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); -LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); -LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); -LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); -LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); -LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); - - -/* }====================================================== */ - - -/* compatibility with ref system */ - -/* pre-defined references */ -#define LUA_NOREF (-2) -#define LUA_REFNIL (-1) - -#define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ - (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) - -#define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) - -#define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) - - -#define luaL_reg luaL_Reg - -#endif diff --git a/deps/luajit/src/lib_aux.c b/deps/luajit/src/lib_aux.c deleted file mode 100644 index 4a1b70d..0000000 --- a/deps/luajit/src/lib_aux.c +++ /dev/null @@ -1,356 +0,0 @@ -/* -** Auxiliary library for the Lua/C API. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major parts taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include -#include -#include - -#define lib_aux_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_state.h" -#include "lj_trace.h" -#include "lj_lib.h" - -#if LJ_TARGET_POSIX -#include -#endif - -/* -- I/O error handling -------------------------------------------------- */ - -LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname) -{ - if (stat) { - setboolV(L->top++, 1); - return 1; - } else { - int en = errno; /* Lua API calls may change this value. */ - setnilV(L->top++); - if (fname) - lua_pushfstring(L, "%s: %s", fname, strerror(en)); - else - lua_pushfstring(L, "%s", strerror(en)); - setintV(L->top++, en); - lj_trace_abort(G(L)); - return 3; - } -} - -LUALIB_API int luaL_execresult(lua_State *L, int stat) -{ - if (stat != -1) { -#if LJ_TARGET_POSIX - if (WIFSIGNALED(stat)) { - stat = WTERMSIG(stat); - setnilV(L->top++); - lua_pushliteral(L, "signal"); - } else { - if (WIFEXITED(stat)) - stat = WEXITSTATUS(stat); - if (stat == 0) - setboolV(L->top++, 1); - else - setnilV(L->top++); - lua_pushliteral(L, "exit"); - } -#else - if (stat == 0) - setboolV(L->top++, 1); - else - setnilV(L->top++); - lua_pushliteral(L, "exit"); -#endif - setintV(L->top++, stat); - return 3; - } - return luaL_fileresult(L, 0, NULL); -} - -/* -- Module registration ------------------------------------------------- */ - -LUALIB_API const char *luaL_findtable(lua_State *L, int idx, - const char *fname, int szhint) -{ - const char *e; - lua_pushvalue(L, idx); - do { - e = strchr(fname, '.'); - if (e == NULL) e = fname + strlen(fname); - lua_pushlstring(L, fname, (size_t)(e - fname)); - lua_rawget(L, -2); - if (lua_isnil(L, -1)) { /* no such field? */ - lua_pop(L, 1); /* remove this nil */ - lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ - lua_pushlstring(L, fname, (size_t)(e - fname)); - lua_pushvalue(L, -2); - lua_settable(L, -4); /* set new table into field */ - } else if (!lua_istable(L, -1)) { /* field has a non-table value? */ - lua_pop(L, 2); /* remove table and value */ - return fname; /* return problematic part of the name */ - } - lua_remove(L, -2); /* remove previous table */ - fname = e + 1; - } while (*e == '.'); - return NULL; -} - -static int libsize(const luaL_Reg *l) -{ - int size = 0; - for (; l->name; l++) size++; - return size; -} - -LUALIB_API void luaL_openlib(lua_State *L, const char *libname, - const luaL_Reg *l, int nup) -{ - lj_lib_checkfpu(L); - if (libname) { - int size = libsize(l); - /* check whether lib already exists */ - luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16); - lua_getfield(L, -1, libname); /* get _LOADED[libname] */ - if (!lua_istable(L, -1)) { /* not found? */ - lua_pop(L, 1); /* remove previous result */ - /* try global variable (and create one if it does not exist) */ - if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, size) != NULL) - lj_err_callerv(L, LJ_ERR_BADMODN, libname); - lua_pushvalue(L, -1); - lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */ - } - lua_remove(L, -2); /* remove _LOADED table */ - lua_insert(L, -(nup+1)); /* move library table to below upvalues */ - } - for (; l->name; l++) { - int i; - for (i = 0; i < nup; i++) /* copy upvalues to the top */ - lua_pushvalue(L, -nup); - lua_pushcclosure(L, l->func, nup); - lua_setfield(L, -(nup+2), l->name); - } - lua_pop(L, nup); /* remove upvalues */ -} - -LUALIB_API void luaL_register(lua_State *L, const char *libname, - const luaL_Reg *l) -{ - luaL_openlib(L, libname, l, 0); -} - -LUALIB_API const char *luaL_gsub(lua_State *L, const char *s, - const char *p, const char *r) -{ - const char *wild; - size_t l = strlen(p); - luaL_Buffer b; - luaL_buffinit(L, &b); - while ((wild = strstr(s, p)) != NULL) { - luaL_addlstring(&b, s, (size_t)(wild - s)); /* push prefix */ - luaL_addstring(&b, r); /* push replacement in place of pattern */ - s = wild + l; /* continue after `p' */ - } - luaL_addstring(&b, s); /* push last suffix */ - luaL_pushresult(&b); - return lua_tostring(L, -1); -} - -/* -- Buffer handling ----------------------------------------------------- */ - -#define bufflen(B) ((size_t)((B)->p - (B)->buffer)) -#define bufffree(B) ((size_t)(LUAL_BUFFERSIZE - bufflen(B))) - -static int emptybuffer(luaL_Buffer *B) -{ - size_t l = bufflen(B); - if (l == 0) - return 0; /* put nothing on stack */ - lua_pushlstring(B->L, B->buffer, l); - B->p = B->buffer; - B->lvl++; - return 1; -} - -static void adjuststack(luaL_Buffer *B) -{ - if (B->lvl > 1) { - lua_State *L = B->L; - int toget = 1; /* number of levels to concat */ - size_t toplen = lua_strlen(L, -1); - do { - size_t l = lua_strlen(L, -(toget+1)); - if (!(B->lvl - toget + 1 >= LUA_MINSTACK/2 || toplen > l)) - break; - toplen += l; - toget++; - } while (toget < B->lvl); - lua_concat(L, toget); - B->lvl = B->lvl - toget + 1; - } -} - -LUALIB_API char *luaL_prepbuffer(luaL_Buffer *B) -{ - if (emptybuffer(B)) - adjuststack(B); - return B->buffer; -} - -LUALIB_API void luaL_addlstring(luaL_Buffer *B, const char *s, size_t l) -{ - while (l--) - luaL_addchar(B, *s++); -} - -LUALIB_API void luaL_addstring(luaL_Buffer *B, const char *s) -{ - luaL_addlstring(B, s, strlen(s)); -} - -LUALIB_API void luaL_pushresult(luaL_Buffer *B) -{ - emptybuffer(B); - lua_concat(B->L, B->lvl); - B->lvl = 1; -} - -LUALIB_API void luaL_addvalue(luaL_Buffer *B) -{ - lua_State *L = B->L; - size_t vl; - const char *s = lua_tolstring(L, -1, &vl); - if (vl <= bufffree(B)) { /* fit into buffer? */ - memcpy(B->p, s, vl); /* put it there */ - B->p += vl; - lua_pop(L, 1); /* remove from stack */ - } else { - if (emptybuffer(B)) - lua_insert(L, -2); /* put buffer before new value */ - B->lvl++; /* add new value into B stack */ - adjuststack(B); - } -} - -LUALIB_API void luaL_buffinit(lua_State *L, luaL_Buffer *B) -{ - B->L = L; - B->p = B->buffer; - B->lvl = 0; -} - -/* -- Reference management ------------------------------------------------ */ - -#define FREELIST_REF 0 - -/* Convert a stack index to an absolute index. */ -#define abs_index(L, i) \ - ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : lua_gettop(L) + (i) + 1) - -LUALIB_API int luaL_ref(lua_State *L, int t) -{ - int ref; - t = abs_index(L, t); - if (lua_isnil(L, -1)) { - lua_pop(L, 1); /* remove from stack */ - return LUA_REFNIL; /* `nil' has a unique fixed reference */ - } - lua_rawgeti(L, t, FREELIST_REF); /* get first free element */ - ref = (int)lua_tointeger(L, -1); /* ref = t[FREELIST_REF] */ - lua_pop(L, 1); /* remove it from stack */ - if (ref != 0) { /* any free element? */ - lua_rawgeti(L, t, ref); /* remove it from list */ - lua_rawseti(L, t, FREELIST_REF); /* (t[FREELIST_REF] = t[ref]) */ - } else { /* no free elements */ - ref = (int)lua_objlen(L, t); - ref++; /* create new reference */ - } - lua_rawseti(L, t, ref); - return ref; -} - -LUALIB_API void luaL_unref(lua_State *L, int t, int ref) -{ - if (ref >= 0) { - t = abs_index(L, t); - lua_rawgeti(L, t, FREELIST_REF); - lua_rawseti(L, t, ref); /* t[ref] = t[FREELIST_REF] */ - lua_pushinteger(L, ref); - lua_rawseti(L, t, FREELIST_REF); /* t[FREELIST_REF] = ref */ - } -} - -/* -- Default allocator and panic function -------------------------------- */ - -static int panic(lua_State *L) -{ - const char *s = lua_tostring(L, -1); - fputs("PANIC: unprotected error in call to Lua API (", stderr); - fputs(s ? s : "?", stderr); - fputc(')', stderr); fputc('\n', stderr); - fflush(stderr); - return 0; -} - -#ifdef LUAJIT_USE_SYSMALLOC - -#if LJ_64 && !defined(LUAJIT_USE_VALGRIND) -#error "Must use builtin allocator for 64 bit target" -#endif - -static void *mem_alloc(void *ud, void *ptr, size_t osize, size_t nsize) -{ - (void)ud; - (void)osize; - if (nsize == 0) { - free(ptr); - return NULL; - } else { - return realloc(ptr, nsize); - } -} - -LUALIB_API lua_State *luaL_newstate(void) -{ - lua_State *L = lua_newstate(mem_alloc, NULL); - if (L) G(L)->panic = panic; - return L; -} - -#else - -#include "lj_alloc.h" - -LUALIB_API lua_State *luaL_newstate(void) -{ - lua_State *L; - void *ud = lj_alloc_create(); - if (ud == NULL) return NULL; -#if LJ_64 - L = lj_state_newstate(lj_alloc_f, ud); -#else - L = lua_newstate(lj_alloc_f, ud); -#endif - if (L) G(L)->panic = panic; - return L; -} - -#if LJ_64 -LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud) -{ - UNUSED(f); UNUSED(ud); - fputs("Must use luaL_newstate() for 64 bit target\n", stderr); - return NULL; -} -#endif - -#endif - diff --git a/deps/luajit/src/lib_base.c b/deps/luajit/src/lib_base.c deleted file mode 100644 index 17b9525..0000000 --- a/deps/luajit/src/lib_base.c +++ /dev/null @@ -1,683 +0,0 @@ -/* -** Base and coroutine library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2011 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include - -#define lib_base_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_state.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#include "lj_cconv.h" -#endif -#include "lj_bc.h" -#include "lj_ff.h" -#include "lj_dispatch.h" -#include "lj_char.h" -#include "lj_strscan.h" -#include "lj_lib.h" - -/* -- Base library: checks ------------------------------------------------ */ - -#define LJLIB_MODULE_base - -LJLIB_ASM(assert) LJLIB_REC(.) -{ - GCstr *s; - lj_lib_checkany(L, 1); - s = lj_lib_optstr(L, 2); - if (s) - lj_err_callermsg(L, strdata(s)); - else - lj_err_caller(L, LJ_ERR_ASSERT); - return FFH_UNREACHABLE; -} - -/* ORDER LJ_T */ -LJLIB_PUSH("nil") -LJLIB_PUSH("boolean") -LJLIB_PUSH(top-1) /* boolean */ -LJLIB_PUSH("userdata") -LJLIB_PUSH("string") -LJLIB_PUSH("upval") -LJLIB_PUSH("thread") -LJLIB_PUSH("proto") -LJLIB_PUSH("function") -LJLIB_PUSH("trace") -LJLIB_PUSH("cdata") -LJLIB_PUSH("table") -LJLIB_PUSH(top-9) /* userdata */ -LJLIB_PUSH("number") -LJLIB_ASM_(type) LJLIB_REC(.) -/* Recycle the lj_lib_checkany(L, 1) from assert. */ - -/* -- Base library: iterators --------------------------------------------- */ - -/* This solves a circular dependency problem -- change FF_next_N as needed. */ -LJ_STATIC_ASSERT((int)FF_next == FF_next_N); - -LJLIB_ASM(next) -{ - lj_lib_checktab(L, 1); - return FFH_UNREACHABLE; -} - -#if LJ_52 || LJ_HASFFI -static int ffh_pairs(lua_State *L, MMS mm) -{ - TValue *o = lj_lib_checkany(L, 1); - cTValue *mo = lj_meta_lookup(L, o, mm); - if ((LJ_52 || tviscdata(o)) && !tvisnil(mo)) { - L->top = o+1; /* Only keep one argument. */ - copyTV(L, L->base-1, mo); /* Replace callable. */ - return FFH_TAILCALL; - } else { - if (!tvistab(o)) lj_err_argt(L, 1, LUA_TTABLE); - setfuncV(L, o-1, funcV(lj_lib_upvalue(L, 1))); - if (mm == MM_pairs) setnilV(o+1); else setintV(o+1, 0); - return FFH_RES(3); - } -} -#else -#define ffh_pairs(L, mm) (lj_lib_checktab(L, 1), FFH_UNREACHABLE) -#endif - -LJLIB_PUSH(lastcl) -LJLIB_ASM(pairs) -{ - return ffh_pairs(L, MM_pairs); -} - -LJLIB_NOREGUV LJLIB_ASM(ipairs_aux) LJLIB_REC(.) -{ - lj_lib_checktab(L, 1); - lj_lib_checkint(L, 2); - return FFH_UNREACHABLE; -} - -LJLIB_PUSH(lastcl) -LJLIB_ASM(ipairs) LJLIB_REC(.) -{ - return ffh_pairs(L, MM_ipairs); -} - -/* -- Base library: getters and setters ----------------------------------- */ - -LJLIB_ASM_(getmetatable) LJLIB_REC(.) -/* Recycle the lj_lib_checkany(L, 1) from assert. */ - -LJLIB_ASM(setmetatable) LJLIB_REC(.) -{ - GCtab *t = lj_lib_checktab(L, 1); - GCtab *mt = lj_lib_checktabornil(L, 2); - if (!tvisnil(lj_meta_lookup(L, L->base, MM_metatable))) - lj_err_caller(L, LJ_ERR_PROTMT); - setgcref(t->metatable, obj2gco(mt)); - if (mt) { lj_gc_objbarriert(L, t, mt); } - settabV(L, L->base-1, t); - return FFH_RES(1); -} - -LJLIB_CF(getfenv) -{ - GCfunc *fn; - cTValue *o = L->base; - if (!(o < L->top && tvisfunc(o))) { - int level = lj_lib_optint(L, 1, 1); - o = lj_debug_frame(L, level, &level); - if (o == NULL) - lj_err_arg(L, 1, LJ_ERR_INVLVL); - } - fn = &gcval(o)->fn; - settabV(L, L->top++, isluafunc(fn) ? tabref(fn->l.env) : tabref(L->env)); - return 1; -} - -LJLIB_CF(setfenv) -{ - GCfunc *fn; - GCtab *t = lj_lib_checktab(L, 2); - cTValue *o = L->base; - if (!(o < L->top && tvisfunc(o))) { - int level = lj_lib_checkint(L, 1); - if (level == 0) { - /* NOBARRIER: A thread (i.e. L) is never black. */ - setgcref(L->env, obj2gco(t)); - return 0; - } - o = lj_debug_frame(L, level, &level); - if (o == NULL) - lj_err_arg(L, 1, LJ_ERR_INVLVL); - } - fn = &gcval(o)->fn; - if (!isluafunc(fn)) - lj_err_caller(L, LJ_ERR_SETFENV); - setgcref(fn->l.env, obj2gco(t)); - lj_gc_objbarrier(L, obj2gco(fn), t); - setfuncV(L, L->top++, fn); - return 1; -} - -LJLIB_ASM(rawget) LJLIB_REC(.) -{ - lj_lib_checktab(L, 1); - lj_lib_checkany(L, 2); - return FFH_UNREACHABLE; -} - -LJLIB_CF(rawset) LJLIB_REC(.) -{ - lj_lib_checktab(L, 1); - lj_lib_checkany(L, 2); - L->top = 1+lj_lib_checkany(L, 3); - lua_rawset(L, 1); - return 1; -} - -LJLIB_CF(rawequal) LJLIB_REC(.) -{ - cTValue *o1 = lj_lib_checkany(L, 1); - cTValue *o2 = lj_lib_checkany(L, 2); - setboolV(L->top-1, lj_obj_equal(o1, o2)); - return 1; -} - -#if LJ_52 -LJLIB_CF(rawlen) LJLIB_REC(.) -{ - cTValue *o = L->base; - int32_t len; - if (L->top > o && tvisstr(o)) - len = (int32_t)strV(o)->len; - else - len = (int32_t)lj_tab_len(lj_lib_checktab(L, 1)); - setintV(L->top-1, len); - return 1; -} -#endif - -LJLIB_CF(unpack) -{ - GCtab *t = lj_lib_checktab(L, 1); - int32_t n, i = lj_lib_optint(L, 2, 1); - int32_t e = (L->base+3-1 < L->top && !tvisnil(L->base+3-1)) ? - lj_lib_checkint(L, 3) : (int32_t)lj_tab_len(t); - if (i > e) return 0; - n = e - i + 1; - if (n <= 0 || !lua_checkstack(L, n)) - lj_err_caller(L, LJ_ERR_UNPACK); - do { - cTValue *tv = lj_tab_getint(t, i); - if (tv) { - copyTV(L, L->top++, tv); - } else { - setnilV(L->top++); - } - } while (i++ < e); - return n; -} - -LJLIB_CF(select) LJLIB_REC(.) -{ - int32_t n = (int32_t)(L->top - L->base); - if (n >= 1 && tvisstr(L->base) && *strVdata(L->base) == '#') { - setintV(L->top-1, n-1); - return 1; - } else { - int32_t i = lj_lib_checkint(L, 1); - if (i < 0) i = n + i; else if (i > n) i = n; - if (i < 1) - lj_err_arg(L, 1, LJ_ERR_IDXRNG); - return n - i; - } -} - -/* -- Base library: conversions ------------------------------------------- */ - -LJLIB_ASM(tonumber) LJLIB_REC(.) -{ - int32_t base = lj_lib_optint(L, 2, 10); - if (base == 10) { - TValue *o = lj_lib_checkany(L, 1); - if (lj_strscan_numberobj(o)) { - copyTV(L, L->base-1, o); - return FFH_RES(1); - } -#if LJ_HASFFI - if (tviscdata(o)) { - CTState *cts = ctype_cts(L); - CType *ct = lj_ctype_rawref(cts, cdataV(o)->ctypeid); - if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct); - if (ctype_isnum(ct->info) || ctype_iscomplex(ct->info)) { - if (LJ_DUALNUM && ctype_isinteger_or_bool(ct->info) && - ct->size <= 4 && !(ct->size == 4 && (ct->info & CTF_UNSIGNED))) { - int32_t i; - lj_cconv_ct_tv(cts, ctype_get(cts, CTID_INT32), (uint8_t *)&i, o, 0); - setintV(L->base-1, i); - return FFH_RES(1); - } - lj_cconv_ct_tv(cts, ctype_get(cts, CTID_DOUBLE), - (uint8_t *)&(L->base-1)->n, o, 0); - return FFH_RES(1); - } - } -#endif - } else { - const char *p = strdata(lj_lib_checkstr(L, 1)); - char *ep; - unsigned long ul; - if (base < 2 || base > 36) - lj_err_arg(L, 2, LJ_ERR_BASERNG); - ul = strtoul(p, &ep, base); - if (p != ep) { - while (lj_char_isspace((unsigned char)(*ep))) ep++; - if (*ep == '\0') { - if (LJ_DUALNUM && LJ_LIKELY(ul < 0x80000000u)) - setintV(L->base-1, (int32_t)ul); - else - setnumV(L->base-1, (lua_Number)ul); - return FFH_RES(1); - } - } - } - setnilV(L->base-1); - return FFH_RES(1); -} - -LJLIB_PUSH("nil") -LJLIB_PUSH("false") -LJLIB_PUSH("true") -LJLIB_ASM(tostring) LJLIB_REC(.) -{ - TValue *o = lj_lib_checkany(L, 1); - cTValue *mo; - L->top = o+1; /* Only keep one argument. */ - if (!tvisnil(mo = lj_meta_lookup(L, o, MM_tostring))) { - copyTV(L, L->base-1, mo); /* Replace callable. */ - return FFH_TAILCALL; - } else { - GCstr *s; - if (tvisnumber(o)) { - s = lj_str_fromnumber(L, o); - } else if (tvispri(o)) { - s = strV(lj_lib_upvalue(L, -(int32_t)itype(o))); - } else { - if (tvisfunc(o) && isffunc(funcV(o))) - lua_pushfstring(L, "function: builtin#%d", funcV(o)->c.ffid); - else - lua_pushfstring(L, "%s: %p", lj_typename(o), lua_topointer(L, 1)); - /* Note: lua_pushfstring calls the GC which may invalidate o. */ - s = strV(L->top-1); - } - setstrV(L, L->base-1, s); - return FFH_RES(1); - } -} - -/* -- Base library: throw and catch errors -------------------------------- */ - -LJLIB_CF(error) -{ - int32_t level = lj_lib_optint(L, 2, 1); - lua_settop(L, 1); - if (lua_isstring(L, 1) && level > 0) { - luaL_where(L, level); - lua_pushvalue(L, 1); - lua_concat(L, 2); - } - return lua_error(L); -} - -LJLIB_ASM(pcall) LJLIB_REC(.) -{ - lj_lib_checkany(L, 1); - lj_lib_checkfunc(L, 2); /* For xpcall only. */ - return FFH_UNREACHABLE; -} -LJLIB_ASM_(xpcall) LJLIB_REC(.) - -/* -- Base library: load Lua code ----------------------------------------- */ - -static int load_aux(lua_State *L, int status, int envarg) -{ - if (status == 0) { - if (tvistab(L->base+envarg-1)) { - GCfunc *fn = funcV(L->top-1); - GCtab *t = tabV(L->base+envarg-1); - setgcref(fn->c.env, obj2gco(t)); - lj_gc_objbarrier(L, fn, t); - } - return 1; - } else { - setnilV(L->top-2); - return 2; - } -} - -LJLIB_CF(loadfile) -{ - GCstr *fname = lj_lib_optstr(L, 1); - GCstr *mode = lj_lib_optstr(L, 2); - int status; - lua_settop(L, 3); /* Ensure env arg exists. */ - status = luaL_loadfilex(L, fname ? strdata(fname) : NULL, - mode ? strdata(mode) : NULL); - return load_aux(L, status, 3); -} - -static const char *reader_func(lua_State *L, void *ud, size_t *size) -{ - UNUSED(ud); - luaL_checkstack(L, 2, "too many nested functions"); - copyTV(L, L->top++, L->base); - lua_call(L, 0, 1); /* Call user-supplied function. */ - L->top--; - if (tvisnil(L->top)) { - *size = 0; - return NULL; - } else if (tvisstr(L->top) || tvisnumber(L->top)) { - copyTV(L, L->base+4, L->top); /* Anchor string in reserved stack slot. */ - return lua_tolstring(L, 5, size); - } else { - lj_err_caller(L, LJ_ERR_RDRSTR); - return NULL; - } -} - -LJLIB_CF(load) -{ - GCstr *name = lj_lib_optstr(L, 2); - GCstr *mode = lj_lib_optstr(L, 3); - int status; - if (L->base < L->top && (tvisstr(L->base) || tvisnumber(L->base))) { - GCstr *s = lj_lib_checkstr(L, 1); - lua_settop(L, 4); /* Ensure env arg exists. */ - status = luaL_loadbufferx(L, strdata(s), s->len, strdata(name ? name : s), - mode ? strdata(mode) : NULL); - } else { - lj_lib_checkfunc(L, 1); - lua_settop(L, 5); /* Reserve a slot for the string from the reader. */ - status = lua_loadx(L, reader_func, NULL, name ? strdata(name) : "=(load)", - mode ? strdata(mode) : NULL); - } - return load_aux(L, status, 4); -} - -LJLIB_CF(loadstring) -{ - return lj_cf_load(L); -} - -LJLIB_CF(dofile) -{ - GCstr *fname = lj_lib_optstr(L, 1); - setnilV(L->top); - L->top = L->base+1; - if (luaL_loadfile(L, fname ? strdata(fname) : NULL) != 0) - lua_error(L); - lua_call(L, 0, LUA_MULTRET); - return (int)(L->top - L->base) - 1; -} - -/* -- Base library: GC control -------------------------------------------- */ - -LJLIB_CF(gcinfo) -{ - setintV(L->top++, (G(L)->gc.total >> 10)); - return 1; -} - -LJLIB_CF(collectgarbage) -{ - int opt = lj_lib_checkopt(L, 1, LUA_GCCOLLECT, /* ORDER LUA_GC* */ - "\4stop\7restart\7collect\5count\1\377\4step\10setpause\12setstepmul"); - int32_t data = lj_lib_optint(L, 2, 0); - if (opt == LUA_GCCOUNT) { - setnumV(L->top, (lua_Number)G(L)->gc.total/1024.0); - } else { - int res = lua_gc(L, opt, data); - if (opt == LUA_GCSTEP) - setboolV(L->top, res); - else - setintV(L->top, res); - } - L->top++; - return 1; -} - -/* -- Base library: miscellaneous functions ------------------------------- */ - -LJLIB_PUSH(top-2) /* Upvalue holds weak table. */ -LJLIB_CF(newproxy) -{ - lua_settop(L, 1); - lua_newuserdata(L, 0); - if (lua_toboolean(L, 1) == 0) { /* newproxy(): without metatable. */ - return 1; - } else if (lua_isboolean(L, 1)) { /* newproxy(true): with metatable. */ - lua_newtable(L); - lua_pushvalue(L, -1); - lua_pushboolean(L, 1); - lua_rawset(L, lua_upvalueindex(1)); /* Remember mt in weak table. */ - } else { /* newproxy(proxy): inherit metatable. */ - int validproxy = 0; - if (lua_getmetatable(L, 1)) { - lua_rawget(L, lua_upvalueindex(1)); - validproxy = lua_toboolean(L, -1); - lua_pop(L, 1); - } - if (!validproxy) - lj_err_arg(L, 1, LJ_ERR_NOPROXY); - lua_getmetatable(L, 1); - } - lua_setmetatable(L, 2); - return 1; -} - -LJLIB_PUSH("tostring") -LJLIB_CF(print) -{ - ptrdiff_t i, nargs = L->top - L->base; - cTValue *tv = lj_tab_getstr(tabref(L->env), strV(lj_lib_upvalue(L, 1))); - int shortcut; - if (tv && !tvisnil(tv)) { - copyTV(L, L->top++, tv); - } else { - setstrV(L, L->top++, strV(lj_lib_upvalue(L, 1))); - lua_gettable(L, LUA_GLOBALSINDEX); - tv = L->top-1; - } - shortcut = (tvisfunc(tv) && funcV(tv)->c.ffid == FF_tostring); - for (i = 0; i < nargs; i++) { - const char *str; - size_t size; - cTValue *o = &L->base[i]; - if (shortcut && tvisstr(o)) { - str = strVdata(o); - size = strV(o)->len; - } else if (shortcut && tvisint(o)) { - char buf[LJ_STR_INTBUF]; - char *p = lj_str_bufint(buf, intV(o)); - size = (size_t)(buf+LJ_STR_INTBUF-p); - str = p; - } else if (shortcut && tvisnum(o)) { - char buf[LJ_STR_NUMBUF]; - size = lj_str_bufnum(buf, o); - str = buf; - } else { - copyTV(L, L->top+1, o); - copyTV(L, L->top, L->top-1); - L->top += 2; - lua_call(L, 1, 1); - str = lua_tolstring(L, -1, &size); - if (!str) - lj_err_caller(L, LJ_ERR_PRTOSTR); - L->top--; - } - if (i) - putchar('\t'); - fwrite(str, 1, size, stdout); - } - putchar('\n'); - return 0; -} - -LJLIB_PUSH(top-3) -LJLIB_SET(_VERSION) - -#include "lj_libdef.h" - -/* -- Coroutine library --------------------------------------------------- */ - -#define LJLIB_MODULE_coroutine - -LJLIB_CF(coroutine_status) -{ - const char *s; - lua_State *co; - if (!(L->top > L->base && tvisthread(L->base))) - lj_err_arg(L, 1, LJ_ERR_NOCORO); - co = threadV(L->base); - if (co == L) s = "running"; - else if (co->status == LUA_YIELD) s = "suspended"; - else if (co->status != 0) s = "dead"; - else if (co->base > tvref(co->stack)+1) s = "normal"; - else if (co->top == co->base) s = "dead"; - else s = "suspended"; - lua_pushstring(L, s); - return 1; -} - -LJLIB_CF(coroutine_running) -{ -#if LJ_52 - int ismain = lua_pushthread(L); - setboolV(L->top++, ismain); - return 2; -#else - if (lua_pushthread(L)) - setnilV(L->top++); - return 1; -#endif -} - -LJLIB_CF(coroutine_create) -{ - lua_State *L1; - if (!(L->base < L->top && tvisfunc(L->base))) - lj_err_argt(L, 1, LUA_TFUNCTION); - L1 = lua_newthread(L); - setfuncV(L, L1->top++, funcV(L->base)); - return 1; -} - -LJLIB_ASM(coroutine_yield) -{ - lj_err_caller(L, LJ_ERR_CYIELD); - return FFH_UNREACHABLE; -} - -static int ffh_resume(lua_State *L, lua_State *co, int wrap) -{ - if (co->cframe != NULL || co->status > LUA_YIELD || - (co->status == 0 && co->top == co->base)) { - ErrMsg em = co->cframe ? LJ_ERR_CORUN : LJ_ERR_CODEAD; - if (wrap) lj_err_caller(L, em); - setboolV(L->base-1, 0); - setstrV(L, L->base, lj_err_str(L, em)); - return FFH_RES(2); - } - lj_state_growstack(co, (MSize)(L->top - L->base)); - return FFH_RETRY; -} - -LJLIB_ASM(coroutine_resume) -{ - if (!(L->top > L->base && tvisthread(L->base))) - lj_err_arg(L, 1, LJ_ERR_NOCORO); - return ffh_resume(L, threadV(L->base), 0); -} - -LJLIB_NOREG LJLIB_ASM(coroutine_wrap_aux) -{ - return ffh_resume(L, threadV(lj_lib_upvalue(L, 1)), 1); -} - -/* Inline declarations. */ -LJ_ASMF void lj_ff_coroutine_wrap_aux(void); -#if !(LJ_TARGET_MIPS && defined(ljamalg_c)) -LJ_FUNCA_NORET void LJ_FASTCALL lj_ffh_coroutine_wrap_err(lua_State *L, - lua_State *co); -#endif - -/* Error handler, called from assembler VM. */ -void LJ_FASTCALL lj_ffh_coroutine_wrap_err(lua_State *L, lua_State *co) -{ - co->top--; copyTV(L, L->top, co->top); L->top++; - if (tvisstr(L->top-1)) - lj_err_callermsg(L, strVdata(L->top-1)); - else - lj_err_run(L); -} - -/* Forward declaration. */ -static void setpc_wrap_aux(lua_State *L, GCfunc *fn); - -LJLIB_CF(coroutine_wrap) -{ - lj_cf_coroutine_create(L); - lj_lib_pushcc(L, lj_ffh_coroutine_wrap_aux, FF_coroutine_wrap_aux, 1); - setpc_wrap_aux(L, funcV(L->top-1)); - return 1; -} - -#include "lj_libdef.h" - -/* Fix the PC of wrap_aux. Really ugly workaround. */ -static void setpc_wrap_aux(lua_State *L, GCfunc *fn) -{ - setmref(fn->c.pc, &L2GG(L)->bcff[lj_lib_init_coroutine[1]+2]); -} - -/* ------------------------------------------------------------------------ */ - -static void newproxy_weaktable(lua_State *L) -{ - /* NOBARRIER: The table is new (marked white). */ - GCtab *t = lj_tab_new(L, 0, 1); - settabV(L, L->top++, t); - setgcref(t->metatable, obj2gco(t)); - setstrV(L, lj_tab_setstr(L, t, lj_str_newlit(L, "__mode")), - lj_str_newlit(L, "kv")); - t->nomm = (uint8_t)(~(1u<env); - settabV(L, lj_tab_setstr(L, env, lj_str_newlit(L, "_G")), env); - lua_pushliteral(L, LUA_VERSION); /* top-3. */ - newproxy_weaktable(L); /* top-2. */ - LJ_LIB_REG(L, "_G", base); - LJ_LIB_REG(L, LUA_COLIBNAME, coroutine); - return 2; -} - diff --git a/deps/luajit/src/lib_bit.c b/deps/luajit/src/lib_bit.c deleted file mode 100644 index 583e04b..0000000 --- a/deps/luajit/src/lib_bit.c +++ /dev/null @@ -1,74 +0,0 @@ -/* -** Bit manipulation library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lib_bit_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_lib.h" - -/* ------------------------------------------------------------------------ */ - -#define LJLIB_MODULE_bit - -LJLIB_ASM(bit_tobit) LJLIB_REC(bit_unary IR_TOBIT) -{ - lj_lib_checknumber(L, 1); - return FFH_RETRY; -} -LJLIB_ASM_(bit_bnot) LJLIB_REC(bit_unary IR_BNOT) -LJLIB_ASM_(bit_bswap) LJLIB_REC(bit_unary IR_BSWAP) - -LJLIB_ASM(bit_lshift) LJLIB_REC(bit_shift IR_BSHL) -{ - lj_lib_checknumber(L, 1); - lj_lib_checkbit(L, 2); - return FFH_RETRY; -} -LJLIB_ASM_(bit_rshift) LJLIB_REC(bit_shift IR_BSHR) -LJLIB_ASM_(bit_arshift) LJLIB_REC(bit_shift IR_BSAR) -LJLIB_ASM_(bit_rol) LJLIB_REC(bit_shift IR_BROL) -LJLIB_ASM_(bit_ror) LJLIB_REC(bit_shift IR_BROR) - -LJLIB_ASM(bit_band) LJLIB_REC(bit_nary IR_BAND) -{ - int i = 0; - do { lj_lib_checknumber(L, ++i); } while (L->base+i < L->top); - return FFH_RETRY; -} -LJLIB_ASM_(bit_bor) LJLIB_REC(bit_nary IR_BOR) -LJLIB_ASM_(bit_bxor) LJLIB_REC(bit_nary IR_BXOR) - -/* ------------------------------------------------------------------------ */ - -LJLIB_CF(bit_tohex) -{ - uint32_t b = (uint32_t)lj_lib_checkbit(L, 1); - int32_t i, n = L->base+1 >= L->top ? 8 : lj_lib_checkbit(L, 2); - const char *hexdigits = "0123456789abcdef"; - char buf[8]; - if (n < 0) { n = -n; hexdigits = "0123456789ABCDEF"; } - if (n > 8) n = 8; - for (i = n; --i >= 0; ) { buf[i] = hexdigits[b & 15]; b >>= 4; } - lua_pushlstring(L, buf, (size_t)n); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -#include "lj_libdef.h" - -LUALIB_API int luaopen_bit(lua_State *L) -{ - LJ_LIB_REG(L, LUA_BITLIBNAME, bit); - return 1; -} - diff --git a/deps/luajit/src/lib_debug.c b/deps/luajit/src/lib_debug.c deleted file mode 100644 index e87c35c..0000000 --- a/deps/luajit/src/lib_debug.c +++ /dev/null @@ -1,405 +0,0 @@ -/* -** Debug library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lib_debug_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_lib.h" - -/* ------------------------------------------------------------------------ */ - -#define LJLIB_MODULE_debug - -LJLIB_CF(debug_getregistry) -{ - copyTV(L, L->top++, registry(L)); - return 1; -} - -LJLIB_CF(debug_getmetatable) -{ - lj_lib_checkany(L, 1); - if (!lua_getmetatable(L, 1)) { - setnilV(L->top-1); - } - return 1; -} - -LJLIB_CF(debug_setmetatable) -{ - lj_lib_checktabornil(L, 2); - L->top = L->base+2; - lua_setmetatable(L, 1); -#if !LJ_52 - setboolV(L->top-1, 1); -#endif - return 1; -} - -LJLIB_CF(debug_getfenv) -{ - lj_lib_checkany(L, 1); - lua_getfenv(L, 1); - return 1; -} - -LJLIB_CF(debug_setfenv) -{ - lj_lib_checktab(L, 2); - L->top = L->base+2; - if (!lua_setfenv(L, 1)) - lj_err_caller(L, LJ_ERR_SETFENV); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -static void settabss(lua_State *L, const char *i, const char *v) -{ - lua_pushstring(L, v); - lua_setfield(L, -2, i); -} - -static void settabsi(lua_State *L, const char *i, int v) -{ - lua_pushinteger(L, v); - lua_setfield(L, -2, i); -} - -static void settabsb(lua_State *L, const char *i, int v) -{ - lua_pushboolean(L, v); - lua_setfield(L, -2, i); -} - -static lua_State *getthread(lua_State *L, int *arg) -{ - if (L->base < L->top && tvisthread(L->base)) { - *arg = 1; - return threadV(L->base); - } else { - *arg = 0; - return L; - } -} - -static void treatstackoption(lua_State *L, lua_State *L1, const char *fname) -{ - if (L == L1) { - lua_pushvalue(L, -2); - lua_remove(L, -3); - } - else - lua_xmove(L1, L, 1); - lua_setfield(L, -2, fname); -} - -LJLIB_CF(debug_getinfo) -{ - lj_Debug ar; - int arg, opt_f = 0, opt_L = 0; - lua_State *L1 = getthread(L, &arg); - const char *options = luaL_optstring(L, arg+2, "flnSu"); - if (lua_isnumber(L, arg+1)) { - if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), (lua_Debug *)&ar)) { - setnilV(L->top-1); - return 1; - } - } else if (L->base+arg < L->top && tvisfunc(L->base+arg)) { - options = lua_pushfstring(L, ">%s", options); - setfuncV(L1, L1->top++, funcV(L->base+arg)); - } else { - lj_err_arg(L, arg+1, LJ_ERR_NOFUNCL); - } - if (!lj_debug_getinfo(L1, options, &ar, 1)) - lj_err_arg(L, arg+2, LJ_ERR_INVOPT); - lua_createtable(L, 0, 16); /* Create result table. */ - for (; *options; options++) { - switch (*options) { - case 'S': - settabss(L, "source", ar.source); - settabss(L, "short_src", ar.short_src); - settabsi(L, "linedefined", ar.linedefined); - settabsi(L, "lastlinedefined", ar.lastlinedefined); - settabss(L, "what", ar.what); - break; - case 'l': - settabsi(L, "currentline", ar.currentline); - break; - case 'u': - settabsi(L, "nups", ar.nups); - settabsi(L, "nparams", ar.nparams); - settabsb(L, "isvararg", ar.isvararg); - break; - case 'n': - settabss(L, "name", ar.name); - settabss(L, "namewhat", ar.namewhat); - break; - case 'f': opt_f = 1; break; - case 'L': opt_L = 1; break; - default: break; - } - } - if (opt_L) treatstackoption(L, L1, "activelines"); - if (opt_f) treatstackoption(L, L1, "func"); - return 1; /* Return result table. */ -} - -LJLIB_CF(debug_getlocal) -{ - int arg; - lua_State *L1 = getthread(L, &arg); - lua_Debug ar; - const char *name; - int slot = lj_lib_checkint(L, arg+2); - if (tvisfunc(L->base+arg)) { - L->top = L->base+arg+1; - lua_pushstring(L, lua_getlocal(L, NULL, slot)); - return 1; - } - if (!lua_getstack(L1, lj_lib_checkint(L, arg+1), &ar)) - lj_err_arg(L, arg+1, LJ_ERR_LVLRNG); - name = lua_getlocal(L1, &ar, slot); - if (name) { - lua_xmove(L1, L, 1); - lua_pushstring(L, name); - lua_pushvalue(L, -2); - return 2; - } else { - setnilV(L->top-1); - return 1; - } -} - -LJLIB_CF(debug_setlocal) -{ - int arg; - lua_State *L1 = getthread(L, &arg); - lua_Debug ar; - TValue *tv; - if (!lua_getstack(L1, lj_lib_checkint(L, arg+1), &ar)) - lj_err_arg(L, arg+1, LJ_ERR_LVLRNG); - tv = lj_lib_checkany(L, arg+3); - copyTV(L1, L1->top++, tv); - lua_pushstring(L, lua_setlocal(L1, &ar, lj_lib_checkint(L, arg+2))); - return 1; -} - -static int debug_getupvalue(lua_State *L, int get) -{ - int32_t n = lj_lib_checkint(L, 2); - const char *name; - lj_lib_checkfunc(L, 1); - name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); - if (name) { - lua_pushstring(L, name); - if (!get) return 1; - copyTV(L, L->top, L->top-2); - L->top++; - return 2; - } - return 0; -} - -LJLIB_CF(debug_getupvalue) -{ - return debug_getupvalue(L, 1); -} - -LJLIB_CF(debug_setupvalue) -{ - lj_lib_checkany(L, 3); - return debug_getupvalue(L, 0); -} - -LJLIB_CF(debug_upvalueid) -{ - GCfunc *fn = lj_lib_checkfunc(L, 1); - int32_t n = lj_lib_checkint(L, 2) - 1; - if ((uint32_t)n >= fn->l.nupvalues) - lj_err_arg(L, 2, LJ_ERR_IDXRNG); - setlightudV(L->top-1, isluafunc(fn) ? (void *)gcref(fn->l.uvptr[n]) : - (void *)&fn->c.upvalue[n]); - return 1; -} - -LJLIB_CF(debug_upvaluejoin) -{ - GCfunc *fn[2]; - GCRef *p[2]; - int i; - for (i = 0; i < 2; i++) { - int32_t n; - fn[i] = lj_lib_checkfunc(L, 2*i+1); - if (!isluafunc(fn[i])) - lj_err_arg(L, 2*i+1, LJ_ERR_NOLFUNC); - n = lj_lib_checkint(L, 2*i+2) - 1; - if ((uint32_t)n >= fn[i]->l.nupvalues) - lj_err_arg(L, 2*i+2, LJ_ERR_IDXRNG); - p[i] = &fn[i]->l.uvptr[n]; - } - setgcrefr(*p[0], *p[1]); - lj_gc_objbarrier(L, fn[0], gcref(*p[1])); - return 0; -} - -#if LJ_52 -LJLIB_CF(debug_getuservalue) -{ - TValue *o = L->base; - if (o < L->top && tvisudata(o)) - settabV(L, o, tabref(udataV(o)->env)); - else - setnilV(o); - L->top = o+1; - return 1; -} - -LJLIB_CF(debug_setuservalue) -{ - TValue *o = L->base; - if (!(o < L->top && tvisudata(o))) - lj_err_argt(L, 1, LUA_TUSERDATA); - if (!(o+1 < L->top && tvistab(o+1))) - lj_err_argt(L, 2, LUA_TTABLE); - L->top = o+2; - lua_setfenv(L, 1); - return 1; -} -#endif - -/* ------------------------------------------------------------------------ */ - -static const char KEY_HOOK = 'h'; - -static void hookf(lua_State *L, lua_Debug *ar) -{ - static const char *const hooknames[] = - {"call", "return", "line", "count", "tail return"}; - lua_pushlightuserdata(L, (void *)&KEY_HOOK); - lua_rawget(L, LUA_REGISTRYINDEX); - if (lua_isfunction(L, -1)) { - lua_pushstring(L, hooknames[(int)ar->event]); - if (ar->currentline >= 0) - lua_pushinteger(L, ar->currentline); - else lua_pushnil(L); - lua_call(L, 2, 0); - } -} - -static int makemask(const char *smask, int count) -{ - int mask = 0; - if (strchr(smask, 'c')) mask |= LUA_MASKCALL; - if (strchr(smask, 'r')) mask |= LUA_MASKRET; - if (strchr(smask, 'l')) mask |= LUA_MASKLINE; - if (count > 0) mask |= LUA_MASKCOUNT; - return mask; -} - -static char *unmakemask(int mask, char *smask) -{ - int i = 0; - if (mask & LUA_MASKCALL) smask[i++] = 'c'; - if (mask & LUA_MASKRET) smask[i++] = 'r'; - if (mask & LUA_MASKLINE) smask[i++] = 'l'; - smask[i] = '\0'; - return smask; -} - -LJLIB_CF(debug_sethook) -{ - int arg, mask, count; - lua_Hook func; - (void)getthread(L, &arg); - if (lua_isnoneornil(L, arg+1)) { - lua_settop(L, arg+1); - func = NULL; mask = 0; count = 0; /* turn off hooks */ - } else { - const char *smask = luaL_checkstring(L, arg+2); - luaL_checktype(L, arg+1, LUA_TFUNCTION); - count = luaL_optint(L, arg+3, 0); - func = hookf; mask = makemask(smask, count); - } - lua_pushlightuserdata(L, (void *)&KEY_HOOK); - lua_pushvalue(L, arg+1); - lua_rawset(L, LUA_REGISTRYINDEX); - lua_sethook(L, func, mask, count); - return 0; -} - -LJLIB_CF(debug_gethook) -{ - char buff[5]; - int mask = lua_gethookmask(L); - lua_Hook hook = lua_gethook(L); - if (hook != NULL && hook != hookf) { /* external hook? */ - lua_pushliteral(L, "external hook"); - } else { - lua_pushlightuserdata(L, (void *)&KEY_HOOK); - lua_rawget(L, LUA_REGISTRYINDEX); /* get hook */ - } - lua_pushstring(L, unmakemask(mask, buff)); - lua_pushinteger(L, lua_gethookcount(L)); - return 3; -} - -/* ------------------------------------------------------------------------ */ - -LJLIB_CF(debug_debug) -{ - for (;;) { - char buffer[250]; - fputs("lua_debug> ", stderr); - if (fgets(buffer, sizeof(buffer), stdin) == 0 || - strcmp(buffer, "cont\n") == 0) - return 0; - if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || - lua_pcall(L, 0, 0, 0)) { - fputs(lua_tostring(L, -1), stderr); - fputs("\n", stderr); - } - lua_settop(L, 0); /* remove eventual returns */ - } -} - -/* ------------------------------------------------------------------------ */ - -#define LEVELS1 12 /* size of the first part of the stack */ -#define LEVELS2 10 /* size of the second part of the stack */ - -LJLIB_CF(debug_traceback) -{ - int arg; - lua_State *L1 = getthread(L, &arg); - const char *msg = lua_tostring(L, arg+1); - if (msg == NULL && L->top > L->base+arg) - L->top = L->base+arg+1; - else - luaL_traceback(L, L1, msg, lj_lib_optint(L, arg+2, (L == L1))); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -#include "lj_libdef.h" - -LUALIB_API int luaopen_debug(lua_State *L) -{ - LJ_LIB_REG(L, LUA_DBLIBNAME, debug); - return 1; -} - diff --git a/deps/luajit/src/lib_ffi.c b/deps/luajit/src/lib_ffi.c deleted file mode 100644 index f6df39d..0000000 --- a/deps/luajit/src/lib_ffi.c +++ /dev/null @@ -1,851 +0,0 @@ -/* -** FFI library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lib_ffi_c -#define LUA_LIB - -#include - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_ctype.h" -#include "lj_cparse.h" -#include "lj_cdata.h" -#include "lj_cconv.h" -#include "lj_carith.h" -#include "lj_ccall.h" -#include "lj_ccallback.h" -#include "lj_clib.h" -#include "lj_ff.h" -#include "lj_lib.h" - -/* -- C type checks ------------------------------------------------------- */ - -/* Check first argument for a C type and returns its ID. */ -static CTypeID ffi_checkctype(lua_State *L, CTState *cts, TValue *param) -{ - TValue *o = L->base; - if (!(o < L->top)) { - err_argtype: - lj_err_argtype(L, 1, "C type"); - } - if (tvisstr(o)) { /* Parse an abstract C type declaration. */ - GCstr *s = strV(o); - CPState cp; - int errcode; - cp.L = L; - cp.cts = cts; - cp.srcname = strdata(s); - cp.p = strdata(s); - cp.param = param; - cp.mode = CPARSE_MODE_ABSTRACT|CPARSE_MODE_NOIMPLICIT; - errcode = lj_cparse(&cp); - if (errcode) lj_err_throw(L, errcode); /* Propagate errors. */ - return cp.val.id; - } else { - GCcdata *cd; - if (!tviscdata(o)) goto err_argtype; - if (param && param < L->top) lj_err_arg(L, 1, LJ_ERR_FFI_NUMPARAM); - cd = cdataV(o); - return cd->ctypeid == CTID_CTYPEID ? *(CTypeID *)cdataptr(cd) : cd->ctypeid; - } -} - -/* Check argument for C data and return it. */ -static GCcdata *ffi_checkcdata(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && tviscdata(o))) - lj_err_argt(L, narg, LUA_TCDATA); - return cdataV(o); -} - -/* Convert argument to C pointer. */ -static void *ffi_checkptr(lua_State *L, int narg, CTypeID id) -{ - CTState *cts = ctype_cts(L); - TValue *o = L->base + narg-1; - void *p; - if (o >= L->top) - lj_err_arg(L, narg, LJ_ERR_NOVAL); - lj_cconv_ct_tv(cts, ctype_get(cts, id), (uint8_t *)&p, o, CCF_ARG(narg)); - return p; -} - -/* Convert argument to int32_t. */ -static int32_t ffi_checkint(lua_State *L, int narg) -{ - CTState *cts = ctype_cts(L); - TValue *o = L->base + narg-1; - int32_t i; - if (o >= L->top) - lj_err_arg(L, narg, LJ_ERR_NOVAL); - lj_cconv_ct_tv(cts, ctype_get(cts, CTID_INT32), (uint8_t *)&i, o, - CCF_ARG(narg)); - return i; -} - -/* -- C type metamethods -------------------------------------------------- */ - -#define LJLIB_MODULE_ffi_meta - -/* Handle ctype __index/__newindex metamethods. */ -static int ffi_index_meta(lua_State *L, CTState *cts, CType *ct, MMS mm) -{ - CTypeID id = ctype_typeid(cts, ct); - cTValue *tv = lj_ctype_meta(cts, id, mm); - TValue *base = L->base; - if (!tv) { - const char *s; - err_index: - s = strdata(lj_ctype_repr(L, id, NULL)); - if (tvisstr(L->base+1)) { - lj_err_callerv(L, LJ_ERR_FFI_BADMEMBER, s, strVdata(L->base+1)); - } else { - const char *key = tviscdata(L->base+1) ? - strdata(lj_ctype_repr(L, cdataV(L->base+1)->ctypeid, NULL)) : - lj_typename(L->base+1); - lj_err_callerv(L, LJ_ERR_FFI_BADIDXW, s, key); - } - } - if (!tvisfunc(tv)) { - if (mm == MM_index) { - cTValue *o = lj_meta_tget(L, tv, base+1); - if (o) { - if (tvisnil(o)) goto err_index; - copyTV(L, L->top-1, o); - return 1; - } - } else { - TValue *o = lj_meta_tset(L, tv, base+1); - if (o) { - copyTV(L, o, base+2); - return 0; - } - } - copyTV(L, base, L->top); - tv = L->top-1; - } - return lj_meta_tailcall(L, tv); -} - -LJLIB_CF(ffi_meta___index) LJLIB_REC(cdata_index 0) -{ - CTState *cts = ctype_cts(L); - CTInfo qual = 0; - CType *ct; - uint8_t *p; - TValue *o = L->base; - if (!(o+1 < L->top && tviscdata(o))) /* Also checks for presence of key. */ - lj_err_argt(L, 1, LUA_TCDATA); - ct = lj_cdata_index(cts, cdataV(o), o+1, &p, &qual); - if ((qual & 1)) - return ffi_index_meta(L, cts, ct, MM_index); - if (lj_cdata_get(cts, ct, L->top-1, p)) - lj_gc_check(L); - return 1; -} - -LJLIB_CF(ffi_meta___newindex) LJLIB_REC(cdata_index 1) -{ - CTState *cts = ctype_cts(L); - CTInfo qual = 0; - CType *ct; - uint8_t *p; - TValue *o = L->base; - if (!(o+2 < L->top && tviscdata(o))) /* Also checks for key and value. */ - lj_err_argt(L, 1, LUA_TCDATA); - ct = lj_cdata_index(cts, cdataV(o), o+1, &p, &qual); - if ((qual & 1)) { - if ((qual & CTF_CONST)) - lj_err_caller(L, LJ_ERR_FFI_WRCONST); - return ffi_index_meta(L, cts, ct, MM_newindex); - } - lj_cdata_set(cts, ct, p, o+2, qual); - return 0; -} - -/* Common handler for cdata arithmetic. */ -static int ffi_arith(lua_State *L) -{ - MMS mm = (MMS)(curr_func(L)->c.ffid - (int)FF_ffi_meta___eq + (int)MM_eq); - return lj_carith_op(L, mm); -} - -/* The following functions must be in contiguous ORDER MM. */ -LJLIB_CF(ffi_meta___eq) LJLIB_REC(cdata_arith MM_eq) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___len) LJLIB_REC(cdata_arith MM_len) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___lt) LJLIB_REC(cdata_arith MM_lt) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___le) LJLIB_REC(cdata_arith MM_le) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___concat) LJLIB_REC(cdata_arith MM_concat) -{ - return ffi_arith(L); -} - -/* Forward declaration. */ -static int lj_cf_ffi_new(lua_State *L); - -LJLIB_CF(ffi_meta___call) LJLIB_REC(cdata_call) -{ - CTState *cts = ctype_cts(L); - GCcdata *cd = ffi_checkcdata(L, 1); - CTypeID id = cd->ctypeid; - CType *ct; - cTValue *tv; - MMS mm = MM_call; - if (cd->ctypeid == CTID_CTYPEID) { - id = *(CTypeID *)cdataptr(cd); - mm = MM_new; - } else { - int ret = lj_ccall_func(L, cd); - if (ret >= 0) - return ret; - } - /* Handle ctype __call/__new metamethod. */ - ct = ctype_raw(cts, id); - if (ctype_isptr(ct->info)) id = ctype_cid(ct->info); - tv = lj_ctype_meta(cts, id, mm); - if (tv) - return lj_meta_tailcall(L, tv); - else if (mm == MM_call) - lj_err_callerv(L, LJ_ERR_FFI_BADCALL, strdata(lj_ctype_repr(L, id, NULL))); - return lj_cf_ffi_new(L); -} - -LJLIB_CF(ffi_meta___add) LJLIB_REC(cdata_arith MM_add) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___sub) LJLIB_REC(cdata_arith MM_sub) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___mul) LJLIB_REC(cdata_arith MM_mul) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___div) LJLIB_REC(cdata_arith MM_div) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___mod) LJLIB_REC(cdata_arith MM_mod) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___pow) LJLIB_REC(cdata_arith MM_pow) -{ - return ffi_arith(L); -} - -LJLIB_CF(ffi_meta___unm) LJLIB_REC(cdata_arith MM_unm) -{ - return ffi_arith(L); -} -/* End of contiguous ORDER MM. */ - -LJLIB_CF(ffi_meta___tostring) -{ - GCcdata *cd = ffi_checkcdata(L, 1); - const char *msg = "cdata<%s>: %p"; - CTypeID id = cd->ctypeid; - void *p = cdataptr(cd); - if (id == CTID_CTYPEID) { - msg = "ctype<%s>"; - id = *(CTypeID *)p; - } else { - CTState *cts = ctype_cts(L); - CType *ct = ctype_raw(cts, id); - if (ctype_isref(ct->info)) { - p = *(void **)p; - ct = ctype_rawchild(cts, ct); - } - if (ctype_iscomplex(ct->info)) { - setstrV(L, L->top-1, lj_ctype_repr_complex(L, cdataptr(cd), ct->size)); - goto checkgc; - } else if (ct->size == 8 && ctype_isinteger(ct->info)) { - setstrV(L, L->top-1, lj_ctype_repr_int64(L, *(uint64_t *)cdataptr(cd), - (ct->info & CTF_UNSIGNED))); - goto checkgc; - } else if (ctype_isfunc(ct->info)) { - p = *(void **)p; - } else if (ctype_isenum(ct->info)) { - msg = "cdata<%s>: %d"; - p = (void *)(uintptr_t)*(uint32_t **)p; - } else { - if (ctype_isptr(ct->info)) { - p = cdata_getptr(p, ct->size); - ct = ctype_rawchild(cts, ct); - } - if (ctype_isstruct(ct->info) || ctype_isvector(ct->info)) { - /* Handle ctype __tostring metamethod. */ - cTValue *tv = lj_ctype_meta(cts, ctype_typeid(cts, ct), MM_tostring); - if (tv) - return lj_meta_tailcall(L, tv); - } - } - } - lj_str_pushf(L, msg, strdata(lj_ctype_repr(L, id, NULL)), p); -checkgc: - lj_gc_check(L); - return 1; -} - -static int ffi_pairs(lua_State *L, MMS mm) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkcdata(L, 1)->ctypeid; - CType *ct = ctype_raw(cts, id); - cTValue *tv; - if (ctype_isptr(ct->info)) id = ctype_cid(ct->info); - tv = lj_ctype_meta(cts, id, mm); - if (!tv) - lj_err_callerv(L, LJ_ERR_FFI_BADMM, strdata(lj_ctype_repr(L, id, NULL)), - strdata(mmname_str(G(L), mm))); - return lj_meta_tailcall(L, tv); -} - -LJLIB_CF(ffi_meta___pairs) -{ - return ffi_pairs(L, MM_pairs); -} - -LJLIB_CF(ffi_meta___ipairs) -{ - return ffi_pairs(L, MM_ipairs); -} - -LJLIB_PUSH("ffi") LJLIB_SET(__metatable) - -#include "lj_libdef.h" - -/* -- C library metamethods ----------------------------------------------- */ - -#define LJLIB_MODULE_ffi_clib - -/* Index C library by a name. */ -static TValue *ffi_clib_index(lua_State *L) -{ - TValue *o = L->base; - CLibrary *cl; - if (!(o < L->top && tvisudata(o) && udataV(o)->udtype == UDTYPE_FFI_CLIB)) - lj_err_argt(L, 1, LUA_TUSERDATA); - cl = (CLibrary *)uddata(udataV(o)); - if (!(o+1 < L->top && tvisstr(o+1))) - lj_err_argt(L, 2, LUA_TSTRING); - return lj_clib_index(L, cl, strV(o+1)); -} - -LJLIB_CF(ffi_clib___index) LJLIB_REC(clib_index 1) -{ - TValue *tv = ffi_clib_index(L); - if (tviscdata(tv)) { - CTState *cts = ctype_cts(L); - GCcdata *cd = cdataV(tv); - CType *s = ctype_get(cts, cd->ctypeid); - if (ctype_isextern(s->info)) { - CTypeID sid = ctype_cid(s->info); - void *sp = *(void **)cdataptr(cd); - CType *ct = ctype_raw(cts, sid); - if (lj_cconv_tv_ct(cts, ct, sid, L->top-1, sp)) - lj_gc_check(L); - return 1; - } - } - copyTV(L, L->top-1, tv); - return 1; -} - -LJLIB_CF(ffi_clib___newindex) LJLIB_REC(clib_index 0) -{ - TValue *tv = ffi_clib_index(L); - TValue *o = L->base+2; - if (o < L->top && tviscdata(tv)) { - CTState *cts = ctype_cts(L); - GCcdata *cd = cdataV(tv); - CType *d = ctype_get(cts, cd->ctypeid); - if (ctype_isextern(d->info)) { - CTInfo qual = 0; - for (;;) { /* Skip attributes and collect qualifiers. */ - d = ctype_child(cts, d); - if (!ctype_isattrib(d->info)) break; - if (ctype_attrib(d->info) == CTA_QUAL) qual |= d->size; - } - if (!((d->info|qual) & CTF_CONST)) { - lj_cconv_ct_tv(cts, d, *(void **)cdataptr(cd), o, 0); - return 0; - } - } - } - lj_err_caller(L, LJ_ERR_FFI_WRCONST); - return 0; /* unreachable */ -} - -LJLIB_CF(ffi_clib___gc) -{ - TValue *o = L->base; - if (o < L->top && tvisudata(o) && udataV(o)->udtype == UDTYPE_FFI_CLIB) - lj_clib_unload((CLibrary *)uddata(udataV(o))); - return 0; -} - -#include "lj_libdef.h" - -/* -- Callback function metamethods --------------------------------------- */ - -#define LJLIB_MODULE_ffi_callback - -static int ffi_callback_set(lua_State *L, GCfunc *fn) -{ - GCcdata *cd = ffi_checkcdata(L, 1); - CTState *cts = ctype_cts(L); - CType *ct = ctype_raw(cts, cd->ctypeid); - if (ctype_isptr(ct->info) && (LJ_32 || ct->size == 8)) { - MSize slot = lj_ccallback_ptr2slot(cts, *(void **)cdataptr(cd)); - if (slot < cts->cb.sizeid && cts->cb.cbid[slot] != 0) { - GCtab *t = cts->miscmap; - TValue *tv = lj_tab_setint(L, t, (int32_t)slot); - if (fn) { - setfuncV(L, tv, fn); - lj_gc_anybarriert(L, t); - } else { - setnilV(tv); - cts->cb.cbid[slot] = 0; - cts->cb.topid = slot < cts->cb.topid ? slot : cts->cb.topid; - } - return 0; - } - } - lj_err_caller(L, LJ_ERR_FFI_BADCBACK); - return 0; -} - -LJLIB_CF(ffi_callback_free) -{ - return ffi_callback_set(L, NULL); -} - -LJLIB_CF(ffi_callback_set) -{ - GCfunc *fn = lj_lib_checkfunc(L, 2); - return ffi_callback_set(L, fn); -} - -LJLIB_PUSH(top-1) LJLIB_SET(__index) - -#include "lj_libdef.h" - -/* -- FFI library functions ----------------------------------------------- */ - -#define LJLIB_MODULE_ffi - -LJLIB_CF(ffi_cdef) -{ - GCstr *s = lj_lib_checkstr(L, 1); - CPState cp; - int errcode; - cp.L = L; - cp.cts = ctype_cts(L); - cp.srcname = strdata(s); - cp.p = strdata(s); - cp.param = L->base+1; - cp.mode = CPARSE_MODE_MULTI|CPARSE_MODE_DIRECT; - errcode = lj_cparse(&cp); - if (errcode) lj_err_throw(L, errcode); /* Propagate errors. */ - lj_gc_check(L); - return 0; -} - -LJLIB_CF(ffi_new) LJLIB_REC(.) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, NULL); - CType *ct = ctype_raw(cts, id); - CTSize sz; - CTInfo info = lj_ctype_info(cts, id, &sz); - TValue *o = L->base+1; - GCcdata *cd; - if ((info & CTF_VLA)) { - o++; - sz = lj_ctype_vlsize(cts, ct, (CTSize)ffi_checkint(L, 2)); - } - if (sz == CTSIZE_INVALID) - lj_err_arg(L, 1, LJ_ERR_FFI_INVSIZE); - if (!(info & CTF_VLA) && ctype_align(info) <= CT_MEMALIGN) - cd = lj_cdata_new(cts, id, sz); - else - cd = lj_cdata_newv(cts, id, sz, ctype_align(info)); - setcdataV(L, o-1, cd); /* Anchor the uninitialized cdata. */ - lj_cconv_ct_init(cts, ct, sz, cdataptr(cd), - o, (MSize)(L->top - o)); /* Initialize cdata. */ - if (ctype_isstruct(ct->info)) { - /* Handle ctype __gc metamethod. Use the fast lookup here. */ - cTValue *tv = lj_tab_getinth(cts->miscmap, -(int32_t)id); - if (tv && tvistab(tv) && (tv = lj_meta_fast(L, tabV(tv), MM_gc))) { - GCtab *t = cts->finalizer; - if (gcref(t->metatable)) { - /* Add to finalizer table, if still enabled. */ - copyTV(L, lj_tab_set(L, t, o-1), tv); - lj_gc_anybarriert(L, t); - cd->marked |= LJ_GC_CDATA_FIN; - } - } - } - L->top = o; /* Only return the cdata itself. */ - lj_gc_check(L); - return 1; -} - -LJLIB_CF(ffi_cast) LJLIB_REC(ffi_new) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, NULL); - CType *d = ctype_raw(cts, id); - TValue *o = lj_lib_checkany(L, 2); - L->top = o+1; /* Make sure this is the last item on the stack. */ - if (!(ctype_isnum(d->info) || ctype_isptr(d->info) || ctype_isenum(d->info))) - lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE); - if (!(tviscdata(o) && cdataV(o)->ctypeid == id)) { - GCcdata *cd = lj_cdata_new(cts, id, d->size); - lj_cconv_ct_tv(cts, d, cdataptr(cd), o, CCF_CAST); - setcdataV(L, o, cd); - lj_gc_check(L); - } - return 1; -} - -LJLIB_CF(ffi_typeof) LJLIB_REC(.) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, L->base+1); - GCcdata *cd = lj_cdata_new(cts, CTID_CTYPEID, 4); - *(CTypeID *)cdataptr(cd) = id; - setcdataV(L, L->top-1, cd); - lj_gc_check(L); - return 1; -} - -LJLIB_CF(ffi_istype) LJLIB_REC(.) -{ - CTState *cts = ctype_cts(L); - CTypeID id1 = ffi_checkctype(L, cts, NULL); - TValue *o = lj_lib_checkany(L, 2); - int b = 0; - if (tviscdata(o)) { - GCcdata *cd = cdataV(o); - CTypeID id2 = cd->ctypeid == CTID_CTYPEID ? *(CTypeID *)cdataptr(cd) : - cd->ctypeid; - CType *ct1 = lj_ctype_rawref(cts, id1); - CType *ct2 = lj_ctype_rawref(cts, id2); - if (ct1 == ct2) { - b = 1; - } else if (ctype_type(ct1->info) == ctype_type(ct2->info) && - ct1->size == ct2->size) { - if (ctype_ispointer(ct1->info)) - b = lj_cconv_compatptr(cts, ct1, ct2, CCF_IGNQUAL); - else if (ctype_isnum(ct1->info) || ctype_isvoid(ct1->info)) - b = (((ct1->info ^ ct2->info) & ~(CTF_QUAL|CTF_LONG)) == 0); - } else if (ctype_isstruct(ct1->info) && ctype_isptr(ct2->info) && - ct1 == ctype_rawchild(cts, ct2)) { - b = 1; - } - } - setboolV(L->top-1, b); - setboolV(&G(L)->tmptv2, b); /* Remember for trace recorder. */ - return 1; -} - -LJLIB_CF(ffi_sizeof) LJLIB_REC(ffi_xof FF_ffi_sizeof) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, NULL); - CTSize sz; - if (LJ_UNLIKELY(tviscdata(L->base) && cdataisv(cdataV(L->base)))) { - sz = cdatavlen(cdataV(L->base)); - } else { - CType *ct = lj_ctype_rawref(cts, id); - if (ctype_isvltype(ct->info)) - sz = lj_ctype_vlsize(cts, ct, (CTSize)ffi_checkint(L, 2)); - else - sz = ctype_hassize(ct->info) ? ct->size : CTSIZE_INVALID; - if (LJ_UNLIKELY(sz == CTSIZE_INVALID)) { - setnilV(L->top-1); - return 1; - } - } - setintV(L->top-1, (int32_t)sz); - return 1; -} - -LJLIB_CF(ffi_alignof) LJLIB_REC(ffi_xof FF_ffi_alignof) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, NULL); - CTSize sz = 0; - CTInfo info = lj_ctype_info(cts, id, &sz); - setintV(L->top-1, 1 << ctype_align(info)); - return 1; -} - -LJLIB_CF(ffi_offsetof) LJLIB_REC(ffi_xof FF_ffi_offsetof) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, NULL); - GCstr *name = lj_lib_checkstr(L, 2); - CType *ct = lj_ctype_rawref(cts, id); - CTSize ofs; - if (ctype_isstruct(ct->info) && ct->size != CTSIZE_INVALID) { - CType *fct = lj_ctype_getfield(cts, ct, name, &ofs); - if (fct) { - setintV(L->top-1, ofs); - if (ctype_isfield(fct->info)) { - return 1; - } else if (ctype_isbitfield(fct->info)) { - setintV(L->top++, ctype_bitpos(fct->info)); - setintV(L->top++, ctype_bitbsz(fct->info)); - return 3; - } - } - } - return 0; -} - -LJLIB_CF(ffi_errno) LJLIB_REC(.) -{ - int err = errno; - if (L->top > L->base) - errno = ffi_checkint(L, 1); - setintV(L->top++, err); - return 1; -} - -LJLIB_CF(ffi_string) LJLIB_REC(.) -{ - CTState *cts = ctype_cts(L); - TValue *o = lj_lib_checkany(L, 1); - const char *p; - size_t len; - if (o+1 < L->top && !tvisnil(o+1)) { - len = (size_t)ffi_checkint(L, 2); - lj_cconv_ct_tv(cts, ctype_get(cts, CTID_P_CVOID), (uint8_t *)&p, o, - CCF_ARG(1)); - } else { - lj_cconv_ct_tv(cts, ctype_get(cts, CTID_P_CCHAR), (uint8_t *)&p, o, - CCF_ARG(1)); - len = strlen(p); - } - L->top = o+1; /* Make sure this is the last item on the stack. */ - setstrV(L, o, lj_str_new(L, p, len)); - lj_gc_check(L); - return 1; -} - -LJLIB_CF(ffi_copy) LJLIB_REC(.) -{ - void *dp = ffi_checkptr(L, 1, CTID_P_VOID); - void *sp = ffi_checkptr(L, 2, CTID_P_CVOID); - TValue *o = L->base+1; - CTSize len; - if (tvisstr(o) && o+1 >= L->top) - len = strV(o)->len+1; /* Copy Lua string including trailing '\0'. */ - else - len = (CTSize)ffi_checkint(L, 3); - memcpy(dp, sp, len); - return 0; -} - -LJLIB_CF(ffi_fill) LJLIB_REC(.) -{ - void *dp = ffi_checkptr(L, 1, CTID_P_VOID); - CTSize len = (CTSize)ffi_checkint(L, 2); - int32_t fill = 0; - if (L->base+2 < L->top && !tvisnil(L->base+2)) fill = ffi_checkint(L, 3); - memset(dp, fill, len); - return 0; -} - -#define H_(le, be) LJ_ENDIAN_SELECT(0x##le, 0x##be) - -/* Test ABI string. */ -LJLIB_CF(ffi_abi) LJLIB_REC(.) -{ - GCstr *s = lj_lib_checkstr(L, 1); - int b = 0; - switch (s->hash) { -#if LJ_64 - case H_(849858eb,ad35fd06): b = 1; break; /* 64bit */ -#else - case H_(662d3c79,d0e22477): b = 1; break; /* 32bit */ -#endif -#if LJ_ARCH_HASFPU - case H_(e33ee463,e33ee463): b = 1; break; /* fpu */ -#endif -#if LJ_ABI_SOFTFP - case H_(61211a23,c2e8c81c): b = 1; break; /* softfp */ -#else - case H_(539417a8,8ce0812f): b = 1; break; /* hardfp */ -#endif -#if LJ_ABI_EABI - case H_(2182df8f,f2ed1152): b = 1; break; /* eabi */ -#endif -#if LJ_ABI_WIN - case H_(4ab624a8,4ab624a8): b = 1; break; /* win */ -#endif - case H_(3af93066,1f001464): b = 1; break; /* le/be */ - default: - break; - } - setboolV(L->top-1, b); - setboolV(&G(L)->tmptv2, b); /* Remember for trace recorder. */ - return 1; -} - -#undef H_ - -LJLIB_PUSH(top-8) LJLIB_SET(!) /* Store reference to miscmap table. */ - -LJLIB_CF(ffi_metatype) -{ - CTState *cts = ctype_cts(L); - CTypeID id = ffi_checkctype(L, cts, NULL); - GCtab *mt = lj_lib_checktab(L, 2); - GCtab *t = cts->miscmap; - CType *ct = ctype_get(cts, id); /* Only allow raw types. */ - TValue *tv; - GCcdata *cd; - if (!(ctype_isstruct(ct->info) || ctype_iscomplex(ct->info) || - ctype_isvector(ct->info))) - lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE); - tv = lj_tab_setinth(L, t, -(int32_t)id); - if (!tvisnil(tv)) - lj_err_caller(L, LJ_ERR_PROTMT); - settabV(L, tv, mt); - lj_gc_anybarriert(L, t); - cd = lj_cdata_new(cts, CTID_CTYPEID, 4); - *(CTypeID *)cdataptr(cd) = id; - setcdataV(L, L->top-1, cd); - lj_gc_check(L); - return 1; -} - -LJLIB_PUSH(top-7) LJLIB_SET(!) /* Store reference to finalizer table. */ - -LJLIB_CF(ffi_gc) LJLIB_REC(.) -{ - GCcdata *cd = ffi_checkcdata(L, 1); - TValue *fin = lj_lib_checkany(L, 2); - CTState *cts = ctype_cts(L); - GCtab *t = cts->finalizer; - CType *ct = ctype_raw(cts, cd->ctypeid); - if (!(ctype_isptr(ct->info) || ctype_isstruct(ct->info) || - ctype_isrefarray(ct->info))) - lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE); - if (gcref(t->metatable)) { /* Update finalizer table, if still enabled. */ - copyTV(L, lj_tab_set(L, t, L->base), fin); - lj_gc_anybarriert(L, t); - if (!tvisnil(fin)) - cd->marked |= LJ_GC_CDATA_FIN; - else - cd->marked &= ~LJ_GC_CDATA_FIN; - } - L->top = L->base+1; /* Pass through the cdata object. */ - return 1; -} - -LJLIB_PUSH(top-5) LJLIB_SET(!) /* Store clib metatable in func environment. */ - -LJLIB_CF(ffi_load) -{ - GCstr *name = lj_lib_checkstr(L, 1); - int global = (L->base+1 < L->top && tvistruecond(L->base+1)); - lj_clib_load(L, tabref(curr_func(L)->c.env), name, global); - return 1; -} - -LJLIB_PUSH(top-4) LJLIB_SET(C) -LJLIB_PUSH(top-3) LJLIB_SET(os) -LJLIB_PUSH(top-2) LJLIB_SET(arch) - -#include "lj_libdef.h" - -/* ------------------------------------------------------------------------ */ - -/* Create special weak-keyed finalizer table. */ -static GCtab *ffi_finalizer(lua_State *L) -{ - /* NOBARRIER: The table is new (marked white). */ - GCtab *t = lj_tab_new(L, 0, 1); - settabV(L, L->top++, t); - setgcref(t->metatable, obj2gco(t)); - setstrV(L, lj_tab_setstr(L, t, lj_str_newlit(L, "__mode")), - lj_str_newlit(L, "K")); - t->nomm = (uint8_t)(~(1u<top-1); - lj_gc_anybarriert(L, t); - } -} - -LUALIB_API int luaopen_ffi(lua_State *L) -{ - CTState *cts = lj_ctype_init(L); - settabV(L, L->top++, (cts->miscmap = lj_tab_new(L, 0, 1))); - cts->finalizer = ffi_finalizer(L); - LJ_LIB_REG(L, NULL, ffi_meta); - /* NOBARRIER: basemt is a GC root. */ - setgcref(basemt_it(G(L), LJ_TCDATA), obj2gco(tabV(L->top-1))); - LJ_LIB_REG(L, NULL, ffi_clib); - LJ_LIB_REG(L, NULL, ffi_callback); - /* NOBARRIER: the key is new and lj_tab_newkey() handles the barrier. */ - settabV(L, lj_tab_setstr(L, cts->miscmap, &cts->g->strempty), tabV(L->top-1)); - L->top--; - lj_clib_default(L, tabV(L->top-1)); /* Create ffi.C default namespace. */ - lua_pushliteral(L, LJ_OS_NAME); - lua_pushliteral(L, LJ_ARCH_NAME); - LJ_LIB_REG(L, NULL, ffi); /* Note: no global "ffi" created! */ - ffi_register_module(L); - return 1; -} - -#endif diff --git a/deps/luajit/src/lib_init.c b/deps/luajit/src/lib_init.c deleted file mode 100644 index 85c194a..0000000 --- a/deps/luajit/src/lib_init.c +++ /dev/null @@ -1,55 +0,0 @@ -/* -** Library initialization. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major parts taken verbatim from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lib_init_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_arch.h" - -static const luaL_Reg lj_lib_load[] = { - { "", luaopen_base }, - { LUA_LOADLIBNAME, luaopen_package }, - { LUA_TABLIBNAME, luaopen_table }, - { LUA_IOLIBNAME, luaopen_io }, - { LUA_OSLIBNAME, luaopen_os }, - { LUA_STRLIBNAME, luaopen_string }, - { LUA_MATHLIBNAME, luaopen_math }, - { LUA_DBLIBNAME, luaopen_debug }, - { LUA_BITLIBNAME, luaopen_bit }, - { LUA_JITLIBNAME, luaopen_jit }, - { NULL, NULL } -}; - -static const luaL_Reg lj_lib_preload[] = { -#if LJ_HASFFI - { LUA_FFILIBNAME, luaopen_ffi }, -#endif - { NULL, NULL } -}; - -LUALIB_API void luaL_openlibs(lua_State *L) -{ - const luaL_Reg *lib; - for (lib = lj_lib_load; lib->func; lib++) { - lua_pushcfunction(L, lib->func); - lua_pushstring(L, lib->name); - lua_call(L, 1, 0); - } - luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", - sizeof(lj_lib_preload)/sizeof(lj_lib_preload[0])-1); - for (lib = lj_lib_preload; lib->func; lib++) { - lua_pushcfunction(L, lib->func); - lua_setfield(L, -2, lib->name); - } - lua_pop(L, 1); -} - diff --git a/deps/luajit/src/lib_io.c b/deps/luajit/src/lib_io.c deleted file mode 100644 index 037aa28..0000000 --- a/deps/luajit/src/lib_io.c +++ /dev/null @@ -1,539 +0,0 @@ -/* -** I/O library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2011 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include -#include - -#define lib_io_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_state.h" -#include "lj_ff.h" -#include "lj_lib.h" - -/* Userdata payload for I/O file. */ -typedef struct IOFileUD { - FILE *fp; /* File handle. */ - uint32_t type; /* File type. */ -} IOFileUD; - -#define IOFILE_TYPE_FILE 0 /* Regular file. */ -#define IOFILE_TYPE_PIPE 1 /* Pipe. */ -#define IOFILE_TYPE_STDF 2 /* Standard file handle. */ -#define IOFILE_TYPE_MASK 3 - -#define IOFILE_FLAG_CLOSE 4 /* Close after io.lines() iterator. */ - -#define IOSTDF_UD(L, id) (&gcref(G(L)->gcroot[(id)])->ud) -#define IOSTDF_IOF(L, id) ((IOFileUD *)uddata(IOSTDF_UD(L, (id)))) - -/* -- Open/close helpers -------------------------------------------------- */ - -static IOFileUD *io_tofilep(lua_State *L) -{ - if (!(L->base < L->top && tvisudata(L->base) && - udataV(L->base)->udtype == UDTYPE_IO_FILE)) - lj_err_argtype(L, 1, "FILE*"); - return (IOFileUD *)uddata(udataV(L->base)); -} - -static IOFileUD *io_tofile(lua_State *L) -{ - IOFileUD *iof = io_tofilep(L); - if (iof->fp == NULL) - lj_err_caller(L, LJ_ERR_IOCLFL); - return iof; -} - -static FILE *io_stdfile(lua_State *L, ptrdiff_t id) -{ - IOFileUD *iof = IOSTDF_IOF(L, id); - if (iof->fp == NULL) - lj_err_caller(L, LJ_ERR_IOSTDCL); - return iof->fp; -} - -static IOFileUD *io_file_new(lua_State *L) -{ - IOFileUD *iof = (IOFileUD *)lua_newuserdata(L, sizeof(IOFileUD)); - GCudata *ud = udataV(L->top-1); - ud->udtype = UDTYPE_IO_FILE; - /* NOBARRIER: The GCudata is new (marked white). */ - setgcrefr(ud->metatable, curr_func(L)->c.env); - iof->fp = NULL; - iof->type = IOFILE_TYPE_FILE; - return iof; -} - -static IOFileUD *io_file_open(lua_State *L, const char *mode) -{ - const char *fname = strdata(lj_lib_checkstr(L, 1)); - IOFileUD *iof = io_file_new(L); - iof->fp = fopen(fname, mode); - if (iof->fp == NULL) - luaL_argerror(L, 1, lj_str_pushf(L, "%s: %s", fname, strerror(errno))); - return iof; -} - -static int io_file_close(lua_State *L, IOFileUD *iof) -{ - int ok; - if ((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_FILE) { - ok = (fclose(iof->fp) == 0); - } else if ((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_PIPE) { - int stat = -1; -#if LJ_TARGET_POSIX - stat = pclose(iof->fp); -#elif LJ_TARGET_WINDOWS - stat = _pclose(iof->fp); -#else - lua_assert(0); - return 0; -#endif -#if LJ_52 - iof->fp = NULL; - return luaL_execresult(L, stat); -#else - ok = (stat != -1); -#endif - } else { - lua_assert((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_STDF); - setnilV(L->top++); - lua_pushliteral(L, "cannot close standard file"); - return 2; - } - iof->fp = NULL; - return luaL_fileresult(L, ok, NULL); -} - -/* -- Read/write helpers -------------------------------------------------- */ - -static int io_file_readnum(lua_State *L, FILE *fp) -{ - lua_Number d; - if (fscanf(fp, LUA_NUMBER_SCAN, &d) == 1) { - if (LJ_DUALNUM) { - int32_t i = lj_num2int(d); - if (d == (lua_Number)i && !tvismzero((cTValue *)&d)) { - setintV(L->top++, i); - return 1; - } - } - setnumV(L->top++, d); - return 1; - } else { - setnilV(L->top++); - return 0; - } -} - -static int io_file_readline(lua_State *L, FILE *fp, MSize chop) -{ - MSize m = LUAL_BUFFERSIZE, n = 0, ok = 0; - char *buf; - for (;;) { - buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); - if (fgets(buf+n, m-n, fp) == NULL) break; - n += (MSize)strlen(buf+n); - ok |= n; - if (n && buf[n-1] == '\n') { n -= chop; break; } - if (n >= m - 64) m += m; - } - setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); - lj_gc_check(L); - return (int)ok; -} - -static void io_file_readall(lua_State *L, FILE *fp) -{ - MSize m, n; - for (m = LUAL_BUFFERSIZE, n = 0; ; m += m) { - char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); - n += (MSize)fread(buf+n, 1, m-n, fp); - if (n != m) { - setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); - lj_gc_check(L); - return; - } - } -} - -static int io_file_readlen(lua_State *L, FILE *fp, MSize m) -{ - if (m) { - char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); - MSize n = (MSize)fread(buf, 1, m, fp); - setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); - lj_gc_check(L); - return (n > 0 || m == 0); - } else { - int c = getc(fp); - ungetc(c, fp); - setstrV(L, L->top++, &G(L)->strempty); - return (c != EOF); - } -} - -static int io_file_read(lua_State *L, FILE *fp, int start) -{ - int ok, n, nargs = (int)(L->top - L->base) - start; - clearerr(fp); - if (nargs == 0) { - ok = io_file_readline(L, fp, 1); - n = start+1; /* Return 1 result. */ - } else { - /* The results plus the buffers go on top of the args. */ - luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); - ok = 1; - for (n = start; nargs-- && ok; n++) { - if (tvisstr(L->base+n)) { - const char *p = strVdata(L->base+n); - if (p[0] != '*') - lj_err_arg(L, n+1, LJ_ERR_INVOPT); - if (p[1] == 'n') - ok = io_file_readnum(L, fp); - else if ((p[1] & ~0x20) == 'L') - ok = io_file_readline(L, fp, (p[1] == 'l')); - else if (p[1] == 'a') - io_file_readall(L, fp); - else - lj_err_arg(L, n+1, LJ_ERR_INVFMT); - } else if (tvisnumber(L->base+n)) { - ok = io_file_readlen(L, fp, (MSize)lj_lib_checkint(L, n+1)); - } else { - lj_err_arg(L, n+1, LJ_ERR_INVOPT); - } - } - } - if (ferror(fp)) - return luaL_fileresult(L, 0, NULL); - if (!ok) - setnilV(L->top-1); /* Replace last result with nil. */ - return n - start; -} - -static int io_file_write(lua_State *L, FILE *fp, int start) -{ - cTValue *tv; - int status = 1; - for (tv = L->base+start; tv < L->top; tv++) { - if (tvisstr(tv)) { - MSize len = strV(tv)->len; - status = status && (fwrite(strVdata(tv), 1, len, fp) == len); - } else if (tvisint(tv)) { - char buf[LJ_STR_INTBUF]; - char *p = lj_str_bufint(buf, intV(tv)); - size_t len = (size_t)(buf+LJ_STR_INTBUF-p); - status = status && (fwrite(p, 1, len, fp) == len); - } else if (tvisnum(tv)) { - status = status && (fprintf(fp, LUA_NUMBER_FMT, numV(tv)) > 0); - } else { - lj_err_argt(L, (int)(tv - L->base) + 1, LUA_TSTRING); - } - } - if (LJ_52 && status) { - L->top = L->base+1; - if (start == 0) - setudataV(L, L->base, IOSTDF_UD(L, GCROOT_IO_OUTPUT)); - return 1; - } - return luaL_fileresult(L, status, NULL); -} - -static int io_file_iter(lua_State *L) -{ - GCfunc *fn = curr_func(L); - IOFileUD *iof = uddata(udataV(&fn->c.upvalue[0])); - int n = fn->c.nupvalues - 1; - if (iof->fp == NULL) - lj_err_caller(L, LJ_ERR_IOCLFL); - L->top = L->base; - if (n) { /* Copy upvalues with options to stack. */ - if (n > LUAI_MAXCSTACK) - lj_err_caller(L, LJ_ERR_STKOV); - lj_state_checkstack(L, (MSize)n); - memcpy(L->top, &fn->c.upvalue[1], n*sizeof(TValue)); - L->top += n; - } - n = io_file_read(L, iof->fp, 0); - if (ferror(iof->fp)) - lj_err_callermsg(L, strVdata(L->top-2)); - if (tvisnil(L->base) && (iof->type & IOFILE_FLAG_CLOSE)) { - io_file_close(L, iof); /* Return values are ignored. */ - return 0; - } - return n; -} - -/* -- I/O file methods ---------------------------------------------------- */ - -#define LJLIB_MODULE_io_method - -LJLIB_CF(io_method_close) -{ - IOFileUD *iof = L->base < L->top ? io_tofile(L) : - IOSTDF_IOF(L, GCROOT_IO_OUTPUT); - return io_file_close(L, iof); -} - -LJLIB_CF(io_method_read) -{ - return io_file_read(L, io_tofile(L)->fp, 1); -} - -LJLIB_CF(io_method_write) LJLIB_REC(io_write 0) -{ - return io_file_write(L, io_tofile(L)->fp, 1); -} - -LJLIB_CF(io_method_flush) LJLIB_REC(io_flush 0) -{ - return luaL_fileresult(L, fflush(io_tofile(L)->fp) == 0, NULL); -} - -LJLIB_CF(io_method_seek) -{ - FILE *fp = io_tofile(L)->fp; - int opt = lj_lib_checkopt(L, 2, 1, "\3set\3cur\3end"); - int64_t ofs = 0; - cTValue *o; - int res; - if (opt == 0) opt = SEEK_SET; - else if (opt == 1) opt = SEEK_CUR; - else if (opt == 2) opt = SEEK_END; - o = L->base+2; - if (o < L->top) { - if (tvisint(o)) - ofs = (int64_t)intV(o); - else if (tvisnum(o)) - ofs = (int64_t)numV(o); - else if (!tvisnil(o)) - lj_err_argt(L, 3, LUA_TNUMBER); - } -#if LJ_TARGET_POSIX - res = fseeko(fp, ofs, opt); -#elif _MSC_VER >= 1400 - res = _fseeki64(fp, ofs, opt); -#elif defined(__MINGW32__) - res = fseeko64(fp, ofs, opt); -#else - res = fseek(fp, (long)ofs, opt); -#endif - if (res) - return luaL_fileresult(L, 0, NULL); -#if LJ_TARGET_POSIX - ofs = ftello(fp); -#elif _MSC_VER >= 1400 - ofs = _ftelli64(fp); -#elif defined(__MINGW32__) - ofs = ftello64(fp); -#else - ofs = (int64_t)ftell(fp); -#endif - setint64V(L->top-1, ofs); - return 1; -} - -LJLIB_CF(io_method_setvbuf) -{ - FILE *fp = io_tofile(L)->fp; - int opt = lj_lib_checkopt(L, 2, -1, "\4full\4line\2no"); - size_t sz = (size_t)lj_lib_optint(L, 3, LUAL_BUFFERSIZE); - if (opt == 0) opt = _IOFBF; - else if (opt == 1) opt = _IOLBF; - else if (opt == 2) opt = _IONBF; - return luaL_fileresult(L, setvbuf(fp, NULL, opt, sz) == 0, NULL); -} - -LJLIB_CF(io_method_lines) -{ - io_tofile(L); - lua_pushcclosure(L, io_file_iter, (int)(L->top - L->base)); - return 1; -} - -LJLIB_CF(io_method___gc) -{ - IOFileUD *iof = io_tofilep(L); - if (iof->fp != NULL && (iof->type & IOFILE_TYPE_MASK) != IOFILE_TYPE_STDF) - io_file_close(L, iof); - return 0; -} - -LJLIB_CF(io_method___tostring) -{ - IOFileUD *iof = io_tofilep(L); - if (iof->fp != NULL) - lua_pushfstring(L, "file (%p)", iof->fp); - else - lua_pushliteral(L, "file (closed)"); - return 1; -} - -LJLIB_PUSH(top-1) LJLIB_SET(__index) - -#include "lj_libdef.h" - -/* -- I/O library functions ----------------------------------------------- */ - -#define LJLIB_MODULE_io - -LJLIB_PUSH(top-2) LJLIB_SET(!) /* Set environment. */ - -LJLIB_CF(io_open) -{ - const char *fname = strdata(lj_lib_checkstr(L, 1)); - GCstr *s = lj_lib_optstr(L, 2); - const char *mode = s ? strdata(s) : "r"; - IOFileUD *iof = io_file_new(L); - iof->fp = fopen(fname, mode); - return iof->fp != NULL ? 1 : luaL_fileresult(L, 0, fname); -} - -LJLIB_CF(io_popen) -{ -#if LJ_TARGET_POSIX || LJ_TARGET_WINDOWS - const char *fname = strdata(lj_lib_checkstr(L, 1)); - GCstr *s = lj_lib_optstr(L, 2); - const char *mode = s ? strdata(s) : "r"; - IOFileUD *iof = io_file_new(L); - iof->type = IOFILE_TYPE_PIPE; -#if LJ_TARGET_POSIX - fflush(NULL); - iof->fp = popen(fname, mode); -#else - iof->fp = _popen(fname, mode); -#endif - return iof->fp != NULL ? 1 : luaL_fileresult(L, 0, fname); -#else - return luaL_error(L, LUA_QL("popen") " not supported"); -#endif -} - -LJLIB_CF(io_tmpfile) -{ - IOFileUD *iof = io_file_new(L); -#if LJ_TARGET_PS3 || LJ_TARGET_PS4 || LJ_TARGET_PSVITA - iof->fp = NULL; errno = ENOSYS; -#else - iof->fp = tmpfile(); -#endif - return iof->fp != NULL ? 1 : luaL_fileresult(L, 0, NULL); -} - -LJLIB_CF(io_close) -{ - return lj_cf_io_method_close(L); -} - -LJLIB_CF(io_read) -{ - return io_file_read(L, io_stdfile(L, GCROOT_IO_INPUT), 0); -} - -LJLIB_CF(io_write) LJLIB_REC(io_write GCROOT_IO_OUTPUT) -{ - return io_file_write(L, io_stdfile(L, GCROOT_IO_OUTPUT), 0); -} - -LJLIB_CF(io_flush) LJLIB_REC(io_flush GCROOT_IO_OUTPUT) -{ - return luaL_fileresult(L, fflush(io_stdfile(L, GCROOT_IO_OUTPUT)) == 0, NULL); -} - -static int io_std_getset(lua_State *L, ptrdiff_t id, const char *mode) -{ - if (L->base < L->top && !tvisnil(L->base)) { - if (tvisudata(L->base)) { - io_tofile(L); - L->top = L->base+1; - } else { - io_file_open(L, mode); - } - /* NOBARRIER: The standard I/O handles are GC roots. */ - setgcref(G(L)->gcroot[id], gcV(L->top-1)); - } else { - setudataV(L, L->top++, IOSTDF_UD(L, id)); - } - return 1; -} - -LJLIB_CF(io_input) -{ - return io_std_getset(L, GCROOT_IO_INPUT, "r"); -} - -LJLIB_CF(io_output) -{ - return io_std_getset(L, GCROOT_IO_OUTPUT, "w"); -} - -LJLIB_CF(io_lines) -{ - if (L->base == L->top) setnilV(L->top++); - if (!tvisnil(L->base)) { /* io.lines(fname) */ - IOFileUD *iof = io_file_open(L, "r"); - iof->type = IOFILE_TYPE_FILE|IOFILE_FLAG_CLOSE; - L->top--; - setudataV(L, L->base, udataV(L->top)); - } else { /* io.lines() iterates over stdin. */ - setudataV(L, L->base, IOSTDF_UD(L, GCROOT_IO_INPUT)); - } - lua_pushcclosure(L, io_file_iter, (int)(L->top - L->base)); - return 1; -} - -LJLIB_CF(io_type) -{ - cTValue *o = lj_lib_checkany(L, 1); - if (!(tvisudata(o) && udataV(o)->udtype == UDTYPE_IO_FILE)) - setnilV(L->top++); - else if (((IOFileUD *)uddata(udataV(o)))->fp != NULL) - lua_pushliteral(L, "file"); - else - lua_pushliteral(L, "closed file"); - return 1; -} - -#include "lj_libdef.h" - -/* ------------------------------------------------------------------------ */ - -static GCobj *io_std_new(lua_State *L, FILE *fp, const char *name) -{ - IOFileUD *iof = (IOFileUD *)lua_newuserdata(L, sizeof(IOFileUD)); - GCudata *ud = udataV(L->top-1); - ud->udtype = UDTYPE_IO_FILE; - /* NOBARRIER: The GCudata is new (marked white). */ - setgcref(ud->metatable, gcV(L->top-3)); - iof->fp = fp; - iof->type = IOFILE_TYPE_STDF; - lua_setfield(L, -2, name); - return obj2gco(ud); -} - -LUALIB_API int luaopen_io(lua_State *L) -{ - LJ_LIB_REG(L, NULL, io_method); - copyTV(L, L->top, L->top-1); L->top++; - lua_setfield(L, LUA_REGISTRYINDEX, LUA_FILEHANDLE); - LJ_LIB_REG(L, LUA_IOLIBNAME, io); - setgcref(G(L)->gcroot[GCROOT_IO_INPUT], io_std_new(L, stdin, "stdin")); - setgcref(G(L)->gcroot[GCROOT_IO_OUTPUT], io_std_new(L, stdout, "stdout")); - io_std_new(L, stderr, "stderr"); - return 1; -} - diff --git a/deps/luajit/src/lib_jit.c b/deps/luajit/src/lib_jit.c deleted file mode 100644 index 96525fa..0000000 --- a/deps/luajit/src/lib_jit.c +++ /dev/null @@ -1,663 +0,0 @@ -/* -** JIT library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lib_jit_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_arch.h" -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_bc.h" -#if LJ_HASJIT -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_target.h" -#endif -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_vmevent.h" -#include "lj_lib.h" - -#include "luajit.h" - -/* -- jit.* functions ----------------------------------------------------- */ - -#define LJLIB_MODULE_jit - -static int setjitmode(lua_State *L, int mode) -{ - int idx = 0; - if (L->base == L->top || tvisnil(L->base)) { /* jit.on/off/flush([nil]) */ - mode |= LUAJIT_MODE_ENGINE; - } else { - /* jit.on/off/flush(func|proto, nil|true|false) */ - if (tvisfunc(L->base) || tvisproto(L->base)) - idx = 1; - else if (!tvistrue(L->base)) /* jit.on/off/flush(true, nil|true|false) */ - goto err; - if (L->base+1 < L->top && tvisbool(L->base+1)) - mode |= boolV(L->base+1) ? LUAJIT_MODE_ALLFUNC : LUAJIT_MODE_ALLSUBFUNC; - else - mode |= LUAJIT_MODE_FUNC; - } - if (luaJIT_setmode(L, idx, mode) != 1) { - if ((mode & LUAJIT_MODE_MASK) == LUAJIT_MODE_ENGINE) - lj_err_caller(L, LJ_ERR_NOJIT); - err: - lj_err_argt(L, 1, LUA_TFUNCTION); - } - return 0; -} - -LJLIB_CF(jit_on) -{ - return setjitmode(L, LUAJIT_MODE_ON); -} - -LJLIB_CF(jit_off) -{ - return setjitmode(L, LUAJIT_MODE_OFF); -} - -LJLIB_CF(jit_flush) -{ -#if LJ_HASJIT - if (L->base < L->top && tvisnumber(L->base)) { - int traceno = lj_lib_checkint(L, 1); - luaJIT_setmode(L, traceno, LUAJIT_MODE_FLUSH|LUAJIT_MODE_TRACE); - return 0; - } -#endif - return setjitmode(L, LUAJIT_MODE_FLUSH); -} - -#if LJ_HASJIT -/* Push a string for every flag bit that is set. */ -static void flagbits_to_strings(lua_State *L, uint32_t flags, uint32_t base, - const char *str) -{ - for (; *str; base <<= 1, str += 1+*str) - if (flags & base) - setstrV(L, L->top++, lj_str_new(L, str+1, *(uint8_t *)str)); -} -#endif - -LJLIB_CF(jit_status) -{ -#if LJ_HASJIT - jit_State *J = L2J(L); - L->top = L->base; - setboolV(L->top++, (J->flags & JIT_F_ON) ? 1 : 0); - flagbits_to_strings(L, J->flags, JIT_F_CPU_FIRST, JIT_F_CPUSTRING); - flagbits_to_strings(L, J->flags, JIT_F_OPT_FIRST, JIT_F_OPTSTRING); - return (int)(L->top - L->base); -#else - setboolV(L->top++, 0); - return 1; -#endif -} - -LJLIB_CF(jit_attach) -{ -#ifdef LUAJIT_DISABLE_VMEVENT - luaL_error(L, "vmevent API disabled"); -#else - GCfunc *fn = lj_lib_checkfunc(L, 1); - GCstr *s = lj_lib_optstr(L, 2); - luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE); - if (s) { /* Attach to given event. */ - const uint8_t *p = (const uint8_t *)strdata(s); - uint32_t h = s->len; - while (*p) h = h ^ (lj_rol(h, 6) + *p++); - lua_pushvalue(L, 1); - lua_rawseti(L, -2, VMEVENT_HASHIDX(h)); - G(L)->vmevmask = VMEVENT_NOCACHE; /* Invalidate cache. */ - } else { /* Detach if no event given. */ - setnilV(L->top++); - while (lua_next(L, -2)) { - L->top--; - if (tvisfunc(L->top) && funcV(L->top) == fn) { - setnilV(lj_tab_set(L, tabV(L->top-2), L->top-1)); - } - } - } -#endif - return 0; -} - -LJLIB_PUSH(top-5) LJLIB_SET(os) -LJLIB_PUSH(top-4) LJLIB_SET(arch) -LJLIB_PUSH(top-3) LJLIB_SET(version_num) -LJLIB_PUSH(top-2) LJLIB_SET(version) - -#include "lj_libdef.h" - -/* -- jit.util.* functions ------------------------------------------------ */ - -#define LJLIB_MODULE_jit_util - -/* -- Reflection API for Lua functions ------------------------------------ */ - -/* Return prototype of first argument (Lua function or prototype object) */ -static GCproto *check_Lproto(lua_State *L, int nolua) -{ - TValue *o = L->base; - if (L->top > o) { - if (tvisproto(o)) { - return protoV(o); - } else if (tvisfunc(o)) { - if (isluafunc(funcV(o))) - return funcproto(funcV(o)); - else if (nolua) - return NULL; - } - } - lj_err_argt(L, 1, LUA_TFUNCTION); - return NULL; /* unreachable */ -} - -static void setintfield(lua_State *L, GCtab *t, const char *name, int32_t val) -{ - setintV(lj_tab_setstr(L, t, lj_str_newz(L, name)), val); -} - -/* local info = jit.util.funcinfo(func [,pc]) */ -LJLIB_CF(jit_util_funcinfo) -{ - GCproto *pt = check_Lproto(L, 1); - if (pt) { - BCPos pc = (BCPos)lj_lib_optint(L, 2, 0); - GCtab *t; - lua_createtable(L, 0, 16); /* Increment hash size if fields are added. */ - t = tabV(L->top-1); - setintfield(L, t, "linedefined", pt->firstline); - setintfield(L, t, "lastlinedefined", pt->firstline + pt->numline); - setintfield(L, t, "stackslots", pt->framesize); - setintfield(L, t, "params", pt->numparams); - setintfield(L, t, "bytecodes", (int32_t)pt->sizebc); - setintfield(L, t, "gcconsts", (int32_t)pt->sizekgc); - setintfield(L, t, "nconsts", (int32_t)pt->sizekn); - setintfield(L, t, "upvalues", (int32_t)pt->sizeuv); - if (pc < pt->sizebc) - setintfield(L, t, "currentline", lj_debug_line(pt, pc)); - lua_pushboolean(L, (pt->flags & PROTO_VARARG)); - lua_setfield(L, -2, "isvararg"); - lua_pushboolean(L, (pt->flags & PROTO_CHILD)); - lua_setfield(L, -2, "children"); - setstrV(L, L->top++, proto_chunkname(pt)); - lua_setfield(L, -2, "source"); - lj_debug_pushloc(L, pt, pc); - lua_setfield(L, -2, "loc"); - } else { - GCfunc *fn = funcV(L->base); - GCtab *t; - lua_createtable(L, 0, 4); /* Increment hash size if fields are added. */ - t = tabV(L->top-1); - if (!iscfunc(fn)) - setintfield(L, t, "ffid", fn->c.ffid); - setintptrV(lj_tab_setstr(L, t, lj_str_newlit(L, "addr")), - (intptr_t)(void *)fn->c.f); - setintfield(L, t, "upvalues", fn->c.nupvalues); - } - return 1; -} - -/* local ins, m = jit.util.funcbc(func, pc) */ -LJLIB_CF(jit_util_funcbc) -{ - GCproto *pt = check_Lproto(L, 0); - BCPos pc = (BCPos)lj_lib_checkint(L, 2); - if (pc < pt->sizebc) { - BCIns ins = proto_bc(pt)[pc]; - BCOp op = bc_op(ins); - lua_assert(op < BC__MAX); - setintV(L->top, ins); - setintV(L->top+1, lj_bc_mode[op]); - L->top += 2; - return 2; - } - return 0; -} - -/* local k = jit.util.funck(func, idx) */ -LJLIB_CF(jit_util_funck) -{ - GCproto *pt = check_Lproto(L, 0); - ptrdiff_t idx = (ptrdiff_t)lj_lib_checkint(L, 2); - if (idx >= 0) { - if (idx < (ptrdiff_t)pt->sizekn) { - copyTV(L, L->top-1, proto_knumtv(pt, idx)); - return 1; - } - } else { - if (~idx < (ptrdiff_t)pt->sizekgc) { - GCobj *gc = proto_kgc(pt, idx); - setgcV(L, L->top-1, gc, ~gc->gch.gct); - return 1; - } - } - return 0; -} - -/* local name = jit.util.funcuvname(func, idx) */ -LJLIB_CF(jit_util_funcuvname) -{ - GCproto *pt = check_Lproto(L, 0); - uint32_t idx = (uint32_t)lj_lib_checkint(L, 2); - if (idx < pt->sizeuv) { - setstrV(L, L->top-1, lj_str_newz(L, lj_debug_uvname(pt, idx))); - return 1; - } - return 0; -} - -/* -- Reflection API for traces ------------------------------------------- */ - -#if LJ_HASJIT - -/* Check trace argument. Must not throw for non-existent trace numbers. */ -static GCtrace *jit_checktrace(lua_State *L) -{ - TraceNo tr = (TraceNo)lj_lib_checkint(L, 1); - jit_State *J = L2J(L); - if (tr > 0 && tr < J->sizetrace) - return traceref(J, tr); - return NULL; -} - -/* Names of link types. ORDER LJ_TRLINK */ -static const char *const jit_trlinkname[] = { - "none", "root", "loop", "tail-recursion", "up-recursion", "down-recursion", - "interpreter", "return" -}; - -/* local info = jit.util.traceinfo(tr) */ -LJLIB_CF(jit_util_traceinfo) -{ - GCtrace *T = jit_checktrace(L); - if (T) { - GCtab *t; - lua_createtable(L, 0, 8); /* Increment hash size if fields are added. */ - t = tabV(L->top-1); - setintfield(L, t, "nins", (int32_t)T->nins - REF_BIAS - 1); - setintfield(L, t, "nk", REF_BIAS - (int32_t)T->nk); - setintfield(L, t, "link", T->link); - setintfield(L, t, "nexit", T->nsnap); - setstrV(L, L->top++, lj_str_newz(L, jit_trlinkname[T->linktype])); - lua_setfield(L, -2, "linktype"); - /* There are many more fields. Add them only when needed. */ - return 1; - } - return 0; -} - -/* local m, ot, op1, op2, prev = jit.util.traceir(tr, idx) */ -LJLIB_CF(jit_util_traceir) -{ - GCtrace *T = jit_checktrace(L); - IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS; - if (T && ref >= REF_BIAS && ref < T->nins) { - IRIns *ir = &T->ir[ref]; - int32_t m = lj_ir_mode[ir->o]; - setintV(L->top-2, m); - setintV(L->top-1, ir->ot); - setintV(L->top++, (int32_t)ir->op1 - (irm_op1(m)==IRMref ? REF_BIAS : 0)); - setintV(L->top++, (int32_t)ir->op2 - (irm_op2(m)==IRMref ? REF_BIAS : 0)); - setintV(L->top++, ir->prev); - return 5; - } - return 0; -} - -/* local k, t [, slot] = jit.util.tracek(tr, idx) */ -LJLIB_CF(jit_util_tracek) -{ - GCtrace *T = jit_checktrace(L); - IRRef ref = (IRRef)lj_lib_checkint(L, 2) + REF_BIAS; - if (T && ref >= T->nk && ref < REF_BIAS) { - IRIns *ir = &T->ir[ref]; - int32_t slot = -1; - if (ir->o == IR_KSLOT) { - slot = ir->op2; - ir = &T->ir[ir->op1]; - } - lj_ir_kvalue(L, L->top-2, ir); - setintV(L->top-1, (int32_t)irt_type(ir->t)); - if (slot == -1) - return 2; - setintV(L->top++, slot); - return 3; - } - return 0; -} - -/* local snap = jit.util.tracesnap(tr, sn) */ -LJLIB_CF(jit_util_tracesnap) -{ - GCtrace *T = jit_checktrace(L); - SnapNo sn = (SnapNo)lj_lib_checkint(L, 2); - if (T && sn < T->nsnap) { - SnapShot *snap = &T->snap[sn]; - SnapEntry *map = &T->snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - GCtab *t; - lua_createtable(L, nent+2, 0); - t = tabV(L->top-1); - setintV(lj_tab_setint(L, t, 0), (int32_t)snap->ref - REF_BIAS); - setintV(lj_tab_setint(L, t, 1), (int32_t)snap->nslots); - for (n = 0; n < nent; n++) - setintV(lj_tab_setint(L, t, (int32_t)(n+2)), (int32_t)map[n]); - setintV(lj_tab_setint(L, t, (int32_t)(nent+2)), (int32_t)SNAP(255, 0, 0)); - return 1; - } - return 0; -} - -/* local mcode, addr, loop = jit.util.tracemc(tr) */ -LJLIB_CF(jit_util_tracemc) -{ - GCtrace *T = jit_checktrace(L); - if (T && T->mcode != NULL) { - setstrV(L, L->top-1, lj_str_new(L, (const char *)T->mcode, T->szmcode)); - setintptrV(L->top++, (intptr_t)(void *)T->mcode); - setintV(L->top++, T->mcloop); - return 3; - } - return 0; -} - -/* local addr = jit.util.traceexitstub([tr,] exitno) */ -LJLIB_CF(jit_util_traceexitstub) -{ -#ifdef EXITSTUBS_PER_GROUP - ExitNo exitno = (ExitNo)lj_lib_checkint(L, 1); - jit_State *J = L2J(L); - if (exitno < EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) { - setintptrV(L->top-1, (intptr_t)(void *)exitstub_addr(J, exitno)); - return 1; - } -#else - if (L->top > L->base+1) { /* Don't throw for one-argument variant. */ - GCtrace *T = jit_checktrace(L); - ExitNo exitno = (ExitNo)lj_lib_checkint(L, 2); - ExitNo maxexit = T->root ? T->nsnap+1 : T->nsnap; - if (T && T->mcode != NULL && exitno < maxexit) { - setintptrV(L->top-1, (intptr_t)(void *)exitstub_trace_addr(T, exitno)); - return 1; - } - } -#endif - return 0; -} - -/* local addr = jit.util.ircalladdr(idx) */ -LJLIB_CF(jit_util_ircalladdr) -{ - uint32_t idx = (uint32_t)lj_lib_checkint(L, 1); - if (idx < IRCALL__MAX) { - setintptrV(L->top-1, (intptr_t)(void *)lj_ir_callinfo[idx].func); - return 1; - } - return 0; -} - -#endif - -#include "lj_libdef.h" - -/* -- jit.opt module ------------------------------------------------------ */ - -#if LJ_HASJIT - -#define LJLIB_MODULE_jit_opt - -/* Parse optimization level. */ -static int jitopt_level(jit_State *J, const char *str) -{ - if (str[0] >= '0' && str[0] <= '9' && str[1] == '\0') { - uint32_t flags; - if (str[0] == '0') flags = JIT_F_OPT_0; - else if (str[0] == '1') flags = JIT_F_OPT_1; - else if (str[0] == '2') flags = JIT_F_OPT_2; - else flags = JIT_F_OPT_3; - J->flags = (J->flags & ~JIT_F_OPT_MASK) | flags; - return 1; /* Ok. */ - } - return 0; /* No match. */ -} - -/* Parse optimization flag. */ -static int jitopt_flag(jit_State *J, const char *str) -{ - const char *lst = JIT_F_OPTSTRING; - uint32_t opt; - int set = 1; - if (str[0] == '+') { - str++; - } else if (str[0] == '-') { - str++; - set = 0; - } else if (str[0] == 'n' && str[1] == 'o') { - str += str[2] == '-' ? 3 : 2; - set = 0; - } - for (opt = JIT_F_OPT_FIRST; ; opt <<= 1) { - size_t len = *(const uint8_t *)lst; - if (len == 0) - break; - if (strncmp(str, lst+1, len) == 0 && str[len] == '\0') { - if (set) J->flags |= opt; else J->flags &= ~opt; - return 1; /* Ok. */ - } - lst += 1+len; - } - return 0; /* No match. */ -} - -/* Parse optimization parameter. */ -static int jitopt_param(jit_State *J, const char *str) -{ - const char *lst = JIT_P_STRING; - int i; - for (i = 0; i < JIT_P__MAX; i++) { - size_t len = *(const uint8_t *)lst; - lua_assert(len != 0); - if (strncmp(str, lst+1, len) == 0 && str[len] == '=') { - int32_t n = 0; - const char *p = &str[len+1]; - while (*p >= '0' && *p <= '9') - n = n*10 + (*p++ - '0'); - if (*p) return 0; /* Malformed number. */ - J->param[i] = n; - if (i == JIT_P_hotloop) - lj_dispatch_init_hotcount(J2G(J)); - return 1; /* Ok. */ - } - lst += 1+len; - } - return 0; /* No match. */ -} - -/* jit.opt.start(flags...) */ -LJLIB_CF(jit_opt_start) -{ - jit_State *J = L2J(L); - int nargs = (int)(L->top - L->base); - if (nargs == 0) { - J->flags = (J->flags & ~JIT_F_OPT_MASK) | JIT_F_OPT_DEFAULT; - } else { - int i; - for (i = 1; i <= nargs; i++) { - const char *str = strdata(lj_lib_checkstr(L, i)); - if (!jitopt_level(J, str) && - !jitopt_flag(J, str) && - !jitopt_param(J, str)) - lj_err_callerv(L, LJ_ERR_JITOPT, str); - } - } - return 0; -} - -#include "lj_libdef.h" - -#endif - -/* -- JIT compiler initialization ----------------------------------------- */ - -#if LJ_HASJIT -/* Default values for JIT parameters. */ -static const int32_t jit_param_default[JIT_P__MAX+1] = { -#define JIT_PARAMINIT(len, name, value) (value), -JIT_PARAMDEF(JIT_PARAMINIT) -#undef JIT_PARAMINIT - 0 -}; -#endif - -#if LJ_TARGET_ARM && LJ_TARGET_LINUX -#include -#endif - -/* Arch-dependent CPU detection. */ -static uint32_t jit_cpudetect(lua_State *L) -{ - uint32_t flags = 0; -#if LJ_TARGET_X86ORX64 - uint32_t vendor[4]; - uint32_t features[4]; - if (lj_vm_cpuid(0, vendor) && lj_vm_cpuid(1, features)) { -#if !LJ_HASJIT -#define JIT_F_CMOV 1 -#define JIT_F_SSE2 2 -#endif - flags |= ((features[3] >> 15)&1) * JIT_F_CMOV; - flags |= ((features[3] >> 26)&1) * JIT_F_SSE2; -#if LJ_HASJIT - flags |= ((features[2] >> 0)&1) * JIT_F_SSE3; - flags |= ((features[2] >> 19)&1) * JIT_F_SSE4_1; - if (vendor[2] == 0x6c65746e) { /* Intel. */ - if ((features[0] & 0x0ff00f00) == 0x00000f00) /* P4. */ - flags |= JIT_F_P4; /* Currently unused. */ - else if ((features[0] & 0x0fff0ff0) == 0x000106c0) /* Atom. */ - flags |= JIT_F_LEA_AGU; - } else if (vendor[2] == 0x444d4163) { /* AMD. */ - uint32_t fam = (features[0] & 0x0ff00f00); - if (fam == 0x00000f00) /* K8. */ - flags |= JIT_F_SPLIT_XMM; - if (fam >= 0x00000f00) /* K8, K10. */ - flags |= JIT_F_PREFER_IMUL; - } -#endif - } - /* Check for required instruction set support on x86 (unnecessary on x64). */ -#if LJ_TARGET_X86 -#if !defined(LUAJIT_CPU_NOCMOV) - if (!(flags & JIT_F_CMOV)) - luaL_error(L, "CPU not supported"); -#endif -#if defined(LUAJIT_CPU_SSE2) - if (!(flags & JIT_F_SSE2)) - luaL_error(L, "CPU does not support SSE2 (recompile without -DLUAJIT_CPU_SSE2)"); -#endif -#endif -#elif LJ_TARGET_ARM -#if LJ_HASJIT - int ver = LJ_ARCH_VERSION; /* Compile-time ARM CPU detection. */ -#if LJ_TARGET_LINUX - if (ver < 70) { /* Runtime ARM CPU detection. */ - struct utsname ut; - uname(&ut); - if (strncmp(ut.machine, "armv", 4) == 0) { - if (ut.machine[4] >= '7') - ver = 70; - else if (ut.machine[4] == '6') - ver = 60; - } - } -#endif - flags |= ver >= 70 ? JIT_F_ARMV7 : - ver >= 61 ? JIT_F_ARMV6T2_ : - ver >= 60 ? JIT_F_ARMV6_ : 0; - flags |= LJ_ARCH_HASFPU == 0 ? 0 : ver >= 70 ? JIT_F_VFPV3 : JIT_F_VFPV2; -#endif -#elif LJ_TARGET_PPC -#if LJ_HASJIT -#if LJ_ARCH_SQRT - flags |= JIT_F_SQRT; -#endif -#if LJ_ARCH_ROUND - flags |= JIT_F_ROUND; -#endif -#endif -#elif LJ_TARGET_PPCSPE - /* Nothing to do. */ -#elif LJ_TARGET_MIPS -#if LJ_HASJIT - /* Compile-time MIPS CPU detection. */ -#if LJ_ARCH_VERSION >= 20 - flags |= JIT_F_MIPS32R2; -#endif - /* Runtime MIPS CPU detection. */ -#if defined(__GNUC__) - if (!(flags & JIT_F_MIPS32R2)) { - int x; - /* On MIPS32R1 rotr is treated as srl. rotr r2,r2,1 -> srl r2,r2,1. */ - __asm__("li $2, 1\n\t.long 0x00221042\n\tmove %0, $2" : "=r"(x) : : "$2"); - if (x) flags |= JIT_F_MIPS32R2; /* Either 0x80000000 (R2) or 0 (R1). */ - } -#endif -#endif -#else -#error "Missing CPU detection for this architecture" -#endif - UNUSED(L); - return flags; -} - -/* Initialize JIT compiler. */ -static void jit_init(lua_State *L) -{ - uint32_t flags = jit_cpudetect(L); -#if LJ_HASJIT - jit_State *J = L2J(L); -#if LJ_TARGET_X86 - /* Silently turn off the JIT compiler on CPUs without SSE2. */ - if ((flags & JIT_F_SSE2)) -#endif - J->flags = flags | JIT_F_ON | JIT_F_OPT_DEFAULT; - memcpy(J->param, jit_param_default, sizeof(J->param)); - lj_dispatch_update(G(L)); -#else - UNUSED(flags); -#endif -} - -LUALIB_API int luaopen_jit(lua_State *L) -{ - lua_pushliteral(L, LJ_OS_NAME); - lua_pushliteral(L, LJ_ARCH_NAME); - lua_pushinteger(L, LUAJIT_VERSION_NUM); - lua_pushliteral(L, LUAJIT_VERSION); - LJ_LIB_REG(L, LUA_JITLIBNAME, jit); -#ifndef LUAJIT_DISABLE_JITUTIL - LJ_LIB_REG(L, "jit.util", jit_util); -#endif -#if LJ_HASJIT - LJ_LIB_REG(L, "jit.opt", jit_opt); -#endif - L->top -= 2; - jit_init(L); - return 1; -} - diff --git a/deps/luajit/src/lib_math.c b/deps/luajit/src/lib_math.c deleted file mode 100644 index 40f2914..0000000 --- a/deps/luajit/src/lib_math.c +++ /dev/null @@ -1,233 +0,0 @@ -/* -** Math library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include - -#define lib_math_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_lib.h" -#include "lj_vm.h" - -/* ------------------------------------------------------------------------ */ - -#define LJLIB_MODULE_math - -LJLIB_ASM(math_abs) LJLIB_REC(.) -{ - lj_lib_checknumber(L, 1); - return FFH_RETRY; -} -LJLIB_ASM_(math_floor) LJLIB_REC(math_round IRFPM_FLOOR) -LJLIB_ASM_(math_ceil) LJLIB_REC(math_round IRFPM_CEIL) - -LJLIB_ASM(math_sqrt) LJLIB_REC(math_unary IRFPM_SQRT) -{ - lj_lib_checknum(L, 1); - return FFH_RETRY; -} -LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10) -LJLIB_ASM_(math_exp) LJLIB_REC(math_unary IRFPM_EXP) -LJLIB_ASM_(math_sin) LJLIB_REC(math_unary IRFPM_SIN) -LJLIB_ASM_(math_cos) LJLIB_REC(math_unary IRFPM_COS) -LJLIB_ASM_(math_tan) LJLIB_REC(math_unary IRFPM_TAN) -LJLIB_ASM_(math_asin) LJLIB_REC(math_atrig FF_math_asin) -LJLIB_ASM_(math_acos) LJLIB_REC(math_atrig FF_math_acos) -LJLIB_ASM_(math_atan) LJLIB_REC(math_atrig FF_math_atan) -LJLIB_ASM_(math_sinh) LJLIB_REC(math_htrig IRCALL_sinh) -LJLIB_ASM_(math_cosh) LJLIB_REC(math_htrig IRCALL_cosh) -LJLIB_ASM_(math_tanh) LJLIB_REC(math_htrig IRCALL_tanh) -LJLIB_ASM_(math_frexp) -LJLIB_ASM_(math_modf) LJLIB_REC(.) - -LJLIB_PUSH(57.29577951308232) -LJLIB_ASM_(math_deg) LJLIB_REC(math_degrad) - -LJLIB_PUSH(0.017453292519943295) -LJLIB_ASM_(math_rad) LJLIB_REC(math_degrad) - -LJLIB_ASM(math_log) LJLIB_REC(math_log) -{ - double x = lj_lib_checknum(L, 1); - if (L->base+1 < L->top) { - double y = lj_lib_checknum(L, 2); -#ifdef LUAJIT_NO_LOG2 - x = log(x); y = 1.0 / log(y); -#else - x = lj_vm_log2(x); y = 1.0 / lj_vm_log2(y); -#endif - setnumV(L->base-1, x*y); /* Do NOT join the expression to x / y. */ - return FFH_RES(1); - } - return FFH_RETRY; -} - -LJLIB_ASM(math_atan2) LJLIB_REC(.) -{ - lj_lib_checknum(L, 1); - lj_lib_checknum(L, 2); - return FFH_RETRY; -} -LJLIB_ASM_(math_pow) LJLIB_REC(.) -LJLIB_ASM_(math_fmod) - -LJLIB_ASM(math_ldexp) LJLIB_REC(.) -{ - lj_lib_checknum(L, 1); -#if LJ_DUALNUM && !LJ_TARGET_X86ORX64 - lj_lib_checkint(L, 2); -#else - lj_lib_checknum(L, 2); -#endif - return FFH_RETRY; -} - -LJLIB_ASM(math_min) LJLIB_REC(math_minmax IR_MIN) -{ - int i = 0; - do { lj_lib_checknumber(L, ++i); } while (L->base+i < L->top); - return FFH_RETRY; -} -LJLIB_ASM_(math_max) LJLIB_REC(math_minmax IR_MAX) - -LJLIB_PUSH(3.14159265358979323846) LJLIB_SET(pi) -LJLIB_PUSH(1e310) LJLIB_SET(huge) - -/* ------------------------------------------------------------------------ */ - -/* This implements a Tausworthe PRNG with period 2^223. Based on: -** Tables of maximally-equidistributed combined LFSR generators, -** Pierre L'Ecuyer, 1991, table 3, 1st entry. -** Full-period ME-CF generator with L=64, J=4, k=223, N1=49. -*/ - -/* PRNG state. */ -struct RandomState { - uint64_t gen[4]; /* State of the 4 LFSR generators. */ - int valid; /* State is valid. */ -}; - -/* Union needed for bit-pattern conversion between uint64_t and double. */ -typedef union { uint64_t u64; double d; } U64double; - -/* Update generator i and compute a running xor of all states. */ -#define TW223_GEN(i, k, q, s) \ - z = rs->gen[i]; \ - z = (((z<> (k-s)) ^ ((z&((uint64_t)(int64_t)-1 << (64-k)))<gen[i] = z; - -/* PRNG step function. Returns a double in the range 1.0 <= d < 2.0. */ -LJ_NOINLINE uint64_t LJ_FASTCALL lj_math_random_step(RandomState *rs) -{ - uint64_t z, r = 0; - TW223_GEN(0, 63, 31, 18) - TW223_GEN(1, 58, 19, 28) - TW223_GEN(2, 55, 24, 7) - TW223_GEN(3, 47, 21, 8) - return (r & U64x(000fffff,ffffffff)) | U64x(3ff00000,00000000); -} - -/* PRNG initialization function. */ -static void random_init(RandomState *rs, double d) -{ - uint32_t r = 0x11090601; /* 64-k[i] as four 8 bit constants. */ - int i; - for (i = 0; i < 4; i++) { - U64double u; - uint32_t m = 1u << (r&255); - r >>= 8; - u.d = d = d * 3.14159265358979323846 + 2.7182818284590452354; - if (u.u64 < m) u.u64 += m; /* Ensure k[i] MSB of gen[i] are non-zero. */ - rs->gen[i] = u.u64; - } - rs->valid = 1; - for (i = 0; i < 10; i++) - lj_math_random_step(rs); -} - -/* PRNG extract function. */ -LJLIB_PUSH(top-2) /* Upvalue holds userdata with RandomState. */ -LJLIB_CF(math_random) LJLIB_REC(.) -{ - int n = (int)(L->top - L->base); - RandomState *rs = (RandomState *)(uddata(udataV(lj_lib_upvalue(L, 1)))); - U64double u; - double d; - if (LJ_UNLIKELY(!rs->valid)) random_init(rs, 0.0); - u.u64 = lj_math_random_step(rs); - d = u.d - 1.0; - if (n > 0) { -#if LJ_DUALNUM - int isint = 1; - double r1; - lj_lib_checknumber(L, 1); - if (tvisint(L->base)) { - r1 = (lua_Number)intV(L->base); - } else { - isint = 0; - r1 = numV(L->base); - } -#else - double r1 = lj_lib_checknum(L, 1); -#endif - if (n == 1) { - d = lj_vm_floor(d*r1) + 1.0; /* d is an int in range [1, r1] */ - } else { -#if LJ_DUALNUM - double r2; - lj_lib_checknumber(L, 2); - if (tvisint(L->base+1)) { - r2 = (lua_Number)intV(L->base+1); - } else { - isint = 0; - r2 = numV(L->base+1); - } -#else - double r2 = lj_lib_checknum(L, 2); -#endif - d = lj_vm_floor(d*(r2-r1+1.0)) + r1; /* d is an int in range [r1, r2] */ - } -#if LJ_DUALNUM - if (isint) { - setintV(L->top-1, lj_num2int(d)); - return 1; - } -#endif - } /* else: d is a double in range [0, 1] */ - setnumV(L->top++, d); - return 1; -} - -/* PRNG seed function. */ -LJLIB_PUSH(top-2) /* Upvalue holds userdata with RandomState. */ -LJLIB_CF(math_randomseed) -{ - RandomState *rs = (RandomState *)(uddata(udataV(lj_lib_upvalue(L, 1)))); - random_init(rs, lj_lib_checknum(L, 1)); - return 0; -} - -/* ------------------------------------------------------------------------ */ - -#include "lj_libdef.h" - -LUALIB_API int luaopen_math(lua_State *L) -{ - RandomState *rs; - rs = (RandomState *)lua_newuserdata(L, sizeof(RandomState)); - rs->valid = 0; /* Use lazy initialization to save some time on startup. */ - LJ_LIB_REG(L, LUA_MATHLIBNAME, math); -#if defined(LUA_COMPAT_MOD) && !LJ_52 - lua_getfield(L, -1, "fmod"); - lua_setfield(L, -2, "mod"); -#endif - return 1; -} - diff --git a/deps/luajit/src/lib_os.c b/deps/luajit/src/lib_os.c deleted file mode 100644 index bb5a141..0000000 --- a/deps/luajit/src/lib_os.c +++ /dev/null @@ -1,287 +0,0 @@ -/* -** OS library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include -#include - -#define lib_os_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_lib.h" - -#if LJ_TARGET_POSIX -#include -#else -#include -#endif - -#if !LJ_TARGET_PSVITA -#include -#endif - -/* ------------------------------------------------------------------------ */ - -#define LJLIB_MODULE_os - -LJLIB_CF(os_execute) -{ -#if LJ_TARGET_CONSOLE -#if LJ_52 - errno = ENOSYS; - return luaL_fileresult(L, 0, NULL); -#else - lua_pushinteger(L, -1); - return 1; -#endif -#else - const char *cmd = luaL_optstring(L, 1, NULL); - int stat = system(cmd); -#if LJ_52 - if (cmd) - return luaL_execresult(L, stat); - setboolV(L->top++, 1); -#else - setintV(L->top++, stat); -#endif - return 1; -#endif -} - -LJLIB_CF(os_remove) -{ - const char *filename = luaL_checkstring(L, 1); - return luaL_fileresult(L, remove(filename) == 0, filename); -} - -LJLIB_CF(os_rename) -{ - const char *fromname = luaL_checkstring(L, 1); - const char *toname = luaL_checkstring(L, 2); - return luaL_fileresult(L, rename(fromname, toname) == 0, fromname); -} - -LJLIB_CF(os_tmpname) -{ -#if LJ_TARGET_PS3 || LJ_TARGET_PS4 || LJ_TARGET_PSVITA - lj_err_caller(L, LJ_ERR_OSUNIQF); - return 0; -#else -#if LJ_TARGET_POSIX - char buf[15+1]; - int fp; - strcpy(buf, "/tmp/lua_XXXXXX"); - fp = mkstemp(buf); - if (fp != -1) - close(fp); - else - lj_err_caller(L, LJ_ERR_OSUNIQF); -#else - char buf[L_tmpnam]; - if (tmpnam(buf) == NULL) - lj_err_caller(L, LJ_ERR_OSUNIQF); -#endif - lua_pushstring(L, buf); - return 1; -#endif -} - -LJLIB_CF(os_getenv) -{ -#if LJ_TARGET_CONSOLE - lua_pushnil(L); -#else - lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ -#endif - return 1; -} - -LJLIB_CF(os_exit) -{ - int status; - if (L->base < L->top && tvisbool(L->base)) - status = boolV(L->base) ? EXIT_SUCCESS : EXIT_FAILURE; - else - status = lj_lib_optint(L, 1, EXIT_SUCCESS); - if (L->base+1 < L->top && tvistruecond(L->base+1)) - lua_close(L); - exit(status); - return 0; /* Unreachable. */ -} - -LJLIB_CF(os_clock) -{ - setnumV(L->top++, ((lua_Number)clock())*(1.0/(lua_Number)CLOCKS_PER_SEC)); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -static void setfield(lua_State *L, const char *key, int value) -{ - lua_pushinteger(L, value); - lua_setfield(L, -2, key); -} - -static void setboolfield(lua_State *L, const char *key, int value) -{ - if (value < 0) /* undefined? */ - return; /* does not set field */ - lua_pushboolean(L, value); - lua_setfield(L, -2, key); -} - -static int getboolfield(lua_State *L, const char *key) -{ - int res; - lua_getfield(L, -1, key); - res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1); - lua_pop(L, 1); - return res; -} - -static int getfield(lua_State *L, const char *key, int d) -{ - int res; - lua_getfield(L, -1, key); - if (lua_isnumber(L, -1)) { - res = (int)lua_tointeger(L, -1); - } else { - if (d < 0) - lj_err_callerv(L, LJ_ERR_OSDATEF, key); - res = d; - } - lua_pop(L, 1); - return res; -} - -LJLIB_CF(os_date) -{ - const char *s = luaL_optstring(L, 1, "%c"); - time_t t = luaL_opt(L, (time_t)luaL_checknumber, 2, time(NULL)); - struct tm *stm; -#if LJ_TARGET_POSIX - struct tm rtm; -#endif - if (*s == '!') { /* UTC? */ - s++; /* Skip '!' */ -#if LJ_TARGET_POSIX - stm = gmtime_r(&t, &rtm); -#else - stm = gmtime(&t); -#endif - } else { -#if LJ_TARGET_POSIX - stm = localtime_r(&t, &rtm); -#else - stm = localtime(&t); -#endif - } - if (stm == NULL) { /* Invalid date? */ - setnilV(L->top-1); - } else if (strcmp(s, "*t") == 0) { - lua_createtable(L, 0, 9); /* 9 = number of fields */ - setfield(L, "sec", stm->tm_sec); - setfield(L, "min", stm->tm_min); - setfield(L, "hour", stm->tm_hour); - setfield(L, "day", stm->tm_mday); - setfield(L, "month", stm->tm_mon+1); - setfield(L, "year", stm->tm_year+1900); - setfield(L, "wday", stm->tm_wday+1); - setfield(L, "yday", stm->tm_yday+1); - setboolfield(L, "isdst", stm->tm_isdst); - } else { - char cc[3]; - luaL_Buffer b; - cc[0] = '%'; cc[2] = '\0'; - luaL_buffinit(L, &b); - for (; *s; s++) { - if (*s != '%' || *(s + 1) == '\0') { /* No conversion specifier? */ - luaL_addchar(&b, *s); - } else { - size_t reslen; - char buff[200]; /* Should be big enough for any conversion result. */ - cc[1] = *(++s); - reslen = strftime(buff, sizeof(buff), cc, stm); - luaL_addlstring(&b, buff, reslen); - } - } - luaL_pushresult(&b); - } - return 1; -} - -LJLIB_CF(os_time) -{ - time_t t; - if (lua_isnoneornil(L, 1)) { /* called without args? */ - t = time(NULL); /* get current time */ - } else { - struct tm ts; - luaL_checktype(L, 1, LUA_TTABLE); - lua_settop(L, 1); /* make sure table is at the top */ - ts.tm_sec = getfield(L, "sec", 0); - ts.tm_min = getfield(L, "min", 0); - ts.tm_hour = getfield(L, "hour", 12); - ts.tm_mday = getfield(L, "day", -1); - ts.tm_mon = getfield(L, "month", -1) - 1; - ts.tm_year = getfield(L, "year", -1) - 1900; - ts.tm_isdst = getboolfield(L, "isdst"); - t = mktime(&ts); - } - if (t == (time_t)(-1)) - lua_pushnil(L); - else - lua_pushnumber(L, (lua_Number)t); - return 1; -} - -LJLIB_CF(os_difftime) -{ - lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), - (time_t)(luaL_optnumber(L, 2, (lua_Number)0)))); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -LJLIB_CF(os_setlocale) -{ -#if LJ_TARGET_PSVITA - lua_pushliteral(L, "C"); -#else - GCstr *s = lj_lib_optstr(L, 1); - const char *str = s ? strdata(s) : NULL; - int opt = lj_lib_checkopt(L, 2, 6, - "\5ctype\7numeric\4time\7collate\10monetary\1\377\3all"); - if (opt == 0) opt = LC_CTYPE; - else if (opt == 1) opt = LC_NUMERIC; - else if (opt == 2) opt = LC_TIME; - else if (opt == 3) opt = LC_COLLATE; - else if (opt == 4) opt = LC_MONETARY; - else if (opt == 6) opt = LC_ALL; - lua_pushstring(L, setlocale(opt, str)); -#endif - return 1; -} - -/* ------------------------------------------------------------------------ */ - -#include "lj_libdef.h" - -LUALIB_API int luaopen_os(lua_State *L) -{ - LJ_LIB_REG(L, LUA_OSLIBNAME, os); - return 1; -} - diff --git a/deps/luajit/src/lib_package.c b/deps/luajit/src/lib_package.c deleted file mode 100644 index ac38c81..0000000 --- a/deps/luajit/src/lib_package.c +++ /dev/null @@ -1,602 +0,0 @@ -/* -** Package library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2012 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lib_package_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_lib.h" - -/* ------------------------------------------------------------------------ */ - -/* Error codes for ll_loadfunc. */ -#define PACKAGE_ERR_LIB 1 -#define PACKAGE_ERR_FUNC 2 -#define PACKAGE_ERR_LOAD 3 - -/* Redefined in platform specific part. */ -#define PACKAGE_LIB_FAIL "open" -#define setprogdir(L) ((void)0) - -/* Symbol name prefixes. */ -#define SYMPREFIX_CF "luaopen_%s" -#define SYMPREFIX_BC "luaJIT_BC_%s" - -#if LJ_TARGET_DLOPEN - -#include - -static void ll_unloadlib(void *lib) -{ - dlclose(lib); -} - -static void *ll_load(lua_State *L, const char *path, int gl) -{ - void *lib = dlopen(path, RTLD_NOW | (gl ? RTLD_GLOBAL : RTLD_LOCAL)); - if (lib == NULL) lua_pushstring(L, dlerror()); - return lib; -} - -static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym) -{ - lua_CFunction f = (lua_CFunction)dlsym(lib, sym); - if (f == NULL) lua_pushstring(L, dlerror()); - return f; -} - -static const char *ll_bcsym(void *lib, const char *sym) -{ -#if defined(RTLD_DEFAULT) - if (lib == NULL) lib = RTLD_DEFAULT; -#elif LJ_TARGET_OSX || LJ_TARGET_BSD - if (lib == NULL) lib = (void *)(intptr_t)-2; -#endif - return (const char *)dlsym(lib, sym); -} - -#elif LJ_TARGET_WINDOWS - -#define WIN32_LEAN_AND_MEAN -#include - -#ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS -#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 -#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2 -BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); -#endif - -#undef setprogdir - -static void setprogdir(lua_State *L) -{ - char buff[MAX_PATH + 1]; - char *lb; - DWORD nsize = sizeof(buff); - DWORD n = GetModuleFileNameA(NULL, buff, nsize); - if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) { - luaL_error(L, "unable to get ModuleFileName"); - } else { - *lb = '\0'; - luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff); - lua_remove(L, -2); /* remove original string */ - } -} - -static void pusherror(lua_State *L) -{ - DWORD error = GetLastError(); - char buffer[128]; - if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, error, 0, buffer, sizeof(buffer), NULL)) - lua_pushstring(L, buffer); - else - lua_pushfstring(L, "system error %d\n", error); -} - -static void ll_unloadlib(void *lib) -{ - FreeLibrary((HINSTANCE)lib); -} - -static void *ll_load(lua_State *L, const char *path, int gl) -{ - HINSTANCE lib = LoadLibraryA(path); - if (lib == NULL) pusherror(L); - UNUSED(gl); - return lib; -} - -static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym) -{ - lua_CFunction f = (lua_CFunction)GetProcAddress((HINSTANCE)lib, sym); - if (f == NULL) pusherror(L); - return f; -} - -static const char *ll_bcsym(void *lib, const char *sym) -{ - if (lib) { - return (const char *)GetProcAddress((HINSTANCE)lib, sym); - } else { - HINSTANCE h = GetModuleHandleA(NULL); - const char *p = (const char *)GetProcAddress(h, sym); - if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (const char *)ll_bcsym, &h)) - p = (const char *)GetProcAddress(h, sym); - return p; - } -} - -#else - -#undef PACKAGE_LIB_FAIL -#define PACKAGE_LIB_FAIL "absent" - -#define DLMSG "dynamic libraries not enabled; no support for target OS" - -static void ll_unloadlib(void *lib) -{ - UNUSED(lib); -} - -static void *ll_load(lua_State *L, const char *path, int gl) -{ - UNUSED(path); UNUSED(gl); - lua_pushliteral(L, DLMSG); - return NULL; -} - -static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym) -{ - UNUSED(lib); UNUSED(sym); - lua_pushliteral(L, DLMSG); - return NULL; -} - -static const char *ll_bcsym(void *lib, const char *sym) -{ - UNUSED(lib); UNUSED(sym); - return NULL; -} - -#endif - -/* ------------------------------------------------------------------------ */ - -static void **ll_register(lua_State *L, const char *path) -{ - void **plib; - lua_pushfstring(L, "LOADLIB: %s", path); - lua_gettable(L, LUA_REGISTRYINDEX); /* check library in registry? */ - if (!lua_isnil(L, -1)) { /* is there an entry? */ - plib = (void **)lua_touserdata(L, -1); - } else { /* no entry yet; create one */ - lua_pop(L, 1); - plib = (void **)lua_newuserdata(L, sizeof(void *)); - *plib = NULL; - luaL_getmetatable(L, "_LOADLIB"); - lua_setmetatable(L, -2); - lua_pushfstring(L, "LOADLIB: %s", path); - lua_pushvalue(L, -2); - lua_settable(L, LUA_REGISTRYINDEX); - } - return plib; -} - -static const char *mksymname(lua_State *L, const char *modname, - const char *prefix) -{ - const char *funcname; - const char *mark = strchr(modname, *LUA_IGMARK); - if (mark) modname = mark + 1; - funcname = luaL_gsub(L, modname, ".", "_"); - funcname = lua_pushfstring(L, prefix, funcname); - lua_remove(L, -2); /* remove 'gsub' result */ - return funcname; -} - -static int ll_loadfunc(lua_State *L, const char *path, const char *name, int r) -{ - void **reg = ll_register(L, path); - if (*reg == NULL) *reg = ll_load(L, path, (*name == '*')); - if (*reg == NULL) { - return PACKAGE_ERR_LIB; /* Unable to load library. */ - } else if (*name == '*') { /* Only load library into global namespace. */ - lua_pushboolean(L, 1); - return 0; - } else { - const char *sym = r ? name : mksymname(L, name, SYMPREFIX_CF); - lua_CFunction f = ll_sym(L, *reg, sym); - if (f) { - lua_pushcfunction(L, f); - return 0; - } - if (!r) { - const char *bcdata = ll_bcsym(*reg, mksymname(L, name, SYMPREFIX_BC)); - lua_pop(L, 1); - if (bcdata) { - if (luaL_loadbuffer(L, bcdata, ~(size_t)0, name) != 0) - return PACKAGE_ERR_LOAD; - return 0; - } - } - return PACKAGE_ERR_FUNC; /* Unable to find function. */ - } -} - -static int lj_cf_package_loadlib(lua_State *L) -{ - const char *path = luaL_checkstring(L, 1); - const char *init = luaL_checkstring(L, 2); - int st = ll_loadfunc(L, path, init, 1); - if (st == 0) { /* no errors? */ - return 1; /* return the loaded function */ - } else { /* error; error message is on stack top */ - lua_pushnil(L); - lua_insert(L, -2); - lua_pushstring(L, (st == PACKAGE_ERR_LIB) ? PACKAGE_LIB_FAIL : "init"); - return 3; /* return nil, error message, and where */ - } -} - -static int lj_cf_package_unloadlib(lua_State *L) -{ - void **lib = (void **)luaL_checkudata(L, 1, "_LOADLIB"); - if (*lib) ll_unloadlib(*lib); - *lib = NULL; /* mark library as closed */ - return 0; -} - -/* ------------------------------------------------------------------------ */ - -static int readable(const char *filename) -{ - FILE *f = fopen(filename, "r"); /* try to open file */ - if (f == NULL) return 0; /* open failed */ - fclose(f); - return 1; -} - -static const char *pushnexttemplate(lua_State *L, const char *path) -{ - const char *l; - while (*path == *LUA_PATHSEP) path++; /* skip separators */ - if (*path == '\0') return NULL; /* no more templates */ - l = strchr(path, *LUA_PATHSEP); /* find next separator */ - if (l == NULL) l = path + strlen(path); - lua_pushlstring(L, path, (size_t)(l - path)); /* template */ - return l; -} - -static const char *searchpath (lua_State *L, const char *name, - const char *path, const char *sep, - const char *dirsep) -{ - luaL_Buffer msg; /* to build error message */ - luaL_buffinit(L, &msg); - if (*sep != '\0') /* non-empty separator? */ - name = luaL_gsub(L, name, sep, dirsep); /* replace it by 'dirsep' */ - while ((path = pushnexttemplate(L, path)) != NULL) { - const char *filename = luaL_gsub(L, lua_tostring(L, -1), - LUA_PATH_MARK, name); - lua_remove(L, -2); /* remove path template */ - if (readable(filename)) /* does file exist and is readable? */ - return filename; /* return that file name */ - lua_pushfstring(L, "\n\tno file " LUA_QS, filename); - lua_remove(L, -2); /* remove file name */ - luaL_addvalue(&msg); /* concatenate error msg. entry */ - } - luaL_pushresult(&msg); /* create error message */ - return NULL; /* not found */ -} - -static int lj_cf_package_searchpath(lua_State *L) -{ - const char *f = searchpath(L, luaL_checkstring(L, 1), - luaL_checkstring(L, 2), - luaL_optstring(L, 3, "."), - luaL_optstring(L, 4, LUA_DIRSEP)); - if (f != NULL) { - return 1; - } else { /* error message is on top of the stack */ - lua_pushnil(L); - lua_insert(L, -2); - return 2; /* return nil + error message */ - } -} - -static const char *findfile(lua_State *L, const char *name, - const char *pname) -{ - const char *path; - lua_getfield(L, LUA_ENVIRONINDEX, pname); - path = lua_tostring(L, -1); - if (path == NULL) - luaL_error(L, LUA_QL("package.%s") " must be a string", pname); - return searchpath(L, name, path, ".", LUA_DIRSEP); -} - -static void loaderror(lua_State *L, const char *filename) -{ - luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s", - lua_tostring(L, 1), filename, lua_tostring(L, -1)); -} - -static int lj_cf_package_loader_lua(lua_State *L) -{ - const char *filename; - const char *name = luaL_checkstring(L, 1); - filename = findfile(L, name, "path"); - if (filename == NULL) return 1; /* library not found in this path */ - if (luaL_loadfile(L, filename) != 0) - loaderror(L, filename); - return 1; /* library loaded successfully */ -} - -static int lj_cf_package_loader_c(lua_State *L) -{ - const char *name = luaL_checkstring(L, 1); - const char *filename = findfile(L, name, "cpath"); - if (filename == NULL) return 1; /* library not found in this path */ - if (ll_loadfunc(L, filename, name, 0) != 0) - loaderror(L, filename); - return 1; /* library loaded successfully */ -} - -static int lj_cf_package_loader_croot(lua_State *L) -{ - const char *filename; - const char *name = luaL_checkstring(L, 1); - const char *p = strchr(name, '.'); - int st; - if (p == NULL) return 0; /* is root */ - lua_pushlstring(L, name, (size_t)(p - name)); - filename = findfile(L, lua_tostring(L, -1), "cpath"); - if (filename == NULL) return 1; /* root not found */ - if ((st = ll_loadfunc(L, filename, name, 0)) != 0) { - if (st != PACKAGE_ERR_FUNC) loaderror(L, filename); /* real error */ - lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, - name, filename); - return 1; /* function not found */ - } - return 1; -} - -static int lj_cf_package_loader_preload(lua_State *L) -{ - const char *name = luaL_checkstring(L, 1); - lua_getfield(L, LUA_ENVIRONINDEX, "preload"); - if (!lua_istable(L, -1)) - luaL_error(L, LUA_QL("package.preload") " must be a table"); - lua_getfield(L, -1, name); - if (lua_isnil(L, -1)) { /* Not found? */ - const char *bcname = mksymname(L, name, SYMPREFIX_BC); - const char *bcdata = ll_bcsym(NULL, bcname); - if (bcdata == NULL || luaL_loadbuffer(L, bcdata, ~(size_t)0, name) != 0) - lua_pushfstring(L, "\n\tno field package.preload['%s']", name); - } - return 1; -} - -/* ------------------------------------------------------------------------ */ - -static const int sentinel_ = 0; -#define sentinel ((void *)&sentinel_) - -static int lj_cf_package_require(lua_State *L) -{ - const char *name = luaL_checkstring(L, 1); - int i; - lua_settop(L, 1); /* _LOADED table will be at index 2 */ - lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); - lua_getfield(L, 2, name); - if (lua_toboolean(L, -1)) { /* is it there? */ - if (lua_touserdata(L, -1) == sentinel) /* check loops */ - luaL_error(L, "loop or previous error loading module " LUA_QS, name); - return 1; /* package is already loaded */ - } - /* else must load it; iterate over available loaders */ - lua_getfield(L, LUA_ENVIRONINDEX, "loaders"); - if (!lua_istable(L, -1)) - luaL_error(L, LUA_QL("package.loaders") " must be a table"); - lua_pushliteral(L, ""); /* error message accumulator */ - for (i = 1; ; i++) { - lua_rawgeti(L, -2, i); /* get a loader */ - if (lua_isnil(L, -1)) - luaL_error(L, "module " LUA_QS " not found:%s", - name, lua_tostring(L, -2)); - lua_pushstring(L, name); - lua_call(L, 1, 1); /* call it */ - if (lua_isfunction(L, -1)) /* did it find module? */ - break; /* module loaded successfully */ - else if (lua_isstring(L, -1)) /* loader returned error message? */ - lua_concat(L, 2); /* accumulate it */ - else - lua_pop(L, 1); - } - lua_pushlightuserdata(L, sentinel); - lua_setfield(L, 2, name); /* _LOADED[name] = sentinel */ - lua_pushstring(L, name); /* pass name as argument to module */ - lua_call(L, 1, 1); /* run loaded module */ - if (!lua_isnil(L, -1)) /* non-nil return? */ - lua_setfield(L, 2, name); /* _LOADED[name] = returned value */ - lua_getfield(L, 2, name); - if (lua_touserdata(L, -1) == sentinel) { /* module did not set a value? */ - lua_pushboolean(L, 1); /* use true as result */ - lua_pushvalue(L, -1); /* extra copy to be returned */ - lua_setfield(L, 2, name); /* _LOADED[name] = true */ - } - lj_lib_checkfpu(L); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -static void setfenv(lua_State *L) -{ - lua_Debug ar; - if (lua_getstack(L, 1, &ar) == 0 || - lua_getinfo(L, "f", &ar) == 0 || /* get calling function */ - lua_iscfunction(L, -1)) - luaL_error(L, LUA_QL("module") " not called from a Lua function"); - lua_pushvalue(L, -2); - lua_setfenv(L, -2); - lua_pop(L, 1); -} - -static void dooptions(lua_State *L, int n) -{ - int i; - for (i = 2; i <= n; i++) { - lua_pushvalue(L, i); /* get option (a function) */ - lua_pushvalue(L, -2); /* module */ - lua_call(L, 1, 0); - } -} - -static void modinit(lua_State *L, const char *modname) -{ - const char *dot; - lua_pushvalue(L, -1); - lua_setfield(L, -2, "_M"); /* module._M = module */ - lua_pushstring(L, modname); - lua_setfield(L, -2, "_NAME"); - dot = strrchr(modname, '.'); /* look for last dot in module name */ - if (dot == NULL) dot = modname; else dot++; - /* set _PACKAGE as package name (full module name minus last part) */ - lua_pushlstring(L, modname, (size_t)(dot - modname)); - lua_setfield(L, -2, "_PACKAGE"); -} - -static int lj_cf_package_module(lua_State *L) -{ - const char *modname = luaL_checkstring(L, 1); - int loaded = lua_gettop(L) + 1; /* index of _LOADED table */ - lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); - lua_getfield(L, loaded, modname); /* get _LOADED[modname] */ - if (!lua_istable(L, -1)) { /* not found? */ - lua_pop(L, 1); /* remove previous result */ - /* try global variable (and create one if it does not exist) */ - if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, 1) != NULL) - lj_err_callerv(L, LJ_ERR_BADMODN, modname); - lua_pushvalue(L, -1); - lua_setfield(L, loaded, modname); /* _LOADED[modname] = new table */ - } - /* check whether table already has a _NAME field */ - lua_getfield(L, -1, "_NAME"); - if (!lua_isnil(L, -1)) { /* is table an initialized module? */ - lua_pop(L, 1); - } else { /* no; initialize it */ - lua_pop(L, 1); - modinit(L, modname); - } - lua_pushvalue(L, -1); - setfenv(L); - dooptions(L, loaded - 1); - return 0; -} - -static int lj_cf_package_seeall(lua_State *L) -{ - luaL_checktype(L, 1, LUA_TTABLE); - if (!lua_getmetatable(L, 1)) { - lua_createtable(L, 0, 1); /* create new metatable */ - lua_pushvalue(L, -1); - lua_setmetatable(L, 1); - } - lua_pushvalue(L, LUA_GLOBALSINDEX); - lua_setfield(L, -2, "__index"); /* mt.__index = _G */ - return 0; -} - -/* ------------------------------------------------------------------------ */ - -#define AUXMARK "\1" - -static void setpath(lua_State *L, const char *fieldname, const char *envname, - const char *def, int noenv) -{ -#if LJ_TARGET_CONSOLE - const char *path = NULL; - UNUSED(envname); -#else - const char *path = getenv(envname); -#endif - if (path == NULL || noenv) { - lua_pushstring(L, def); - } else { - path = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP, - LUA_PATHSEP AUXMARK LUA_PATHSEP); - luaL_gsub(L, path, AUXMARK, def); - lua_remove(L, -2); - } - setprogdir(L); - lua_setfield(L, -2, fieldname); -} - -static const luaL_Reg package_lib[] = { - { "loadlib", lj_cf_package_loadlib }, - { "searchpath", lj_cf_package_searchpath }, - { "seeall", lj_cf_package_seeall }, - { NULL, NULL } -}; - -static const luaL_Reg package_global[] = { - { "module", lj_cf_package_module }, - { "require", lj_cf_package_require }, - { NULL, NULL } -}; - -static const lua_CFunction package_loaders[] = -{ - lj_cf_package_loader_preload, - lj_cf_package_loader_lua, - lj_cf_package_loader_c, - lj_cf_package_loader_croot, - NULL -}; - -LUALIB_API int luaopen_package(lua_State *L) -{ - int i; - int noenv; - luaL_newmetatable(L, "_LOADLIB"); - lj_lib_pushcf(L, lj_cf_package_unloadlib, 1); - lua_setfield(L, -2, "__gc"); - luaL_register(L, LUA_LOADLIBNAME, package_lib); - lua_pushvalue(L, -1); - lua_replace(L, LUA_ENVIRONINDEX); - lua_createtable(L, sizeof(package_loaders)/sizeof(package_loaders[0])-1, 0); - for (i = 0; package_loaders[i] != NULL; i++) { - lj_lib_pushcf(L, package_loaders[i], 1); - lua_rawseti(L, -2, i+1); - } - lua_setfield(L, -2, "loaders"); - lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); - noenv = lua_toboolean(L, -1); - lua_pop(L, 1); - setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT, noenv); - setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT, noenv); - lua_pushliteral(L, LUA_PATH_CONFIG); - lua_setfield(L, -2, "config"); - luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16); - lua_setfield(L, -2, "loaded"); - luaL_findtable(L, LUA_REGISTRYINDEX, "_PRELOAD", 4); - lua_setfield(L, -2, "preload"); - lua_pushvalue(L, LUA_GLOBALSINDEX); - luaL_register(L, NULL, package_global); - lua_pop(L, 1); - return 1; -} - diff --git a/deps/luajit/src/lib_string.c b/deps/luajit/src/lib_string.c deleted file mode 100644 index c6168ed..0000000 --- a/deps/luajit/src/lib_string.c +++ /dev/null @@ -1,940 +0,0 @@ -/* -** String library. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include - -#define lib_string_c -#define LUA_LIB - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_state.h" -#include "lj_ff.h" -#include "lj_bcdump.h" -#include "lj_char.h" -#include "lj_lib.h" - -/* ------------------------------------------------------------------------ */ - -#define LJLIB_MODULE_string - -LJLIB_ASM(string_len) LJLIB_REC(.) -{ - lj_lib_checkstr(L, 1); - return FFH_RETRY; -} - -LJLIB_ASM(string_byte) LJLIB_REC(string_range 0) -{ - GCstr *s = lj_lib_checkstr(L, 1); - int32_t len = (int32_t)s->len; - int32_t start = lj_lib_optint(L, 2, 1); - int32_t stop = lj_lib_optint(L, 3, start); - int32_t n, i; - const unsigned char *p; - if (stop < 0) stop += len+1; - if (start < 0) start += len+1; - if (start <= 0) start = 1; - if (stop > len) stop = len; - if (start > stop) return FFH_RES(0); /* Empty interval: return no results. */ - start--; - n = stop - start; - if ((uint32_t)n > LUAI_MAXCSTACK) - lj_err_caller(L, LJ_ERR_STRSLC); - lj_state_checkstack(L, (MSize)n); - p = (const unsigned char *)strdata(s) + start; - for (i = 0; i < n; i++) - setintV(L->base + i-1, p[i]); - return FFH_RES(n); -} - -LJLIB_ASM(string_char) -{ - int i, nargs = (int)(L->top - L->base); - char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, (MSize)nargs); - for (i = 1; i <= nargs; i++) { - int32_t k = lj_lib_checkint(L, i); - if (!checku8(k)) - lj_err_arg(L, i, LJ_ERR_BADVAL); - buf[i-1] = (char)k; - } - setstrV(L, L->base-1, lj_str_new(L, buf, (size_t)nargs)); - return FFH_RES(1); -} - -LJLIB_ASM(string_sub) LJLIB_REC(string_range 1) -{ - lj_lib_checkstr(L, 1); - lj_lib_checkint(L, 2); - setintV(L->base+2, lj_lib_optint(L, 3, -1)); - return FFH_RETRY; -} - -LJLIB_ASM(string_rep) -{ - GCstr *s = lj_lib_checkstr(L, 1); - int32_t k = lj_lib_checkint(L, 2); - GCstr *sep = lj_lib_optstr(L, 3); - int32_t len = (int32_t)s->len; - global_State *g = G(L); - int64_t tlen; - const char *src; - char *buf; - if (k <= 0) { - empty: - setstrV(L, L->base-1, &g->strempty); - return FFH_RES(1); - } - if (sep) { - tlen = (int64_t)len + sep->len; - if (tlen > LJ_MAX_STR) - lj_err_caller(L, LJ_ERR_STROV); - tlen *= k; - if (tlen > LJ_MAX_STR) - lj_err_caller(L, LJ_ERR_STROV); - } else { - tlen = (int64_t)k * len; - if (tlen > LJ_MAX_STR) - lj_err_caller(L, LJ_ERR_STROV); - } - if (tlen == 0) goto empty; - buf = lj_str_needbuf(L, &g->tmpbuf, (MSize)tlen); - src = strdata(s); - if (sep) { - tlen -= sep->len; /* Ignore trailing separator. */ - if (k > 1) { /* Paste one string and one separator. */ - int32_t i; - i = 0; while (i < len) *buf++ = src[i++]; - src = strdata(sep); len = sep->len; - i = 0; while (i < len) *buf++ = src[i++]; - src = g->tmpbuf.buf; len += s->len; k--; /* Now copy that k-1 times. */ - } - } - do { - int32_t i = 0; - do { *buf++ = src[i++]; } while (i < len); - } while (--k > 0); - setstrV(L, L->base-1, lj_str_new(L, g->tmpbuf.buf, (size_t)tlen)); - return FFH_RES(1); -} - -LJLIB_ASM(string_reverse) -{ - GCstr *s = lj_lib_checkstr(L, 1); - lj_str_needbuf(L, &G(L)->tmpbuf, s->len); - return FFH_RETRY; -} -LJLIB_ASM_(string_lower) -LJLIB_ASM_(string_upper) - -/* ------------------------------------------------------------------------ */ - -static int writer_buf(lua_State *L, const void *p, size_t size, void *b) -{ - luaL_addlstring((luaL_Buffer *)b, (const char *)p, size); - UNUSED(L); - return 0; -} - -LJLIB_CF(string_dump) -{ - GCfunc *fn = lj_lib_checkfunc(L, 1); - int strip = L->base+1 < L->top && tvistruecond(L->base+1); - luaL_Buffer b; - L->top = L->base+1; - luaL_buffinit(L, &b); - if (!isluafunc(fn) || lj_bcwrite(L, funcproto(fn), writer_buf, &b, strip)) - lj_err_caller(L, LJ_ERR_STRDUMP); - luaL_pushresult(&b); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -/* macro to `unsign' a character */ -#define uchar(c) ((unsigned char)(c)) - -#define CAP_UNFINISHED (-1) -#define CAP_POSITION (-2) - -typedef struct MatchState { - const char *src_init; /* init of source string */ - const char *src_end; /* end (`\0') of source string */ - lua_State *L; - int level; /* total number of captures (finished or unfinished) */ - int depth; - struct { - const char *init; - ptrdiff_t len; - } capture[LUA_MAXCAPTURES]; -} MatchState; - -#define L_ESC '%' -#define SPECIALS "^$*+?.([%-" - -static int check_capture(MatchState *ms, int l) -{ - l -= '1'; - if (l < 0 || l >= ms->level || ms->capture[l].len == CAP_UNFINISHED) - lj_err_caller(ms->L, LJ_ERR_STRCAPI); - return l; -} - -static int capture_to_close(MatchState *ms) -{ - int level = ms->level; - for (level--; level>=0; level--) - if (ms->capture[level].len == CAP_UNFINISHED) return level; - lj_err_caller(ms->L, LJ_ERR_STRPATC); - return 0; /* unreachable */ -} - -static const char *classend(MatchState *ms, const char *p) -{ - switch (*p++) { - case L_ESC: - if (*p == '\0') - lj_err_caller(ms->L, LJ_ERR_STRPATE); - return p+1; - case '[': - if (*p == '^') p++; - do { /* look for a `]' */ - if (*p == '\0') - lj_err_caller(ms->L, LJ_ERR_STRPATM); - if (*(p++) == L_ESC && *p != '\0') - p++; /* skip escapes (e.g. `%]') */ - } while (*p != ']'); - return p+1; - default: - return p; - } -} - -static const unsigned char match_class_map[32] = { - 0,LJ_CHAR_ALPHA,0,LJ_CHAR_CNTRL,LJ_CHAR_DIGIT,0,0,LJ_CHAR_GRAPH,0,0,0,0, - LJ_CHAR_LOWER,0,0,0,LJ_CHAR_PUNCT,0,0,LJ_CHAR_SPACE,0, - LJ_CHAR_UPPER,0,LJ_CHAR_ALNUM,LJ_CHAR_XDIGIT,0,0,0,0,0,0,0 -}; - -static int match_class(int c, int cl) -{ - if ((cl & 0xc0) == 0x40) { - int t = match_class_map[(cl&0x1f)]; - if (t) { - t = lj_char_isa(c, t); - return (cl & 0x20) ? t : !t; - } - if (cl == 'z') return c == 0; - if (cl == 'Z') return c != 0; - } - return (cl == c); -} - -static int matchbracketclass(int c, const char *p, const char *ec) -{ - int sig = 1; - if (*(p+1) == '^') { - sig = 0; - p++; /* skip the `^' */ - } - while (++p < ec) { - if (*p == L_ESC) { - p++; - if (match_class(c, uchar(*p))) - return sig; - } - else if ((*(p+1) == '-') && (p+2 < ec)) { - p+=2; - if (uchar(*(p-2)) <= c && c <= uchar(*p)) - return sig; - } - else if (uchar(*p) == c) return sig; - } - return !sig; -} - -static int singlematch(int c, const char *p, const char *ep) -{ - switch (*p) { - case '.': return 1; /* matches any char */ - case L_ESC: return match_class(c, uchar(*(p+1))); - case '[': return matchbracketclass(c, p, ep-1); - default: return (uchar(*p) == c); - } -} - -static const char *match(MatchState *ms, const char *s, const char *p); - -static const char *matchbalance(MatchState *ms, const char *s, const char *p) -{ - if (*p == 0 || *(p+1) == 0) - lj_err_caller(ms->L, LJ_ERR_STRPATU); - if (*s != *p) { - return NULL; - } else { - int b = *p; - int e = *(p+1); - int cont = 1; - while (++s < ms->src_end) { - if (*s == e) { - if (--cont == 0) return s+1; - } else if (*s == b) { - cont++; - } - } - } - return NULL; /* string ends out of balance */ -} - -static const char *max_expand(MatchState *ms, const char *s, - const char *p, const char *ep) -{ - ptrdiff_t i = 0; /* counts maximum expand for item */ - while ((s+i)src_end && singlematch(uchar(*(s+i)), p, ep)) - i++; - /* keeps trying to match with the maximum repetitions */ - while (i>=0) { - const char *res = match(ms, (s+i), ep+1); - if (res) return res; - i--; /* else didn't match; reduce 1 repetition to try again */ - } - return NULL; -} - -static const char *min_expand(MatchState *ms, const char *s, - const char *p, const char *ep) -{ - for (;;) { - const char *res = match(ms, s, ep+1); - if (res != NULL) - return res; - else if (ssrc_end && singlematch(uchar(*s), p, ep)) - s++; /* try with one more repetition */ - else - return NULL; - } -} - -static const char *start_capture(MatchState *ms, const char *s, - const char *p, int what) -{ - const char *res; - int level = ms->level; - if (level >= LUA_MAXCAPTURES) lj_err_caller(ms->L, LJ_ERR_STRCAPN); - ms->capture[level].init = s; - ms->capture[level].len = what; - ms->level = level+1; - if ((res=match(ms, s, p)) == NULL) /* match failed? */ - ms->level--; /* undo capture */ - return res; -} - -static const char *end_capture(MatchState *ms, const char *s, - const char *p) -{ - int l = capture_to_close(ms); - const char *res; - ms->capture[l].len = s - ms->capture[l].init; /* close capture */ - if ((res = match(ms, s, p)) == NULL) /* match failed? */ - ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ - return res; -} - -static const char *match_capture(MatchState *ms, const char *s, int l) -{ - size_t len; - l = check_capture(ms, l); - len = (size_t)ms->capture[l].len; - if ((size_t)(ms->src_end-s) >= len && - memcmp(ms->capture[l].init, s, len) == 0) - return s+len; - else - return NULL; -} - -static const char *match(MatchState *ms, const char *s, const char *p) -{ - if (++ms->depth > LJ_MAX_XLEVEL) - lj_err_caller(ms->L, LJ_ERR_STRPATX); - init: /* using goto's to optimize tail recursion */ - switch (*p) { - case '(': /* start capture */ - if (*(p+1) == ')') /* position capture? */ - s = start_capture(ms, s, p+2, CAP_POSITION); - else - s = start_capture(ms, s, p+1, CAP_UNFINISHED); - break; - case ')': /* end capture */ - s = end_capture(ms, s, p+1); - break; - case L_ESC: - switch (*(p+1)) { - case 'b': /* balanced string? */ - s = matchbalance(ms, s, p+2); - if (s == NULL) break; - p+=4; - goto init; /* else s = match(ms, s, p+4); */ - case 'f': { /* frontier? */ - const char *ep; char previous; - p += 2; - if (*p != '[') - lj_err_caller(ms->L, LJ_ERR_STRPATB); - ep = classend(ms, p); /* points to what is next */ - previous = (s == ms->src_init) ? '\0' : *(s-1); - if (matchbracketclass(uchar(previous), p, ep-1) || - !matchbracketclass(uchar(*s), p, ep-1)) { s = NULL; break; } - p=ep; - goto init; /* else s = match(ms, s, ep); */ - } - default: - if (lj_char_isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ - s = match_capture(ms, s, uchar(*(p+1))); - if (s == NULL) break; - p+=2; - goto init; /* else s = match(ms, s, p+2) */ - } - goto dflt; /* case default */ - } - break; - case '\0': /* end of pattern */ - break; /* match succeeded */ - case '$': - /* is the `$' the last char in pattern? */ - if (*(p+1) != '\0') goto dflt; - if (s != ms->src_end) s = NULL; /* check end of string */ - break; - default: dflt: { /* it is a pattern item */ - const char *ep = classend(ms, p); /* points to what is next */ - int m = ssrc_end && singlematch(uchar(*s), p, ep); - switch (*ep) { - case '?': { /* optional */ - const char *res; - if (m && ((res=match(ms, s+1, ep+1)) != NULL)) { - s = res; - break; - } - p=ep+1; - goto init; /* else s = match(ms, s, ep+1); */ - } - case '*': /* 0 or more repetitions */ - s = max_expand(ms, s, p, ep); - break; - case '+': /* 1 or more repetitions */ - s = (m ? max_expand(ms, s+1, p, ep) : NULL); - break; - case '-': /* 0 or more repetitions (minimum) */ - s = min_expand(ms, s, p, ep); - break; - default: - if (m) { s++; p=ep; goto init; } /* else s = match(ms, s+1, ep); */ - s = NULL; - break; - } - break; - } - } - ms->depth--; - return s; -} - -static const char *lmemfind(const char *s1, size_t l1, - const char *s2, size_t l2) -{ - if (l2 == 0) { - return s1; /* empty strings are everywhere */ - } else if (l2 > l1) { - return NULL; /* avoids a negative `l1' */ - } else { - const char *init; /* to search for a `*s2' inside `s1' */ - l2--; /* 1st char will be checked by `memchr' */ - l1 = l1-l2; /* `s2' cannot be found after that */ - while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { - init++; /* 1st char is already checked */ - if (memcmp(init, s2+1, l2) == 0) { - return init-1; - } else { /* correct `l1' and `s1' to try again */ - l1 -= (size_t)(init-s1); - s1 = init; - } - } - return NULL; /* not found */ - } -} - -static void push_onecapture(MatchState *ms, int i, const char *s, const char *e) -{ - if (i >= ms->level) { - if (i == 0) /* ms->level == 0, too */ - lua_pushlstring(ms->L, s, (size_t)(e - s)); /* add whole match */ - else - lj_err_caller(ms->L, LJ_ERR_STRCAPI); - } else { - ptrdiff_t l = ms->capture[i].len; - if (l == CAP_UNFINISHED) lj_err_caller(ms->L, LJ_ERR_STRCAPU); - if (l == CAP_POSITION) - lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1); - else - lua_pushlstring(ms->L, ms->capture[i].init, (size_t)l); - } -} - -static int push_captures(MatchState *ms, const char *s, const char *e) -{ - int i; - int nlevels = (ms->level == 0 && s) ? 1 : ms->level; - luaL_checkstack(ms->L, nlevels, "too many captures"); - for (i = 0; i < nlevels; i++) - push_onecapture(ms, i, s, e); - return nlevels; /* number of strings pushed */ -} - -static ptrdiff_t posrelat(ptrdiff_t pos, size_t len) -{ - /* relative string position: negative means back from end */ - if (pos < 0) pos += (ptrdiff_t)len + 1; - return (pos >= 0) ? pos : 0; -} - -static int str_find_aux(lua_State *L, int find) -{ - size_t l1, l2; - const char *s = luaL_checklstring(L, 1, &l1); - const char *p = luaL_checklstring(L, 2, &l2); - ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1; - if (init < 0) { - init = 0; - } else if ((size_t)(init) > l1) { -#if LJ_52 - setnilV(L->top-1); - return 1; -#else - init = (ptrdiff_t)l1; -#endif - } - if (find && (lua_toboolean(L, 4) || /* explicit request? */ - strpbrk(p, SPECIALS) == NULL)) { /* or no special characters? */ - /* do a plain search */ - const char *s2 = lmemfind(s+init, l1-(size_t)init, p, l2); - if (s2) { - lua_pushinteger(L, s2-s+1); - lua_pushinteger(L, s2-s+(ptrdiff_t)l2); - return 2; - } - } else { - MatchState ms; - int anchor = (*p == '^') ? (p++, 1) : 0; - const char *s1=s+init; - ms.L = L; - ms.src_init = s; - ms.src_end = s+l1; - do { - const char *res; - ms.level = ms.depth = 0; - if ((res=match(&ms, s1, p)) != NULL) { - if (find) { - lua_pushinteger(L, s1-s+1); /* start */ - lua_pushinteger(L, res-s); /* end */ - return push_captures(&ms, NULL, 0) + 2; - } else { - return push_captures(&ms, s1, res); - } - } - } while (s1++ < ms.src_end && !anchor); - } - lua_pushnil(L); /* not found */ - return 1; -} - -LJLIB_CF(string_find) -{ - return str_find_aux(L, 1); -} - -LJLIB_CF(string_match) -{ - return str_find_aux(L, 0); -} - -LJLIB_NOREG LJLIB_CF(string_gmatch_aux) -{ - const char *p = strVdata(lj_lib_upvalue(L, 2)); - GCstr *str = strV(lj_lib_upvalue(L, 1)); - const char *s = strdata(str); - TValue *tvpos = lj_lib_upvalue(L, 3); - const char *src = s + tvpos->u32.lo; - MatchState ms; - ms.L = L; - ms.src_init = s; - ms.src_end = s + str->len; - for (; src <= ms.src_end; src++) { - const char *e; - ms.level = ms.depth = 0; - if ((e = match(&ms, src, p)) != NULL) { - int32_t pos = (int32_t)(e - s); - if (e == src) pos++; /* Ensure progress for empty match. */ - tvpos->u32.lo = (uint32_t)pos; - return push_captures(&ms, src, e); - } - } - return 0; /* not found */ -} - -LJLIB_CF(string_gmatch) -{ - lj_lib_checkstr(L, 1); - lj_lib_checkstr(L, 2); - L->top = L->base+3; - (L->top-1)->u64 = 0; - lj_lib_pushcc(L, lj_cf_string_gmatch_aux, FF_string_gmatch_aux, 3); - return 1; -} - -static void add_s(MatchState *ms, luaL_Buffer *b, const char *s, const char *e) -{ - size_t l, i; - const char *news = lua_tolstring(ms->L, 3, &l); - for (i = 0; i < l; i++) { - if (news[i] != L_ESC) { - luaL_addchar(b, news[i]); - } else { - i++; /* skip ESC */ - if (!lj_char_isdigit(uchar(news[i]))) { - luaL_addchar(b, news[i]); - } else if (news[i] == '0') { - luaL_addlstring(b, s, (size_t)(e - s)); - } else { - push_onecapture(ms, news[i] - '1', s, e); - luaL_addvalue(b); /* add capture to accumulated result */ - } - } - } -} - -static void add_value(MatchState *ms, luaL_Buffer *b, - const char *s, const char *e) -{ - lua_State *L = ms->L; - switch (lua_type(L, 3)) { - case LUA_TNUMBER: - case LUA_TSTRING: { - add_s(ms, b, s, e); - return; - } - case LUA_TFUNCTION: { - int n; - lua_pushvalue(L, 3); - n = push_captures(ms, s, e); - lua_call(L, n, 1); - break; - } - case LUA_TTABLE: { - push_onecapture(ms, 0, s, e); - lua_gettable(L, 3); - break; - } - } - if (!lua_toboolean(L, -1)) { /* nil or false? */ - lua_pop(L, 1); - lua_pushlstring(L, s, (size_t)(e - s)); /* keep original text */ - } else if (!lua_isstring(L, -1)) { - lj_err_callerv(L, LJ_ERR_STRGSRV, luaL_typename(L, -1)); - } - luaL_addvalue(b); /* add result to accumulator */ -} - -LJLIB_CF(string_gsub) -{ - size_t srcl; - const char *src = luaL_checklstring(L, 1, &srcl); - const char *p = luaL_checkstring(L, 2); - int tr = lua_type(L, 3); - int max_s = luaL_optint(L, 4, (int)(srcl+1)); - int anchor = (*p == '^') ? (p++, 1) : 0; - int n = 0; - MatchState ms; - luaL_Buffer b; - if (!(tr == LUA_TNUMBER || tr == LUA_TSTRING || - tr == LUA_TFUNCTION || tr == LUA_TTABLE)) - lj_err_arg(L, 3, LJ_ERR_NOSFT); - luaL_buffinit(L, &b); - ms.L = L; - ms.src_init = src; - ms.src_end = src+srcl; - while (n < max_s) { - const char *e; - ms.level = ms.depth = 0; - e = match(&ms, src, p); - if (e) { - n++; - add_value(&ms, &b, src, e); - } - if (e && e>src) /* non empty match? */ - src = e; /* skip it */ - else if (src < ms.src_end) - luaL_addchar(&b, *src++); - else - break; - if (anchor) - break; - } - luaL_addlstring(&b, src, (size_t)(ms.src_end-src)); - luaL_pushresult(&b); - lua_pushinteger(L, n); /* number of substitutions */ - return 2; -} - -/* ------------------------------------------------------------------------ */ - -/* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ -#define MAX_FMTITEM 512 -/* valid flags in a format specification */ -#define FMT_FLAGS "-+ #0" -/* -** maximum size of each format specification (such as '%-099.99d') -** (+10 accounts for %99.99x plus margin of error) -*/ -#define MAX_FMTSPEC (sizeof(FMT_FLAGS) + sizeof(LUA_INTFRMLEN) + 10) - -static void addquoted(lua_State *L, luaL_Buffer *b, int arg) -{ - GCstr *str = lj_lib_checkstr(L, arg); - int32_t len = (int32_t)str->len; - const char *s = strdata(str); - luaL_addchar(b, '"'); - while (len--) { - uint32_t c = uchar(*s); - if (c == '"' || c == '\\' || c == '\n') { - luaL_addchar(b, '\\'); - } else if (lj_char_iscntrl(c)) { /* This can only be 0-31 or 127. */ - uint32_t d; - luaL_addchar(b, '\\'); - if (c >= 100 || lj_char_isdigit(uchar(s[1]))) { - luaL_addchar(b, '0'+(c >= 100)); if (c >= 100) c -= 100; - goto tens; - } else if (c >= 10) { - tens: - d = (c * 205) >> 11; c -= d * 10; luaL_addchar(b, '0'+d); - } - c += '0'; - } - luaL_addchar(b, c); - s++; - } - luaL_addchar(b, '"'); -} - -static const char *scanformat(lua_State *L, const char *strfrmt, char *form) -{ - const char *p = strfrmt; - while (*p != '\0' && strchr(FMT_FLAGS, *p) != NULL) p++; /* skip flags */ - if ((size_t)(p - strfrmt) >= sizeof(FMT_FLAGS)) - lj_err_caller(L, LJ_ERR_STRFMTR); - if (lj_char_isdigit(uchar(*p))) p++; /* skip width */ - if (lj_char_isdigit(uchar(*p))) p++; /* (2 digits at most) */ - if (*p == '.') { - p++; - if (lj_char_isdigit(uchar(*p))) p++; /* skip precision */ - if (lj_char_isdigit(uchar(*p))) p++; /* (2 digits at most) */ - } - if (lj_char_isdigit(uchar(*p))) - lj_err_caller(L, LJ_ERR_STRFMTW); - *(form++) = '%'; - strncpy(form, strfrmt, (size_t)(p - strfrmt + 1)); - form += p - strfrmt + 1; - *form = '\0'; - return p; -} - -static void addintlen(char *form) -{ - size_t l = strlen(form); - char spec = form[l - 1]; - strcpy(form + l - 1, LUA_INTFRMLEN); - form[l + sizeof(LUA_INTFRMLEN) - 2] = spec; - form[l + sizeof(LUA_INTFRMLEN) - 1] = '\0'; -} - -static unsigned LUA_INTFRM_T num2intfrm(lua_State *L, int arg) -{ - if (sizeof(LUA_INTFRM_T) == 4) { - return (LUA_INTFRM_T)lj_lib_checkbit(L, arg); - } else { - cTValue *o; - lj_lib_checknumber(L, arg); - o = L->base+arg-1; - if (tvisint(o)) - return (LUA_INTFRM_T)intV(o); - else - return (LUA_INTFRM_T)numV(o); - } -} - -static unsigned LUA_INTFRM_T num2uintfrm(lua_State *L, int arg) -{ - if (sizeof(LUA_INTFRM_T) == 4) { - return (unsigned LUA_INTFRM_T)lj_lib_checkbit(L, arg); - } else { - cTValue *o; - lj_lib_checknumber(L, arg); - o = L->base+arg-1; - if (tvisint(o)) - return (unsigned LUA_INTFRM_T)intV(o); - else if ((int32_t)o->u32.hi < 0) - return (unsigned LUA_INTFRM_T)(LUA_INTFRM_T)numV(o); - else - return (unsigned LUA_INTFRM_T)numV(o); - } -} - -static GCstr *meta_tostring(lua_State *L, int arg) -{ - TValue *o = L->base+arg-1; - cTValue *mo; - lua_assert(o < L->top); /* Caller already checks for existence. */ - if (LJ_LIKELY(tvisstr(o))) - return strV(o); - if (!tvisnil(mo = lj_meta_lookup(L, o, MM_tostring))) { - copyTV(L, L->top++, mo); - copyTV(L, L->top++, o); - lua_call(L, 1, 1); - L->top--; - if (tvisstr(L->top)) - return strV(L->top); - o = L->base+arg-1; - copyTV(L, o, L->top); - } - if (tvisnumber(o)) { - return lj_str_fromnumber(L, o); - } else if (tvisnil(o)) { - return lj_str_newlit(L, "nil"); - } else if (tvisfalse(o)) { - return lj_str_newlit(L, "false"); - } else if (tvistrue(o)) { - return lj_str_newlit(L, "true"); - } else { - if (tvisfunc(o) && isffunc(funcV(o))) - lj_str_pushf(L, "function: builtin#%d", funcV(o)->c.ffid); - else - lj_str_pushf(L, "%s: %p", lj_typename(o), lua_topointer(L, arg)); - L->top--; - return strV(L->top); - } -} - -LJLIB_CF(string_format) -{ - int arg = 1, top = (int)(L->top - L->base); - GCstr *fmt = lj_lib_checkstr(L, arg); - const char *strfrmt = strdata(fmt); - const char *strfrmt_end = strfrmt + fmt->len; - luaL_Buffer b; - luaL_buffinit(L, &b); - while (strfrmt < strfrmt_end) { - if (*strfrmt != L_ESC) { - luaL_addchar(&b, *strfrmt++); - } else if (*++strfrmt == L_ESC) { - luaL_addchar(&b, *strfrmt++); /* %% */ - } else { /* format item */ - char form[MAX_FMTSPEC]; /* to store the format (`%...') */ - char buff[MAX_FMTITEM]; /* to store the formatted item */ - if (++arg > top) - luaL_argerror(L, arg, lj_obj_typename[0]); - strfrmt = scanformat(L, strfrmt, form); - switch (*strfrmt++) { - case 'c': - sprintf(buff, form, lj_lib_checkint(L, arg)); - break; - case 'd': case 'i': - addintlen(form); - sprintf(buff, form, num2intfrm(L, arg)); - break; - case 'o': case 'u': case 'x': case 'X': - addintlen(form); - sprintf(buff, form, num2uintfrm(L, arg)); - break; - case 'e': case 'E': case 'f': case 'g': case 'G': case 'a': case 'A': { - TValue tv; - tv.n = lj_lib_checknum(L, arg); - if (LJ_UNLIKELY((tv.u32.hi << 1) >= 0xffe00000)) { - /* Canonicalize output of non-finite values. */ - char *p, nbuf[LJ_STR_NUMBUF]; - size_t len = lj_str_bufnum(nbuf, &tv); - if (strfrmt[-1] < 'a') { - nbuf[len-3] = nbuf[len-3] - 0x20; - nbuf[len-2] = nbuf[len-2] - 0x20; - nbuf[len-1] = nbuf[len-1] - 0x20; - } - nbuf[len] = '\0'; - for (p = form; *p < 'A' && *p != '.'; p++) ; - *p++ = 's'; *p = '\0'; - sprintf(buff, form, nbuf); - break; - } - sprintf(buff, form, (double)tv.n); - break; - } - case 'q': - addquoted(L, &b, arg); - continue; - case 'p': - lj_str_pushf(L, "%p", lua_topointer(L, arg)); - luaL_addvalue(&b); - continue; - case 's': { - GCstr *str = meta_tostring(L, arg); - if (!strchr(form, '.') && str->len >= 100) { - /* no precision and string is too long to be formatted; - keep original string */ - setstrV(L, L->top++, str); - luaL_addvalue(&b); - continue; - } - sprintf(buff, form, strdata(str)); - break; - } - default: - lj_err_callerv(L, LJ_ERR_STRFMTO, *(strfrmt -1)); - break; - } - luaL_addlstring(&b, buff, strlen(buff)); - } - } - luaL_pushresult(&b); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -#include "lj_libdef.h" - -LUALIB_API int luaopen_string(lua_State *L) -{ - GCtab *mt; - global_State *g; - LJ_LIB_REG(L, LUA_STRLIBNAME, string); -#if defined(LUA_COMPAT_GFIND) && !LJ_52 - lua_getfield(L, -1, "gmatch"); - lua_setfield(L, -2, "gfind"); -#endif - mt = lj_tab_new(L, 0, 1); - /* NOBARRIER: basemt is a GC root. */ - g = G(L); - setgcref(basemt_it(g, LJ_TSTR), obj2gco(mt)); - settabV(L, lj_tab_setstr(L, mt, mmname_str(g, MM_index)), tabV(L->top-1)); - mt->nomm = (uint8_t)(~(1u<top, func); - setintV(L->top+1, i); - val = lj_tab_getint(t, (int32_t)i); - if (val) { copyTV(L, L->top+2, val); } else { setnilV(L->top+2); } - L->top += 3; - lua_call(L, 2, 1); - if (!tvisnil(L->top-1)) - return 1; - L->top--; - } - return 0; -} - -LJLIB_CF(table_foreach) -{ - GCtab *t = lj_lib_checktab(L, 1); - GCfunc *func = lj_lib_checkfunc(L, 2); - L->top = L->base+3; - setnilV(L->top-1); - while (lj_tab_next(L, t, L->top-1)) { - copyTV(L, L->top+2, L->top); - copyTV(L, L->top+1, L->top-1); - setfuncV(L, L->top, func); - L->top += 3; - lua_call(L, 2, 1); - if (!tvisnil(L->top-1)) - return 1; - L->top--; - } - return 0; -} - -LJLIB_ASM(table_getn) LJLIB_REC(.) -{ - lj_lib_checktab(L, 1); - return FFH_UNREACHABLE; -} - -LJLIB_CF(table_maxn) -{ - GCtab *t = lj_lib_checktab(L, 1); - TValue *array = tvref(t->array); - Node *node; - lua_Number m = 0; - ptrdiff_t i; - for (i = (ptrdiff_t)t->asize - 1; i >= 0; i--) - if (!tvisnil(&array[i])) { - m = (lua_Number)(int32_t)i; - break; - } - node = noderef(t->node); - for (i = (ptrdiff_t)t->hmask; i >= 0; i--) - if (!tvisnil(&node[i].val) && tvisnumber(&node[i].key)) { - lua_Number n = numberVnum(&node[i].key); - if (n > m) m = n; - } - setnumV(L->top-1, m); - return 1; -} - -LJLIB_CF(table_insert) LJLIB_REC(.) -{ - GCtab *t = lj_lib_checktab(L, 1); - int32_t n, i = (int32_t)lj_tab_len(t) + 1; - int nargs = (int)((char *)L->top - (char *)L->base); - if (nargs != 2*sizeof(TValue)) { - if (nargs != 3*sizeof(TValue)) - lj_err_caller(L, LJ_ERR_TABINS); - /* NOBARRIER: This just moves existing elements around. */ - for (n = lj_lib_checkint(L, 2); i > n; i--) { - /* The set may invalidate the get pointer, so need to do it first! */ - TValue *dst = lj_tab_setint(L, t, i); - cTValue *src = lj_tab_getint(t, i-1); - if (src) { - copyTV(L, dst, src); - } else { - setnilV(dst); - } - } - i = n; - } - { - TValue *dst = lj_tab_setint(L, t, i); - copyTV(L, dst, L->top-1); /* Set new value. */ - lj_gc_barriert(L, t, dst); - } - return 0; -} - -LJLIB_CF(table_remove) LJLIB_REC(.) -{ - GCtab *t = lj_lib_checktab(L, 1); - int32_t e = (int32_t)lj_tab_len(t); - int32_t pos = lj_lib_optint(L, 2, e); - if (!(1 <= pos && pos <= e)) /* Nothing to remove? */ - return 0; - lua_rawgeti(L, 1, pos); /* Get previous value. */ - /* NOBARRIER: This just moves existing elements around. */ - for (; pos < e; pos++) { - cTValue *src = lj_tab_getint(t, pos+1); - TValue *dst = lj_tab_setint(L, t, pos); - if (src) { - copyTV(L, dst, src); - } else { - setnilV(dst); - } - } - setnilV(lj_tab_setint(L, t, e)); /* Remove (last) value. */ - return 1; /* Return previous value. */ -} - -LJLIB_CF(table_concat) -{ - luaL_Buffer b; - GCtab *t = lj_lib_checktab(L, 1); - GCstr *sep = lj_lib_optstr(L, 2); - MSize seplen = sep ? sep->len : 0; - int32_t i = lj_lib_optint(L, 3, 1); - int32_t e = (L->base+3 < L->top && !tvisnil(L->base+3)) ? - lj_lib_checkint(L, 4) : (int32_t)lj_tab_len(t); - luaL_buffinit(L, &b); - if (i <= e) { - for (;;) { - cTValue *o; - lua_rawgeti(L, 1, i); - o = L->top-1; - if (!(tvisstr(o) || tvisnumber(o))) - lj_err_callerv(L, LJ_ERR_TABCAT, lj_typename(o), i); - luaL_addvalue(&b); - if (i++ == e) break; - if (seplen) - luaL_addlstring(&b, strdata(sep), seplen); - } - } - luaL_pushresult(&b); - return 1; -} - -/* ------------------------------------------------------------------------ */ - -static void set2(lua_State *L, int i, int j) -{ - lua_rawseti(L, 1, i); - lua_rawseti(L, 1, j); -} - -static int sort_comp(lua_State *L, int a, int b) -{ - if (!lua_isnil(L, 2)) { /* function? */ - int res; - lua_pushvalue(L, 2); - lua_pushvalue(L, a-1); /* -1 to compensate function */ - lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */ - lua_call(L, 2, 1); - res = lua_toboolean(L, -1); - lua_pop(L, 1); - return res; - } else { /* a < b? */ - return lua_lessthan(L, a, b); - } -} - -static void auxsort(lua_State *L, int l, int u) -{ - while (l < u) { /* for tail recursion */ - int i, j; - /* sort elements a[l], a[(l+u)/2] and a[u] */ - lua_rawgeti(L, 1, l); - lua_rawgeti(L, 1, u); - if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */ - set2(L, l, u); /* swap a[l] - a[u] */ - else - lua_pop(L, 2); - if (u-l == 1) break; /* only 2 elements */ - i = (l+u)/2; - lua_rawgeti(L, 1, i); - lua_rawgeti(L, 1, l); - if (sort_comp(L, -2, -1)) { /* a[i]= P */ - while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { - if (i>=u) lj_err_caller(L, LJ_ERR_TABSORT); - lua_pop(L, 1); /* remove a[i] */ - } - /* repeat --j until a[j] <= P */ - while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { - if (j<=l) lj_err_caller(L, LJ_ERR_TABSORT); - lua_pop(L, 1); /* remove a[j] */ - } - if (jbase+1)) - lj_lib_checkfunc(L, 2); - auxsort(L, 1, n); - return 0; -} - -#if LJ_52 -LJLIB_PUSH("n") -LJLIB_CF(table_pack) -{ - TValue *array, *base = L->base; - MSize i, n = (uint32_t)(L->top - base); - GCtab *t = lj_tab_new(L, n ? n+1 : 0, 1); - /* NOBARRIER: The table is new (marked white). */ - setintV(lj_tab_setstr(L, t, strV(lj_lib_upvalue(L, 1))), (int32_t)n); - for (array = tvref(t->array) + 1, i = 0; i < n; i++) - copyTV(L, &array[i], &base[i]); - settabV(L, base, t); - L->top = base+1; - lj_gc_check(L); - return 1; -} -#endif - -/* ------------------------------------------------------------------------ */ - -#include "lj_libdef.h" - -LUALIB_API int luaopen_table(lua_State *L) -{ - LJ_LIB_REG(L, LUA_TABLIBNAME, table); -#if LJ_52 - lua_getglobal(L, "unpack"); - lua_setfield(L, -2, "unpack"); -#endif - return 1; -} - diff --git a/deps/luajit/src/lj.supp b/deps/luajit/src/lj.supp deleted file mode 100644 index 411f261..0000000 --- a/deps/luajit/src/lj.supp +++ /dev/null @@ -1,26 +0,0 @@ -# Valgrind suppression file for LuaJIT 2.0. -{ - Optimized string compare - Memcheck:Addr4 - fun:lj_str_cmp -} -{ - Optimized string compare - Memcheck:Addr1 - fun:lj_str_cmp -} -{ - Optimized string compare - Memcheck:Addr4 - fun:lj_str_new -} -{ - Optimized string compare - Memcheck:Addr1 - fun:lj_str_new -} -{ - Optimized string compare - Memcheck:Cond - fun:lj_str_new -} diff --git a/deps/luajit/src/lj_alloc.c b/deps/luajit/src/lj_alloc.c deleted file mode 100644 index 7c7ec67..0000000 --- a/deps/luajit/src/lj_alloc.c +++ /dev/null @@ -1,1396 +0,0 @@ -/* -** Bundled memory allocator. -** -** Beware: this is a HEAVILY CUSTOMIZED version of dlmalloc. -** The original bears the following remark: -** -** This is a version (aka dlmalloc) of malloc/free/realloc written by -** Doug Lea and released to the public domain, as explained at -** http://creativecommons.org/licenses/publicdomain. -** -** * Version pre-2.8.4 Wed Mar 29 19:46:29 2006 (dl at gee) -** -** No additional copyright is claimed over the customizations. -** Please do NOT bother the original author about this version here! -** -** If you want to use dlmalloc in another project, you should get -** the original from: ftp://gee.cs.oswego.edu/pub/misc/ -** For thread-safe derivatives, take a look at: -** - ptmalloc: http://www.malloc.de/ -** - nedmalloc: http://www.nedprod.com/programs/portable/nedmalloc/ -*/ - -#define lj_alloc_c -#define LUA_CORE - -/* To get the mremap prototype. Must be defined before any system includes. */ -#if defined(__linux__) && !defined(_GNU_SOURCE) -#define _GNU_SOURCE -#endif - -#include "lj_def.h" -#include "lj_arch.h" -#include "lj_alloc.h" - -#ifndef LUAJIT_USE_SYSMALLOC - -#define MAX_SIZE_T (~(size_t)0) -#define MALLOC_ALIGNMENT ((size_t)8U) - -#define DEFAULT_GRANULARITY ((size_t)128U * (size_t)1024U) -#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -#define DEFAULT_MMAP_THRESHOLD ((size_t)128U * (size_t)1024U) -#define MAX_RELEASE_CHECK_RATE 255 - -/* ------------------- size_t and alignment properties -------------------- */ - -/* The byte and bit size of a size_t */ -#define SIZE_T_SIZE (sizeof(size_t)) -#define SIZE_T_BITSIZE (sizeof(size_t) << 3) - -/* Some constants coerced to size_t */ -/* Annoying but necessary to avoid errors on some platforms */ -#define SIZE_T_ZERO ((size_t)0) -#define SIZE_T_ONE ((size_t)1) -#define SIZE_T_TWO ((size_t)2) -#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) - -/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) - -/* the number of bytes to offset an address to align it */ -#define align_offset(A)\ - ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ - ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) - -/* -------------------------- MMAP support ------------------------------- */ - -#define MFAIL ((void *)(MAX_SIZE_T)) -#define CMFAIL ((char *)(MFAIL)) /* defined for convenience */ - -#define IS_DIRECT_BIT (SIZE_T_ONE) - -#if LJ_TARGET_WINDOWS - -#define WIN32_LEAN_AND_MEAN -#include - -#if LJ_64 - -/* Undocumented, but hey, that's what we all love so much about Windows. */ -typedef long (*PNTAVM)(HANDLE handle, void **addr, ULONG zbits, - size_t *size, ULONG alloctype, ULONG prot); -static PNTAVM ntavm; - -/* Number of top bits of the lower 32 bits of an address that must be zero. -** Apparently 0 gives us full 64 bit addresses and 1 gives us the lower 2GB. -*/ -#define NTAVM_ZEROBITS 1 - -static void INIT_MMAP(void) -{ - ntavm = (PNTAVM)GetProcAddress(GetModuleHandleA("ntdll.dll"), - "NtAllocateVirtualMemory"); -} - -/* Win64 32 bit MMAP via NtAllocateVirtualMemory. */ -static LJ_AINLINE void *CALL_MMAP(size_t size) -{ - DWORD olderr = GetLastError(); - void *ptr = NULL; - long st = ntavm(INVALID_HANDLE_VALUE, &ptr, NTAVM_ZEROBITS, &size, - MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); - SetLastError(olderr); - return st == 0 ? ptr : MFAIL; -} - -/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -static LJ_AINLINE void *DIRECT_MMAP(size_t size) -{ - DWORD olderr = GetLastError(); - void *ptr = NULL; - long st = ntavm(INVALID_HANDLE_VALUE, &ptr, NTAVM_ZEROBITS, &size, - MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE); - SetLastError(olderr); - return st == 0 ? ptr : MFAIL; -} - -#else - -#define INIT_MMAP() ((void)0) - -/* Win32 MMAP via VirtualAlloc */ -static LJ_AINLINE void *CALL_MMAP(size_t size) -{ - DWORD olderr = GetLastError(); - void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); - SetLastError(olderr); - return ptr ? ptr : MFAIL; -} - -/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -static LJ_AINLINE void *DIRECT_MMAP(size_t size) -{ - DWORD olderr = GetLastError(); - void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, - PAGE_READWRITE); - SetLastError(olderr); - return ptr ? ptr : MFAIL; -} - -#endif - -/* This function supports releasing coalesed segments */ -static LJ_AINLINE int CALL_MUNMAP(void *ptr, size_t size) -{ - DWORD olderr = GetLastError(); - MEMORY_BASIC_INFORMATION minfo; - char *cptr = (char *)ptr; - while (size) { - if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) - return -1; - if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || - minfo.State != MEM_COMMIT || minfo.RegionSize > size) - return -1; - if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) - return -1; - cptr += minfo.RegionSize; - size -= minfo.RegionSize; - } - SetLastError(olderr); - return 0; -} - -#else - -#include -#include - -#define MMAP_PROT (PROT_READ|PROT_WRITE) -#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -#define MAP_ANONYMOUS MAP_ANON -#endif -#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) - -#if LJ_64 -/* 64 bit mode needs special support for allocating memory in the lower 2GB. */ - -#if defined(MAP_32BIT) - -#if defined(__sun__) -#define MMAP_REGION_START ((uintptr_t)0x1000) -#else -/* Actually this only gives us max. 1GB in current Linux kernels. */ -#define MMAP_REGION_START ((uintptr_t)0) -#endif - -static LJ_AINLINE void *CALL_MMAP(size_t size) -{ - int olderr = errno; - void *ptr = mmap((void *)MMAP_REGION_START, size, MMAP_PROT, MAP_32BIT|MMAP_FLAGS, -1, 0); - errno = olderr; - return ptr; -} - -#elif LJ_TARGET_OSX || LJ_TARGET_PS4 || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__sun__) - -/* OSX and FreeBSD mmap() use a naive first-fit linear search. -** That's perfect for us. Except that -pagezero_size must be set for OSX, -** otherwise the lower 4GB are blocked. And the 32GB RLIMIT_DATA needs -** to be reduced to 250MB on FreeBSD. -*/ -#if LJ_TARGET_OSX || defined(__DragonFly__) -#define MMAP_REGION_START ((uintptr_t)0x10000) -#elif LJ_TARGET_PS4 -#define MMAP_REGION_START ((uintptr_t)0x4000) -#else -#define MMAP_REGION_START ((uintptr_t)0x10000000) -#endif -#define MMAP_REGION_END ((uintptr_t)0x80000000) - -#if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && !LJ_TARGET_PS4 -#include -#endif - -static LJ_AINLINE void *CALL_MMAP(size_t size) -{ - int olderr = errno; - /* Hint for next allocation. Doesn't need to be thread-safe. */ - static uintptr_t alloc_hint = MMAP_REGION_START; - int retry = 0; -#if (defined(__FreeBSD__) || defined(__FreeBSD_kernel__)) && !LJ_TARGET_PS4 - static int rlimit_modified = 0; - if (LJ_UNLIKELY(rlimit_modified == 0)) { - struct rlimit rlim; - rlim.rlim_cur = rlim.rlim_max = MMAP_REGION_START; - setrlimit(RLIMIT_DATA, &rlim); /* Ignore result. May fail below. */ - rlimit_modified = 1; - } -#endif - for (;;) { - void *p = mmap((void *)alloc_hint, size, MMAP_PROT, MMAP_FLAGS, -1, 0); - if ((uintptr_t)p >= MMAP_REGION_START && - (uintptr_t)p + size < MMAP_REGION_END) { - alloc_hint = (uintptr_t)p + size; - errno = olderr; - return p; - } - if (p != CMFAIL) munmap(p, size); -#if defined(__sun__) || defined(__DragonFly__) - alloc_hint += 0x1000000; /* Need near-exhaustive linear scan. */ - if (alloc_hint + size < MMAP_REGION_END) continue; -#endif - if (retry) break; - retry = 1; - alloc_hint = MMAP_REGION_START; - } - errno = olderr; - return CMFAIL; -} - -#else - -#error "NYI: need an equivalent of MAP_32BIT for this 64 bit OS" - -#endif - -#else - -/* 32 bit mode is easy. */ -static LJ_AINLINE void *CALL_MMAP(size_t size) -{ - int olderr = errno; - void *ptr = mmap(NULL, size, MMAP_PROT, MMAP_FLAGS, -1, 0); - errno = olderr; - return ptr; -} - -#endif - -#define INIT_MMAP() ((void)0) -#define DIRECT_MMAP(s) CALL_MMAP(s) - -static LJ_AINLINE int CALL_MUNMAP(void *ptr, size_t size) -{ - int olderr = errno; - int ret = munmap(ptr, size); - errno = olderr; - return ret; -} - -#if LJ_TARGET_LINUX -/* Need to define _GNU_SOURCE to get the mremap prototype. */ -static LJ_AINLINE void *CALL_MREMAP_(void *ptr, size_t osz, size_t nsz, - int flags) -{ - int olderr = errno; - ptr = mremap(ptr, osz, nsz, flags); - errno = olderr; - return ptr; -} - -#define CALL_MREMAP(addr, osz, nsz, mv) CALL_MREMAP_((addr), (osz), (nsz), (mv)) -#define CALL_MREMAP_NOMOVE 0 -#define CALL_MREMAP_MAYMOVE 1 -#if LJ_64 -#define CALL_MREMAP_MV CALL_MREMAP_NOMOVE -#else -#define CALL_MREMAP_MV CALL_MREMAP_MAYMOVE -#endif -#endif - -#endif - -#ifndef CALL_MREMAP -#define CALL_MREMAP(addr, osz, nsz, mv) ((void)osz, MFAIL) -#endif - -/* ----------------------- Chunk representations ------------------------ */ - -struct malloc_chunk { - size_t prev_foot; /* Size of previous chunk (if free). */ - size_t head; /* Size and inuse bits. */ - struct malloc_chunk *fd; /* double links -- used only if free. */ - struct malloc_chunk *bk; -}; - -typedef struct malloc_chunk mchunk; -typedef struct malloc_chunk *mchunkptr; -typedef struct malloc_chunk *sbinptr; /* The type of bins of chunks */ -typedef size_t bindex_t; /* Described below */ -typedef unsigned int binmap_t; /* Described below */ -typedef unsigned int flag_t; /* The type of various bit flag sets */ - -/* ------------------- Chunks sizes and alignments ----------------------- */ - -#define MCHUNK_SIZE (sizeof(mchunk)) - -#define CHUNK_OVERHEAD (SIZE_T_SIZE) - -/* Direct chunks need a second word of overhead ... */ -#define DIRECT_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -/* ... and additional padding for fake next-chunk at foot */ -#define DIRECT_FOOT_PAD (FOUR_SIZE_T_SIZES) - -/* The smallest size we can malloc is an aligned minimal chunk */ -#define MIN_CHUNK_SIZE\ - ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* conversion from malloc headers to user pointers, and back */ -#define chunk2mem(p) ((void *)((char *)(p) + TWO_SIZE_T_SIZES)) -#define mem2chunk(mem) ((mchunkptr)((char *)(mem) - TWO_SIZE_T_SIZES)) -/* chunk associated with aligned address A */ -#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) - -/* Bounds on request (not chunk) sizes. */ -#define MAX_REQUEST ((~MIN_CHUNK_SIZE+1) << 2) -#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) - -/* pad request bytes into a usable size */ -#define pad_request(req) \ - (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* pad request, checking for minimum (but not maximum) */ -#define request2size(req) \ - (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) - -/* ------------------ Operations on head and foot fields ----------------- */ - -#define PINUSE_BIT (SIZE_T_ONE) -#define CINUSE_BIT (SIZE_T_TWO) -#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) - -/* Head value for fenceposts */ -#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) - -/* extraction of fields from head words */ -#define cinuse(p) ((p)->head & CINUSE_BIT) -#define pinuse(p) ((p)->head & PINUSE_BIT) -#define chunksize(p) ((p)->head & ~(INUSE_BITS)) - -#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) -#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) - -/* Treat space at ptr +/- offset as a chunk */ -#define chunk_plus_offset(p, s) ((mchunkptr)(((char *)(p)) + (s))) -#define chunk_minus_offset(p, s) ((mchunkptr)(((char *)(p)) - (s))) - -/* Ptr to next or previous physical malloc_chunk. */ -#define next_chunk(p) ((mchunkptr)(((char *)(p)) + ((p)->head & ~INUSE_BITS))) -#define prev_chunk(p) ((mchunkptr)(((char *)(p)) - ((p)->prev_foot) )) - -/* extract next chunk's pinuse bit */ -#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) - -/* Get/set size at footer */ -#define get_foot(p, s) (((mchunkptr)((char *)(p) + (s)))->prev_foot) -#define set_foot(p, s) (((mchunkptr)((char *)(p) + (s)))->prev_foot = (s)) - -/* Set size, pinuse bit, and foot */ -#define set_size_and_pinuse_of_free_chunk(p, s)\ - ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) - -/* Set size, pinuse bit, foot, and clear next pinuse */ -#define set_free_with_pinuse(p, s, n)\ - (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) - -#define is_direct(p)\ - (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_DIRECT_BIT)) - -/* Get the internal overhead associated with chunk p */ -#define overhead_for(p)\ - (is_direct(p)? DIRECT_CHUNK_OVERHEAD : CHUNK_OVERHEAD) - -/* ---------------------- Overlaid data structures ----------------------- */ - -struct malloc_tree_chunk { - /* The first four fields must be compatible with malloc_chunk */ - size_t prev_foot; - size_t head; - struct malloc_tree_chunk *fd; - struct malloc_tree_chunk *bk; - - struct malloc_tree_chunk *child[2]; - struct malloc_tree_chunk *parent; - bindex_t index; -}; - -typedef struct malloc_tree_chunk tchunk; -typedef struct malloc_tree_chunk *tchunkptr; -typedef struct malloc_tree_chunk *tbinptr; /* The type of bins of trees */ - -/* A little helper macro for trees */ -#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) - -/* ----------------------------- Segments -------------------------------- */ - -struct malloc_segment { - char *base; /* base address */ - size_t size; /* allocated size */ - struct malloc_segment *next; /* ptr to next segment */ -}; - -typedef struct malloc_segment msegment; -typedef struct malloc_segment *msegmentptr; - -/* ---------------------------- malloc_state ----------------------------- */ - -/* Bin types, widths and sizes */ -#define NSMALLBINS (32U) -#define NTREEBINS (32U) -#define SMALLBIN_SHIFT (3U) -#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -#define TREEBIN_SHIFT (8U) -#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) - -struct malloc_state { - binmap_t smallmap; - binmap_t treemap; - size_t dvsize; - size_t topsize; - mchunkptr dv; - mchunkptr top; - size_t trim_check; - size_t release_checks; - mchunkptr smallbins[(NSMALLBINS+1)*2]; - tbinptr treebins[NTREEBINS]; - msegment seg; -}; - -typedef struct malloc_state *mstate; - -#define is_initialized(M) ((M)->top != 0) - -/* -------------------------- system alloc setup ------------------------- */ - -/* page-align a size */ -#define page_align(S)\ - (((S) + (LJ_PAGESIZE - SIZE_T_ONE)) & ~(LJ_PAGESIZE - SIZE_T_ONE)) - -/* granularity-align a size */ -#define granularity_align(S)\ - (((S) + (DEFAULT_GRANULARITY - SIZE_T_ONE))\ - & ~(DEFAULT_GRANULARITY - SIZE_T_ONE)) - -#if LJ_TARGET_WINDOWS -#define mmap_align(S) granularity_align(S) -#else -#define mmap_align(S) page_align(S) -#endif - -/* True if segment S holds address A */ -#define segment_holds(S, A)\ - ((char *)(A) >= S->base && (char *)(A) < S->base + S->size) - -/* Return segment holding given address */ -static msegmentptr segment_holding(mstate m, char *addr) -{ - msegmentptr sp = &m->seg; - for (;;) { - if (addr >= sp->base && addr < sp->base + sp->size) - return sp; - if ((sp = sp->next) == 0) - return 0; - } -} - -/* Return true if segment contains a segment link */ -static int has_segment_link(mstate m, msegmentptr ss) -{ - msegmentptr sp = &m->seg; - for (;;) { - if ((char *)sp >= ss->base && (char *)sp < ss->base + ss->size) - return 1; - if ((sp = sp->next) == 0) - return 0; - } -} - -/* - TOP_FOOT_SIZE is padding at the end of a segment, including space - that may be needed to place segment records and fenceposts when new - noncontiguous segments are added. -*/ -#define TOP_FOOT_SIZE\ - (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) - -/* ---------------------------- Indexing Bins ---------------------------- */ - -#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -#define small_index(s) ((s) >> SMALLBIN_SHIFT) -#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) - -/* addressing by index. See above about smallbin repositioning */ -#define smallbin_at(M, i) ((sbinptr)((char *)&((M)->smallbins[(i)<<1]))) -#define treebin_at(M,i) (&((M)->treebins[i])) - -/* assign tree index for size S to variable I */ -#define compute_tree_index(S, I)\ -{\ - unsigned int X = (unsigned int)(S >> TREEBIN_SHIFT);\ - if (X == 0) {\ - I = 0;\ - } else if (X > 0xFFFF) {\ - I = NTREEBINS-1;\ - } else {\ - unsigned int K = lj_fls(X);\ - I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ - }\ -} - -/* Bit representing maximum resolved size in a treebin at i */ -#define bit_for_tree_index(i) \ - (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) - -/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -#define leftshift_for_tree_index(i) \ - ((i == NTREEBINS-1)? 0 : \ - ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) - -/* The size of the smallest chunk held in bin with index i */ -#define minsize_for_tree_index(i) \ - ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ - (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) - -/* ------------------------ Operations on bin maps ----------------------- */ - -/* bit corresponding to given index */ -#define idx2bit(i) ((binmap_t)(1) << (i)) - -/* Mark/Clear bits with given index */ -#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) - -#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) - -/* mask with all bits to left of least bit of x on */ -#define left_bits(x) ((x<<1) | (~(x<<1)+1)) - -/* Set cinuse bit and pinuse bit of next chunk */ -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - ((mchunkptr)(((char *)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - ((mchunkptr)(((char *)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set size, cinuse and pinuse bit of this chunk */ -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) - -/* ----------------------- Operations on smallbins ----------------------- */ - -/* Link a free chunk into a smallbin */ -#define insert_small_chunk(M, P, S) {\ - bindex_t I = small_index(S);\ - mchunkptr B = smallbin_at(M, I);\ - mchunkptr F = B;\ - if (!smallmap_is_marked(M, I))\ - mark_smallmap(M, I);\ - else\ - F = B->fd;\ - B->fd = P;\ - F->bk = P;\ - P->fd = F;\ - P->bk = B;\ -} - -/* Unlink a chunk from a smallbin */ -#define unlink_small_chunk(M, P, S) {\ - mchunkptr F = P->fd;\ - mchunkptr B = P->bk;\ - bindex_t I = small_index(S);\ - if (F == B) {\ - clear_smallmap(M, I);\ - } else {\ - F->bk = B;\ - B->fd = F;\ - }\ -} - -/* Unlink the first chunk from a smallbin */ -#define unlink_first_small_chunk(M, B, P, I) {\ - mchunkptr F = P->fd;\ - if (B == F) {\ - clear_smallmap(M, I);\ - } else {\ - B->fd = F;\ - F->bk = B;\ - }\ -} - -/* Replace dv node, binning the old one */ -/* Used only when dvsize known to be small */ -#define replace_dv(M, P, S) {\ - size_t DVS = M->dvsize;\ - if (DVS != 0) {\ - mchunkptr DV = M->dv;\ - insert_small_chunk(M, DV, DVS);\ - }\ - M->dvsize = S;\ - M->dv = P;\ -} - -/* ------------------------- Operations on trees ------------------------- */ - -/* Insert chunk into tree */ -#define insert_large_chunk(M, X, S) {\ - tbinptr *H;\ - bindex_t I;\ - compute_tree_index(S, I);\ - H = treebin_at(M, I);\ - X->index = I;\ - X->child[0] = X->child[1] = 0;\ - if (!treemap_is_marked(M, I)) {\ - mark_treemap(M, I);\ - *H = X;\ - X->parent = (tchunkptr)H;\ - X->fd = X->bk = X;\ - } else {\ - tchunkptr T = *H;\ - size_t K = S << leftshift_for_tree_index(I);\ - for (;;) {\ - if (chunksize(T) != S) {\ - tchunkptr *C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ - K <<= 1;\ - if (*C != 0) {\ - T = *C;\ - } else {\ - *C = X;\ - X->parent = T;\ - X->fd = X->bk = X;\ - break;\ - }\ - } else {\ - tchunkptr F = T->fd;\ - T->fd = F->bk = X;\ - X->fd = F;\ - X->bk = T;\ - X->parent = 0;\ - break;\ - }\ - }\ - }\ -} - -#define unlink_large_chunk(M, X) {\ - tchunkptr XP = X->parent;\ - tchunkptr R;\ - if (X->bk != X) {\ - tchunkptr F = X->fd;\ - R = X->bk;\ - F->bk = R;\ - R->fd = F;\ - } else {\ - tchunkptr *RP;\ - if (((R = *(RP = &(X->child[1]))) != 0) ||\ - ((R = *(RP = &(X->child[0]))) != 0)) {\ - tchunkptr *CP;\ - while ((*(CP = &(R->child[1])) != 0) ||\ - (*(CP = &(R->child[0])) != 0)) {\ - R = *(RP = CP);\ - }\ - *RP = 0;\ - }\ - }\ - if (XP != 0) {\ - tbinptr *H = treebin_at(M, X->index);\ - if (X == *H) {\ - if ((*H = R) == 0) \ - clear_treemap(M, X->index);\ - } else {\ - if (XP->child[0] == X) \ - XP->child[0] = R;\ - else \ - XP->child[1] = R;\ - }\ - if (R != 0) {\ - tchunkptr C0, C1;\ - R->parent = XP;\ - if ((C0 = X->child[0]) != 0) {\ - R->child[0] = C0;\ - C0->parent = R;\ - }\ - if ((C1 = X->child[1]) != 0) {\ - R->child[1] = C1;\ - C1->parent = R;\ - }\ - }\ - }\ -} - -/* Relays to large vs small bin operations */ - -#define insert_chunk(M, P, S)\ - if (is_small(S)) { insert_small_chunk(M, P, S)\ - } else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } - -#define unlink_chunk(M, P, S)\ - if (is_small(S)) { unlink_small_chunk(M, P, S)\ - } else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } - -/* ----------------------- Direct-mmapping chunks ----------------------- */ - -static void *direct_alloc(size_t nb) -{ - size_t mmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - if (LJ_LIKELY(mmsize > nb)) { /* Check for wrap around 0 */ - char *mm = (char *)(DIRECT_MMAP(mmsize)); - if (mm != CMFAIL) { - size_t offset = align_offset(chunk2mem(mm)); - size_t psize = mmsize - offset - DIRECT_FOOT_PAD; - mchunkptr p = (mchunkptr)(mm + offset); - p->prev_foot = offset | IS_DIRECT_BIT; - p->head = psize|CINUSE_BIT; - chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; - return chunk2mem(p); - } - } - return NULL; -} - -static mchunkptr direct_resize(mchunkptr oldp, size_t nb) -{ - size_t oldsize = chunksize(oldp); - if (is_small(nb)) /* Can't shrink direct regions below small size */ - return NULL; - /* Keep old chunk if big enough but not too big */ - if (oldsize >= nb + SIZE_T_SIZE && - (oldsize - nb) <= (DEFAULT_GRANULARITY >> 1)) { - return oldp; - } else { - size_t offset = oldp->prev_foot & ~IS_DIRECT_BIT; - size_t oldmmsize = oldsize + offset + DIRECT_FOOT_PAD; - size_t newmmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - char *cp = (char *)CALL_MREMAP((char *)oldp - offset, - oldmmsize, newmmsize, CALL_MREMAP_MV); - if (cp != CMFAIL) { - mchunkptr newp = (mchunkptr)(cp + offset); - size_t psize = newmmsize - offset - DIRECT_FOOT_PAD; - newp->head = psize|CINUSE_BIT; - chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; - return newp; - } - } - return NULL; -} - -/* -------------------------- mspace management -------------------------- */ - -/* Initialize top chunk and its size */ -static void init_top(mstate m, mchunkptr p, size_t psize) -{ - /* Ensure alignment */ - size_t offset = align_offset(chunk2mem(p)); - p = (mchunkptr)((char *)p + offset); - psize -= offset; - - m->top = p; - m->topsize = psize; - p->head = psize | PINUSE_BIT; - /* set size of fake trailing chunk holding overhead space only once */ - chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; - m->trim_check = DEFAULT_TRIM_THRESHOLD; /* reset on each update */ -} - -/* Initialize bins for a new mstate that is otherwise zeroed out */ -static void init_bins(mstate m) -{ - /* Establish circular links for smallbins */ - bindex_t i; - for (i = 0; i < NSMALLBINS; i++) { - sbinptr bin = smallbin_at(m,i); - bin->fd = bin->bk = bin; - } -} - -/* Allocate chunk and prepend remainder with chunk in successor base. */ -static void *prepend_alloc(mstate m, char *newbase, char *oldbase, size_t nb) -{ - mchunkptr p = align_as_chunk(newbase); - mchunkptr oldfirst = align_as_chunk(oldbase); - size_t psize = (size_t)((char *)oldfirst - (char *)p); - mchunkptr q = chunk_plus_offset(p, nb); - size_t qsize = psize - nb; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - - /* consolidate remainder with first chunk of old base */ - if (oldfirst == m->top) { - size_t tsize = m->topsize += qsize; - m->top = q; - q->head = tsize | PINUSE_BIT; - } else if (oldfirst == m->dv) { - size_t dsize = m->dvsize += qsize; - m->dv = q; - set_size_and_pinuse_of_free_chunk(q, dsize); - } else { - if (!cinuse(oldfirst)) { - size_t nsize = chunksize(oldfirst); - unlink_chunk(m, oldfirst, nsize); - oldfirst = chunk_plus_offset(oldfirst, nsize); - qsize += nsize; - } - set_free_with_pinuse(q, qsize, oldfirst); - insert_chunk(m, q, qsize); - } - - return chunk2mem(p); -} - -/* Add a segment to hold a new noncontiguous region */ -static void add_segment(mstate m, char *tbase, size_t tsize) -{ - /* Determine locations and sizes of segment, fenceposts, old top */ - char *old_top = (char *)m->top; - msegmentptr oldsp = segment_holding(m, old_top); - char *old_end = oldsp->base + oldsp->size; - size_t ssize = pad_request(sizeof(struct malloc_segment)); - char *rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - size_t offset = align_offset(chunk2mem(rawsp)); - char *asp = rawsp + offset; - char *csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; - mchunkptr sp = (mchunkptr)csp; - msegmentptr ss = (msegmentptr)(chunk2mem(sp)); - mchunkptr tnext = chunk_plus_offset(sp, ssize); - mchunkptr p = tnext; - - /* reset top to new space */ - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - - /* Set up segment record */ - set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); - *ss = m->seg; /* Push current record */ - m->seg.base = tbase; - m->seg.size = tsize; - m->seg.next = ss; - - /* Insert trailing fenceposts */ - for (;;) { - mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); - p->head = FENCEPOST_HEAD; - if ((char *)(&(nextp->head)) < old_end) - p = nextp; - else - break; - } - - /* Insert the rest of old top into a bin as an ordinary free chunk */ - if (csp != old_top) { - mchunkptr q = (mchunkptr)old_top; - size_t psize = (size_t)(csp - old_top); - mchunkptr tn = chunk_plus_offset(q, psize); - set_free_with_pinuse(q, psize, tn); - insert_chunk(m, q, psize); - } -} - -/* -------------------------- System allocation -------------------------- */ - -static void *alloc_sys(mstate m, size_t nb) -{ - char *tbase = CMFAIL; - size_t tsize = 0; - - /* Directly map large chunks */ - if (LJ_UNLIKELY(nb >= DEFAULT_MMAP_THRESHOLD)) { - void *mem = direct_alloc(nb); - if (mem != 0) - return mem; - } - - { - size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; - size_t rsize = granularity_align(req); - if (LJ_LIKELY(rsize > nb)) { /* Fail if wraps around zero */ - char *mp = (char *)(CALL_MMAP(rsize)); - if (mp != CMFAIL) { - tbase = mp; - tsize = rsize; - } - } - } - - if (tbase != CMFAIL) { - msegmentptr sp = &m->seg; - /* Try to merge with an existing segment */ - while (sp != 0 && tbase != sp->base + sp->size) - sp = sp->next; - if (sp != 0 && segment_holds(sp, m->top)) { /* append */ - sp->size += tsize; - init_top(m, m->top, m->topsize + tsize); - } else { - sp = &m->seg; - while (sp != 0 && sp->base != tbase + tsize) - sp = sp->next; - if (sp != 0) { - char *oldbase = sp->base; - sp->base = tbase; - sp->size += tsize; - return prepend_alloc(m, tbase, oldbase, nb); - } else { - add_segment(m, tbase, tsize); - } - } - - if (nb < m->topsize) { /* Allocate from new or extended top space */ - size_t rsize = m->topsize -= nb; - mchunkptr p = m->top; - mchunkptr r = m->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - return chunk2mem(p); - } - } - - return NULL; -} - -/* ----------------------- system deallocation -------------------------- */ - -/* Unmap and unlink any mmapped segments that don't contain used chunks */ -static size_t release_unused_segments(mstate m) -{ - size_t released = 0; - size_t nsegs = 0; - msegmentptr pred = &m->seg; - msegmentptr sp = pred->next; - while (sp != 0) { - char *base = sp->base; - size_t size = sp->size; - msegmentptr next = sp->next; - nsegs++; - { - mchunkptr p = align_as_chunk(base); - size_t psize = chunksize(p); - /* Can unmap if first chunk holds entire segment and not pinned */ - if (!cinuse(p) && (char *)p + psize >= base + size - TOP_FOOT_SIZE) { - tchunkptr tp = (tchunkptr)p; - if (p == m->dv) { - m->dv = 0; - m->dvsize = 0; - } else { - unlink_large_chunk(m, tp); - } - if (CALL_MUNMAP(base, size) == 0) { - released += size; - /* unlink obsoleted record */ - sp = pred; - sp->next = next; - } else { /* back out if cannot unmap */ - insert_large_chunk(m, tp, psize); - } - } - } - pred = sp; - sp = next; - } - /* Reset check counter */ - m->release_checks = nsegs > MAX_RELEASE_CHECK_RATE ? - nsegs : MAX_RELEASE_CHECK_RATE; - return released; -} - -static int alloc_trim(mstate m, size_t pad) -{ - size_t released = 0; - if (pad < MAX_REQUEST && is_initialized(m)) { - pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ - - if (m->topsize > pad) { - /* Shrink top space in granularity-size units, keeping at least one */ - size_t unit = DEFAULT_GRANULARITY; - size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - - SIZE_T_ONE) * unit; - msegmentptr sp = segment_holding(m, (char *)m->top); - - if (sp->size >= extra && - !has_segment_link(m, sp)) { /* can't shrink if pinned */ - size_t newsize = sp->size - extra; - /* Prefer mremap, fall back to munmap */ - if ((CALL_MREMAP(sp->base, sp->size, newsize, CALL_MREMAP_NOMOVE) != MFAIL) || - (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { - released = extra; - } - } - - if (released != 0) { - sp->size -= released; - init_top(m, m->top, m->topsize - released); - } - } - - /* Unmap any unused mmapped segments */ - released += release_unused_segments(m); - - /* On failure, disable autotrim to avoid repeated failed future calls */ - if (released == 0 && m->topsize > m->trim_check) - m->trim_check = MAX_SIZE_T; - } - - return (released != 0)? 1 : 0; -} - -/* ---------------------------- malloc support --------------------------- */ - -/* allocate a large request from the best fitting chunk in a treebin */ -static void *tmalloc_large(mstate m, size_t nb) -{ - tchunkptr v = 0; - size_t rsize = ~nb+1; /* Unsigned negation */ - tchunkptr t; - bindex_t idx; - compute_tree_index(nb, idx); - - if ((t = *treebin_at(m, idx)) != 0) { - /* Traverse tree for this bin looking for node with size == nb */ - size_t sizebits = nb << leftshift_for_tree_index(idx); - tchunkptr rst = 0; /* The deepest untaken right subtree */ - for (;;) { - tchunkptr rt; - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - v = t; - if ((rsize = trem) == 0) - break; - } - rt = t->child[1]; - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - if (rt != 0 && rt != t) - rst = rt; - if (t == 0) { - t = rst; /* set t to least subtree holding sizes > nb */ - break; - } - sizebits <<= 1; - } - } - - if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ - binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; - if (leftbits != 0) - t = *treebin_at(m, lj_ffs(leftbits)); - } - - while (t != 0) { /* find smallest of tree or subtree */ - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - t = leftmost_child(t); - } - - /* If dv is a better fit, return NULL so malloc will use it */ - if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { - mchunkptr r = chunk_plus_offset(v, nb); - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) { - set_inuse_and_pinuse(m, v, (rsize + nb)); - } else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - insert_chunk(m, r, rsize); - } - return chunk2mem(v); - } - return NULL; -} - -/* allocate a small request from the best fitting chunk in a treebin */ -static void *tmalloc_small(mstate m, size_t nb) -{ - tchunkptr t, v; - mchunkptr r; - size_t rsize; - bindex_t i = lj_ffs(m->treemap); - - v = t = *treebin_at(m, i); - rsize = chunksize(t) - nb; - - while ((t = leftmost_child(t)) != 0) { - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - } - - r = chunk_plus_offset(v, nb); - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) { - set_inuse_and_pinuse(m, v, (rsize + nb)); - } else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(m, r, rsize); - } - return chunk2mem(v); -} - -/* ----------------------------------------------------------------------- */ - -void *lj_alloc_create(void) -{ - size_t tsize = DEFAULT_GRANULARITY; - char *tbase; - INIT_MMAP(); - tbase = (char *)(CALL_MMAP(tsize)); - if (tbase != CMFAIL) { - size_t msize = pad_request(sizeof(struct malloc_state)); - mchunkptr mn; - mchunkptr msp = align_as_chunk(tbase); - mstate m = (mstate)(chunk2mem(msp)); - memset(m, 0, msize); - msp->head = (msize|PINUSE_BIT|CINUSE_BIT); - m->seg.base = tbase; - m->seg.size = tsize; - m->release_checks = MAX_RELEASE_CHECK_RATE; - init_bins(m); - mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char *)mn) - TOP_FOOT_SIZE); - return m; - } - return NULL; -} - -void lj_alloc_destroy(void *msp) -{ - mstate ms = (mstate)msp; - msegmentptr sp = &ms->seg; - while (sp != 0) { - char *base = sp->base; - size_t size = sp->size; - sp = sp->next; - CALL_MUNMAP(base, size); - } -} - -static LJ_NOINLINE void *lj_alloc_malloc(void *msp, size_t nsize) -{ - mstate ms = (mstate)msp; - void *mem; - size_t nb; - if (nsize <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (nsize < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(nsize); - idx = small_index(nb); - smallbits = ms->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(ms, idx); - p = b->fd; - unlink_first_small_chunk(ms, b, p, idx); - set_inuse_and_pinuse(ms, p, small_index2size(idx)); - mem = chunk2mem(p); - return mem; - } else if (nb > ms->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - bindex_t i = lj_ffs(leftbits); - b = smallbin_at(ms, i); - p = b->fd; - unlink_first_small_chunk(ms, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) { - set_inuse_and_pinuse(ms, p, small_index2size(i)); - } else { - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(ms, r, rsize); - } - mem = chunk2mem(p); - return mem; - } else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { - return mem; - } - } - } else if (nsize >= MAX_REQUEST) { - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - } else { - nb = pad_request(nsize); - if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { - return mem; - } - } - - if (nb <= ms->dvsize) { - size_t rsize = ms->dvsize - nb; - mchunkptr p = ms->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = ms->dv = chunk_plus_offset(p, nb); - ms->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - } else { /* exhaust dv */ - size_t dvs = ms->dvsize; - ms->dvsize = 0; - ms->dv = 0; - set_inuse_and_pinuse(ms, p, dvs); - } - mem = chunk2mem(p); - return mem; - } else if (nb < ms->topsize) { /* Split top */ - size_t rsize = ms->topsize -= nb; - mchunkptr p = ms->top; - mchunkptr r = ms->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - mem = chunk2mem(p); - return mem; - } - return alloc_sys(ms, nb); -} - -static LJ_NOINLINE void *lj_alloc_free(void *msp, void *ptr) -{ - if (ptr != 0) { - mchunkptr p = mem2chunk(ptr); - mstate fm = (mstate)msp; - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if ((prevsize & IS_DIRECT_BIT) != 0) { - prevsize &= ~IS_DIRECT_BIT; - psize += prevsize + DIRECT_FOOT_PAD; - CALL_MUNMAP((char *)p - prevsize, psize); - return NULL; - } else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - return NULL; - } - } - } - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (tsize > fm->trim_check) - alloc_trim(fm, 0); - return NULL; - } else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - return NULL; - } else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - return NULL; - } - } - } else { - set_free_with_pinuse(p, psize, next); - } - - if (is_small(psize)) { - insert_small_chunk(fm, p, psize); - } else { - tchunkptr tp = (tchunkptr)p; - insert_large_chunk(fm, tp, psize); - if (--fm->release_checks == 0) - release_unused_segments(fm); - } - } - return NULL; -} - -static LJ_NOINLINE void *lj_alloc_realloc(void *msp, void *ptr, size_t nsize) -{ - if (nsize >= MAX_REQUEST) { - return NULL; - } else { - mstate m = (mstate)msp; - mchunkptr oldp = mem2chunk(ptr); - size_t oldsize = chunksize(oldp); - mchunkptr next = chunk_plus_offset(oldp, oldsize); - mchunkptr newp = 0; - size_t nb = request2size(nsize); - - /* Try to either shrink or extend into top. Else malloc-copy-free */ - if (is_direct(oldp)) { - newp = direct_resize(oldp, nb); /* this may return NULL. */ - } else if (oldsize >= nb) { /* already big enough */ - size_t rsize = oldsize - nb; - newp = oldp; - if (rsize >= MIN_CHUNK_SIZE) { - mchunkptr rem = chunk_plus_offset(newp, nb); - set_inuse(m, newp, nb); - set_inuse(m, rem, rsize); - lj_alloc_free(m, chunk2mem(rem)); - } - } else if (next == m->top && oldsize + m->topsize > nb) { - /* Expand into top */ - size_t newsize = oldsize + m->topsize; - size_t newtopsize = newsize - nb; - mchunkptr newtop = chunk_plus_offset(oldp, nb); - set_inuse(m, oldp, nb); - newtop->head = newtopsize |PINUSE_BIT; - m->top = newtop; - m->topsize = newtopsize; - newp = oldp; - } - - if (newp != 0) { - return chunk2mem(newp); - } else { - void *newmem = lj_alloc_malloc(m, nsize); - if (newmem != 0) { - size_t oc = oldsize - overhead_for(oldp); - memcpy(newmem, ptr, oc < nsize ? oc : nsize); - lj_alloc_free(m, ptr); - } - return newmem; - } - } -} - -void *lj_alloc_f(void *msp, void *ptr, size_t osize, size_t nsize) -{ - (void)osize; - if (nsize == 0) { - return lj_alloc_free(msp, ptr); - } else if (ptr == NULL) { - return lj_alloc_malloc(msp, nsize); - } else { - return lj_alloc_realloc(msp, ptr, nsize); - } -} - -#endif diff --git a/deps/luajit/src/lj_alloc.h b/deps/luajit/src/lj_alloc.h deleted file mode 100644 index f87a7cf..0000000 --- a/deps/luajit/src/lj_alloc.h +++ /dev/null @@ -1,17 +0,0 @@ -/* -** Bundled memory allocator. -** Donated to the public domain. -*/ - -#ifndef _LJ_ALLOC_H -#define _LJ_ALLOC_H - -#include "lj_def.h" - -#ifndef LUAJIT_USE_SYSMALLOC -LJ_FUNC void *lj_alloc_create(void); -LJ_FUNC void lj_alloc_destroy(void *msp); -LJ_FUNC void *lj_alloc_f(void *msp, void *ptr, size_t osize, size_t nsize); -#endif - -#endif diff --git a/deps/luajit/src/lj_api.c b/deps/luajit/src/lj_api.c deleted file mode 100644 index 3bedb39..0000000 --- a/deps/luajit/src/lj_api.c +++ /dev/null @@ -1,1200 +0,0 @@ -/* -** Public Lua/C API. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_api_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_func.h" -#include "lj_udata.h" -#include "lj_meta.h" -#include "lj_state.h" -#include "lj_bc.h" -#include "lj_frame.h" -#include "lj_trace.h" -#include "lj_vm.h" -#include "lj_strscan.h" - -/* -- Common helper functions --------------------------------------------- */ - -#define api_checknelems(L, n) api_check(L, (n) <= (L->top - L->base)) -#define api_checkvalidindex(L, i) api_check(L, (i) != niltv(L)) - -static TValue *index2adr(lua_State *L, int idx) -{ - if (idx > 0) { - TValue *o = L->base + (idx - 1); - return o < L->top ? o : niltv(L); - } else if (idx > LUA_REGISTRYINDEX) { - api_check(L, idx != 0 && -idx <= L->top - L->base); - return L->top + idx; - } else if (idx == LUA_GLOBALSINDEX) { - TValue *o = &G(L)->tmptv; - settabV(L, o, tabref(L->env)); - return o; - } else if (idx == LUA_REGISTRYINDEX) { - return registry(L); - } else { - GCfunc *fn = curr_func(L); - api_check(L, fn->c.gct == ~LJ_TFUNC && !isluafunc(fn)); - if (idx == LUA_ENVIRONINDEX) { - TValue *o = &G(L)->tmptv; - settabV(L, o, tabref(fn->c.env)); - return o; - } else { - idx = LUA_GLOBALSINDEX - idx; - return idx <= fn->c.nupvalues ? &fn->c.upvalue[idx-1] : niltv(L); - } - } -} - -static TValue *stkindex2adr(lua_State *L, int idx) -{ - if (idx > 0) { - TValue *o = L->base + (idx - 1); - return o < L->top ? o : niltv(L); - } else { - api_check(L, idx != 0 && -idx <= L->top - L->base); - return L->top + idx; - } -} - -static GCtab *getcurrenv(lua_State *L) -{ - GCfunc *fn = curr_func(L); - return fn->c.gct == ~LJ_TFUNC ? tabref(fn->c.env) : tabref(L->env); -} - -/* -- Miscellaneous API functions ----------------------------------------- */ - -LUA_API int lua_status(lua_State *L) -{ - return L->status; -} - -LUA_API int lua_checkstack(lua_State *L, int size) -{ - if (size > LUAI_MAXCSTACK || (L->top - L->base + size) > LUAI_MAXCSTACK) { - return 0; /* Stack overflow. */ - } else if (size > 0) { - lj_state_checkstack(L, (MSize)size); - } - return 1; -} - -LUALIB_API void luaL_checkstack(lua_State *L, int size, const char *msg) -{ - if (!lua_checkstack(L, size)) - lj_err_callerv(L, LJ_ERR_STKOVM, msg); -} - -LUA_API void lua_xmove(lua_State *from, lua_State *to, int n) -{ - TValue *f, *t; - if (from == to) return; - api_checknelems(from, n); - api_check(from, G(from) == G(to)); - lj_state_checkstack(to, (MSize)n); - f = from->top; - t = to->top = to->top + n; - while (--n >= 0) copyTV(to, --t, --f); - from->top = f; -} - -/* -- Stack manipulation -------------------------------------------------- */ - -LUA_API int lua_gettop(lua_State *L) -{ - return (int)(L->top - L->base); -} - -LUA_API void lua_settop(lua_State *L, int idx) -{ - if (idx >= 0) { - api_check(L, idx <= tvref(L->maxstack) - L->base); - if (L->base + idx > L->top) { - if (L->base + idx >= tvref(L->maxstack)) - lj_state_growstack(L, (MSize)idx - (MSize)(L->top - L->base)); - do { setnilV(L->top++); } while (L->top < L->base + idx); - } else { - L->top = L->base + idx; - } - } else { - api_check(L, -(idx+1) <= (L->top - L->base)); - L->top += idx+1; /* Shrinks top (idx < 0). */ - } -} - -LUA_API void lua_remove(lua_State *L, int idx) -{ - TValue *p = stkindex2adr(L, idx); - api_checkvalidindex(L, p); - while (++p < L->top) copyTV(L, p-1, p); - L->top--; -} - -LUA_API void lua_insert(lua_State *L, int idx) -{ - TValue *q, *p = stkindex2adr(L, idx); - api_checkvalidindex(L, p); - for (q = L->top; q > p; q--) copyTV(L, q, q-1); - copyTV(L, p, L->top); -} - -LUA_API void lua_replace(lua_State *L, int idx) -{ - api_checknelems(L, 1); - if (idx == LUA_GLOBALSINDEX) { - api_check(L, tvistab(L->top-1)); - /* NOBARRIER: A thread (i.e. L) is never black. */ - setgcref(L->env, obj2gco(tabV(L->top-1))); - } else if (idx == LUA_ENVIRONINDEX) { - GCfunc *fn = curr_func(L); - if (fn->c.gct != ~LJ_TFUNC) - lj_err_msg(L, LJ_ERR_NOENV); - api_check(L, tvistab(L->top-1)); - setgcref(fn->c.env, obj2gco(tabV(L->top-1))); - lj_gc_barrier(L, fn, L->top-1); - } else { - TValue *o = index2adr(L, idx); - api_checkvalidindex(L, o); - copyTV(L, o, L->top-1); - if (idx < LUA_GLOBALSINDEX) /* Need a barrier for upvalues. */ - lj_gc_barrier(L, curr_func(L), L->top-1); - } - L->top--; -} - -LUA_API void lua_pushvalue(lua_State *L, int idx) -{ - copyTV(L, L->top, index2adr(L, idx)); - incr_top(L); -} - -/* -- Stack getters ------------------------------------------------------- */ - -LUA_API int lua_type(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - if (tvisnumber(o)) { - return LUA_TNUMBER; -#if LJ_64 - } else if (tvislightud(o)) { - return LUA_TLIGHTUSERDATA; -#endif - } else if (o == niltv(L)) { - return LUA_TNONE; - } else { /* Magic internal/external tag conversion. ORDER LJ_T */ - uint32_t t = ~itype(o); -#if LJ_64 - int tt = (int)((U64x(75a06,98042110) >> 4*t) & 15u); -#else - int tt = (int)(((t < 8 ? 0x98042110u : 0x75a06u) >> 4*(t&7)) & 15u); -#endif - lua_assert(tt != LUA_TNIL || tvisnil(o)); - return tt; - } -} - -LUALIB_API void luaL_checktype(lua_State *L, int idx, int tt) -{ - if (lua_type(L, idx) != tt) - lj_err_argt(L, idx, tt); -} - -LUALIB_API void luaL_checkany(lua_State *L, int idx) -{ - if (index2adr(L, idx) == niltv(L)) - lj_err_arg(L, idx, LJ_ERR_NOVAL); -} - -LUA_API const char *lua_typename(lua_State *L, int t) -{ - UNUSED(L); - return lj_obj_typename[t+1]; -} - -LUA_API int lua_iscfunction(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - return tvisfunc(o) && !isluafunc(funcV(o)); -} - -LUA_API int lua_isnumber(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - return (tvisnumber(o) || (tvisstr(o) && lj_strscan_number(strV(o), &tmp))); -} - -LUA_API int lua_isstring(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - return (tvisstr(o) || tvisnumber(o)); -} - -LUA_API int lua_isuserdata(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - return (tvisudata(o) || tvislightud(o)); -} - -LUA_API int lua_rawequal(lua_State *L, int idx1, int idx2) -{ - cTValue *o1 = index2adr(L, idx1); - cTValue *o2 = index2adr(L, idx2); - return (o1 == niltv(L) || o2 == niltv(L)) ? 0 : lj_obj_equal(o1, o2); -} - -LUA_API int lua_equal(lua_State *L, int idx1, int idx2) -{ - cTValue *o1 = index2adr(L, idx1); - cTValue *o2 = index2adr(L, idx2); - if (tvisint(o1) && tvisint(o2)) { - return intV(o1) == intV(o2); - } else if (tvisnumber(o1) && tvisnumber(o2)) { - return numberVnum(o1) == numberVnum(o2); - } else if (itype(o1) != itype(o2)) { - return 0; - } else if (tvispri(o1)) { - return o1 != niltv(L) && o2 != niltv(L); -#if LJ_64 - } else if (tvislightud(o1)) { - return o1->u64 == o2->u64; -#endif - } else if (gcrefeq(o1->gcr, o2->gcr)) { - return 1; - } else if (!tvistabud(o1)) { - return 0; - } else { - TValue *base = lj_meta_equal(L, gcV(o1), gcV(o2), 0); - if ((uintptr_t)base <= 1) { - return (int)(uintptr_t)base; - } else { - L->top = base+2; - lj_vm_call(L, base, 1+1); - L->top -= 2; - return tvistruecond(L->top+1); - } - } -} - -LUA_API int lua_lessthan(lua_State *L, int idx1, int idx2) -{ - cTValue *o1 = index2adr(L, idx1); - cTValue *o2 = index2adr(L, idx2); - if (o1 == niltv(L) || o2 == niltv(L)) { - return 0; - } else if (tvisint(o1) && tvisint(o2)) { - return intV(o1) < intV(o2); - } else if (tvisnumber(o1) && tvisnumber(o2)) { - return numberVnum(o1) < numberVnum(o2); - } else { - TValue *base = lj_meta_comp(L, o1, o2, 0); - if ((uintptr_t)base <= 1) { - return (int)(uintptr_t)base; - } else { - L->top = base+2; - lj_vm_call(L, base, 1+1); - L->top -= 2; - return tvistruecond(L->top+1); - } - } -} - -LUA_API lua_Number lua_tonumber(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - if (LJ_LIKELY(tvisnumber(o))) - return numberVnum(o); - else if (tvisstr(o) && lj_strscan_num(strV(o), &tmp)) - return numV(&tmp); - else - return 0; -} - -LUALIB_API lua_Number luaL_checknumber(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - if (LJ_LIKELY(tvisnumber(o))) - return numberVnum(o); - else if (!(tvisstr(o) && lj_strscan_num(strV(o), &tmp))) - lj_err_argt(L, idx, LUA_TNUMBER); - return numV(&tmp); -} - -LUALIB_API lua_Number luaL_optnumber(lua_State *L, int idx, lua_Number def) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - if (LJ_LIKELY(tvisnumber(o))) - return numberVnum(o); - else if (tvisnil(o)) - return def; - else if (!(tvisstr(o) && lj_strscan_num(strV(o), &tmp))) - lj_err_argt(L, idx, LUA_TNUMBER); - return numV(&tmp); -} - -LUA_API lua_Integer lua_tointeger(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - lua_Number n; - if (LJ_LIKELY(tvisint(o))) { - return intV(o); - } else if (LJ_LIKELY(tvisnum(o))) { - n = numV(o); - } else { - if (!(tvisstr(o) && lj_strscan_number(strV(o), &tmp))) - return 0; - if (tvisint(&tmp)) - return (lua_Integer)intV(&tmp); - n = numV(&tmp); - } -#if LJ_64 - return (lua_Integer)n; -#else - return lj_num2int(n); -#endif -} - -LUALIB_API lua_Integer luaL_checkinteger(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - lua_Number n; - if (LJ_LIKELY(tvisint(o))) { - return intV(o); - } else if (LJ_LIKELY(tvisnum(o))) { - n = numV(o); - } else { - if (!(tvisstr(o) && lj_strscan_number(strV(o), &tmp))) - lj_err_argt(L, idx, LUA_TNUMBER); - if (tvisint(&tmp)) - return (lua_Integer)intV(&tmp); - n = numV(&tmp); - } -#if LJ_64 - return (lua_Integer)n; -#else - return lj_num2int(n); -#endif -} - -LUALIB_API lua_Integer luaL_optinteger(lua_State *L, int idx, lua_Integer def) -{ - cTValue *o = index2adr(L, idx); - TValue tmp; - lua_Number n; - if (LJ_LIKELY(tvisint(o))) { - return intV(o); - } else if (LJ_LIKELY(tvisnum(o))) { - n = numV(o); - } else if (tvisnil(o)) { - return def; - } else { - if (!(tvisstr(o) && lj_strscan_number(strV(o), &tmp))) - lj_err_argt(L, idx, LUA_TNUMBER); - if (tvisint(&tmp)) - return (lua_Integer)intV(&tmp); - n = numV(&tmp); - } -#if LJ_64 - return (lua_Integer)n; -#else - return lj_num2int(n); -#endif -} - -LUA_API int lua_toboolean(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - return tvistruecond(o); -} - -LUA_API const char *lua_tolstring(lua_State *L, int idx, size_t *len) -{ - TValue *o = index2adr(L, idx); - GCstr *s; - if (LJ_LIKELY(tvisstr(o))) { - s = strV(o); - } else if (tvisnumber(o)) { - lj_gc_check(L); - o = index2adr(L, idx); /* GC may move the stack. */ - s = lj_str_fromnumber(L, o); - setstrV(L, o, s); - } else { - if (len != NULL) *len = 0; - return NULL; - } - if (len != NULL) *len = s->len; - return strdata(s); -} - -LUALIB_API const char *luaL_checklstring(lua_State *L, int idx, size_t *len) -{ - TValue *o = index2adr(L, idx); - GCstr *s; - if (LJ_LIKELY(tvisstr(o))) { - s = strV(o); - } else if (tvisnumber(o)) { - lj_gc_check(L); - o = index2adr(L, idx); /* GC may move the stack. */ - s = lj_str_fromnumber(L, o); - setstrV(L, o, s); - } else { - lj_err_argt(L, idx, LUA_TSTRING); - } - if (len != NULL) *len = s->len; - return strdata(s); -} - -LUALIB_API const char *luaL_optlstring(lua_State *L, int idx, - const char *def, size_t *len) -{ - TValue *o = index2adr(L, idx); - GCstr *s; - if (LJ_LIKELY(tvisstr(o))) { - s = strV(o); - } else if (tvisnil(o)) { - if (len != NULL) *len = def ? strlen(def) : 0; - return def; - } else if (tvisnumber(o)) { - lj_gc_check(L); - o = index2adr(L, idx); /* GC may move the stack. */ - s = lj_str_fromnumber(L, o); - setstrV(L, o, s); - } else { - lj_err_argt(L, idx, LUA_TSTRING); - } - if (len != NULL) *len = s->len; - return strdata(s); -} - -LUALIB_API int luaL_checkoption(lua_State *L, int idx, const char *def, - const char *const lst[]) -{ - ptrdiff_t i; - const char *s = lua_tolstring(L, idx, NULL); - if (s == NULL && (s = def) == NULL) - lj_err_argt(L, idx, LUA_TSTRING); - for (i = 0; lst[i]; i++) - if (strcmp(lst[i], s) == 0) - return (int)i; - lj_err_argv(L, idx, LJ_ERR_INVOPTM, s); -} - -LUA_API size_t lua_objlen(lua_State *L, int idx) -{ - TValue *o = index2adr(L, idx); - if (tvisstr(o)) { - return strV(o)->len; - } else if (tvistab(o)) { - return (size_t)lj_tab_len(tabV(o)); - } else if (tvisudata(o)) { - return udataV(o)->len; - } else if (tvisnumber(o)) { - GCstr *s = lj_str_fromnumber(L, o); - setstrV(L, o, s); - return s->len; - } else { - return 0; - } -} - -LUA_API lua_CFunction lua_tocfunction(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - if (tvisfunc(o)) { - BCOp op = bc_op(*mref(funcV(o)->c.pc, BCIns)); - if (op == BC_FUNCC || op == BC_FUNCCW) - return funcV(o)->c.f; - } - return NULL; -} - -LUA_API void *lua_touserdata(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - if (tvisudata(o)) - return uddata(udataV(o)); - else if (tvislightud(o)) - return lightudV(o); - else - return NULL; -} - -LUA_API lua_State *lua_tothread(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - return (!tvisthread(o)) ? NULL : threadV(o); -} - -LUA_API const void *lua_topointer(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - if (tvisudata(o)) - return uddata(udataV(o)); - else if (tvislightud(o)) - return lightudV(o); - else if (tviscdata(o)) - return cdataptr(cdataV(o)); - else if (tvisgcv(o)) - return gcV(o); - else - return NULL; -} - -/* -- Stack setters (object creation) ------------------------------------- */ - -LUA_API void lua_pushnil(lua_State *L) -{ - setnilV(L->top); - incr_top(L); -} - -LUA_API void lua_pushnumber(lua_State *L, lua_Number n) -{ - setnumV(L->top, n); - if (LJ_UNLIKELY(tvisnan(L->top))) - setnanV(L->top); /* Canonicalize injected NaNs. */ - incr_top(L); -} - -LUA_API void lua_pushinteger(lua_State *L, lua_Integer n) -{ - setintptrV(L->top, n); - incr_top(L); -} - -LUA_API void lua_pushlstring(lua_State *L, const char *str, size_t len) -{ - GCstr *s; - lj_gc_check(L); - s = lj_str_new(L, str, len); - setstrV(L, L->top, s); - incr_top(L); -} - -LUA_API void lua_pushstring(lua_State *L, const char *str) -{ - if (str == NULL) { - setnilV(L->top); - } else { - GCstr *s; - lj_gc_check(L); - s = lj_str_newz(L, str); - setstrV(L, L->top, s); - } - incr_top(L); -} - -LUA_API const char *lua_pushvfstring(lua_State *L, const char *fmt, - va_list argp) -{ - lj_gc_check(L); - return lj_str_pushvf(L, fmt, argp); -} - -LUA_API const char *lua_pushfstring(lua_State *L, const char *fmt, ...) -{ - const char *ret; - va_list argp; - lj_gc_check(L); - va_start(argp, fmt); - ret = lj_str_pushvf(L, fmt, argp); - va_end(argp); - return ret; -} - -LUA_API void lua_pushcclosure(lua_State *L, lua_CFunction f, int n) -{ - GCfunc *fn; - lj_gc_check(L); - api_checknelems(L, n); - fn = lj_func_newC(L, (MSize)n, getcurrenv(L)); - fn->c.f = f; - L->top -= n; - while (n--) - copyTV(L, &fn->c.upvalue[n], L->top+n); - setfuncV(L, L->top, fn); - lua_assert(iswhite(obj2gco(fn))); - incr_top(L); -} - -LUA_API void lua_pushboolean(lua_State *L, int b) -{ - setboolV(L->top, (b != 0)); - incr_top(L); -} - -LUA_API void lua_pushlightuserdata(lua_State *L, void *p) -{ - setlightudV(L->top, checklightudptr(L, p)); - incr_top(L); -} - -LUA_API void lua_createtable(lua_State *L, int narray, int nrec) -{ - GCtab *t; - lj_gc_check(L); - t = lj_tab_new(L, (uint32_t)(narray > 0 ? narray+1 : 0), hsize2hbits(nrec)); - settabV(L, L->top, t); - incr_top(L); -} - -LUALIB_API int luaL_newmetatable(lua_State *L, const char *tname) -{ - GCtab *regt = tabV(registry(L)); - TValue *tv = lj_tab_setstr(L, regt, lj_str_newz(L, tname)); - if (tvisnil(tv)) { - GCtab *mt = lj_tab_new(L, 0, 1); - settabV(L, tv, mt); - settabV(L, L->top++, mt); - lj_gc_anybarriert(L, regt); - return 1; - } else { - copyTV(L, L->top++, tv); - return 0; - } -} - -LUA_API int lua_pushthread(lua_State *L) -{ - setthreadV(L, L->top, L); - incr_top(L); - return (mainthread(G(L)) == L); -} - -LUA_API lua_State *lua_newthread(lua_State *L) -{ - lua_State *L1; - lj_gc_check(L); - L1 = lj_state_new(L); - setthreadV(L, L->top, L1); - incr_top(L); - return L1; -} - -LUA_API void *lua_newuserdata(lua_State *L, size_t size) -{ - GCudata *ud; - lj_gc_check(L); - if (size > LJ_MAX_UDATA) - lj_err_msg(L, LJ_ERR_UDATAOV); - ud = lj_udata_new(L, (MSize)size, getcurrenv(L)); - setudataV(L, L->top, ud); - incr_top(L); - return uddata(ud); -} - -LUA_API void lua_concat(lua_State *L, int n) -{ - api_checknelems(L, n); - if (n >= 2) { - n--; - do { - TValue *top = lj_meta_cat(L, L->top-1, -n); - if (top == NULL) { - L->top -= n; - break; - } - n -= (int)(L->top - top); - L->top = top+2; - lj_vm_call(L, top, 1+1); - L->top--; - copyTV(L, L->top-1, L->top); - } while (--n > 0); - } else if (n == 0) { /* Push empty string. */ - setstrV(L, L->top, &G(L)->strempty); - incr_top(L); - } - /* else n == 1: nothing to do. */ -} - -/* -- Object getters ------------------------------------------------------ */ - -LUA_API void lua_gettable(lua_State *L, int idx) -{ - cTValue *v, *t = index2adr(L, idx); - api_checkvalidindex(L, t); - v = lj_meta_tget(L, t, L->top-1); - if (v == NULL) { - L->top += 2; - lj_vm_call(L, L->top-2, 1+1); - L->top -= 2; - v = L->top+1; - } - copyTV(L, L->top-1, v); -} - -LUA_API void lua_getfield(lua_State *L, int idx, const char *k) -{ - cTValue *v, *t = index2adr(L, idx); - TValue key; - api_checkvalidindex(L, t); - setstrV(L, &key, lj_str_newz(L, k)); - v = lj_meta_tget(L, t, &key); - if (v == NULL) { - L->top += 2; - lj_vm_call(L, L->top-2, 1+1); - L->top -= 2; - v = L->top+1; - } - copyTV(L, L->top, v); - incr_top(L); -} - -LUA_API void lua_rawget(lua_State *L, int idx) -{ - cTValue *t = index2adr(L, idx); - api_check(L, tvistab(t)); - copyTV(L, L->top-1, lj_tab_get(L, tabV(t), L->top-1)); -} - -LUA_API void lua_rawgeti(lua_State *L, int idx, int n) -{ - cTValue *v, *t = index2adr(L, idx); - api_check(L, tvistab(t)); - v = lj_tab_getint(tabV(t), n); - if (v) { - copyTV(L, L->top, v); - } else { - setnilV(L->top); - } - incr_top(L); -} - -LUA_API int lua_getmetatable(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - GCtab *mt = NULL; - if (tvistab(o)) - mt = tabref(tabV(o)->metatable); - else if (tvisudata(o)) - mt = tabref(udataV(o)->metatable); - else - mt = tabref(basemt_obj(G(L), o)); - if (mt == NULL) - return 0; - settabV(L, L->top, mt); - incr_top(L); - return 1; -} - -LUALIB_API int luaL_getmetafield(lua_State *L, int idx, const char *field) -{ - if (lua_getmetatable(L, idx)) { - cTValue *tv = lj_tab_getstr(tabV(L->top-1), lj_str_newz(L, field)); - if (tv && !tvisnil(tv)) { - copyTV(L, L->top-1, tv); - return 1; - } - L->top--; - } - return 0; -} - -LUA_API void lua_getfenv(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - api_checkvalidindex(L, o); - if (tvisfunc(o)) { - settabV(L, L->top, tabref(funcV(o)->c.env)); - } else if (tvisudata(o)) { - settabV(L, L->top, tabref(udataV(o)->env)); - } else if (tvisthread(o)) { - settabV(L, L->top, tabref(threadV(o)->env)); - } else { - setnilV(L->top); - } - incr_top(L); -} - -LUA_API int lua_next(lua_State *L, int idx) -{ - cTValue *t = index2adr(L, idx); - int more; - api_check(L, tvistab(t)); - more = lj_tab_next(L, tabV(t), L->top-1); - if (more) { - incr_top(L); /* Return new key and value slot. */ - } else { /* End of traversal. */ - L->top--; /* Remove key slot. */ - } - return more; -} - -LUA_API const char *lua_getupvalue(lua_State *L, int idx, int n) -{ - TValue *val; - const char *name = lj_debug_uvnamev(index2adr(L, idx), (uint32_t)(n-1), &val); - if (name) { - copyTV(L, L->top, val); - incr_top(L); - } - return name; -} - -LUA_API void *lua_upvalueid(lua_State *L, int idx, int n) -{ - GCfunc *fn = funcV(index2adr(L, idx)); - n--; - api_check(L, (uint32_t)n < fn->l.nupvalues); - return isluafunc(fn) ? (void *)gcref(fn->l.uvptr[n]) : - (void *)&fn->c.upvalue[n]; -} - -LUA_API void lua_upvaluejoin(lua_State *L, int idx1, int n1, int idx2, int n2) -{ - GCfunc *fn1 = funcV(index2adr(L, idx1)); - GCfunc *fn2 = funcV(index2adr(L, idx2)); - n1--; n2--; - api_check(L, isluafunc(fn1) && (uint32_t)n1 < fn1->l.nupvalues); - api_check(L, isluafunc(fn2) && (uint32_t)n2 < fn2->l.nupvalues); - setgcrefr(fn1->l.uvptr[n1], fn2->l.uvptr[n2]); - lj_gc_objbarrier(L, fn1, gcref(fn1->l.uvptr[n1])); -} - -LUALIB_API void *luaL_checkudata(lua_State *L, int idx, const char *tname) -{ - cTValue *o = index2adr(L, idx); - if (tvisudata(o)) { - GCudata *ud = udataV(o); - cTValue *tv = lj_tab_getstr(tabV(registry(L)), lj_str_newz(L, tname)); - if (tv && tvistab(tv) && tabV(tv) == tabref(ud->metatable)) - return uddata(ud); - } - lj_err_argtype(L, idx, tname); - return NULL; /* unreachable */ -} - -/* -- Object setters ------------------------------------------------------ */ - -LUA_API void lua_settable(lua_State *L, int idx) -{ - TValue *o; - cTValue *t = index2adr(L, idx); - api_checknelems(L, 2); - api_checkvalidindex(L, t); - o = lj_meta_tset(L, t, L->top-2); - if (o) { - /* NOBARRIER: lj_meta_tset ensures the table is not black. */ - copyTV(L, o, L->top-1); - L->top -= 2; - } else { - L->top += 3; - copyTV(L, L->top-1, L->top-6); - lj_vm_call(L, L->top-3, 0+1); - L->top -= 3; - } -} - -LUA_API void lua_setfield(lua_State *L, int idx, const char *k) -{ - TValue *o; - TValue key; - cTValue *t = index2adr(L, idx); - api_checknelems(L, 1); - api_checkvalidindex(L, t); - setstrV(L, &key, lj_str_newz(L, k)); - o = lj_meta_tset(L, t, &key); - if (o) { - L->top--; - /* NOBARRIER: lj_meta_tset ensures the table is not black. */ - copyTV(L, o, L->top); - } else { - L->top += 3; - copyTV(L, L->top-1, L->top-6); - lj_vm_call(L, L->top-3, 0+1); - L->top -= 2; - } -} - -LUA_API void lua_rawset(lua_State *L, int idx) -{ - GCtab *t = tabV(index2adr(L, idx)); - TValue *dst, *key; - api_checknelems(L, 2); - key = L->top-2; - dst = lj_tab_set(L, t, key); - copyTV(L, dst, key+1); - lj_gc_anybarriert(L, t); - L->top = key; -} - -LUA_API void lua_rawseti(lua_State *L, int idx, int n) -{ - GCtab *t = tabV(index2adr(L, idx)); - TValue *dst, *src; - api_checknelems(L, 1); - dst = lj_tab_setint(L, t, n); - src = L->top-1; - copyTV(L, dst, src); - lj_gc_barriert(L, t, dst); - L->top = src; -} - -LUA_API int lua_setmetatable(lua_State *L, int idx) -{ - global_State *g; - GCtab *mt; - cTValue *o = index2adr(L, idx); - api_checknelems(L, 1); - api_checkvalidindex(L, o); - if (tvisnil(L->top-1)) { - mt = NULL; - } else { - api_check(L, tvistab(L->top-1)); - mt = tabV(L->top-1); - } - g = G(L); - if (tvistab(o)) { - setgcref(tabV(o)->metatable, obj2gco(mt)); - if (mt) - lj_gc_objbarriert(L, tabV(o), mt); - } else if (tvisudata(o)) { - setgcref(udataV(o)->metatable, obj2gco(mt)); - if (mt) - lj_gc_objbarrier(L, udataV(o), mt); - } else { - /* Flush cache, since traces specialize to basemt. But not during __gc. */ - if (lj_trace_flushall(L)) - lj_err_caller(L, LJ_ERR_NOGCMM); - if (tvisbool(o)) { - /* NOBARRIER: basemt is a GC root. */ - setgcref(basemt_it(g, LJ_TTRUE), obj2gco(mt)); - setgcref(basemt_it(g, LJ_TFALSE), obj2gco(mt)); - } else { - /* NOBARRIER: basemt is a GC root. */ - setgcref(basemt_obj(g, o), obj2gco(mt)); - } - } - L->top--; - return 1; -} - -LUA_API int lua_setfenv(lua_State *L, int idx) -{ - cTValue *o = index2adr(L, idx); - GCtab *t; - api_checknelems(L, 1); - api_checkvalidindex(L, o); - api_check(L, tvistab(L->top-1)); - t = tabV(L->top-1); - if (tvisfunc(o)) { - setgcref(funcV(o)->c.env, obj2gco(t)); - } else if (tvisudata(o)) { - setgcref(udataV(o)->env, obj2gco(t)); - } else if (tvisthread(o)) { - setgcref(threadV(o)->env, obj2gco(t)); - } else { - L->top--; - return 0; - } - lj_gc_objbarrier(L, gcV(o), t); - L->top--; - return 1; -} - -LUA_API const char *lua_setupvalue(lua_State *L, int idx, int n) -{ - cTValue *f = index2adr(L, idx); - TValue *val; - const char *name; - api_checknelems(L, 1); - name = lj_debug_uvnamev(f, (uint32_t)(n-1), &val); - if (name) { - L->top--; - copyTV(L, val, L->top); - lj_gc_barrier(L, funcV(f), L->top); - } - return name; -} - -/* -- Calls --------------------------------------------------------------- */ - -LUA_API void lua_call(lua_State *L, int nargs, int nresults) -{ - api_check(L, L->status == 0 || L->status == LUA_ERRERR); - api_checknelems(L, nargs+1); - lj_vm_call(L, L->top - nargs, nresults+1); -} - -LUA_API int lua_pcall(lua_State *L, int nargs, int nresults, int errfunc) -{ - global_State *g = G(L); - uint8_t oldh = hook_save(g); - ptrdiff_t ef; - int status; - api_check(L, L->status == 0 || L->status == LUA_ERRERR); - api_checknelems(L, nargs+1); - if (errfunc == 0) { - ef = 0; - } else { - cTValue *o = stkindex2adr(L, errfunc); - api_checkvalidindex(L, o); - ef = savestack(L, o); - } - status = lj_vm_pcall(L, L->top - nargs, nresults+1, ef); - if (status) hook_restore(g, oldh); - return status; -} - -static TValue *cpcall(lua_State *L, lua_CFunction func, void *ud) -{ - GCfunc *fn = lj_func_newC(L, 0, getcurrenv(L)); - fn->c.f = func; - setfuncV(L, L->top, fn); - setlightudV(L->top+1, checklightudptr(L, ud)); - cframe_nres(L->cframe) = 1+0; /* Zero results. */ - L->top += 2; - return L->top-1; /* Now call the newly allocated C function. */ -} - -LUA_API int lua_cpcall(lua_State *L, lua_CFunction func, void *ud) -{ - global_State *g = G(L); - uint8_t oldh = hook_save(g); - int status; - api_check(L, L->status == 0 || L->status == LUA_ERRERR); - status = lj_vm_cpcall(L, func, ud, cpcall); - if (status) hook_restore(g, oldh); - return status; -} - -LUALIB_API int luaL_callmeta(lua_State *L, int idx, const char *field) -{ - if (luaL_getmetafield(L, idx, field)) { - TValue *base = L->top--; - copyTV(L, base, index2adr(L, idx)); - L->top = base+1; - lj_vm_call(L, base, 1+1); - return 1; - } - return 0; -} - -/* -- Coroutine yield and resume ------------------------------------------ */ - -LUA_API int lua_yield(lua_State *L, int nresults) -{ - void *cf = L->cframe; - global_State *g = G(L); - if (cframe_canyield(cf)) { - cf = cframe_raw(cf); - if (!hook_active(g)) { /* Regular yield: move results down if needed. */ - cTValue *f = L->top - nresults; - if (f > L->base) { - TValue *t = L->base; - while (--nresults >= 0) copyTV(L, t++, f++); - L->top = t; - } - L->cframe = NULL; - L->status = LUA_YIELD; - return -1; - } else { /* Yield from hook: add a pseudo-frame. */ - TValue *top = L->top; - hook_leave(g); - top->u64 = cframe_multres(cf); - setcont(top+1, lj_cont_hook); - setframe_pc(top+1, cframe_pc(cf)-1); - setframe_gc(top+2, obj2gco(L)); - setframe_ftsz(top+2, (int)((char *)(top+3)-(char *)L->base)+FRAME_CONT); - L->top = L->base = top+3; -#if LJ_TARGET_X64 - lj_err_throw(L, LUA_YIELD); -#else - L->cframe = NULL; - L->status = LUA_YIELD; - lj_vm_unwind_c(cf, LUA_YIELD); -#endif - } - } - lj_err_msg(L, LJ_ERR_CYIELD); - return 0; /* unreachable */ -} - -LUA_API int lua_resume(lua_State *L, int nargs) -{ - if (L->cframe == NULL && L->status <= LUA_YIELD) - return lj_vm_resume(L, L->top - nargs, 0, 0); - L->top = L->base; - setstrV(L, L->top, lj_err_str(L, LJ_ERR_COSUSP)); - incr_top(L); - return LUA_ERRRUN; -} - -/* -- GC and memory management -------------------------------------------- */ - -LUA_API int lua_gc(lua_State *L, int what, int data) -{ - global_State *g = G(L); - int res = 0; - switch (what) { - case LUA_GCSTOP: - g->gc.threshold = LJ_MAX_MEM; - break; - case LUA_GCRESTART: - g->gc.threshold = data == -1 ? (g->gc.total/100)*g->gc.pause : g->gc.total; - break; - case LUA_GCCOLLECT: - lj_gc_fullgc(L); - break; - case LUA_GCCOUNT: - res = (int)(g->gc.total >> 10); - break; - case LUA_GCCOUNTB: - res = (int)(g->gc.total & 0x3ff); - break; - case LUA_GCSTEP: { - MSize a = (MSize)data << 10; - g->gc.threshold = (a <= g->gc.total) ? (g->gc.total - a) : 0; - while (g->gc.total >= g->gc.threshold) - if (lj_gc_step(L) > 0) { - res = 1; - break; - } - break; - } - case LUA_GCSETPAUSE: - res = (int)(g->gc.pause); - g->gc.pause = (MSize)data; - break; - case LUA_GCSETSTEPMUL: - res = (int)(g->gc.stepmul); - g->gc.stepmul = (MSize)data; - break; - default: - res = -1; /* Invalid option. */ - } - return res; -} - -LUA_API lua_Alloc lua_getallocf(lua_State *L, void **ud) -{ - global_State *g = G(L); - if (ud) *ud = g->allocd; - return g->allocf; -} - -LUA_API void lua_setallocf(lua_State *L, lua_Alloc f, void *ud) -{ - global_State *g = G(L); - g->allocd = ud; - g->allocf = f; -} - diff --git a/deps/luajit/src/lj_arch.h b/deps/luajit/src/lj_arch.h deleted file mode 100644 index d3a9d57..0000000 --- a/deps/luajit/src/lj_arch.h +++ /dev/null @@ -1,437 +0,0 @@ -/* -** Target architecture selection. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_ARCH_H -#define _LJ_ARCH_H - -#include "lua.h" - -/* Target endianess. */ -#define LUAJIT_LE 0 -#define LUAJIT_BE 1 - -/* Target architectures. */ -#define LUAJIT_ARCH_X86 1 -#define LUAJIT_ARCH_x86 1 -#define LUAJIT_ARCH_X64 2 -#define LUAJIT_ARCH_x64 2 -#define LUAJIT_ARCH_ARM 3 -#define LUAJIT_ARCH_arm 3 -#define LUAJIT_ARCH_PPC 4 -#define LUAJIT_ARCH_ppc 4 -#define LUAJIT_ARCH_PPCSPE 5 -#define LUAJIT_ARCH_ppcspe 5 -#define LUAJIT_ARCH_MIPS 6 -#define LUAJIT_ARCH_mips 6 - -/* Target OS. */ -#define LUAJIT_OS_OTHER 0 -#define LUAJIT_OS_WINDOWS 1 -#define LUAJIT_OS_LINUX 2 -#define LUAJIT_OS_OSX 3 -#define LUAJIT_OS_BSD 4 -#define LUAJIT_OS_POSIX 5 - -/* Select native target if no target defined. */ -#ifndef LUAJIT_TARGET - -#if defined(__i386) || defined(__i386__) || defined(_M_IX86) -#define LUAJIT_TARGET LUAJIT_ARCH_X86 -#elif defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) -#define LUAJIT_TARGET LUAJIT_ARCH_X64 -#elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM) -#define LUAJIT_TARGET LUAJIT_ARCH_ARM -#elif defined(__ppc__) || defined(__ppc) || defined(__PPC__) || defined(__PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__POWERPC) || defined(_M_PPC) -#ifdef __NO_FPRS__ -#define LUAJIT_TARGET LUAJIT_ARCH_PPCSPE -#else -#define LUAJIT_TARGET LUAJIT_ARCH_PPC -#endif -#elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) -#define LUAJIT_TARGET LUAJIT_ARCH_MIPS -#else -#error "No support for this architecture (yet)" -#endif - -#endif - -/* Select native OS if no target OS defined. */ -#ifndef LUAJIT_OS - -#if defined(_WIN32) && !defined(_XBOX_VER) -#define LUAJIT_OS LUAJIT_OS_WINDOWS -#elif defined(__linux__) -#define LUAJIT_OS LUAJIT_OS_LINUX -#elif defined(__MACH__) && defined(__APPLE__) -#define LUAJIT_OS LUAJIT_OS_OSX -#elif (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ - defined(__NetBSD__) || defined(__OpenBSD__) || \ - defined(__DragonFly__)) && !defined(__ORBIS__) -#define LUAJIT_OS LUAJIT_OS_BSD -#elif (defined(__sun__) && defined(__svr4__)) || defined(__CYGWIN__) -#define LUAJIT_OS LUAJIT_OS_POSIX -#else -#define LUAJIT_OS LUAJIT_OS_OTHER -#endif - -#endif - -/* Set target OS properties. */ -#if LUAJIT_OS == LUAJIT_OS_WINDOWS -#define LJ_OS_NAME "Windows" -#elif LUAJIT_OS == LUAJIT_OS_LINUX -#define LJ_OS_NAME "Linux" -#elif LUAJIT_OS == LUAJIT_OS_OSX -#define LJ_OS_NAME "OSX" -#elif LUAJIT_OS == LUAJIT_OS_BSD -#define LJ_OS_NAME "BSD" -#elif LUAJIT_OS == LUAJIT_OS_POSIX -#define LJ_OS_NAME "POSIX" -#else -#define LJ_OS_NAME "Other" -#endif - -#define LJ_TARGET_WINDOWS (LUAJIT_OS == LUAJIT_OS_WINDOWS) -#define LJ_TARGET_LINUX (LUAJIT_OS == LUAJIT_OS_LINUX) -#define LJ_TARGET_OSX (LUAJIT_OS == LUAJIT_OS_OSX) -#define LJ_TARGET_IOS (LJ_TARGET_OSX && LUAJIT_TARGET == LUAJIT_ARCH_ARM) -#define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) -#define LJ_TARGET_DLOPEN LJ_TARGET_POSIX - -#ifdef __CELLOS_LV2__ -#define LJ_TARGET_PS3 1 -#define LJ_TARGET_CONSOLE 1 -#endif - -#ifdef __ORBIS__ -#define LJ_TARGET_PS4 1 -#define LJ_TARGET_CONSOLE 1 -#undef NULL -#define NULL ((void*)0) -#endif - -#ifdef __psp2__ -#define LJ_TARGET_PSVITA 1 -#define LJ_TARGET_CONSOLE 1 -#endif - -#if _XBOX_VER >= 200 -#define LJ_TARGET_XBOX360 1 -#define LJ_TARGET_CONSOLE 1 -#endif - -#define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ -#define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ -#define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ -#define LJ_NUMMODE_DUAL_SINGLE 3 /* Default to dual-number mode. */ - -/* Set target architecture properties. */ -#if LUAJIT_TARGET == LUAJIT_ARCH_X86 - -#define LJ_ARCH_NAME "x86" -#define LJ_ARCH_BITS 32 -#define LJ_ARCH_ENDIAN LUAJIT_LE -#if LJ_TARGET_WINDOWS || __CYGWIN__ -#define LJ_ABI_WIN 1 -#else -#define LJ_ABI_WIN 0 -#endif -#define LJ_TARGET_X86 1 -#define LJ_TARGET_X86ORX64 1 -#define LJ_TARGET_EHRETREG 0 -#define LJ_TARGET_MASKSHIFT 1 -#define LJ_TARGET_MASKROT 1 -#define LJ_TARGET_UNALIGNED 1 -#define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE_DUAL - -#elif LUAJIT_TARGET == LUAJIT_ARCH_X64 - -#define LJ_ARCH_NAME "x64" -#define LJ_ARCH_BITS 64 -#define LJ_ARCH_ENDIAN LUAJIT_LE -#define LJ_ABI_WIN LJ_TARGET_WINDOWS -#define LJ_TARGET_X64 1 -#define LJ_TARGET_X86ORX64 1 -#define LJ_TARGET_EHRETREG 0 -#define LJ_TARGET_JUMPRANGE 31 /* +-2^31 = +-2GB */ -#define LJ_TARGET_MASKSHIFT 1 -#define LJ_TARGET_MASKROT 1 -#define LJ_TARGET_UNALIGNED 1 -#define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE_DUAL - -#elif LUAJIT_TARGET == LUAJIT_ARCH_ARM - -#define LJ_ARCH_NAME "arm" -#define LJ_ARCH_BITS 32 -#define LJ_ARCH_ENDIAN LUAJIT_LE -#if !defined(LJ_ARCH_HASFPU) && __SOFTFP__ -#define LJ_ARCH_HASFPU 0 -#endif -#if !defined(LJ_ABI_SOFTFP) && !__ARM_PCS_VFP -#define LJ_ABI_SOFTFP 1 -#endif -#define LJ_ABI_EABI 1 -#define LJ_TARGET_ARM 1 -#define LJ_TARGET_EHRETREG 0 -#define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ -#define LJ_TARGET_MASKSHIFT 0 -#define LJ_TARGET_MASKROT 1 -#define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ -#define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL - -#if __ARM_ARCH____ARM_ARCH_8__ || __ARM_ARCH_8A__ -#define LJ_ARCH_VERSION 80 -#elif __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH_7S__ || __ARM_ARCH_7VE__ -#define LJ_ARCH_VERSION 70 -#elif __ARM_ARCH_6T2__ -#define LJ_ARCH_VERSION 61 -#elif __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6K__ || __ARM_ARCH_6Z__ || __ARM_ARCH_6ZK__ -#define LJ_ARCH_VERSION 60 -#else -#define LJ_ARCH_VERSION 50 -#endif - -#elif LUAJIT_TARGET == LUAJIT_ARCH_PPC - -#define LJ_ARCH_NAME "ppc" -#if _LP64 -#define LJ_ARCH_BITS 64 -#else -#define LJ_ARCH_BITS 32 -#endif -#define LJ_ARCH_ENDIAN LUAJIT_BE -#define LJ_TARGET_PPC 1 -#define LJ_TARGET_EHRETREG 3 -#define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ -#define LJ_TARGET_MASKSHIFT 0 -#define LJ_TARGET_MASKROT 1 -#define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ -#define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE - -#if _ARCH_PWR7 -#define LJ_ARCH_VERSION 70 -#elif _ARCH_PWR6 -#define LJ_ARCH_VERSION 60 -#elif _ARCH_PWR5X -#define LJ_ARCH_VERSION 51 -#elif _ARCH_PWR5 -#define LJ_ARCH_VERSION 50 -#elif _ARCH_PWR4 -#define LJ_ARCH_VERSION 40 -#else -#define LJ_ARCH_VERSION 0 -#endif -#if __PPC64__ || __powerpc64__ || LJ_TARGET_CONSOLE -#define LJ_ARCH_PPC64 1 -#define LJ_ARCH_NOFFI 1 -#endif -#if _ARCH_PPCSQ -#define LJ_ARCH_SQRT 1 -#endif -#if _ARCH_PWR5X -#define LJ_ARCH_ROUND 1 -#endif -#if __PPU__ -#define LJ_ARCH_CELL 1 -#endif -#if LJ_TARGET_XBOX360 -#define LJ_ARCH_XENON 1 -#endif - -#elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE - -#define LJ_ARCH_NAME "ppcspe" -#define LJ_ARCH_BITS 32 -#define LJ_ARCH_ENDIAN LUAJIT_BE -#ifndef LJ_ABI_SOFTFP -#define LJ_ABI_SOFTFP 1 -#endif -#define LJ_ABI_EABI 1 -#define LJ_TARGET_PPCSPE 1 -#define LJ_TARGET_EHRETREG 3 -#define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ -#define LJ_TARGET_MASKSHIFT 0 -#define LJ_TARGET_MASKROT 1 -#define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ -#define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE -#define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */ -#define LJ_ARCH_NOJIT 1 - -#elif LUAJIT_TARGET == LUAJIT_ARCH_MIPS - -#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) -#define LJ_ARCH_NAME "mipsel" -#define LJ_ARCH_ENDIAN LUAJIT_LE -#else -#define LJ_ARCH_NAME "mips" -#define LJ_ARCH_ENDIAN LUAJIT_BE -#endif -#define LJ_ARCH_BITS 32 -#define LJ_TARGET_MIPS 1 -#define LJ_TARGET_EHRETREG 4 -#define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ -#define LJ_TARGET_MASKSHIFT 1 -#define LJ_TARGET_MASKROT 1 -#define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ -#define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE - -#if _MIPS_ARCH_MIPS32R2 -#define LJ_ARCH_VERSION 20 -#else -#define LJ_ARCH_VERSION 10 -#endif - -#else -#error "No target architecture defined" -#endif - -#ifndef LJ_PAGESIZE -#define LJ_PAGESIZE 4096 -#endif - -/* Check for minimum required compiler versions. */ -#if defined(__GNUC__) -#if LJ_TARGET_X86 -#if (__GNUC__ < 3) || ((__GNUC__ == 3) && __GNUC_MINOR__ < 4) -#error "Need at least GCC 3.4 or newer" -#endif -#elif LJ_TARGET_X64 -#if __GNUC__ < 4 -#error "Need at least GCC 4.0 or newer" -#endif -#elif LJ_TARGET_ARM -#if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) -#error "Need at least GCC 4.2 or newer" -#endif -#elif !LJ_TARGET_PS3 -#if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) -#error "Need at least GCC 4.3 or newer" -#endif -#endif -#endif - -/* Check target-specific constraints. */ -#ifndef _BUILDVM_H -#if LJ_TARGET_X64 -#if __USING_SJLJ_EXCEPTIONS__ -#error "Need a C compiler with native exception handling on x64" -#endif -#elif LJ_TARGET_ARM -#if defined(__ARMEB__) -#error "No support for big-endian ARM" -#endif -#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ -#error "No support for Cortex-M CPUs" -#endif -#if !(__ARM_EABI__ || LJ_TARGET_IOS) -#error "Only ARM EABI or iOS 3.0+ ABI is supported" -#endif -#elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE -#if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) -#error "No support for PowerPC CPUs without double-precision FPU" -#endif -#if defined(_LITTLE_ENDIAN) -#error "No support for little-endian PowerPC" -#endif -#if defined(_LP64) -#error "No support for PowerPC 64 bit mode" -#endif -#elif LJ_TARGET_MIPS -#if defined(__mips_soft_float) -#error "No support for MIPS CPUs without FPU" -#endif -#if defined(_LP64) -#error "No support for MIPS64" -#endif -#endif -#endif - -/* Enable or disable the dual-number mode for the VM. */ -#if (LJ_ARCH_NUMMODE == LJ_NUMMODE_SINGLE && LUAJIT_NUMMODE == 2) || \ - (LJ_ARCH_NUMMODE == LJ_NUMMODE_DUAL && LUAJIT_NUMMODE == 1) -#error "No support for this number mode on this architecture" -#endif -#if LJ_ARCH_NUMMODE == LJ_NUMMODE_DUAL || \ - (LJ_ARCH_NUMMODE == LJ_NUMMODE_DUAL_SINGLE && LUAJIT_NUMMODE != 1) || \ - (LJ_ARCH_NUMMODE == LJ_NUMMODE_SINGLE_DUAL && LUAJIT_NUMMODE == 2) -#define LJ_DUALNUM 1 -#else -#define LJ_DUALNUM 0 -#endif - -#if LJ_TARGET_IOS || LJ_TARGET_CONSOLE -/* Runtime code generation is restricted on iOS. Complain to Apple, not me. */ -/* Ditto for the consoles. Complain to Sony or MS, not me. */ -#ifndef LUAJIT_ENABLE_JIT -#define LJ_OS_NOJIT 1 -#endif -#endif - -/* Disable or enable the JIT compiler. */ -#if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) -#define LJ_HASJIT 0 -#else -#define LJ_HASJIT 1 -#endif - -/* Disable or enable the FFI extension. */ -#if defined(LUAJIT_DISABLE_FFI) || defined(LJ_ARCH_NOFFI) -#define LJ_HASFFI 0 -#else -#define LJ_HASFFI 1 -#endif - -#ifndef LJ_ARCH_HASFPU -#define LJ_ARCH_HASFPU 1 -#endif -#ifndef LJ_ABI_SOFTFP -#define LJ_ABI_SOFTFP 0 -#endif -#define LJ_SOFTFP (!LJ_ARCH_HASFPU) - -#if LJ_ARCH_ENDIAN == LUAJIT_BE -#define LJ_LE 0 -#define LJ_BE 1 -#define LJ_ENDIAN_SELECT(le, be) be -#define LJ_ENDIAN_LOHI(lo, hi) hi lo -#else -#define LJ_LE 1 -#define LJ_BE 0 -#define LJ_ENDIAN_SELECT(le, be) le -#define LJ_ENDIAN_LOHI(lo, hi) lo hi -#endif - -#if LJ_ARCH_BITS == 32 -#define LJ_32 1 -#define LJ_64 0 -#else -#define LJ_32 0 -#define LJ_64 1 -#endif - -#ifndef LJ_TARGET_UNALIGNED -#define LJ_TARGET_UNALIGNED 0 -#endif - -/* Various workarounds for embedded operating systems. */ -#if (defined(__ANDROID__) && !defined(LJ_TARGET_X86ORX64)) || defined(__symbian__) || LJ_TARGET_XBOX360 -#define LUAJIT_NO_LOG2 -#endif -#if defined(__symbian__) -#define LUAJIT_NO_EXP2 -#endif - -#if defined(LUAJIT_NO_UNWIND) || defined(__symbian__) || LJ_TARGET_IOS || LJ_TARGET_PS3 -#define LJ_NO_UNWIND 1 -#endif - -/* Compatibility with Lua 5.1 vs. 5.2. */ -#ifdef LUAJIT_ENABLE_LUA52COMPAT -#define LJ_52 1 -#else -#define LJ_52 0 -#endif - -#endif diff --git a/deps/luajit/src/lj_asm.c b/deps/luajit/src/lj_asm.c deleted file mode 100644 index 804b4dc..0000000 --- a/deps/luajit/src/lj_asm.c +++ /dev/null @@ -1,1920 +0,0 @@ -/* -** IR assembler (SSA IR -> machine code). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_asm_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_gc.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_frame.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#endif -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_mcode.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_snap.h" -#include "lj_asm.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_target.h" - -#ifdef LUA_USE_ASSERT -#include -#endif - -/* -- Assembler state and common macros ----------------------------------- */ - -/* Assembler state. */ -typedef struct ASMState { - RegCost cost[RID_MAX]; /* Reference and blended allocation cost for regs. */ - - MCode *mcp; /* Current MCode pointer (grows down). */ - MCode *mclim; /* Lower limit for MCode memory + red zone. */ -#ifdef LUA_USE_ASSERT - MCode *mcp_prev; /* Red zone overflow check. */ -#endif - - IRIns *ir; /* Copy of pointer to IR instructions/constants. */ - jit_State *J; /* JIT compiler state. */ - -#if LJ_TARGET_X86ORX64 - x86ModRM mrm; /* Fused x86 address operand. */ -#endif - - RegSet freeset; /* Set of free registers. */ - RegSet modset; /* Set of registers modified inside the loop. */ - RegSet weakset; /* Set of weakly referenced registers. */ - RegSet phiset; /* Set of PHI registers. */ - - uint32_t flags; /* Copy of JIT compiler flags. */ - int loopinv; /* Loop branch inversion (0:no, 1:yes, 2:yes+CC_P). */ - - int32_t evenspill; /* Next even spill slot. */ - int32_t oddspill; /* Next odd spill slot (or 0). */ - - IRRef curins; /* Reference of current instruction. */ - IRRef stopins; /* Stop assembly before hitting this instruction. */ - IRRef orignins; /* Original T->nins. */ - - IRRef snapref; /* Current snapshot is active after this reference. */ - IRRef snaprename; /* Rename highwater mark for snapshot check. */ - SnapNo snapno; /* Current snapshot number. */ - SnapNo loopsnapno; /* Loop snapshot number. */ - - IRRef fuseref; /* Fusion limit (loopref, 0 or FUSE_DISABLED). */ - IRRef sectref; /* Section base reference (loopref or 0). */ - IRRef loopref; /* Reference of LOOP instruction (or 0). */ - - BCReg topslot; /* Number of slots for stack check (unless 0). */ - int32_t gcsteps; /* Accumulated number of GC steps (per section). */ - - GCtrace *T; /* Trace to assemble. */ - GCtrace *parent; /* Parent trace (or NULL). */ - - MCode *mcbot; /* Bottom of reserved MCode. */ - MCode *mctop; /* Top of generated MCode. */ - MCode *mcloop; /* Pointer to loop MCode (or NULL). */ - MCode *invmcp; /* Points to invertible loop branch (or NULL). */ - MCode *flagmcp; /* Pending opportunity to merge flag setting ins. */ - MCode *realign; /* Realign loop if not NULL. */ - -#ifdef RID_NUM_KREF - int32_t krefk[RID_NUM_KREF]; -#endif - IRRef1 phireg[RID_MAX]; /* PHI register references. */ - uint16_t parentmap[LJ_MAX_JSLOTS]; /* Parent instruction to RegSP map. */ -} ASMState; - -#define IR(ref) (&as->ir[(ref)]) - -#define ASMREF_TMP1 REF_TRUE /* Temp. register. */ -#define ASMREF_TMP2 REF_FALSE /* Temp. register. */ -#define ASMREF_L REF_NIL /* Stores register for L. */ - -/* Check for variant to invariant references. */ -#define iscrossref(as, ref) ((ref) < as->sectref) - -/* Inhibit memory op fusion from variant to invariant references. */ -#define FUSE_DISABLED (~(IRRef)0) -#define mayfuse(as, ref) ((ref) > as->fuseref) -#define neverfuse(as) (as->fuseref == FUSE_DISABLED) -#define canfuse(as, ir) (!neverfuse(as) && !irt_isphi((ir)->t)) -#define opisfusableload(o) \ - ((o) == IR_ALOAD || (o) == IR_HLOAD || (o) == IR_ULOAD || \ - (o) == IR_FLOAD || (o) == IR_XLOAD || (o) == IR_SLOAD || (o) == IR_VLOAD) - -/* Sparse limit checks using a red zone before the actual limit. */ -#define MCLIM_REDZONE 64 - -static LJ_NORET LJ_NOINLINE void asm_mclimit(ASMState *as) -{ - lj_mcode_limiterr(as->J, (size_t)(as->mctop - as->mcp + 4*MCLIM_REDZONE)); -} - -static LJ_AINLINE void checkmclim(ASMState *as) -{ -#ifdef LUA_USE_ASSERT - if (as->mcp + MCLIM_REDZONE < as->mcp_prev) { - IRIns *ir = IR(as->curins+1); - fprintf(stderr, "RED ZONE OVERFLOW: %p IR %04d %02d %04d %04d\n", as->mcp, - as->curins+1-REF_BIAS, ir->o, ir->op1-REF_BIAS, ir->op2-REF_BIAS); - lua_assert(0); - } -#endif - if (LJ_UNLIKELY(as->mcp < as->mclim)) asm_mclimit(as); -#ifdef LUA_USE_ASSERT - as->mcp_prev = as->mcp; -#endif -} - -#ifdef RID_NUM_KREF -#define ra_iskref(ref) ((ref) < RID_NUM_KREF) -#define ra_krefreg(ref) ((Reg)(RID_MIN_KREF + (Reg)(ref))) -#define ra_krefk(as, ref) (as->krefk[(ref)]) - -static LJ_AINLINE void ra_setkref(ASMState *as, Reg r, int32_t k) -{ - IRRef ref = (IRRef)(r - RID_MIN_KREF); - as->krefk[ref] = k; - as->cost[r] = REGCOST(ref, ref); -} - -#else -#define ra_iskref(ref) 0 -#define ra_krefreg(ref) RID_MIN_GPR -#define ra_krefk(as, ref) 0 -#endif - -/* Arch-specific field offsets. */ -static const uint8_t field_ofs[IRFL__MAX+1] = { -#define FLOFS(name, ofs) (uint8_t)(ofs), -IRFLDEF(FLOFS) -#undef FLOFS - 0 -}; - -/* -- Target-specific instruction emitter --------------------------------- */ - -#if LJ_TARGET_X86ORX64 -#include "lj_emit_x86.h" -#elif LJ_TARGET_ARM -#include "lj_emit_arm.h" -#elif LJ_TARGET_PPC -#include "lj_emit_ppc.h" -#elif LJ_TARGET_MIPS -#include "lj_emit_mips.h" -#else -#error "Missing instruction emitter for target CPU" -#endif - -/* -- Register allocator debugging ---------------------------------------- */ - -/* #define LUAJIT_DEBUG_RA */ - -#ifdef LUAJIT_DEBUG_RA - -#include -#include - -#define RIDNAME(name) #name, -static const char *const ra_regname[] = { - GPRDEF(RIDNAME) - FPRDEF(RIDNAME) - VRIDDEF(RIDNAME) - NULL -}; -#undef RIDNAME - -static char ra_dbg_buf[65536]; -static char *ra_dbg_p; -static char *ra_dbg_merge; -static MCode *ra_dbg_mcp; - -static void ra_dstart(void) -{ - ra_dbg_p = ra_dbg_buf; - ra_dbg_merge = NULL; - ra_dbg_mcp = NULL; -} - -static void ra_dflush(void) -{ - fwrite(ra_dbg_buf, 1, (size_t)(ra_dbg_p-ra_dbg_buf), stdout); - ra_dstart(); -} - -static void ra_dprintf(ASMState *as, const char *fmt, ...) -{ - char *p; - va_list argp; - va_start(argp, fmt); - p = ra_dbg_mcp == as->mcp ? ra_dbg_merge : ra_dbg_p; - ra_dbg_mcp = NULL; - p += sprintf(p, "%08x \e[36m%04d ", (uintptr_t)as->mcp, as->curins-REF_BIAS); - for (;;) { - const char *e = strchr(fmt, '$'); - if (e == NULL) break; - memcpy(p, fmt, (size_t)(e-fmt)); - p += e-fmt; - if (e[1] == 'r') { - Reg r = va_arg(argp, Reg) & RID_MASK; - if (r <= RID_MAX) { - const char *q; - for (q = ra_regname[r]; *q; q++) - *p++ = *q >= 'A' && *q <= 'Z' ? *q + 0x20 : *q; - } else { - *p++ = '?'; - lua_assert(0); - } - } else if (e[1] == 'f' || e[1] == 'i') { - IRRef ref; - if (e[1] == 'f') - ref = va_arg(argp, IRRef); - else - ref = va_arg(argp, IRIns *) - as->ir; - if (ref >= REF_BIAS) - p += sprintf(p, "%04d", ref - REF_BIAS); - else - p += sprintf(p, "K%03d", REF_BIAS - ref); - } else if (e[1] == 's') { - uint32_t slot = va_arg(argp, uint32_t); - p += sprintf(p, "[sp+0x%x]", sps_scale(slot)); - } else if (e[1] == 'x') { - p += sprintf(p, "%08x", va_arg(argp, int32_t)); - } else { - lua_assert(0); - } - fmt = e+2; - } - va_end(argp); - while (*fmt) - *p++ = *fmt++; - *p++ = '\e'; *p++ = '['; *p++ = 'm'; *p++ = '\n'; - if (p > ra_dbg_buf+sizeof(ra_dbg_buf)-256) { - fwrite(ra_dbg_buf, 1, (size_t)(p-ra_dbg_buf), stdout); - p = ra_dbg_buf; - } - ra_dbg_p = p; -} - -#define RA_DBG_START() ra_dstart() -#define RA_DBG_FLUSH() ra_dflush() -#define RA_DBG_REF() \ - do { char *_p = ra_dbg_p; ra_dprintf(as, ""); \ - ra_dbg_merge = _p; ra_dbg_mcp = as->mcp; } while (0) -#define RA_DBGX(x) ra_dprintf x - -#else -#define RA_DBG_START() ((void)0) -#define RA_DBG_FLUSH() ((void)0) -#define RA_DBG_REF() ((void)0) -#define RA_DBGX(x) ((void)0) -#endif - -/* -- Register allocator -------------------------------------------------- */ - -#define ra_free(as, r) rset_set(as->freeset, (r)) -#define ra_modified(as, r) rset_set(as->modset, (r)) -#define ra_weak(as, r) rset_set(as->weakset, (r)) -#define ra_noweak(as, r) rset_clear(as->weakset, (r)) - -#define ra_used(ir) (ra_hasreg((ir)->r) || ra_hasspill((ir)->s)) - -/* Setup register allocator. */ -static void ra_setup(ASMState *as) -{ - Reg r; - /* Initially all regs (except the stack pointer) are free for use. */ - as->freeset = RSET_INIT; - as->modset = RSET_EMPTY; - as->weakset = RSET_EMPTY; - as->phiset = RSET_EMPTY; - memset(as->phireg, 0, sizeof(as->phireg)); - for (r = RID_MIN_GPR; r < RID_MAX; r++) - as->cost[r] = REGCOST(~0u, 0u); -} - -/* Rematerialize constants. */ -static Reg ra_rematk(ASMState *as, IRRef ref) -{ - IRIns *ir; - Reg r; - if (ra_iskref(ref)) { - r = ra_krefreg(ref); - lua_assert(!rset_test(as->freeset, r)); - ra_free(as, r); - ra_modified(as, r); - emit_loadi(as, r, ra_krefk(as, ref)); - return r; - } - ir = IR(ref); - r = ir->r; - lua_assert(ra_hasreg(r) && !ra_hasspill(ir->s)); - ra_free(as, r); - ra_modified(as, r); - ir->r = RID_INIT; /* Do not keep any hint. */ - RA_DBGX((as, "remat $i $r", ir, r)); -#if !LJ_SOFTFP - if (ir->o == IR_KNUM) { - emit_loadn(as, r, ir_knum(ir)); - } else -#endif - if (emit_canremat(REF_BASE) && ir->o == IR_BASE) { - ra_sethint(ir->r, RID_BASE); /* Restore BASE register hint. */ - emit_getgl(as, r, jit_base); - } else if (emit_canremat(ASMREF_L) && ir->o == IR_KPRI) { - lua_assert(irt_isnil(ir->t)); /* REF_NIL stores ASMREF_L register. */ - emit_getgl(as, r, jit_L); -#if LJ_64 - } else if (ir->o == IR_KINT64) { - emit_loadu64(as, r, ir_kint64(ir)->u64); -#endif - } else { - lua_assert(ir->o == IR_KINT || ir->o == IR_KGC || - ir->o == IR_KPTR || ir->o == IR_KKPTR || ir->o == IR_KNULL); - emit_loadi(as, r, ir->i); - } - return r; -} - -/* Force a spill. Allocate a new spill slot if needed. */ -static int32_t ra_spill(ASMState *as, IRIns *ir) -{ - int32_t slot = ir->s; - lua_assert(ir >= as->ir + REF_TRUE); - if (!ra_hasspill(slot)) { - if (irt_is64(ir->t)) { - slot = as->evenspill; - as->evenspill += 2; - } else if (as->oddspill) { - slot = as->oddspill; - as->oddspill = 0; - } else { - slot = as->evenspill; - as->oddspill = slot+1; - as->evenspill += 2; - } - if (as->evenspill > 256) - lj_trace_err(as->J, LJ_TRERR_SPILLOV); - ir->s = (uint8_t)slot; - } - return sps_scale(slot); -} - -/* Release the temporarily allocated register in ASMREF_TMP1/ASMREF_TMP2. */ -static Reg ra_releasetmp(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - Reg r = ir->r; - lua_assert(ra_hasreg(r) && !ra_hasspill(ir->s)); - ra_free(as, r); - ra_modified(as, r); - ir->r = RID_INIT; - return r; -} - -/* Restore a register (marked as free). Rematerialize or force a spill. */ -static Reg ra_restore(ASMState *as, IRRef ref) -{ - if (emit_canremat(ref)) { - return ra_rematk(as, ref); - } else { - IRIns *ir = IR(ref); - int32_t ofs = ra_spill(as, ir); /* Force a spill slot. */ - Reg r = ir->r; - lua_assert(ra_hasreg(r)); - ra_sethint(ir->r, r); /* Keep hint. */ - ra_free(as, r); - if (!rset_test(as->weakset, r)) { /* Only restore non-weak references. */ - ra_modified(as, r); - RA_DBGX((as, "restore $i $r", ir, r)); - emit_spload(as, ir, r, ofs); - } - return r; - } -} - -/* Save a register to a spill slot. */ -static void ra_save(ASMState *as, IRIns *ir, Reg r) -{ - RA_DBGX((as, "save $i $r", ir, r)); - emit_spstore(as, ir, r, sps_scale(ir->s)); -} - -#define MINCOST(name) \ - if (rset_test(RSET_ALL, RID_##name) && \ - LJ_LIKELY(allow&RID2RSET(RID_##name)) && as->cost[RID_##name] < cost) \ - cost = as->cost[RID_##name]; - -/* Evict the register with the lowest cost, forcing a restore. */ -static Reg ra_evict(ASMState *as, RegSet allow) -{ - IRRef ref; - RegCost cost = ~(RegCost)0; - lua_assert(allow != RSET_EMPTY); - if (RID_NUM_FPR == 0 || allow < RID2RSET(RID_MAX_GPR)) { - GPRDEF(MINCOST) - } else { - FPRDEF(MINCOST) - } - ref = regcost_ref(cost); - lua_assert(ra_iskref(ref) || (ref >= as->T->nk && ref < as->T->nins)); - /* Preferably pick any weak ref instead of a non-weak, non-const ref. */ - if (!irref_isk(ref) && (as->weakset & allow)) { - IRIns *ir = IR(ref); - if (!rset_test(as->weakset, ir->r)) - ref = regcost_ref(as->cost[rset_pickbot((as->weakset & allow))]); - } - return ra_restore(as, ref); -} - -/* Pick any register (marked as free). Evict on-demand. */ -static Reg ra_pick(ASMState *as, RegSet allow) -{ - RegSet pick = as->freeset & allow; - if (!pick) - return ra_evict(as, allow); - else - return rset_picktop(pick); -} - -/* Get a scratch register (marked as free). */ -static Reg ra_scratch(ASMState *as, RegSet allow) -{ - Reg r = ra_pick(as, allow); - ra_modified(as, r); - RA_DBGX((as, "scratch $r", r)); - return r; -} - -/* Evict all registers from a set (if not free). */ -static void ra_evictset(ASMState *as, RegSet drop) -{ - RegSet work; - as->modset |= drop; -#if !LJ_SOFTFP - work = (drop & ~as->freeset) & RSET_FPR; - while (work) { - Reg r = rset_pickbot(work); - ra_restore(as, regcost_ref(as->cost[r])); - rset_clear(work, r); - checkmclim(as); - } -#endif - work = (drop & ~as->freeset); - while (work) { - Reg r = rset_pickbot(work); - ra_restore(as, regcost_ref(as->cost[r])); - rset_clear(work, r); - checkmclim(as); - } -} - -/* Evict (rematerialize) all registers allocated to constants. */ -static void ra_evictk(ASMState *as) -{ - RegSet work; -#if !LJ_SOFTFP - work = ~as->freeset & RSET_FPR; - while (work) { - Reg r = rset_pickbot(work); - IRRef ref = regcost_ref(as->cost[r]); - if (emit_canremat(ref) && irref_isk(ref)) { - ra_rematk(as, ref); - checkmclim(as); - } - rset_clear(work, r); - } -#endif - work = ~as->freeset & RSET_GPR; - while (work) { - Reg r = rset_pickbot(work); - IRRef ref = regcost_ref(as->cost[r]); - if (emit_canremat(ref) && irref_isk(ref)) { - ra_rematk(as, ref); - checkmclim(as); - } - rset_clear(work, r); - } -} - -#ifdef RID_NUM_KREF -/* Allocate a register for a constant. */ -static Reg ra_allock(ASMState *as, int32_t k, RegSet allow) -{ - /* First try to find a register which already holds the same constant. */ - RegSet pick, work = ~as->freeset & RSET_GPR; - Reg r; - while (work) { - IRRef ref; - r = rset_pickbot(work); - ref = regcost_ref(as->cost[r]); - if (ref < ASMREF_L && - k == (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i)) - return r; - rset_clear(work, r); - } - pick = as->freeset & allow; - if (pick) { - /* Constants should preferably get unmodified registers. */ - if ((pick & ~as->modset)) - pick &= ~as->modset; - r = rset_pickbot(pick); /* Reduce conflicts with inverse allocation. */ - } else { - r = ra_evict(as, allow); - } - RA_DBGX((as, "allock $x $r", k, r)); - ra_setkref(as, r, k); - rset_clear(as->freeset, r); - ra_noweak(as, r); - return r; -} - -/* Allocate a specific register for a constant. */ -static void ra_allockreg(ASMState *as, int32_t k, Reg r) -{ - Reg kr = ra_allock(as, k, RID2RSET(r)); - if (kr != r) { - IRIns irdummy; - irdummy.t.irt = IRT_INT; - ra_scratch(as, RID2RSET(r)); - emit_movrr(as, &irdummy, r, kr); - } -} -#else -#define ra_allockreg(as, k, r) emit_loadi(as, (r), (k)) -#endif - -/* Allocate a register for ref from the allowed set of registers. -** Note: this function assumes the ref does NOT have a register yet! -** Picks an optimal register, sets the cost and marks the register as non-free. -*/ -static Reg ra_allocref(ASMState *as, IRRef ref, RegSet allow) -{ - IRIns *ir = IR(ref); - RegSet pick = as->freeset & allow; - Reg r; - lua_assert(ra_noreg(ir->r)); - if (pick) { - /* First check register hint from propagation or PHI. */ - if (ra_hashint(ir->r)) { - r = ra_gethint(ir->r); - if (rset_test(pick, r)) /* Use hint register if possible. */ - goto found; - /* Rematerialization is cheaper than missing a hint. */ - if (rset_test(allow, r) && emit_canremat(regcost_ref(as->cost[r]))) { - ra_rematk(as, regcost_ref(as->cost[r])); - goto found; - } - RA_DBGX((as, "hintmiss $f $r", ref, r)); - } - /* Invariants should preferably get unmodified registers. */ - if (ref < as->loopref && !irt_isphi(ir->t)) { - if ((pick & ~as->modset)) - pick &= ~as->modset; - r = rset_pickbot(pick); /* Reduce conflicts with inverse allocation. */ - } else { - /* We've got plenty of regs, so get callee-save regs if possible. */ - if (RID_NUM_GPR > 8 && (pick & ~RSET_SCRATCH)) - pick &= ~RSET_SCRATCH; - r = rset_picktop(pick); - } - } else { - r = ra_evict(as, allow); - } -found: - RA_DBGX((as, "alloc $f $r", ref, r)); - ir->r = (uint8_t)r; - rset_clear(as->freeset, r); - ra_noweak(as, r); - as->cost[r] = REGCOST_REF_T(ref, irt_t(ir->t)); - return r; -} - -/* Allocate a register on-demand. */ -static Reg ra_alloc1(ASMState *as, IRRef ref, RegSet allow) -{ - Reg r = IR(ref)->r; - /* Note: allow is ignored if the register is already allocated. */ - if (ra_noreg(r)) r = ra_allocref(as, ref, allow); - ra_noweak(as, r); - return r; -} - -/* Rename register allocation and emit move. */ -static void ra_rename(ASMState *as, Reg down, Reg up) -{ - IRRef ren, ref = regcost_ref(as->cost[up] = as->cost[down]); - IRIns *ir = IR(ref); - ir->r = (uint8_t)up; - as->cost[down] = 0; - lua_assert((down < RID_MAX_GPR) == (up < RID_MAX_GPR)); - lua_assert(!rset_test(as->freeset, down) && rset_test(as->freeset, up)); - ra_free(as, down); /* 'down' is free ... */ - ra_modified(as, down); - rset_clear(as->freeset, up); /* ... and 'up' is now allocated. */ - ra_noweak(as, up); - RA_DBGX((as, "rename $f $r $r", regcost_ref(as->cost[up]), down, up)); - emit_movrr(as, ir, down, up); /* Backwards codegen needs inverse move. */ - if (!ra_hasspill(IR(ref)->s)) { /* Add the rename to the IR. */ - lj_ir_set(as->J, IRT(IR_RENAME, IRT_NIL), ref, as->snapno); - ren = tref_ref(lj_ir_emit(as->J)); - as->ir = as->T->ir; /* The IR may have been reallocated. */ - IR(ren)->r = (uint8_t)down; - IR(ren)->s = SPS_NONE; - } -} - -/* Pick a destination register (marked as free). -** Caveat: allow is ignored if there's already a destination register. -** Use ra_destreg() to get a specific register. -*/ -static Reg ra_dest(ASMState *as, IRIns *ir, RegSet allow) -{ - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - } else { - if (ra_hashint(dest) && rset_test((as->freeset&allow), ra_gethint(dest))) { - dest = ra_gethint(dest); - ra_modified(as, dest); - RA_DBGX((as, "dest $r", dest)); - } else { - dest = ra_scratch(as, allow); - } - ir->r = dest; - } - if (LJ_UNLIKELY(ra_hasspill(ir->s))) ra_save(as, ir, dest); - return dest; -} - -/* Force a specific destination register (marked as free). */ -static void ra_destreg(ASMState *as, IRIns *ir, Reg r) -{ - Reg dest = ra_dest(as, ir, RID2RSET(r)); - if (dest != r) { - lua_assert(rset_test(as->freeset, r)); - ra_modified(as, r); - emit_movrr(as, ir, dest, r); - } -} - -#if LJ_TARGET_X86ORX64 -/* Propagate dest register to left reference. Emit moves as needed. -** This is a required fixup step for all 2-operand machine instructions. -*/ -static void ra_left(ASMState *as, Reg dest, IRRef lref) -{ - IRIns *ir = IR(lref); - Reg left = ir->r; - if (ra_noreg(left)) { - if (irref_isk(lref)) { - if (ir->o == IR_KNUM) { - cTValue *tv = ir_knum(ir); - /* FP remat needs a load except for +0. Still better than eviction. */ - if (tvispzero(tv) || !(as->freeset & RSET_FPR)) { - emit_loadn(as, dest, tv); - return; - } -#if LJ_64 - } else if (ir->o == IR_KINT64) { - emit_loadu64(as, dest, ir_kint64(ir)->u64); - return; -#endif - } else { - lua_assert(ir->o == IR_KINT || ir->o == IR_KGC || - ir->o == IR_KPTR || ir->o == IR_KKPTR || ir->o == IR_KNULL); - emit_loadi(as, dest, ir->i); - return; - } - } - if (!ra_hashint(left) && !iscrossref(as, lref)) - ra_sethint(ir->r, dest); /* Propagate register hint. */ - left = ra_allocref(as, lref, dest < RID_MAX_GPR ? RSET_GPR : RSET_FPR); - } - ra_noweak(as, left); - /* Move needed for true 3-operand instruction: y=a+b ==> y=a; y+=b. */ - if (dest != left) { - /* Use register renaming if dest is the PHI reg. */ - if (irt_isphi(ir->t) && as->phireg[dest] == lref) { - ra_modified(as, left); - ra_rename(as, left, dest); - } else { - emit_movrr(as, ir, dest, left); - } - } -} -#else -/* Similar to ra_left, except we override any hints. */ -static void ra_leftov(ASMState *as, Reg dest, IRRef lref) -{ - IRIns *ir = IR(lref); - Reg left = ir->r; - if (ra_noreg(left)) { - ra_sethint(ir->r, dest); /* Propagate register hint. */ - left = ra_allocref(as, lref, - (LJ_SOFTFP || dest < RID_MAX_GPR) ? RSET_GPR : RSET_FPR); - } - ra_noweak(as, left); - if (dest != left) { - /* Use register renaming if dest is the PHI reg. */ - if (irt_isphi(ir->t) && as->phireg[dest] == lref) { - ra_modified(as, left); - ra_rename(as, left, dest); - } else { - emit_movrr(as, ir, dest, left); - } - } -} -#endif - -#if !LJ_64 -/* Force a RID_RETLO/RID_RETHI destination register pair (marked as free). */ -static void ra_destpair(ASMState *as, IRIns *ir) -{ - Reg destlo = ir->r, desthi = (ir+1)->r; - /* First spill unrelated refs blocking the destination registers. */ - if (!rset_test(as->freeset, RID_RETLO) && - destlo != RID_RETLO && desthi != RID_RETLO) - ra_restore(as, regcost_ref(as->cost[RID_RETLO])); - if (!rset_test(as->freeset, RID_RETHI) && - destlo != RID_RETHI && desthi != RID_RETHI) - ra_restore(as, regcost_ref(as->cost[RID_RETHI])); - /* Next free the destination registers (if any). */ - if (ra_hasreg(destlo)) { - ra_free(as, destlo); - ra_modified(as, destlo); - } else { - destlo = RID_RETLO; - } - if (ra_hasreg(desthi)) { - ra_free(as, desthi); - ra_modified(as, desthi); - } else { - desthi = RID_RETHI; - } - /* Check for conflicts and shuffle the registers as needed. */ - if (destlo == RID_RETHI) { - if (desthi == RID_RETLO) { -#if LJ_TARGET_X86 - *--as->mcp = XI_XCHGa + RID_RETHI; -#else - emit_movrr(as, ir, RID_RETHI, RID_TMP); - emit_movrr(as, ir, RID_RETLO, RID_RETHI); - emit_movrr(as, ir, RID_TMP, RID_RETLO); -#endif - } else { - emit_movrr(as, ir, RID_RETHI, RID_RETLO); - if (desthi != RID_RETHI) emit_movrr(as, ir, desthi, RID_RETHI); - } - } else if (desthi == RID_RETLO) { - emit_movrr(as, ir, RID_RETLO, RID_RETHI); - if (destlo != RID_RETLO) emit_movrr(as, ir, destlo, RID_RETLO); - } else { - if (desthi != RID_RETHI) emit_movrr(as, ir, desthi, RID_RETHI); - if (destlo != RID_RETLO) emit_movrr(as, ir, destlo, RID_RETLO); - } - /* Restore spill slots (if any). */ - if (ra_hasspill((ir+1)->s)) ra_save(as, ir+1, RID_RETHI); - if (ra_hasspill(ir->s)) ra_save(as, ir, RID_RETLO); -} -#endif - -/* -- Snapshot handling --------- ----------------------------------------- */ - -/* Can we rematerialize a KNUM instead of forcing a spill? */ -static int asm_snap_canremat(ASMState *as) -{ - Reg r; - for (r = RID_MIN_FPR; r < RID_MAX_FPR; r++) - if (irref_isk(regcost_ref(as->cost[r]))) - return 1; - return 0; -} - -/* Check whether a sunk store corresponds to an allocation. */ -static int asm_sunk_store(ASMState *as, IRIns *ira, IRIns *irs) -{ - if (irs->s == 255) { - if (irs->o == IR_ASTORE || irs->o == IR_HSTORE || - irs->o == IR_FSTORE || irs->o == IR_XSTORE) { - IRIns *irk = IR(irs->op1); - if (irk->o == IR_AREF || irk->o == IR_HREFK) - irk = IR(irk->op1); - return (IR(irk->op1) == ira); - } - return 0; - } else { - return (ira + irs->s == irs); /* Quick check. */ - } -} - -/* Allocate register or spill slot for a ref that escapes to a snapshot. */ -static void asm_snap_alloc1(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - if (!irref_isk(ref) && (!(ra_used(ir) || ir->r == RID_SUNK))) { - if (ir->r == RID_SINK) { - ir->r = RID_SUNK; -#if LJ_HASFFI - if (ir->o == IR_CNEWI) { /* Allocate CNEWI value. */ - asm_snap_alloc1(as, ir->op2); - if (LJ_32 && (ir+1)->o == IR_HIOP) - asm_snap_alloc1(as, (ir+1)->op2); - } else -#endif - { /* Allocate stored values for TNEW, TDUP and CNEW. */ - IRIns *irs; - lua_assert(ir->o == IR_TNEW || ir->o == IR_TDUP || ir->o == IR_CNEW); - for (irs = IR(as->snapref-1); irs > ir; irs--) - if (irs->r == RID_SINK && asm_sunk_store(as, ir, irs)) { - lua_assert(irs->o == IR_ASTORE || irs->o == IR_HSTORE || - irs->o == IR_FSTORE || irs->o == IR_XSTORE); - asm_snap_alloc1(as, irs->op2); - if (LJ_32 && (irs+1)->o == IR_HIOP) - asm_snap_alloc1(as, (irs+1)->op2); - } - } - } else { - RegSet allow; - if (ir->o == IR_CONV && ir->op2 == IRCONV_NUM_INT) { - IRIns *irc; - for (irc = IR(as->curins); irc > ir; irc--) - if ((irc->op1 == ref || irc->op2 == ref) && - !(irc->r == RID_SINK || irc->r == RID_SUNK)) - goto nosink; /* Don't sink conversion if result is used. */ - asm_snap_alloc1(as, ir->op1); - return; - } - nosink: - allow = (!LJ_SOFTFP && irt_isfp(ir->t)) ? RSET_FPR : RSET_GPR; - if ((as->freeset & allow) || - (allow == RSET_FPR && asm_snap_canremat(as))) { - /* Get a weak register if we have a free one or can rematerialize. */ - Reg r = ra_allocref(as, ref, allow); /* Allocate a register. */ - if (!irt_isphi(ir->t)) - ra_weak(as, r); /* But mark it as weakly referenced. */ - checkmclim(as); - RA_DBGX((as, "snapreg $f $r", ref, ir->r)); - } else { - ra_spill(as, ir); /* Otherwise force a spill slot. */ - RA_DBGX((as, "snapspill $f $s", ref, ir->s)); - } - } - } -} - -/* Allocate refs escaping to a snapshot. */ -static void asm_snap_alloc(ASMState *as) -{ - SnapShot *snap = &as->T->snap[as->snapno]; - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - IRRef ref = snap_ref(sn); - if (!irref_isk(ref)) { - asm_snap_alloc1(as, ref); - if (LJ_SOFTFP && (sn & SNAP_SOFTFPNUM)) { - lua_assert(irt_type(IR(ref+1)->t) == IRT_SOFTFP); - asm_snap_alloc1(as, ref+1); - } - } - } -} - -/* All guards for a snapshot use the same exitno. This is currently the -** same as the snapshot number. Since the exact origin of the exit cannot -** be determined, all guards for the same snapshot must exit with the same -** RegSP mapping. -** A renamed ref which has been used in a prior guard for the same snapshot -** would cause an inconsistency. The easy way out is to force a spill slot. -*/ -static int asm_snap_checkrename(ASMState *as, IRRef ren) -{ - SnapShot *snap = &as->T->snap[as->snapno]; - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - IRRef ref = snap_ref(sn); - if (ref == ren || (LJ_SOFTFP && (sn & SNAP_SOFTFPNUM) && ++ref == ren)) { - IRIns *ir = IR(ref); - ra_spill(as, ir); /* Register renamed, so force a spill slot. */ - RA_DBGX((as, "snaprensp $f $s", ref, ir->s)); - return 1; /* Found. */ - } - } - return 0; /* Not found. */ -} - -/* Prepare snapshot for next guard instruction. */ -static void asm_snap_prep(ASMState *as) -{ - if (as->curins < as->snapref) { - do { - if (as->snapno == 0) return; /* Called by sunk stores before snap #0. */ - as->snapno--; - as->snapref = as->T->snap[as->snapno].ref; - } while (as->curins < as->snapref); - asm_snap_alloc(as); - as->snaprename = as->T->nins; - } else { - /* Process any renames above the highwater mark. */ - for (; as->snaprename < as->T->nins; as->snaprename++) { - IRIns *ir = IR(as->snaprename); - if (asm_snap_checkrename(as, ir->op1)) - ir->op2 = REF_BIAS-1; /* Kill rename. */ - } - } -} - -/* -- Miscellaneous helpers ----------------------------------------------- */ - -/* Collect arguments from CALL* and CARG instructions. */ -static void asm_collectargs(ASMState *as, IRIns *ir, - const CCallInfo *ci, IRRef *args) -{ - uint32_t n = CCI_NARGS(ci); - lua_assert(n <= CCI_NARGS_MAX*2); /* Account for split args. */ - if ((ci->flags & CCI_L)) { *args++ = ASMREF_L; n--; } - while (n-- > 1) { - ir = IR(ir->op1); - lua_assert(ir->o == IR_CARG); - args[n] = ir->op2 == REF_NIL ? 0 : ir->op2; - } - args[0] = ir->op1 == REF_NIL ? 0 : ir->op1; - lua_assert(IR(ir->op1)->o != IR_CARG); -} - -/* Reconstruct CCallInfo flags for CALLX*. */ -static uint32_t asm_callx_flags(ASMState *as, IRIns *ir) -{ - uint32_t nargs = 0; - if (ir->op1 != REF_NIL) { /* Count number of arguments first. */ - IRIns *ira = IR(ir->op1); - nargs++; - while (ira->o == IR_CARG) { nargs++; ira = IR(ira->op1); } - } -#if LJ_HASFFI - if (IR(ir->op2)->o == IR_CARG) { /* Copy calling convention info. */ - CTypeID id = (CTypeID)IR(IR(ir->op2)->op2)->i; - CType *ct = ctype_get(ctype_ctsG(J2G(as->J)), id); - nargs |= ((ct->info & CTF_VARARG) ? CCI_VARARG : 0); -#if LJ_TARGET_X86 - nargs |= (ctype_cconv(ct->info) << CCI_CC_SHIFT); -#endif - } -#endif - return (nargs | (ir->t.irt << CCI_OTSHIFT)); -} - -/* Calculate stack adjustment. */ -static int32_t asm_stack_adjust(ASMState *as) -{ - if (as->evenspill <= SPS_FIXED) - return 0; - return sps_scale(sps_align(as->evenspill)); -} - -/* Must match with hash*() in lj_tab.c. */ -static uint32_t ir_khash(IRIns *ir) -{ - uint32_t lo, hi; - if (irt_isstr(ir->t)) { - return ir_kstr(ir)->hash; - } else if (irt_isnum(ir->t)) { - lo = ir_knum(ir)->u32.lo; - hi = ir_knum(ir)->u32.hi << 1; - } else if (irt_ispri(ir->t)) { - lua_assert(!irt_isnil(ir->t)); - return irt_type(ir->t)-IRT_FALSE; - } else { - lua_assert(irt_isgcv(ir->t)); - lo = u32ptr(ir_kgc(ir)); - hi = lo + HASH_BIAS; - } - return hashrot(lo, hi); -} - -/* -- Allocations --------------------------------------------------------- */ - -static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args); -static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci); - -static void asm_snew(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_new]; - IRRef args[3]; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ir->op1; /* const char *str */ - args[2] = ir->op2; /* size_t len */ - as->gcsteps++; - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); -} - -static void asm_tnew(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_tab_new1]; - IRRef args[2]; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ASMREF_TMP1; /* uint32_t ahsize */ - as->gcsteps++; - asm_setupresult(as, ir, ci); /* GCtab * */ - asm_gencall(as, ci, args); - ra_allockreg(as, ir->op1 | (ir->op2 << 24), ra_releasetmp(as, ASMREF_TMP1)); -} - -static void asm_tdup(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_tab_dup]; - IRRef args[2]; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ir->op1; /* const GCtab *kt */ - as->gcsteps++; - asm_setupresult(as, ir, ci); /* GCtab * */ - asm_gencall(as, ci, args); -} - -static void asm_gc_check(ASMState *as); - -/* Explicit GC step. */ -static void asm_gcstep(ASMState *as, IRIns *ir) -{ - IRIns *ira; - for (ira = IR(as->stopins+1); ira < ir; ira++) - if ((ira->o == IR_TNEW || ira->o == IR_TDUP || - (LJ_HASFFI && (ira->o == IR_CNEW || ira->o == IR_CNEWI))) && - ra_used(ira)) - as->gcsteps++; - if (as->gcsteps) - asm_gc_check(as); - as->gcsteps = 0x80000000; /* Prevent implicit GC check further up. */ -} - -/* -- PHI and loop handling ----------------------------------------------- */ - -/* Break a PHI cycle by renaming to a free register (evict if needed). */ -static void asm_phi_break(ASMState *as, RegSet blocked, RegSet blockedby, - RegSet allow) -{ - RegSet candidates = blocked & allow; - if (candidates) { /* If this register file has candidates. */ - /* Note: the set for ra_pick cannot be empty, since each register file - ** has some registers never allocated to PHIs. - */ - Reg down, up = ra_pick(as, ~blocked & allow); /* Get a free register. */ - if (candidates & ~blockedby) /* Optimize shifts, else it's a cycle. */ - candidates = candidates & ~blockedby; - down = rset_picktop(candidates); /* Pick candidate PHI register. */ - ra_rename(as, down, up); /* And rename it to the free register. */ - } -} - -/* PHI register shuffling. -** -** The allocator tries hard to preserve PHI register assignments across -** the loop body. Most of the time this loop does nothing, since there -** are no register mismatches. -** -** If a register mismatch is detected and ... -** - the register is currently free: rename it. -** - the register is blocked by an invariant: restore/remat and rename it. -** - Otherwise the register is used by another PHI, so mark it as blocked. -** -** The renames are order-sensitive, so just retry the loop if a register -** is marked as blocked, but has been freed in the meantime. A cycle is -** detected if all of the blocked registers are allocated. To break the -** cycle rename one of them to a free register and retry. -** -** Note that PHI spill slots are kept in sync and don't need to be shuffled. -*/ -static void asm_phi_shuffle(ASMState *as) -{ - RegSet work; - - /* Find and resolve PHI register mismatches. */ - for (;;) { - RegSet blocked = RSET_EMPTY; - RegSet blockedby = RSET_EMPTY; - RegSet phiset = as->phiset; - while (phiset) { /* Check all left PHI operand registers. */ - Reg r = rset_pickbot(phiset); - IRIns *irl = IR(as->phireg[r]); - Reg left = irl->r; - if (r != left) { /* Mismatch? */ - if (!rset_test(as->freeset, r)) { /* PHI register blocked? */ - IRRef ref = regcost_ref(as->cost[r]); - /* Blocked by other PHI (w/reg)? */ - if (!ra_iskref(ref) && irt_ismarked(IR(ref)->t)) { - rset_set(blocked, r); - if (ra_hasreg(left)) - rset_set(blockedby, left); - left = RID_NONE; - } else { /* Otherwise grab register from invariant. */ - ra_restore(as, ref); - checkmclim(as); - } - } - if (ra_hasreg(left)) { - ra_rename(as, left, r); - checkmclim(as); - } - } - rset_clear(phiset, r); - } - if (!blocked) break; /* Finished. */ - if (!(as->freeset & blocked)) { /* Break cycles if none are free. */ - asm_phi_break(as, blocked, blockedby, RSET_GPR); - if (!LJ_SOFTFP) asm_phi_break(as, blocked, blockedby, RSET_FPR); - checkmclim(as); - } /* Else retry some more renames. */ - } - - /* Restore/remat invariants whose registers are modified inside the loop. */ -#if !LJ_SOFTFP - work = as->modset & ~(as->freeset | as->phiset) & RSET_FPR; - while (work) { - Reg r = rset_pickbot(work); - ra_restore(as, regcost_ref(as->cost[r])); - rset_clear(work, r); - checkmclim(as); - } -#endif - work = as->modset & ~(as->freeset | as->phiset); - while (work) { - Reg r = rset_pickbot(work); - ra_restore(as, regcost_ref(as->cost[r])); - rset_clear(work, r); - checkmclim(as); - } - - /* Allocate and save all unsaved PHI regs and clear marks. */ - work = as->phiset; - while (work) { - Reg r = rset_picktop(work); - IRRef lref = as->phireg[r]; - IRIns *ir = IR(lref); - if (ra_hasspill(ir->s)) { /* Left PHI gained a spill slot? */ - irt_clearmark(ir->t); /* Handled here, so clear marker now. */ - ra_alloc1(as, lref, RID2RSET(r)); - ra_save(as, ir, r); /* Save to spill slot inside the loop. */ - checkmclim(as); - } - rset_clear(work, r); - } -} - -/* Copy unsynced left/right PHI spill slots. Rarely needed. */ -static void asm_phi_copyspill(ASMState *as) -{ - int need = 0; - IRIns *ir; - for (ir = IR(as->orignins-1); ir->o == IR_PHI; ir--) - if (ra_hasspill(ir->s) && ra_hasspill(IR(ir->op1)->s)) - need |= irt_isfp(ir->t) ? 2 : 1; /* Unsynced spill slot? */ - if ((need & 1)) { /* Copy integer spill slots. */ -#if !LJ_TARGET_X86ORX64 - Reg r = RID_TMP; -#else - Reg r = RID_RET; - if ((as->freeset & RSET_GPR)) - r = rset_pickbot((as->freeset & RSET_GPR)); - else - emit_spload(as, IR(regcost_ref(as->cost[r])), r, SPOFS_TMP); -#endif - for (ir = IR(as->orignins-1); ir->o == IR_PHI; ir--) { - if (ra_hasspill(ir->s)) { - IRIns *irl = IR(ir->op1); - if (ra_hasspill(irl->s) && !irt_isfp(ir->t)) { - emit_spstore(as, irl, r, sps_scale(irl->s)); - emit_spload(as, ir, r, sps_scale(ir->s)); - checkmclim(as); - } - } - } -#if LJ_TARGET_X86ORX64 - if (!rset_test(as->freeset, r)) - emit_spstore(as, IR(regcost_ref(as->cost[r])), r, SPOFS_TMP); -#endif - } -#if !LJ_SOFTFP - if ((need & 2)) { /* Copy FP spill slots. */ -#if LJ_TARGET_X86 - Reg r = RID_XMM0; -#else - Reg r = RID_FPRET; -#endif - if ((as->freeset & RSET_FPR)) - r = rset_pickbot((as->freeset & RSET_FPR)); - if (!rset_test(as->freeset, r)) - emit_spload(as, IR(regcost_ref(as->cost[r])), r, SPOFS_TMP); - for (ir = IR(as->orignins-1); ir->o == IR_PHI; ir--) { - if (ra_hasspill(ir->s)) { - IRIns *irl = IR(ir->op1); - if (ra_hasspill(irl->s) && irt_isfp(ir->t)) { - emit_spstore(as, irl, r, sps_scale(irl->s)); - emit_spload(as, ir, r, sps_scale(ir->s)); - checkmclim(as); - } - } - } - if (!rset_test(as->freeset, r)) - emit_spstore(as, IR(regcost_ref(as->cost[r])), r, SPOFS_TMP); - } -#endif -} - -/* Emit renames for left PHIs which are only spilled outside the loop. */ -static void asm_phi_fixup(ASMState *as) -{ - RegSet work = as->phiset; - while (work) { - Reg r = rset_picktop(work); - IRRef lref = as->phireg[r]; - IRIns *ir = IR(lref); - if (irt_ismarked(ir->t)) { - irt_clearmark(ir->t); - /* Left PHI gained a spill slot before the loop? */ - if (ra_hasspill(ir->s)) { - IRRef ren; - lj_ir_set(as->J, IRT(IR_RENAME, IRT_NIL), lref, as->loopsnapno); - ren = tref_ref(lj_ir_emit(as->J)); - as->ir = as->T->ir; /* The IR may have been reallocated. */ - IR(ren)->r = (uint8_t)r; - IR(ren)->s = SPS_NONE; - } - } - rset_clear(work, r); - } -} - -/* Setup right PHI reference. */ -static void asm_phi(ASMState *as, IRIns *ir) -{ - RegSet allow = ((!LJ_SOFTFP && irt_isfp(ir->t)) ? RSET_FPR : RSET_GPR) & - ~as->phiset; - RegSet afree = (as->freeset & allow); - IRIns *irl = IR(ir->op1); - IRIns *irr = IR(ir->op2); - if (ir->r == RID_SINK) /* Sink PHI. */ - return; - /* Spill slot shuffling is not implemented yet (but rarely needed). */ - if (ra_hasspill(irl->s) || ra_hasspill(irr->s)) - lj_trace_err(as->J, LJ_TRERR_NYIPHI); - /* Leave at least one register free for non-PHIs (and PHI cycle breaking). */ - if ((afree & (afree-1))) { /* Two or more free registers? */ - Reg r; - if (ra_noreg(irr->r)) { /* Get a register for the right PHI. */ - r = ra_allocref(as, ir->op2, allow); - } else { /* Duplicate right PHI, need a copy (rare). */ - r = ra_scratch(as, allow); - emit_movrr(as, irr, r, irr->r); - } - ir->r = (uint8_t)r; - rset_set(as->phiset, r); - as->phireg[r] = (IRRef1)ir->op1; - irt_setmark(irl->t); /* Marks left PHIs _with_ register. */ - if (ra_noreg(irl->r)) - ra_sethint(irl->r, r); /* Set register hint for left PHI. */ - } else { /* Otherwise allocate a spill slot. */ - /* This is overly restrictive, but it triggers only on synthetic code. */ - if (ra_hasreg(irl->r) || ra_hasreg(irr->r)) - lj_trace_err(as->J, LJ_TRERR_NYIPHI); - ra_spill(as, ir); - irr->s = ir->s; /* Set right PHI spill slot. Sync left slot later. */ - } -} - -static void asm_loop_fixup(ASMState *as); - -/* Middle part of a loop. */ -static void asm_loop(ASMState *as) -{ - MCode *mcspill; - /* LOOP is a guard, so the snapno is up to date. */ - as->loopsnapno = as->snapno; - if (as->gcsteps) - asm_gc_check(as); - /* LOOP marks the transition from the variant to the invariant part. */ - as->flagmcp = as->invmcp = NULL; - as->sectref = 0; - if (!neverfuse(as)) as->fuseref = 0; - asm_phi_shuffle(as); - mcspill = as->mcp; - asm_phi_copyspill(as); - asm_loop_fixup(as); - as->mcloop = as->mcp; - RA_DBGX((as, "===== LOOP =====")); - if (!as->realign) RA_DBG_FLUSH(); - if (as->mcp != mcspill) - emit_jmp(as, mcspill); -} - -/* -- Target-specific assembler ------------------------------------------- */ - -#if LJ_TARGET_X86ORX64 -#include "lj_asm_x86.h" -#elif LJ_TARGET_ARM -#include "lj_asm_arm.h" -#elif LJ_TARGET_PPC -#include "lj_asm_ppc.h" -#elif LJ_TARGET_MIPS -#include "lj_asm_mips.h" -#else -#error "Missing assembler for target CPU" -#endif - -/* -- Head of trace ------------------------------------------------------- */ - -/* Head of a root trace. */ -static void asm_head_root(ASMState *as) -{ - int32_t spadj; - asm_head_root_base(as); - emit_setvmstate(as, (int32_t)as->T->traceno); - spadj = asm_stack_adjust(as); - as->T->spadjust = (uint16_t)spadj; - emit_spsub(as, spadj); - /* Root traces assume a checked stack for the starting proto. */ - as->T->topslot = gcref(as->T->startpt)->pt.framesize; -} - -/* Head of a side trace. -** -** The current simplistic algorithm requires that all slots inherited -** from the parent are live in a register between pass 2 and pass 3. This -** avoids the complexity of stack slot shuffling. But of course this may -** overflow the register set in some cases and cause the dreaded error: -** "NYI: register coalescing too complex". A refined algorithm is needed. -*/ -static void asm_head_side(ASMState *as) -{ - IRRef1 sloadins[RID_MAX]; - RegSet allow = RSET_ALL; /* Inverse of all coalesced registers. */ - RegSet live = RSET_EMPTY; /* Live parent registers. */ - IRIns *irp = &as->parent->ir[REF_BASE]; /* Parent base. */ - int32_t spadj, spdelta; - int pass2 = 0; - int pass3 = 0; - IRRef i; - - if (as->snapno && as->topslot > as->parent->topslot) { - /* Force snap #0 alloc to prevent register overwrite in stack check. */ - as->snapno = 0; - asm_snap_alloc(as); - } - allow = asm_head_side_base(as, irp, allow); - - /* Scan all parent SLOADs and collect register dependencies. */ - for (i = as->stopins; i > REF_BASE; i--) { - IRIns *ir = IR(i); - RegSP rs; - lua_assert((ir->o == IR_SLOAD && (ir->op2 & IRSLOAD_PARENT)) || - (LJ_SOFTFP && ir->o == IR_HIOP) || ir->o == IR_PVAL); - rs = as->parentmap[i - REF_FIRST]; - if (ra_hasreg(ir->r)) { - rset_clear(allow, ir->r); - if (ra_hasspill(ir->s)) { - ra_save(as, ir, ir->r); - checkmclim(as); - } - } else if (ra_hasspill(ir->s)) { - irt_setmark(ir->t); - pass2 = 1; - } - if (ir->r == rs) { /* Coalesce matching registers right now. */ - ra_free(as, ir->r); - } else if (ra_hasspill(regsp_spill(rs))) { - if (ra_hasreg(ir->r)) - pass3 = 1; - } else if (ra_used(ir)) { - sloadins[rs] = (IRRef1)i; - rset_set(live, rs); /* Block live parent register. */ - } - } - - /* Calculate stack frame adjustment. */ - spadj = asm_stack_adjust(as); - spdelta = spadj - (int32_t)as->parent->spadjust; - if (spdelta < 0) { /* Don't shrink the stack frame. */ - spadj = (int32_t)as->parent->spadjust; - spdelta = 0; - } - as->T->spadjust = (uint16_t)spadj; - - /* Reload spilled target registers. */ - if (pass2) { - for (i = as->stopins; i > REF_BASE; i--) { - IRIns *ir = IR(i); - if (irt_ismarked(ir->t)) { - RegSet mask; - Reg r; - RegSP rs; - irt_clearmark(ir->t); - rs = as->parentmap[i - REF_FIRST]; - if (!ra_hasspill(regsp_spill(rs))) - ra_sethint(ir->r, rs); /* Hint may be gone, set it again. */ - else if (sps_scale(regsp_spill(rs))+spdelta == sps_scale(ir->s)) - continue; /* Same spill slot, do nothing. */ - mask = ((!LJ_SOFTFP && irt_isfp(ir->t)) ? RSET_FPR : RSET_GPR) & allow; - if (mask == RSET_EMPTY) - lj_trace_err(as->J, LJ_TRERR_NYICOAL); - r = ra_allocref(as, i, mask); - ra_save(as, ir, r); - rset_clear(allow, r); - if (r == rs) { /* Coalesce matching registers right now. */ - ra_free(as, r); - rset_clear(live, r); - } else if (ra_hasspill(regsp_spill(rs))) { - pass3 = 1; - } - checkmclim(as); - } - } - } - - /* Store trace number and adjust stack frame relative to the parent. */ - emit_setvmstate(as, (int32_t)as->T->traceno); - emit_spsub(as, spdelta); - -#if !LJ_TARGET_X86ORX64 - /* Restore BASE register from parent spill slot. */ - if (ra_hasspill(irp->s)) - emit_spload(as, IR(REF_BASE), IR(REF_BASE)->r, sps_scale(irp->s)); -#endif - - /* Restore target registers from parent spill slots. */ - if (pass3) { - RegSet work = ~as->freeset & RSET_ALL; - while (work) { - Reg r = rset_pickbot(work); - IRRef ref = regcost_ref(as->cost[r]); - RegSP rs = as->parentmap[ref - REF_FIRST]; - rset_clear(work, r); - if (ra_hasspill(regsp_spill(rs))) { - int32_t ofs = sps_scale(regsp_spill(rs)); - ra_free(as, r); - emit_spload(as, IR(ref), r, ofs); - checkmclim(as); - } - } - } - - /* Shuffle registers to match up target regs with parent regs. */ - for (;;) { - RegSet work; - - /* Repeatedly coalesce free live registers by moving to their target. */ - while ((work = as->freeset & live) != RSET_EMPTY) { - Reg rp = rset_pickbot(work); - IRIns *ir = IR(sloadins[rp]); - rset_clear(live, rp); - rset_clear(allow, rp); - ra_free(as, ir->r); - emit_movrr(as, ir, ir->r, rp); - checkmclim(as); - } - - /* We're done if no live registers remain. */ - if (live == RSET_EMPTY) - break; - - /* Break cycles by renaming one target to a temp. register. */ - if (live & RSET_GPR) { - RegSet tmpset = as->freeset & ~live & allow & RSET_GPR; - if (tmpset == RSET_EMPTY) - lj_trace_err(as->J, LJ_TRERR_NYICOAL); - ra_rename(as, rset_pickbot(live & RSET_GPR), rset_pickbot(tmpset)); - } - if (!LJ_SOFTFP && (live & RSET_FPR)) { - RegSet tmpset = as->freeset & ~live & allow & RSET_FPR; - if (tmpset == RSET_EMPTY) - lj_trace_err(as->J, LJ_TRERR_NYICOAL); - ra_rename(as, rset_pickbot(live & RSET_FPR), rset_pickbot(tmpset)); - } - checkmclim(as); - /* Continue with coalescing to fix up the broken cycle(s). */ - } - - /* Inherit top stack slot already checked by parent trace. */ - as->T->topslot = as->parent->topslot; - if (as->topslot > as->T->topslot) { /* Need to check for higher slot? */ -#ifdef EXITSTATE_CHECKEXIT - /* Highest exit + 1 indicates stack check. */ - ExitNo exitno = as->T->nsnap; -#else - /* Reuse the parent exit in the context of the parent trace. */ - ExitNo exitno = as->J->exitno; -#endif - as->T->topslot = (uint8_t)as->topslot; /* Remember for child traces. */ - asm_stack_check(as, as->topslot, irp, allow & RSET_GPR, exitno); - } -} - -/* -- Tail of trace ------------------------------------------------------- */ - -/* Get base slot for a snapshot. */ -static BCReg asm_baseslot(ASMState *as, SnapShot *snap, int *gotframe) -{ - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - MSize n; - for (n = snap->nent; n > 0; n--) { - SnapEntry sn = map[n-1]; - if ((sn & SNAP_FRAME)) { - *gotframe = 1; - return snap_slot(sn); - } - } - return 0; -} - -/* Link to another trace. */ -static void asm_tail_link(ASMState *as) -{ - SnapNo snapno = as->T->nsnap-1; /* Last snapshot. */ - SnapShot *snap = &as->T->snap[snapno]; - int gotframe = 0; - BCReg baseslot = asm_baseslot(as, snap, &gotframe); - - as->topslot = snap->topslot; - checkmclim(as); - ra_allocref(as, REF_BASE, RID2RSET(RID_BASE)); - - if (as->T->link == 0) { - /* Setup fixed registers for exit to interpreter. */ - const BCIns *pc = snap_pc(as->T->snapmap[snap->mapofs + snap->nent]); - int32_t mres; - if (bc_op(*pc) == BC_JLOOP) { /* NYI: find a better way to do this. */ - BCIns *retpc = &traceref(as->J, bc_d(*pc))->startins; - if (bc_isret(bc_op(*retpc))) - pc = retpc; - } - ra_allockreg(as, i32ptr(J2GG(as->J)->dispatch), RID_DISPATCH); - ra_allockreg(as, i32ptr(pc), RID_LPC); - mres = (int32_t)(snap->nslots - baseslot); - switch (bc_op(*pc)) { - case BC_CALLM: case BC_CALLMT: - mres -= (int32_t)(1 + bc_a(*pc) + bc_c(*pc)); break; - case BC_RETM: mres -= (int32_t)(bc_a(*pc) + bc_d(*pc)); break; - case BC_TSETM: mres -= (int32_t)bc_a(*pc); break; - default: if (bc_op(*pc) < BC_FUNCF) mres = 0; break; - } - ra_allockreg(as, mres, RID_RET); /* Return MULTRES or 0. */ - } else if (baseslot) { - /* Save modified BASE for linking to trace with higher start frame. */ - emit_setgl(as, RID_BASE, jit_base); - } - emit_addptr(as, RID_BASE, 8*(int32_t)baseslot); - - /* Sync the interpreter state with the on-trace state. */ - asm_stack_restore(as, snap); - - /* Root traces that add frames need to check the stack at the end. */ - if (!as->parent && gotframe) - asm_stack_check(as, as->topslot, NULL, as->freeset & RSET_GPR, snapno); -} - -/* -- Trace setup --------------------------------------------------------- */ - -/* Clear reg/sp for all instructions and add register hints. */ -static void asm_setup_regsp(ASMState *as) -{ - GCtrace *T = as->T; - int sink = T->sinktags; - IRRef nins = T->nins; - IRIns *ir, *lastir; - int inloop; -#if LJ_TARGET_ARM - uint32_t rload = 0xa6402a64; -#endif - - ra_setup(as); - - /* Clear reg/sp for constants. */ - for (ir = IR(T->nk), lastir = IR(REF_BASE); ir < lastir; ir++) - ir->prev = REGSP_INIT; - - /* REF_BASE is used for implicit references to the BASE register. */ - lastir->prev = REGSP_HINT(RID_BASE); - - ir = IR(nins-1); - if (ir->o == IR_RENAME) { - do { ir--; nins--; } while (ir->o == IR_RENAME); - T->nins = nins; /* Remove any renames left over from ASM restart. */ - } - as->snaprename = nins; - as->snapref = nins; - as->snapno = T->nsnap; - - as->stopins = REF_BASE; - as->orignins = nins; - as->curins = nins; - - /* Setup register hints for parent link instructions. */ - ir = IR(REF_FIRST); - if (as->parent) { - uint16_t *p; - lastir = lj_snap_regspmap(as->parent, as->J->exitno, ir); - if (lastir - ir > LJ_MAX_JSLOTS) - lj_trace_err(as->J, LJ_TRERR_NYICOAL); - as->stopins = (IRRef)((lastir-1) - as->ir); - for (p = as->parentmap; ir < lastir; ir++) { - RegSP rs = ir->prev; - *p++ = (uint16_t)rs; /* Copy original parent RegSP to parentmap. */ - if (!ra_hasspill(regsp_spill(rs))) - ir->prev = (uint16_t)REGSP_HINT(regsp_reg(rs)); - else - ir->prev = REGSP_INIT; - } - } - - inloop = 0; - as->evenspill = SPS_FIRST; - for (lastir = IR(nins); ir < lastir; ir++) { - if (sink) { - if (ir->r == RID_SINK) - continue; - if (ir->r == RID_SUNK) { /* Revert after ASM restart. */ - ir->r = RID_SINK; - continue; - } - } - switch (ir->o) { - case IR_LOOP: - inloop = 1; - break; -#if LJ_TARGET_ARM - case IR_SLOAD: - if (!((ir->op2 & IRSLOAD_TYPECHECK) || (ir+1)->o == IR_HIOP)) - break; - /* fallthrough */ - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - if (!LJ_SOFTFP && irt_isnum(ir->t)) break; - ir->prev = (uint16_t)REGSP_HINT((rload & 15)); - rload = lj_ror(rload, 4); - continue; -#endif - case IR_CALLXS: { - CCallInfo ci; - ci.flags = asm_callx_flags(as, ir); - ir->prev = asm_setup_call_slots(as, ir, &ci); - if (inloop) - as->modset |= RSET_SCRATCH; - continue; - } - case IR_CALLN: case IR_CALLL: case IR_CALLS: { - const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; - ir->prev = asm_setup_call_slots(as, ir, ci); - if (inloop) - as->modset |= (ci->flags & CCI_NOFPRCLOBBER) ? - (RSET_SCRATCH & ~RSET_FPR) : RSET_SCRATCH; - continue; - } -#if LJ_SOFTFP || (LJ_32 && LJ_HASFFI) - case IR_HIOP: - switch ((ir-1)->o) { -#if LJ_SOFTFP && LJ_TARGET_ARM - case IR_SLOAD: case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - if (ra_hashint((ir-1)->r)) { - ir->prev = (ir-1)->prev + 1; - continue; - } - break; -#endif -#if !LJ_SOFTFP && LJ_NEED_FP64 - case IR_CONV: - if (irt_isfp((ir-1)->t)) { - ir->prev = REGSP_HINT(RID_FPRET); - continue; - } - /* fallthrough */ -#endif - case IR_CALLN: case IR_CALLXS: -#if LJ_SOFTFP - case IR_MIN: case IR_MAX: -#endif - (ir-1)->prev = REGSP_HINT(RID_RETLO); - ir->prev = REGSP_HINT(RID_RETHI); - continue; - default: - break; - } - break; -#endif -#if LJ_SOFTFP - case IR_MIN: case IR_MAX: - if ((ir+1)->o != IR_HIOP) break; - /* fallthrough */ -#endif - /* C calls evict all scratch regs and return results in RID_RET. */ - case IR_SNEW: case IR_XSNEW: case IR_NEWREF: - if (REGARG_NUMGPR < 3 && as->evenspill < 3) - as->evenspill = 3; /* lj_str_new and lj_tab_newkey need 3 args. */ - case IR_TNEW: case IR_TDUP: case IR_CNEW: case IR_CNEWI: case IR_TOSTR: - ir->prev = REGSP_HINT(RID_RET); - if (inloop) - as->modset = RSET_SCRATCH; - continue; - case IR_STRTO: case IR_OBAR: - if (inloop) - as->modset = RSET_SCRATCH; - break; -#if !LJ_TARGET_X86ORX64 && !LJ_SOFTFP - case IR_ATAN2: case IR_LDEXP: -#endif - case IR_POW: - if (!LJ_SOFTFP && irt_isnum(ir->t)) { -#if LJ_TARGET_X86ORX64 - ir->prev = REGSP_HINT(RID_XMM0); - if (inloop) - as->modset |= RSET_RANGE(RID_XMM0, RID_XMM1+1)|RID2RSET(RID_EAX); -#else - ir->prev = REGSP_HINT(RID_FPRET); - if (inloop) - as->modset |= RSET_SCRATCH; -#endif - continue; - } - /* fallthrough for integer POW */ - case IR_DIV: case IR_MOD: - if (!irt_isnum(ir->t)) { - ir->prev = REGSP_HINT(RID_RET); - if (inloop) - as->modset |= (RSET_SCRATCH & RSET_GPR); - continue; - } - break; - case IR_FPMATH: -#if LJ_TARGET_X86ORX64 - if (ir->op2 == IRFPM_EXP2) { /* May be joined to lj_vm_pow_sse. */ - ir->prev = REGSP_HINT(RID_XMM0); -#if !LJ_64 - if (as->evenspill < 4) /* Leave room for 16 byte scratch area. */ - as->evenspill = 4; -#endif - if (inloop) - as->modset |= RSET_RANGE(RID_XMM0, RID_XMM2+1)|RID2RSET(RID_EAX); - continue; - } else if (ir->op2 <= IRFPM_TRUNC && !(as->flags & JIT_F_SSE4_1)) { - ir->prev = REGSP_HINT(RID_XMM0); - if (inloop) - as->modset |= RSET_RANGE(RID_XMM0, RID_XMM3+1)|RID2RSET(RID_EAX); - continue; - } - break; -#else - ir->prev = REGSP_HINT(RID_FPRET); - if (inloop) - as->modset |= RSET_SCRATCH; - continue; -#endif -#if LJ_TARGET_X86ORX64 - /* Non-constant shift counts need to be in RID_ECX on x86/x64. */ - case IR_BSHL: case IR_BSHR: case IR_BSAR: case IR_BROL: case IR_BROR: - if (!irref_isk(ir->op2) && !ra_hashint(IR(ir->op2)->r)) { - IR(ir->op2)->r = REGSP_HINT(RID_ECX); - if (inloop) - rset_set(as->modset, RID_ECX); - } - break; -#endif - /* Do not propagate hints across type conversions or loads. */ - case IR_TOBIT: - case IR_XLOAD: -#if !LJ_TARGET_ARM - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: -#endif - break; - case IR_CONV: - if (irt_isfp(ir->t) || (ir->op2 & IRCONV_SRCMASK) == IRT_NUM || - (ir->op2 & IRCONV_SRCMASK) == IRT_FLOAT) - break; - /* fallthrough */ - default: - /* Propagate hints across likely 'op reg, imm' or 'op reg'. */ - if (irref_isk(ir->op2) && !irref_isk(ir->op1) && - ra_hashint(regsp_reg(IR(ir->op1)->prev))) { - ir->prev = IR(ir->op1)->prev; - continue; - } - break; - } - ir->prev = REGSP_INIT; - } - if ((as->evenspill & 1)) - as->oddspill = as->evenspill++; - else - as->oddspill = 0; -} - -/* -- Assembler core ------------------------------------------------------ */ - -/* Assemble a trace. */ -void lj_asm_trace(jit_State *J, GCtrace *T) -{ - ASMState as_; - ASMState *as = &as_; - MCode *origtop; - - /* Ensure an initialized instruction beyond the last one for HIOP checks. */ - J->cur.nins = lj_ir_nextins(J); - J->cur.ir[J->cur.nins].o = IR_NOP; - - /* Setup initial state. Copy some fields to reduce indirections. */ - as->J = J; - as->T = T; - as->ir = T->ir; - as->flags = J->flags; - as->loopref = J->loopref; - as->realign = NULL; - as->loopinv = 0; - as->parent = J->parent ? traceref(J, J->parent) : NULL; - - /* Reserve MCode memory. */ - as->mctop = origtop = lj_mcode_reserve(J, &as->mcbot); - as->mcp = as->mctop; - as->mclim = as->mcbot + MCLIM_REDZONE; - asm_setup_target(as); - - do { - as->mcp = as->mctop; -#ifdef LUA_USE_ASSERT - as->mcp_prev = as->mcp; -#endif - as->curins = T->nins; - RA_DBG_START(); - RA_DBGX((as, "===== STOP =====")); - - /* General trace setup. Emit tail of trace. */ - asm_tail_prep(as); - as->mcloop = NULL; - as->flagmcp = NULL; - as->topslot = 0; - as->gcsteps = 0; - as->sectref = as->loopref; - as->fuseref = (as->flags & JIT_F_OPT_FUSE) ? as->loopref : FUSE_DISABLED; - asm_setup_regsp(as); - if (!as->loopref) - asm_tail_link(as); - - /* Assemble a trace in linear backwards order. */ - for (as->curins--; as->curins > as->stopins; as->curins--) { - IRIns *ir = IR(as->curins); - lua_assert(!(LJ_32 && irt_isint64(ir->t))); /* Handled by SPLIT. */ - if (!ra_used(ir) && !ir_sideeff(ir) && (as->flags & JIT_F_OPT_DCE)) - continue; /* Dead-code elimination can be soooo easy. */ - if (irt_isguard(ir->t)) - asm_snap_prep(as); - RA_DBG_REF(); - checkmclim(as); - asm_ir(as, ir); - } - } while (as->realign); /* Retry in case the MCode needs to be realigned. */ - - /* Emit head of trace. */ - RA_DBG_REF(); - checkmclim(as); - if (as->gcsteps > 0) { - as->curins = as->T->snap[0].ref; - asm_snap_prep(as); /* The GC check is a guard. */ - asm_gc_check(as); - } - ra_evictk(as); - if (as->parent) - asm_head_side(as); - else - asm_head_root(as); - asm_phi_fixup(as); - - RA_DBGX((as, "===== START ====")); - RA_DBG_FLUSH(); - if (as->freeset != RSET_ALL) - lj_trace_err(as->J, LJ_TRERR_BADRA); /* Ouch! Should never happen. */ - - /* Set trace entry point before fixing up tail to allow link to self. */ - T->mcode = as->mcp; - T->mcloop = as->mcloop ? (MSize)((char *)as->mcloop - (char *)as->mcp) : 0; - if (!as->loopref) - asm_tail_fixup(as, T->link); /* Note: this may change as->mctop! */ - T->szmcode = (MSize)((char *)as->mctop - (char *)as->mcp); - lj_mcode_sync(T->mcode, origtop); -} - -#undef IR - -#endif diff --git a/deps/luajit/src/lj_asm.h b/deps/luajit/src/lj_asm.h deleted file mode 100644 index 85f2976..0000000 --- a/deps/luajit/src/lj_asm.h +++ /dev/null @@ -1,17 +0,0 @@ -/* -** IR assembler (SSA IR -> machine code). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_ASM_H -#define _LJ_ASM_H - -#include "lj_jit.h" - -#if LJ_HASJIT -LJ_FUNC void lj_asm_trace(jit_State *J, GCtrace *T); -LJ_FUNC void lj_asm_patchexit(jit_State *J, GCtrace *T, ExitNo exitno, - MCode *target); -#endif - -#endif diff --git a/deps/luajit/src/lj_asm_arm.h b/deps/luajit/src/lj_asm_arm.h deleted file mode 100644 index 9e4cf43..0000000 --- a/deps/luajit/src/lj_asm_arm.h +++ /dev/null @@ -1,2361 +0,0 @@ -/* -** ARM IR assembler (SSA IR -> machine code). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Register allocator extensions --------------------------------------- */ - -/* Allocate a register with a hint. */ -static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow) -{ - Reg r = IR(ref)->r; - if (ra_noreg(r)) { - if (!ra_hashint(r) && !iscrossref(as, ref)) - ra_sethint(IR(ref)->r, hint); /* Propagate register hint. */ - r = ra_allocref(as, ref, allow); - } - ra_noweak(as, r); - return r; -} - -/* Allocate a scratch register pair. */ -static Reg ra_scratchpair(ASMState *as, RegSet allow) -{ - RegSet pick1 = as->freeset & allow; - RegSet pick2 = pick1 & (pick1 >> 1) & RSET_GPREVEN; - Reg r; - if (pick2) { - r = rset_picktop(pick2); - } else { - RegSet pick = pick1 & (allow >> 1) & RSET_GPREVEN; - if (pick) { - r = rset_picktop(pick); - ra_restore(as, regcost_ref(as->cost[r+1])); - } else { - pick = pick1 & (allow << 1) & RSET_GPRODD; - if (pick) { - r = ra_restore(as, regcost_ref(as->cost[rset_picktop(pick)-1])); - } else { - r = ra_evict(as, allow & (allow >> 1) & RSET_GPREVEN); - ra_restore(as, regcost_ref(as->cost[r+1])); - } - } - } - lua_assert(rset_test(RSET_GPREVEN, r)); - ra_modified(as, r); - ra_modified(as, r+1); - RA_DBGX((as, "scratchpair $r $r", r, r+1)); - return r; -} - -#if !LJ_SOFTFP -/* Allocate two source registers for three-operand instructions. */ -static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow) -{ - IRIns *irl = IR(ir->op1), *irr = IR(ir->op2); - Reg left = irl->r, right = irr->r; - if (ra_hasreg(left)) { - ra_noweak(as, left); - if (ra_noreg(right)) - right = ra_allocref(as, ir->op2, rset_exclude(allow, left)); - else - ra_noweak(as, right); - } else if (ra_hasreg(right)) { - ra_noweak(as, right); - left = ra_allocref(as, ir->op1, rset_exclude(allow, right)); - } else if (ra_hashint(right)) { - right = ra_allocref(as, ir->op2, allow); - left = ra_alloc1(as, ir->op1, rset_exclude(allow, right)); - } else { - left = ra_allocref(as, ir->op1, allow); - right = ra_alloc1(as, ir->op2, rset_exclude(allow, left)); - } - return left | (right << 8); -} -#endif - -/* -- Guard handling ------------------------------------------------------ */ - -/* Generate an exit stub group at the bottom of the reserved MCode memory. */ -static MCode *asm_exitstub_gen(ASMState *as, ExitNo group) -{ - MCode *mxp = as->mcbot; - int i; - if (mxp + 4*4+4*EXITSTUBS_PER_GROUP >= as->mctop) - asm_mclimit(as); - /* str lr, [sp]; bl ->vm_exit_handler; .long DISPATCH_address, group. */ - *mxp++ = ARMI_STR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_LR)|ARMF_N(RID_SP); - *mxp = ARMI_BL|((((MCode *)(void *)lj_vm_exit_handler-mxp)-2)&0x00ffffffu); - mxp++; - *mxp++ = (MCode)i32ptr(J2GG(as->J)->dispatch); /* DISPATCH address */ - *mxp++ = group*EXITSTUBS_PER_GROUP; - for (i = 0; i < EXITSTUBS_PER_GROUP; i++) - *mxp++ = ARMI_B|((-6-i)&0x00ffffffu); - lj_mcode_sync(as->mcbot, mxp); - lj_mcode_commitbot(as->J, mxp); - as->mcbot = mxp; - as->mclim = as->mcbot + MCLIM_REDZONE; - return mxp - EXITSTUBS_PER_GROUP; -} - -/* Setup all needed exit stubs. */ -static void asm_exitstub_setup(ASMState *as, ExitNo nexits) -{ - ExitNo i; - if (nexits >= EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) - lj_trace_err(as->J, LJ_TRERR_SNAPOV); - for (i = 0; i < (nexits+EXITSTUBS_PER_GROUP-1)/EXITSTUBS_PER_GROUP; i++) - if (as->J->exitstubgroup[i] == NULL) - as->J->exitstubgroup[i] = asm_exitstub_gen(as, i); -} - -/* Emit conditional branch to exit for guard. */ -static void asm_guardcc(ASMState *as, ARMCC cc) -{ - MCode *target = exitstub_addr(as->J, as->snapno); - MCode *p = as->mcp; - if (LJ_UNLIKELY(p == as->invmcp)) { - as->loopinv = 1; - *p = ARMI_BL | ((target-p-2) & 0x00ffffffu); - emit_branch(as, ARMF_CC(ARMI_B, cc^1), p+1); - return; - } - emit_branch(as, ARMF_CC(ARMI_BL, cc), target); -} - -/* -- Operand fusion ------------------------------------------------------ */ - -/* Limit linear search to this distance. Avoids O(n^2) behavior. */ -#define CONFLICT_SEARCH_LIM 31 - -/* Check if there's no conflicting instruction between curins and ref. */ -static int noconflict(ASMState *as, IRRef ref, IROp conflict) -{ - IRIns *ir = as->ir; - IRRef i = as->curins; - if (i > ref + CONFLICT_SEARCH_LIM) - return 0; /* Give up, ref is too far away. */ - while (--i > ref) - if (ir[i].o == conflict) - return 0; /* Conflict found. */ - return 1; /* Ok, no conflict. */ -} - -/* Fuse the array base of colocated arrays. */ -static int32_t asm_fuseabase(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - if (ir->o == IR_TNEW && ir->op1 <= LJ_MAX_COLOSIZE && - !neverfuse(as) && noconflict(as, ref, IR_NEWREF)) - return (int32_t)sizeof(GCtab); - return 0; -} - -/* Fuse array/hash/upvalue reference into register+offset operand. */ -static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow, - int lim) -{ - IRIns *ir = IR(ref); - if (ra_noreg(ir->r)) { - if (ir->o == IR_AREF) { - if (mayfuse(as, ref)) { - if (irref_isk(ir->op2)) { - IRRef tab = IR(ir->op1)->op1; - int32_t ofs = asm_fuseabase(as, tab); - IRRef refa = ofs ? tab : ir->op1; - ofs += 8*IR(ir->op2)->i; - if (ofs > -lim && ofs < lim) { - *ofsp = ofs; - return ra_alloc1(as, refa, allow); - } - } - } - } else if (ir->o == IR_HREFK) { - if (mayfuse(as, ref)) { - int32_t ofs = (int32_t)(IR(ir->op2)->op2 * sizeof(Node)); - if (ofs < lim) { - *ofsp = ofs; - return ra_alloc1(as, ir->op1, allow); - } - } - } else if (ir->o == IR_UREFC) { - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - int32_t ofs = i32ptr(&gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.tv); - *ofsp = (ofs & 255); /* Mask out less bits to allow LDRD. */ - return ra_allock(as, (ofs & ~255), allow); - } - } - } - *ofsp = 0; - return ra_alloc1(as, ref, allow); -} - -/* Fuse m operand into arithmetic/logic instructions. */ -static uint32_t asm_fuseopm(ASMState *as, ARMIns ai, IRRef ref, RegSet allow) -{ - IRIns *ir = IR(ref); - if (ra_hasreg(ir->r)) { - ra_noweak(as, ir->r); - return ARMF_M(ir->r); - } else if (irref_isk(ref)) { - uint32_t k = emit_isk12(ai, ir->i); - if (k) - return k; - } else if (mayfuse(as, ref)) { - if (ir->o >= IR_BSHL && ir->o <= IR_BROR) { - Reg m = ra_alloc1(as, ir->op1, allow); - ARMShift sh = ir->o == IR_BSHL ? ARMSH_LSL : - ir->o == IR_BSHR ? ARMSH_LSR : - ir->o == IR_BSAR ? ARMSH_ASR : ARMSH_ROR; - if (irref_isk(ir->op2)) { - return m | ARMF_SH(sh, (IR(ir->op2)->i & 31)); - } else { - Reg s = ra_alloc1(as, ir->op2, rset_exclude(allow, m)); - return m | ARMF_RSH(sh, s); - } - } else if (ir->o == IR_ADD && ir->op1 == ir->op2) { - Reg m = ra_alloc1(as, ir->op1, allow); - return m | ARMF_SH(ARMSH_LSL, 1); - } - } - return ra_allocref(as, ref, allow); -} - -/* Fuse shifts into loads/stores. Only bother with BSHL 2 => lsl #2. */ -static IRRef asm_fuselsl2(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - if (ra_noreg(ir->r) && mayfuse(as, ref) && ir->o == IR_BSHL && - irref_isk(ir->op2) && IR(ir->op2)->i == 2) - return ir->op1; - return 0; /* No fusion. */ -} - -/* Fuse XLOAD/XSTORE reference into load/store operand. */ -static void asm_fusexref(ASMState *as, ARMIns ai, Reg rd, IRRef ref, - RegSet allow, int32_t ofs) -{ - IRIns *ir = IR(ref); - Reg base; - if (ra_noreg(ir->r) && canfuse(as, ir)) { - int32_t lim = (!LJ_SOFTFP && (ai & 0x08000000)) ? 1024 : - (ai & 0x04000000) ? 4096 : 256; - if (ir->o == IR_ADD) { - int32_t ofs2; - if (irref_isk(ir->op2) && - (ofs2 = ofs + IR(ir->op2)->i) > -lim && ofs2 < lim && - (!(!LJ_SOFTFP && (ai & 0x08000000)) || !(ofs2 & 3))) { - ofs = ofs2; - ref = ir->op1; - } else if (ofs == 0 && !(!LJ_SOFTFP && (ai & 0x08000000))) { - IRRef lref = ir->op1, rref = ir->op2; - Reg rn, rm; - if ((ai & 0x04000000)) { - IRRef sref = asm_fuselsl2(as, rref); - if (sref) { - rref = sref; - ai |= ARMF_SH(ARMSH_LSL, 2); - } else if ((sref = asm_fuselsl2(as, lref)) != 0) { - lref = rref; - rref = sref; - ai |= ARMF_SH(ARMSH_LSL, 2); - } - } - rn = ra_alloc1(as, lref, allow); - rm = ra_alloc1(as, rref, rset_exclude(allow, rn)); - if ((ai & 0x04000000)) ai |= ARMI_LS_R; - emit_dnm(as, ai|ARMI_LS_P|ARMI_LS_U, rd, rn, rm); - return; - } - } else if (ir->o == IR_STRREF && !(!LJ_SOFTFP && (ai & 0x08000000))) { - lua_assert(ofs == 0); - ofs = (int32_t)sizeof(GCstr); - if (irref_isk(ir->op2)) { - ofs += IR(ir->op2)->i; - ref = ir->op1; - } else if (irref_isk(ir->op1)) { - ofs += IR(ir->op1)->i; - ref = ir->op2; - } else { - /* NYI: Fuse ADD with constant. */ - Reg rn = ra_alloc1(as, ir->op1, allow); - uint32_t m = asm_fuseopm(as, 0, ir->op2, rset_exclude(allow, rn)); - if ((ai & 0x04000000)) - emit_lso(as, ai, rd, rd, ofs); - else - emit_lsox(as, ai, rd, rd, ofs); - emit_dn(as, ARMI_ADD^m, rd, rn); - return; - } - if (ofs <= -lim || ofs >= lim) { - Reg rn = ra_alloc1(as, ref, allow); - Reg rm = ra_allock(as, ofs, rset_exclude(allow, rn)); - if ((ai & 0x04000000)) ai |= ARMI_LS_R; - emit_dnm(as, ai|ARMI_LS_P|ARMI_LS_U, rd, rn, rm); - return; - } - } - } - base = ra_alloc1(as, ref, allow); -#if !LJ_SOFTFP - if ((ai & 0x08000000)) - emit_vlso(as, ai, rd, base, ofs); - else -#endif - if ((ai & 0x04000000)) - emit_lso(as, ai, rd, base, ofs); - else - emit_lsox(as, ai, rd, base, ofs); -} - -#if !LJ_SOFTFP -/* Fuse to multiply-add/sub instruction. */ -static int asm_fusemadd(ASMState *as, IRIns *ir, ARMIns ai, ARMIns air) -{ - IRRef lref = ir->op1, rref = ir->op2; - IRIns *irm; - if (lref != rref && - ((mayfuse(as, lref) && (irm = IR(lref), irm->o == IR_MUL) && - ra_noreg(irm->r)) || - (mayfuse(as, rref) && (irm = IR(rref), irm->o == IR_MUL) && - (rref = lref, ai = air, ra_noreg(irm->r))))) { - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg add = ra_hintalloc(as, rref, dest, RSET_FPR); - Reg right, left = ra_alloc2(as, irm, - rset_exclude(rset_exclude(RSET_FPR, dest), add)); - right = (left >> 8); left &= 255; - emit_dnm(as, ai, (dest & 15), (left & 15), (right & 15)); - if (dest != add) emit_dm(as, ARMI_VMOV_D, (dest & 15), (add & 15)); - return 1; - } - return 0; -} -#endif - -/* -- Calls --------------------------------------------------------------- */ - -/* Generate a call to a C function. */ -static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args) -{ - uint32_t n, nargs = CCI_NARGS(ci); - int32_t ofs = 0; -#if LJ_SOFTFP - Reg gpr = REGARG_FIRSTGPR; -#else - Reg gpr, fpr = REGARG_FIRSTFPR, fprodd = 0; -#endif - if ((void *)ci->func) - emit_call(as, (void *)ci->func); -#if !LJ_SOFTFP - for (gpr = REGARG_FIRSTGPR; gpr <= REGARG_LASTGPR; gpr++) - as->cost[gpr] = REGCOST(~0u, ASMREF_L); - gpr = REGARG_FIRSTGPR; -#endif - for (n = 0; n < nargs; n++) { /* Setup args. */ - IRRef ref = args[n]; - IRIns *ir = IR(ref); -#if !LJ_SOFTFP - if (ref && irt_isfp(ir->t)) { - RegSet of = as->freeset; - Reg src; - if (!LJ_ABI_SOFTFP && !(ci->flags & CCI_VARARG)) { - if (irt_isnum(ir->t)) { - if (fpr <= REGARG_LASTFPR) { - ra_leftov(as, fpr, ref); - fpr++; - continue; - } - } else if (fprodd) { /* Ick. */ - src = ra_alloc1(as, ref, RSET_FPR); - emit_dm(as, ARMI_VMOV_S, (fprodd & 15), (src & 15) | 0x00400000); - fprodd = 0; - continue; - } else if (fpr <= REGARG_LASTFPR) { - ra_leftov(as, fpr, ref); - fprodd = fpr++; - continue; - } - /* Workaround to protect argument GPRs from being used for remat. */ - as->freeset &= ~RSET_RANGE(REGARG_FIRSTGPR, REGARG_LASTGPR+1); - src = ra_alloc1(as, ref, RSET_FPR); /* May alloc GPR to remat FPR. */ - as->freeset |= (of & RSET_RANGE(REGARG_FIRSTGPR, REGARG_LASTGPR+1)); - fprodd = 0; - goto stackfp; - } - /* Workaround to protect argument GPRs from being used for remat. */ - as->freeset &= ~RSET_RANGE(REGARG_FIRSTGPR, REGARG_LASTGPR+1); - src = ra_alloc1(as, ref, RSET_FPR); /* May alloc GPR to remat FPR. */ - as->freeset |= (of & RSET_RANGE(REGARG_FIRSTGPR, REGARG_LASTGPR+1)); - if (irt_isnum(ir->t)) gpr = (gpr+1) & ~1u; - if (gpr <= REGARG_LASTGPR) { - lua_assert(rset_test(as->freeset, gpr)); /* Must have been evicted. */ - if (irt_isnum(ir->t)) { - lua_assert(rset_test(as->freeset, gpr+1)); /* Ditto. */ - emit_dnm(as, ARMI_VMOV_RR_D, gpr, gpr+1, (src & 15)); - gpr += 2; - } else { - emit_dn(as, ARMI_VMOV_R_S, gpr, (src & 15)); - gpr++; - } - } else { - stackfp: - if (irt_isnum(ir->t)) ofs = (ofs + 4) & ~4; - emit_spstore(as, ir, src, ofs); - ofs += irt_isnum(ir->t) ? 8 : 4; - } - } else -#endif - { - if (gpr <= REGARG_LASTGPR) { - lua_assert(rset_test(as->freeset, gpr)); /* Must have been evicted. */ - if (ref) ra_leftov(as, gpr, ref); - gpr++; - } else { - if (ref) { - Reg r = ra_alloc1(as, ref, RSET_GPR); - emit_spstore(as, ir, r, ofs); - } - ofs += 4; - } - } - } -} - -/* Setup result reg/sp for call. Evict scratch regs. */ -static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - RegSet drop = RSET_SCRATCH; - int hiop = ((ir+1)->o == IR_HIOP); - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - if (hiop && ra_hasreg((ir+1)->r)) - rset_clear(drop, (ir+1)->r); /* Dest reg handled below. */ - ra_evictset(as, drop); /* Evictions must be performed first. */ - if (ra_used(ir)) { - lua_assert(!irt_ispri(ir->t)); - if (!LJ_SOFTFP && irt_isfp(ir->t)) { - if (LJ_ABI_SOFTFP || (ci->flags & (CCI_CASTU64|CCI_VARARG))) { - Reg dest = (ra_dest(as, ir, RSET_FPR) & 15); - if (irt_isnum(ir->t)) - emit_dnm(as, ARMI_VMOV_D_RR, RID_RETLO, RID_RETHI, dest); - else - emit_dn(as, ARMI_VMOV_S_R, RID_RET, dest); - } else { - ra_destreg(as, ir, RID_FPRET); - } - } else if (hiop) { - ra_destpair(as, ir); - } else { - ra_destreg(as, ir, RID_RET); - } - } - UNUSED(ci); -} - -static void asm_call(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX]; - const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; - asm_collectargs(as, ir, ci, args); - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -static void asm_callx(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX*2]; - CCallInfo ci; - IRRef func; - IRIns *irf; - ci.flags = asm_callx_flags(as, ir); - asm_collectargs(as, ir, &ci, args); - asm_setupresult(as, ir, &ci); - func = ir->op2; irf = IR(func); - if (irf->o == IR_CARG) { func = irf->op1; irf = IR(func); } - if (irref_isk(func)) { /* Call to constant address. */ - ci.func = (ASMFunction)(void *)(irf->i); - } else { /* Need a non-argument register for indirect calls. */ - Reg freg = ra_alloc1(as, func, RSET_RANGE(RID_R4, RID_R12+1)); - emit_m(as, ARMI_BLXr, freg); - ci.func = (ASMFunction)(void *)0; - } - asm_gencall(as, &ci, args); -} - -/* -- Returns ------------------------------------------------------------- */ - -/* Return to lower frame. Guard that it goes to the right spot. */ -static void asm_retf(ASMState *as, IRIns *ir) -{ - Reg base = ra_alloc1(as, REF_BASE, RSET_GPR); - void *pc = ir_kptr(IR(ir->op2)); - int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); - as->topslot -= (BCReg)delta; - if ((int32_t)as->topslot < 0) as->topslot = 0; - irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */ - /* Need to force a spill on REF_BASE now to update the stack slot. */ - emit_lso(as, ARMI_STR, base, RID_SP, ra_spill(as, IR(REF_BASE))); - emit_setgl(as, base, jit_base); - emit_addptr(as, base, -8*delta); - asm_guardcc(as, CC_NE); - emit_nm(as, ARMI_CMP, RID_TMP, - ra_allock(as, i32ptr(pc), rset_exclude(RSET_GPR, base))); - emit_lso(as, ARMI_LDR, RID_TMP, base, -4); -} - -/* -- Type conversions ---------------------------------------------------- */ - -#if !LJ_SOFTFP -static void asm_tointg(ASMState *as, IRIns *ir, Reg left) -{ - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, left)); - Reg dest = ra_dest(as, ir, RSET_GPR); - asm_guardcc(as, CC_NE); - emit_d(as, ARMI_VMRS, 0); - emit_dm(as, ARMI_VCMP_D, (tmp & 15), (left & 15)); - emit_dm(as, ARMI_VCVT_F64_S32, (tmp & 15), (tmp & 15)); - emit_dn(as, ARMI_VMOV_R_S, dest, (tmp & 15)); - emit_dm(as, ARMI_VCVT_S32_F64, (tmp & 15), (left & 15)); -} - -static void asm_tobit(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_FPR; - Reg left = ra_alloc1(as, ir->op1, allow); - Reg right = ra_alloc1(as, ir->op2, rset_clear(allow, left)); - Reg tmp = ra_scratch(as, rset_clear(allow, right)); - Reg dest = ra_dest(as, ir, RSET_GPR); - emit_dn(as, ARMI_VMOV_R_S, dest, (tmp & 15)); - emit_dnm(as, ARMI_VADD_D, (tmp & 15), (left & 15), (right & 15)); -} -#endif - -static void asm_conv(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); -#if !LJ_SOFTFP - int stfp = (st == IRT_NUM || st == IRT_FLOAT); -#endif - IRRef lref = ir->op1; - /* 64 bit integer conversions are handled by SPLIT. */ - lua_assert(!irt_isint64(ir->t) && !(st == IRT_I64 || st == IRT_U64)); -#if LJ_SOFTFP - /* FP conversions are handled by SPLIT. */ - lua_assert(!irt_isfp(ir->t) && !(st == IRT_NUM || st == IRT_FLOAT)); - /* Can't check for same types: SPLIT uses CONV int.int + BXOR for sfp NEG. */ -#else - lua_assert(irt_type(ir->t) != st); - if (irt_isfp(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_FPR); - if (stfp) { /* FP to FP conversion. */ - emit_dm(as, st == IRT_NUM ? ARMI_VCVT_F32_F64 : ARMI_VCVT_F64_F32, - (dest & 15), (ra_alloc1(as, lref, RSET_FPR) & 15)); - } else { /* Integer to FP conversion. */ - Reg left = ra_alloc1(as, lref, RSET_GPR); - ARMIns ai = irt_isfloat(ir->t) ? - (st == IRT_INT ? ARMI_VCVT_F32_S32 : ARMI_VCVT_F32_U32) : - (st == IRT_INT ? ARMI_VCVT_F64_S32 : ARMI_VCVT_F64_U32); - emit_dm(as, ai, (dest & 15), (dest & 15)); - emit_dn(as, ARMI_VMOV_S_R, left, (dest & 15)); - } - } else if (stfp) { /* FP to integer conversion. */ - if (irt_isguard(ir->t)) { - /* Checked conversions are only supported from number to int. */ - lua_assert(irt_isint(ir->t) && st == IRT_NUM); - asm_tointg(as, ir, ra_alloc1(as, lref, RSET_FPR)); - } else { - Reg left = ra_alloc1(as, lref, RSET_FPR); - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, left)); - Reg dest = ra_dest(as, ir, RSET_GPR); - ARMIns ai; - emit_dn(as, ARMI_VMOV_R_S, dest, (tmp & 15)); - ai = irt_isint(ir->t) ? - (st == IRT_NUM ? ARMI_VCVT_S32_F64 : ARMI_VCVT_S32_F32) : - (st == IRT_NUM ? ARMI_VCVT_U32_F64 : ARMI_VCVT_U32_F32); - emit_dm(as, ai, (tmp & 15), (left & 15)); - } - } else -#endif - { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (st >= IRT_I8 && st <= IRT_U16) { /* Extend to 32 bit integer. */ - Reg left = ra_alloc1(as, lref, RSET_GPR); - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t)); - if ((as->flags & JIT_F_ARMV6)) { - ARMIns ai = st == IRT_I8 ? ARMI_SXTB : - st == IRT_U8 ? ARMI_UXTB : - st == IRT_I16 ? ARMI_SXTH : ARMI_UXTH; - emit_dm(as, ai, dest, left); - } else if (st == IRT_U8) { - emit_dn(as, ARMI_AND|ARMI_K12|255, dest, left); - } else { - uint32_t shift = st == IRT_I8 ? 24 : 16; - ARMShift sh = st == IRT_U16 ? ARMSH_LSR : ARMSH_ASR; - emit_dm(as, ARMI_MOV|ARMF_SH(sh, shift), dest, RID_TMP); - emit_dm(as, ARMI_MOV|ARMF_SH(ARMSH_LSL, shift), RID_TMP, left); - } - } else { /* Handle 32/32 bit no-op (cast). */ - ra_leftov(as, dest, lref); /* Do nothing, but may need to move regs. */ - } - } -} - -#if !LJ_SOFTFP && LJ_HASFFI -static void asm_conv64(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)((ir-1)->op2 & IRCONV_SRCMASK); - IRType dt = (((ir-1)->op2 & IRCONV_DSTMASK) >> IRCONV_DSH); - IRCallID id; - CCallInfo ci; - IRRef args[2]; - args[0] = (ir-1)->op1; - args[1] = ir->op1; - if (st == IRT_NUM || st == IRT_FLOAT) { - id = IRCALL_fp64_d2l + ((st == IRT_FLOAT) ? 2 : 0) + (dt - IRT_I64); - ir--; - } else { - id = IRCALL_fp64_l2d + ((dt == IRT_FLOAT) ? 2 : 0) + (st - IRT_I64); - } - ci = lj_ir_callinfo[id]; -#if !LJ_ABI_SOFTFP - ci.flags |= CCI_VARARG; /* These calls don't use the hard-float ABI! */ -#endif - asm_setupresult(as, ir, &ci); - asm_gencall(as, &ci, args); -} -#endif - -static void asm_strto(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_strscan_num]; - IRRef args[2]; - Reg rlo = 0, rhi = 0, tmp; - int destused = ra_used(ir); - int32_t ofs = 0; - ra_evictset(as, RSET_SCRATCH); -#if LJ_SOFTFP - if (destused) { - if (ra_hasspill(ir->s) && ra_hasspill((ir+1)->s) && - (ir->s & 1) == 0 && ir->s + 1 == (ir+1)->s) { - int i; - for (i = 0; i < 2; i++) { - Reg r = (ir+i)->r; - if (ra_hasreg(r)) { - ra_free(as, r); - ra_modified(as, r); - emit_spload(as, ir+i, r, sps_scale((ir+i)->s)); - } - } - ofs = sps_scale(ir->s); - destused = 0; - } else { - rhi = ra_dest(as, ir+1, RSET_GPR); - rlo = ra_dest(as, ir, rset_exclude(RSET_GPR, rhi)); - } - } - asm_guardcc(as, CC_EQ); - if (destused) { - emit_lso(as, ARMI_LDR, rhi, RID_SP, 4); - emit_lso(as, ARMI_LDR, rlo, RID_SP, 0); - } -#else - UNUSED(rhi); - if (destused) { - if (ra_hasspill(ir->s)) { - ofs = sps_scale(ir->s); - destused = 0; - if (ra_hasreg(ir->r)) { - ra_free(as, ir->r); - ra_modified(as, ir->r); - emit_spload(as, ir, ir->r, ofs); - } - } else { - rlo = ra_dest(as, ir, RSET_FPR); - } - } - asm_guardcc(as, CC_EQ); - if (destused) - emit_vlso(as, ARMI_VLDR_D, rlo, RID_SP, 0); -#endif - emit_n(as, ARMI_CMP|ARMI_K12|0, RID_RET); /* Test return status. */ - args[0] = ir->op1; /* GCstr *str */ - args[1] = ASMREF_TMP1; /* TValue *n */ - asm_gencall(as, ci, args); - tmp = ra_releasetmp(as, ASMREF_TMP1); - if (ofs == 0) - emit_dm(as, ARMI_MOV, tmp, RID_SP); - else - emit_opk(as, ARMI_ADD, tmp, RID_SP, ofs, RSET_GPR); -} - -/* Get pointer to TValue. */ -static void asm_tvptr(ASMState *as, Reg dest, IRRef ref) -{ - IRIns *ir = IR(ref); - if (irt_isnum(ir->t)) { - if (irref_isk(ref)) { - /* Use the number constant itself as a TValue. */ - ra_allockreg(as, i32ptr(ir_knum(ir)), dest); - } else { -#if LJ_SOFTFP - lua_assert(0); -#else - /* Otherwise force a spill and use the spill slot. */ - emit_opk(as, ARMI_ADD, dest, RID_SP, ra_spill(as, ir), RSET_GPR); -#endif - } - } else { - /* Otherwise use [sp] and [sp+4] to hold the TValue. */ - RegSet allow = rset_exclude(RSET_GPR, dest); - Reg type; - emit_dm(as, ARMI_MOV, dest, RID_SP); - if (!irt_ispri(ir->t)) { - Reg src = ra_alloc1(as, ref, allow); - emit_lso(as, ARMI_STR, src, RID_SP, 0); - } - if ((ir+1)->o == IR_HIOP) - type = ra_alloc1(as, ref+1, allow); - else - type = ra_allock(as, irt_toitype(ir->t), allow); - emit_lso(as, ARMI_STR, type, RID_SP, 4); - } -} - -static void asm_tostr(ASMState *as, IRIns *ir) -{ - IRRef args[2]; - args[0] = ASMREF_L; - as->gcsteps++; - if (irt_isnum(IR(ir->op1)->t) || (ir+1)->o == IR_HIOP) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromnum]; - args[1] = ASMREF_TMP1; /* const lua_Number * */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - asm_tvptr(as, ra_releasetmp(as, ASMREF_TMP1), ir->op1); - } else { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromint]; - args[1] = ir->op1; /* int32_t k */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - } -} - -/* -- Memory references --------------------------------------------------- */ - -static void asm_aref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg idx, base; - if (irref_isk(ir->op2)) { - IRRef tab = IR(ir->op1)->op1; - int32_t ofs = asm_fuseabase(as, tab); - IRRef refa = ofs ? tab : ir->op1; - uint32_t k = emit_isk12(ARMI_ADD, ofs + 8*IR(ir->op2)->i); - if (k) { - base = ra_alloc1(as, refa, RSET_GPR); - emit_dn(as, ARMI_ADD^k, dest, base); - return; - } - } - base = ra_alloc1(as, ir->op1, RSET_GPR); - idx = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, base)); - emit_dnm(as, ARMI_ADD|ARMF_SH(ARMSH_LSL, 3), dest, base, idx); -} - -/* Inlined hash lookup. Specialized for key type and for const keys. -** The equivalent C code is: -** Node *n = hashkey(t, key); -** do { -** if (lj_obj_equal(&n->key, key)) return &n->val; -** } while ((n = nextnode(n))); -** return niltv(L); -*/ -static void asm_href(ASMState *as, IRIns *ir, IROp merge) -{ - RegSet allow = RSET_GPR; - int destused = ra_used(ir); - Reg dest = ra_dest(as, ir, allow); - Reg tab = ra_alloc1(as, ir->op1, rset_clear(allow, dest)); - Reg key = 0, keyhi = 0, keynumhi = RID_NONE, tmp = RID_TMP; - IRRef refkey = ir->op2; - IRIns *irkey = IR(refkey); - IRType1 kt = irkey->t; - int32_t k = 0, khi = emit_isk12(ARMI_CMP, irt_toitype(kt)); - uint32_t khash; - MCLabel l_end, l_loop; - rset_clear(allow, tab); - if (!irref_isk(refkey) || irt_isstr(kt)) { -#if LJ_SOFTFP - key = ra_alloc1(as, refkey, allow); - rset_clear(allow, key); - if (irkey[1].o == IR_HIOP) { - if (ra_hasreg((irkey+1)->r)) { - keynumhi = (irkey+1)->r; - keyhi = RID_TMP; - ra_noweak(as, keynumhi); - } else { - keyhi = keynumhi = ra_allocref(as, refkey+1, allow); - } - rset_clear(allow, keynumhi); - khi = 0; - } -#else - if (irt_isnum(kt)) { - key = ra_scratch(as, allow); - rset_clear(allow, key); - keyhi = keynumhi = ra_scratch(as, allow); - rset_clear(allow, keyhi); - khi = 0; - } else { - key = ra_alloc1(as, refkey, allow); - rset_clear(allow, key); - } -#endif - } else if (irt_isnum(kt)) { - int32_t val = (int32_t)ir_knum(irkey)->u32.lo; - k = emit_isk12(ARMI_CMP, val); - if (!k) { - key = ra_allock(as, val, allow); - rset_clear(allow, key); - } - val = (int32_t)ir_knum(irkey)->u32.hi; - khi = emit_isk12(ARMI_CMP, val); - if (!khi) { - keyhi = ra_allock(as, val, allow); - rset_clear(allow, keyhi); - } - } else if (!irt_ispri(kt)) { - k = emit_isk12(ARMI_CMP, irkey->i); - if (!k) { - key = ra_alloc1(as, refkey, allow); - rset_clear(allow, key); - } - } - if (!irt_ispri(kt)) - tmp = ra_scratchpair(as, allow); - - /* Key not found in chain: jump to exit (if merged) or load niltv. */ - l_end = emit_label(as); - as->invmcp = NULL; - if (merge == IR_NE) - asm_guardcc(as, CC_AL); - else if (destused) - emit_loada(as, dest, niltvg(J2G(as->J))); - - /* Follow hash chain until the end. */ - l_loop = --as->mcp; - emit_n(as, ARMI_CMP|ARMI_K12|0, dest); - emit_lso(as, ARMI_LDR, dest, dest, (int32_t)offsetof(Node, next)); - - /* Type and value comparison. */ - if (merge == IR_EQ) - asm_guardcc(as, CC_EQ); - else - emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end); - if (!irt_ispri(kt)) { - emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^k, tmp, key); - emit_nm(as, ARMI_CMP^khi, tmp+1, keyhi); - emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key)); - } else { - emit_n(as, ARMI_CMP^khi, tmp); - emit_lso(as, ARMI_LDR, tmp, dest, (int32_t)offsetof(Node, key.it)); - } - *l_loop = ARMF_CC(ARMI_B, CC_NE) | ((as->mcp-l_loop-2) & 0x00ffffffu); - - /* Load main position relative to tab->node into dest. */ - khash = irref_isk(refkey) ? ir_khash(irkey) : 1; - if (khash == 0) { - emit_lso(as, ARMI_LDR, dest, tab, (int32_t)offsetof(GCtab, node)); - } else { - emit_dnm(as, ARMI_ADD|ARMF_SH(ARMSH_LSL, 3), dest, dest, tmp); - emit_dnm(as, ARMI_ADD|ARMF_SH(ARMSH_LSL, 1), tmp, tmp, tmp); - if (irt_isstr(kt)) { /* Fetch of str->hash is cheaper than ra_allock. */ - emit_dnm(as, ARMI_AND, tmp, tmp+1, RID_TMP); - emit_lso(as, ARMI_LDR, dest, tab, (int32_t)offsetof(GCtab, node)); - emit_lso(as, ARMI_LDR, tmp+1, key, (int32_t)offsetof(GCstr, hash)); - emit_lso(as, ARMI_LDR, RID_TMP, tab, (int32_t)offsetof(GCtab, hmask)); - } else if (irref_isk(refkey)) { - emit_opk(as, ARMI_AND, tmp, RID_TMP, (int32_t)khash, - rset_exclude(rset_exclude(RSET_GPR, tab), dest)); - emit_lso(as, ARMI_LDR, dest, tab, (int32_t)offsetof(GCtab, node)); - emit_lso(as, ARMI_LDR, RID_TMP, tab, (int32_t)offsetof(GCtab, hmask)); - } else { /* Must match with hash*() in lj_tab.c. */ - if (ra_hasreg(keynumhi)) { /* Canonicalize +-0.0 to 0.0. */ - if (keyhi == RID_TMP) - emit_dm(as, ARMF_CC(ARMI_MOV, CC_NE), keyhi, keynumhi); - emit_d(as, ARMF_CC(ARMI_MOV, CC_EQ)|ARMI_K12|0, keyhi); - } - emit_dnm(as, ARMI_AND, tmp, tmp, RID_TMP); - emit_dnm(as, ARMI_SUB|ARMF_SH(ARMSH_ROR, 32-HASH_ROT3), tmp, tmp, tmp+1); - emit_lso(as, ARMI_LDR, dest, tab, (int32_t)offsetof(GCtab, node)); - emit_dnm(as, ARMI_EOR|ARMF_SH(ARMSH_ROR, 32-((HASH_ROT2+HASH_ROT1)&31)), - tmp, tmp+1, tmp); - emit_lso(as, ARMI_LDR, RID_TMP, tab, (int32_t)offsetof(GCtab, hmask)); - emit_dnm(as, ARMI_SUB|ARMF_SH(ARMSH_ROR, 32-HASH_ROT1), tmp+1, tmp+1, tmp); - if (ra_hasreg(keynumhi)) { - emit_dnm(as, ARMI_EOR, tmp+1, tmp, key); - emit_dnm(as, ARMI_ORR|ARMI_S, RID_TMP, tmp, key); /* Test for +-0.0. */ - emit_dnm(as, ARMI_ADD, tmp, keynumhi, keynumhi); -#if !LJ_SOFTFP - emit_dnm(as, ARMI_VMOV_RR_D, key, keynumhi, - (ra_alloc1(as, refkey, RSET_FPR) & 15)); -#endif - } else { - emit_dnm(as, ARMI_EOR, tmp+1, tmp, key); - emit_opk(as, ARMI_ADD, tmp, key, (int32_t)HASH_BIAS, - rset_exclude(rset_exclude(RSET_GPR, tab), key)); - } - } - } -} - -static void asm_hrefk(ASMState *as, IRIns *ir) -{ - IRIns *kslot = IR(ir->op2); - IRIns *irkey = IR(kslot->op1); - int32_t ofs = (int32_t)(kslot->op2 * sizeof(Node)); - int32_t kofs = ofs + (int32_t)offsetof(Node, key); - Reg dest = (ra_used(ir) || ofs > 4095) ? ra_dest(as, ir, RSET_GPR) : RID_NONE; - Reg node = ra_alloc1(as, ir->op1, RSET_GPR); - Reg key = RID_NONE, type = RID_TMP, idx = node; - RegSet allow = rset_exclude(RSET_GPR, node); - lua_assert(ofs % sizeof(Node) == 0); - if (ofs > 4095) { - idx = dest; - rset_clear(allow, dest); - kofs = (int32_t)offsetof(Node, key); - } else if (ra_hasreg(dest)) { - emit_opk(as, ARMI_ADD, dest, node, ofs, allow); - } - asm_guardcc(as, CC_NE); - if (!irt_ispri(irkey->t)) { - RegSet even = (as->freeset & allow); - even = even & (even >> 1) & RSET_GPREVEN; - if (even) { - key = ra_scratch(as, even); - if (rset_test(as->freeset, key+1)) { - type = key+1; - ra_modified(as, type); - } - } else { - key = ra_scratch(as, allow); - } - rset_clear(allow, key); - } - rset_clear(allow, type); - if (irt_isnum(irkey->t)) { - emit_opk(as, ARMF_CC(ARMI_CMP, CC_EQ), 0, type, - (int32_t)ir_knum(irkey)->u32.hi, allow); - emit_opk(as, ARMI_CMP, 0, key, - (int32_t)ir_knum(irkey)->u32.lo, allow); - } else { - if (ra_hasreg(key)) - emit_opk(as, ARMF_CC(ARMI_CMP, CC_EQ), 0, key, irkey->i, allow); - emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype(irkey->t), type); - } - emit_lso(as, ARMI_LDR, type, idx, kofs+4); - if (ra_hasreg(key)) emit_lso(as, ARMI_LDR, key, idx, kofs); - if (ofs > 4095) - emit_opk(as, ARMI_ADD, dest, node, ofs, RSET_GPR); -} - -static void asm_newref(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_tab_newkey]; - IRRef args[3]; - if (ir->r == RID_SINK) - return; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ir->op1; /* GCtab *t */ - args[2] = ASMREF_TMP1; /* cTValue *key */ - asm_setupresult(as, ir, ci); /* TValue * */ - asm_gencall(as, ci, args); - asm_tvptr(as, ra_releasetmp(as, ASMREF_TMP1), ir->op2); -} - -static void asm_uref(ASMState *as, IRIns *ir) -{ - /* NYI: Check that UREFO is still open and not aliasing a slot. */ - Reg dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - MRef *v = &gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.v; - emit_lsptr(as, ARMI_LDR, dest, v); - } else { - Reg uv = ra_scratch(as, RSET_GPR); - Reg func = ra_alloc1(as, ir->op1, RSET_GPR); - if (ir->o == IR_UREFC) { - asm_guardcc(as, CC_NE); - emit_n(as, ARMI_CMP|ARMI_K12|1, RID_TMP); - emit_opk(as, ARMI_ADD, dest, uv, - (int32_t)offsetof(GCupval, tv), RSET_GPR); - emit_lso(as, ARMI_LDRB, RID_TMP, uv, (int32_t)offsetof(GCupval, closed)); - } else { - emit_lso(as, ARMI_LDR, dest, uv, (int32_t)offsetof(GCupval, v)); - } - emit_lso(as, ARMI_LDR, uv, func, - (int32_t)offsetof(GCfuncL, uvptr) + 4*(int32_t)(ir->op2 >> 8)); - } -} - -static void asm_fref(ASMState *as, IRIns *ir) -{ - UNUSED(as); UNUSED(ir); - lua_assert(!ra_used(ir)); -} - -static void asm_strref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - IRRef ref = ir->op2, refk = ir->op1; - Reg r; - if (irref_isk(ref)) { - IRRef tmp = refk; refk = ref; ref = tmp; - } else if (!irref_isk(refk)) { - uint32_t k, m = ARMI_K12|sizeof(GCstr); - Reg right, left = ra_alloc1(as, ir->op1, RSET_GPR); - IRIns *irr = IR(ir->op2); - if (ra_hasreg(irr->r)) { - ra_noweak(as, irr->r); - right = irr->r; - } else if (mayfuse(as, irr->op2) && - irr->o == IR_ADD && irref_isk(irr->op2) && - (k = emit_isk12(ARMI_ADD, - (int32_t)sizeof(GCstr) + IR(irr->op2)->i))) { - m = k; - right = ra_alloc1(as, irr->op1, rset_exclude(RSET_GPR, left)); - } else { - right = ra_allocref(as, ir->op2, rset_exclude(RSET_GPR, left)); - } - emit_dn(as, ARMI_ADD^m, dest, dest); - emit_dnm(as, ARMI_ADD, dest, left, right); - return; - } - r = ra_alloc1(as, ref, RSET_GPR); - emit_opk(as, ARMI_ADD, dest, r, - sizeof(GCstr) + IR(refk)->i, rset_exclude(RSET_GPR, r)); -} - -/* -- Loads and stores ---------------------------------------------------- */ - -static ARMIns asm_fxloadins(IRIns *ir) -{ - switch (irt_type(ir->t)) { - case IRT_I8: return ARMI_LDRSB; - case IRT_U8: return ARMI_LDRB; - case IRT_I16: return ARMI_LDRSH; - case IRT_U16: return ARMI_LDRH; - case IRT_NUM: lua_assert(!LJ_SOFTFP); return ARMI_VLDR_D; - case IRT_FLOAT: if (!LJ_SOFTFP) return ARMI_VLDR_S; - default: return ARMI_LDR; - } -} - -static ARMIns asm_fxstoreins(IRIns *ir) -{ - switch (irt_type(ir->t)) { - case IRT_I8: case IRT_U8: return ARMI_STRB; - case IRT_I16: case IRT_U16: return ARMI_STRH; - case IRT_NUM: lua_assert(!LJ_SOFTFP); return ARMI_VSTR_D; - case IRT_FLOAT: if (!LJ_SOFTFP) return ARMI_VSTR_S; - default: return ARMI_STR; - } -} - -static void asm_fload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg idx = ra_alloc1(as, ir->op1, RSET_GPR); - ARMIns ai = asm_fxloadins(ir); - int32_t ofs; - if (ir->op2 == IRFL_TAB_ARRAY) { - ofs = asm_fuseabase(as, ir->op1); - if (ofs) { /* Turn the t->array load into an add for colocated arrays. */ - emit_dn(as, ARMI_ADD|ARMI_K12|ofs, dest, idx); - return; - } - } - ofs = field_ofs[ir->op2]; - if ((ai & 0x04000000)) - emit_lso(as, ai, dest, idx, ofs); - else - emit_lsox(as, ai, dest, idx, ofs); -} - -static void asm_fstore(ASMState *as, IRIns *ir) -{ - if (ir->r != RID_SINK) { - Reg src = ra_alloc1(as, ir->op2, RSET_GPR); - IRIns *irf = IR(ir->op1); - Reg idx = ra_alloc1(as, irf->op1, rset_exclude(RSET_GPR, src)); - int32_t ofs = field_ofs[irf->op2]; - ARMIns ai = asm_fxstoreins(ir); - if ((ai & 0x04000000)) - emit_lso(as, ai, src, idx, ofs); - else - emit_lsox(as, ai, src, idx, ofs); - } -} - -static void asm_xload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, - (!LJ_SOFTFP && irt_isfp(ir->t)) ? RSET_FPR : RSET_GPR); - lua_assert(!(ir->op2 & IRXLOAD_UNALIGNED)); - asm_fusexref(as, asm_fxloadins(ir), dest, ir->op1, RSET_GPR, 0); -} - -static void asm_xstore(ASMState *as, IRIns *ir, int32_t ofs) -{ - if (ir->r != RID_SINK) { - Reg src = ra_alloc1(as, ir->op2, - (!LJ_SOFTFP && irt_isfp(ir->t)) ? RSET_FPR : RSET_GPR); - asm_fusexref(as, asm_fxstoreins(ir), src, ir->op1, - rset_exclude(RSET_GPR, src), ofs); - } -} - -static void asm_ahuvload(ASMState *as, IRIns *ir) -{ - int hiop = (LJ_SOFTFP && (ir+1)->o == IR_HIOP); - IRType t = hiop ? IRT_NUM : irt_type(ir->t); - Reg dest = RID_NONE, type = RID_NONE, idx; - RegSet allow = RSET_GPR; - int32_t ofs = 0; - if (hiop && ra_used(ir+1)) { - type = ra_dest(as, ir+1, allow); - rset_clear(allow, type); - } - if (ra_used(ir)) { - lua_assert((LJ_SOFTFP ? 0 : irt_isnum(ir->t)) || - irt_isint(ir->t) || irt_isaddr(ir->t)); - dest = ra_dest(as, ir, (!LJ_SOFTFP && t == IRT_NUM) ? RSET_FPR : allow); - rset_clear(allow, dest); - } - idx = asm_fuseahuref(as, ir->op1, &ofs, allow, - (!LJ_SOFTFP && t == IRT_NUM) ? 1024 : 4096); - if (!hiop || type == RID_NONE) { - rset_clear(allow, idx); - if (ofs < 256 && ra_hasreg(dest) && (dest & 1) == 0 && - rset_test((as->freeset & allow), dest+1)) { - type = dest+1; - ra_modified(as, type); - } else { - type = RID_TMP; - } - } - asm_guardcc(as, t == IRT_NUM ? CC_HS : CC_NE); - emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype_(t), type); - if (ra_hasreg(dest)) { -#if !LJ_SOFTFP - if (t == IRT_NUM) - emit_vlso(as, ARMI_VLDR_D, dest, idx, ofs); - else -#endif - emit_lso(as, ARMI_LDR, dest, idx, ofs); - } - emit_lso(as, ARMI_LDR, type, idx, ofs+4); -} - -static void asm_ahustore(ASMState *as, IRIns *ir) -{ - if (ir->r != RID_SINK) { - RegSet allow = RSET_GPR; - Reg idx, src = RID_NONE, type = RID_NONE; - int32_t ofs = 0; -#if !LJ_SOFTFP - if (irt_isnum(ir->t)) { - src = ra_alloc1(as, ir->op2, RSET_FPR); - idx = asm_fuseahuref(as, ir->op1, &ofs, allow, 1024); - emit_vlso(as, ARMI_VSTR_D, src, idx, ofs); - } else -#endif - { - int hiop = (LJ_SOFTFP && (ir+1)->o == IR_HIOP); - if (!irt_ispri(ir->t)) { - src = ra_alloc1(as, ir->op2, allow); - rset_clear(allow, src); - } - if (hiop) - type = ra_alloc1(as, (ir+1)->op2, allow); - else - type = ra_allock(as, (int32_t)irt_toitype(ir->t), allow); - idx = asm_fuseahuref(as, ir->op1, &ofs, rset_exclude(allow, type), 4096); - if (ra_hasreg(src)) emit_lso(as, ARMI_STR, src, idx, ofs); - emit_lso(as, ARMI_STR, type, idx, ofs+4); - } - } -} - -static void asm_sload(ASMState *as, IRIns *ir) -{ - int32_t ofs = 8*((int32_t)ir->op1-1) + ((ir->op2 & IRSLOAD_FRAME) ? 4 : 0); - int hiop = (LJ_SOFTFP && (ir+1)->o == IR_HIOP); - IRType t = hiop ? IRT_NUM : irt_type(ir->t); - Reg dest = RID_NONE, type = RID_NONE, base; - RegSet allow = RSET_GPR; - lua_assert(!(ir->op2 & IRSLOAD_PARENT)); /* Handled by asm_head_side(). */ - lua_assert(irt_isguard(ir->t) || !(ir->op2 & IRSLOAD_TYPECHECK)); -#if LJ_SOFTFP - lua_assert(!(ir->op2 & IRSLOAD_CONVERT)); /* Handled by LJ_SOFTFP SPLIT. */ - if (hiop && ra_used(ir+1)) { - type = ra_dest(as, ir+1, allow); - rset_clear(allow, type); - } -#else - if ((ir->op2 & IRSLOAD_CONVERT) && irt_isguard(ir->t) && t == IRT_INT) { - dest = ra_scratch(as, RSET_FPR); - asm_tointg(as, ir, dest); - t = IRT_NUM; /* Continue with a regular number type check. */ - } else -#endif - if (ra_used(ir)) { - Reg tmp = RID_NONE; - if ((ir->op2 & IRSLOAD_CONVERT)) - tmp = ra_scratch(as, t == IRT_INT ? RSET_FPR : RSET_GPR); - lua_assert((LJ_SOFTFP ? 0 : irt_isnum(ir->t)) || - irt_isint(ir->t) || irt_isaddr(ir->t)); - dest = ra_dest(as, ir, (!LJ_SOFTFP && t == IRT_NUM) ? RSET_FPR : allow); - rset_clear(allow, dest); - base = ra_alloc1(as, REF_BASE, allow); - if ((ir->op2 & IRSLOAD_CONVERT)) { - if (t == IRT_INT) { - emit_dn(as, ARMI_VMOV_R_S, dest, (tmp & 15)); - emit_dm(as, ARMI_VCVT_S32_F64, (tmp & 15), (tmp & 15)); - t = IRT_NUM; /* Check for original type. */ - } else { - emit_dm(as, ARMI_VCVT_F64_S32, (dest & 15), (dest & 15)); - emit_dn(as, ARMI_VMOV_S_R, tmp, (dest & 15)); - t = IRT_INT; /* Check for original type. */ - } - dest = tmp; - } - goto dotypecheck; - } - base = ra_alloc1(as, REF_BASE, allow); -dotypecheck: - rset_clear(allow, base); - if ((ir->op2 & IRSLOAD_TYPECHECK)) { - if (ra_noreg(type)) { - if (ofs < 256 && ra_hasreg(dest) && (dest & 1) == 0 && - rset_test((as->freeset & allow), dest+1)) { - type = dest+1; - ra_modified(as, type); - } else { - type = RID_TMP; - } - } - asm_guardcc(as, t == IRT_NUM ? CC_HS : CC_NE); - emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype_(t), type); - } - if (ra_hasreg(dest)) { -#if !LJ_SOFTFP - if (t == IRT_NUM) { - if (ofs < 1024) { - emit_vlso(as, ARMI_VLDR_D, dest, base, ofs); - } else { - if (ra_hasreg(type)) emit_lso(as, ARMI_LDR, type, base, ofs+4); - emit_vlso(as, ARMI_VLDR_D, dest, RID_TMP, 0); - emit_opk(as, ARMI_ADD, RID_TMP, base, ofs, allow); - return; - } - } else -#endif - emit_lso(as, ARMI_LDR, dest, base, ofs); - } - if (ra_hasreg(type)) emit_lso(as, ARMI_LDR, type, base, ofs+4); -} - -/* -- Allocations --------------------------------------------------------- */ - -#if LJ_HASFFI -static void asm_cnew(ASMState *as, IRIns *ir) -{ - CTState *cts = ctype_ctsG(J2G(as->J)); - CTypeID ctypeid = (CTypeID)IR(ir->op1)->i; - CTSize sz = (ir->o == IR_CNEWI || ir->op2 == REF_NIL) ? - lj_ctype_size(cts, ctypeid) : (CTSize)IR(ir->op2)->i; - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_mem_newgco]; - IRRef args[2]; - RegSet allow = (RSET_GPR & ~RSET_SCRATCH); - RegSet drop = RSET_SCRATCH; - lua_assert(sz != CTSIZE_INVALID); - - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ASMREF_TMP1; /* MSize size */ - as->gcsteps++; - - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - ra_evictset(as, drop); - if (ra_used(ir)) - ra_destreg(as, ir, RID_RET); /* GCcdata * */ - - /* Initialize immutable cdata object. */ - if (ir->o == IR_CNEWI) { - int32_t ofs = sizeof(GCcdata); - lua_assert(sz == 4 || sz == 8); - if (sz == 8) { - ofs += 4; ir++; - lua_assert(ir->o == IR_HIOP); - } - for (;;) { - Reg r = ra_alloc1(as, ir->op2, allow); - emit_lso(as, ARMI_STR, r, RID_RET, ofs); - rset_clear(allow, r); - if (ofs == sizeof(GCcdata)) break; - ofs -= 4; ir--; - } - } - /* Initialize gct and ctypeid. lj_mem_newgco() already sets marked. */ - { - uint32_t k = emit_isk12(ARMI_MOV, ctypeid); - Reg r = k ? RID_R1 : ra_allock(as, ctypeid, allow); - emit_lso(as, ARMI_STRB, RID_TMP, RID_RET, offsetof(GCcdata, gct)); - emit_lsox(as, ARMI_STRH, r, RID_RET, offsetof(GCcdata, ctypeid)); - emit_d(as, ARMI_MOV|ARMI_K12|~LJ_TCDATA, RID_TMP); - if (k) emit_d(as, ARMI_MOV^k, RID_R1); - } - asm_gencall(as, ci, args); - ra_allockreg(as, (int32_t)(sz+sizeof(GCcdata)), - ra_releasetmp(as, ASMREF_TMP1)); -} -#else -#define asm_cnew(as, ir) ((void)0) -#endif - -/* -- Write barriers ------------------------------------------------------ */ - -static void asm_tbar(ASMState *as, IRIns *ir) -{ - Reg tab = ra_alloc1(as, ir->op1, RSET_GPR); - Reg link = ra_scratch(as, rset_exclude(RSET_GPR, tab)); - Reg gr = ra_allock(as, i32ptr(J2G(as->J)), - rset_exclude(rset_exclude(RSET_GPR, tab), link)); - Reg mark = RID_TMP; - MCLabel l_end = emit_label(as); - emit_lso(as, ARMI_STR, link, tab, (int32_t)offsetof(GCtab, gclist)); - emit_lso(as, ARMI_STRB, mark, tab, (int32_t)offsetof(GCtab, marked)); - emit_lso(as, ARMI_STR, tab, gr, - (int32_t)offsetof(global_State, gc.grayagain)); - emit_dn(as, ARMI_BIC|ARMI_K12|LJ_GC_BLACK, mark, mark); - emit_lso(as, ARMI_LDR, link, gr, - (int32_t)offsetof(global_State, gc.grayagain)); - emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end); - emit_n(as, ARMI_TST|ARMI_K12|LJ_GC_BLACK, mark); - emit_lso(as, ARMI_LDRB, mark, tab, (int32_t)offsetof(GCtab, marked)); -} - -static void asm_obar(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_barrieruv]; - IRRef args[2]; - MCLabel l_end; - Reg obj, val, tmp; - /* No need for other object barriers (yet). */ - lua_assert(IR(ir->op1)->o == IR_UREFC); - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ir->op1; /* TValue *tv */ - asm_gencall(as, ci, args); - if ((l_end[-1] >> 28) == CC_AL) - l_end[-1] = ARMF_CC(l_end[-1], CC_NE); - else - emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end); - ra_allockreg(as, i32ptr(J2G(as->J)), ra_releasetmp(as, ASMREF_TMP1)); - obj = IR(ir->op1)->r; - tmp = ra_scratch(as, rset_exclude(RSET_GPR, obj)); - emit_n(as, ARMF_CC(ARMI_TST, CC_NE)|ARMI_K12|LJ_GC_BLACK, tmp); - emit_n(as, ARMI_TST|ARMI_K12|LJ_GC_WHITES, RID_TMP); - val = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, obj)); - emit_lso(as, ARMI_LDRB, tmp, obj, - (int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)); - emit_lso(as, ARMI_LDRB, RID_TMP, val, (int32_t)offsetof(GChead, marked)); -} - -/* -- Arithmetic and logic operations ------------------------------------- */ - -#if !LJ_SOFTFP -static void asm_fparith(ASMState *as, IRIns *ir, ARMIns ai) -{ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - emit_dnm(as, ai, (dest & 15), (left & 15), (right & 15)); -} - -static void asm_fpunary(ASMState *as, IRIns *ir, ARMIns ai) -{ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_FPR); - emit_dm(as, ai, (dest & 15), (left & 15)); -} - -static int asm_fpjoin_pow(ASMState *as, IRIns *ir) -{ - IRIns *irp = IR(ir->op1); - if (irp == ir-1 && irp->o == IR_MUL && !ra_used(irp)) { - IRIns *irpp = IR(irp->op1); - if (irpp == ir-2 && irpp->o == IR_FPMATH && - irpp->op2 == IRFPM_LOG2 && !ra_used(irpp)) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_pow]; - IRRef args[2]; - args[0] = irpp->op1; - args[1] = irp->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); - return 1; - } - } - return 0; -} -#endif - -static int asm_swapops(ASMState *as, IRRef lref, IRRef rref) -{ - IRIns *ir; - if (irref_isk(rref)) - return 0; /* Don't swap constants to the left. */ - if (irref_isk(lref)) - return 1; /* But swap constants to the right. */ - ir = IR(rref); - if ((ir->o >= IR_BSHL && ir->o <= IR_BROR) || - (ir->o == IR_ADD && ir->op1 == ir->op2)) - return 0; /* Don't swap fusable operands to the left. */ - ir = IR(lref); - if ((ir->o >= IR_BSHL && ir->o <= IR_BROR) || - (ir->o == IR_ADD && ir->op1 == ir->op2)) - return 1; /* But swap fusable operands to the right. */ - return 0; /* Otherwise don't swap. */ -} - -static void asm_intop(ASMState *as, IRIns *ir, ARMIns ai) -{ - IRRef lref = ir->op1, rref = ir->op2; - Reg left, dest = ra_dest(as, ir, RSET_GPR); - uint32_t m; - if (asm_swapops(as, lref, rref)) { - IRRef tmp = lref; lref = rref; rref = tmp; - if ((ai & ~ARMI_S) == ARMI_SUB || (ai & ~ARMI_S) == ARMI_SBC) - ai ^= (ARMI_SUB^ARMI_RSB); - } - left = ra_hintalloc(as, lref, dest, RSET_GPR); - m = asm_fuseopm(as, ai, rref, rset_exclude(RSET_GPR, left)); - if (irt_isguard(ir->t)) { /* For IR_ADDOV etc. */ - asm_guardcc(as, CC_VS); - ai |= ARMI_S; - } - emit_dn(as, ai^m, dest, left); -} - -static void asm_intop_s(ASMState *as, IRIns *ir, ARMIns ai) -{ - if (as->flagmcp == as->mcp) { /* Drop cmp r, #0. */ - as->flagmcp = NULL; - as->mcp++; - ai |= ARMI_S; - } - asm_intop(as, ir, ai); -} - -static void asm_bitop(ASMState *as, IRIns *ir, ARMIns ai) -{ - if (as->flagmcp == as->mcp) { /* Try to drop cmp r, #0. */ - uint32_t cc = (as->mcp[1] >> 28); - as->flagmcp = NULL; - if (cc <= CC_NE) { - as->mcp++; - ai |= ARMI_S; - } else if (cc == CC_GE) { - *++as->mcp ^= ((CC_GE^CC_PL) << 28); - ai |= ARMI_S; - } else if (cc == CC_LT) { - *++as->mcp ^= ((CC_LT^CC_MI) << 28); - ai |= ARMI_S; - } /* else: other conds don't work with bit ops. */ - } - if (ir->op2 == 0) { - Reg dest = ra_dest(as, ir, RSET_GPR); - uint32_t m = asm_fuseopm(as, ai, ir->op1, RSET_GPR); - emit_d(as, ai^m, dest); - } else { - /* NYI: Turn BAND !k12 into uxtb, uxth or bfc or shl+shr. */ - asm_intop(as, ir, ai); - } -} - -static void asm_intneg(ASMState *as, IRIns *ir, ARMIns ai) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - emit_dn(as, ai|ARMI_K12|0, dest, left); -} - -/* NYI: use add/shift for MUL(OV) with constants. FOLD only does 2^k. */ -static void asm_intmul(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, rset_exclude(RSET_GPR, dest)); - Reg right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - Reg tmp = RID_NONE; - /* ARMv5 restriction: dest != left and dest_hi != left. */ - if (dest == left && left != right) { left = right; right = dest; } - if (irt_isguard(ir->t)) { /* IR_MULOV */ - if (!(as->flags & JIT_F_ARMV6) && dest == left) - tmp = left = ra_scratch(as, rset_exclude(RSET_GPR, left)); - asm_guardcc(as, CC_NE); - emit_nm(as, ARMI_TEQ|ARMF_SH(ARMSH_ASR, 31), RID_TMP, dest); - emit_dnm(as, ARMI_SMULL|ARMF_S(right), dest, RID_TMP, left); - } else { - if (!(as->flags & JIT_F_ARMV6) && dest == left) tmp = left = RID_TMP; - emit_nm(as, ARMI_MUL|ARMF_S(right), dest, left); - } - /* Only need this for the dest == left == right case. */ - if (ra_hasreg(tmp)) emit_dm(as, ARMI_MOV, tmp, right); -} - -static void asm_add(ASMState *as, IRIns *ir) -{ -#if !LJ_SOFTFP - if (irt_isnum(ir->t)) { - if (!asm_fusemadd(as, ir, ARMI_VMLA_D, ARMI_VMLA_D)) - asm_fparith(as, ir, ARMI_VADD_D); - return; - } -#endif - asm_intop_s(as, ir, ARMI_ADD); -} - -static void asm_sub(ASMState *as, IRIns *ir) -{ -#if !LJ_SOFTFP - if (irt_isnum(ir->t)) { - if (!asm_fusemadd(as, ir, ARMI_VNMLS_D, ARMI_VMLS_D)) - asm_fparith(as, ir, ARMI_VSUB_D); - return; - } -#endif - asm_intop_s(as, ir, ARMI_SUB); -} - -static void asm_mul(ASMState *as, IRIns *ir) -{ -#if !LJ_SOFTFP - if (irt_isnum(ir->t)) { - asm_fparith(as, ir, ARMI_VMUL_D); - return; - } -#endif - asm_intmul(as, ir); -} - -static void asm_neg(ASMState *as, IRIns *ir) -{ -#if !LJ_SOFTFP - if (irt_isnum(ir->t)) { - asm_fpunary(as, ir, ARMI_VNEG_D); - return; - } -#endif - asm_intneg(as, ir, ARMI_RSB); -} - -static void asm_callid(ASMState *as, IRIns *ir, IRCallID id) -{ - const CCallInfo *ci = &lj_ir_callinfo[id]; - IRRef args[2]; - args[0] = ir->op1; - args[1] = ir->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -#if !LJ_SOFTFP -static void asm_callround(ASMState *as, IRIns *ir, int id) -{ - /* The modified regs must match with the *.dasc implementation. */ - RegSet drop = RID2RSET(RID_R0)|RID2RSET(RID_R1)|RID2RSET(RID_R2)| - RID2RSET(RID_R3)|RID2RSET(RID_R12); - RegSet of; - Reg dest, src; - ra_evictset(as, drop); - dest = ra_dest(as, ir, RSET_FPR); - emit_dnm(as, ARMI_VMOV_D_RR, RID_RETLO, RID_RETHI, (dest & 15)); - emit_call(as, id == IRFPM_FLOOR ? (void *)lj_vm_floor_sf : - id == IRFPM_CEIL ? (void *)lj_vm_ceil_sf : - (void *)lj_vm_trunc_sf); - /* Workaround to protect argument GPRs from being used for remat. */ - of = as->freeset; - as->freeset &= ~RSET_RANGE(RID_R0, RID_R1+1); - as->cost[RID_R0] = as->cost[RID_R1] = REGCOST(~0u, ASMREF_L); - src = ra_alloc1(as, ir->op1, RSET_FPR); /* May alloc GPR to remat FPR. */ - as->freeset |= (of & RSET_RANGE(RID_R0, RID_R1+1)); - emit_dnm(as, ARMI_VMOV_RR_D, RID_R0, RID_R1, (src & 15)); -} -#endif - -static void asm_bitswap(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - if ((as->flags & JIT_F_ARMV6)) { - emit_dm(as, ARMI_REV, dest, left); - } else { - Reg tmp2 = dest; - if (tmp2 == left) - tmp2 = ra_scratch(as, rset_exclude(rset_exclude(RSET_GPR, dest), left)); - emit_dnm(as, ARMI_EOR|ARMF_SH(ARMSH_LSR, 8), dest, tmp2, RID_TMP); - emit_dm(as, ARMI_MOV|ARMF_SH(ARMSH_ROR, 8), tmp2, left); - emit_dn(as, ARMI_BIC|ARMI_K12|256*8|255, RID_TMP, RID_TMP); - emit_dnm(as, ARMI_EOR|ARMF_SH(ARMSH_ROR, 16), RID_TMP, left, left); - } -} - -static void asm_bitshift(ASMState *as, IRIns *ir, ARMShift sh) -{ - if (irref_isk(ir->op2)) { /* Constant shifts. */ - /* NYI: Turn SHL+SHR or BAND+SHR into uxtb, uxth or ubfx. */ - /* NYI: Turn SHL+ASR into sxtb, sxth or sbfx. */ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - int32_t shift = (IR(ir->op2)->i & 31); - emit_dm(as, ARMI_MOV|ARMF_SH(sh, shift), dest, left); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - Reg right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_dm(as, ARMI_MOV|ARMF_RSH(sh, right), dest, left); - } -} - -static void asm_intmin_max(ASMState *as, IRIns *ir, int cc) -{ - uint32_t kcmp = 0, kmov = 0; - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - Reg right = 0; - if (irref_isk(ir->op2)) { - kcmp = emit_isk12(ARMI_CMP, IR(ir->op2)->i); - if (kcmp) kmov = emit_isk12(ARMI_MOV, IR(ir->op2)->i); - } - if (!kmov) { - kcmp = 0; - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - } - if (kmov || dest != right) { - emit_dm(as, ARMF_CC(ARMI_MOV, cc)^kmov, dest, right); - cc ^= 1; /* Must use opposite conditions for paired moves. */ - } else { - cc ^= (CC_LT^CC_GT); /* Otherwise may swap CC_LT <-> CC_GT. */ - } - if (dest != left) emit_dm(as, ARMF_CC(ARMI_MOV, cc), dest, left); - emit_nm(as, ARMI_CMP^kcmp, left, right); -} - -#if LJ_SOFTFP -static void asm_sfpmin_max(ASMState *as, IRIns *ir, int cc) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_softfp_cmp]; - RegSet drop = RSET_SCRATCH; - Reg r; - IRRef args[4]; - args[0] = ir->op1; args[1] = (ir+1)->op1; - args[2] = ir->op2; args[3] = (ir+1)->op2; - /* __aeabi_cdcmple preserves r0-r3. */ - if (ra_hasreg(ir->r)) rset_clear(drop, ir->r); - if (ra_hasreg((ir+1)->r)) rset_clear(drop, (ir+1)->r); - if (!rset_test(as->freeset, RID_R2) && - regcost_ref(as->cost[RID_R2]) == args[2]) rset_clear(drop, RID_R2); - if (!rset_test(as->freeset, RID_R3) && - regcost_ref(as->cost[RID_R3]) == args[3]) rset_clear(drop, RID_R3); - ra_evictset(as, drop); - ra_destpair(as, ir); - emit_dm(as, ARMF_CC(ARMI_MOV, cc), RID_RETHI, RID_R3); - emit_dm(as, ARMF_CC(ARMI_MOV, cc), RID_RETLO, RID_R2); - emit_call(as, (void *)ci->func); - for (r = RID_R0; r <= RID_R3; r++) - ra_leftov(as, r, args[r-RID_R0]); -} -#else -static void asm_fpmin_max(ASMState *as, IRIns *ir, int cc) -{ - Reg dest = (ra_dest(as, ir, RSET_FPR) & 15); - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = ((left >> 8) & 15); left &= 15; - if (dest != left) emit_dm(as, ARMF_CC(ARMI_VMOV_D, cc^1), dest, left); - if (dest != right) emit_dm(as, ARMF_CC(ARMI_VMOV_D, cc), dest, right); - emit_d(as, ARMI_VMRS, 0); - emit_dm(as, ARMI_VCMP_D, left, right); -} -#endif - -static void asm_min_max(ASMState *as, IRIns *ir, int cc, int fcc) -{ -#if LJ_SOFTFP - UNUSED(fcc); -#else - if (irt_isnum(ir->t)) - asm_fpmin_max(as, ir, fcc); - else -#endif - asm_intmin_max(as, ir, cc); -} - -/* -- Comparisons --------------------------------------------------------- */ - -/* Map of comparisons to flags. ORDER IR. */ -static const uint8_t asm_compmap[IR_ABC+1] = { - /* op FP swp int cc FP cc */ - /* LT */ CC_GE + (CC_HS << 4), - /* GE x */ CC_LT + (CC_HI << 4), - /* LE */ CC_GT + (CC_HI << 4), - /* GT x */ CC_LE + (CC_HS << 4), - /* ULT x */ CC_HS + (CC_LS << 4), - /* UGE */ CC_LO + (CC_LO << 4), - /* ULE x */ CC_HI + (CC_LO << 4), - /* UGT */ CC_LS + (CC_LS << 4), - /* EQ */ CC_NE + (CC_NE << 4), - /* NE */ CC_EQ + (CC_EQ << 4), - /* ABC */ CC_LS + (CC_LS << 4) /* Same as UGT. */ -}; - -#if LJ_SOFTFP -/* FP comparisons. */ -static void asm_sfpcomp(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_softfp_cmp]; - RegSet drop = RSET_SCRATCH; - Reg r; - IRRef args[4]; - int swp = (((ir->o ^ (ir->o >> 2)) & ~(ir->o >> 3) & 1) << 1); - args[swp^0] = ir->op1; args[swp^1] = (ir+1)->op1; - args[swp^2] = ir->op2; args[swp^3] = (ir+1)->op2; - /* __aeabi_cdcmple preserves r0-r3. This helps to reduce spills. */ - for (r = RID_R0; r <= RID_R3; r++) - if (!rset_test(as->freeset, r) && - regcost_ref(as->cost[r]) == args[r-RID_R0]) rset_clear(drop, r); - ra_evictset(as, drop); - asm_guardcc(as, (asm_compmap[ir->o] >> 4)); - emit_call(as, (void *)ci->func); - for (r = RID_R0; r <= RID_R3; r++) - ra_leftov(as, r, args[r-RID_R0]); -} -#else -/* FP comparisons. */ -static void asm_fpcomp(ASMState *as, IRIns *ir) -{ - Reg left, right; - ARMIns ai; - int swp = ((ir->o ^ (ir->o >> 2)) & ~(ir->o >> 3) & 1); - if (!swp && irref_isk(ir->op2) && ir_knum(IR(ir->op2))->u64 == 0) { - left = (ra_alloc1(as, ir->op1, RSET_FPR) & 15); - right = 0; - ai = ARMI_VCMPZ_D; - } else { - left = ra_alloc2(as, ir, RSET_FPR); - if (swp) { - right = (left & 15); left = ((left >> 8) & 15); - } else { - right = ((left >> 8) & 15); left &= 15; - } - ai = ARMI_VCMP_D; - } - asm_guardcc(as, (asm_compmap[ir->o] >> 4)); - emit_d(as, ARMI_VMRS, 0); - emit_dm(as, ai, left, right); -} -#endif - -/* Integer comparisons. */ -static void asm_intcomp(ASMState *as, IRIns *ir) -{ - ARMCC cc = (asm_compmap[ir->o] & 15); - IRRef lref = ir->op1, rref = ir->op2; - Reg left; - uint32_t m; - int cmpprev0 = 0; - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t) || irt_isaddr(ir->t)); - if (asm_swapops(as, lref, rref)) { - Reg tmp = lref; lref = rref; rref = tmp; - if (cc >= CC_GE) cc ^= 7; /* LT <-> GT, LE <-> GE */ - else if (cc > CC_NE) cc ^= 11; /* LO <-> HI, LS <-> HS */ - } - if (irref_isk(rref) && IR(rref)->i == 0) { - IRIns *irl = IR(lref); - cmpprev0 = (irl+1 == ir); - /* Combine comp(BAND(left, right), 0) into tst left, right. */ - if (cmpprev0 && irl->o == IR_BAND && !ra_used(irl)) { - IRRef blref = irl->op1, brref = irl->op2; - uint32_t m2 = 0; - Reg bleft; - if (asm_swapops(as, blref, brref)) { - Reg tmp = blref; blref = brref; brref = tmp; - } - if (irref_isk(brref)) { - m2 = emit_isk12(ARMI_AND, IR(brref)->i); - if ((m2 & (ARMI_AND^ARMI_BIC))) - goto notst; /* Not beneficial if we miss a constant operand. */ - } - if (cc == CC_GE) cc = CC_PL; - else if (cc == CC_LT) cc = CC_MI; - else if (cc > CC_NE) goto notst; /* Other conds don't work with tst. */ - bleft = ra_alloc1(as, blref, RSET_GPR); - if (!m2) m2 = asm_fuseopm(as, 0, brref, rset_exclude(RSET_GPR, bleft)); - asm_guardcc(as, cc); - emit_n(as, ARMI_TST^m2, bleft); - return; - } - } -notst: - left = ra_alloc1(as, lref, RSET_GPR); - m = asm_fuseopm(as, ARMI_CMP, rref, rset_exclude(RSET_GPR, left)); - asm_guardcc(as, cc); - emit_n(as, ARMI_CMP^m, left); - /* Signed comparison with zero and referencing previous ins? */ - if (cmpprev0 && (cc <= CC_NE || cc >= CC_GE)) - as->flagmcp = as->mcp; /* Allow elimination of the compare. */ -} - -#if LJ_HASFFI -/* 64 bit integer comparisons. */ -static void asm_int64comp(ASMState *as, IRIns *ir) -{ - int signedcomp = (ir->o <= IR_GT); - ARMCC cclo, cchi; - Reg leftlo, lefthi; - uint32_t mlo, mhi; - RegSet allow = RSET_GPR, oldfree; - - /* Always use unsigned comparison for loword. */ - cclo = asm_compmap[ir->o + (signedcomp ? 4 : 0)] & 15; - leftlo = ra_alloc1(as, ir->op1, allow); - oldfree = as->freeset; - mlo = asm_fuseopm(as, ARMI_CMP, ir->op2, rset_clear(allow, leftlo)); - allow &= ~(oldfree & ~as->freeset); /* Update for allocs of asm_fuseopm. */ - - /* Use signed or unsigned comparison for hiword. */ - cchi = asm_compmap[ir->o] & 15; - lefthi = ra_alloc1(as, (ir+1)->op1, allow); - mhi = asm_fuseopm(as, ARMI_CMP, (ir+1)->op2, rset_clear(allow, lefthi)); - - /* All register allocations must be performed _before_ this point. */ - if (signedcomp) { - MCLabel l_around = emit_label(as); - asm_guardcc(as, cclo); - emit_n(as, ARMI_CMP^mlo, leftlo); - emit_branch(as, ARMF_CC(ARMI_B, CC_NE), l_around); - if (cchi == CC_GE || cchi == CC_LE) cchi ^= 6; /* GE -> GT, LE -> LT */ - asm_guardcc(as, cchi); - } else { - asm_guardcc(as, cclo); - emit_n(as, ARMF_CC(ARMI_CMP, CC_EQ)^mlo, leftlo); - } - emit_n(as, ARMI_CMP^mhi, lefthi); -} -#endif - -/* -- Support for 64 bit ops in 32 bit mode ------------------------------- */ - -/* Hiword op of a split 64 bit op. Previous op must be the loword op. */ -static void asm_hiop(ASMState *as, IRIns *ir) -{ -#if LJ_HASFFI || LJ_SOFTFP - /* HIOP is marked as a store because it needs its own DCE logic. */ - int uselo = ra_used(ir-1), usehi = ra_used(ir); /* Loword/hiword used? */ - if (LJ_UNLIKELY(!(as->flags & JIT_F_OPT_DCE))) uselo = usehi = 1; - if ((ir-1)->o <= IR_NE) { /* 64 bit integer or FP comparisons. ORDER IR. */ - as->curins--; /* Always skip the loword comparison. */ -#if LJ_SOFTFP - if (!irt_isint(ir->t)) { - asm_sfpcomp(as, ir-1); - return; - } -#endif -#if LJ_HASFFI - asm_int64comp(as, ir-1); -#endif - return; -#if LJ_SOFTFP - } else if ((ir-1)->o == IR_MIN || (ir-1)->o == IR_MAX) { - as->curins--; /* Always skip the loword min/max. */ - if (uselo || usehi) - asm_sfpmin_max(as, ir-1, (ir-1)->o == IR_MIN ? CC_HI : CC_LO); - return; -#elif LJ_HASFFI - } else if ((ir-1)->o == IR_CONV) { - as->curins--; /* Always skip the CONV. */ - if (usehi || uselo) - asm_conv64(as, ir); - return; -#endif - } else if ((ir-1)->o == IR_XSTORE) { - if ((ir-1)->r != RID_SINK) - asm_xstore(as, ir, 4); - return; - } - if (!usehi) return; /* Skip unused hiword op for all remaining ops. */ - switch ((ir-1)->o) { -#if LJ_HASFFI - case IR_ADD: - as->curins--; - asm_intop(as, ir, ARMI_ADC); - asm_intop(as, ir-1, ARMI_ADD|ARMI_S); - break; - case IR_SUB: - as->curins--; - asm_intop(as, ir, ARMI_SBC); - asm_intop(as, ir-1, ARMI_SUB|ARMI_S); - break; - case IR_NEG: - as->curins--; - asm_intneg(as, ir, ARMI_RSC); - asm_intneg(as, ir-1, ARMI_RSB|ARMI_S); - break; -#endif -#if LJ_SOFTFP - case IR_SLOAD: case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - case IR_STRTO: - if (!uselo) - ra_allocref(as, ir->op1, RSET_GPR); /* Mark lo op as used. */ - break; -#endif - case IR_CALLN: - case IR_CALLS: - case IR_CALLXS: - if (!uselo) - ra_allocref(as, ir->op1, RID2RSET(RID_RETLO)); /* Mark lo op as used. */ - break; -#if LJ_SOFTFP - case IR_ASTORE: case IR_HSTORE: case IR_USTORE: case IR_TOSTR: -#endif - case IR_CNEWI: - /* Nothing to do here. Handled by lo op itself. */ - break; - default: lua_assert(0); break; - } -#else - UNUSED(as); UNUSED(ir); lua_assert(0); -#endif -} - -/* -- Stack handling ------------------------------------------------------ */ - -/* Check Lua stack size for overflow. Use exit handler as fallback. */ -static void asm_stack_check(ASMState *as, BCReg topslot, - IRIns *irp, RegSet allow, ExitNo exitno) -{ - Reg pbase; - uint32_t k; - if (irp) { - if (!ra_hasspill(irp->s)) { - pbase = irp->r; - lua_assert(ra_hasreg(pbase)); - } else if (allow) { - pbase = rset_pickbot(allow); - } else { - pbase = RID_RET; - emit_lso(as, ARMI_LDR, RID_RET, RID_SP, 0); /* Restore temp. register. */ - } - } else { - pbase = RID_BASE; - } - emit_branch(as, ARMF_CC(ARMI_BL, CC_LS), exitstub_addr(as->J, exitno)); - k = emit_isk12(0, (int32_t)(8*topslot)); - lua_assert(k); - emit_n(as, ARMI_CMP^k, RID_TMP); - emit_dnm(as, ARMI_SUB, RID_TMP, RID_TMP, pbase); - emit_lso(as, ARMI_LDR, RID_TMP, RID_TMP, - (int32_t)offsetof(lua_State, maxstack)); - if (irp) { /* Must not spill arbitrary registers in head of side trace. */ - int32_t i = i32ptr(&J2G(as->J)->jit_L); - if (ra_hasspill(irp->s)) - emit_lso(as, ARMI_LDR, pbase, RID_SP, sps_scale(irp->s)); - emit_lso(as, ARMI_LDR, RID_TMP, RID_TMP, (i & 4095)); - if (ra_hasspill(irp->s) && !allow) - emit_lso(as, ARMI_STR, RID_RET, RID_SP, 0); /* Save temp. register. */ - emit_loadi(as, RID_TMP, (i & ~4095)); - } else { - emit_getgl(as, RID_TMP, jit_L); - } -} - -/* Restore Lua stack from on-trace state. */ -static void asm_stack_restore(ASMState *as, SnapShot *snap) -{ - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - SnapEntry *flinks = &as->T->snapmap[snap_nextofs(as->T, snap)-1]; - MSize n, nent = snap->nent; - /* Store the value of all modified slots to the Lua stack. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - BCReg s = snap_slot(sn); - int32_t ofs = 8*((int32_t)s-1); - IRRef ref = snap_ref(sn); - IRIns *ir = IR(ref); - if ((sn & SNAP_NORESTORE)) - continue; - if (irt_isnum(ir->t)) { -#if LJ_SOFTFP - RegSet odd = rset_exclude(RSET_GPRODD, RID_BASE); - Reg tmp; - lua_assert(irref_isk(ref)); /* LJ_SOFTFP: must be a number constant. */ - tmp = ra_allock(as, (int32_t)ir_knum(ir)->u32.lo, - rset_exclude(RSET_GPREVEN, RID_BASE)); - emit_lso(as, ARMI_STR, tmp, RID_BASE, ofs); - if (rset_test(as->freeset, tmp+1)) odd = RID2RSET(tmp+1); - tmp = ra_allock(as, (int32_t)ir_knum(ir)->u32.hi, odd); - emit_lso(as, ARMI_STR, tmp, RID_BASE, ofs+4); -#else - Reg src = ra_alloc1(as, ref, RSET_FPR); - emit_vlso(as, ARMI_VSTR_D, src, RID_BASE, ofs); -#endif - } else { - RegSet odd = rset_exclude(RSET_GPRODD, RID_BASE); - Reg type; - lua_assert(irt_ispri(ir->t) || irt_isaddr(ir->t) || irt_isinteger(ir->t)); - if (!irt_ispri(ir->t)) { - Reg src = ra_alloc1(as, ref, rset_exclude(RSET_GPREVEN, RID_BASE)); - emit_lso(as, ARMI_STR, src, RID_BASE, ofs); - if (rset_test(as->freeset, src+1)) odd = RID2RSET(src+1); - } - if ((sn & (SNAP_CONT|SNAP_FRAME))) { - if (s == 0) continue; /* Do not overwrite link to previous frame. */ - type = ra_allock(as, (int32_t)(*flinks--), odd); -#if LJ_SOFTFP - } else if ((sn & SNAP_SOFTFPNUM)) { - type = ra_alloc1(as, ref+1, rset_exclude(RSET_GPRODD, RID_BASE)); -#endif - } else { - type = ra_allock(as, (int32_t)irt_toitype(ir->t), odd); - } - emit_lso(as, ARMI_STR, type, RID_BASE, ofs+4); - } - checkmclim(as); - } - lua_assert(map + nent == flinks); -} - -/* -- GC handling --------------------------------------------------------- */ - -/* Check GC threshold and do one or more GC steps. */ -static void asm_gc_check(ASMState *as) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_step_jit]; - IRRef args[2]; - MCLabel l_end; - Reg tmp1, tmp2; - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - /* Exit trace if in GCSatomic or GCSfinalize. Avoids syncing GC objects. */ - asm_guardcc(as, CC_NE); /* Assumes asm_snap_prep() already done. */ - emit_n(as, ARMI_CMP|ARMI_K12|0, RID_RET); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ASMREF_TMP2; /* MSize steps */ - asm_gencall(as, ci, args); - tmp1 = ra_releasetmp(as, ASMREF_TMP1); - tmp2 = ra_releasetmp(as, ASMREF_TMP2); - emit_loadi(as, tmp2, as->gcsteps); - /* Jump around GC step if GC total < GC threshold. */ - emit_branch(as, ARMF_CC(ARMI_B, CC_LS), l_end); - emit_nm(as, ARMI_CMP, RID_TMP, tmp2); - emit_lso(as, ARMI_LDR, tmp2, tmp1, - (int32_t)offsetof(global_State, gc.threshold)); - emit_lso(as, ARMI_LDR, RID_TMP, tmp1, - (int32_t)offsetof(global_State, gc.total)); - ra_allockreg(as, i32ptr(J2G(as->J)), tmp1); - as->gcsteps = 0; - checkmclim(as); -} - -/* -- Loop handling ------------------------------------------------------- */ - -/* Fixup the loop branch. */ -static void asm_loop_fixup(ASMState *as) -{ - MCode *p = as->mctop; - MCode *target = as->mcp; - if (as->loopinv) { /* Inverted loop branch? */ - /* asm_guardcc already inverted the bcc and patched the final bl. */ - p[-2] |= ((uint32_t)(target-p) & 0x00ffffffu); - } else { - p[-1] = ARMI_B | ((uint32_t)((target-p)-1) & 0x00ffffffu); - } -} - -/* -- Head of trace ------------------------------------------------------- */ - -/* Reload L register from g->jit_L. */ -static void asm_head_lreg(ASMState *as) -{ - IRIns *ir = IR(ASMREF_L); - if (ra_used(ir)) { - Reg r = ra_dest(as, ir, RSET_GPR); - emit_getgl(as, r, jit_L); - ra_evictk(as); - } -} - -/* Coalesce BASE register for a root trace. */ -static void asm_head_root_base(ASMState *as) -{ - IRIns *ir; - asm_head_lreg(as); - ir = IR(REF_BASE); - if (ra_hasreg(ir->r) && (rset_test(as->modset, ir->r) || irt_ismarked(ir->t))) - ra_spill(as, ir); - ra_destreg(as, ir, RID_BASE); -} - -/* Coalesce BASE register for a side trace. */ -static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) -{ - IRIns *ir; - asm_head_lreg(as); - ir = IR(REF_BASE); - if (ra_hasreg(ir->r) && (rset_test(as->modset, ir->r) || irt_ismarked(ir->t))) - ra_spill(as, ir); - if (ra_hasspill(irp->s)) { - rset_clear(allow, ra_dest(as, ir, allow)); - } else { - Reg r = irp->r; - lua_assert(ra_hasreg(r)); - rset_clear(allow, r); - if (r != ir->r && !rset_test(as->freeset, r)) - ra_restore(as, regcost_ref(as->cost[r])); - ra_destreg(as, ir, r); - } - return allow; -} - -/* -- Tail of trace ------------------------------------------------------- */ - -/* Fixup the tail code. */ -static void asm_tail_fixup(ASMState *as, TraceNo lnk) -{ - MCode *p = as->mctop; - MCode *target; - int32_t spadj = as->T->spadjust; - if (spadj == 0) { - as->mctop = --p; - } else { - /* Patch stack adjustment. */ - uint32_t k = emit_isk12(ARMI_ADD, spadj); - lua_assert(k); - p[-2] = (ARMI_ADD^k) | ARMF_D(RID_SP) | ARMF_N(RID_SP); - } - /* Patch exit branch. */ - target = lnk ? traceref(as->J, lnk)->mcode : (MCode *)lj_vm_exit_interp; - p[-1] = ARMI_B|(((target-p)-1)&0x00ffffffu); -} - -/* Prepare tail of code. */ -static void asm_tail_prep(ASMState *as) -{ - MCode *p = as->mctop - 1; /* Leave room for exit branch. */ - if (as->loopref) { - as->invmcp = as->mcp = p; - } else { - as->mcp = p-1; /* Leave room for stack pointer adjustment. */ - as->invmcp = NULL; - } - *p = 0; /* Prevent load/store merging. */ -} - -/* -- Instruction dispatch ------------------------------------------------ */ - -/* Assemble a single instruction. */ -static void asm_ir(ASMState *as, IRIns *ir) -{ - switch ((IROp)ir->o) { - /* Miscellaneous ops. */ - case IR_LOOP: asm_loop(as); break; - case IR_NOP: case IR_XBAR: lua_assert(!ra_used(ir)); break; - case IR_USE: - ra_alloc1(as, ir->op1, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); break; - case IR_PHI: asm_phi(as, ir); break; - case IR_HIOP: asm_hiop(as, ir); break; - case IR_GCSTEP: asm_gcstep(as, ir); break; - - /* Guarded assertions. */ - case IR_EQ: case IR_NE: - if ((ir-1)->o == IR_HREF && ir->op1 == as->curins-1) { - as->curins--; - asm_href(as, ir-1, (IROp)ir->o); - break; - } - /* fallthrough */ - case IR_LT: case IR_GE: case IR_LE: case IR_GT: - case IR_ULT: case IR_UGE: case IR_ULE: case IR_UGT: - case IR_ABC: -#if !LJ_SOFTFP - if (irt_isnum(ir->t)) { asm_fpcomp(as, ir); break; } -#endif - asm_intcomp(as, ir); - break; - - case IR_RETF: asm_retf(as, ir); break; - - /* Bit ops. */ - case IR_BNOT: asm_bitop(as, ir, ARMI_MVN); break; - case IR_BSWAP: asm_bitswap(as, ir); break; - - case IR_BAND: asm_bitop(as, ir, ARMI_AND); break; - case IR_BOR: asm_bitop(as, ir, ARMI_ORR); break; - case IR_BXOR: asm_bitop(as, ir, ARMI_EOR); break; - - case IR_BSHL: asm_bitshift(as, ir, ARMSH_LSL); break; - case IR_BSHR: asm_bitshift(as, ir, ARMSH_LSR); break; - case IR_BSAR: asm_bitshift(as, ir, ARMSH_ASR); break; - case IR_BROR: asm_bitshift(as, ir, ARMSH_ROR); break; - case IR_BROL: lua_assert(0); break; - - /* Arithmetic ops. */ - case IR_ADD: case IR_ADDOV: asm_add(as, ir); break; - case IR_SUB: case IR_SUBOV: asm_sub(as, ir); break; - case IR_MUL: case IR_MULOV: asm_mul(as, ir); break; - case IR_MOD: asm_callid(as, ir, IRCALL_lj_vm_modi); break; - case IR_NEG: asm_neg(as, ir); break; - -#if LJ_SOFTFP - case IR_DIV: case IR_POW: case IR_ABS: - case IR_ATAN2: case IR_LDEXP: case IR_FPMATH: case IR_TOBIT: - lua_assert(0); /* Unused for LJ_SOFTFP. */ - break; -#else - case IR_DIV: asm_fparith(as, ir, ARMI_VDIV_D); break; - case IR_POW: asm_callid(as, ir, IRCALL_lj_vm_powi); break; - case IR_ABS: asm_fpunary(as, ir, ARMI_VABS_D); break; - case IR_ATAN2: asm_callid(as, ir, IRCALL_atan2); break; - case IR_LDEXP: asm_callid(as, ir, IRCALL_ldexp); break; - case IR_FPMATH: - if (ir->op2 == IRFPM_EXP2 && asm_fpjoin_pow(as, ir)) - break; - if (ir->op2 <= IRFPM_TRUNC) - asm_callround(as, ir, ir->op2); - else if (ir->op2 == IRFPM_SQRT) - asm_fpunary(as, ir, ARMI_VSQRT_D); - else - asm_callid(as, ir, IRCALL_lj_vm_floor + ir->op2); - break; - case IR_TOBIT: asm_tobit(as, ir); break; -#endif - - case IR_MIN: asm_min_max(as, ir, CC_GT, CC_HI); break; - case IR_MAX: asm_min_max(as, ir, CC_LT, CC_LO); break; - - /* Memory references. */ - case IR_AREF: asm_aref(as, ir); break; - case IR_HREF: asm_href(as, ir, 0); break; - case IR_HREFK: asm_hrefk(as, ir); break; - case IR_NEWREF: asm_newref(as, ir); break; - case IR_UREFO: case IR_UREFC: asm_uref(as, ir); break; - case IR_FREF: asm_fref(as, ir); break; - case IR_STRREF: asm_strref(as, ir); break; - - /* Loads and stores. */ - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - asm_ahuvload(as, ir); - break; - case IR_FLOAD: asm_fload(as, ir); break; - case IR_XLOAD: asm_xload(as, ir); break; - case IR_SLOAD: asm_sload(as, ir); break; - - case IR_ASTORE: case IR_HSTORE: case IR_USTORE: asm_ahustore(as, ir); break; - case IR_FSTORE: asm_fstore(as, ir); break; - case IR_XSTORE: asm_xstore(as, ir, 0); break; - - /* Allocations. */ - case IR_SNEW: case IR_XSNEW: asm_snew(as, ir); break; - case IR_TNEW: asm_tnew(as, ir); break; - case IR_TDUP: asm_tdup(as, ir); break; - case IR_CNEW: case IR_CNEWI: asm_cnew(as, ir); break; - - /* Write barriers. */ - case IR_TBAR: asm_tbar(as, ir); break; - case IR_OBAR: asm_obar(as, ir); break; - - /* Type conversions. */ - case IR_CONV: asm_conv(as, ir); break; - case IR_TOSTR: asm_tostr(as, ir); break; - case IR_STRTO: asm_strto(as, ir); break; - - /* Calls. */ - case IR_CALLN: case IR_CALLL: case IR_CALLS: asm_call(as, ir); break; - case IR_CALLXS: asm_callx(as, ir); break; - case IR_CARG: break; - - default: - setintV(&as->J->errinfo, ir->o); - lj_trace_err_info(as->J, LJ_TRERR_NYIIR); - break; - } -} - -/* -- Trace setup --------------------------------------------------------- */ - -/* Ensure there are enough stack slots for call arguments. */ -static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - IRRef args[CCI_NARGS_MAX*2]; - uint32_t i, nargs = (int)CCI_NARGS(ci); - int nslots = 0, ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR, fprodd = 0; - asm_collectargs(as, ir, ci, args); - for (i = 0; i < nargs; i++) { - if (!LJ_SOFTFP && args[i] && irt_isfp(IR(args[i])->t)) { - if (!LJ_ABI_SOFTFP && !(ci->flags & CCI_VARARG)) { - if (irt_isnum(IR(args[i])->t)) { - if (nfpr > 0) nfpr--; - else fprodd = 0, nslots = (nslots + 3) & ~1; - } else { - if (fprodd) fprodd--; - else if (nfpr > 0) fprodd = 1, nfpr--; - else nslots++; - } - } else if (irt_isnum(IR(args[i])->t)) { - ngpr &= ~1; - if (ngpr > 0) ngpr -= 2; else nslots += 2; - } else { - if (ngpr > 0) ngpr--; else nslots++; - } - } else { - if (ngpr > 0) ngpr--; else nslots++; - } - } - if (nslots > as->evenspill) /* Leave room for args in stack slots. */ - as->evenspill = nslots; - return REGSP_HINT(RID_RET); -} - -static void asm_setup_target(ASMState *as) -{ - /* May need extra exit for asm_stack_check on side traces. */ - asm_exitstub_setup(as, as->T->nsnap + (as->parent ? 1 : 0)); -} - -/* -- Trace patching ------------------------------------------------------ */ - -/* Patch exit jumps of existing machine code to a new target. */ -void lj_asm_patchexit(jit_State *J, GCtrace *T, ExitNo exitno, MCode *target) -{ - MCode *p = T->mcode; - MCode *pe = (MCode *)((char *)p + T->szmcode); - MCode *cstart = NULL, *cend = p; - MCode *mcarea = lj_mcode_patch(J, p, 0); - MCode *px = exitstub_addr(J, exitno) - 2; - for (; p < pe; p++) { - /* Look for bl_cc exitstub, replace with b_cc target. */ - uint32_t ins = *p; - if ((ins & 0x0f000000u) == 0x0b000000u && ins < 0xf0000000u && - ((ins ^ (px-p)) & 0x00ffffffu) == 0) { - *p = (ins & 0xfe000000u) | (((target-p)-2) & 0x00ffffffu); - cend = p+1; - if (!cstart) cstart = p; - } - } - lua_assert(cstart != NULL); - lj_mcode_sync(cstart, cend); - lj_mcode_patch(J, mcarea, 1); -} - diff --git a/deps/luajit/src/lj_asm_mips.h b/deps/luajit/src/lj_asm_mips.h deleted file mode 100644 index 78bd26d..0000000 --- a/deps/luajit/src/lj_asm_mips.h +++ /dev/null @@ -1,1977 +0,0 @@ -/* -** MIPS IR assembler (SSA IR -> machine code). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Register allocator extensions --------------------------------------- */ - -/* Allocate a register with a hint. */ -static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow) -{ - Reg r = IR(ref)->r; - if (ra_noreg(r)) { - if (!ra_hashint(r) && !iscrossref(as, ref)) - ra_sethint(IR(ref)->r, hint); /* Propagate register hint. */ - r = ra_allocref(as, ref, allow); - } - ra_noweak(as, r); - return r; -} - -/* Allocate a register or RID_ZERO. */ -static Reg ra_alloc1z(ASMState *as, IRRef ref, RegSet allow) -{ - Reg r = IR(ref)->r; - if (ra_noreg(r)) { - if (!(allow & RSET_FPR) && irref_isk(ref) && IR(ref)->i == 0) - return RID_ZERO; - r = ra_allocref(as, ref, allow); - } else { - ra_noweak(as, r); - } - return r; -} - -/* Allocate two source registers for three-operand instructions. */ -static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow) -{ - IRIns *irl = IR(ir->op1), *irr = IR(ir->op2); - Reg left = irl->r, right = irr->r; - if (ra_hasreg(left)) { - ra_noweak(as, left); - if (ra_noreg(right)) - right = ra_alloc1z(as, ir->op2, rset_exclude(allow, left)); - else - ra_noweak(as, right); - } else if (ra_hasreg(right)) { - ra_noweak(as, right); - left = ra_alloc1z(as, ir->op1, rset_exclude(allow, right)); - } else if (ra_hashint(right)) { - right = ra_alloc1z(as, ir->op2, allow); - left = ra_alloc1z(as, ir->op1, rset_exclude(allow, right)); - } else { - left = ra_alloc1z(as, ir->op1, allow); - right = ra_alloc1z(as, ir->op2, rset_exclude(allow, left)); - } - return left | (right << 8); -} - -/* -- Guard handling ------------------------------------------------------ */ - -/* Need some spare long-range jump slots, for out-of-range branches. */ -#define MIPS_SPAREJUMP 4 - -/* Setup spare long-range jump slots per mcarea. */ -static void asm_sparejump_setup(ASMState *as) -{ - MCode *mxp = as->mcbot; - /* Assumes sizeof(MCLink) == 8. */ - if (((uintptr_t)mxp & (LJ_PAGESIZE-1)) == 8) { - lua_assert(MIPSI_NOP == 0); - memset(mxp+2, 0, MIPS_SPAREJUMP*8); - mxp += MIPS_SPAREJUMP*2; - lua_assert(mxp < as->mctop); - lj_mcode_sync(as->mcbot, mxp); - lj_mcode_commitbot(as->J, mxp); - as->mcbot = mxp; - as->mclim = as->mcbot + MCLIM_REDZONE; - } -} - -/* Setup exit stub after the end of each trace. */ -static void asm_exitstub_setup(ASMState *as) -{ - MCode *mxp = as->mctop; - /* sw TMP, 0(sp); j ->vm_exit_handler; li TMP, traceno */ - *--mxp = MIPSI_LI|MIPSF_T(RID_TMP)|as->T->traceno; - *--mxp = MIPSI_J|((((uintptr_t)(void *)lj_vm_exit_handler)>>2)&0x03ffffffu); - lua_assert(((uintptr_t)mxp ^ (uintptr_t)(void *)lj_vm_exit_handler)>>28 == 0); - *--mxp = MIPSI_SW|MIPSF_T(RID_TMP)|MIPSF_S(RID_SP)|0; - as->mctop = mxp; -} - -/* Keep this in-sync with exitstub_trace_addr(). */ -#define asm_exitstub_addr(as) ((as)->mctop) - -/* Emit conditional branch to exit for guard. */ -static void asm_guard(ASMState *as, MIPSIns mi, Reg rs, Reg rt) -{ - MCode *target = asm_exitstub_addr(as); - MCode *p = as->mcp; - if (LJ_UNLIKELY(p == as->invmcp)) { - as->invmcp = NULL; - as->loopinv = 1; - as->mcp = p+1; - mi = mi ^ ((mi>>28) == 1 ? 0x04000000u : 0x00010000u); /* Invert cond. */ - target = p; /* Patch target later in asm_loop_fixup. */ - } - emit_ti(as, MIPSI_LI, RID_TMP, as->snapno); - emit_branch(as, mi, rs, rt, target); -} - -/* -- Operand fusion ------------------------------------------------------ */ - -/* Limit linear search to this distance. Avoids O(n^2) behavior. */ -#define CONFLICT_SEARCH_LIM 31 - -/* Check if there's no conflicting instruction between curins and ref. */ -static int noconflict(ASMState *as, IRRef ref, IROp conflict) -{ - IRIns *ir = as->ir; - IRRef i = as->curins; - if (i > ref + CONFLICT_SEARCH_LIM) - return 0; /* Give up, ref is too far away. */ - while (--i > ref) - if (ir[i].o == conflict) - return 0; /* Conflict found. */ - return 1; /* Ok, no conflict. */ -} - -/* Fuse the array base of colocated arrays. */ -static int32_t asm_fuseabase(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - if (ir->o == IR_TNEW && ir->op1 <= LJ_MAX_COLOSIZE && - !neverfuse(as) && noconflict(as, ref, IR_NEWREF)) - return (int32_t)sizeof(GCtab); - return 0; -} - -/* Fuse array/hash/upvalue reference into register+offset operand. */ -static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow) -{ - IRIns *ir = IR(ref); - if (ra_noreg(ir->r)) { - if (ir->o == IR_AREF) { - if (mayfuse(as, ref)) { - if (irref_isk(ir->op2)) { - IRRef tab = IR(ir->op1)->op1; - int32_t ofs = asm_fuseabase(as, tab); - IRRef refa = ofs ? tab : ir->op1; - ofs += 8*IR(ir->op2)->i; - if (checki16(ofs)) { - *ofsp = ofs; - return ra_alloc1(as, refa, allow); - } - } - } - } else if (ir->o == IR_HREFK) { - if (mayfuse(as, ref)) { - int32_t ofs = (int32_t)(IR(ir->op2)->op2 * sizeof(Node)); - if (checki16(ofs)) { - *ofsp = ofs; - return ra_alloc1(as, ir->op1, allow); - } - } - } else if (ir->o == IR_UREFC) { - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - int32_t ofs = i32ptr(&gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.tv); - int32_t jgl = (intptr_t)J2G(as->J); - if ((uint32_t)(ofs-jgl) < 65536) { - *ofsp = ofs-jgl-32768; - return RID_JGL; - } else { - *ofsp = (int16_t)ofs; - return ra_allock(as, ofs-(int16_t)ofs, allow); - } - } - } - } - *ofsp = 0; - return ra_alloc1(as, ref, allow); -} - -/* Fuse XLOAD/XSTORE reference into load/store operand. */ -static void asm_fusexref(ASMState *as, MIPSIns mi, Reg rt, IRRef ref, - RegSet allow, int32_t ofs) -{ - IRIns *ir = IR(ref); - Reg base; - if (ra_noreg(ir->r) && canfuse(as, ir)) { - if (ir->o == IR_ADD) { - int32_t ofs2; - if (irref_isk(ir->op2) && (ofs2 = ofs + IR(ir->op2)->i, checki16(ofs2))) { - ref = ir->op1; - ofs = ofs2; - } - } else if (ir->o == IR_STRREF) { - int32_t ofs2 = 65536; - lua_assert(ofs == 0); - ofs = (int32_t)sizeof(GCstr); - if (irref_isk(ir->op2)) { - ofs2 = ofs + IR(ir->op2)->i; - ref = ir->op1; - } else if (irref_isk(ir->op1)) { - ofs2 = ofs + IR(ir->op1)->i; - ref = ir->op2; - } - if (!checki16(ofs2)) { - /* NYI: Fuse ADD with constant. */ - Reg right, left = ra_alloc2(as, ir, allow); - right = (left >> 8); left &= 255; - emit_hsi(as, mi, rt, RID_TMP, ofs); - emit_dst(as, MIPSI_ADDU, RID_TMP, left, right); - return; - } - ofs = ofs2; - } - } - base = ra_alloc1(as, ref, allow); - emit_hsi(as, mi, rt, base, ofs); -} - -/* -- Calls --------------------------------------------------------------- */ - -/* Generate a call to a C function. */ -static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args) -{ - uint32_t n, nargs = CCI_NARGS(ci); - int32_t ofs = 16; - Reg gpr, fpr = REGARG_FIRSTFPR; - if ((void *)ci->func) - emit_call(as, (void *)ci->func); - for (gpr = REGARG_FIRSTGPR; gpr <= REGARG_LASTGPR; gpr++) - as->cost[gpr] = REGCOST(~0u, ASMREF_L); - gpr = REGARG_FIRSTGPR; - for (n = 0; n < nargs; n++) { /* Setup args. */ - IRRef ref = args[n]; - if (ref) { - IRIns *ir = IR(ref); - if (irt_isfp(ir->t) && fpr <= REGARG_LASTFPR && - !(ci->flags & CCI_VARARG)) { - lua_assert(rset_test(as->freeset, fpr)); /* Already evicted. */ - ra_leftov(as, fpr, ref); - fpr += 2; - gpr += irt_isnum(ir->t) ? 2 : 1; - } else { - fpr = REGARG_LASTFPR+1; - if (irt_isnum(ir->t)) gpr = (gpr+1) & ~1; - if (gpr <= REGARG_LASTGPR) { - lua_assert(rset_test(as->freeset, gpr)); /* Already evicted. */ - if (irt_isfp(ir->t)) { - RegSet of = as->freeset; - Reg r; - /* Workaround to protect argument GPRs from being used for remat. */ - as->freeset &= ~RSET_RANGE(REGARG_FIRSTGPR, REGARG_LASTGPR+1); - r = ra_alloc1(as, ref, RSET_FPR); - as->freeset |= (of & RSET_RANGE(REGARG_FIRSTGPR, REGARG_LASTGPR+1)); - if (irt_isnum(ir->t)) { - emit_tg(as, MIPSI_MFC1, gpr+(LJ_BE?0:1), r+1); - emit_tg(as, MIPSI_MFC1, gpr+(LJ_BE?1:0), r); - lua_assert(rset_test(as->freeset, gpr+1)); /* Already evicted. */ - gpr += 2; - } else if (irt_isfloat(ir->t)) { - emit_tg(as, MIPSI_MFC1, gpr, r); - gpr++; - } - } else { - ra_leftov(as, gpr, ref); - gpr++; - } - } else { - Reg r = ra_alloc1z(as, ref, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); - if (irt_isnum(ir->t)) ofs = (ofs + 4) & ~4; - emit_spstore(as, ir, r, ofs); - ofs += irt_isnum(ir->t) ? 8 : 4; - } - } - } else { - fpr = REGARG_LASTFPR+1; - if (gpr <= REGARG_LASTGPR) - gpr++; - else - ofs += 4; - } - checkmclim(as); - } -} - -/* Setup result reg/sp for call. Evict scratch regs. */ -static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - RegSet drop = RSET_SCRATCH; - int hiop = ((ir+1)->o == IR_HIOP); - if ((ci->flags & CCI_NOFPRCLOBBER)) - drop &= ~RSET_FPR; - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - if (hiop && ra_hasreg((ir+1)->r)) - rset_clear(drop, (ir+1)->r); /* Dest reg handled below. */ - ra_evictset(as, drop); /* Evictions must be performed first. */ - if (ra_used(ir)) { - lua_assert(!irt_ispri(ir->t)); - if (irt_isfp(ir->t)) { - if ((ci->flags & CCI_CASTU64)) { - int32_t ofs = sps_scale(ir->s); - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - emit_tg(as, MIPSI_MTC1, RID_RETHI, dest+1); - emit_tg(as, MIPSI_MTC1, RID_RETLO, dest); - } - if (ofs) { - emit_tsi(as, MIPSI_SW, RID_RETLO, RID_SP, ofs+(LJ_BE?4:0)); - emit_tsi(as, MIPSI_SW, RID_RETHI, RID_SP, ofs+(LJ_BE?0:4)); - } - } else { - ra_destreg(as, ir, RID_FPRET); - } - } else if (hiop) { - ra_destpair(as, ir); - } else { - ra_destreg(as, ir, RID_RET); - } - } -} - -static void asm_call(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX]; - const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; - asm_collectargs(as, ir, ci, args); - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -static void asm_callx(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX*2]; - CCallInfo ci; - IRRef func; - IRIns *irf; - ci.flags = asm_callx_flags(as, ir); - asm_collectargs(as, ir, &ci, args); - asm_setupresult(as, ir, &ci); - func = ir->op2; irf = IR(func); - if (irf->o == IR_CARG) { func = irf->op1; irf = IR(func); } - if (irref_isk(func)) { /* Call to constant address. */ - ci.func = (ASMFunction)(void *)(irf->i); - } else { /* Need specific register for indirect calls. */ - Reg r = ra_alloc1(as, func, RID2RSET(RID_CFUNCADDR)); - MCode *p = as->mcp; - if (r == RID_CFUNCADDR) - *--p = MIPSI_NOP; - else - *--p = MIPSI_MOVE | MIPSF_D(RID_CFUNCADDR) | MIPSF_S(r); - *--p = MIPSI_JALR | MIPSF_S(r); - as->mcp = p; - ci.func = (ASMFunction)(void *)0; - } - asm_gencall(as, &ci, args); -} - -static void asm_callid(ASMState *as, IRIns *ir, IRCallID id) -{ - const CCallInfo *ci = &lj_ir_callinfo[id]; - IRRef args[2]; - args[0] = ir->op1; - args[1] = ir->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -static void asm_callround(ASMState *as, IRIns *ir, IRCallID id) -{ - /* The modified regs must match with the *.dasc implementation. */ - RegSet drop = RID2RSET(RID_R1)|RID2RSET(RID_R12)|RID2RSET(RID_FPRET)| - RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(REGARG_FIRSTFPR); - if (ra_hasreg(ir->r)) rset_clear(drop, ir->r); - ra_evictset(as, drop); - ra_destreg(as, ir, RID_FPRET); - emit_call(as, (void *)lj_ir_callinfo[id].func); - ra_leftov(as, REGARG_FIRSTFPR, ir->op1); -} - -/* -- Returns ------------------------------------------------------------- */ - -/* Return to lower frame. Guard that it goes to the right spot. */ -static void asm_retf(ASMState *as, IRIns *ir) -{ - Reg base = ra_alloc1(as, REF_BASE, RSET_GPR); - void *pc = ir_kptr(IR(ir->op2)); - int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); - as->topslot -= (BCReg)delta; - if ((int32_t)as->topslot < 0) as->topslot = 0; - irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */ - emit_setgl(as, base, jit_base); - emit_addptr(as, base, -8*delta); - asm_guard(as, MIPSI_BNE, RID_TMP, - ra_allock(as, i32ptr(pc), rset_exclude(RSET_GPR, base))); - emit_tsi(as, MIPSI_LW, RID_TMP, base, -8); -} - -/* -- Type conversions ---------------------------------------------------- */ - -static void asm_tointg(ASMState *as, IRIns *ir, Reg left) -{ - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, left)); - Reg dest = ra_dest(as, ir, RSET_GPR); - asm_guard(as, MIPSI_BC1F, 0, 0); - emit_fgh(as, MIPSI_C_EQ_D, 0, tmp, left); - emit_fg(as, MIPSI_CVT_D_W, tmp, tmp); - emit_tg(as, MIPSI_MFC1, dest, tmp); - emit_fg(as, MIPSI_CVT_W_D, tmp, left); -} - -static void asm_tobit(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_FPR; - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, allow); - Reg right = ra_alloc1(as, ir->op2, rset_clear(allow, left)); - Reg tmp = ra_scratch(as, rset_clear(allow, right)); - emit_tg(as, MIPSI_MFC1, dest, tmp); - emit_fgh(as, MIPSI_ADD_D, tmp, left, right); -} - -static void asm_conv(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); - int stfp = (st == IRT_NUM || st == IRT_FLOAT); - IRRef lref = ir->op1; - lua_assert(irt_type(ir->t) != st); - lua_assert(!(irt_isint64(ir->t) || - (st == IRT_I64 || st == IRT_U64))); /* Handled by SPLIT. */ - if (irt_isfp(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_FPR); - if (stfp) { /* FP to FP conversion. */ - emit_fg(as, st == IRT_NUM ? MIPSI_CVT_S_D : MIPSI_CVT_D_S, - dest, ra_alloc1(as, lref, RSET_FPR)); - } else if (st == IRT_U32) { /* U32 to FP conversion. */ - /* y = (x ^ 0x8000000) + 2147483648.0 */ - Reg left = ra_alloc1(as, lref, RSET_GPR); - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, dest)); - emit_fgh(as, irt_isfloat(ir->t) ? MIPSI_ADD_S : MIPSI_ADD_D, - dest, dest, tmp); - emit_fg(as, irt_isfloat(ir->t) ? MIPSI_CVT_S_W : MIPSI_CVT_D_W, - dest, dest); - if (irt_isfloat(ir->t)) - emit_lsptr(as, MIPSI_LWC1, (tmp & 31), - (void *)lj_ir_k64_find(as->J, U64x(4f000000,4f000000)), - RSET_GPR); - else - emit_lsptr(as, MIPSI_LDC1, (tmp & 31), - (void *)lj_ir_k64_find(as->J, U64x(41e00000,00000000)), - RSET_GPR); - emit_tg(as, MIPSI_MTC1, RID_TMP, dest); - emit_dst(as, MIPSI_XOR, RID_TMP, RID_TMP, left); - emit_ti(as, MIPSI_LUI, RID_TMP, 0x8000); - } else { /* Integer to FP conversion. */ - Reg left = ra_alloc1(as, lref, RSET_GPR); - emit_fg(as, irt_isfloat(ir->t) ? MIPSI_CVT_S_W : MIPSI_CVT_D_W, - dest, dest); - emit_tg(as, MIPSI_MTC1, left, dest); - } - } else if (stfp) { /* FP to integer conversion. */ - if (irt_isguard(ir->t)) { - /* Checked conversions are only supported from number to int. */ - lua_assert(irt_isint(ir->t) && st == IRT_NUM); - asm_tointg(as, ir, ra_alloc1(as, lref, RSET_FPR)); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, lref, RSET_FPR); - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, left)); - if (irt_isu32(ir->t)) { - /* y = (int)floor(x - 2147483648.0) ^ 0x80000000 */ - emit_dst(as, MIPSI_XOR, dest, dest, RID_TMP); - emit_ti(as, MIPSI_LUI, RID_TMP, 0x8000); - emit_tg(as, MIPSI_MFC1, dest, tmp); - emit_fg(as, st == IRT_FLOAT ? MIPSI_FLOOR_W_S : MIPSI_FLOOR_W_D, - tmp, tmp); - emit_fgh(as, st == IRT_FLOAT ? MIPSI_SUB_S : MIPSI_SUB_D, - tmp, left, tmp); - if (st == IRT_FLOAT) - emit_lsptr(as, MIPSI_LWC1, (tmp & 31), - (void *)lj_ir_k64_find(as->J, U64x(4f000000,4f000000)), - RSET_GPR); - else - emit_lsptr(as, MIPSI_LDC1, (tmp & 31), - (void *)lj_ir_k64_find(as->J, U64x(41e00000,00000000)), - RSET_GPR); - } else { - emit_tg(as, MIPSI_MFC1, dest, tmp); - emit_fg(as, st == IRT_FLOAT ? MIPSI_TRUNC_W_S : MIPSI_TRUNC_W_D, - tmp, left); - } - } - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (st >= IRT_I8 && st <= IRT_U16) { /* Extend to 32 bit integer. */ - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t)); - if ((ir->op2 & IRCONV_SEXT)) { - if ((as->flags & JIT_F_MIPS32R2)) { - emit_dst(as, st == IRT_I8 ? MIPSI_SEB : MIPSI_SEH, dest, 0, left); - } else { - uint32_t shift = st == IRT_I8 ? 24 : 16; - emit_dta(as, MIPSI_SRA, dest, dest, shift); - emit_dta(as, MIPSI_SLL, dest, left, shift); - } - } else { - emit_tsi(as, MIPSI_ANDI, dest, left, - (int32_t)(st == IRT_U8 ? 0xff : 0xffff)); - } - } else { /* 32/64 bit integer conversions. */ - /* Only need to handle 32/32 bit no-op (cast) on 32 bit archs. */ - ra_leftov(as, dest, lref); /* Do nothing, but may need to move regs. */ - } - } -} - -#if LJ_HASFFI -static void asm_conv64(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)((ir-1)->op2 & IRCONV_SRCMASK); - IRType dt = (((ir-1)->op2 & IRCONV_DSTMASK) >> IRCONV_DSH); - IRCallID id; - const CCallInfo *ci; - IRRef args[2]; - args[LJ_BE?0:1] = ir->op1; - args[LJ_BE?1:0] = (ir-1)->op1; - if (st == IRT_NUM || st == IRT_FLOAT) { - id = IRCALL_fp64_d2l + ((st == IRT_FLOAT) ? 2 : 0) + (dt - IRT_I64); - ir--; - } else { - id = IRCALL_fp64_l2d + ((dt == IRT_FLOAT) ? 2 : 0) + (st - IRT_I64); - } - ci = &lj_ir_callinfo[id]; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} -#endif - -static void asm_strto(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_strscan_num]; - IRRef args[2]; - RegSet drop = RSET_SCRATCH; - if (ra_hasreg(ir->r)) rset_set(drop, ir->r); /* Spill dest reg (if any). */ - ra_evictset(as, drop); - asm_guard(as, MIPSI_BEQ, RID_RET, RID_ZERO); /* Test return status. */ - args[0] = ir->op1; /* GCstr *str */ - args[1] = ASMREF_TMP1; /* TValue *n */ - asm_gencall(as, ci, args); - /* Store the result to the spill slot or temp slots. */ - emit_tsi(as, MIPSI_ADDIU, ra_releasetmp(as, ASMREF_TMP1), - RID_SP, sps_scale(ir->s)); -} - -/* Get pointer to TValue. */ -static void asm_tvptr(ASMState *as, Reg dest, IRRef ref) -{ - IRIns *ir = IR(ref); - if (irt_isnum(ir->t)) { - if (irref_isk(ref)) /* Use the number constant itself as a TValue. */ - ra_allockreg(as, i32ptr(ir_knum(ir)), dest); - else /* Otherwise force a spill and use the spill slot. */ - emit_tsi(as, MIPSI_ADDIU, dest, RID_SP, ra_spill(as, ir)); - } else { - /* Otherwise use g->tmptv to hold the TValue. */ - RegSet allow = rset_exclude(RSET_GPR, dest); - Reg type; - emit_tsi(as, MIPSI_ADDIU, dest, RID_JGL, offsetof(global_State, tmptv)-32768); - if (!irt_ispri(ir->t)) { - Reg src = ra_alloc1(as, ref, allow); - emit_setgl(as, src, tmptv.gcr); - } - type = ra_allock(as, irt_toitype(ir->t), allow); - emit_setgl(as, type, tmptv.it); - } -} - -static void asm_tostr(ASMState *as, IRIns *ir) -{ - IRRef args[2]; - args[0] = ASMREF_L; - as->gcsteps++; - if (irt_isnum(IR(ir->op1)->t) || (ir+1)->o == IR_HIOP) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromnum]; - args[1] = ASMREF_TMP1; /* const lua_Number * */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - asm_tvptr(as, ra_releasetmp(as, ASMREF_TMP1), ir->op1); - } else { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromint]; - args[1] = ir->op1; /* int32_t k */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - } -} - -/* -- Memory references --------------------------------------------------- */ - -static void asm_aref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg idx, base; - if (irref_isk(ir->op2)) { - IRRef tab = IR(ir->op1)->op1; - int32_t ofs = asm_fuseabase(as, tab); - IRRef refa = ofs ? tab : ir->op1; - ofs += 8*IR(ir->op2)->i; - if (checki16(ofs)) { - base = ra_alloc1(as, refa, RSET_GPR); - emit_tsi(as, MIPSI_ADDIU, dest, base, ofs); - return; - } - } - base = ra_alloc1(as, ir->op1, RSET_GPR); - idx = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, base)); - emit_dst(as, MIPSI_ADDU, dest, RID_TMP, base); - emit_dta(as, MIPSI_SLL, RID_TMP, idx, 3); -} - -/* Inlined hash lookup. Specialized for key type and for const keys. -** The equivalent C code is: -** Node *n = hashkey(t, key); -** do { -** if (lj_obj_equal(&n->key, key)) return &n->val; -** } while ((n = nextnode(n))); -** return niltv(L); -*/ -static void asm_href(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_GPR; - int destused = ra_used(ir); - Reg dest = ra_dest(as, ir, allow); - Reg tab = ra_alloc1(as, ir->op1, rset_clear(allow, dest)); - Reg key = RID_NONE, type = RID_NONE, tmpnum = RID_NONE, tmp1 = RID_TMP, tmp2; - IRRef refkey = ir->op2; - IRIns *irkey = IR(refkey); - IRType1 kt = irkey->t; - uint32_t khash; - MCLabel l_end, l_loop, l_next; - - rset_clear(allow, tab); - if (irt_isnum(kt)) { - key = ra_alloc1(as, refkey, RSET_FPR); - tmpnum = ra_scratch(as, rset_exclude(RSET_FPR, key)); - } else if (!irt_ispri(kt)) { - key = ra_alloc1(as, refkey, allow); - rset_clear(allow, key); - type = ra_allock(as, irt_toitype(irkey->t), allow); - rset_clear(allow, type); - } - tmp2 = ra_scratch(as, allow); - rset_clear(allow, tmp2); - - /* Key not found in chain: load niltv. */ - l_end = emit_label(as); - if (destused) - emit_loada(as, dest, niltvg(J2G(as->J))); - else - *--as->mcp = MIPSI_NOP; - /* Follow hash chain until the end. */ - emit_move(as, dest, tmp1); - l_loop = --as->mcp; - emit_tsi(as, MIPSI_LW, tmp1, dest, (int32_t)offsetof(Node, next)); - l_next = emit_label(as); - - /* Type and value comparison. */ - if (irt_isnum(kt)) { - emit_branch(as, MIPSI_BC1T, 0, 0, l_end); - emit_fgh(as, MIPSI_C_EQ_D, 0, tmpnum, key); - emit_tg(as, MIPSI_MFC1, tmp1, key+1); - emit_branch(as, MIPSI_BEQ, tmp1, RID_ZERO, l_next); - emit_tsi(as, MIPSI_SLTIU, tmp1, tmp1, (int32_t)LJ_TISNUM); - emit_hsi(as, MIPSI_LDC1, tmpnum, dest, (int32_t)offsetof(Node, key.n)); - } else { - if (irt_ispri(kt)) { - emit_branch(as, MIPSI_BEQ, tmp1, type, l_end); - } else { - emit_branch(as, MIPSI_BEQ, tmp2, key, l_end); - emit_tsi(as, MIPSI_LW, tmp2, dest, (int32_t)offsetof(Node, key.gcr)); - emit_branch(as, MIPSI_BNE, tmp1, type, l_next); - } - } - emit_tsi(as, MIPSI_LW, tmp1, dest, (int32_t)offsetof(Node, key.it)); - *l_loop = MIPSI_BNE | MIPSF_S(tmp1) | ((as->mcp-l_loop-1) & 0xffffu); - - /* Load main position relative to tab->node into dest. */ - khash = irref_isk(refkey) ? ir_khash(irkey) : 1; - if (khash == 0) { - emit_tsi(as, MIPSI_LW, dest, tab, (int32_t)offsetof(GCtab, node)); - } else { - Reg tmphash = tmp1; - if (irref_isk(refkey)) - tmphash = ra_allock(as, khash, allow); - emit_dst(as, MIPSI_ADDU, dest, dest, tmp1); - lua_assert(sizeof(Node) == 24); - emit_dst(as, MIPSI_SUBU, tmp1, tmp2, tmp1); - emit_dta(as, MIPSI_SLL, tmp1, tmp1, 3); - emit_dta(as, MIPSI_SLL, tmp2, tmp1, 5); - emit_dst(as, MIPSI_AND, tmp1, tmp2, tmphash); - emit_tsi(as, MIPSI_LW, dest, tab, (int32_t)offsetof(GCtab, node)); - emit_tsi(as, MIPSI_LW, tmp2, tab, (int32_t)offsetof(GCtab, hmask)); - if (irref_isk(refkey)) { - /* Nothing to do. */ - } else if (irt_isstr(kt)) { - emit_tsi(as, MIPSI_LW, tmp1, key, (int32_t)offsetof(GCstr, hash)); - } else { /* Must match with hash*() in lj_tab.c. */ - emit_dst(as, MIPSI_SUBU, tmp1, tmp1, tmp2); - emit_rotr(as, tmp2, tmp2, dest, (-HASH_ROT3)&31); - emit_dst(as, MIPSI_XOR, tmp1, tmp1, tmp2); - emit_rotr(as, tmp1, tmp1, dest, (-HASH_ROT2-HASH_ROT1)&31); - emit_dst(as, MIPSI_SUBU, tmp2, tmp2, dest); - if (irt_isnum(kt)) { - emit_dst(as, MIPSI_XOR, tmp2, tmp2, tmp1); - if ((as->flags & JIT_F_MIPS32R2)) { - emit_dta(as, MIPSI_ROTR, dest, tmp1, (-HASH_ROT1)&31); - } else { - emit_dst(as, MIPSI_OR, dest, dest, tmp1); - emit_dta(as, MIPSI_SLL, tmp1, tmp1, HASH_ROT1); - emit_dta(as, MIPSI_SRL, dest, tmp1, (-HASH_ROT1)&31); - } - emit_dst(as, MIPSI_ADDU, tmp1, tmp1, tmp1); - emit_tg(as, MIPSI_MFC1, tmp2, key); - emit_tg(as, MIPSI_MFC1, tmp1, key+1); - } else { - emit_dst(as, MIPSI_XOR, tmp2, key, tmp1); - emit_rotr(as, dest, tmp1, tmp2, (-HASH_ROT1)&31); - emit_dst(as, MIPSI_ADDU, tmp1, key, ra_allock(as, HASH_BIAS, allow)); - } - } - } -} - -static void asm_hrefk(ASMState *as, IRIns *ir) -{ - IRIns *kslot = IR(ir->op2); - IRIns *irkey = IR(kslot->op1); - int32_t ofs = (int32_t)(kslot->op2 * sizeof(Node)); - int32_t kofs = ofs + (int32_t)offsetof(Node, key); - Reg dest = (ra_used(ir)||ofs > 32736) ? ra_dest(as, ir, RSET_GPR) : RID_NONE; - Reg node = ra_alloc1(as, ir->op1, RSET_GPR); - Reg key = RID_NONE, type = RID_TMP, idx = node; - RegSet allow = rset_exclude(RSET_GPR, node); - int32_t lo, hi; - lua_assert(ofs % sizeof(Node) == 0); - if (ofs > 32736) { - idx = dest; - rset_clear(allow, dest); - kofs = (int32_t)offsetof(Node, key); - } else if (ra_hasreg(dest)) { - emit_tsi(as, MIPSI_ADDIU, dest, node, ofs); - } - if (!irt_ispri(irkey->t)) { - key = ra_scratch(as, allow); - rset_clear(allow, key); - } - if (irt_isnum(irkey->t)) { - lo = (int32_t)ir_knum(irkey)->u32.lo; - hi = (int32_t)ir_knum(irkey)->u32.hi; - } else { - lo = irkey->i; - hi = irt_toitype(irkey->t); - if (!ra_hasreg(key)) - goto nolo; - } - asm_guard(as, MIPSI_BNE, key, lo ? ra_allock(as, lo, allow) : RID_ZERO); -nolo: - asm_guard(as, MIPSI_BNE, type, hi ? ra_allock(as, hi, allow) : RID_ZERO); - if (ra_hasreg(key)) emit_tsi(as, MIPSI_LW, key, idx, kofs+(LJ_BE?4:0)); - emit_tsi(as, MIPSI_LW, type, idx, kofs+(LJ_BE?0:4)); - if (ofs > 32736) - emit_tsi(as, MIPSI_ADDU, dest, node, ra_allock(as, ofs, allow)); -} - -static void asm_newref(ASMState *as, IRIns *ir) -{ - if (ir->r != RID_SINK) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_tab_newkey]; - IRRef args[3]; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ir->op1; /* GCtab *t */ - args[2] = ASMREF_TMP1; /* cTValue *key */ - asm_setupresult(as, ir, ci); /* TValue * */ - asm_gencall(as, ci, args); - asm_tvptr(as, ra_releasetmp(as, ASMREF_TMP1), ir->op2); - } -} - -static void asm_uref(ASMState *as, IRIns *ir) -{ - /* NYI: Check that UREFO is still open and not aliasing a slot. */ - Reg dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - MRef *v = &gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.v; - emit_lsptr(as, MIPSI_LW, dest, v, RSET_GPR); - } else { - Reg uv = ra_scratch(as, RSET_GPR); - Reg func = ra_alloc1(as, ir->op1, RSET_GPR); - if (ir->o == IR_UREFC) { - asm_guard(as, MIPSI_BEQ, RID_TMP, RID_ZERO); - emit_tsi(as, MIPSI_ADDIU, dest, uv, (int32_t)offsetof(GCupval, tv)); - emit_tsi(as, MIPSI_LBU, RID_TMP, uv, (int32_t)offsetof(GCupval, closed)); - } else { - emit_tsi(as, MIPSI_LW, dest, uv, (int32_t)offsetof(GCupval, v)); - } - emit_tsi(as, MIPSI_LW, uv, func, - (int32_t)offsetof(GCfuncL, uvptr) + 4*(int32_t)(ir->op2 >> 8)); - } -} - -static void asm_fref(ASMState *as, IRIns *ir) -{ - UNUSED(as); UNUSED(ir); - lua_assert(!ra_used(ir)); -} - -static void asm_strref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - IRRef ref = ir->op2, refk = ir->op1; - int32_t ofs = (int32_t)sizeof(GCstr); - Reg r; - if (irref_isk(ref)) { - IRRef tmp = refk; refk = ref; ref = tmp; - } else if (!irref_isk(refk)) { - Reg right, left = ra_alloc1(as, ir->op1, RSET_GPR); - IRIns *irr = IR(ir->op2); - if (ra_hasreg(irr->r)) { - ra_noweak(as, irr->r); - right = irr->r; - } else if (mayfuse(as, irr->op2) && - irr->o == IR_ADD && irref_isk(irr->op2) && - checki16(ofs + IR(irr->op2)->i)) { - ofs += IR(irr->op2)->i; - right = ra_alloc1(as, irr->op1, rset_exclude(RSET_GPR, left)); - } else { - right = ra_allocref(as, ir->op2, rset_exclude(RSET_GPR, left)); - } - emit_tsi(as, MIPSI_ADDIU, dest, dest, ofs); - emit_dst(as, MIPSI_ADDU, dest, left, right); - return; - } - r = ra_alloc1(as, ref, RSET_GPR); - ofs += IR(refk)->i; - if (checki16(ofs)) - emit_tsi(as, MIPSI_ADDIU, dest, r, ofs); - else - emit_dst(as, MIPSI_ADDU, dest, r, - ra_allock(as, ofs, rset_exclude(RSET_GPR, r))); -} - -/* -- Loads and stores ---------------------------------------------------- */ - -static MIPSIns asm_fxloadins(IRIns *ir) -{ - switch (irt_type(ir->t)) { - case IRT_I8: return MIPSI_LB; - case IRT_U8: return MIPSI_LBU; - case IRT_I16: return MIPSI_LH; - case IRT_U16: return MIPSI_LHU; - case IRT_NUM: return MIPSI_LDC1; - case IRT_FLOAT: return MIPSI_LWC1; - default: return MIPSI_LW; - } -} - -static MIPSIns asm_fxstoreins(IRIns *ir) -{ - switch (irt_type(ir->t)) { - case IRT_I8: case IRT_U8: return MIPSI_SB; - case IRT_I16: case IRT_U16: return MIPSI_SH; - case IRT_NUM: return MIPSI_SDC1; - case IRT_FLOAT: return MIPSI_SWC1; - default: return MIPSI_SW; - } -} - -static void asm_fload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg idx = ra_alloc1(as, ir->op1, RSET_GPR); - MIPSIns mi = asm_fxloadins(ir); - int32_t ofs; - if (ir->op2 == IRFL_TAB_ARRAY) { - ofs = asm_fuseabase(as, ir->op1); - if (ofs) { /* Turn the t->array load into an add for colocated arrays. */ - emit_tsi(as, MIPSI_ADDIU, dest, idx, ofs); - return; - } - } - ofs = field_ofs[ir->op2]; - lua_assert(!irt_isfp(ir->t)); - emit_tsi(as, mi, dest, idx, ofs); -} - -static void asm_fstore(ASMState *as, IRIns *ir) -{ - if (ir->r != RID_SINK) { - Reg src = ra_alloc1z(as, ir->op2, RSET_GPR); - IRIns *irf = IR(ir->op1); - Reg idx = ra_alloc1(as, irf->op1, rset_exclude(RSET_GPR, src)); - int32_t ofs = field_ofs[irf->op2]; - MIPSIns mi = asm_fxstoreins(ir); - lua_assert(!irt_isfp(ir->t)); - emit_tsi(as, mi, src, idx, ofs); - } -} - -static void asm_xload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); - lua_assert(!(ir->op2 & IRXLOAD_UNALIGNED)); - asm_fusexref(as, asm_fxloadins(ir), dest, ir->op1, RSET_GPR, 0); -} - -static void asm_xstore(ASMState *as, IRIns *ir, int32_t ofs) -{ - if (ir->r != RID_SINK) { - Reg src = ra_alloc1z(as, ir->op2, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); - asm_fusexref(as, asm_fxstoreins(ir), src, ir->op1, - rset_exclude(RSET_GPR, src), ofs); - } -} - -static void asm_ahuvload(ASMState *as, IRIns *ir) -{ - IRType1 t = ir->t; - Reg dest = RID_NONE, type = RID_TMP, idx; - RegSet allow = RSET_GPR; - int32_t ofs = 0; - if (ra_used(ir)) { - lua_assert(irt_isnum(t) || irt_isint(t) || irt_isaddr(t)); - dest = ra_dest(as, ir, irt_isnum(t) ? RSET_FPR : RSET_GPR); - rset_clear(allow, dest); - } - idx = asm_fuseahuref(as, ir->op1, &ofs, allow); - rset_clear(allow, idx); - if (irt_isnum(t)) { - asm_guard(as, MIPSI_BEQ, type, RID_ZERO); - emit_tsi(as, MIPSI_SLTIU, type, type, (int32_t)LJ_TISNUM); - if (ra_hasreg(dest)) - emit_hsi(as, MIPSI_LDC1, dest, idx, ofs); - } else { - asm_guard(as, MIPSI_BNE, type, ra_allock(as, irt_toitype(t), allow)); - if (ra_hasreg(dest)) emit_tsi(as, MIPSI_LW, dest, idx, ofs+(LJ_BE?4:0)); - } - emit_tsi(as, MIPSI_LW, type, idx, ofs+(LJ_BE?0:4)); -} - -static void asm_ahustore(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_GPR; - Reg idx, src = RID_NONE, type = RID_NONE; - int32_t ofs = 0; - if (ir->r == RID_SINK) - return; - if (irt_isnum(ir->t)) { - src = ra_alloc1(as, ir->op2, RSET_FPR); - } else { - if (!irt_ispri(ir->t)) { - src = ra_alloc1(as, ir->op2, allow); - rset_clear(allow, src); - } - type = ra_allock(as, (int32_t)irt_toitype(ir->t), allow); - rset_clear(allow, type); - } - idx = asm_fuseahuref(as, ir->op1, &ofs, allow); - if (irt_isnum(ir->t)) { - emit_hsi(as, MIPSI_SDC1, src, idx, ofs); - } else { - if (ra_hasreg(src)) - emit_tsi(as, MIPSI_SW, src, idx, ofs+(LJ_BE?4:0)); - emit_tsi(as, MIPSI_SW, type, idx, ofs+(LJ_BE?0:4)); - } -} - -static void asm_sload(ASMState *as, IRIns *ir) -{ - int32_t ofs = 8*((int32_t)ir->op1-1) + ((ir->op2 & IRSLOAD_FRAME) ? 4 : 0); - IRType1 t = ir->t; - Reg dest = RID_NONE, type = RID_NONE, base; - RegSet allow = RSET_GPR; - lua_assert(!(ir->op2 & IRSLOAD_PARENT)); /* Handled by asm_head_side(). */ - lua_assert(irt_isguard(t) || !(ir->op2 & IRSLOAD_TYPECHECK)); - lua_assert(!irt_isint(t) || (ir->op2 & (IRSLOAD_CONVERT|IRSLOAD_FRAME))); - if ((ir->op2 & IRSLOAD_CONVERT) && irt_isguard(t) && irt_isint(t)) { - dest = ra_scratch(as, RSET_FPR); - asm_tointg(as, ir, dest); - t.irt = IRT_NUM; /* Continue with a regular number type check. */ - } else if (ra_used(ir)) { - lua_assert(irt_isnum(t) || irt_isint(t) || irt_isaddr(t)); - dest = ra_dest(as, ir, irt_isnum(t) ? RSET_FPR : RSET_GPR); - rset_clear(allow, dest); - base = ra_alloc1(as, REF_BASE, allow); - rset_clear(allow, base); - if ((ir->op2 & IRSLOAD_CONVERT)) { - if (irt_isint(t)) { - Reg tmp = ra_scratch(as, RSET_FPR); - emit_tg(as, MIPSI_MFC1, dest, tmp); - emit_fg(as, MIPSI_CVT_W_D, tmp, tmp); - dest = tmp; - t.irt = IRT_NUM; /* Check for original type. */ - } else { - Reg tmp = ra_scratch(as, RSET_GPR); - emit_fg(as, MIPSI_CVT_D_W, dest, dest); - emit_tg(as, MIPSI_MTC1, tmp, dest); - dest = tmp; - t.irt = IRT_INT; /* Check for original type. */ - } - } - goto dotypecheck; - } - base = ra_alloc1(as, REF_BASE, allow); - rset_clear(allow, base); -dotypecheck: - if (irt_isnum(t)) { - if ((ir->op2 & IRSLOAD_TYPECHECK)) { - asm_guard(as, MIPSI_BEQ, RID_TMP, RID_ZERO); - emit_tsi(as, MIPSI_SLTIU, RID_TMP, RID_TMP, (int32_t)LJ_TISNUM); - type = RID_TMP; - } - if (ra_hasreg(dest)) emit_hsi(as, MIPSI_LDC1, dest, base, ofs); - } else { - if ((ir->op2 & IRSLOAD_TYPECHECK)) { - Reg ktype = ra_allock(as, irt_toitype(t), allow); - asm_guard(as, MIPSI_BNE, RID_TMP, ktype); - type = RID_TMP; - } - if (ra_hasreg(dest)) emit_tsi(as, MIPSI_LW, dest, base, ofs ^ (LJ_BE?4:0)); - } - if (ra_hasreg(type)) emit_tsi(as, MIPSI_LW, type, base, ofs ^ (LJ_BE?0:4)); -} - -/* -- Allocations --------------------------------------------------------- */ - -#if LJ_HASFFI -static void asm_cnew(ASMState *as, IRIns *ir) -{ - CTState *cts = ctype_ctsG(J2G(as->J)); - CTypeID ctypeid = (CTypeID)IR(ir->op1)->i; - CTSize sz = (ir->o == IR_CNEWI || ir->op2 == REF_NIL) ? - lj_ctype_size(cts, ctypeid) : (CTSize)IR(ir->op2)->i; - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_mem_newgco]; - IRRef args[2]; - RegSet allow = (RSET_GPR & ~RSET_SCRATCH); - RegSet drop = RSET_SCRATCH; - lua_assert(sz != CTSIZE_INVALID); - - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ASMREF_TMP1; /* MSize size */ - as->gcsteps++; - - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - ra_evictset(as, drop); - if (ra_used(ir)) - ra_destreg(as, ir, RID_RET); /* GCcdata * */ - - /* Initialize immutable cdata object. */ - if (ir->o == IR_CNEWI) { - int32_t ofs = sizeof(GCcdata); - lua_assert(sz == 4 || sz == 8); - if (sz == 8) { - ofs += 4; - lua_assert((ir+1)->o == IR_HIOP); - if (LJ_LE) ir++; - } - for (;;) { - Reg r = ra_alloc1z(as, ir->op2, allow); - emit_tsi(as, MIPSI_SW, r, RID_RET, ofs); - rset_clear(allow, r); - if (ofs == sizeof(GCcdata)) break; - ofs -= 4; if (LJ_BE) ir++; else ir--; - } - } - /* Initialize gct and ctypeid. lj_mem_newgco() already sets marked. */ - emit_tsi(as, MIPSI_SB, RID_RET+1, RID_RET, offsetof(GCcdata, gct)); - emit_tsi(as, MIPSI_SH, RID_TMP, RID_RET, offsetof(GCcdata, ctypeid)); - emit_ti(as, MIPSI_LI, RID_RET+1, ~LJ_TCDATA); - emit_ti(as, MIPSI_LI, RID_TMP, ctypeid); /* Lower 16 bit used. Sign-ext ok. */ - asm_gencall(as, ci, args); - ra_allockreg(as, (int32_t)(sz+sizeof(GCcdata)), - ra_releasetmp(as, ASMREF_TMP1)); -} -#else -#define asm_cnew(as, ir) ((void)0) -#endif - -/* -- Write barriers ------------------------------------------------------ */ - -static void asm_tbar(ASMState *as, IRIns *ir) -{ - Reg tab = ra_alloc1(as, ir->op1, RSET_GPR); - Reg mark = ra_scratch(as, rset_exclude(RSET_GPR, tab)); - Reg link = RID_TMP; - MCLabel l_end = emit_label(as); - emit_tsi(as, MIPSI_SW, link, tab, (int32_t)offsetof(GCtab, gclist)); - emit_tsi(as, MIPSI_SB, mark, tab, (int32_t)offsetof(GCtab, marked)); - emit_setgl(as, tab, gc.grayagain); - emit_getgl(as, link, gc.grayagain); - emit_dst(as, MIPSI_XOR, mark, mark, RID_TMP); /* Clear black bit. */ - emit_branch(as, MIPSI_BEQ, RID_TMP, RID_ZERO, l_end); - emit_tsi(as, MIPSI_ANDI, RID_TMP, mark, LJ_GC_BLACK); - emit_tsi(as, MIPSI_LBU, mark, tab, (int32_t)offsetof(GCtab, marked)); -} - -static void asm_obar(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_barrieruv]; - IRRef args[2]; - MCLabel l_end; - Reg obj, val, tmp; - /* No need for other object barriers (yet). */ - lua_assert(IR(ir->op1)->o == IR_UREFC); - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ir->op1; /* TValue *tv */ - asm_gencall(as, ci, args); - emit_tsi(as, MIPSI_ADDIU, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768); - obj = IR(ir->op1)->r; - tmp = ra_scratch(as, rset_exclude(RSET_GPR, obj)); - emit_branch(as, MIPSI_BEQ, RID_TMP, RID_ZERO, l_end); - emit_tsi(as, MIPSI_ANDI, tmp, tmp, LJ_GC_BLACK); - emit_branch(as, MIPSI_BEQ, RID_TMP, RID_ZERO, l_end); - emit_tsi(as, MIPSI_ANDI, RID_TMP, RID_TMP, LJ_GC_WHITES); - val = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, obj)); - emit_tsi(as, MIPSI_LBU, tmp, obj, - (int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)); - emit_tsi(as, MIPSI_LBU, RID_TMP, val, (int32_t)offsetof(GChead, marked)); -} - -/* -- Arithmetic and logic operations ------------------------------------- */ - -static void asm_fparith(ASMState *as, IRIns *ir, MIPSIns mi) -{ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - emit_fgh(as, mi, dest, left, right); -} - -static void asm_fpunary(ASMState *as, IRIns *ir, MIPSIns mi) -{ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_FPR); - emit_fg(as, mi, dest, left); -} - -static int asm_fpjoin_pow(ASMState *as, IRIns *ir) -{ - IRIns *irp = IR(ir->op1); - if (irp == ir-1 && irp->o == IR_MUL && !ra_used(irp)) { - IRIns *irpp = IR(irp->op1); - if (irpp == ir-2 && irpp->o == IR_FPMATH && - irpp->op2 == IRFPM_LOG2 && !ra_used(irpp)) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_pow]; - IRRef args[2]; - args[0] = irpp->op1; - args[1] = irp->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); - return 1; - } - } - return 0; -} - -static void asm_add(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - asm_fparith(as, ir, MIPSI_ADD_D); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (checki16(k)) { - emit_tsi(as, MIPSI_ADDIU, dest, left, k); - return; - } - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_dst(as, MIPSI_ADDU, dest, left, right); - } -} - -static void asm_sub(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - asm_fparith(as, ir, MIPSI_SUB_D); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - emit_dst(as, MIPSI_SUBU, dest, left, right); - } -} - -static void asm_mul(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - asm_fparith(as, ir, MIPSI_MUL_D); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - emit_dst(as, MIPSI_MUL, dest, left, right); - } -} - -static void asm_neg(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - asm_fpunary(as, ir, MIPSI_NEG_D); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - emit_dst(as, MIPSI_SUBU, dest, RID_ZERO, left); - } -} - -static void asm_arithov(ASMState *as, IRIns *ir) -{ - Reg right, left, tmp, dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op2)) { - int k = IR(ir->op2)->i; - if (ir->o == IR_SUBOV) k = -k; - if (checki16(k)) { /* (dest < left) == (k >= 0 ? 1 : 0) */ - left = ra_alloc1(as, ir->op1, RSET_GPR); - asm_guard(as, k >= 0 ? MIPSI_BNE : MIPSI_BEQ, RID_TMP, RID_ZERO); - emit_dst(as, MIPSI_SLT, RID_TMP, dest, dest == left ? RID_TMP : left); - emit_tsi(as, MIPSI_ADDIU, dest, left, k); - if (dest == left) emit_move(as, RID_TMP, left); - return; - } - } - left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - tmp = ra_scratch(as, rset_exclude(rset_exclude(rset_exclude(RSET_GPR, left), - right), dest)); - asm_guard(as, MIPSI_BLTZ, RID_TMP, 0); - emit_dst(as, MIPSI_AND, RID_TMP, RID_TMP, tmp); - if (ir->o == IR_ADDOV) { /* ((dest^left) & (dest^right)) < 0 */ - emit_dst(as, MIPSI_XOR, RID_TMP, dest, dest == right ? RID_TMP : right); - } else { /* ((dest^left) & (dest^~right)) < 0 */ - emit_dst(as, MIPSI_XOR, RID_TMP, RID_TMP, dest); - emit_dst(as, MIPSI_NOR, RID_TMP, dest == right ? RID_TMP : right, RID_ZERO); - } - emit_dst(as, MIPSI_XOR, tmp, dest, dest == left ? RID_TMP : left); - emit_dst(as, ir->o == IR_ADDOV ? MIPSI_ADDU : MIPSI_SUBU, dest, left, right); - if (dest == left || dest == right) - emit_move(as, RID_TMP, dest == left ? left : right); -} - -static void asm_mulov(ASMState *as, IRIns *ir) -{ -#if LJ_DUALNUM -#error "NYI: MULOV" -#else - UNUSED(as); UNUSED(ir); lua_assert(0); /* Unused in single-number mode. */ -#endif -} - -#if LJ_HASFFI -static void asm_add64(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_alloc1(as, ir->op1, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (k == 0) { - emit_dst(as, MIPSI_ADDU, dest, left, RID_TMP); - goto loarith; - } else if (checki16(k)) { - emit_dst(as, MIPSI_ADDU, dest, dest, RID_TMP); - emit_tsi(as, MIPSI_ADDIU, dest, left, k); - goto loarith; - } - } - emit_dst(as, MIPSI_ADDU, dest, dest, RID_TMP); - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_dst(as, MIPSI_ADDU, dest, left, right); -loarith: - ir--; - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc1(as, ir->op1, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (k == 0) { - if (dest != left) - emit_move(as, dest, left); - return; - } else if (checki16(k)) { - if (dest == left) { - Reg tmp = ra_scratch(as, rset_exclude(RSET_GPR, left)); - emit_move(as, dest, tmp); - dest = tmp; - } - emit_dst(as, MIPSI_SLTU, RID_TMP, dest, left); - emit_tsi(as, MIPSI_ADDIU, dest, left, k); - return; - } - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - if (dest == left && dest == right) { - Reg tmp = ra_scratch(as, rset_exclude(rset_exclude(RSET_GPR, left), right)); - emit_move(as, dest, tmp); - dest = tmp; - } - emit_dst(as, MIPSI_SLTU, RID_TMP, dest, dest == left ? right : left); - emit_dst(as, MIPSI_ADDU, dest, left, right); -} - -static void asm_sub64(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - emit_dst(as, MIPSI_SUBU, dest, dest, RID_TMP); - emit_dst(as, MIPSI_SUBU, dest, left, right); - ir--; - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - if (dest == left) { - Reg tmp = ra_scratch(as, rset_exclude(rset_exclude(RSET_GPR, left), right)); - emit_move(as, dest, tmp); - dest = tmp; - } - emit_dst(as, MIPSI_SLTU, RID_TMP, left, dest); - emit_dst(as, MIPSI_SUBU, dest, left, right); -} - -static void asm_neg64(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - emit_dst(as, MIPSI_SUBU, dest, dest, RID_TMP); - emit_dst(as, MIPSI_SUBU, dest, RID_ZERO, left); - ir--; - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc1(as, ir->op1, RSET_GPR); - emit_dst(as, MIPSI_SLTU, RID_TMP, RID_ZERO, dest); - emit_dst(as, MIPSI_SUBU, dest, RID_ZERO, left); -} -#endif - -static void asm_bitnot(ASMState *as, IRIns *ir) -{ - Reg left, right, dest = ra_dest(as, ir, RSET_GPR); - IRIns *irl = IR(ir->op1); - if (mayfuse(as, ir->op1) && irl->o == IR_BOR) { - left = ra_alloc2(as, irl, RSET_GPR); - right = (left >> 8); left &= 255; - } else { - left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - right = RID_ZERO; - } - emit_dst(as, MIPSI_NOR, dest, left, right); -} - -static void asm_bitswap(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - if ((as->flags & JIT_F_MIPS32R2)) { - emit_dta(as, MIPSI_ROTR, dest, RID_TMP, 16); - emit_dst(as, MIPSI_WSBH, RID_TMP, 0, left); - } else { - Reg tmp = ra_scratch(as, rset_exclude(rset_exclude(RSET_GPR, left), dest)); - emit_dst(as, MIPSI_OR, dest, dest, tmp); - emit_dst(as, MIPSI_OR, dest, dest, RID_TMP); - emit_tsi(as, MIPSI_ANDI, dest, dest, 0xff00); - emit_dta(as, MIPSI_SLL, RID_TMP, RID_TMP, 8); - emit_dta(as, MIPSI_SRL, dest, left, 8); - emit_tsi(as, MIPSI_ANDI, RID_TMP, left, 0xff00); - emit_dst(as, MIPSI_OR, tmp, tmp, RID_TMP); - emit_dta(as, MIPSI_SRL, tmp, left, 24); - emit_dta(as, MIPSI_SLL, RID_TMP, left, 24); - } -} - -static void asm_bitop(ASMState *as, IRIns *ir, MIPSIns mi, MIPSIns mik) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (checku16(k)) { - emit_tsi(as, mik, dest, left, k); - return; - } - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_dst(as, mi, dest, left, right); -} - -static void asm_bitshift(ASMState *as, IRIns *ir, MIPSIns mi, MIPSIns mik) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op2)) { /* Constant shifts. */ - uint32_t shift = (uint32_t)(IR(ir->op2)->i & 31); - emit_dta(as, mik, dest, ra_hintalloc(as, ir->op1, dest, RSET_GPR), shift); - } else { - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - emit_dst(as, mi, dest, right, left); /* Shift amount is in rs. */ - } -} - -static void asm_bitror(ASMState *as, IRIns *ir) -{ - if ((as->flags & JIT_F_MIPS32R2)) { - asm_bitshift(as, ir, MIPSI_ROTRV, MIPSI_ROTR); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op2)) { /* Constant shifts. */ - uint32_t shift = (uint32_t)(IR(ir->op2)->i & 31); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - emit_rotr(as, dest, left, RID_TMP, shift); - } else { - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - emit_dst(as, MIPSI_OR, dest, dest, RID_TMP); - emit_dst(as, MIPSI_SRLV, dest, right, left); - emit_dst(as, MIPSI_SLLV, RID_TMP, RID_TMP, left); - emit_dst(as, MIPSI_SUBU, RID_TMP, ra_allock(as, 32, RSET_GPR), right); - } - } -} - -static void asm_min_max(ASMState *as, IRIns *ir, int ismax) -{ - if (irt_isnum(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - if (dest == left) { - emit_fg(as, MIPSI_MOVT_D, dest, right); - } else { - emit_fg(as, MIPSI_MOVF_D, dest, left); - if (dest != right) emit_fg(as, MIPSI_MOV_D, dest, right); - } - emit_fgh(as, MIPSI_C_OLT_D, 0, ismax ? left : right, ismax ? right : left); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - if (dest == left) { - emit_dst(as, MIPSI_MOVN, dest, right, RID_TMP); - } else { - emit_dst(as, MIPSI_MOVZ, dest, left, RID_TMP); - if (dest != right) emit_move(as, dest, right); - } - emit_dst(as, MIPSI_SLT, RID_TMP, - ismax ? left : right, ismax ? right : left); - } -} - -/* -- Comparisons --------------------------------------------------------- */ - -static void asm_comp(ASMState *as, IRIns *ir) -{ - /* ORDER IR: LT GE LE GT ULT UGE ULE UGT. */ - IROp op = ir->o; - if (irt_isnum(ir->t)) { - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - asm_guard(as, (op&1) ? MIPSI_BC1T : MIPSI_BC1F, 0, 0); - emit_fgh(as, MIPSI_C_OLT_D + ((op&3) ^ ((op>>2)&1)), 0, left, right); - } else { - Reg right, left = ra_alloc1(as, ir->op1, RSET_GPR); - if (op == IR_ABC) op = IR_UGT; - if ((op&4) == 0 && irref_isk(ir->op2) && IR(ir->op2)->i == 0) { - MIPSIns mi = (op&2) ? ((op&1) ? MIPSI_BLEZ : MIPSI_BGTZ) : - ((op&1) ? MIPSI_BLTZ : MIPSI_BGEZ); - asm_guard(as, mi, left, 0); - } else { - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if ((op&2)) k++; - if (checki16(k)) { - asm_guard(as, (op&1) ? MIPSI_BNE : MIPSI_BEQ, RID_TMP, RID_ZERO); - emit_tsi(as, (op&4) ? MIPSI_SLTIU : MIPSI_SLTI, - RID_TMP, left, k); - return; - } - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - asm_guard(as, ((op^(op>>1))&1) ? MIPSI_BNE : MIPSI_BEQ, RID_TMP, RID_ZERO); - emit_dst(as, (op&4) ? MIPSI_SLTU : MIPSI_SLT, - RID_TMP, (op&2) ? right : left, (op&2) ? left : right); - } - } -} - -static void asm_compeq(ASMState *as, IRIns *ir) -{ - Reg right, left = ra_alloc2(as, ir, irt_isnum(ir->t) ? RSET_FPR : RSET_GPR); - right = (left >> 8); left &= 255; - if (irt_isnum(ir->t)) { - asm_guard(as, (ir->o & 1) ? MIPSI_BC1T : MIPSI_BC1F, 0, 0); - emit_fgh(as, MIPSI_C_EQ_D, 0, left, right); - } else { - asm_guard(as, (ir->o & 1) ? MIPSI_BEQ : MIPSI_BNE, left, right); - } -} - -#if LJ_HASFFI -/* 64 bit integer comparisons. */ -static void asm_comp64(ASMState *as, IRIns *ir) -{ - /* ORDER IR: LT GE LE GT ULT UGE ULE UGT. */ - IROp op = (ir-1)->o; - MCLabel l_end; - Reg rightlo, leftlo, righthi, lefthi = ra_alloc2(as, ir, RSET_GPR); - righthi = (lefthi >> 8); lefthi &= 255; - leftlo = ra_alloc2(as, ir-1, - rset_exclude(rset_exclude(RSET_GPR, lefthi), righthi)); - rightlo = (leftlo >> 8); leftlo &= 255; - asm_guard(as, ((op^(op>>1))&1) ? MIPSI_BNE : MIPSI_BEQ, RID_TMP, RID_ZERO); - l_end = emit_label(as); - if (lefthi != righthi) - emit_dst(as, (op&4) ? MIPSI_SLTU : MIPSI_SLT, RID_TMP, - (op&2) ? righthi : lefthi, (op&2) ? lefthi : righthi); - emit_dst(as, MIPSI_SLTU, RID_TMP, - (op&2) ? rightlo : leftlo, (op&2) ? leftlo : rightlo); - if (lefthi != righthi) - emit_branch(as, MIPSI_BEQ, lefthi, righthi, l_end); -} - -static void asm_comp64eq(ASMState *as, IRIns *ir) -{ - Reg tmp, right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - asm_guard(as, ((ir-1)->o & 1) ? MIPSI_BEQ : MIPSI_BNE, RID_TMP, RID_ZERO); - tmp = ra_scratch(as, rset_exclude(rset_exclude(RSET_GPR, left), right)); - emit_dst(as, MIPSI_OR, RID_TMP, RID_TMP, tmp); - emit_dst(as, MIPSI_XOR, tmp, left, right); - left = ra_alloc2(as, ir-1, RSET_GPR); - right = (left >> 8); left &= 255; - emit_dst(as, MIPSI_XOR, RID_TMP, left, right); -} -#endif - -/* -- Support for 64 bit ops in 32 bit mode ------------------------------- */ - -/* Hiword op of a split 64 bit op. Previous op must be the loword op. */ -static void asm_hiop(ASMState *as, IRIns *ir) -{ -#if LJ_HASFFI - /* HIOP is marked as a store because it needs its own DCE logic. */ - int uselo = ra_used(ir-1), usehi = ra_used(ir); /* Loword/hiword used? */ - if (LJ_UNLIKELY(!(as->flags & JIT_F_OPT_DCE))) uselo = usehi = 1; - if ((ir-1)->o == IR_CONV) { /* Conversions to/from 64 bit. */ - as->curins--; /* Always skip the CONV. */ - if (usehi || uselo) - asm_conv64(as, ir); - return; - } else if ((ir-1)->o < IR_EQ) { /* 64 bit integer comparisons. ORDER IR. */ - as->curins--; /* Always skip the loword comparison. */ - asm_comp64(as, ir); - return; - } else if ((ir-1)->o <= IR_NE) { /* 64 bit integer comparisons. ORDER IR. */ - as->curins--; /* Always skip the loword comparison. */ - asm_comp64eq(as, ir); - return; - } else if ((ir-1)->o == IR_XSTORE) { - as->curins--; /* Handle both stores here. */ - if ((ir-1)->r != RID_SINK) { - asm_xstore(as, ir, LJ_LE ? 4 : 0); - asm_xstore(as, ir-1, LJ_LE ? 0 : 4); - } - return; - } - if (!usehi) return; /* Skip unused hiword op for all remaining ops. */ - switch ((ir-1)->o) { - case IR_ADD: as->curins--; asm_add64(as, ir); break; - case IR_SUB: as->curins--; asm_sub64(as, ir); break; - case IR_NEG: as->curins--; asm_neg64(as, ir); break; - case IR_CALLN: - case IR_CALLXS: - if (!uselo) - ra_allocref(as, ir->op1, RID2RSET(RID_RETLO)); /* Mark lo op as used. */ - break; - case IR_CNEWI: - /* Nothing to do here. Handled by lo op itself. */ - break; - default: lua_assert(0); break; - } -#else - UNUSED(as); UNUSED(ir); lua_assert(0); /* Unused without FFI. */ -#endif -} - -/* -- Stack handling ------------------------------------------------------ */ - -/* Check Lua stack size for overflow. Use exit handler as fallback. */ -static void asm_stack_check(ASMState *as, BCReg topslot, - IRIns *irp, RegSet allow, ExitNo exitno) -{ - /* Try to get an unused temp. register, otherwise spill/restore RID_RET*. */ - Reg tmp, pbase = irp ? (ra_hasreg(irp->r) ? irp->r : RID_TMP) : RID_BASE; - ExitNo oldsnap = as->snapno; - rset_clear(allow, pbase); - tmp = allow ? rset_pickbot(allow) : - (pbase == RID_RETHI ? RID_RETLO : RID_RETHI); - as->snapno = exitno; - asm_guard(as, MIPSI_BNE, RID_TMP, RID_ZERO); - as->snapno = oldsnap; - if (allow == RSET_EMPTY) /* Restore temp. register. */ - emit_tsi(as, MIPSI_LW, tmp, RID_SP, 0); - else - ra_modified(as, tmp); - emit_tsi(as, MIPSI_SLTIU, RID_TMP, RID_TMP, (int32_t)(8*topslot)); - emit_dst(as, MIPSI_SUBU, RID_TMP, tmp, pbase); - emit_tsi(as, MIPSI_LW, tmp, tmp, offsetof(lua_State, maxstack)); - if (pbase == RID_TMP) - emit_getgl(as, RID_TMP, jit_base); - emit_getgl(as, tmp, jit_L); - if (allow == RSET_EMPTY) /* Spill temp. register. */ - emit_tsi(as, MIPSI_SW, tmp, RID_SP, 0); -} - -/* Restore Lua stack from on-trace state. */ -static void asm_stack_restore(ASMState *as, SnapShot *snap) -{ - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - SnapEntry *flinks = &as->T->snapmap[snap_nextofs(as->T, snap)-1]; - MSize n, nent = snap->nent; - /* Store the value of all modified slots to the Lua stack. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - BCReg s = snap_slot(sn); - int32_t ofs = 8*((int32_t)s-1); - IRRef ref = snap_ref(sn); - IRIns *ir = IR(ref); - if ((sn & SNAP_NORESTORE)) - continue; - if (irt_isnum(ir->t)) { - Reg src = ra_alloc1(as, ref, RSET_FPR); - emit_hsi(as, MIPSI_SDC1, src, RID_BASE, ofs); - } else { - Reg type; - RegSet allow = rset_exclude(RSET_GPR, RID_BASE); - lua_assert(irt_ispri(ir->t) || irt_isaddr(ir->t) || irt_isinteger(ir->t)); - if (!irt_ispri(ir->t)) { - Reg src = ra_alloc1(as, ref, allow); - rset_clear(allow, src); - emit_tsi(as, MIPSI_SW, src, RID_BASE, ofs+(LJ_BE?4:0)); - } - if ((sn & (SNAP_CONT|SNAP_FRAME))) { - if (s == 0) continue; /* Do not overwrite link to previous frame. */ - type = ra_allock(as, (int32_t)(*flinks--), allow); - } else { - type = ra_allock(as, (int32_t)irt_toitype(ir->t), allow); - } - emit_tsi(as, MIPSI_SW, type, RID_BASE, ofs+(LJ_BE?0:4)); - } - checkmclim(as); - } - lua_assert(map + nent == flinks); -} - -/* -- GC handling --------------------------------------------------------- */ - -/* Check GC threshold and do one or more GC steps. */ -static void asm_gc_check(ASMState *as) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_step_jit]; - IRRef args[2]; - MCLabel l_end; - Reg tmp; - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - /* Exit trace if in GCSatomic or GCSfinalize. Avoids syncing GC objects. */ - /* Assumes asm_snap_prep() already done. */ - asm_guard(as, MIPSI_BNE, RID_RET, RID_ZERO); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ASMREF_TMP2; /* MSize steps */ - asm_gencall(as, ci, args); - emit_tsi(as, MIPSI_ADDIU, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768); - tmp = ra_releasetmp(as, ASMREF_TMP2); - emit_loadi(as, tmp, as->gcsteps); - /* Jump around GC step if GC total < GC threshold. */ - emit_branch(as, MIPSI_BNE, RID_TMP, RID_ZERO, l_end); - emit_dst(as, MIPSI_SLTU, RID_TMP, RID_TMP, tmp); - emit_getgl(as, tmp, gc.threshold); - emit_getgl(as, RID_TMP, gc.total); - as->gcsteps = 0; - checkmclim(as); -} - -/* -- Loop handling ------------------------------------------------------- */ - -/* Fixup the loop branch. */ -static void asm_loop_fixup(ASMState *as) -{ - MCode *p = as->mctop; - MCode *target = as->mcp; - p[-1] = MIPSI_NOP; - if (as->loopinv) { /* Inverted loop branch? */ - /* asm_guard already inverted the cond branch. Only patch the target. */ - p[-3] |= ((target-p+2) & 0x0000ffffu); - } else { - p[-2] = MIPSI_J|(((uintptr_t)target>>2)&0x03ffffffu); - } -} - -/* -- Head of trace ------------------------------------------------------- */ - -/* Coalesce BASE register for a root trace. */ -static void asm_head_root_base(ASMState *as) -{ - IRIns *ir = IR(REF_BASE); - Reg r = ir->r; - if (as->loopinv) as->mctop--; - if (ra_hasreg(r)) { - ra_free(as, r); - if (rset_test(as->modset, r) || irt_ismarked(ir->t)) - ir->r = RID_INIT; /* No inheritance for modified BASE register. */ - if (r != RID_BASE) - emit_move(as, r, RID_BASE); - } -} - -/* Coalesce BASE register for a side trace. */ -static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) -{ - IRIns *ir = IR(REF_BASE); - Reg r = ir->r; - if (as->loopinv) as->mctop--; - if (ra_hasreg(r)) { - ra_free(as, r); - if (rset_test(as->modset, r) || irt_ismarked(ir->t)) - ir->r = RID_INIT; /* No inheritance for modified BASE register. */ - if (irp->r == r) { - rset_clear(allow, r); /* Mark same BASE register as coalesced. */ - } else if (ra_hasreg(irp->r) && rset_test(as->freeset, irp->r)) { - rset_clear(allow, irp->r); - emit_move(as, r, irp->r); /* Move from coalesced parent reg. */ - } else { - emit_getgl(as, r, jit_base); /* Otherwise reload BASE. */ - } - } - return allow; -} - -/* -- Tail of trace ------------------------------------------------------- */ - -/* Fixup the tail code. */ -static void asm_tail_fixup(ASMState *as, TraceNo lnk) -{ - MCode *target = lnk ? traceref(as->J,lnk)->mcode : (MCode *)lj_vm_exit_interp; - int32_t spadj = as->T->spadjust; - MCode *p = as->mctop-1; - *p = spadj ? (MIPSI_ADDIU|MIPSF_T(RID_SP)|MIPSF_S(RID_SP)|spadj) : MIPSI_NOP; - p[-1] = MIPSI_J|(((uintptr_t)target>>2)&0x03ffffffu); -} - -/* Prepare tail of code. */ -static void asm_tail_prep(ASMState *as) -{ - as->mcp = as->mctop-2; /* Leave room for branch plus nop or stack adj. */ - as->invmcp = as->loopref ? as->mcp : NULL; -} - -/* -- Instruction dispatch ------------------------------------------------ */ - -/* Assemble a single instruction. */ -static void asm_ir(ASMState *as, IRIns *ir) -{ - switch ((IROp)ir->o) { - /* Miscellaneous ops. */ - case IR_LOOP: asm_loop(as); break; - case IR_NOP: case IR_XBAR: lua_assert(!ra_used(ir)); break; - case IR_USE: - ra_alloc1(as, ir->op1, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); break; - case IR_PHI: asm_phi(as, ir); break; - case IR_HIOP: asm_hiop(as, ir); break; - case IR_GCSTEP: asm_gcstep(as, ir); break; - - /* Guarded assertions. */ - case IR_EQ: case IR_NE: asm_compeq(as, ir); break; - case IR_LT: case IR_GE: case IR_LE: case IR_GT: - case IR_ULT: case IR_UGE: case IR_ULE: case IR_UGT: - case IR_ABC: - asm_comp(as, ir); - break; - - case IR_RETF: asm_retf(as, ir); break; - - /* Bit ops. */ - case IR_BNOT: asm_bitnot(as, ir); break; - case IR_BSWAP: asm_bitswap(as, ir); break; - - case IR_BAND: asm_bitop(as, ir, MIPSI_AND, MIPSI_ANDI); break; - case IR_BOR: asm_bitop(as, ir, MIPSI_OR, MIPSI_ORI); break; - case IR_BXOR: asm_bitop(as, ir, MIPSI_XOR, MIPSI_XORI); break; - - case IR_BSHL: asm_bitshift(as, ir, MIPSI_SLLV, MIPSI_SLL); break; - case IR_BSHR: asm_bitshift(as, ir, MIPSI_SRLV, MIPSI_SRL); break; - case IR_BSAR: asm_bitshift(as, ir, MIPSI_SRAV, MIPSI_SRA); break; - case IR_BROL: lua_assert(0); break; - case IR_BROR: asm_bitror(as, ir); break; - - /* Arithmetic ops. */ - case IR_ADD: asm_add(as, ir); break; - case IR_SUB: asm_sub(as, ir); break; - case IR_MUL: asm_mul(as, ir); break; - case IR_DIV: asm_fparith(as, ir, MIPSI_DIV_D); break; - case IR_MOD: asm_callid(as, ir, IRCALL_lj_vm_modi); break; - case IR_POW: asm_callid(as, ir, IRCALL_lj_vm_powi); break; - case IR_NEG: asm_neg(as, ir); break; - - case IR_ABS: asm_fpunary(as, ir, MIPSI_ABS_D); break; - case IR_ATAN2: asm_callid(as, ir, IRCALL_atan2); break; - case IR_LDEXP: asm_callid(as, ir, IRCALL_ldexp); break; - case IR_MIN: asm_min_max(as, ir, 0); break; - case IR_MAX: asm_min_max(as, ir, 1); break; - case IR_FPMATH: - if (ir->op2 == IRFPM_EXP2 && asm_fpjoin_pow(as, ir)) - break; - if (ir->op2 <= IRFPM_TRUNC) - asm_callround(as, ir, IRCALL_lj_vm_floor + ir->op2); - else if (ir->op2 == IRFPM_SQRT) - asm_fpunary(as, ir, MIPSI_SQRT_D); - else - asm_callid(as, ir, IRCALL_lj_vm_floor + ir->op2); - break; - - /* Overflow-checking arithmetic ops. */ - case IR_ADDOV: asm_arithov(as, ir); break; - case IR_SUBOV: asm_arithov(as, ir); break; - case IR_MULOV: asm_mulov(as, ir); break; - - /* Memory references. */ - case IR_AREF: asm_aref(as, ir); break; - case IR_HREF: asm_href(as, ir); break; - case IR_HREFK: asm_hrefk(as, ir); break; - case IR_NEWREF: asm_newref(as, ir); break; - case IR_UREFO: case IR_UREFC: asm_uref(as, ir); break; - case IR_FREF: asm_fref(as, ir); break; - case IR_STRREF: asm_strref(as, ir); break; - - /* Loads and stores. */ - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - asm_ahuvload(as, ir); - break; - case IR_FLOAD: asm_fload(as, ir); break; - case IR_XLOAD: asm_xload(as, ir); break; - case IR_SLOAD: asm_sload(as, ir); break; - - case IR_ASTORE: case IR_HSTORE: case IR_USTORE: asm_ahustore(as, ir); break; - case IR_FSTORE: asm_fstore(as, ir); break; - case IR_XSTORE: asm_xstore(as, ir, 0); break; - - /* Allocations. */ - case IR_SNEW: case IR_XSNEW: asm_snew(as, ir); break; - case IR_TNEW: asm_tnew(as, ir); break; - case IR_TDUP: asm_tdup(as, ir); break; - case IR_CNEW: case IR_CNEWI: asm_cnew(as, ir); break; - - /* Write barriers. */ - case IR_TBAR: asm_tbar(as, ir); break; - case IR_OBAR: asm_obar(as, ir); break; - - /* Type conversions. */ - case IR_CONV: asm_conv(as, ir); break; - case IR_TOBIT: asm_tobit(as, ir); break; - case IR_TOSTR: asm_tostr(as, ir); break; - case IR_STRTO: asm_strto(as, ir); break; - - /* Calls. */ - case IR_CALLN: case IR_CALLL: case IR_CALLS: asm_call(as, ir); break; - case IR_CALLXS: asm_callx(as, ir); break; - case IR_CARG: break; - - default: - setintV(&as->J->errinfo, ir->o); - lj_trace_err_info(as->J, LJ_TRERR_NYIIR); - break; - } -} - -/* -- Trace setup --------------------------------------------------------- */ - -/* Ensure there are enough stack slots for call arguments. */ -static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - IRRef args[CCI_NARGS_MAX*2]; - uint32_t i, nargs = (int)CCI_NARGS(ci); - int nslots = 4, ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR; - asm_collectargs(as, ir, ci, args); - for (i = 0; i < nargs; i++) { - if (args[i] && irt_isfp(IR(args[i])->t) && - nfpr > 0 && !(ci->flags & CCI_VARARG)) { - nfpr--; - ngpr -= irt_isnum(IR(args[i])->t) ? 2 : 1; - } else if (args[i] && irt_isnum(IR(args[i])->t)) { - nfpr = 0; - ngpr = ngpr & ~1; - if (ngpr > 0) ngpr -= 2; else nslots = (nslots+3) & ~1; - } else { - nfpr = 0; - if (ngpr > 0) ngpr--; else nslots++; - } - } - if (nslots > as->evenspill) /* Leave room for args in stack slots. */ - as->evenspill = nslots; - return irt_isfp(ir->t) ? REGSP_HINT(RID_FPRET) : REGSP_HINT(RID_RET); -} - -static void asm_setup_target(ASMState *as) -{ - asm_sparejump_setup(as); - asm_exitstub_setup(as); -} - -/* -- Trace patching ------------------------------------------------------ */ - -/* Patch exit jumps of existing machine code to a new target. */ -void lj_asm_patchexit(jit_State *J, GCtrace *T, ExitNo exitno, MCode *target) -{ - MCode *p = T->mcode; - MCode *pe = (MCode *)((char *)p + T->szmcode); - MCode *px = exitstub_trace_addr(T, exitno); - MCode *cstart = NULL, *cstop = NULL; - MCode *mcarea = lj_mcode_patch(J, p, 0); - MCode exitload = MIPSI_LI | MIPSF_T(RID_TMP) | exitno; - MCode tjump = MIPSI_J|(((uintptr_t)target>>2)&0x03ffffffu); - for (p++; p < pe; p++) { - if (*p == exitload) { /* Look for load of exit number. */ - if (((p[-1] ^ (px-p)) & 0xffffu) == 0) { /* Look for exitstub branch. */ - ptrdiff_t delta = target - p; - if (((delta + 0x8000) >> 16) == 0) { /* Patch in-range branch. */ - patchbranch: - p[-1] = (p[-1] & 0xffff0000u) | (delta & 0xffffu); - *p = MIPSI_NOP; /* Replace the load of the exit number. */ - cstop = p; - if (!cstart) cstart = p-1; - } else { /* Branch out of range. Use spare jump slot in mcarea. */ - int i; - for (i = 2; i < 2+MIPS_SPAREJUMP*2; i += 2) { - if (mcarea[i] == tjump) { - delta = mcarea+i - p; - goto patchbranch; - } else if (mcarea[i] == MIPSI_NOP) { - mcarea[i] = tjump; - cstart = mcarea+i; - delta = mcarea+i - p; - goto patchbranch; - } - } - /* Ignore jump slot overflow. Child trace is simply not attached. */ - } - } else if (p+1 == pe) { - /* Patch NOP after code for inverted loop branch. Use of J is ok. */ - lua_assert(p[1] == MIPSI_NOP); - p[1] = tjump; - *p = MIPSI_NOP; /* Replace the load of the exit number. */ - cstop = p+2; - if (!cstart) cstart = p+1; - } - } - } - if (cstart) lj_mcode_sync(cstart, cstop); - lj_mcode_patch(J, mcarea, 1); -} - diff --git a/deps/luajit/src/lj_asm_ppc.h b/deps/luajit/src/lj_asm_ppc.h deleted file mode 100644 index 2c5d74a..0000000 --- a/deps/luajit/src/lj_asm_ppc.h +++ /dev/null @@ -1,2169 +0,0 @@ -/* -** PPC IR assembler (SSA IR -> machine code). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Register allocator extensions --------------------------------------- */ - -/* Allocate a register with a hint. */ -static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow) -{ - Reg r = IR(ref)->r; - if (ra_noreg(r)) { - if (!ra_hashint(r) && !iscrossref(as, ref)) - ra_sethint(IR(ref)->r, hint); /* Propagate register hint. */ - r = ra_allocref(as, ref, allow); - } - ra_noweak(as, r); - return r; -} - -/* Allocate two source registers for three-operand instructions. */ -static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow) -{ - IRIns *irl = IR(ir->op1), *irr = IR(ir->op2); - Reg left = irl->r, right = irr->r; - if (ra_hasreg(left)) { - ra_noweak(as, left); - if (ra_noreg(right)) - right = ra_allocref(as, ir->op2, rset_exclude(allow, left)); - else - ra_noweak(as, right); - } else if (ra_hasreg(right)) { - ra_noweak(as, right); - left = ra_allocref(as, ir->op1, rset_exclude(allow, right)); - } else if (ra_hashint(right)) { - right = ra_allocref(as, ir->op2, allow); - left = ra_alloc1(as, ir->op1, rset_exclude(allow, right)); - } else { - left = ra_allocref(as, ir->op1, allow); - right = ra_alloc1(as, ir->op2, rset_exclude(allow, left)); - } - return left | (right << 8); -} - -/* -- Guard handling ------------------------------------------------------ */ - -/* Setup exit stubs after the end of each trace. */ -static void asm_exitstub_setup(ASMState *as, ExitNo nexits) -{ - ExitNo i; - MCode *mxp = as->mctop; - if (mxp - (nexits + 3 + MCLIM_REDZONE) < as->mclim) - asm_mclimit(as); - /* 1: mflr r0; bl ->vm_exit_handler; li r0, traceno; bl <1; bl <1; ... */ - for (i = nexits-1; (int32_t)i >= 0; i--) - *--mxp = PPCI_BL|(((-3-i)&0x00ffffffu)<<2); - *--mxp = PPCI_LI|PPCF_T(RID_TMP)|as->T->traceno; /* Read by exit handler. */ - mxp--; - *mxp = PPCI_BL|((((MCode *)(void *)lj_vm_exit_handler-mxp)&0x00ffffffu)<<2); - *--mxp = PPCI_MFLR|PPCF_T(RID_TMP); - as->mctop = mxp; -} - -static MCode *asm_exitstub_addr(ASMState *as, ExitNo exitno) -{ - /* Keep this in-sync with exitstub_trace_addr(). */ - return as->mctop + exitno + 3; -} - -/* Emit conditional branch to exit for guard. */ -static void asm_guardcc(ASMState *as, PPCCC cc) -{ - MCode *target = asm_exitstub_addr(as, as->snapno); - MCode *p = as->mcp; - if (LJ_UNLIKELY(p == as->invmcp)) { - as->loopinv = 1; - *p = PPCI_B | (((target-p) & 0x00ffffffu) << 2); - emit_condbranch(as, PPCI_BC, cc^4, p); - return; - } - emit_condbranch(as, PPCI_BC, cc, target); -} - -/* -- Operand fusion ------------------------------------------------------ */ - -/* Limit linear search to this distance. Avoids O(n^2) behavior. */ -#define CONFLICT_SEARCH_LIM 31 - -/* Check if there's no conflicting instruction between curins and ref. */ -static int noconflict(ASMState *as, IRRef ref, IROp conflict) -{ - IRIns *ir = as->ir; - IRRef i = as->curins; - if (i > ref + CONFLICT_SEARCH_LIM) - return 0; /* Give up, ref is too far away. */ - while (--i > ref) - if (ir[i].o == conflict) - return 0; /* Conflict found. */ - return 1; /* Ok, no conflict. */ -} - -/* Fuse the array base of colocated arrays. */ -static int32_t asm_fuseabase(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - if (ir->o == IR_TNEW && ir->op1 <= LJ_MAX_COLOSIZE && - !neverfuse(as) && noconflict(as, ref, IR_NEWREF)) - return (int32_t)sizeof(GCtab); - return 0; -} - -/* Indicates load/store indexed is ok. */ -#define AHUREF_LSX ((int32_t)0x80000000) - -/* Fuse array/hash/upvalue reference into register+offset operand. */ -static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow) -{ - IRIns *ir = IR(ref); - if (ra_noreg(ir->r)) { - if (ir->o == IR_AREF) { - if (mayfuse(as, ref)) { - if (irref_isk(ir->op2)) { - IRRef tab = IR(ir->op1)->op1; - int32_t ofs = asm_fuseabase(as, tab); - IRRef refa = ofs ? tab : ir->op1; - ofs += 8*IR(ir->op2)->i; - if (checki16(ofs)) { - *ofsp = ofs; - return ra_alloc1(as, refa, allow); - } - } - if (*ofsp == AHUREF_LSX) { - Reg base = ra_alloc1(as, ir->op1, allow); - Reg idx = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, base)); - return base | (idx << 8); - } - } - } else if (ir->o == IR_HREFK) { - if (mayfuse(as, ref)) { - int32_t ofs = (int32_t)(IR(ir->op2)->op2 * sizeof(Node)); - if (checki16(ofs)) { - *ofsp = ofs; - return ra_alloc1(as, ir->op1, allow); - } - } - } else if (ir->o == IR_UREFC) { - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - int32_t ofs = i32ptr(&gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.tv); - int32_t jgl = (intptr_t)J2G(as->J); - if ((uint32_t)(ofs-jgl) < 65536) { - *ofsp = ofs-jgl-32768; - return RID_JGL; - } else { - *ofsp = (int16_t)ofs; - return ra_allock(as, ofs-(int16_t)ofs, allow); - } - } - } - } - *ofsp = 0; - return ra_alloc1(as, ref, allow); -} - -/* Fuse XLOAD/XSTORE reference into load/store operand. */ -static void asm_fusexref(ASMState *as, PPCIns pi, Reg rt, IRRef ref, - RegSet allow, int32_t ofs) -{ - IRIns *ir = IR(ref); - Reg base; - if (ra_noreg(ir->r) && canfuse(as, ir)) { - if (ir->o == IR_ADD) { - int32_t ofs2; - if (irref_isk(ir->op2) && (ofs2 = ofs + IR(ir->op2)->i, checki16(ofs2))) { - ofs = ofs2; - ref = ir->op1; - } else if (ofs == 0) { - Reg right, left = ra_alloc2(as, ir, allow); - right = (left >> 8); left &= 255; - emit_fab(as, PPCI_LWZX | ((pi >> 20) & 0x780), rt, left, right); - return; - } - } else if (ir->o == IR_STRREF) { - lua_assert(ofs == 0); - ofs = (int32_t)sizeof(GCstr); - if (irref_isk(ir->op2)) { - ofs += IR(ir->op2)->i; - ref = ir->op1; - } else if (irref_isk(ir->op1)) { - ofs += IR(ir->op1)->i; - ref = ir->op2; - } else { - /* NYI: Fuse ADD with constant. */ - Reg tmp, right, left = ra_alloc2(as, ir, allow); - right = (left >> 8); left &= 255; - tmp = ra_scratch(as, rset_exclude(rset_exclude(allow, left), right)); - emit_fai(as, pi, rt, tmp, ofs); - emit_tab(as, PPCI_ADD, tmp, left, right); - return; - } - if (!checki16(ofs)) { - Reg left = ra_alloc1(as, ref, allow); - Reg right = ra_allock(as, ofs, rset_exclude(allow, left)); - emit_fab(as, PPCI_LWZX | ((pi >> 20) & 0x780), rt, left, right); - return; - } - } - } - base = ra_alloc1(as, ref, allow); - emit_fai(as, pi, rt, base, ofs); -} - -/* Fuse XLOAD/XSTORE reference into indexed-only load/store operand. */ -static void asm_fusexrefx(ASMState *as, PPCIns pi, Reg rt, IRRef ref, - RegSet allow) -{ - IRIns *ira = IR(ref); - Reg right, left; - if (canfuse(as, ira) && ira->o == IR_ADD && ra_noreg(ira->r)) { - left = ra_alloc2(as, ira, allow); - right = (left >> 8); left &= 255; - } else { - right = ra_alloc1(as, ref, allow); - left = RID_R0; - } - emit_tab(as, pi, rt, left, right); -} - -/* Fuse to multiply-add/sub instruction. */ -static int asm_fusemadd(ASMState *as, IRIns *ir, PPCIns pi, PPCIns pir) -{ - IRRef lref = ir->op1, rref = ir->op2; - IRIns *irm; - if (lref != rref && - ((mayfuse(as, lref) && (irm = IR(lref), irm->o == IR_MUL) && - ra_noreg(irm->r)) || - (mayfuse(as, rref) && (irm = IR(rref), irm->o == IR_MUL) && - (rref = lref, pi = pir, ra_noreg(irm->r))))) { - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg add = ra_alloc1(as, rref, RSET_FPR); - Reg right, left = ra_alloc2(as, irm, rset_exclude(RSET_FPR, add)); - right = (left >> 8); left &= 255; - emit_facb(as, pi, dest, left, right, add); - return 1; - } - return 0; -} - -/* -- Calls --------------------------------------------------------------- */ - -/* Generate a call to a C function. */ -static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args) -{ - uint32_t n, nargs = CCI_NARGS(ci); - int32_t ofs = 8; - Reg gpr = REGARG_FIRSTGPR, fpr = REGARG_FIRSTFPR; - if ((void *)ci->func) - emit_call(as, (void *)ci->func); - for (n = 0; n < nargs; n++) { /* Setup args. */ - IRRef ref = args[n]; - if (ref) { - IRIns *ir = IR(ref); - if (irt_isfp(ir->t)) { - if (fpr <= REGARG_LASTFPR) { - lua_assert(rset_test(as->freeset, fpr)); /* Already evicted. */ - ra_leftov(as, fpr, ref); - fpr++; - } else { - Reg r = ra_alloc1(as, ref, RSET_FPR); - if (irt_isnum(ir->t)) ofs = (ofs + 4) & ~4; - emit_spstore(as, ir, r, ofs); - ofs += irt_isnum(ir->t) ? 8 : 4; - } - } else { - if (gpr <= REGARG_LASTGPR) { - lua_assert(rset_test(as->freeset, gpr)); /* Already evicted. */ - ra_leftov(as, gpr, ref); - gpr++; - } else { - Reg r = ra_alloc1(as, ref, RSET_GPR); - emit_spstore(as, ir, r, ofs); - ofs += 4; - } - } - } else { - if (gpr <= REGARG_LASTGPR) - gpr++; - else - ofs += 4; - } - checkmclim(as); - } - if ((ci->flags & CCI_VARARG)) /* Vararg calls need to know about FPR use. */ - emit_tab(as, fpr == REGARG_FIRSTFPR ? PPCI_CRXOR : PPCI_CREQV, 6, 6, 6); -} - -/* Setup result reg/sp for call. Evict scratch regs. */ -static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - RegSet drop = RSET_SCRATCH; - int hiop = ((ir+1)->o == IR_HIOP); - if ((ci->flags & CCI_NOFPRCLOBBER)) - drop &= ~RSET_FPR; - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - if (hiop && ra_hasreg((ir+1)->r)) - rset_clear(drop, (ir+1)->r); /* Dest reg handled below. */ - ra_evictset(as, drop); /* Evictions must be performed first. */ - if (ra_used(ir)) { - lua_assert(!irt_ispri(ir->t)); - if (irt_isfp(ir->t)) { - if ((ci->flags & CCI_CASTU64)) { - /* Use spill slot or temp slots. */ - int32_t ofs = ir->s ? sps_scale(ir->s) : SPOFS_TMP; - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - emit_fai(as, PPCI_LFD, dest, RID_SP, ofs); - } - emit_tai(as, PPCI_STW, RID_RETHI, RID_SP, ofs); - emit_tai(as, PPCI_STW, RID_RETLO, RID_SP, ofs+4); - } else { - ra_destreg(as, ir, RID_FPRET); - } - } else if (hiop) { - ra_destpair(as, ir); - } else { - ra_destreg(as, ir, RID_RET); - } - } -} - -static void asm_call(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX]; - const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; - asm_collectargs(as, ir, ci, args); - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -static void asm_callx(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX*2]; - CCallInfo ci; - IRRef func; - IRIns *irf; - ci.flags = asm_callx_flags(as, ir); - asm_collectargs(as, ir, &ci, args); - asm_setupresult(as, ir, &ci); - func = ir->op2; irf = IR(func); - if (irf->o == IR_CARG) { func = irf->op1; irf = IR(func); } - if (irref_isk(func)) { /* Call to constant address. */ - ci.func = (ASMFunction)(void *)(irf->i); - } else { /* Need a non-argument register for indirect calls. */ - RegSet allow = RSET_GPR & ~RSET_RANGE(RID_R0, REGARG_LASTGPR+1); - Reg freg = ra_alloc1(as, func, allow); - *--as->mcp = PPCI_BCTRL; - *--as->mcp = PPCI_MTCTR | PPCF_T(freg); - ci.func = (ASMFunction)(void *)0; - } - asm_gencall(as, &ci, args); -} - -static void asm_callid(ASMState *as, IRIns *ir, IRCallID id) -{ - const CCallInfo *ci = &lj_ir_callinfo[id]; - IRRef args[2]; - args[0] = ir->op1; - args[1] = ir->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -/* -- Returns ------------------------------------------------------------- */ - -/* Return to lower frame. Guard that it goes to the right spot. */ -static void asm_retf(ASMState *as, IRIns *ir) -{ - Reg base = ra_alloc1(as, REF_BASE, RSET_GPR); - void *pc = ir_kptr(IR(ir->op2)); - int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); - as->topslot -= (BCReg)delta; - if ((int32_t)as->topslot < 0) as->topslot = 0; - irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */ - emit_setgl(as, base, jit_base); - emit_addptr(as, base, -8*delta); - asm_guardcc(as, CC_NE); - emit_ab(as, PPCI_CMPW, RID_TMP, - ra_allock(as, i32ptr(pc), rset_exclude(RSET_GPR, base))); - emit_tai(as, PPCI_LWZ, RID_TMP, base, -8); -} - -/* -- Type conversions ---------------------------------------------------- */ - -static void asm_tointg(ASMState *as, IRIns *ir, Reg left) -{ - RegSet allow = RSET_FPR; - Reg tmp = ra_scratch(as, rset_clear(allow, left)); - Reg fbias = ra_scratch(as, rset_clear(allow, tmp)); - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg hibias = ra_allock(as, 0x43300000, rset_exclude(RSET_GPR, dest)); - asm_guardcc(as, CC_NE); - emit_fab(as, PPCI_FCMPU, 0, tmp, left); - emit_fab(as, PPCI_FSUB, tmp, tmp, fbias); - emit_fai(as, PPCI_LFD, tmp, RID_SP, SPOFS_TMP); - emit_tai(as, PPCI_STW, RID_TMP, RID_SP, SPOFS_TMPLO); - emit_tai(as, PPCI_STW, hibias, RID_SP, SPOFS_TMPHI); - emit_asi(as, PPCI_XORIS, RID_TMP, dest, 0x8000); - emit_tai(as, PPCI_LWZ, dest, RID_SP, SPOFS_TMPLO); - emit_lsptr(as, PPCI_LFS, (fbias & 31), - (void *)lj_ir_k64_find(as->J, U64x(59800004,59800000)), - RSET_GPR); - emit_fai(as, PPCI_STFD, tmp, RID_SP, SPOFS_TMP); - emit_fb(as, PPCI_FCTIWZ, tmp, left); -} - -static void asm_tobit(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_FPR; - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, allow); - Reg right = ra_alloc1(as, ir->op2, rset_clear(allow, left)); - Reg tmp = ra_scratch(as, rset_clear(allow, right)); - emit_tai(as, PPCI_LWZ, dest, RID_SP, SPOFS_TMPLO); - emit_fai(as, PPCI_STFD, tmp, RID_SP, SPOFS_TMP); - emit_fab(as, PPCI_FADD, tmp, left, right); -} - -static void asm_conv(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); - int stfp = (st == IRT_NUM || st == IRT_FLOAT); - IRRef lref = ir->op1; - lua_assert(irt_type(ir->t) != st); - lua_assert(!(irt_isint64(ir->t) || - (st == IRT_I64 || st == IRT_U64))); /* Handled by SPLIT. */ - if (irt_isfp(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_FPR); - if (stfp) { /* FP to FP conversion. */ - if (st == IRT_NUM) /* double -> float conversion. */ - emit_fb(as, PPCI_FRSP, dest, ra_alloc1(as, lref, RSET_FPR)); - else /* float -> double conversion is a no-op on PPC. */ - ra_leftov(as, dest, lref); /* Do nothing, but may need to move regs. */ - } else { /* Integer to FP conversion. */ - /* IRT_INT: Flip hibit, bias with 2^52, subtract 2^52+2^31. */ - /* IRT_U32: Bias with 2^52, subtract 2^52. */ - RegSet allow = RSET_GPR; - Reg left = ra_alloc1(as, lref, allow); - Reg hibias = ra_allock(as, 0x43300000, rset_clear(allow, left)); - Reg fbias = ra_scratch(as, rset_exclude(RSET_FPR, dest)); - const float *kbias; - if (irt_isfloat(ir->t)) emit_fb(as, PPCI_FRSP, dest, dest); - emit_fab(as, PPCI_FSUB, dest, dest, fbias); - emit_fai(as, PPCI_LFD, dest, RID_SP, SPOFS_TMP); - kbias = (const float *)lj_ir_k64_find(as->J, U64x(59800004,59800000)); - if (st == IRT_U32) kbias++; - emit_lsptr(as, PPCI_LFS, (fbias & 31), (void *)kbias, - rset_clear(allow, hibias)); - emit_tai(as, PPCI_STW, st == IRT_U32 ? left : RID_TMP, - RID_SP, SPOFS_TMPLO); - emit_tai(as, PPCI_STW, hibias, RID_SP, SPOFS_TMPHI); - if (st != IRT_U32) emit_asi(as, PPCI_XORIS, RID_TMP, left, 0x8000); - } - } else if (stfp) { /* FP to integer conversion. */ - if (irt_isguard(ir->t)) { - /* Checked conversions are only supported from number to int. */ - lua_assert(irt_isint(ir->t) && st == IRT_NUM); - asm_tointg(as, ir, ra_alloc1(as, lref, RSET_FPR)); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, lref, RSET_FPR); - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, left)); - if (irt_isu32(ir->t)) { - /* Convert both x and x-2^31 to int and merge results. */ - Reg tmpi = ra_scratch(as, rset_exclude(RSET_GPR, dest)); - emit_asb(as, PPCI_OR, dest, dest, tmpi); /* Select with mask idiom. */ - emit_asb(as, PPCI_AND, tmpi, tmpi, RID_TMP); - emit_asb(as, PPCI_ANDC, dest, dest, RID_TMP); - emit_tai(as, PPCI_LWZ, tmpi, RID_SP, SPOFS_TMPLO); /* tmp = (int)(x) */ - emit_tai(as, PPCI_ADDIS, dest, dest, 0x8000); /* dest += 2^31 */ - emit_asb(as, PPCI_SRAWI, RID_TMP, dest, 31); /* mask = -(dest < 0) */ - emit_fai(as, PPCI_STFD, tmp, RID_SP, SPOFS_TMP); - emit_tai(as, PPCI_LWZ, dest, - RID_SP, SPOFS_TMPLO); /* dest = (int)(x-2^31) */ - emit_fb(as, PPCI_FCTIWZ, tmp, left); - emit_fai(as, PPCI_STFD, tmp, RID_SP, SPOFS_TMP); - emit_fb(as, PPCI_FCTIWZ, tmp, tmp); - emit_fab(as, PPCI_FSUB, tmp, left, tmp); - emit_lsptr(as, PPCI_LFS, (tmp & 31), - (void *)lj_ir_k64_find(as->J, U64x(4f000000,00000000)), - RSET_GPR); - } else { - emit_tai(as, PPCI_LWZ, dest, RID_SP, SPOFS_TMPLO); - emit_fai(as, PPCI_STFD, tmp, RID_SP, SPOFS_TMP); - emit_fb(as, PPCI_FCTIWZ, tmp, left); - } - } - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (st >= IRT_I8 && st <= IRT_U16) { /* Extend to 32 bit integer. */ - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t)); - if ((ir->op2 & IRCONV_SEXT)) - emit_as(as, st == IRT_I8 ? PPCI_EXTSB : PPCI_EXTSH, dest, left); - else - emit_rot(as, PPCI_RLWINM, dest, left, 0, st == IRT_U8 ? 24 : 16, 31); - } else { /* 32/64 bit integer conversions. */ - /* Only need to handle 32/32 bit no-op (cast) on 32 bit archs. */ - ra_leftov(as, dest, lref); /* Do nothing, but may need to move regs. */ - } - } -} - -#if LJ_HASFFI -static void asm_conv64(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)((ir-1)->op2 & IRCONV_SRCMASK); - IRType dt = (((ir-1)->op2 & IRCONV_DSTMASK) >> IRCONV_DSH); - IRCallID id; - const CCallInfo *ci; - IRRef args[2]; - args[0] = ir->op1; - args[1] = (ir-1)->op1; - if (st == IRT_NUM || st == IRT_FLOAT) { - id = IRCALL_fp64_d2l + ((st == IRT_FLOAT) ? 2 : 0) + (dt - IRT_I64); - ir--; - } else { - id = IRCALL_fp64_l2d + ((dt == IRT_FLOAT) ? 2 : 0) + (st - IRT_I64); - } - ci = &lj_ir_callinfo[id]; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} -#endif - -static void asm_strto(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_strscan_num]; - IRRef args[2]; - int32_t ofs; - RegSet drop = RSET_SCRATCH; - if (ra_hasreg(ir->r)) rset_set(drop, ir->r); /* Spill dest reg (if any). */ - ra_evictset(as, drop); - asm_guardcc(as, CC_EQ); - emit_ai(as, PPCI_CMPWI, RID_RET, 0); /* Test return status. */ - args[0] = ir->op1; /* GCstr *str */ - args[1] = ASMREF_TMP1; /* TValue *n */ - asm_gencall(as, ci, args); - /* Store the result to the spill slot or temp slots. */ - ofs = ir->s ? sps_scale(ir->s) : SPOFS_TMP; - emit_tai(as, PPCI_ADDI, ra_releasetmp(as, ASMREF_TMP1), RID_SP, ofs); -} - -/* Get pointer to TValue. */ -static void asm_tvptr(ASMState *as, Reg dest, IRRef ref) -{ - IRIns *ir = IR(ref); - if (irt_isnum(ir->t)) { - if (irref_isk(ref)) /* Use the number constant itself as a TValue. */ - ra_allockreg(as, i32ptr(ir_knum(ir)), dest); - else /* Otherwise force a spill and use the spill slot. */ - emit_tai(as, PPCI_ADDI, dest, RID_SP, ra_spill(as, ir)); - } else { - /* Otherwise use g->tmptv to hold the TValue. */ - RegSet allow = rset_exclude(RSET_GPR, dest); - Reg type; - emit_tai(as, PPCI_ADDI, dest, RID_JGL, offsetof(global_State, tmptv)-32768); - if (!irt_ispri(ir->t)) { - Reg src = ra_alloc1(as, ref, allow); - emit_setgl(as, src, tmptv.gcr); - } - type = ra_allock(as, irt_toitype(ir->t), allow); - emit_setgl(as, type, tmptv.it); - } -} - -static void asm_tostr(ASMState *as, IRIns *ir) -{ - IRRef args[2]; - args[0] = ASMREF_L; - as->gcsteps++; - if (irt_isnum(IR(ir->op1)->t) || (ir+1)->o == IR_HIOP) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromnum]; - args[1] = ASMREF_TMP1; /* const lua_Number * */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - asm_tvptr(as, ra_releasetmp(as, ASMREF_TMP1), ir->op1); - } else { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromint]; - args[1] = ir->op1; /* int32_t k */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - } -} - -/* -- Memory references --------------------------------------------------- */ - -static void asm_aref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg idx, base; - if (irref_isk(ir->op2)) { - IRRef tab = IR(ir->op1)->op1; - int32_t ofs = asm_fuseabase(as, tab); - IRRef refa = ofs ? tab : ir->op1; - ofs += 8*IR(ir->op2)->i; - if (checki16(ofs)) { - base = ra_alloc1(as, refa, RSET_GPR); - emit_tai(as, PPCI_ADDI, dest, base, ofs); - return; - } - } - base = ra_alloc1(as, ir->op1, RSET_GPR); - idx = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, base)); - emit_tab(as, PPCI_ADD, dest, RID_TMP, base); - emit_slwi(as, RID_TMP, idx, 3); -} - -/* Inlined hash lookup. Specialized for key type and for const keys. -** The equivalent C code is: -** Node *n = hashkey(t, key); -** do { -** if (lj_obj_equal(&n->key, key)) return &n->val; -** } while ((n = nextnode(n))); -** return niltv(L); -*/ -static void asm_href(ASMState *as, IRIns *ir, IROp merge) -{ - RegSet allow = RSET_GPR; - int destused = ra_used(ir); - Reg dest = ra_dest(as, ir, allow); - Reg tab = ra_alloc1(as, ir->op1, rset_clear(allow, dest)); - Reg key = RID_NONE, tmp1 = RID_TMP, tmp2; - Reg tisnum = RID_NONE, tmpnum = RID_NONE; - IRRef refkey = ir->op2; - IRIns *irkey = IR(refkey); - IRType1 kt = irkey->t; - uint32_t khash; - MCLabel l_end, l_loop, l_next; - - rset_clear(allow, tab); - if (irt_isnum(kt)) { - key = ra_alloc1(as, refkey, RSET_FPR); - tmpnum = ra_scratch(as, rset_exclude(RSET_FPR, key)); - tisnum = ra_allock(as, (int32_t)LJ_TISNUM, allow); - rset_clear(allow, tisnum); - } else if (!irt_ispri(kt)) { - key = ra_alloc1(as, refkey, allow); - rset_clear(allow, key); - } - tmp2 = ra_scratch(as, allow); - rset_clear(allow, tmp2); - - /* Key not found in chain: jump to exit (if merged) or load niltv. */ - l_end = emit_label(as); - as->invmcp = NULL; - if (merge == IR_NE) - asm_guardcc(as, CC_EQ); - else if (destused) - emit_loada(as, dest, niltvg(J2G(as->J))); - - /* Follow hash chain until the end. */ - l_loop = --as->mcp; - emit_ai(as, PPCI_CMPWI, dest, 0); - emit_tai(as, PPCI_LWZ, dest, dest, (int32_t)offsetof(Node, next)); - l_next = emit_label(as); - - /* Type and value comparison. */ - if (merge == IR_EQ) - asm_guardcc(as, CC_EQ); - else - emit_condbranch(as, PPCI_BC|PPCF_Y, CC_EQ, l_end); - if (irt_isnum(kt)) { - emit_fab(as, PPCI_FCMPU, 0, tmpnum, key); - emit_condbranch(as, PPCI_BC, CC_GE, l_next); - emit_ab(as, PPCI_CMPLW, tmp1, tisnum); - emit_fai(as, PPCI_LFD, tmpnum, dest, (int32_t)offsetof(Node, key.n)); - } else { - if (!irt_ispri(kt)) { - emit_ab(as, PPCI_CMPW, tmp2, key); - emit_condbranch(as, PPCI_BC, CC_NE, l_next); - } - emit_ai(as, PPCI_CMPWI, tmp1, irt_toitype(irkey->t)); - if (!irt_ispri(kt)) - emit_tai(as, PPCI_LWZ, tmp2, dest, (int32_t)offsetof(Node, key.gcr)); - } - emit_tai(as, PPCI_LWZ, tmp1, dest, (int32_t)offsetof(Node, key.it)); - *l_loop = PPCI_BC | PPCF_Y | PPCF_CC(CC_NE) | - (((char *)as->mcp-(char *)l_loop) & 0xffffu); - - /* Load main position relative to tab->node into dest. */ - khash = irref_isk(refkey) ? ir_khash(irkey) : 1; - if (khash == 0) { - emit_tai(as, PPCI_LWZ, dest, tab, (int32_t)offsetof(GCtab, node)); - } else { - Reg tmphash = tmp1; - if (irref_isk(refkey)) - tmphash = ra_allock(as, khash, allow); - emit_tab(as, PPCI_ADD, dest, dest, tmp1); - emit_tai(as, PPCI_MULLI, tmp1, tmp1, sizeof(Node)); - emit_asb(as, PPCI_AND, tmp1, tmp2, tmphash); - emit_tai(as, PPCI_LWZ, dest, tab, (int32_t)offsetof(GCtab, node)); - emit_tai(as, PPCI_LWZ, tmp2, tab, (int32_t)offsetof(GCtab, hmask)); - if (irref_isk(refkey)) { - /* Nothing to do. */ - } else if (irt_isstr(kt)) { - emit_tai(as, PPCI_LWZ, tmp1, key, (int32_t)offsetof(GCstr, hash)); - } else { /* Must match with hash*() in lj_tab.c. */ - emit_tab(as, PPCI_SUBF, tmp1, tmp2, tmp1); - emit_rotlwi(as, tmp2, tmp2, HASH_ROT3); - emit_asb(as, PPCI_XOR, tmp1, tmp1, tmp2); - emit_rotlwi(as, tmp1, tmp1, (HASH_ROT2+HASH_ROT1)&31); - emit_tab(as, PPCI_SUBF, tmp2, dest, tmp2); - if (irt_isnum(kt)) { - int32_t ofs = ra_spill(as, irkey); - emit_asb(as, PPCI_XOR, tmp2, tmp2, tmp1); - emit_rotlwi(as, dest, tmp1, HASH_ROT1); - emit_tab(as, PPCI_ADD, tmp1, tmp1, tmp1); - emit_tai(as, PPCI_LWZ, tmp2, RID_SP, ofs+4); - emit_tai(as, PPCI_LWZ, tmp1, RID_SP, ofs); - } else { - emit_asb(as, PPCI_XOR, tmp2, key, tmp1); - emit_rotlwi(as, dest, tmp1, HASH_ROT1); - emit_tai(as, PPCI_ADDI, tmp1, tmp2, HASH_BIAS); - emit_tai(as, PPCI_ADDIS, tmp2, key, (HASH_BIAS + 32768)>>16); - } - } - } -} - -static void asm_hrefk(ASMState *as, IRIns *ir) -{ - IRIns *kslot = IR(ir->op2); - IRIns *irkey = IR(kslot->op1); - int32_t ofs = (int32_t)(kslot->op2 * sizeof(Node)); - int32_t kofs = ofs + (int32_t)offsetof(Node, key); - Reg dest = (ra_used(ir)||ofs > 32736) ? ra_dest(as, ir, RSET_GPR) : RID_NONE; - Reg node = ra_alloc1(as, ir->op1, RSET_GPR); - Reg key = RID_NONE, type = RID_TMP, idx = node; - RegSet allow = rset_exclude(RSET_GPR, node); - lua_assert(ofs % sizeof(Node) == 0); - if (ofs > 32736) { - idx = dest; - rset_clear(allow, dest); - kofs = (int32_t)offsetof(Node, key); - } else if (ra_hasreg(dest)) { - emit_tai(as, PPCI_ADDI, dest, node, ofs); - } - asm_guardcc(as, CC_NE); - if (!irt_ispri(irkey->t)) { - key = ra_scratch(as, allow); - rset_clear(allow, key); - } - rset_clear(allow, type); - if (irt_isnum(irkey->t)) { - emit_cmpi(as, key, (int32_t)ir_knum(irkey)->u32.lo); - asm_guardcc(as, CC_NE); - emit_cmpi(as, type, (int32_t)ir_knum(irkey)->u32.hi); - } else { - if (ra_hasreg(key)) { - emit_cmpi(as, key, irkey->i); /* May use RID_TMP, i.e. type. */ - asm_guardcc(as, CC_NE); - } - emit_ai(as, PPCI_CMPWI, type, irt_toitype(irkey->t)); - } - if (ra_hasreg(key)) emit_tai(as, PPCI_LWZ, key, idx, kofs+4); - emit_tai(as, PPCI_LWZ, type, idx, kofs); - if (ofs > 32736) { - emit_tai(as, PPCI_ADDIS, dest, dest, (ofs + 32768) >> 16); - emit_tai(as, PPCI_ADDI, dest, node, ofs); - } -} - -static void asm_newref(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_tab_newkey]; - IRRef args[3]; - if (ir->r == RID_SINK) - return; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ir->op1; /* GCtab *t */ - args[2] = ASMREF_TMP1; /* cTValue *key */ - asm_setupresult(as, ir, ci); /* TValue * */ - asm_gencall(as, ci, args); - asm_tvptr(as, ra_releasetmp(as, ASMREF_TMP1), ir->op2); -} - -static void asm_uref(ASMState *as, IRIns *ir) -{ - /* NYI: Check that UREFO is still open and not aliasing a slot. */ - Reg dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - MRef *v = &gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.v; - emit_lsptr(as, PPCI_LWZ, dest, v, RSET_GPR); - } else { - Reg uv = ra_scratch(as, RSET_GPR); - Reg func = ra_alloc1(as, ir->op1, RSET_GPR); - if (ir->o == IR_UREFC) { - asm_guardcc(as, CC_NE); - emit_ai(as, PPCI_CMPWI, RID_TMP, 1); - emit_tai(as, PPCI_ADDI, dest, uv, (int32_t)offsetof(GCupval, tv)); - emit_tai(as, PPCI_LBZ, RID_TMP, uv, (int32_t)offsetof(GCupval, closed)); - } else { - emit_tai(as, PPCI_LWZ, dest, uv, (int32_t)offsetof(GCupval, v)); - } - emit_tai(as, PPCI_LWZ, uv, func, - (int32_t)offsetof(GCfuncL, uvptr) + 4*(int32_t)(ir->op2 >> 8)); - } -} - -static void asm_fref(ASMState *as, IRIns *ir) -{ - UNUSED(as); UNUSED(ir); - lua_assert(!ra_used(ir)); -} - -static void asm_strref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - IRRef ref = ir->op2, refk = ir->op1; - int32_t ofs = (int32_t)sizeof(GCstr); - Reg r; - if (irref_isk(ref)) { - IRRef tmp = refk; refk = ref; ref = tmp; - } else if (!irref_isk(refk)) { - Reg right, left = ra_alloc1(as, ir->op1, RSET_GPR); - IRIns *irr = IR(ir->op2); - if (ra_hasreg(irr->r)) { - ra_noweak(as, irr->r); - right = irr->r; - } else if (mayfuse(as, irr->op2) && - irr->o == IR_ADD && irref_isk(irr->op2) && - checki16(ofs + IR(irr->op2)->i)) { - ofs += IR(irr->op2)->i; - right = ra_alloc1(as, irr->op1, rset_exclude(RSET_GPR, left)); - } else { - right = ra_allocref(as, ir->op2, rset_exclude(RSET_GPR, left)); - } - emit_tai(as, PPCI_ADDI, dest, dest, ofs); - emit_tab(as, PPCI_ADD, dest, left, right); - return; - } - r = ra_alloc1(as, ref, RSET_GPR); - ofs += IR(refk)->i; - if (checki16(ofs)) - emit_tai(as, PPCI_ADDI, dest, r, ofs); - else - emit_tab(as, PPCI_ADD, dest, r, - ra_allock(as, ofs, rset_exclude(RSET_GPR, r))); -} - -/* -- Loads and stores ---------------------------------------------------- */ - -static PPCIns asm_fxloadins(IRIns *ir) -{ - switch (irt_type(ir->t)) { - case IRT_I8: return PPCI_LBZ; /* Needs sign-extension. */ - case IRT_U8: return PPCI_LBZ; - case IRT_I16: return PPCI_LHA; - case IRT_U16: return PPCI_LHZ; - case IRT_NUM: return PPCI_LFD; - case IRT_FLOAT: return PPCI_LFS; - default: return PPCI_LWZ; - } -} - -static PPCIns asm_fxstoreins(IRIns *ir) -{ - switch (irt_type(ir->t)) { - case IRT_I8: case IRT_U8: return PPCI_STB; - case IRT_I16: case IRT_U16: return PPCI_STH; - case IRT_NUM: return PPCI_STFD; - case IRT_FLOAT: return PPCI_STFS; - default: return PPCI_STW; - } -} - -static void asm_fload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg idx = ra_alloc1(as, ir->op1, RSET_GPR); - PPCIns pi = asm_fxloadins(ir); - int32_t ofs; - if (ir->op2 == IRFL_TAB_ARRAY) { - ofs = asm_fuseabase(as, ir->op1); - if (ofs) { /* Turn the t->array load into an add for colocated arrays. */ - emit_tai(as, PPCI_ADDI, dest, idx, ofs); - return; - } - } - ofs = field_ofs[ir->op2]; - lua_assert(!irt_isi8(ir->t)); - emit_tai(as, pi, dest, idx, ofs); -} - -static void asm_fstore(ASMState *as, IRIns *ir) -{ - if (ir->r != RID_SINK) { - Reg src = ra_alloc1(as, ir->op2, RSET_GPR); - IRIns *irf = IR(ir->op1); - Reg idx = ra_alloc1(as, irf->op1, rset_exclude(RSET_GPR, src)); - int32_t ofs = field_ofs[irf->op2]; - PPCIns pi = asm_fxstoreins(ir); - emit_tai(as, pi, src, idx, ofs); - } -} - -static void asm_xload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); - lua_assert(!(ir->op2 & IRXLOAD_UNALIGNED)); - if (irt_isi8(ir->t)) - emit_as(as, PPCI_EXTSB, dest, dest); - asm_fusexref(as, asm_fxloadins(ir), dest, ir->op1, RSET_GPR, 0); -} - -static void asm_xstore(ASMState *as, IRIns *ir, int32_t ofs) -{ - IRIns *irb; - if (ir->r == RID_SINK) - return; - if (ofs == 0 && mayfuse(as, ir->op2) && (irb = IR(ir->op2))->o == IR_BSWAP && - ra_noreg(irb->r) && (irt_isint(ir->t) || irt_isu32(ir->t))) { - /* Fuse BSWAP with XSTORE to stwbrx. */ - Reg src = ra_alloc1(as, irb->op1, RSET_GPR); - asm_fusexrefx(as, PPCI_STWBRX, src, ir->op1, rset_exclude(RSET_GPR, src)); - } else { - Reg src = ra_alloc1(as, ir->op2, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); - asm_fusexref(as, asm_fxstoreins(ir), src, ir->op1, - rset_exclude(RSET_GPR, src), ofs); - } -} - -static void asm_ahuvload(ASMState *as, IRIns *ir) -{ - IRType1 t = ir->t; - Reg dest = RID_NONE, type = RID_TMP, tmp = RID_TMP, idx; - RegSet allow = RSET_GPR; - int32_t ofs = AHUREF_LSX; - if (ra_used(ir)) { - lua_assert(irt_isnum(t) || irt_isint(t) || irt_isaddr(t)); - if (!irt_isnum(t)) ofs = 0; - dest = ra_dest(as, ir, irt_isnum(t) ? RSET_FPR : RSET_GPR); - rset_clear(allow, dest); - } - idx = asm_fuseahuref(as, ir->op1, &ofs, allow); - if (irt_isnum(t)) { - Reg tisnum = ra_allock(as, (int32_t)LJ_TISNUM, rset_exclude(allow, idx)); - asm_guardcc(as, CC_GE); - emit_ab(as, PPCI_CMPLW, type, tisnum); - if (ra_hasreg(dest)) { - if (ofs == AHUREF_LSX) { - tmp = ra_scratch(as, rset_exclude(rset_exclude(RSET_GPR, - (idx&255)), (idx>>8))); - emit_fab(as, PPCI_LFDX, dest, (idx&255), tmp); - } else { - emit_fai(as, PPCI_LFD, dest, idx, ofs); - } - } - } else { - asm_guardcc(as, CC_NE); - emit_ai(as, PPCI_CMPWI, type, irt_toitype(t)); - if (ra_hasreg(dest)) emit_tai(as, PPCI_LWZ, dest, idx, ofs+4); - } - if (ofs == AHUREF_LSX) { - emit_tab(as, PPCI_LWZX, type, (idx&255), tmp); - emit_slwi(as, tmp, (idx>>8), 3); - } else { - emit_tai(as, PPCI_LWZ, type, idx, ofs); - } -} - -static void asm_ahustore(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_GPR; - Reg idx, src = RID_NONE, type = RID_NONE; - int32_t ofs = AHUREF_LSX; - if (ir->r == RID_SINK) - return; - if (irt_isnum(ir->t)) { - src = ra_alloc1(as, ir->op2, RSET_FPR); - } else { - if (!irt_ispri(ir->t)) { - src = ra_alloc1(as, ir->op2, allow); - rset_clear(allow, src); - ofs = 0; - } - type = ra_allock(as, (int32_t)irt_toitype(ir->t), allow); - rset_clear(allow, type); - } - idx = asm_fuseahuref(as, ir->op1, &ofs, allow); - if (irt_isnum(ir->t)) { - if (ofs == AHUREF_LSX) { - emit_fab(as, PPCI_STFDX, src, (idx&255), RID_TMP); - emit_slwi(as, RID_TMP, (idx>>8), 3); - } else { - emit_fai(as, PPCI_STFD, src, idx, ofs); - } - } else { - if (ra_hasreg(src)) - emit_tai(as, PPCI_STW, src, idx, ofs+4); - if (ofs == AHUREF_LSX) { - emit_tab(as, PPCI_STWX, type, (idx&255), RID_TMP); - emit_slwi(as, RID_TMP, (idx>>8), 3); - } else { - emit_tai(as, PPCI_STW, type, idx, ofs); - } - } -} - -static void asm_sload(ASMState *as, IRIns *ir) -{ - int32_t ofs = 8*((int32_t)ir->op1-1) + ((ir->op2 & IRSLOAD_FRAME) ? 0 : 4); - IRType1 t = ir->t; - Reg dest = RID_NONE, type = RID_NONE, base; - RegSet allow = RSET_GPR; - lua_assert(!(ir->op2 & IRSLOAD_PARENT)); /* Handled by asm_head_side(). */ - lua_assert(irt_isguard(t) || !(ir->op2 & IRSLOAD_TYPECHECK)); - lua_assert(LJ_DUALNUM || - !irt_isint(t) || (ir->op2 & (IRSLOAD_CONVERT|IRSLOAD_FRAME))); - if ((ir->op2 & IRSLOAD_CONVERT) && irt_isguard(t) && irt_isint(t)) { - dest = ra_scratch(as, RSET_FPR); - asm_tointg(as, ir, dest); - t.irt = IRT_NUM; /* Continue with a regular number type check. */ - } else if (ra_used(ir)) { - lua_assert(irt_isnum(t) || irt_isint(t) || irt_isaddr(t)); - dest = ra_dest(as, ir, irt_isnum(t) ? RSET_FPR : RSET_GPR); - rset_clear(allow, dest); - base = ra_alloc1(as, REF_BASE, allow); - rset_clear(allow, base); - if ((ir->op2 & IRSLOAD_CONVERT)) { - if (irt_isint(t)) { - emit_tai(as, PPCI_LWZ, dest, RID_SP, SPOFS_TMPLO); - dest = ra_scratch(as, RSET_FPR); - emit_fai(as, PPCI_STFD, dest, RID_SP, SPOFS_TMP); - emit_fb(as, PPCI_FCTIWZ, dest, dest); - t.irt = IRT_NUM; /* Check for original type. */ - } else { - Reg tmp = ra_scratch(as, allow); - Reg hibias = ra_allock(as, 0x43300000, rset_clear(allow, tmp)); - Reg fbias = ra_scratch(as, rset_exclude(RSET_FPR, dest)); - emit_fab(as, PPCI_FSUB, dest, dest, fbias); - emit_fai(as, PPCI_LFD, dest, RID_SP, SPOFS_TMP); - emit_lsptr(as, PPCI_LFS, (fbias & 31), - (void *)lj_ir_k64_find(as->J, U64x(59800004,59800000)), - rset_clear(allow, hibias)); - emit_tai(as, PPCI_STW, tmp, RID_SP, SPOFS_TMPLO); - emit_tai(as, PPCI_STW, hibias, RID_SP, SPOFS_TMPHI); - emit_asi(as, PPCI_XORIS, tmp, tmp, 0x8000); - dest = tmp; - t.irt = IRT_INT; /* Check for original type. */ - } - } - goto dotypecheck; - } - base = ra_alloc1(as, REF_BASE, allow); - rset_clear(allow, base); -dotypecheck: - if (irt_isnum(t)) { - if ((ir->op2 & IRSLOAD_TYPECHECK)) { - Reg tisnum = ra_allock(as, (int32_t)LJ_TISNUM, allow); - asm_guardcc(as, CC_GE); - emit_ab(as, PPCI_CMPLW, RID_TMP, tisnum); - type = RID_TMP; - } - if (ra_hasreg(dest)) emit_fai(as, PPCI_LFD, dest, base, ofs-4); - } else { - if ((ir->op2 & IRSLOAD_TYPECHECK)) { - asm_guardcc(as, CC_NE); - emit_ai(as, PPCI_CMPWI, RID_TMP, irt_toitype(t)); - type = RID_TMP; - } - if (ra_hasreg(dest)) emit_tai(as, PPCI_LWZ, dest, base, ofs); - } - if (ra_hasreg(type)) emit_tai(as, PPCI_LWZ, type, base, ofs-4); -} - -/* -- Allocations --------------------------------------------------------- */ - -#if LJ_HASFFI -static void asm_cnew(ASMState *as, IRIns *ir) -{ - CTState *cts = ctype_ctsG(J2G(as->J)); - CTypeID ctypeid = (CTypeID)IR(ir->op1)->i; - CTSize sz = (ir->o == IR_CNEWI || ir->op2 == REF_NIL) ? - lj_ctype_size(cts, ctypeid) : (CTSize)IR(ir->op2)->i; - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_mem_newgco]; - IRRef args[2]; - RegSet allow = (RSET_GPR & ~RSET_SCRATCH); - RegSet drop = RSET_SCRATCH; - lua_assert(sz != CTSIZE_INVALID); - - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ASMREF_TMP1; /* MSize size */ - as->gcsteps++; - - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - ra_evictset(as, drop); - if (ra_used(ir)) - ra_destreg(as, ir, RID_RET); /* GCcdata * */ - - /* Initialize immutable cdata object. */ - if (ir->o == IR_CNEWI) { - int32_t ofs = sizeof(GCcdata); - lua_assert(sz == 4 || sz == 8); - if (sz == 8) { - ofs += 4; - lua_assert((ir+1)->o == IR_HIOP); - } - for (;;) { - Reg r = ra_alloc1(as, ir->op2, allow); - emit_tai(as, PPCI_STW, r, RID_RET, ofs); - rset_clear(allow, r); - if (ofs == sizeof(GCcdata)) break; - ofs -= 4; ir++; - } - } - /* Initialize gct and ctypeid. lj_mem_newgco() already sets marked. */ - emit_tai(as, PPCI_STB, RID_RET+1, RID_RET, offsetof(GCcdata, gct)); - emit_tai(as, PPCI_STH, RID_TMP, RID_RET, offsetof(GCcdata, ctypeid)); - emit_ti(as, PPCI_LI, RID_RET+1, ~LJ_TCDATA); - emit_ti(as, PPCI_LI, RID_TMP, ctypeid); /* Lower 16 bit used. Sign-ext ok. */ - asm_gencall(as, ci, args); - ra_allockreg(as, (int32_t)(sz+sizeof(GCcdata)), - ra_releasetmp(as, ASMREF_TMP1)); -} -#else -#define asm_cnew(as, ir) ((void)0) -#endif - -/* -- Write barriers ------------------------------------------------------ */ - -static void asm_tbar(ASMState *as, IRIns *ir) -{ - Reg tab = ra_alloc1(as, ir->op1, RSET_GPR); - Reg mark = ra_scratch(as, rset_exclude(RSET_GPR, tab)); - Reg link = RID_TMP; - MCLabel l_end = emit_label(as); - emit_tai(as, PPCI_STW, link, tab, (int32_t)offsetof(GCtab, gclist)); - emit_tai(as, PPCI_STB, mark, tab, (int32_t)offsetof(GCtab, marked)); - emit_setgl(as, tab, gc.grayagain); - lua_assert(LJ_GC_BLACK == 0x04); - emit_rot(as, PPCI_RLWINM, mark, mark, 0, 30, 28); /* Clear black bit. */ - emit_getgl(as, link, gc.grayagain); - emit_condbranch(as, PPCI_BC|PPCF_Y, CC_EQ, l_end); - emit_asi(as, PPCI_ANDIDOT, RID_TMP, mark, LJ_GC_BLACK); - emit_tai(as, PPCI_LBZ, mark, tab, (int32_t)offsetof(GCtab, marked)); -} - -static void asm_obar(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_barrieruv]; - IRRef args[2]; - MCLabel l_end; - Reg obj, val, tmp; - /* No need for other object barriers (yet). */ - lua_assert(IR(ir->op1)->o == IR_UREFC); - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ir->op1; /* TValue *tv */ - asm_gencall(as, ci, args); - emit_tai(as, PPCI_ADDI, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768); - obj = IR(ir->op1)->r; - tmp = ra_scratch(as, rset_exclude(RSET_GPR, obj)); - emit_condbranch(as, PPCI_BC|PPCF_Y, CC_EQ, l_end); - emit_asi(as, PPCI_ANDIDOT, tmp, tmp, LJ_GC_BLACK); - emit_condbranch(as, PPCI_BC, CC_EQ, l_end); - emit_asi(as, PPCI_ANDIDOT, RID_TMP, RID_TMP, LJ_GC_WHITES); - val = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, obj)); - emit_tai(as, PPCI_LBZ, tmp, obj, - (int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)); - emit_tai(as, PPCI_LBZ, RID_TMP, val, (int32_t)offsetof(GChead, marked)); -} - -/* -- Arithmetic and logic operations ------------------------------------- */ - -static void asm_fparith(ASMState *as, IRIns *ir, PPCIns pi) -{ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - if (pi == PPCI_FMUL) - emit_fac(as, pi, dest, left, right); - else - emit_fab(as, pi, dest, left, right); -} - -static void asm_fpunary(ASMState *as, IRIns *ir, PPCIns pi) -{ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg left = ra_hintalloc(as, ir->op1, dest, RSET_FPR); - emit_fb(as, pi, dest, left); -} - -static int asm_fpjoin_pow(ASMState *as, IRIns *ir) -{ - IRIns *irp = IR(ir->op1); - if (irp == ir-1 && irp->o == IR_MUL && !ra_used(irp)) { - IRIns *irpp = IR(irp->op1); - if (irpp == ir-2 && irpp->o == IR_FPMATH && - irpp->op2 == IRFPM_LOG2 && !ra_used(irpp)) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_pow]; - IRRef args[2]; - args[0] = irpp->op1; - args[1] = irp->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); - return 1; - } - } - return 0; -} - -static void asm_add(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - if (!asm_fusemadd(as, ir, PPCI_FMADD, PPCI_FMADD)) - asm_fparith(as, ir, PPCI_FADD); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - PPCIns pi; - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (checki16(k)) { - pi = PPCI_ADDI; - /* May fail due to spills/restores above, but simplifies the logic. */ - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi = PPCI_ADDICDOT; - } - emit_tai(as, pi, dest, left, k); - return; - } else if ((k & 0xffff) == 0) { - emit_tai(as, PPCI_ADDIS, dest, left, (k >> 16)); - return; - } else if (!as->sectref) { - emit_tai(as, PPCI_ADDIS, dest, dest, (k + 32768) >> 16); - emit_tai(as, PPCI_ADDI, dest, left, k); - return; - } - } - pi = PPCI_ADD; - /* May fail due to spills/restores above, but simplifies the logic. */ - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi |= PPCF_DOT; - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_tab(as, pi, dest, left, right); - } -} - -static void asm_sub(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - if (!asm_fusemadd(as, ir, PPCI_FMSUB, PPCI_FNMSUB)) - asm_fparith(as, ir, PPCI_FSUB); - } else { - PPCIns pi = PPCI_SUBF; - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left, right; - if (irref_isk(ir->op1)) { - int32_t k = IR(ir->op1)->i; - if (checki16(k)) { - right = ra_alloc1(as, ir->op2, RSET_GPR); - emit_tai(as, PPCI_SUBFIC, dest, right, k); - return; - } - } - /* May fail due to spills/restores above, but simplifies the logic. */ - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi |= PPCF_DOT; - } - left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_tab(as, pi, dest, right, left); /* Subtract right _from_ left. */ - } -} - -static void asm_mul(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - asm_fparith(as, ir, PPCI_FMUL); - } else { - PPCIns pi = PPCI_MULLW; - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (checki16(k)) { - emit_tai(as, PPCI_MULLI, dest, left, k); - return; - } - } - /* May fail due to spills/restores above, but simplifies the logic. */ - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi |= PPCF_DOT; - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_tab(as, pi, dest, left, right); - } -} - -static void asm_neg(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) { - asm_fpunary(as, ir, PPCI_FNEG); - } else { - Reg dest, left; - PPCIns pi = PPCI_NEG; - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi |= PPCF_DOT; - } - dest = ra_dest(as, ir, RSET_GPR); - left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - emit_tab(as, pi, dest, left, 0); - } -} - -static void asm_arithov(ASMState *as, IRIns *ir, PPCIns pi) -{ - Reg dest, left, right; - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - } - asm_guardcc(as, CC_SO); - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - if (pi == PPCI_SUBFO) { Reg tmp = left; left = right; right = tmp; } - emit_tab(as, pi|PPCF_DOT, dest, left, right); -} - -#if LJ_HASFFI -static void asm_add64(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_alloc1(as, ir->op1, RSET_GPR); - PPCIns pi = PPCI_ADDE; - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (k == 0) - pi = PPCI_ADDZE; - else if (k == -1) - pi = PPCI_ADDME; - else - goto needright; - right = 0; - } else { - needright: - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - } - emit_tab(as, pi, dest, left, right); - ir--; - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc1(as, ir->op1, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (checki16(k)) { - emit_tai(as, PPCI_ADDIC, dest, left, k); - return; - } - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_tab(as, PPCI_ADDC, dest, left, right); -} - -static void asm_sub64(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left, right = ra_alloc1(as, ir->op2, RSET_GPR); - PPCIns pi = PPCI_SUBFE; - if (irref_isk(ir->op1)) { - int32_t k = IR(ir->op1)->i; - if (k == 0) - pi = PPCI_SUBFZE; - else if (k == -1) - pi = PPCI_SUBFME; - else - goto needleft; - left = 0; - } else { - needleft: - left = ra_alloc1(as, ir->op1, rset_exclude(RSET_GPR, right)); - } - emit_tab(as, pi, dest, right, left); /* Subtract right _from_ left. */ - ir--; - dest = ra_dest(as, ir, RSET_GPR); - right = ra_alloc1(as, ir->op2, RSET_GPR); - if (irref_isk(ir->op1)) { - int32_t k = IR(ir->op1)->i; - if (checki16(k)) { - emit_tai(as, PPCI_SUBFIC, dest, right, k); - return; - } - } - left = ra_alloc1(as, ir->op1, rset_exclude(RSET_GPR, right)); - emit_tab(as, PPCI_SUBFC, dest, right, left); -} - -static void asm_neg64(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - emit_tab(as, PPCI_SUBFZE, dest, left, 0); - ir--; - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc1(as, ir->op1, RSET_GPR); - emit_tai(as, PPCI_SUBFIC, dest, left, 0); -} -#endif - -static void asm_bitnot(ASMState *as, IRIns *ir) -{ - Reg dest, left, right; - PPCIns pi = PPCI_NOR; - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi |= PPCF_DOT; - } - dest = ra_dest(as, ir, RSET_GPR); - if (mayfuse(as, ir->op1)) { - IRIns *irl = IR(ir->op1); - if (irl->o == IR_BAND) - pi ^= (PPCI_NOR ^ PPCI_NAND); - else if (irl->o == IR_BXOR) - pi ^= (PPCI_NOR ^ PPCI_EQV); - else if (irl->o != IR_BOR) - goto nofuse; - left = ra_hintalloc(as, irl->op1, dest, RSET_GPR); - right = ra_alloc1(as, irl->op2, rset_exclude(RSET_GPR, left)); - } else { -nofuse: - left = right = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - } - emit_asb(as, pi, dest, left, right); -} - -static void asm_bitswap(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - IRIns *irx; - if (mayfuse(as, ir->op1) && (irx = IR(ir->op1))->o == IR_XLOAD && - ra_noreg(irx->r) && (irt_isint(irx->t) || irt_isu32(irx->t))) { - /* Fuse BSWAP with XLOAD to lwbrx. */ - asm_fusexrefx(as, PPCI_LWBRX, dest, irx->op1, RSET_GPR); - } else { - Reg left = ra_alloc1(as, ir->op1, RSET_GPR); - Reg tmp = dest; - if (tmp == left) { - tmp = RID_TMP; - emit_mr(as, dest, RID_TMP); - } - emit_rot(as, PPCI_RLWIMI, tmp, left, 24, 16, 23); - emit_rot(as, PPCI_RLWIMI, tmp, left, 24, 0, 7); - emit_rotlwi(as, tmp, left, 8); - } -} - -static void asm_bitop(ASMState *as, IRIns *ir, PPCIns pi, PPCIns pik) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg right, left = ra_hintalloc(as, ir->op1, dest, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - Reg tmp = left; - if ((checku16(k) || (k & 0xffff) == 0) || (tmp = dest, !as->sectref)) { - if (!checku16(k)) { - emit_asi(as, pik ^ (PPCI_ORI ^ PPCI_ORIS), dest, tmp, (k >> 16)); - if ((k & 0xffff) == 0) return; - } - emit_asi(as, pik, dest, left, k); - return; - } - } - /* May fail due to spills/restores above, but simplifies the logic. */ - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - pi |= PPCF_DOT; - } - right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_asb(as, pi, dest, left, right); -} - -/* Fuse BAND with contiguous bitmask and a shift to rlwinm. */ -static void asm_fuseandsh(ASMState *as, PPCIns pi, int32_t mask, IRRef ref) -{ - IRIns *ir; - Reg left; - if (mayfuse(as, ref) && (ir = IR(ref), ra_noreg(ir->r)) && - irref_isk(ir->op2) && ir->o >= IR_BSHL && ir->o <= IR_BROR) { - int32_t sh = (IR(ir->op2)->i & 31); - switch (ir->o) { - case IR_BSHL: - if ((mask & ((1u<>sh))) goto nofuse; - sh = ((32-sh)&31); - break; - case IR_BROL: - break; - default: - goto nofuse; - } - left = ra_alloc1(as, ir->op1, RSET_GPR); - *--as->mcp = pi | PPCF_T(left) | PPCF_B(sh); - return; - } -nofuse: - left = ra_alloc1(as, ref, RSET_GPR); - *--as->mcp = pi | PPCF_T(left); -} - -static void asm_bitand(ASMState *as, IRIns *ir) -{ - Reg dest, left, right; - IRRef lref = ir->op1; - PPCIns dot = 0; - IRRef op2; - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - dot = PPCF_DOT; - } - dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (k) { - /* First check for a contiguous bitmask as used by rlwinm. */ - uint32_t s1 = lj_ffs((uint32_t)k); - uint32_t k1 = ((uint32_t)k >> s1); - if ((k1 & (k1+1)) == 0) { - asm_fuseandsh(as, PPCI_RLWINM|dot | PPCF_A(dest) | - PPCF_MB(31-lj_fls((uint32_t)k)) | PPCF_ME(31-s1), - k, lref); - return; - } - if (~(uint32_t)k) { - uint32_t s2 = lj_ffs(~(uint32_t)k); - uint32_t k2 = (~(uint32_t)k >> s2); - if ((k2 & (k2+1)) == 0) { - asm_fuseandsh(as, PPCI_RLWINM|dot | PPCF_A(dest) | - PPCF_MB(32-s2) | PPCF_ME(30-lj_fls(~(uint32_t)k)), - k, lref); - return; - } - } - } - if (checku16(k)) { - left = ra_alloc1(as, lref, RSET_GPR); - emit_asi(as, PPCI_ANDIDOT, dest, left, k); - return; - } else if ((k & 0xffff) == 0) { - left = ra_alloc1(as, lref, RSET_GPR); - emit_asi(as, PPCI_ANDISDOT, dest, left, (k >> 16)); - return; - } - } - op2 = ir->op2; - if (mayfuse(as, op2) && IR(op2)->o == IR_BNOT && ra_noreg(IR(op2)->r)) { - dot ^= (PPCI_AND ^ PPCI_ANDC); - op2 = IR(op2)->op1; - } - left = ra_hintalloc(as, lref, dest, RSET_GPR); - right = ra_alloc1(as, op2, rset_exclude(RSET_GPR, left)); - emit_asb(as, PPCI_AND ^ dot, dest, left, right); -} - -static void asm_bitshift(ASMState *as, IRIns *ir, PPCIns pi, PPCIns pik) -{ - Reg dest, left; - Reg dot = 0; - if (as->flagmcp == as->mcp) { - as->flagmcp = NULL; - as->mcp++; - dot = PPCF_DOT; - } - dest = ra_dest(as, ir, RSET_GPR); - left = ra_alloc1(as, ir->op1, RSET_GPR); - if (irref_isk(ir->op2)) { /* Constant shifts. */ - int32_t shift = (IR(ir->op2)->i & 31); - if (pik == 0) /* SLWI */ - emit_rot(as, PPCI_RLWINM|dot, dest, left, shift, 0, 31-shift); - else if (pik == 1) /* SRWI */ - emit_rot(as, PPCI_RLWINM|dot, dest, left, (32-shift)&31, shift, 31); - else - emit_asb(as, pik|dot, dest, left, shift); - } else { - Reg right = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, left)); - emit_asb(as, pi|dot, dest, left, right); - } -} - -static void asm_min_max(ASMState *as, IRIns *ir, int ismax) -{ - if (irt_isnum(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg tmp = dest; - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - if (tmp == left || tmp == right) - tmp = ra_scratch(as, rset_exclude(rset_exclude(rset_exclude(RSET_FPR, - dest), left), right)); - emit_facb(as, PPCI_FSEL, dest, tmp, - ismax ? left : right, ismax ? right : left); - emit_fab(as, PPCI_FSUB, tmp, left, right); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg tmp1 = RID_TMP, tmp2 = dest; - Reg right, left = ra_alloc2(as, ir, RSET_GPR); - right = (left >> 8); left &= 255; - if (tmp2 == left || tmp2 == right) - tmp2 = ra_scratch(as, rset_exclude(rset_exclude(rset_exclude(RSET_GPR, - dest), left), right)); - emit_tab(as, PPCI_ADD, dest, tmp2, right); - emit_asb(as, ismax ? PPCI_ANDC : PPCI_AND, tmp2, tmp2, tmp1); - emit_tab(as, PPCI_SUBFE, tmp1, tmp1, tmp1); - emit_tab(as, PPCI_SUBFC, tmp2, tmp2, tmp1); - emit_asi(as, PPCI_XORIS, tmp2, right, 0x8000); - emit_asi(as, PPCI_XORIS, tmp1, left, 0x8000); - } -} - -/* -- Comparisons --------------------------------------------------------- */ - -#define CC_UNSIGNED 0x08 /* Unsigned integer comparison. */ -#define CC_TWO 0x80 /* Check two flags for FP comparison. */ - -/* Map of comparisons to flags. ORDER IR. */ -static const uint8_t asm_compmap[IR_ABC+1] = { - /* op int cc FP cc */ - /* LT */ CC_GE + (CC_GE<<4), - /* GE */ CC_LT + (CC_LE<<4) + CC_TWO, - /* LE */ CC_GT + (CC_GE<<4) + CC_TWO, - /* GT */ CC_LE + (CC_LE<<4), - /* ULT */ CC_GE + CC_UNSIGNED + (CC_GT<<4) + CC_TWO, - /* UGE */ CC_LT + CC_UNSIGNED + (CC_LT<<4), - /* ULE */ CC_GT + CC_UNSIGNED + (CC_GT<<4), - /* UGT */ CC_LE + CC_UNSIGNED + (CC_LT<<4) + CC_TWO, - /* EQ */ CC_NE + (CC_NE<<4), - /* NE */ CC_EQ + (CC_EQ<<4), - /* ABC */ CC_LE + CC_UNSIGNED + (CC_LT<<4) + CC_TWO /* Same as UGT. */ -}; - -static void asm_intcomp_(ASMState *as, IRRef lref, IRRef rref, Reg cr, PPCCC cc) -{ - Reg right, left = ra_alloc1(as, lref, RSET_GPR); - if (irref_isk(rref)) { - int32_t k = IR(rref)->i; - if ((cc & CC_UNSIGNED) == 0) { /* Signed comparison with constant. */ - if (checki16(k)) { - emit_tai(as, PPCI_CMPWI, cr, left, k); - /* Signed comparison with zero and referencing previous ins? */ - if (k == 0 && lref == as->curins-1) - as->flagmcp = as->mcp; /* Allow elimination of the compare. */ - return; - } else if ((cc & 3) == (CC_EQ & 3)) { /* Use CMPLWI for EQ or NE. */ - if (checku16(k)) { - emit_tai(as, PPCI_CMPLWI, cr, left, k); - return; - } else if (!as->sectref && ra_noreg(IR(rref)->r)) { - emit_tai(as, PPCI_CMPLWI, cr, RID_TMP, k); - emit_asi(as, PPCI_XORIS, RID_TMP, left, (k >> 16)); - return; - } - } - } else { /* Unsigned comparison with constant. */ - if (checku16(k)) { - emit_tai(as, PPCI_CMPLWI, cr, left, k); - return; - } - } - } - right = ra_alloc1(as, rref, rset_exclude(RSET_GPR, left)); - emit_tab(as, (cc & CC_UNSIGNED) ? PPCI_CMPLW : PPCI_CMPW, cr, left, right); -} - -static void asm_comp(ASMState *as, IRIns *ir) -{ - PPCCC cc = asm_compmap[ir->o]; - if (irt_isnum(ir->t)) { - Reg right, left = ra_alloc2(as, ir, RSET_FPR); - right = (left >> 8); left &= 255; - asm_guardcc(as, (cc >> 4)); - if ((cc & CC_TWO)) - emit_tab(as, PPCI_CROR, ((cc>>4)&3), ((cc>>4)&3), (CC_EQ&3)); - emit_fab(as, PPCI_FCMPU, 0, left, right); - } else { - IRRef lref = ir->op1, rref = ir->op2; - if (irref_isk(lref) && !irref_isk(rref)) { - /* Swap constants to the right (only for ABC). */ - IRRef tmp = lref; lref = rref; rref = tmp; - if ((cc & 2) == 0) cc ^= 1; /* LT <-> GT, LE <-> GE */ - } - asm_guardcc(as, cc); - asm_intcomp_(as, lref, rref, 0, cc); - } -} - -#if LJ_HASFFI -/* 64 bit integer comparisons. */ -static void asm_comp64(ASMState *as, IRIns *ir) -{ - PPCCC cc = asm_compmap[(ir-1)->o]; - if ((cc&3) == (CC_EQ&3)) { - asm_guardcc(as, cc); - emit_tab(as, (cc&4) ? PPCI_CRAND : PPCI_CROR, - (CC_EQ&3), (CC_EQ&3), 4+(CC_EQ&3)); - } else { - asm_guardcc(as, CC_EQ); - emit_tab(as, PPCI_CROR, (CC_EQ&3), (CC_EQ&3), ((cc^~(cc>>2))&1)); - emit_tab(as, (cc&4) ? PPCI_CRAND : PPCI_CRANDC, - (CC_EQ&3), (CC_EQ&3), 4+(cc&3)); - } - /* Loword comparison sets cr1 and is unsigned, except for equality. */ - asm_intcomp_(as, (ir-1)->op1, (ir-1)->op2, 4, - cc | ((cc&3) == (CC_EQ&3) ? 0 : CC_UNSIGNED)); - /* Hiword comparison sets cr0. */ - asm_intcomp_(as, ir->op1, ir->op2, 0, cc); - as->flagmcp = NULL; /* Doesn't work here. */ -} -#endif - -/* -- Support for 64 bit ops in 32 bit mode ------------------------------- */ - -/* Hiword op of a split 64 bit op. Previous op must be the loword op. */ -static void asm_hiop(ASMState *as, IRIns *ir) -{ -#if LJ_HASFFI - /* HIOP is marked as a store because it needs its own DCE logic. */ - int uselo = ra_used(ir-1), usehi = ra_used(ir); /* Loword/hiword used? */ - if (LJ_UNLIKELY(!(as->flags & JIT_F_OPT_DCE))) uselo = usehi = 1; - if ((ir-1)->o == IR_CONV) { /* Conversions to/from 64 bit. */ - as->curins--; /* Always skip the CONV. */ - if (usehi || uselo) - asm_conv64(as, ir); - return; - } else if ((ir-1)->o <= IR_NE) { /* 64 bit integer comparisons. ORDER IR. */ - as->curins--; /* Always skip the loword comparison. */ - asm_comp64(as, ir); - return; - } else if ((ir-1)->o == IR_XSTORE) { - as->curins--; /* Handle both stores here. */ - if ((ir-1)->r != RID_SINK) { - asm_xstore(as, ir, 0); - asm_xstore(as, ir-1, 4); - } - return; - } - if (!usehi) return; /* Skip unused hiword op for all remaining ops. */ - switch ((ir-1)->o) { - case IR_ADD: as->curins--; asm_add64(as, ir); break; - case IR_SUB: as->curins--; asm_sub64(as, ir); break; - case IR_NEG: as->curins--; asm_neg64(as, ir); break; - case IR_CALLN: - case IR_CALLXS: - if (!uselo) - ra_allocref(as, ir->op1, RID2RSET(RID_RETLO)); /* Mark lo op as used. */ - break; - case IR_CNEWI: - /* Nothing to do here. Handled by lo op itself. */ - break; - default: lua_assert(0); break; - } -#else - UNUSED(as); UNUSED(ir); lua_assert(0); /* Unused without FFI. */ -#endif -} - -/* -- Stack handling ------------------------------------------------------ */ - -/* Check Lua stack size for overflow. Use exit handler as fallback. */ -static void asm_stack_check(ASMState *as, BCReg topslot, - IRIns *irp, RegSet allow, ExitNo exitno) -{ - /* Try to get an unused temp. register, otherwise spill/restore RID_RET*. */ - Reg tmp, pbase = irp ? (ra_hasreg(irp->r) ? irp->r : RID_TMP) : RID_BASE; - rset_clear(allow, pbase); - tmp = allow ? rset_pickbot(allow) : - (pbase == RID_RETHI ? RID_RETLO : RID_RETHI); - emit_condbranch(as, PPCI_BC, CC_LT, asm_exitstub_addr(as, exitno)); - if (allow == RSET_EMPTY) /* Restore temp. register. */ - emit_tai(as, PPCI_LWZ, tmp, RID_SP, SPOFS_TMPW); - else - ra_modified(as, tmp); - emit_ai(as, PPCI_CMPLWI, RID_TMP, (int32_t)(8*topslot)); - emit_tab(as, PPCI_SUBF, RID_TMP, pbase, tmp); - emit_tai(as, PPCI_LWZ, tmp, tmp, offsetof(lua_State, maxstack)); - if (pbase == RID_TMP) - emit_getgl(as, RID_TMP, jit_base); - emit_getgl(as, tmp, jit_L); - if (allow == RSET_EMPTY) /* Spill temp. register. */ - emit_tai(as, PPCI_STW, tmp, RID_SP, SPOFS_TMPW); -} - -/* Restore Lua stack from on-trace state. */ -static void asm_stack_restore(ASMState *as, SnapShot *snap) -{ - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - SnapEntry *flinks = &as->T->snapmap[snap_nextofs(as->T, snap)-1]; - MSize n, nent = snap->nent; - /* Store the value of all modified slots to the Lua stack. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - BCReg s = snap_slot(sn); - int32_t ofs = 8*((int32_t)s-1); - IRRef ref = snap_ref(sn); - IRIns *ir = IR(ref); - if ((sn & SNAP_NORESTORE)) - continue; - if (irt_isnum(ir->t)) { - Reg src = ra_alloc1(as, ref, RSET_FPR); - emit_fai(as, PPCI_STFD, src, RID_BASE, ofs); - } else { - Reg type; - RegSet allow = rset_exclude(RSET_GPR, RID_BASE); - lua_assert(irt_ispri(ir->t) || irt_isaddr(ir->t) || irt_isinteger(ir->t)); - if (!irt_ispri(ir->t)) { - Reg src = ra_alloc1(as, ref, allow); - rset_clear(allow, src); - emit_tai(as, PPCI_STW, src, RID_BASE, ofs+4); - } - if ((sn & (SNAP_CONT|SNAP_FRAME))) { - if (s == 0) continue; /* Do not overwrite link to previous frame. */ - type = ra_allock(as, (int32_t)(*flinks--), allow); - } else { - type = ra_allock(as, (int32_t)irt_toitype(ir->t), allow); - } - emit_tai(as, PPCI_STW, type, RID_BASE, ofs); - } - checkmclim(as); - } - lua_assert(map + nent == flinks); -} - -/* -- GC handling --------------------------------------------------------- */ - -/* Check GC threshold and do one or more GC steps. */ -static void asm_gc_check(ASMState *as) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_step_jit]; - IRRef args[2]; - MCLabel l_end; - Reg tmp; - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - /* Exit trace if in GCSatomic or GCSfinalize. Avoids syncing GC objects. */ - asm_guardcc(as, CC_NE); /* Assumes asm_snap_prep() already done. */ - emit_ai(as, PPCI_CMPWI, RID_RET, 0); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ASMREF_TMP2; /* MSize steps */ - asm_gencall(as, ci, args); - emit_tai(as, PPCI_ADDI, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768); - tmp = ra_releasetmp(as, ASMREF_TMP2); - emit_loadi(as, tmp, as->gcsteps); - /* Jump around GC step if GC total < GC threshold. */ - emit_condbranch(as, PPCI_BC|PPCF_Y, CC_LT, l_end); - emit_ab(as, PPCI_CMPLW, RID_TMP, tmp); - emit_getgl(as, tmp, gc.threshold); - emit_getgl(as, RID_TMP, gc.total); - as->gcsteps = 0; - checkmclim(as); -} - -/* -- Loop handling ------------------------------------------------------- */ - -/* Fixup the loop branch. */ -static void asm_loop_fixup(ASMState *as) -{ - MCode *p = as->mctop; - MCode *target = as->mcp; - if (as->loopinv) { /* Inverted loop branch? */ - /* asm_guardcc already inverted the cond branch and patched the final b. */ - p[-2] = (p[-2] & (0xffff0000u & ~PPCF_Y)) | (((target-p+2) & 0x3fffu) << 2); - } else { - p[-1] = PPCI_B|(((target-p+1)&0x00ffffffu)<<2); - } -} - -/* -- Head of trace ------------------------------------------------------- */ - -/* Coalesce BASE register for a root trace. */ -static void asm_head_root_base(ASMState *as) -{ - IRIns *ir = IR(REF_BASE); - Reg r = ir->r; - if (ra_hasreg(r)) { - ra_free(as, r); - if (rset_test(as->modset, r) || irt_ismarked(ir->t)) - ir->r = RID_INIT; /* No inheritance for modified BASE register. */ - if (r != RID_BASE) - emit_mr(as, r, RID_BASE); - } -} - -/* Coalesce BASE register for a side trace. */ -static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) -{ - IRIns *ir = IR(REF_BASE); - Reg r = ir->r; - if (ra_hasreg(r)) { - ra_free(as, r); - if (rset_test(as->modset, r) || irt_ismarked(ir->t)) - ir->r = RID_INIT; /* No inheritance for modified BASE register. */ - if (irp->r == r) { - rset_clear(allow, r); /* Mark same BASE register as coalesced. */ - } else if (ra_hasreg(irp->r) && rset_test(as->freeset, irp->r)) { - rset_clear(allow, irp->r); - emit_mr(as, r, irp->r); /* Move from coalesced parent reg. */ - } else { - emit_getgl(as, r, jit_base); /* Otherwise reload BASE. */ - } - } - return allow; -} - -/* -- Tail of trace ------------------------------------------------------- */ - -/* Fixup the tail code. */ -static void asm_tail_fixup(ASMState *as, TraceNo lnk) -{ - MCode *p = as->mctop; - MCode *target; - int32_t spadj = as->T->spadjust; - if (spadj == 0) { - *--p = PPCI_NOP; - *--p = PPCI_NOP; - as->mctop = p; - } else { - /* Patch stack adjustment. */ - lua_assert(checki16(CFRAME_SIZE+spadj)); - p[-3] = PPCI_ADDI | PPCF_T(RID_TMP) | PPCF_A(RID_SP) | (CFRAME_SIZE+spadj); - p[-2] = PPCI_STWU | PPCF_T(RID_TMP) | PPCF_A(RID_SP) | spadj; - } - /* Patch exit branch. */ - target = lnk ? traceref(as->J, lnk)->mcode : (MCode *)lj_vm_exit_interp; - p[-1] = PPCI_B|(((target-p+1)&0x00ffffffu)<<2); -} - -/* Prepare tail of code. */ -static void asm_tail_prep(ASMState *as) -{ - MCode *p = as->mctop - 1; /* Leave room for exit branch. */ - if (as->loopref) { - as->invmcp = as->mcp = p; - } else { - as->mcp = p-2; /* Leave room for stack pointer adjustment. */ - as->invmcp = NULL; - } -} - -/* -- Instruction dispatch ------------------------------------------------ */ - -/* Assemble a single instruction. */ -static void asm_ir(ASMState *as, IRIns *ir) -{ - switch ((IROp)ir->o) { - /* Miscellaneous ops. */ - case IR_LOOP: asm_loop(as); break; - case IR_NOP: case IR_XBAR: lua_assert(!ra_used(ir)); break; - case IR_USE: - ra_alloc1(as, ir->op1, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); break; - case IR_PHI: asm_phi(as, ir); break; - case IR_HIOP: asm_hiop(as, ir); break; - case IR_GCSTEP: asm_gcstep(as, ir); break; - - /* Guarded assertions. */ - case IR_EQ: case IR_NE: - if ((ir-1)->o == IR_HREF && ir->op1 == as->curins-1) { - as->curins--; - asm_href(as, ir-1, (IROp)ir->o); - break; - } - /* fallthrough */ - case IR_LT: case IR_GE: case IR_LE: case IR_GT: - case IR_ULT: case IR_UGE: case IR_ULE: case IR_UGT: - case IR_ABC: - asm_comp(as, ir); - break; - - case IR_RETF: asm_retf(as, ir); break; - - /* Bit ops. */ - case IR_BNOT: asm_bitnot(as, ir); break; - case IR_BSWAP: asm_bitswap(as, ir); break; - - case IR_BAND: asm_bitand(as, ir); break; - case IR_BOR: asm_bitop(as, ir, PPCI_OR, PPCI_ORI); break; - case IR_BXOR: asm_bitop(as, ir, PPCI_XOR, PPCI_XORI); break; - - case IR_BSHL: asm_bitshift(as, ir, PPCI_SLW, 0); break; - case IR_BSHR: asm_bitshift(as, ir, PPCI_SRW, 1); break; - case IR_BSAR: asm_bitshift(as, ir, PPCI_SRAW, PPCI_SRAWI); break; - case IR_BROL: asm_bitshift(as, ir, PPCI_RLWNM|PPCF_MB(0)|PPCF_ME(31), - PPCI_RLWINM|PPCF_MB(0)|PPCF_ME(31)); break; - case IR_BROR: lua_assert(0); break; - - /* Arithmetic ops. */ - case IR_ADD: asm_add(as, ir); break; - case IR_SUB: asm_sub(as, ir); break; - case IR_MUL: asm_mul(as, ir); break; - case IR_DIV: asm_fparith(as, ir, PPCI_FDIV); break; - case IR_MOD: asm_callid(as, ir, IRCALL_lj_vm_modi); break; - case IR_POW: asm_callid(as, ir, IRCALL_lj_vm_powi); break; - case IR_NEG: asm_neg(as, ir); break; - - case IR_ABS: asm_fpunary(as, ir, PPCI_FABS); break; - case IR_ATAN2: asm_callid(as, ir, IRCALL_atan2); break; - case IR_LDEXP: asm_callid(as, ir, IRCALL_ldexp); break; - case IR_MIN: asm_min_max(as, ir, 0); break; - case IR_MAX: asm_min_max(as, ir, 1); break; - case IR_FPMATH: - if (ir->op2 == IRFPM_EXP2 && asm_fpjoin_pow(as, ir)) - break; - if (ir->op2 == IRFPM_SQRT && (as->flags & JIT_F_SQRT)) - asm_fpunary(as, ir, PPCI_FSQRT); - else - asm_callid(as, ir, IRCALL_lj_vm_floor + ir->op2); - break; - - /* Overflow-checking arithmetic ops. */ - case IR_ADDOV: asm_arithov(as, ir, PPCI_ADDO); break; - case IR_SUBOV: asm_arithov(as, ir, PPCI_SUBFO); break; - case IR_MULOV: asm_arithov(as, ir, PPCI_MULLWO); break; - - /* Memory references. */ - case IR_AREF: asm_aref(as, ir); break; - case IR_HREF: asm_href(as, ir, 0); break; - case IR_HREFK: asm_hrefk(as, ir); break; - case IR_NEWREF: asm_newref(as, ir); break; - case IR_UREFO: case IR_UREFC: asm_uref(as, ir); break; - case IR_FREF: asm_fref(as, ir); break; - case IR_STRREF: asm_strref(as, ir); break; - - /* Loads and stores. */ - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - asm_ahuvload(as, ir); - break; - case IR_FLOAD: asm_fload(as, ir); break; - case IR_XLOAD: asm_xload(as, ir); break; - case IR_SLOAD: asm_sload(as, ir); break; - - case IR_ASTORE: case IR_HSTORE: case IR_USTORE: asm_ahustore(as, ir); break; - case IR_FSTORE: asm_fstore(as, ir); break; - case IR_XSTORE: asm_xstore(as, ir, 0); break; - - /* Allocations. */ - case IR_SNEW: case IR_XSNEW: asm_snew(as, ir); break; - case IR_TNEW: asm_tnew(as, ir); break; - case IR_TDUP: asm_tdup(as, ir); break; - case IR_CNEW: case IR_CNEWI: asm_cnew(as, ir); break; - - /* Write barriers. */ - case IR_TBAR: asm_tbar(as, ir); break; - case IR_OBAR: asm_obar(as, ir); break; - - /* Type conversions. */ - case IR_CONV: asm_conv(as, ir); break; - case IR_TOBIT: asm_tobit(as, ir); break; - case IR_TOSTR: asm_tostr(as, ir); break; - case IR_STRTO: asm_strto(as, ir); break; - - /* Calls. */ - case IR_CALLN: case IR_CALLL: case IR_CALLS: asm_call(as, ir); break; - case IR_CALLXS: asm_callx(as, ir); break; - case IR_CARG: break; - - default: - setintV(&as->J->errinfo, ir->o); - lj_trace_err_info(as->J, LJ_TRERR_NYIIR); - break; - } -} - -/* -- Trace setup --------------------------------------------------------- */ - -/* Ensure there are enough stack slots for call arguments. */ -static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - IRRef args[CCI_NARGS_MAX*2]; - uint32_t i, nargs = (int)CCI_NARGS(ci); - int nslots = 2, ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR; - asm_collectargs(as, ir, ci, args); - for (i = 0; i < nargs; i++) - if (args[i] && irt_isfp(IR(args[i])->t)) { - if (nfpr > 0) nfpr--; else nslots = (nslots+3) & ~1; - } else { - if (ngpr > 0) ngpr--; else nslots++; - } - if (nslots > as->evenspill) /* Leave room for args in stack slots. */ - as->evenspill = nslots; - return irt_isfp(ir->t) ? REGSP_HINT(RID_FPRET) : REGSP_HINT(RID_RET); -} - -static void asm_setup_target(ASMState *as) -{ - asm_exitstub_setup(as, as->T->nsnap + (as->parent ? 1 : 0)); -} - -/* -- Trace patching ------------------------------------------------------ */ - -/* Patch exit jumps of existing machine code to a new target. */ -void lj_asm_patchexit(jit_State *J, GCtrace *T, ExitNo exitno, MCode *target) -{ - MCode *p = T->mcode; - MCode *pe = (MCode *)((char *)p + T->szmcode); - MCode *px = exitstub_trace_addr(T, exitno); - MCode *cstart = NULL; - MCode *mcarea = lj_mcode_patch(J, p, 0); - int clearso = 0; - for (; p < pe; p++) { - /* Look for exitstub branch, try to replace with branch to target. */ - uint32_t ins = *p; - if ((ins & 0xfc000000u) == 0x40000000u && - ((ins ^ ((char *)px-(char *)p)) & 0xffffu) == 0) { - ptrdiff_t delta = (char *)target - (char *)p; - if (((ins >> 16) & 3) == (CC_SO&3)) { - clearso = sizeof(MCode); - delta -= sizeof(MCode); - } - /* Many, but not all short-range branches can be patched directly. */ - if (((delta + 0x8000) >> 16) == 0) { - *p = (ins & 0xffdf0000u) | ((uint32_t)delta & 0xffffu) | - ((delta & 0x8000) * (PPCF_Y/0x8000)); - if (!cstart) cstart = p; - } - } else if ((ins & 0xfc000000u) == PPCI_B && - ((ins ^ ((char *)px-(char *)p)) & 0x03ffffffu) == 0) { - ptrdiff_t delta = (char *)target - (char *)p; - lua_assert(((delta + 0x02000000) >> 26) == 0); - *p = PPCI_B | ((uint32_t)delta & 0x03ffffffu); - if (!cstart) cstart = p; - } - } - { /* Always patch long-range branch in exit stub itself. */ - ptrdiff_t delta = (char *)target - (char *)px - clearso; - lua_assert(((delta + 0x02000000) >> 26) == 0); - *px = PPCI_B | ((uint32_t)delta & 0x03ffffffu); - } - if (!cstart) cstart = px; - lj_mcode_sync(cstart, px+1); - if (clearso) { /* Extend the current trace. Ugly workaround. */ - MCode *pp = J->cur.mcode; - J->cur.szmcode += sizeof(MCode); - *--pp = PPCI_MCRXR; /* Clear SO flag. */ - J->cur.mcode = pp; - lj_mcode_sync(pp, pp+1); - } - lj_mcode_patch(J, mcarea, 1); -} - diff --git a/deps/luajit/src/lj_asm_x86.h b/deps/luajit/src/lj_asm_x86.h deleted file mode 100644 index 0b6b2d4..0000000 --- a/deps/luajit/src/lj_asm_x86.h +++ /dev/null @@ -1,2806 +0,0 @@ -/* -** x86/x64 IR assembler (SSA IR -> machine code). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Guard handling ------------------------------------------------------ */ - -/* Generate an exit stub group at the bottom of the reserved MCode memory. */ -static MCode *asm_exitstub_gen(ASMState *as, ExitNo group) -{ - ExitNo i, groupofs = (group*EXITSTUBS_PER_GROUP) & 0xff; - MCode *mxp = as->mcbot; - MCode *mxpstart = mxp; - if (mxp + (2+2)*EXITSTUBS_PER_GROUP+8+5 >= as->mctop) - asm_mclimit(as); - /* Push low byte of exitno for each exit stub. */ - *mxp++ = XI_PUSHi8; *mxp++ = (MCode)groupofs; - for (i = 1; i < EXITSTUBS_PER_GROUP; i++) { - *mxp++ = XI_JMPs; *mxp++ = (MCode)((2+2)*(EXITSTUBS_PER_GROUP - i) - 2); - *mxp++ = XI_PUSHi8; *mxp++ = (MCode)(groupofs + i); - } - /* Push the high byte of the exitno for each exit stub group. */ - *mxp++ = XI_PUSHi8; *mxp++ = (MCode)((group*EXITSTUBS_PER_GROUP)>>8); - /* Store DISPATCH at original stack slot 0. Account for the two push ops. */ - *mxp++ = XI_MOVmi; - *mxp++ = MODRM(XM_OFS8, 0, RID_ESP); - *mxp++ = MODRM(XM_SCALE1, RID_ESP, RID_ESP); - *mxp++ = 2*sizeof(void *); - *(int32_t *)mxp = ptr2addr(J2GG(as->J)->dispatch); mxp += 4; - /* Jump to exit handler which fills in the ExitState. */ - *mxp++ = XI_JMP; mxp += 4; - *((int32_t *)(mxp-4)) = jmprel(mxp, (MCode *)(void *)lj_vm_exit_handler); - /* Commit the code for this group (even if assembly fails later on). */ - lj_mcode_commitbot(as->J, mxp); - as->mcbot = mxp; - as->mclim = as->mcbot + MCLIM_REDZONE; - return mxpstart; -} - -/* Setup all needed exit stubs. */ -static void asm_exitstub_setup(ASMState *as, ExitNo nexits) -{ - ExitNo i; - if (nexits >= EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR) - lj_trace_err(as->J, LJ_TRERR_SNAPOV); - for (i = 0; i < (nexits+EXITSTUBS_PER_GROUP-1)/EXITSTUBS_PER_GROUP; i++) - if (as->J->exitstubgroup[i] == NULL) - as->J->exitstubgroup[i] = asm_exitstub_gen(as, i); -} - -/* Emit conditional branch to exit for guard. -** It's important to emit this *after* all registers have been allocated, -** because rematerializations may invalidate the flags. -*/ -static void asm_guardcc(ASMState *as, int cc) -{ - MCode *target = exitstub_addr(as->J, as->snapno); - MCode *p = as->mcp; - if (LJ_UNLIKELY(p == as->invmcp)) { - as->loopinv = 1; - *(int32_t *)(p+1) = jmprel(p+5, target); - target = p; - cc ^= 1; - if (as->realign) { - emit_sjcc(as, cc, target); - return; - } - } - emit_jcc(as, cc, target); -} - -/* -- Memory operand fusion ----------------------------------------------- */ - -/* Limit linear search to this distance. Avoids O(n^2) behavior. */ -#define CONFLICT_SEARCH_LIM 31 - -/* Check if a reference is a signed 32 bit constant. */ -static int asm_isk32(ASMState *as, IRRef ref, int32_t *k) -{ - if (irref_isk(ref)) { - IRIns *ir = IR(ref); - if (ir->o != IR_KINT64) { - *k = ir->i; - return 1; - } else if (checki32((int64_t)ir_kint64(ir)->u64)) { - *k = (int32_t)ir_kint64(ir)->u64; - return 1; - } - } - return 0; -} - -/* Check if there's no conflicting instruction between curins and ref. -** Also avoid fusing loads if there are multiple references. -*/ -static int noconflict(ASMState *as, IRRef ref, IROp conflict, int noload) -{ - IRIns *ir = as->ir; - IRRef i = as->curins; - if (i > ref + CONFLICT_SEARCH_LIM) - return 0; /* Give up, ref is too far away. */ - while (--i > ref) { - if (ir[i].o == conflict) - return 0; /* Conflict found. */ - else if (!noload && (ir[i].op1 == ref || ir[i].op2 == ref)) - return 0; - } - return 1; /* Ok, no conflict. */ -} - -/* Fuse array base into memory operand. */ -static IRRef asm_fuseabase(ASMState *as, IRRef ref) -{ - IRIns *irb = IR(ref); - as->mrm.ofs = 0; - if (irb->o == IR_FLOAD) { - IRIns *ira = IR(irb->op1); - lua_assert(irb->op2 == IRFL_TAB_ARRAY); - /* We can avoid the FLOAD of t->array for colocated arrays. */ - if (ira->o == IR_TNEW && ira->op1 <= LJ_MAX_COLOSIZE && - !neverfuse(as) && noconflict(as, irb->op1, IR_NEWREF, 1)) { - as->mrm.ofs = (int32_t)sizeof(GCtab); /* Ofs to colocated array. */ - return irb->op1; /* Table obj. */ - } - } else if (irb->o == IR_ADD && irref_isk(irb->op2)) { - /* Fuse base offset (vararg load). */ - as->mrm.ofs = IR(irb->op2)->i; - return irb->op1; - } - return ref; /* Otherwise use the given array base. */ -} - -/* Fuse array reference into memory operand. */ -static void asm_fusearef(ASMState *as, IRIns *ir, RegSet allow) -{ - IRIns *irx; - lua_assert(ir->o == IR_AREF); - as->mrm.base = (uint8_t)ra_alloc1(as, asm_fuseabase(as, ir->op1), allow); - irx = IR(ir->op2); - if (irref_isk(ir->op2)) { - as->mrm.ofs += 8*irx->i; - as->mrm.idx = RID_NONE; - } else { - rset_clear(allow, as->mrm.base); - as->mrm.scale = XM_SCALE8; - /* Fuse a constant ADD (e.g. t[i+1]) into the offset. - ** Doesn't help much without ABCelim, but reduces register pressure. - */ - if (!LJ_64 && /* Has bad effects with negative index on x64. */ - mayfuse(as, ir->op2) && ra_noreg(irx->r) && - irx->o == IR_ADD && irref_isk(irx->op2)) { - as->mrm.ofs += 8*IR(irx->op2)->i; - as->mrm.idx = (uint8_t)ra_alloc1(as, irx->op1, allow); - } else { - as->mrm.idx = (uint8_t)ra_alloc1(as, ir->op2, allow); - } - } -} - -/* Fuse array/hash/upvalue reference into memory operand. -** Caveat: this may allocate GPRs for the base/idx registers. Be sure to -** pass the final allow mask, excluding any GPRs used for other inputs. -** In particular: 2-operand GPR instructions need to call ra_dest() first! -*/ -static void asm_fuseahuref(ASMState *as, IRRef ref, RegSet allow) -{ - IRIns *ir = IR(ref); - if (ra_noreg(ir->r)) { - switch ((IROp)ir->o) { - case IR_AREF: - if (mayfuse(as, ref)) { - asm_fusearef(as, ir, allow); - return; - } - break; - case IR_HREFK: - if (mayfuse(as, ref)) { - as->mrm.base = (uint8_t)ra_alloc1(as, ir->op1, allow); - as->mrm.ofs = (int32_t)(IR(ir->op2)->op2 * sizeof(Node)); - as->mrm.idx = RID_NONE; - return; - } - break; - case IR_UREFC: - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - GCupval *uv = &gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv; - as->mrm.ofs = ptr2addr(&uv->tv); - as->mrm.base = as->mrm.idx = RID_NONE; - return; - } - break; - default: - lua_assert(ir->o == IR_HREF || ir->o == IR_NEWREF || ir->o == IR_UREFO || - ir->o == IR_KKPTR); - break; - } - } - as->mrm.base = (uint8_t)ra_alloc1(as, ref, allow); - as->mrm.ofs = 0; - as->mrm.idx = RID_NONE; -} - -/* Fuse FLOAD/FREF reference into memory operand. */ -static void asm_fusefref(ASMState *as, IRIns *ir, RegSet allow) -{ - lua_assert(ir->o == IR_FLOAD || ir->o == IR_FREF); - as->mrm.ofs = field_ofs[ir->op2]; - as->mrm.idx = RID_NONE; - if (irref_isk(ir->op1)) { - as->mrm.ofs += IR(ir->op1)->i; - as->mrm.base = RID_NONE; - } else { - as->mrm.base = (uint8_t)ra_alloc1(as, ir->op1, allow); - } -} - -/* Fuse string reference into memory operand. */ -static void asm_fusestrref(ASMState *as, IRIns *ir, RegSet allow) -{ - IRIns *irr; - lua_assert(ir->o == IR_STRREF); - as->mrm.base = as->mrm.idx = RID_NONE; - as->mrm.scale = XM_SCALE1; - as->mrm.ofs = sizeof(GCstr); - if (irref_isk(ir->op1)) { - as->mrm.ofs += IR(ir->op1)->i; - } else { - Reg r = ra_alloc1(as, ir->op1, allow); - rset_clear(allow, r); - as->mrm.base = (uint8_t)r; - } - irr = IR(ir->op2); - if (irref_isk(ir->op2)) { - as->mrm.ofs += irr->i; - } else { - Reg r; - /* Fuse a constant add into the offset, e.g. string.sub(s, i+10). */ - if (!LJ_64 && /* Has bad effects with negative index on x64. */ - mayfuse(as, ir->op2) && irr->o == IR_ADD && irref_isk(irr->op2)) { - as->mrm.ofs += IR(irr->op2)->i; - r = ra_alloc1(as, irr->op1, allow); - } else { - r = ra_alloc1(as, ir->op2, allow); - } - if (as->mrm.base == RID_NONE) - as->mrm.base = (uint8_t)r; - else - as->mrm.idx = (uint8_t)r; - } -} - -static void asm_fusexref(ASMState *as, IRRef ref, RegSet allow) -{ - IRIns *ir = IR(ref); - as->mrm.idx = RID_NONE; - if (ir->o == IR_KPTR || ir->o == IR_KKPTR) { - as->mrm.ofs = ir->i; - as->mrm.base = RID_NONE; - } else if (ir->o == IR_STRREF) { - asm_fusestrref(as, ir, allow); - } else { - as->mrm.ofs = 0; - if (canfuse(as, ir) && ir->o == IR_ADD && ra_noreg(ir->r)) { - /* Gather (base+idx*sz)+ofs as emitted by cdata ptr/array indexing. */ - IRIns *irx; - IRRef idx; - Reg r; - if (asm_isk32(as, ir->op2, &as->mrm.ofs)) { /* Recognize x+ofs. */ - ref = ir->op1; - ir = IR(ref); - if (!(ir->o == IR_ADD && canfuse(as, ir) && ra_noreg(ir->r))) - goto noadd; - } - as->mrm.scale = XM_SCALE1; - idx = ir->op1; - ref = ir->op2; - irx = IR(idx); - if (!(irx->o == IR_BSHL || irx->o == IR_ADD)) { /* Try other operand. */ - idx = ir->op2; - ref = ir->op1; - irx = IR(idx); - } - if (canfuse(as, irx) && ra_noreg(irx->r)) { - if (irx->o == IR_BSHL && irref_isk(irx->op2) && IR(irx->op2)->i <= 3) { - /* Recognize idx<op1; - as->mrm.scale = (uint8_t)(IR(irx->op2)->i << 6); - } else if (irx->o == IR_ADD && irx->op1 == irx->op2) { - /* FOLD does idx*2 ==> idx<<1 ==> idx+idx. */ - idx = irx->op1; - as->mrm.scale = XM_SCALE2; - } - } - r = ra_alloc1(as, idx, allow); - rset_clear(allow, r); - as->mrm.idx = (uint8_t)r; - } - noadd: - as->mrm.base = (uint8_t)ra_alloc1(as, ref, allow); - } -} - -/* Fuse load into memory operand. */ -static Reg asm_fuseload(ASMState *as, IRRef ref, RegSet allow) -{ - IRIns *ir = IR(ref); - if (ra_hasreg(ir->r)) { - if (allow != RSET_EMPTY) { /* Fast path. */ - ra_noweak(as, ir->r); - return ir->r; - } - fusespill: - /* Force a spill if only memory operands are allowed (asm_x87load). */ - as->mrm.base = RID_ESP; - as->mrm.ofs = ra_spill(as, ir); - as->mrm.idx = RID_NONE; - return RID_MRM; - } - if (ir->o == IR_KNUM) { - RegSet avail = as->freeset & ~as->modset & RSET_FPR; - lua_assert(allow != RSET_EMPTY); - if (!(avail & (avail-1))) { /* Fuse if less than two regs available. */ - as->mrm.ofs = ptr2addr(ir_knum(ir)); - as->mrm.base = as->mrm.idx = RID_NONE; - return RID_MRM; - } - } else if (ir->o == IR_KINT64) { - RegSet avail = as->freeset & ~as->modset & RSET_GPR; - lua_assert(allow != RSET_EMPTY); - if (!(avail & (avail-1))) { /* Fuse if less than two regs available. */ - as->mrm.ofs = ptr2addr(ir_kint64(ir)); - as->mrm.base = as->mrm.idx = RID_NONE; - return RID_MRM; - } - } else if (mayfuse(as, ref)) { - RegSet xallow = (allow & RSET_GPR) ? allow : RSET_GPR; - if (ir->o == IR_SLOAD) { - if (!(ir->op2 & (IRSLOAD_PARENT|IRSLOAD_CONVERT)) && - noconflict(as, ref, IR_RETF, 0)) { - as->mrm.base = (uint8_t)ra_alloc1(as, REF_BASE, xallow); - as->mrm.ofs = 8*((int32_t)ir->op1-1) + ((ir->op2&IRSLOAD_FRAME)?4:0); - as->mrm.idx = RID_NONE; - return RID_MRM; - } - } else if (ir->o == IR_FLOAD) { - /* Generic fusion is only ok for 32 bit operand (but see asm_comp). */ - if ((irt_isint(ir->t) || irt_isu32(ir->t) || irt_isaddr(ir->t)) && - noconflict(as, ref, IR_FSTORE, 0)) { - asm_fusefref(as, ir, xallow); - return RID_MRM; - } - } else if (ir->o == IR_ALOAD || ir->o == IR_HLOAD || ir->o == IR_ULOAD) { - if (noconflict(as, ref, ir->o + IRDELTA_L2S, 0)) { - asm_fuseahuref(as, ir->op1, xallow); - return RID_MRM; - } - } else if (ir->o == IR_XLOAD) { - /* Generic fusion is not ok for 8/16 bit operands (but see asm_comp). - ** Fusing unaligned memory operands is ok on x86 (except for SIMD types). - */ - if ((!irt_typerange(ir->t, IRT_I8, IRT_U16)) && - noconflict(as, ref, IR_XSTORE, 0)) { - asm_fusexref(as, ir->op1, xallow); - return RID_MRM; - } - } else if (ir->o == IR_VLOAD) { - asm_fuseahuref(as, ir->op1, xallow); - return RID_MRM; - } - } - if (!(as->freeset & allow) && !irref_isk(ref) && - (allow == RSET_EMPTY || ra_hasspill(ir->s) || iscrossref(as, ref))) - goto fusespill; - return ra_allocref(as, ref, allow); -} - -#if LJ_64 -/* Don't fuse a 32 bit load into a 64 bit operation. */ -static Reg asm_fuseloadm(ASMState *as, IRRef ref, RegSet allow, int is64) -{ - if (is64 && !irt_is64(IR(ref)->t)) - return ra_alloc1(as, ref, allow); - return asm_fuseload(as, ref, allow); -} -#else -#define asm_fuseloadm(as, ref, allow, is64) asm_fuseload(as, (ref), (allow)) -#endif - -/* -- Calls --------------------------------------------------------------- */ - -/* Count the required number of stack slots for a call. */ -static int asm_count_call_slots(ASMState *as, const CCallInfo *ci, IRRef *args) -{ - uint32_t i, nargs = CCI_NARGS(ci); - int nslots = 0; -#if LJ_64 - if (LJ_ABI_WIN) { - nslots = (int)(nargs*2); /* Only matters for more than four args. */ - } else { - int ngpr = REGARG_NUMGPR, nfpr = REGARG_NUMFPR; - for (i = 0; i < nargs; i++) - if (args[i] && irt_isfp(IR(args[i])->t)) { - if (nfpr > 0) nfpr--; else nslots += 2; - } else { - if (ngpr > 0) ngpr--; else nslots += 2; - } - } -#else - int ngpr = 0; - if ((ci->flags & CCI_CC_MASK) == CCI_CC_FASTCALL) - ngpr = 2; - else if ((ci->flags & CCI_CC_MASK) == CCI_CC_THISCALL) - ngpr = 1; - for (i = 0; i < nargs; i++) - if (args[i] && irt_isfp(IR(args[i])->t)) { - nslots += irt_isnum(IR(args[i])->t) ? 2 : 1; - } else { - if (ngpr > 0) ngpr--; else nslots++; - } -#endif - return nslots; -} - -/* Generate a call to a C function. */ -static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args) -{ - uint32_t n, nargs = CCI_NARGS(ci); - int32_t ofs = STACKARG_OFS; -#if LJ_64 - uint32_t gprs = REGARG_GPRS; - Reg fpr = REGARG_FIRSTFPR; -#if !LJ_ABI_WIN - MCode *patchnfpr = NULL; -#endif -#else - uint32_t gprs = 0; - if ((ci->flags & CCI_CC_MASK) != CCI_CC_CDECL) { - if ((ci->flags & CCI_CC_MASK) == CCI_CC_THISCALL) - gprs = (REGARG_GPRS & 31); - else if ((ci->flags & CCI_CC_MASK) == CCI_CC_FASTCALL) - gprs = REGARG_GPRS; - } -#endif - if ((void *)ci->func) - emit_call(as, ci->func); -#if LJ_64 - if ((ci->flags & CCI_VARARG)) { /* Special handling for vararg calls. */ -#if LJ_ABI_WIN - for (n = 0; n < 4 && n < nargs; n++) { - IRIns *ir = IR(args[n]); - if (irt_isfp(ir->t)) /* Duplicate FPRs in GPRs. */ - emit_rr(as, XO_MOVDto, (irt_isnum(ir->t) ? REX_64 : 0) | (fpr+n), - ((gprs >> (n*5)) & 31)); /* Either MOVD or MOVQ. */ - } -#else - patchnfpr = --as->mcp; /* Indicate number of used FPRs in register al. */ - *--as->mcp = XI_MOVrib | RID_EAX; -#endif - } -#endif - for (n = 0; n < nargs; n++) { /* Setup args. */ - IRRef ref = args[n]; - IRIns *ir = IR(ref); - Reg r; -#if LJ_64 && LJ_ABI_WIN - /* Windows/x64 argument registers are strictly positional. */ - r = irt_isfp(ir->t) ? (fpr <= REGARG_LASTFPR ? fpr : 0) : (gprs & 31); - fpr++; gprs >>= 5; -#elif LJ_64 - /* POSIX/x64 argument registers are used in order of appearance. */ - if (irt_isfp(ir->t)) { - r = fpr <= REGARG_LASTFPR ? fpr++ : 0; - } else { - r = gprs & 31; gprs >>= 5; - } -#else - if (ref && irt_isfp(ir->t)) { - r = 0; - } else { - r = gprs & 31; gprs >>= 5; - if (!ref) continue; - } -#endif - if (r) { /* Argument is in a register. */ - if (r < RID_MAX_GPR && ref < ASMREF_TMP1) { -#if LJ_64 - if (ir->o == IR_KINT64) - emit_loadu64(as, r, ir_kint64(ir)->u64); - else -#endif - emit_loadi(as, r, ir->i); - } else { - lua_assert(rset_test(as->freeset, r)); /* Must have been evicted. */ - if (ra_hasreg(ir->r)) { - ra_noweak(as, ir->r); - emit_movrr(as, ir, r, ir->r); - } else { - ra_allocref(as, ref, RID2RSET(r)); - } - } - } else if (irt_isfp(ir->t)) { /* FP argument is on stack. */ - lua_assert(!(irt_isfloat(ir->t) && irref_isk(ref))); /* No float k. */ - if (LJ_32 && (ofs & 4) && irref_isk(ref)) { - /* Split stores for unaligned FP consts. */ - emit_movmroi(as, RID_ESP, ofs, (int32_t)ir_knum(ir)->u32.lo); - emit_movmroi(as, RID_ESP, ofs+4, (int32_t)ir_knum(ir)->u32.hi); - } else { - r = ra_alloc1(as, ref, RSET_FPR); - emit_rmro(as, irt_isnum(ir->t) ? XO_MOVSDto : XO_MOVSSto, - r, RID_ESP, ofs); - } - ofs += (LJ_32 && irt_isfloat(ir->t)) ? 4 : 8; - } else { /* Non-FP argument is on stack. */ - if (LJ_32 && ref < ASMREF_TMP1) { - emit_movmroi(as, RID_ESP, ofs, ir->i); - } else { - r = ra_alloc1(as, ref, RSET_GPR); - emit_movtomro(as, REX_64 + r, RID_ESP, ofs); - } - ofs += sizeof(intptr_t); - } - checkmclim(as); - } -#if LJ_64 && !LJ_ABI_WIN - if (patchnfpr) *patchnfpr = fpr - REGARG_FIRSTFPR; -#endif -} - -/* Setup result reg/sp for call. Evict scratch regs. */ -static void asm_setupresult(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - RegSet drop = RSET_SCRATCH; - int hiop = (LJ_32 && (ir+1)->o == IR_HIOP); - if ((ci->flags & CCI_NOFPRCLOBBER)) - drop &= ~RSET_FPR; - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - if (hiop && ra_hasreg((ir+1)->r)) - rset_clear(drop, (ir+1)->r); /* Dest reg handled below. */ - ra_evictset(as, drop); /* Evictions must be performed first. */ - if (ra_used(ir)) { - if (irt_isfp(ir->t)) { - int32_t ofs = sps_scale(ir->s); /* Use spill slot or temp slots. */ -#if LJ_64 - if ((ci->flags & CCI_CASTU64)) { - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - emit_rr(as, XO_MOVD, dest|REX_64, RID_RET); /* Really MOVQ. */ - } - if (ofs) emit_movtomro(as, RID_RET|REX_64, RID_ESP, ofs); - } else { - ra_destreg(as, ir, RID_FPRET); - } -#else - /* Number result is in x87 st0 for x86 calling convention. */ - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - emit_rmro(as, irt_isnum(ir->t) ? XMM_MOVRM(as) : XO_MOVSS, - dest, RID_ESP, ofs); - } - if ((ci->flags & CCI_CASTU64)) { - emit_movtomro(as, RID_RETLO, RID_ESP, ofs); - emit_movtomro(as, RID_RETHI, RID_ESP, ofs+4); - } else { - emit_rmro(as, irt_isnum(ir->t) ? XO_FSTPq : XO_FSTPd, - irt_isnum(ir->t) ? XOg_FSTPq : XOg_FSTPd, RID_ESP, ofs); - } -#endif -#if LJ_32 - } else if (hiop) { - ra_destpair(as, ir); -#endif - } else { - lua_assert(!irt_ispri(ir->t)); - ra_destreg(as, ir, RID_RET); - } - } else if (LJ_32 && irt_isfp(ir->t) && !(ci->flags & CCI_CASTU64)) { - emit_x87op(as, XI_FPOP); /* Pop unused result from x87 st0. */ - } -} - -static void asm_call(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX]; - const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; - asm_collectargs(as, ir, ci, args); - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -/* Return a constant function pointer or NULL for indirect calls. */ -static void *asm_callx_func(ASMState *as, IRIns *irf, IRRef func) -{ -#if LJ_32 - UNUSED(as); - if (irref_isk(func)) - return (void *)irf->i; -#else - if (irref_isk(func)) { - MCode *p; - if (irf->o == IR_KINT64) - p = (MCode *)(void *)ir_k64(irf)->u64; - else - p = (MCode *)(void *)(uintptr_t)(uint32_t)irf->i; - if (p - as->mcp == (int32_t)(p - as->mcp)) - return p; /* Call target is still in +-2GB range. */ - /* Avoid the indirect case of emit_call(). Try to hoist func addr. */ - } -#endif - return NULL; -} - -static void asm_callx(ASMState *as, IRIns *ir) -{ - IRRef args[CCI_NARGS_MAX*2]; - CCallInfo ci; - IRRef func; - IRIns *irf; - int32_t spadj = 0; - ci.flags = asm_callx_flags(as, ir); - asm_collectargs(as, ir, &ci, args); - asm_setupresult(as, ir, &ci); -#if LJ_32 - /* Have to readjust stack after non-cdecl calls due to callee cleanup. */ - if ((ci.flags & CCI_CC_MASK) != CCI_CC_CDECL) - spadj = 4 * asm_count_call_slots(as, &ci, args); -#endif - func = ir->op2; irf = IR(func); - if (irf->o == IR_CARG) { func = irf->op1; irf = IR(func); } - ci.func = (ASMFunction)asm_callx_func(as, irf, func); - if (!(void *)ci.func) { - /* Use a (hoistable) non-scratch register for indirect calls. */ - RegSet allow = (RSET_GPR & ~RSET_SCRATCH); - Reg r = ra_alloc1(as, func, allow); - if (LJ_32) emit_spsub(as, spadj); /* Above code may cause restores! */ - emit_rr(as, XO_GROUP5, XOg_CALL, r); - } else if (LJ_32) { - emit_spsub(as, spadj); - } - asm_gencall(as, &ci, args); -} - -/* -- Returns ------------------------------------------------------------- */ - -/* Return to lower frame. Guard that it goes to the right spot. */ -static void asm_retf(ASMState *as, IRIns *ir) -{ - Reg base = ra_alloc1(as, REF_BASE, RSET_GPR); - void *pc = ir_kptr(IR(ir->op2)); - int32_t delta = 1+bc_a(*((const BCIns *)pc - 1)); - as->topslot -= (BCReg)delta; - if ((int32_t)as->topslot < 0) as->topslot = 0; - irt_setmark(IR(REF_BASE)->t); /* Children must not coalesce with BASE reg. */ - emit_setgl(as, base, jit_base); - emit_addptr(as, base, -8*delta); - asm_guardcc(as, CC_NE); - emit_gmroi(as, XG_ARITHi(XOg_CMP), base, -4, ptr2addr(pc)); -} - -/* -- Type conversions ---------------------------------------------------- */ - -static void asm_tointg(ASMState *as, IRIns *ir, Reg left) -{ - Reg tmp = ra_scratch(as, rset_exclude(RSET_FPR, left)); - Reg dest = ra_dest(as, ir, RSET_GPR); - asm_guardcc(as, CC_P); - asm_guardcc(as, CC_NE); - emit_rr(as, XO_UCOMISD, left, tmp); - emit_rr(as, XO_CVTSI2SD, tmp, dest); - if (!(as->flags & JIT_F_SPLIT_XMM)) - emit_rr(as, XO_XORPS, tmp, tmp); /* Avoid partial register stall. */ - emit_rr(as, XO_CVTTSD2SI, dest, left); - /* Can't fuse since left is needed twice. */ -} - -static void asm_tobit(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - Reg tmp = ra_noreg(IR(ir->op1)->r) ? - ra_alloc1(as, ir->op1, RSET_FPR) : - ra_scratch(as, RSET_FPR); - Reg right = asm_fuseload(as, ir->op2, rset_exclude(RSET_FPR, tmp)); - emit_rr(as, XO_MOVDto, tmp, dest); - emit_mrm(as, XO_ADDSD, tmp, right); - ra_left(as, tmp, ir->op1); -} - -static void asm_conv(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); - int st64 = (st == IRT_I64 || st == IRT_U64 || (LJ_64 && st == IRT_P64)); - int stfp = (st == IRT_NUM || st == IRT_FLOAT); - IRRef lref = ir->op1; - lua_assert(irt_type(ir->t) != st); - lua_assert(!(LJ_32 && (irt_isint64(ir->t) || st64))); /* Handled by SPLIT. */ - if (irt_isfp(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_FPR); - if (stfp) { /* FP to FP conversion. */ - Reg left = asm_fuseload(as, lref, RSET_FPR); - emit_mrm(as, st == IRT_NUM ? XO_CVTSD2SS : XO_CVTSS2SD, dest, left); - if (left == dest) return; /* Avoid the XO_XORPS. */ - } else if (LJ_32 && st == IRT_U32) { /* U32 to FP conversion on x86. */ - /* number = (2^52+2^51 .. u32) - (2^52+2^51) */ - cTValue *k = lj_ir_k64_find(as->J, U64x(43380000,00000000)); - Reg bias = ra_scratch(as, rset_exclude(RSET_FPR, dest)); - if (irt_isfloat(ir->t)) - emit_rr(as, XO_CVTSD2SS, dest, dest); - emit_rr(as, XO_SUBSD, dest, bias); /* Subtract 2^52+2^51 bias. */ - emit_rr(as, XO_XORPS, dest, bias); /* Merge bias and integer. */ - emit_loadn(as, bias, k); - emit_mrm(as, XO_MOVD, dest, asm_fuseload(as, lref, RSET_GPR)); - return; - } else { /* Integer to FP conversion. */ - Reg left = (LJ_64 && (st == IRT_U32 || st == IRT_U64)) ? - ra_alloc1(as, lref, RSET_GPR) : - asm_fuseloadm(as, lref, RSET_GPR, st64); - if (LJ_64 && st == IRT_U64) { - MCLabel l_end = emit_label(as); - const void *k = lj_ir_k64_find(as->J, U64x(43f00000,00000000)); - emit_rma(as, XO_ADDSD, dest, k); /* Add 2^64 to compensate. */ - emit_sjcc(as, CC_NS, l_end); - emit_rr(as, XO_TEST, left|REX_64, left); /* Check if u64 >= 2^63. */ - } - emit_mrm(as, irt_isnum(ir->t) ? XO_CVTSI2SD : XO_CVTSI2SS, - dest|((LJ_64 && (st64 || st == IRT_U32)) ? REX_64 : 0), left); - } - if (!(as->flags & JIT_F_SPLIT_XMM)) - emit_rr(as, XO_XORPS, dest, dest); /* Avoid partial register stall. */ - } else if (stfp) { /* FP to integer conversion. */ - if (irt_isguard(ir->t)) { - /* Checked conversions are only supported from number to int. */ - lua_assert(irt_isint(ir->t) && st == IRT_NUM); - asm_tointg(as, ir, ra_alloc1(as, lref, RSET_FPR)); - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - x86Op op = st == IRT_NUM ? - ((ir->op2 & IRCONV_TRUNC) ? XO_CVTTSD2SI : XO_CVTSD2SI) : - ((ir->op2 & IRCONV_TRUNC) ? XO_CVTTSS2SI : XO_CVTSS2SI); - if (LJ_64 ? irt_isu64(ir->t) : irt_isu32(ir->t)) { - /* LJ_64: For inputs >= 2^63 add -2^64, convert again. */ - /* LJ_32: For inputs >= 2^31 add -2^31, convert again and add 2^31. */ - Reg tmp = ra_noreg(IR(lref)->r) ? ra_alloc1(as, lref, RSET_FPR) : - ra_scratch(as, RSET_FPR); - MCLabel l_end = emit_label(as); - if (LJ_32) - emit_gri(as, XG_ARITHi(XOg_ADD), dest, (int32_t)0x80000000); - emit_rr(as, op, dest|REX_64, tmp); - if (st == IRT_NUM) - emit_rma(as, XO_ADDSD, tmp, lj_ir_k64_find(as->J, - LJ_64 ? U64x(c3f00000,00000000) : U64x(c1e00000,00000000))); - else - emit_rma(as, XO_ADDSS, tmp, lj_ir_k64_find(as->J, - LJ_64 ? U64x(00000000,df800000) : U64x(00000000,cf000000))); - emit_sjcc(as, CC_NS, l_end); - emit_rr(as, XO_TEST, dest|REX_64, dest); /* Check if dest negative. */ - emit_rr(as, op, dest|REX_64, tmp); - ra_left(as, tmp, lref); - } else { - Reg left = asm_fuseload(as, lref, RSET_FPR); - if (LJ_64 && irt_isu32(ir->t)) - emit_rr(as, XO_MOV, dest, dest); /* Zero hiword. */ - emit_mrm(as, op, - dest|((LJ_64 && - (irt_is64(ir->t) || irt_isu32(ir->t))) ? REX_64 : 0), - left); - } - } - } else if (st >= IRT_I8 && st <= IRT_U16) { /* Extend to 32 bit integer. */ - Reg left, dest = ra_dest(as, ir, RSET_GPR); - RegSet allow = RSET_GPR; - x86Op op; - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t)); - if (st == IRT_I8) { - op = XO_MOVSXb; allow = RSET_GPR8; dest |= FORCE_REX; - } else if (st == IRT_U8) { - op = XO_MOVZXb; allow = RSET_GPR8; dest |= FORCE_REX; - } else if (st == IRT_I16) { - op = XO_MOVSXw; - } else { - op = XO_MOVZXw; - } - left = asm_fuseload(as, lref, allow); - /* Add extra MOV if source is already in wrong register. */ - if (!LJ_64 && left != RID_MRM && !rset_test(allow, left)) { - Reg tmp = ra_scratch(as, allow); - emit_rr(as, op, dest, tmp); - emit_rr(as, XO_MOV, tmp, left); - } else { - emit_mrm(as, op, dest, left); - } - } else { /* 32/64 bit integer conversions. */ - if (LJ_32) { /* Only need to handle 32/32 bit no-op (cast) on x86. */ - Reg dest = ra_dest(as, ir, RSET_GPR); - ra_left(as, dest, lref); /* Do nothing, but may need to move regs. */ - } else if (irt_is64(ir->t)) { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (st64 || !(ir->op2 & IRCONV_SEXT)) { - /* 64/64 bit no-op (cast) or 32 to 64 bit zero extension. */ - ra_left(as, dest, lref); /* Do nothing, but may need to move regs. */ - } else { /* 32 to 64 bit sign extension. */ - Reg left = asm_fuseload(as, lref, RSET_GPR); - emit_mrm(as, XO_MOVSXd, dest|REX_64, left); - } - } else { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (st64) { - Reg left = asm_fuseload(as, lref, RSET_GPR); - /* This is either a 32 bit reg/reg mov which zeroes the hiword - ** or a load of the loword from a 64 bit address. - */ - emit_mrm(as, XO_MOV, dest, left); - } else { /* 32/32 bit no-op (cast). */ - ra_left(as, dest, lref); /* Do nothing, but may need to move regs. */ - } - } - } -} - -#if LJ_32 && LJ_HASFFI -/* No SSE conversions to/from 64 bit on x86, so resort to ugly x87 code. */ - -/* 64 bit integer to FP conversion in 32 bit mode. */ -static void asm_conv_fp_int64(ASMState *as, IRIns *ir) -{ - Reg hi = ra_alloc1(as, ir->op1, RSET_GPR); - Reg lo = ra_alloc1(as, (ir-1)->op1, rset_exclude(RSET_GPR, hi)); - int32_t ofs = sps_scale(ir->s); /* Use spill slot or temp slots. */ - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - emit_rmro(as, irt_isnum(ir->t) ? XMM_MOVRM(as) : XO_MOVSS, - dest, RID_ESP, ofs); - } - emit_rmro(as, irt_isnum(ir->t) ? XO_FSTPq : XO_FSTPd, - irt_isnum(ir->t) ? XOg_FSTPq : XOg_FSTPd, RID_ESP, ofs); - if (((ir-1)->op2 & IRCONV_SRCMASK) == IRT_U64) { - /* For inputs in [2^63,2^64-1] add 2^64 to compensate. */ - MCLabel l_end = emit_label(as); - emit_rma(as, XO_FADDq, XOg_FADDq, - lj_ir_k64_find(as->J, U64x(43f00000,00000000))); - emit_sjcc(as, CC_NS, l_end); - emit_rr(as, XO_TEST, hi, hi); /* Check if u64 >= 2^63. */ - } else { - lua_assert(((ir-1)->op2 & IRCONV_SRCMASK) == IRT_I64); - } - emit_rmro(as, XO_FILDq, XOg_FILDq, RID_ESP, 0); - /* NYI: Avoid narrow-to-wide store-to-load forwarding stall. */ - emit_rmro(as, XO_MOVto, hi, RID_ESP, 4); - emit_rmro(as, XO_MOVto, lo, RID_ESP, 0); -} - -/* FP to 64 bit integer conversion in 32 bit mode. */ -static void asm_conv_int64_fp(ASMState *as, IRIns *ir) -{ - IRType st = (IRType)((ir-1)->op2 & IRCONV_SRCMASK); - IRType dt = (((ir-1)->op2 & IRCONV_DSTMASK) >> IRCONV_DSH); - Reg lo, hi; - lua_assert(st == IRT_NUM || st == IRT_FLOAT); - lua_assert(dt == IRT_I64 || dt == IRT_U64); - lua_assert(((ir-1)->op2 & IRCONV_TRUNC)); - hi = ra_dest(as, ir, RSET_GPR); - lo = ra_dest(as, ir-1, rset_exclude(RSET_GPR, hi)); - if (ra_used(ir-1)) emit_rmro(as, XO_MOV, lo, RID_ESP, 0); - /* NYI: Avoid wide-to-narrow store-to-load forwarding stall. */ - if (!(as->flags & JIT_F_SSE3)) { /* Set FPU rounding mode to default. */ - emit_rmro(as, XO_FLDCW, XOg_FLDCW, RID_ESP, 4); - emit_rmro(as, XO_MOVto, lo, RID_ESP, 4); - emit_gri(as, XG_ARITHi(XOg_AND), lo, 0xf3ff); - } - if (dt == IRT_U64) { - /* For inputs in [2^63,2^64-1] add -2^64 and convert again. */ - MCLabel l_pop, l_end = emit_label(as); - emit_x87op(as, XI_FPOP); - l_pop = emit_label(as); - emit_sjmp(as, l_end); - emit_rmro(as, XO_MOV, hi, RID_ESP, 4); - if ((as->flags & JIT_F_SSE3)) - emit_rmro(as, XO_FISTTPq, XOg_FISTTPq, RID_ESP, 0); - else - emit_rmro(as, XO_FISTPq, XOg_FISTPq, RID_ESP, 0); - emit_rma(as, XO_FADDq, XOg_FADDq, - lj_ir_k64_find(as->J, U64x(c3f00000,00000000))); - emit_sjcc(as, CC_NS, l_pop); - emit_rr(as, XO_TEST, hi, hi); /* Check if out-of-range (2^63). */ - } - emit_rmro(as, XO_MOV, hi, RID_ESP, 4); - if ((as->flags & JIT_F_SSE3)) { /* Truncation is easy with SSE3. */ - emit_rmro(as, XO_FISTTPq, XOg_FISTTPq, RID_ESP, 0); - } else { /* Otherwise set FPU rounding mode to truncate before the store. */ - emit_rmro(as, XO_FISTPq, XOg_FISTPq, RID_ESP, 0); - emit_rmro(as, XO_FLDCW, XOg_FLDCW, RID_ESP, 0); - emit_rmro(as, XO_MOVtow, lo, RID_ESP, 0); - emit_rmro(as, XO_ARITHw(XOg_OR), lo, RID_ESP, 0); - emit_loadi(as, lo, 0xc00); - emit_rmro(as, XO_FNSTCW, XOg_FNSTCW, RID_ESP, 0); - } - if (dt == IRT_U64) - emit_x87op(as, XI_FDUP); - emit_mrm(as, st == IRT_NUM ? XO_FLDq : XO_FLDd, - st == IRT_NUM ? XOg_FLDq: XOg_FLDd, - asm_fuseload(as, ir->op1, RSET_EMPTY)); -} -#endif - -static void asm_strto(ASMState *as, IRIns *ir) -{ - /* Force a spill slot for the destination register (if any). */ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_strscan_num]; - IRRef args[2]; - RegSet drop = RSET_SCRATCH; - if ((drop & RSET_FPR) != RSET_FPR && ra_hasreg(ir->r)) - rset_set(drop, ir->r); /* WIN64 doesn't spill all FPRs. */ - ra_evictset(as, drop); - asm_guardcc(as, CC_E); - emit_rr(as, XO_TEST, RID_RET, RID_RET); /* Test return status. */ - args[0] = ir->op1; /* GCstr *str */ - args[1] = ASMREF_TMP1; /* TValue *n */ - asm_gencall(as, ci, args); - /* Store the result to the spill slot or temp slots. */ - emit_rmro(as, XO_LEA, ra_releasetmp(as, ASMREF_TMP1)|REX_64, - RID_ESP, sps_scale(ir->s)); -} - -static void asm_tostr(ASMState *as, IRIns *ir) -{ - IRIns *irl = IR(ir->op1); - IRRef args[2]; - args[0] = ASMREF_L; - as->gcsteps++; - if (irt_isnum(irl->t)) { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromnum]; - args[1] = ASMREF_TMP1; /* const lua_Number * */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - emit_rmro(as, XO_LEA, ra_releasetmp(as, ASMREF_TMP1)|REX_64, - RID_ESP, ra_spill(as, irl)); - } else { - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_str_fromint]; - args[1] = ir->op1; /* int32_t k */ - asm_setupresult(as, ir, ci); /* GCstr * */ - asm_gencall(as, ci, args); - } -} - -/* -- Memory references --------------------------------------------------- */ - -static void asm_aref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - asm_fusearef(as, ir, RSET_GPR); - if (!(as->mrm.idx == RID_NONE && as->mrm.ofs == 0)) - emit_mrm(as, XO_LEA, dest, RID_MRM); - else if (as->mrm.base != dest) - emit_rr(as, XO_MOV, dest, as->mrm.base); -} - -/* Merge NE(HREF, niltv) check. */ -static MCode *merge_href_niltv(ASMState *as, IRIns *ir) -{ - /* Assumes nothing else generates NE of HREF. */ - if ((ir[1].o == IR_NE || ir[1].o == IR_EQ) && ir[1].op1 == as->curins && - ra_hasreg(ir->r)) { - MCode *p = as->mcp; - p += (LJ_64 && *p != XI_ARITHi) ? 7+6 : 6+6; - /* Ensure no loop branch inversion happened. */ - if (p[-6] == 0x0f && p[-5] == XI_JCCn+(CC_NE^(ir[1].o & 1))) { - as->mcp = p; /* Kill cmp reg, imm32 + jz exit. */ - return p + *(int32_t *)(p-4); /* Return exit address. */ - } - } - return NULL; -} - -/* Inlined hash lookup. Specialized for key type and for const keys. -** The equivalent C code is: -** Node *n = hashkey(t, key); -** do { -** if (lj_obj_equal(&n->key, key)) return &n->val; -** } while ((n = nextnode(n))); -** return niltv(L); -*/ -static void asm_href(ASMState *as, IRIns *ir) -{ - MCode *nilexit = merge_href_niltv(as, ir); /* Do this before any restores. */ - RegSet allow = RSET_GPR; - Reg dest = ra_dest(as, ir, allow); - Reg tab = ra_alloc1(as, ir->op1, rset_clear(allow, dest)); - Reg key = RID_NONE, tmp = RID_NONE; - IRIns *irkey = IR(ir->op2); - int isk = irref_isk(ir->op2); - IRType1 kt = irkey->t; - uint32_t khash; - MCLabel l_end, l_loop, l_next; - - if (!isk) { - rset_clear(allow, tab); - key = ra_alloc1(as, ir->op2, irt_isnum(kt) ? RSET_FPR : allow); - if (!irt_isstr(kt)) - tmp = ra_scratch(as, rset_exclude(allow, key)); - } - - /* Key not found in chain: jump to exit (if merged with NE) or load niltv. */ - l_end = emit_label(as); - if (nilexit && ir[1].o == IR_NE) { - emit_jcc(as, CC_E, nilexit); /* XI_JMP is not found by lj_asm_patchexit. */ - nilexit = NULL; - } else { - emit_loada(as, dest, niltvg(J2G(as->J))); - } - - /* Follow hash chain until the end. */ - l_loop = emit_sjcc_label(as, CC_NZ); - emit_rr(as, XO_TEST, dest, dest); - emit_rmro(as, XO_MOV, dest, dest, offsetof(Node, next)); - l_next = emit_label(as); - - /* Type and value comparison. */ - if (nilexit) - emit_jcc(as, CC_E, nilexit); - else - emit_sjcc(as, CC_E, l_end); - if (irt_isnum(kt)) { - if (isk) { - /* Assumes -0.0 is already canonicalized to +0.0. */ - emit_gmroi(as, XG_ARITHi(XOg_CMP), dest, offsetof(Node, key.u32.lo), - (int32_t)ir_knum(irkey)->u32.lo); - emit_sjcc(as, CC_NE, l_next); - emit_gmroi(as, XG_ARITHi(XOg_CMP), dest, offsetof(Node, key.u32.hi), - (int32_t)ir_knum(irkey)->u32.hi); - } else { - emit_sjcc(as, CC_P, l_next); - emit_rmro(as, XO_UCOMISD, key, dest, offsetof(Node, key.n)); - emit_sjcc(as, CC_AE, l_next); - /* The type check avoids NaN penalties and complaints from Valgrind. */ -#if LJ_64 - emit_u32(as, LJ_TISNUM); - emit_rmro(as, XO_ARITHi, XOg_CMP, dest, offsetof(Node, key.it)); -#else - emit_i8(as, LJ_TISNUM); - emit_rmro(as, XO_ARITHi8, XOg_CMP, dest, offsetof(Node, key.it)); -#endif - } -#if LJ_64 - } else if (irt_islightud(kt)) { - emit_rmro(as, XO_CMP, key|REX_64, dest, offsetof(Node, key.u64)); -#endif - } else { - if (!irt_ispri(kt)) { - lua_assert(irt_isaddr(kt)); - if (isk) - emit_gmroi(as, XG_ARITHi(XOg_CMP), dest, offsetof(Node, key.gcr), - ptr2addr(ir_kgc(irkey))); - else - emit_rmro(as, XO_CMP, key, dest, offsetof(Node, key.gcr)); - emit_sjcc(as, CC_NE, l_next); - } - lua_assert(!irt_isnil(kt)); - emit_i8(as, irt_toitype(kt)); - emit_rmro(as, XO_ARITHi8, XOg_CMP, dest, offsetof(Node, key.it)); - } - emit_sfixup(as, l_loop); - checkmclim(as); - - /* Load main position relative to tab->node into dest. */ - khash = isk ? ir_khash(irkey) : 1; - if (khash == 0) { - emit_rmro(as, XO_MOV, dest, tab, offsetof(GCtab, node)); - } else { - emit_rmro(as, XO_ARITH(XOg_ADD), dest, tab, offsetof(GCtab, node)); - if ((as->flags & JIT_F_PREFER_IMUL)) { - emit_i8(as, sizeof(Node)); - emit_rr(as, XO_IMULi8, dest, dest); - } else { - emit_shifti(as, XOg_SHL, dest, 3); - emit_rmrxo(as, XO_LEA, dest, dest, dest, XM_SCALE2, 0); - } - if (isk) { - emit_gri(as, XG_ARITHi(XOg_AND), dest, (int32_t)khash); - emit_rmro(as, XO_MOV, dest, tab, offsetof(GCtab, hmask)); - } else if (irt_isstr(kt)) { - emit_rmro(as, XO_ARITH(XOg_AND), dest, key, offsetof(GCstr, hash)); - emit_rmro(as, XO_MOV, dest, tab, offsetof(GCtab, hmask)); - } else { /* Must match with hashrot() in lj_tab.c. */ - emit_rmro(as, XO_ARITH(XOg_AND), dest, tab, offsetof(GCtab, hmask)); - emit_rr(as, XO_ARITH(XOg_SUB), dest, tmp); - emit_shifti(as, XOg_ROL, tmp, HASH_ROT3); - emit_rr(as, XO_ARITH(XOg_XOR), dest, tmp); - emit_shifti(as, XOg_ROL, dest, HASH_ROT2); - emit_rr(as, XO_ARITH(XOg_SUB), tmp, dest); - emit_shifti(as, XOg_ROL, dest, HASH_ROT1); - emit_rr(as, XO_ARITH(XOg_XOR), tmp, dest); - if (irt_isnum(kt)) { - emit_rr(as, XO_ARITH(XOg_ADD), dest, dest); -#if LJ_64 - emit_shifti(as, XOg_SHR|REX_64, dest, 32); - emit_rr(as, XO_MOV, tmp, dest); - emit_rr(as, XO_MOVDto, key|REX_64, dest); -#else - emit_rmro(as, XO_MOV, dest, RID_ESP, ra_spill(as, irkey)+4); - emit_rr(as, XO_MOVDto, key, tmp); -#endif - } else { - emit_rr(as, XO_MOV, tmp, key); - emit_rmro(as, XO_LEA, dest, key, HASH_BIAS); - } - } - } -} - -static void asm_hrefk(ASMState *as, IRIns *ir) -{ - IRIns *kslot = IR(ir->op2); - IRIns *irkey = IR(kslot->op1); - int32_t ofs = (int32_t)(kslot->op2 * sizeof(Node)); - Reg dest = ra_used(ir) ? ra_dest(as, ir, RSET_GPR) : RID_NONE; - Reg node = ra_alloc1(as, ir->op1, RSET_GPR); -#if !LJ_64 - MCLabel l_exit; -#endif - lua_assert(ofs % sizeof(Node) == 0); - if (ra_hasreg(dest)) { - if (ofs != 0) { - if (dest == node && !(as->flags & JIT_F_LEA_AGU)) - emit_gri(as, XG_ARITHi(XOg_ADD), dest, ofs); - else - emit_rmro(as, XO_LEA, dest, node, ofs); - } else if (dest != node) { - emit_rr(as, XO_MOV, dest, node); - } - } - asm_guardcc(as, CC_NE); -#if LJ_64 - if (!irt_ispri(irkey->t)) { - Reg key = ra_scratch(as, rset_exclude(RSET_GPR, node)); - emit_rmro(as, XO_CMP, key|REX_64, node, - ofs + (int32_t)offsetof(Node, key.u64)); - lua_assert(irt_isnum(irkey->t) || irt_isgcv(irkey->t)); - /* Assumes -0.0 is already canonicalized to +0.0. */ - emit_loadu64(as, key, irt_isnum(irkey->t) ? ir_knum(irkey)->u64 : - ((uint64_t)irt_toitype(irkey->t) << 32) | - (uint64_t)(uint32_t)ptr2addr(ir_kgc(irkey))); - } else { - lua_assert(!irt_isnil(irkey->t)); - emit_i8(as, irt_toitype(irkey->t)); - emit_rmro(as, XO_ARITHi8, XOg_CMP, node, - ofs + (int32_t)offsetof(Node, key.it)); - } -#else - l_exit = emit_label(as); - if (irt_isnum(irkey->t)) { - /* Assumes -0.0 is already canonicalized to +0.0. */ - emit_gmroi(as, XG_ARITHi(XOg_CMP), node, - ofs + (int32_t)offsetof(Node, key.u32.lo), - (int32_t)ir_knum(irkey)->u32.lo); - emit_sjcc(as, CC_NE, l_exit); - emit_gmroi(as, XG_ARITHi(XOg_CMP), node, - ofs + (int32_t)offsetof(Node, key.u32.hi), - (int32_t)ir_knum(irkey)->u32.hi); - } else { - if (!irt_ispri(irkey->t)) { - lua_assert(irt_isgcv(irkey->t)); - emit_gmroi(as, XG_ARITHi(XOg_CMP), node, - ofs + (int32_t)offsetof(Node, key.gcr), - ptr2addr(ir_kgc(irkey))); - emit_sjcc(as, CC_NE, l_exit); - } - lua_assert(!irt_isnil(irkey->t)); - emit_i8(as, irt_toitype(irkey->t)); - emit_rmro(as, XO_ARITHi8, XOg_CMP, node, - ofs + (int32_t)offsetof(Node, key.it)); - } -#endif -} - -static void asm_newref(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_tab_newkey]; - IRRef args[3]; - IRIns *irkey; - Reg tmp; - if (ir->r == RID_SINK) - return; - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ir->op1; /* GCtab *t */ - args[2] = ASMREF_TMP1; /* cTValue *key */ - asm_setupresult(as, ir, ci); /* TValue * */ - asm_gencall(as, ci, args); - tmp = ra_releasetmp(as, ASMREF_TMP1); - irkey = IR(ir->op2); - if (irt_isnum(irkey->t)) { - /* For numbers use the constant itself or a spill slot as a TValue. */ - if (irref_isk(ir->op2)) - emit_loada(as, tmp, ir_knum(irkey)); - else - emit_rmro(as, XO_LEA, tmp|REX_64, RID_ESP, ra_spill(as, irkey)); - } else { - /* Otherwise use g->tmptv to hold the TValue. */ - if (!irref_isk(ir->op2)) { - Reg src = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, tmp)); - emit_movtomro(as, REX_64IR(irkey, src), tmp, 0); - } else if (!irt_ispri(irkey->t)) { - emit_movmroi(as, tmp, 0, irkey->i); - } - if (!(LJ_64 && irt_islightud(irkey->t))) - emit_movmroi(as, tmp, 4, irt_toitype(irkey->t)); - emit_loada(as, tmp, &J2G(as->J)->tmptv); - } -} - -static void asm_uref(ASMState *as, IRIns *ir) -{ - /* NYI: Check that UREFO is still open and not aliasing a slot. */ - Reg dest = ra_dest(as, ir, RSET_GPR); - if (irref_isk(ir->op1)) { - GCfunc *fn = ir_kfunc(IR(ir->op1)); - MRef *v = &gcref(fn->l.uvptr[(ir->op2 >> 8)])->uv.v; - emit_rma(as, XO_MOV, dest, v); - } else { - Reg uv = ra_scratch(as, RSET_GPR); - Reg func = ra_alloc1(as, ir->op1, RSET_GPR); - if (ir->o == IR_UREFC) { - emit_rmro(as, XO_LEA, dest, uv, offsetof(GCupval, tv)); - asm_guardcc(as, CC_NE); - emit_i8(as, 1); - emit_rmro(as, XO_ARITHib, XOg_CMP, uv, offsetof(GCupval, closed)); - } else { - emit_rmro(as, XO_MOV, dest, uv, offsetof(GCupval, v)); - } - emit_rmro(as, XO_MOV, uv, func, - (int32_t)offsetof(GCfuncL, uvptr) + 4*(int32_t)(ir->op2 >> 8)); - } -} - -static void asm_fref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - asm_fusefref(as, ir, RSET_GPR); - emit_mrm(as, XO_LEA, dest, RID_MRM); -} - -static void asm_strref(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - asm_fusestrref(as, ir, RSET_GPR); - if (as->mrm.base == RID_NONE) - emit_loadi(as, dest, as->mrm.ofs); - else if (as->mrm.base == dest && as->mrm.idx == RID_NONE) - emit_gri(as, XG_ARITHi(XOg_ADD), dest, as->mrm.ofs); - else - emit_mrm(as, XO_LEA, dest, RID_MRM); -} - -/* -- Loads and stores ---------------------------------------------------- */ - -static void asm_fxload(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); - x86Op xo; - if (ir->o == IR_FLOAD) - asm_fusefref(as, ir, RSET_GPR); - else - asm_fusexref(as, ir->op1, RSET_GPR); - /* ir->op2 is ignored -- unaligned loads are ok on x86. */ - switch (irt_type(ir->t)) { - case IRT_I8: xo = XO_MOVSXb; break; - case IRT_U8: xo = XO_MOVZXb; break; - case IRT_I16: xo = XO_MOVSXw; break; - case IRT_U16: xo = XO_MOVZXw; break; - case IRT_NUM: xo = XMM_MOVRM(as); break; - case IRT_FLOAT: xo = XO_MOVSS; break; - default: - if (LJ_64 && irt_is64(ir->t)) - dest |= REX_64; - else - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t) || irt_isaddr(ir->t)); - xo = XO_MOV; - break; - } - emit_mrm(as, xo, dest, RID_MRM); -} - -static void asm_fxstore(ASMState *as, IRIns *ir) -{ - RegSet allow = RSET_GPR; - Reg src = RID_NONE, osrc = RID_NONE; - int32_t k = 0; - if (ir->r == RID_SINK) - return; - /* The IRT_I16/IRT_U16 stores should never be simplified for constant - ** values since mov word [mem], imm16 has a length-changing prefix. - */ - if (irt_isi16(ir->t) || irt_isu16(ir->t) || irt_isfp(ir->t) || - !asm_isk32(as, ir->op2, &k)) { - RegSet allow8 = irt_isfp(ir->t) ? RSET_FPR : - (irt_isi8(ir->t) || irt_isu8(ir->t)) ? RSET_GPR8 : RSET_GPR; - src = osrc = ra_alloc1(as, ir->op2, allow8); - if (!LJ_64 && !rset_test(allow8, src)) { /* Already in wrong register. */ - rset_clear(allow, osrc); - src = ra_scratch(as, allow8); - } - rset_clear(allow, src); - } - if (ir->o == IR_FSTORE) { - asm_fusefref(as, IR(ir->op1), allow); - } else { - asm_fusexref(as, ir->op1, allow); - if (LJ_32 && ir->o == IR_HIOP) as->mrm.ofs += 4; - } - if (ra_hasreg(src)) { - x86Op xo; - switch (irt_type(ir->t)) { - case IRT_I8: case IRT_U8: xo = XO_MOVtob; src |= FORCE_REX; break; - case IRT_I16: case IRT_U16: xo = XO_MOVtow; break; - case IRT_NUM: xo = XO_MOVSDto; break; - case IRT_FLOAT: xo = XO_MOVSSto; break; -#if LJ_64 - case IRT_LIGHTUD: lua_assert(0); /* NYI: mask 64 bit lightuserdata. */ -#endif - default: - if (LJ_64 && irt_is64(ir->t)) - src |= REX_64; - else - lua_assert(irt_isint(ir->t) || irt_isu32(ir->t) || irt_isaddr(ir->t)); - xo = XO_MOVto; - break; - } - emit_mrm(as, xo, src, RID_MRM); - if (!LJ_64 && src != osrc) { - ra_noweak(as, osrc); - emit_rr(as, XO_MOV, src, osrc); - } - } else { - if (irt_isi8(ir->t) || irt_isu8(ir->t)) { - emit_i8(as, k); - emit_mrm(as, XO_MOVmib, 0, RID_MRM); - } else { - lua_assert(irt_is64(ir->t) || irt_isint(ir->t) || irt_isu32(ir->t) || - irt_isaddr(ir->t)); - emit_i32(as, k); - emit_mrm(as, XO_MOVmi, REX_64IR(ir, 0), RID_MRM); - } - } -} - -#if LJ_64 -static Reg asm_load_lightud64(ASMState *as, IRIns *ir, int typecheck) -{ - if (ra_used(ir) || typecheck) { - Reg dest = ra_dest(as, ir, RSET_GPR); - if (typecheck) { - Reg tmp = ra_scratch(as, rset_exclude(RSET_GPR, dest)); - asm_guardcc(as, CC_NE); - emit_i8(as, -2); - emit_rr(as, XO_ARITHi8, XOg_CMP, tmp); - emit_shifti(as, XOg_SAR|REX_64, tmp, 47); - emit_rr(as, XO_MOV, tmp|REX_64, dest); - } - return dest; - } else { - return RID_NONE; - } -} -#endif - -static void asm_ahuvload(ASMState *as, IRIns *ir) -{ - lua_assert(irt_isnum(ir->t) || irt_ispri(ir->t) || irt_isaddr(ir->t) || - (LJ_DUALNUM && irt_isint(ir->t))); -#if LJ_64 - if (irt_islightud(ir->t)) { - Reg dest = asm_load_lightud64(as, ir, 1); - if (ra_hasreg(dest)) { - asm_fuseahuref(as, ir->op1, RSET_GPR); - emit_mrm(as, XO_MOV, dest|REX_64, RID_MRM); - } - return; - } else -#endif - if (ra_used(ir)) { - RegSet allow = irt_isnum(ir->t) ? RSET_FPR : RSET_GPR; - Reg dest = ra_dest(as, ir, allow); - asm_fuseahuref(as, ir->op1, RSET_GPR); - emit_mrm(as, dest < RID_MAX_GPR ? XO_MOV : XMM_MOVRM(as), dest, RID_MRM); - } else { - asm_fuseahuref(as, ir->op1, RSET_GPR); - } - /* Always do the type check, even if the load result is unused. */ - as->mrm.ofs += 4; - asm_guardcc(as, irt_isnum(ir->t) ? CC_AE : CC_NE); - if (LJ_64 && irt_type(ir->t) >= IRT_NUM) { - lua_assert(irt_isinteger(ir->t) || irt_isnum(ir->t)); - emit_u32(as, LJ_TISNUM); - emit_mrm(as, XO_ARITHi, XOg_CMP, RID_MRM); - } else { - emit_i8(as, irt_toitype(ir->t)); - emit_mrm(as, XO_ARITHi8, XOg_CMP, RID_MRM); - } -} - -static void asm_ahustore(ASMState *as, IRIns *ir) -{ - if (ir->r == RID_SINK) - return; - if (irt_isnum(ir->t)) { - Reg src = ra_alloc1(as, ir->op2, RSET_FPR); - asm_fuseahuref(as, ir->op1, RSET_GPR); - emit_mrm(as, XO_MOVSDto, src, RID_MRM); -#if LJ_64 - } else if (irt_islightud(ir->t)) { - Reg src = ra_alloc1(as, ir->op2, RSET_GPR); - asm_fuseahuref(as, ir->op1, rset_exclude(RSET_GPR, src)); - emit_mrm(as, XO_MOVto, src|REX_64, RID_MRM); -#endif - } else { - IRIns *irr = IR(ir->op2); - RegSet allow = RSET_GPR; - Reg src = RID_NONE; - if (!irref_isk(ir->op2)) { - src = ra_alloc1(as, ir->op2, allow); - rset_clear(allow, src); - } - asm_fuseahuref(as, ir->op1, allow); - if (ra_hasreg(src)) { - emit_mrm(as, XO_MOVto, src, RID_MRM); - } else if (!irt_ispri(irr->t)) { - lua_assert(irt_isaddr(ir->t) || (LJ_DUALNUM && irt_isinteger(ir->t))); - emit_i32(as, irr->i); - emit_mrm(as, XO_MOVmi, 0, RID_MRM); - } - as->mrm.ofs += 4; - emit_i32(as, (int32_t)irt_toitype(ir->t)); - emit_mrm(as, XO_MOVmi, 0, RID_MRM); - } -} - -static void asm_sload(ASMState *as, IRIns *ir) -{ - int32_t ofs = 8*((int32_t)ir->op1-1) + ((ir->op2 & IRSLOAD_FRAME) ? 4 : 0); - IRType1 t = ir->t; - Reg base; - lua_assert(!(ir->op2 & IRSLOAD_PARENT)); /* Handled by asm_head_side(). */ - lua_assert(irt_isguard(t) || !(ir->op2 & IRSLOAD_TYPECHECK)); - lua_assert(LJ_DUALNUM || - !irt_isint(t) || (ir->op2 & (IRSLOAD_CONVERT|IRSLOAD_FRAME))); - if ((ir->op2 & IRSLOAD_CONVERT) && irt_isguard(t) && irt_isint(t)) { - Reg left = ra_scratch(as, RSET_FPR); - asm_tointg(as, ir, left); /* Frees dest reg. Do this before base alloc. */ - base = ra_alloc1(as, REF_BASE, RSET_GPR); - emit_rmro(as, XMM_MOVRM(as), left, base, ofs); - t.irt = IRT_NUM; /* Continue with a regular number type check. */ -#if LJ_64 - } else if (irt_islightud(t)) { - Reg dest = asm_load_lightud64(as, ir, (ir->op2 & IRSLOAD_TYPECHECK)); - if (ra_hasreg(dest)) { - base = ra_alloc1(as, REF_BASE, RSET_GPR); - emit_rmro(as, XO_MOV, dest|REX_64, base, ofs); - } - return; -#endif - } else if (ra_used(ir)) { - RegSet allow = irt_isnum(t) ? RSET_FPR : RSET_GPR; - Reg dest = ra_dest(as, ir, allow); - base = ra_alloc1(as, REF_BASE, RSET_GPR); - lua_assert(irt_isnum(t) || irt_isint(t) || irt_isaddr(t)); - if ((ir->op2 & IRSLOAD_CONVERT)) { - t.irt = irt_isint(t) ? IRT_NUM : IRT_INT; /* Check for original type. */ - emit_rmro(as, irt_isint(t) ? XO_CVTSI2SD : XO_CVTSD2SI, dest, base, ofs); - } else if (irt_isnum(t)) { - emit_rmro(as, XMM_MOVRM(as), dest, base, ofs); - } else { - emit_rmro(as, XO_MOV, dest, base, ofs); - } - } else { - if (!(ir->op2 & IRSLOAD_TYPECHECK)) - return; /* No type check: avoid base alloc. */ - base = ra_alloc1(as, REF_BASE, RSET_GPR); - } - if ((ir->op2 & IRSLOAD_TYPECHECK)) { - /* Need type check, even if the load result is unused. */ - asm_guardcc(as, irt_isnum(t) ? CC_AE : CC_NE); - if (LJ_64 && irt_type(t) >= IRT_NUM) { - lua_assert(irt_isinteger(t) || irt_isnum(t)); - emit_u32(as, LJ_TISNUM); - emit_rmro(as, XO_ARITHi, XOg_CMP, base, ofs+4); - } else { - emit_i8(as, irt_toitype(t)); - emit_rmro(as, XO_ARITHi8, XOg_CMP, base, ofs+4); - } - } -} - -/* -- Allocations --------------------------------------------------------- */ - -#if LJ_HASFFI -static void asm_cnew(ASMState *as, IRIns *ir) -{ - CTState *cts = ctype_ctsG(J2G(as->J)); - CTypeID ctypeid = (CTypeID)IR(ir->op1)->i; - CTSize sz = (ir->o == IR_CNEWI || ir->op2 == REF_NIL) ? - lj_ctype_size(cts, ctypeid) : (CTSize)IR(ir->op2)->i; - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_mem_newgco]; - IRRef args[2]; - lua_assert(sz != CTSIZE_INVALID); - - args[0] = ASMREF_L; /* lua_State *L */ - args[1] = ASMREF_TMP1; /* MSize size */ - as->gcsteps++; - asm_setupresult(as, ir, ci); /* GCcdata * */ - - /* Initialize immutable cdata object. */ - if (ir->o == IR_CNEWI) { - RegSet allow = (RSET_GPR & ~RSET_SCRATCH); -#if LJ_64 - Reg r64 = sz == 8 ? REX_64 : 0; - if (irref_isk(ir->op2)) { - IRIns *irk = IR(ir->op2); - uint64_t k = irk->o == IR_KINT64 ? ir_k64(irk)->u64 : - (uint64_t)(uint32_t)irk->i; - if (sz == 4 || checki32((int64_t)k)) { - emit_i32(as, (int32_t)k); - emit_rmro(as, XO_MOVmi, r64, RID_RET, sizeof(GCcdata)); - } else { - emit_movtomro(as, RID_ECX + r64, RID_RET, sizeof(GCcdata)); - emit_loadu64(as, RID_ECX, k); - } - } else { - Reg r = ra_alloc1(as, ir->op2, allow); - emit_movtomro(as, r + r64, RID_RET, sizeof(GCcdata)); - } -#else - int32_t ofs = sizeof(GCcdata); - if (sz == 8) { - ofs += 4; ir++; - lua_assert(ir->o == IR_HIOP); - } - do { - if (irref_isk(ir->op2)) { - emit_movmroi(as, RID_RET, ofs, IR(ir->op2)->i); - } else { - Reg r = ra_alloc1(as, ir->op2, allow); - emit_movtomro(as, r, RID_RET, ofs); - rset_clear(allow, r); - } - if (ofs == sizeof(GCcdata)) break; - ofs -= 4; ir--; - } while (1); -#endif - lua_assert(sz == 4 || sz == 8); - } - - /* Combine initialization of marked, gct and ctypeid. */ - emit_movtomro(as, RID_ECX, RID_RET, offsetof(GCcdata, marked)); - emit_gri(as, XG_ARITHi(XOg_OR), RID_ECX, - (int32_t)((~LJ_TCDATA<<8)+(ctypeid<<16))); - emit_gri(as, XG_ARITHi(XOg_AND), RID_ECX, LJ_GC_WHITES); - emit_opgl(as, XO_MOVZXb, RID_ECX, gc.currentwhite); - - asm_gencall(as, ci, args); - emit_loadi(as, ra_releasetmp(as, ASMREF_TMP1), (int32_t)(sz+sizeof(GCcdata))); -} -#else -#define asm_cnew(as, ir) ((void)0) -#endif - -/* -- Write barriers ------------------------------------------------------ */ - -static void asm_tbar(ASMState *as, IRIns *ir) -{ - Reg tab = ra_alloc1(as, ir->op1, RSET_GPR); - Reg tmp = ra_scratch(as, rset_exclude(RSET_GPR, tab)); - MCLabel l_end = emit_label(as); - emit_movtomro(as, tmp, tab, offsetof(GCtab, gclist)); - emit_setgl(as, tab, gc.grayagain); - emit_getgl(as, tmp, gc.grayagain); - emit_i8(as, ~LJ_GC_BLACK); - emit_rmro(as, XO_ARITHib, XOg_AND, tab, offsetof(GCtab, marked)); - emit_sjcc(as, CC_Z, l_end); - emit_i8(as, LJ_GC_BLACK); - emit_rmro(as, XO_GROUP3b, XOg_TEST, tab, offsetof(GCtab, marked)); -} - -static void asm_obar(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_barrieruv]; - IRRef args[2]; - MCLabel l_end; - Reg obj; - /* No need for other object barriers (yet). */ - lua_assert(IR(ir->op1)->o == IR_UREFC); - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ir->op1; /* TValue *tv */ - asm_gencall(as, ci, args); - emit_loada(as, ra_releasetmp(as, ASMREF_TMP1), J2G(as->J)); - obj = IR(ir->op1)->r; - emit_sjcc(as, CC_Z, l_end); - emit_i8(as, LJ_GC_WHITES); - if (irref_isk(ir->op2)) { - GCobj *vp = ir_kgc(IR(ir->op2)); - emit_rma(as, XO_GROUP3b, XOg_TEST, &vp->gch.marked); - } else { - Reg val = ra_alloc1(as, ir->op2, rset_exclude(RSET_SCRATCH&RSET_GPR, obj)); - emit_rmro(as, XO_GROUP3b, XOg_TEST, val, (int32_t)offsetof(GChead, marked)); - } - emit_sjcc(as, CC_Z, l_end); - emit_i8(as, LJ_GC_BLACK); - emit_rmro(as, XO_GROUP3b, XOg_TEST, obj, - (int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)); -} - -/* -- FP/int arithmetic and logic operations ------------------------------ */ - -/* Load reference onto x87 stack. Force a spill to memory if needed. */ -static void asm_x87load(ASMState *as, IRRef ref) -{ - IRIns *ir = IR(ref); - if (ir->o == IR_KNUM) { - cTValue *tv = ir_knum(ir); - if (tvispzero(tv)) /* Use fldz only for +0. */ - emit_x87op(as, XI_FLDZ); - else if (tvispone(tv)) - emit_x87op(as, XI_FLD1); - else - emit_rma(as, XO_FLDq, XOg_FLDq, tv); - } else if (ir->o == IR_CONV && ir->op2 == IRCONV_NUM_INT && !ra_used(ir) && - !irref_isk(ir->op1) && mayfuse(as, ir->op1)) { - IRIns *iri = IR(ir->op1); - emit_rmro(as, XO_FILDd, XOg_FILDd, RID_ESP, ra_spill(as, iri)); - } else { - emit_mrm(as, XO_FLDq, XOg_FLDq, asm_fuseload(as, ref, RSET_EMPTY)); - } -} - -/* Try to rejoin pow from EXP2, MUL and LOG2 (if still unsplit). */ -static int fpmjoin_pow(ASMState *as, IRIns *ir) -{ - IRIns *irp = IR(ir->op1); - if (irp == ir-1 && irp->o == IR_MUL && !ra_used(irp)) { - IRIns *irpp = IR(irp->op1); - if (irpp == ir-2 && irpp->o == IR_FPMATH && - irpp->op2 == IRFPM_LOG2 && !ra_used(irpp)) { - /* The modified regs must match with the *.dasc implementation. */ - RegSet drop = RSET_RANGE(RID_XMM0, RID_XMM2+1)|RID2RSET(RID_EAX); - IRIns *irx; - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - ra_evictset(as, drop); - ra_destreg(as, ir, RID_XMM0); - emit_call(as, lj_vm_pow_sse); - irx = IR(irpp->op1); - if (ra_noreg(irx->r) && ra_gethint(irx->r) == RID_XMM1) - irx->r = RID_INIT; /* Avoid allocating xmm1 for x. */ - ra_left(as, RID_XMM0, irpp->op1); - ra_left(as, RID_XMM1, irp->op2); - return 1; - } - } - return 0; -} - -static void asm_fpmath(ASMState *as, IRIns *ir) -{ - IRFPMathOp fpm = ir->o == IR_FPMATH ? (IRFPMathOp)ir->op2 : IRFPM_OTHER; - if (fpm == IRFPM_SQRT) { - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg left = asm_fuseload(as, ir->op1, RSET_FPR); - emit_mrm(as, XO_SQRTSD, dest, left); - } else if (fpm <= IRFPM_TRUNC) { - if (as->flags & JIT_F_SSE4_1) { /* SSE4.1 has a rounding instruction. */ - Reg dest = ra_dest(as, ir, RSET_FPR); - Reg left = asm_fuseload(as, ir->op1, RSET_FPR); - /* ROUNDSD has a 4-byte opcode which doesn't fit in x86Op. - ** Let's pretend it's a 3-byte opcode, and compensate afterwards. - ** This is atrocious, but the alternatives are much worse. - */ - /* Round down/up/trunc == 1001/1010/1011. */ - emit_i8(as, 0x09 + fpm); - emit_mrm(as, XO_ROUNDSD, dest, left); - if (LJ_64 && as->mcp[1] != (MCode)(XO_ROUNDSD >> 16)) { - as->mcp[0] = as->mcp[1]; as->mcp[1] = 0x0f; /* Swap 0F and REX. */ - } - *--as->mcp = 0x66; /* 1st byte of ROUNDSD opcode. */ - } else { /* Call helper functions for SSE2 variant. */ - /* The modified regs must match with the *.dasc implementation. */ - RegSet drop = RSET_RANGE(RID_XMM0, RID_XMM3+1)|RID2RSET(RID_EAX); - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - ra_evictset(as, drop); - ra_destreg(as, ir, RID_XMM0); - emit_call(as, fpm == IRFPM_FLOOR ? lj_vm_floor_sse : - fpm == IRFPM_CEIL ? lj_vm_ceil_sse : lj_vm_trunc_sse); - ra_left(as, RID_XMM0, ir->op1); - } - } else if (fpm == IRFPM_EXP2 && fpmjoin_pow(as, ir)) { - /* Rejoined to pow(). */ - } else { /* Handle x87 ops. */ - int32_t ofs = sps_scale(ir->s); /* Use spill slot or temp slots. */ - Reg dest = ir->r; - if (ra_hasreg(dest)) { - ra_free(as, dest); - ra_modified(as, dest); - emit_rmro(as, XMM_MOVRM(as), dest, RID_ESP, ofs); - } - emit_rmro(as, XO_FSTPq, XOg_FSTPq, RID_ESP, ofs); - switch (fpm) { /* st0 = lj_vm_*(st0) */ - case IRFPM_EXP: emit_call(as, lj_vm_exp_x87); break; - case IRFPM_EXP2: emit_call(as, lj_vm_exp2_x87); break; - case IRFPM_SIN: emit_x87op(as, XI_FSIN); break; - case IRFPM_COS: emit_x87op(as, XI_FCOS); break; - case IRFPM_TAN: emit_x87op(as, XI_FPOP); emit_x87op(as, XI_FPTAN); break; - case IRFPM_LOG: case IRFPM_LOG2: case IRFPM_LOG10: - /* Note: the use of fyl2xp1 would be pointless here. When computing - ** log(1.0+eps) the precision is already lost after 1.0 is added. - ** Subtracting 1.0 won't recover it. OTOH math.log1p would make sense. - */ - emit_x87op(as, XI_FYL2X); break; - case IRFPM_OTHER: - switch (ir->o) { - case IR_ATAN2: - emit_x87op(as, XI_FPATAN); asm_x87load(as, ir->op2); break; - case IR_LDEXP: - emit_x87op(as, XI_FPOP1); emit_x87op(as, XI_FSCALE); break; - default: lua_assert(0); break; - } - break; - default: lua_assert(0); break; - } - asm_x87load(as, ir->op1); - switch (fpm) { - case IRFPM_LOG: emit_x87op(as, XI_FLDLN2); break; - case IRFPM_LOG2: emit_x87op(as, XI_FLD1); break; - case IRFPM_LOG10: emit_x87op(as, XI_FLDLG2); break; - case IRFPM_OTHER: - if (ir->o == IR_LDEXP) asm_x87load(as, ir->op2); - break; - default: break; - } - } -} - -static void asm_fppowi(ASMState *as, IRIns *ir) -{ - /* The modified regs must match with the *.dasc implementation. */ - RegSet drop = RSET_RANGE(RID_XMM0, RID_XMM1+1)|RID2RSET(RID_EAX); - if (ra_hasreg(ir->r)) - rset_clear(drop, ir->r); /* Dest reg handled below. */ - ra_evictset(as, drop); - ra_destreg(as, ir, RID_XMM0); - emit_call(as, lj_vm_powi_sse); - ra_left(as, RID_XMM0, ir->op1); - ra_left(as, RID_EAX, ir->op2); -} - -#if LJ_64 && LJ_HASFFI -static void asm_arith64(ASMState *as, IRIns *ir, IRCallID id) -{ - const CCallInfo *ci = &lj_ir_callinfo[id]; - IRRef args[2]; - args[0] = ir->op1; - args[1] = ir->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} -#endif - -static void asm_intmod(ASMState *as, IRIns *ir) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_vm_modi]; - IRRef args[2]; - args[0] = ir->op1; - args[1] = ir->op2; - asm_setupresult(as, ir, ci); - asm_gencall(as, ci, args); -} - -static int asm_swapops(ASMState *as, IRIns *ir) -{ - IRIns *irl = IR(ir->op1); - IRIns *irr = IR(ir->op2); - lua_assert(ra_noreg(irr->r)); - if (!irm_iscomm(lj_ir_mode[ir->o])) - return 0; /* Can't swap non-commutative operations. */ - if (irref_isk(ir->op2)) - return 0; /* Don't swap constants to the left. */ - if (ra_hasreg(irl->r)) - return 1; /* Swap if left already has a register. */ - if (ra_samehint(ir->r, irr->r)) - return 1; /* Swap if dest and right have matching hints. */ - if (as->curins > as->loopref) { /* In variant part? */ - if (ir->op2 < as->loopref && !irt_isphi(irr->t)) - return 0; /* Keep invariants on the right. */ - if (ir->op1 < as->loopref && !irt_isphi(irl->t)) - return 1; /* Swap invariants to the right. */ - } - if (opisfusableload(irl->o)) - return 1; /* Swap fusable loads to the right. */ - return 0; /* Otherwise don't swap. */ -} - -static void asm_fparith(ASMState *as, IRIns *ir, x86Op xo) -{ - IRRef lref = ir->op1; - IRRef rref = ir->op2; - RegSet allow = RSET_FPR; - Reg dest; - Reg right = IR(rref)->r; - if (ra_hasreg(right)) { - rset_clear(allow, right); - ra_noweak(as, right); - } - dest = ra_dest(as, ir, allow); - if (lref == rref) { - right = dest; - } else if (ra_noreg(right)) { - if (asm_swapops(as, ir)) { - IRRef tmp = lref; lref = rref; rref = tmp; - } - right = asm_fuseload(as, rref, rset_clear(allow, dest)); - } - emit_mrm(as, xo, dest, right); - ra_left(as, dest, lref); -} - -static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa) -{ - IRRef lref = ir->op1; - IRRef rref = ir->op2; - RegSet allow = RSET_GPR; - Reg dest, right; - int32_t k = 0; - if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */ - MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2); - if ((p[1] & 15) < 14) { - if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */ - as->flagmcp = NULL; - as->mcp = p; - } /* else: cannot transform LE/NLE to cc without use of OF. */ - } - right = IR(rref)->r; - if (ra_hasreg(right)) { - rset_clear(allow, right); - ra_noweak(as, right); - } - dest = ra_dest(as, ir, allow); - if (lref == rref) { - right = dest; - } else if (ra_noreg(right) && !asm_isk32(as, rref, &k)) { - if (asm_swapops(as, ir)) { - IRRef tmp = lref; lref = rref; rref = tmp; - } - right = asm_fuseloadm(as, rref, rset_clear(allow, dest), irt_is64(ir->t)); - } - if (irt_isguard(ir->t)) /* For IR_ADDOV etc. */ - asm_guardcc(as, CC_O); - if (xa != XOg_X_IMUL) { - if (ra_hasreg(right)) - emit_mrm(as, XO_ARITH(xa), REX_64IR(ir, dest), right); - else - emit_gri(as, XG_ARITHi(xa), REX_64IR(ir, dest), k); - } else if (ra_hasreg(right)) { /* IMUL r, mrm. */ - emit_mrm(as, XO_IMUL, REX_64IR(ir, dest), right); - } else { /* IMUL r, r, k. */ - /* NYI: use lea/shl/add/sub (FOLD only does 2^k) depending on CPU. */ - Reg left = asm_fuseloadm(as, lref, RSET_GPR, irt_is64(ir->t)); - x86Op xo; - if (checki8(k)) { emit_i8(as, k); xo = XO_IMULi8; - } else { emit_i32(as, k); xo = XO_IMULi; } - emit_mrm(as, xo, REX_64IR(ir, dest), left); - return; - } - ra_left(as, dest, lref); -} - -/* LEA is really a 4-operand ADD with an independent destination register, -** up to two source registers and an immediate. One register can be scaled -** by 1, 2, 4 or 8. This can be used to avoid moves or to fuse several -** instructions. -** -** Currently only a few common cases are supported: -** - 3-operand ADD: y = a+b; y = a+k with a and b already allocated -** - Left ADD fusion: y = (a+b)+k; y = (a+k)+b -** - Right ADD fusion: y = a+(b+k) -** The ommited variants have already been reduced by FOLD. -** -** There are more fusion opportunities, like gathering shifts or joining -** common references. But these are probably not worth the trouble, since -** array indexing is not decomposed and already makes use of all fields -** of the ModRM operand. -*/ -static int asm_lea(ASMState *as, IRIns *ir) -{ - IRIns *irl = IR(ir->op1); - IRIns *irr = IR(ir->op2); - RegSet allow = RSET_GPR; - Reg dest; - as->mrm.base = as->mrm.idx = RID_NONE; - as->mrm.scale = XM_SCALE1; - as->mrm.ofs = 0; - if (ra_hasreg(irl->r)) { - rset_clear(allow, irl->r); - ra_noweak(as, irl->r); - as->mrm.base = irl->r; - if (irref_isk(ir->op2) || ra_hasreg(irr->r)) { - /* The PHI renaming logic does a better job in some cases. */ - if (ra_hasreg(ir->r) && - ((irt_isphi(irl->t) && as->phireg[ir->r] == ir->op1) || - (irt_isphi(irr->t) && as->phireg[ir->r] == ir->op2))) - return 0; - if (irref_isk(ir->op2)) { - as->mrm.ofs = irr->i; - } else { - rset_clear(allow, irr->r); - ra_noweak(as, irr->r); - as->mrm.idx = irr->r; - } - } else if (irr->o == IR_ADD && mayfuse(as, ir->op2) && - irref_isk(irr->op2)) { - Reg idx = ra_alloc1(as, irr->op1, allow); - rset_clear(allow, idx); - as->mrm.idx = (uint8_t)idx; - as->mrm.ofs = IR(irr->op2)->i; - } else { - return 0; - } - } else if (ir->op1 != ir->op2 && irl->o == IR_ADD && mayfuse(as, ir->op1) && - (irref_isk(ir->op2) || irref_isk(irl->op2))) { - Reg idx, base = ra_alloc1(as, irl->op1, allow); - rset_clear(allow, base); - as->mrm.base = (uint8_t)base; - if (irref_isk(ir->op2)) { - as->mrm.ofs = irr->i; - idx = ra_alloc1(as, irl->op2, allow); - } else { - as->mrm.ofs = IR(irl->op2)->i; - idx = ra_alloc1(as, ir->op2, allow); - } - rset_clear(allow, idx); - as->mrm.idx = (uint8_t)idx; - } else { - return 0; - } - dest = ra_dest(as, ir, allow); - emit_mrm(as, XO_LEA, dest, RID_MRM); - return 1; /* Success. */ -} - -static void asm_add(ASMState *as, IRIns *ir) -{ - if (irt_isnum(ir->t)) - asm_fparith(as, ir, XO_ADDSD); - else if ((as->flags & JIT_F_LEA_AGU) || as->flagmcp == as->mcp || - irt_is64(ir->t) || !asm_lea(as, ir)) - asm_intarith(as, ir, XOg_ADD); -} - -static void asm_neg_not(ASMState *as, IRIns *ir, x86Group3 xg) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - emit_rr(as, XO_GROUP3, REX_64IR(ir, xg), dest); - ra_left(as, dest, ir->op1); -} - -static void asm_min_max(ASMState *as, IRIns *ir, int cc) -{ - Reg right, dest = ra_dest(as, ir, RSET_GPR); - IRRef lref = ir->op1, rref = ir->op2; - if (irref_isk(rref)) { lref = rref; rref = ir->op1; } - right = ra_alloc1(as, rref, rset_exclude(RSET_GPR, dest)); - emit_rr(as, XO_CMOV + (cc<<24), REX_64IR(ir, dest), right); - emit_rr(as, XO_CMP, REX_64IR(ir, dest), right); - ra_left(as, dest, lref); -} - -static void asm_bitswap(ASMState *as, IRIns *ir) -{ - Reg dest = ra_dest(as, ir, RSET_GPR); - as->mcp = emit_op(XO_BSWAP + ((dest&7) << 24), - REX_64IR(ir, 0), dest, 0, as->mcp, 1); - ra_left(as, dest, ir->op1); -} - -static void asm_bitshift(ASMState *as, IRIns *ir, x86Shift xs) -{ - IRRef rref = ir->op2; - IRIns *irr = IR(rref); - Reg dest; - if (irref_isk(rref)) { /* Constant shifts. */ - int shift; - dest = ra_dest(as, ir, RSET_GPR); - shift = irr->i & (irt_is64(ir->t) ? 63 : 31); - switch (shift) { - case 0: break; - case 1: emit_rr(as, XO_SHIFT1, REX_64IR(ir, xs), dest); break; - default: emit_shifti(as, REX_64IR(ir, xs), dest, shift); break; - } - } else { /* Variable shifts implicitly use register cl (i.e. ecx). */ - Reg right; - dest = ra_dest(as, ir, rset_exclude(RSET_GPR, RID_ECX)); - if (dest == RID_ECX) { - dest = ra_scratch(as, rset_exclude(RSET_GPR, RID_ECX)); - emit_rr(as, XO_MOV, RID_ECX, dest); - } - right = irr->r; - if (ra_noreg(right)) - right = ra_allocref(as, rref, RID2RSET(RID_ECX)); - else if (right != RID_ECX) - ra_scratch(as, RID2RSET(RID_ECX)); - emit_rr(as, XO_SHIFTcl, REX_64IR(ir, xs), dest); - ra_noweak(as, right); - if (right != RID_ECX) - emit_rr(as, XO_MOV, RID_ECX, right); - } - ra_left(as, dest, ir->op1); - /* - ** Note: avoid using the flags resulting from a shift or rotate! - ** All of them cause a partial flag stall, except for r,1 shifts - ** (but not rotates). And a shift count of 0 leaves the flags unmodified. - */ -} - -/* -- Comparisons --------------------------------------------------------- */ - -/* Virtual flags for unordered FP comparisons. */ -#define VCC_U 0x1000 /* Unordered. */ -#define VCC_P 0x2000 /* Needs extra CC_P branch. */ -#define VCC_S 0x4000 /* Swap avoids CC_P branch. */ -#define VCC_PS (VCC_P|VCC_S) - -/* Map of comparisons to flags. ORDER IR. */ -#define COMPFLAGS(ci, cin, cu, cf) ((ci)+((cu)<<4)+((cin)<<8)+(cf)) -static const uint16_t asm_compmap[IR_ABC+1] = { - /* signed non-eq unsigned flags */ - /* LT */ COMPFLAGS(CC_GE, CC_G, CC_AE, VCC_PS), - /* GE */ COMPFLAGS(CC_L, CC_L, CC_B, 0), - /* LE */ COMPFLAGS(CC_G, CC_G, CC_A, VCC_PS), - /* GT */ COMPFLAGS(CC_LE, CC_L, CC_BE, 0), - /* ULT */ COMPFLAGS(CC_AE, CC_A, CC_AE, VCC_U), - /* UGE */ COMPFLAGS(CC_B, CC_B, CC_B, VCC_U|VCC_PS), - /* ULE */ COMPFLAGS(CC_A, CC_A, CC_A, VCC_U), - /* UGT */ COMPFLAGS(CC_BE, CC_B, CC_BE, VCC_U|VCC_PS), - /* EQ */ COMPFLAGS(CC_NE, CC_NE, CC_NE, VCC_P), - /* NE */ COMPFLAGS(CC_E, CC_E, CC_E, VCC_U|VCC_P), - /* ABC */ COMPFLAGS(CC_BE, CC_B, CC_BE, VCC_U|VCC_PS) /* Same as UGT. */ -}; - -/* FP and integer comparisons. */ -static void asm_comp(ASMState *as, IRIns *ir, uint32_t cc) -{ - if (irt_isnum(ir->t)) { - IRRef lref = ir->op1; - IRRef rref = ir->op2; - Reg left, right; - MCLabel l_around; - /* - ** An extra CC_P branch is required to preserve ordered/unordered - ** semantics for FP comparisons. This can be avoided by swapping - ** the operands and inverting the condition (except for EQ and UNE). - ** So always try to swap if possible. - ** - ** Another option would be to swap operands to achieve better memory - ** operand fusion. But it's unlikely that this outweighs the cost - ** of the extra branches. - */ - if (cc & VCC_S) { /* Swap? */ - IRRef tmp = lref; lref = rref; rref = tmp; - cc ^= (VCC_PS|(5<<4)); /* A <-> B, AE <-> BE, PS <-> none */ - } - left = ra_alloc1(as, lref, RSET_FPR); - right = asm_fuseload(as, rref, rset_exclude(RSET_FPR, left)); - l_around = emit_label(as); - asm_guardcc(as, cc >> 4); - if (cc & VCC_P) { /* Extra CC_P branch required? */ - if (!(cc & VCC_U)) { - asm_guardcc(as, CC_P); /* Branch to exit for ordered comparisons. */ - } else if (l_around != as->invmcp) { - emit_sjcc(as, CC_P, l_around); /* Branch around for unordered. */ - } else { - /* Patched to mcloop by asm_loop_fixup. */ - as->loopinv = 2; - if (as->realign) - emit_sjcc(as, CC_P, as->mcp); - else - emit_jcc(as, CC_P, as->mcp); - } - } - emit_mrm(as, XO_UCOMISD, left, right); - } else { - IRRef lref = ir->op1, rref = ir->op2; - IROp leftop = (IROp)(IR(lref)->o); - Reg r64 = REX_64IR(ir, 0); - int32_t imm = 0; - lua_assert(irt_is64(ir->t) || irt_isint(ir->t) || - irt_isu32(ir->t) || irt_isaddr(ir->t) || irt_isu8(ir->t)); - /* Swap constants (only for ABC) and fusable loads to the right. */ - if (irref_isk(lref) || (!irref_isk(rref) && opisfusableload(leftop))) { - if ((cc & 0xc) == 0xc) cc ^= 0x53; /* L <-> G, LE <-> GE */ - else if ((cc & 0xa) == 0x2) cc ^= 0x55; /* A <-> B, AE <-> BE */ - lref = ir->op2; rref = ir->op1; - } - if (asm_isk32(as, rref, &imm)) { - IRIns *irl = IR(lref); - /* Check wether we can use test ins. Not for unsigned, since CF=0. */ - int usetest = (imm == 0 && (cc & 0xa) != 0x2); - if (usetest && irl->o == IR_BAND && irl+1 == ir && !ra_used(irl)) { - /* Combine comp(BAND(ref, r/imm), 0) into test mrm, r/imm. */ - Reg right, left = RID_NONE; - RegSet allow = RSET_GPR; - if (!asm_isk32(as, irl->op2, &imm)) { - left = ra_alloc1(as, irl->op2, allow); - rset_clear(allow, left); - } else { /* Try to Fuse IRT_I8/IRT_U8 loads, too. See below. */ - IRIns *irll = IR(irl->op1); - if (opisfusableload((IROp)irll->o) && - (irt_isi8(irll->t) || irt_isu8(irll->t))) { - IRType1 origt = irll->t; /* Temporarily flip types. */ - irll->t.irt = (irll->t.irt & ~IRT_TYPE) | IRT_INT; - as->curins--; /* Skip to BAND to avoid failing in noconflict(). */ - right = asm_fuseload(as, irl->op1, RSET_GPR); - as->curins++; - irll->t = origt; - if (right != RID_MRM) goto test_nofuse; - /* Fusion succeeded, emit test byte mrm, imm8. */ - asm_guardcc(as, cc); - emit_i8(as, (imm & 0xff)); - emit_mrm(as, XO_GROUP3b, XOg_TEST, RID_MRM); - return; - } - } - as->curins--; /* Skip to BAND to avoid failing in noconflict(). */ - right = asm_fuseloadm(as, irl->op1, allow, r64); - as->curins++; /* Undo the above. */ - test_nofuse: - asm_guardcc(as, cc); - if (ra_noreg(left)) { - emit_i32(as, imm); - emit_mrm(as, XO_GROUP3, r64 + XOg_TEST, right); - } else { - emit_mrm(as, XO_TEST, r64 + left, right); - } - } else { - Reg left; - if (opisfusableload((IROp)irl->o) && - ((irt_isu8(irl->t) && checku8(imm)) || - ((irt_isi8(irl->t) || irt_isi16(irl->t)) && checki8(imm)) || - (irt_isu16(irl->t) && checku16(imm) && checki8((int16_t)imm)))) { - /* Only the IRT_INT case is fused by asm_fuseload. - ** The IRT_I8/IRT_U8 loads and some IRT_I16/IRT_U16 loads - ** are handled here. - ** Note that cmp word [mem], imm16 should not be generated, - ** since it has a length-changing prefix. Compares of a word - ** against a sign-extended imm8 are ok, however. - */ - IRType1 origt = irl->t; /* Temporarily flip types. */ - irl->t.irt = (irl->t.irt & ~IRT_TYPE) | IRT_INT; - left = asm_fuseload(as, lref, RSET_GPR); - irl->t = origt; - if (left == RID_MRM) { /* Fusion succeeded? */ - if (irt_isu8(irl->t) || irt_isu16(irl->t)) - cc >>= 4; /* Need unsigned compare. */ - asm_guardcc(as, cc); - emit_i8(as, imm); - emit_mrm(as, (irt_isi8(origt) || irt_isu8(origt)) ? - XO_ARITHib : XO_ARITHiw8, r64 + XOg_CMP, RID_MRM); - return; - } /* Otherwise handle register case as usual. */ - } else { - left = asm_fuseloadm(as, lref, - irt_isu8(ir->t) ? RSET_GPR8 : RSET_GPR, r64); - } - asm_guardcc(as, cc); - if (usetest && left != RID_MRM) { - /* Use test r,r instead of cmp r,0. */ - x86Op xo = XO_TEST; - if (irt_isu8(ir->t)) { - lua_assert(ir->o == IR_EQ || ir->o == IR_NE); - xo = XO_TESTb; - if (!rset_test(RSET_RANGE(RID_EAX, RID_EBX+1), left)) { - if (LJ_64) { - left |= FORCE_REX; - } else { - emit_i32(as, 0xff); - emit_mrm(as, XO_GROUP3, XOg_TEST, left); - return; - } - } - } - emit_rr(as, xo, r64 + left, left); - if (irl+1 == ir) /* Referencing previous ins? */ - as->flagmcp = as->mcp; /* Set flag to drop test r,r if possible. */ - } else { - emit_gmrmi(as, XG_ARITHi(XOg_CMP), r64 + left, imm); - } - } - } else { - Reg left = ra_alloc1(as, lref, RSET_GPR); - Reg right = asm_fuseloadm(as, rref, rset_exclude(RSET_GPR, left), r64); - asm_guardcc(as, cc); - emit_mrm(as, XO_CMP, r64 + left, right); - } - } -} - -#if LJ_32 && LJ_HASFFI -/* 64 bit integer comparisons in 32 bit mode. */ -static void asm_comp_int64(ASMState *as, IRIns *ir) -{ - uint32_t cc = asm_compmap[(ir-1)->o]; - RegSet allow = RSET_GPR; - Reg lefthi = RID_NONE, leftlo = RID_NONE; - Reg righthi = RID_NONE, rightlo = RID_NONE; - MCLabel l_around; - x86ModRM mrm; - - as->curins--; /* Skip loword ins. Avoids failing in noconflict(), too. */ - - /* Allocate/fuse hiword operands. */ - if (irref_isk(ir->op2)) { - lefthi = asm_fuseload(as, ir->op1, allow); - } else { - lefthi = ra_alloc1(as, ir->op1, allow); - rset_clear(allow, lefthi); - righthi = asm_fuseload(as, ir->op2, allow); - if (righthi == RID_MRM) { - if (as->mrm.base != RID_NONE) rset_clear(allow, as->mrm.base); - if (as->mrm.idx != RID_NONE) rset_clear(allow, as->mrm.idx); - } else { - rset_clear(allow, righthi); - } - } - mrm = as->mrm; /* Save state for hiword instruction. */ - - /* Allocate/fuse loword operands. */ - if (irref_isk((ir-1)->op2)) { - leftlo = asm_fuseload(as, (ir-1)->op1, allow); - } else { - leftlo = ra_alloc1(as, (ir-1)->op1, allow); - rset_clear(allow, leftlo); - rightlo = asm_fuseload(as, (ir-1)->op2, allow); - } - - /* All register allocations must be performed _before_ this point. */ - l_around = emit_label(as); - as->invmcp = as->flagmcp = NULL; /* Cannot use these optimizations. */ - - /* Loword comparison and branch. */ - asm_guardcc(as, cc >> 4); /* Always use unsigned compare for loword. */ - if (ra_noreg(rightlo)) { - int32_t imm = IR((ir-1)->op2)->i; - if (imm == 0 && ((cc >> 4) & 0xa) != 0x2 && leftlo != RID_MRM) - emit_rr(as, XO_TEST, leftlo, leftlo); - else - emit_gmrmi(as, XG_ARITHi(XOg_CMP), leftlo, imm); - } else { - emit_mrm(as, XO_CMP, leftlo, rightlo); - } - - /* Hiword comparison and branches. */ - if ((cc & 15) != CC_NE) - emit_sjcc(as, CC_NE, l_around); /* Hiword unequal: skip loword compare. */ - if ((cc & 15) != CC_E) - asm_guardcc(as, cc >> 8); /* Hiword compare without equality check. */ - as->mrm = mrm; /* Restore state. */ - if (ra_noreg(righthi)) { - int32_t imm = IR(ir->op2)->i; - if (imm == 0 && (cc & 0xa) != 0x2 && lefthi != RID_MRM) - emit_rr(as, XO_TEST, lefthi, lefthi); - else - emit_gmrmi(as, XG_ARITHi(XOg_CMP), lefthi, imm); - } else { - emit_mrm(as, XO_CMP, lefthi, righthi); - } -} -#endif - -/* -- Support for 64 bit ops in 32 bit mode ------------------------------- */ - -/* Hiword op of a split 64 bit op. Previous op must be the loword op. */ -static void asm_hiop(ASMState *as, IRIns *ir) -{ -#if LJ_32 && LJ_HASFFI - /* HIOP is marked as a store because it needs its own DCE logic. */ - int uselo = ra_used(ir-1), usehi = ra_used(ir); /* Loword/hiword used? */ - if (LJ_UNLIKELY(!(as->flags & JIT_F_OPT_DCE))) uselo = usehi = 1; - if ((ir-1)->o == IR_CONV) { /* Conversions to/from 64 bit. */ - if (usehi || uselo) { - if (irt_isfp(ir->t)) - asm_conv_fp_int64(as, ir); - else - asm_conv_int64_fp(as, ir); - } - as->curins--; /* Always skip the CONV. */ - return; - } else if ((ir-1)->o <= IR_NE) { /* 64 bit integer comparisons. ORDER IR. */ - asm_comp_int64(as, ir); - return; - } else if ((ir-1)->o == IR_XSTORE) { - if ((ir-1)->r != RID_SINK) - asm_fxstore(as, ir); - return; - } - if (!usehi) return; /* Skip unused hiword op for all remaining ops. */ - switch ((ir-1)->o) { - case IR_ADD: - as->flagmcp = NULL; - as->curins--; - asm_intarith(as, ir, XOg_ADC); - asm_intarith(as, ir-1, XOg_ADD); - break; - case IR_SUB: - as->flagmcp = NULL; - as->curins--; - asm_intarith(as, ir, XOg_SBB); - asm_intarith(as, ir-1, XOg_SUB); - break; - case IR_NEG: { - Reg dest = ra_dest(as, ir, RSET_GPR); - emit_rr(as, XO_GROUP3, XOg_NEG, dest); - emit_i8(as, 0); - emit_rr(as, XO_ARITHi8, XOg_ADC, dest); - ra_left(as, dest, ir->op1); - as->curins--; - asm_neg_not(as, ir-1, XOg_NEG); - break; - } - case IR_CALLN: - case IR_CALLXS: - if (!uselo) - ra_allocref(as, ir->op1, RID2RSET(RID_RETLO)); /* Mark lo op as used. */ - break; - case IR_CNEWI: - /* Nothing to do here. Handled by CNEWI itself. */ - break; - default: lua_assert(0); break; - } -#else - UNUSED(as); UNUSED(ir); lua_assert(0); /* Unused on x64 or without FFI. */ -#endif -} - -/* -- Stack handling ------------------------------------------------------ */ - -/* Check Lua stack size for overflow. Use exit handler as fallback. */ -static void asm_stack_check(ASMState *as, BCReg topslot, - IRIns *irp, RegSet allow, ExitNo exitno) -{ - /* Try to get an unused temp. register, otherwise spill/restore eax. */ - Reg pbase = irp ? irp->r : RID_BASE; - Reg r = allow ? rset_pickbot(allow) : RID_EAX; - emit_jcc(as, CC_B, exitstub_addr(as->J, exitno)); - if (allow == RSET_EMPTY) /* Restore temp. register. */ - emit_rmro(as, XO_MOV, r|REX_64, RID_ESP, 0); - else - ra_modified(as, r); - emit_gri(as, XG_ARITHi(XOg_CMP), r, (int32_t)(8*topslot)); - if (ra_hasreg(pbase) && pbase != r) - emit_rr(as, XO_ARITH(XOg_SUB), r, pbase); - else - emit_rmro(as, XO_ARITH(XOg_SUB), r, RID_NONE, - ptr2addr(&J2G(as->J)->jit_base)); - emit_rmro(as, XO_MOV, r, r, offsetof(lua_State, maxstack)); - emit_getgl(as, r, jit_L); - if (allow == RSET_EMPTY) /* Spill temp. register. */ - emit_rmro(as, XO_MOVto, r|REX_64, RID_ESP, 0); -} - -/* Restore Lua stack from on-trace state. */ -static void asm_stack_restore(ASMState *as, SnapShot *snap) -{ - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - SnapEntry *flinks = &as->T->snapmap[snap_nextofs(as->T, snap)-1]; - MSize n, nent = snap->nent; - /* Store the value of all modified slots to the Lua stack. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - BCReg s = snap_slot(sn); - int32_t ofs = 8*((int32_t)s-1); - IRRef ref = snap_ref(sn); - IRIns *ir = IR(ref); - if ((sn & SNAP_NORESTORE)) - continue; - if (irt_isnum(ir->t)) { - Reg src = ra_alloc1(as, ref, RSET_FPR); - emit_rmro(as, XO_MOVSDto, src, RID_BASE, ofs); - } else { - lua_assert(irt_ispri(ir->t) || irt_isaddr(ir->t) || - (LJ_DUALNUM && irt_isinteger(ir->t))); - if (!irref_isk(ref)) { - Reg src = ra_alloc1(as, ref, rset_exclude(RSET_GPR, RID_BASE)); - emit_movtomro(as, REX_64IR(ir, src), RID_BASE, ofs); - } else if (!irt_ispri(ir->t)) { - emit_movmroi(as, RID_BASE, ofs, ir->i); - } - if ((sn & (SNAP_CONT|SNAP_FRAME))) { - if (s != 0) /* Do not overwrite link to previous frame. */ - emit_movmroi(as, RID_BASE, ofs+4, (int32_t)(*flinks--)); - } else { - if (!(LJ_64 && irt_islightud(ir->t))) - emit_movmroi(as, RID_BASE, ofs+4, irt_toitype(ir->t)); - } - } - checkmclim(as); - } - lua_assert(map + nent == flinks); -} - -/* -- GC handling --------------------------------------------------------- */ - -/* Check GC threshold and do one or more GC steps. */ -static void asm_gc_check(ASMState *as) -{ - const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_step_jit]; - IRRef args[2]; - MCLabel l_end; - Reg tmp; - ra_evictset(as, RSET_SCRATCH); - l_end = emit_label(as); - /* Exit trace if in GCSatomic or GCSfinalize. Avoids syncing GC objects. */ - asm_guardcc(as, CC_NE); /* Assumes asm_snap_prep() already done. */ - emit_rr(as, XO_TEST, RID_RET, RID_RET); - args[0] = ASMREF_TMP1; /* global_State *g */ - args[1] = ASMREF_TMP2; /* MSize steps */ - asm_gencall(as, ci, args); - tmp = ra_releasetmp(as, ASMREF_TMP1); - emit_loada(as, tmp, J2G(as->J)); - emit_loadi(as, ra_releasetmp(as, ASMREF_TMP2), as->gcsteps); - /* Jump around GC step if GC total < GC threshold. */ - emit_sjcc(as, CC_B, l_end); - emit_opgl(as, XO_ARITH(XOg_CMP), tmp, gc.threshold); - emit_getgl(as, tmp, gc.total); - as->gcsteps = 0; - checkmclim(as); -} - -/* -- Loop handling ------------------------------------------------------- */ - -/* Fixup the loop branch. */ -static void asm_loop_fixup(ASMState *as) -{ - MCode *p = as->mctop; - MCode *target = as->mcp; - if (as->realign) { /* Realigned loops use short jumps. */ - as->realign = NULL; /* Stop another retry. */ - lua_assert(((intptr_t)target & 15) == 0); - if (as->loopinv) { /* Inverted loop branch? */ - p -= 5; - p[0] = XI_JMP; - lua_assert(target - p >= -128); - p[-1] = (MCode)(target - p); /* Patch sjcc. */ - if (as->loopinv == 2) - p[-3] = (MCode)(target - p + 2); /* Patch opt. short jp. */ - } else { - lua_assert(target - p >= -128); - p[-1] = (MCode)(int8_t)(target - p); /* Patch short jmp. */ - p[-2] = XI_JMPs; - } - } else { - MCode *newloop; - p[-5] = XI_JMP; - if (as->loopinv) { /* Inverted loop branch? */ - /* asm_guardcc already inverted the jcc and patched the jmp. */ - p -= 5; - newloop = target+4; - *(int32_t *)(p-4) = (int32_t)(target - p); /* Patch jcc. */ - if (as->loopinv == 2) { - *(int32_t *)(p-10) = (int32_t)(target - p + 6); /* Patch opt. jp. */ - newloop = target+8; - } - } else { /* Otherwise just patch jmp. */ - *(int32_t *)(p-4) = (int32_t)(target - p); - newloop = target+3; - } - /* Realign small loops and shorten the loop branch. */ - if (newloop >= p - 128) { - as->realign = newloop; /* Force a retry and remember alignment. */ - as->curins = as->stopins; /* Abort asm_trace now. */ - as->T->nins = as->orignins; /* Remove any added renames. */ - } - } -} - -/* -- Head of trace ------------------------------------------------------- */ - -/* Coalesce BASE register for a root trace. */ -static void asm_head_root_base(ASMState *as) -{ - IRIns *ir = IR(REF_BASE); - Reg r = ir->r; - if (ra_hasreg(r)) { - ra_free(as, r); - if (rset_test(as->modset, r) || irt_ismarked(ir->t)) - ir->r = RID_INIT; /* No inheritance for modified BASE register. */ - if (r != RID_BASE) - emit_rr(as, XO_MOV, r, RID_BASE); - } -} - -/* Coalesce or reload BASE register for a side trace. */ -static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) -{ - IRIns *ir = IR(REF_BASE); - Reg r = ir->r; - if (ra_hasreg(r)) { - ra_free(as, r); - if (rset_test(as->modset, r) || irt_ismarked(ir->t)) - ir->r = RID_INIT; /* No inheritance for modified BASE register. */ - if (irp->r == r) { - rset_clear(allow, r); /* Mark same BASE register as coalesced. */ - } else if (ra_hasreg(irp->r) && rset_test(as->freeset, irp->r)) { - rset_clear(allow, irp->r); - emit_rr(as, XO_MOV, r, irp->r); /* Move from coalesced parent reg. */ - } else { - emit_getgl(as, r, jit_base); /* Otherwise reload BASE. */ - } - } - return allow; -} - -/* -- Tail of trace ------------------------------------------------------- */ - -/* Fixup the tail code. */ -static void asm_tail_fixup(ASMState *as, TraceNo lnk) -{ - /* Note: don't use as->mcp swap + emit_*: emit_op overwrites more bytes. */ - MCode *p = as->mctop; - MCode *target, *q; - int32_t spadj = as->T->spadjust; - if (spadj == 0) { - p -= ((as->flags & JIT_F_LEA_AGU) ? 7 : 6) + (LJ_64 ? 1 : 0); - } else { - MCode *p1; - /* Patch stack adjustment. */ - if (checki8(spadj)) { - p -= 3; - p1 = p-6; - *p1 = (MCode)spadj; - } else { - p1 = p-9; - *(int32_t *)p1 = spadj; - } - if ((as->flags & JIT_F_LEA_AGU)) { -#if LJ_64 - p1[-4] = 0x48; -#endif - p1[-3] = (MCode)XI_LEA; - p1[-2] = MODRM(checki8(spadj) ? XM_OFS8 : XM_OFS32, RID_ESP, RID_ESP); - p1[-1] = MODRM(XM_SCALE1, RID_ESP, RID_ESP); - } else { -#if LJ_64 - p1[-3] = 0x48; -#endif - p1[-2] = (MCode)(checki8(spadj) ? XI_ARITHi8 : XI_ARITHi); - p1[-1] = MODRM(XM_REG, XOg_ADD, RID_ESP); - } - } - /* Patch exit branch. */ - target = lnk ? traceref(as->J, lnk)->mcode : (MCode *)lj_vm_exit_interp; - *(int32_t *)(p-4) = jmprel(p, target); - p[-5] = XI_JMP; - /* Drop unused mcode tail. Fill with NOPs to make the prefetcher happy. */ - for (q = as->mctop-1; q >= p; q--) - *q = XI_NOP; - as->mctop = p; -} - -/* Prepare tail of code. */ -static void asm_tail_prep(ASMState *as) -{ - MCode *p = as->mctop; - /* Realign and leave room for backwards loop branch or exit branch. */ - if (as->realign) { - int i = ((int)(intptr_t)as->realign) & 15; - /* Fill unused mcode tail with NOPs to make the prefetcher happy. */ - while (i-- > 0) - *--p = XI_NOP; - as->mctop = p; - p -= (as->loopinv ? 5 : 2); /* Space for short/near jmp. */ - } else { - p -= 5; /* Space for exit branch (near jmp). */ - } - if (as->loopref) { - as->invmcp = as->mcp = p; - } else { - /* Leave room for ESP adjustment: add esp, imm or lea esp, [esp+imm] */ - as->mcp = p - (((as->flags & JIT_F_LEA_AGU) ? 7 : 6) + (LJ_64 ? 1 : 0)); - as->invmcp = NULL; - } -} - -/* -- Instruction dispatch ------------------------------------------------ */ - -/* Assemble a single instruction. */ -static void asm_ir(ASMState *as, IRIns *ir) -{ - switch ((IROp)ir->o) { - /* Miscellaneous ops. */ - case IR_LOOP: asm_loop(as); break; - case IR_NOP: case IR_XBAR: lua_assert(!ra_used(ir)); break; - case IR_USE: - ra_alloc1(as, ir->op1, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); break; - case IR_PHI: asm_phi(as, ir); break; - case IR_HIOP: asm_hiop(as, ir); break; - case IR_GCSTEP: asm_gcstep(as, ir); break; - - /* Guarded assertions. */ - case IR_LT: case IR_GE: case IR_LE: case IR_GT: - case IR_ULT: case IR_UGE: case IR_ULE: case IR_UGT: - case IR_EQ: case IR_NE: case IR_ABC: - asm_comp(as, ir, asm_compmap[ir->o]); - break; - - case IR_RETF: asm_retf(as, ir); break; - - /* Bit ops. */ - case IR_BNOT: asm_neg_not(as, ir, XOg_NOT); break; - case IR_BSWAP: asm_bitswap(as, ir); break; - - case IR_BAND: asm_intarith(as, ir, XOg_AND); break; - case IR_BOR: asm_intarith(as, ir, XOg_OR); break; - case IR_BXOR: asm_intarith(as, ir, XOg_XOR); break; - - case IR_BSHL: asm_bitshift(as, ir, XOg_SHL); break; - case IR_BSHR: asm_bitshift(as, ir, XOg_SHR); break; - case IR_BSAR: asm_bitshift(as, ir, XOg_SAR); break; - case IR_BROL: asm_bitshift(as, ir, XOg_ROL); break; - case IR_BROR: asm_bitshift(as, ir, XOg_ROR); break; - - /* Arithmetic ops. */ - case IR_ADD: asm_add(as, ir); break; - case IR_SUB: - if (irt_isnum(ir->t)) - asm_fparith(as, ir, XO_SUBSD); - else /* Note: no need for LEA trick here. i-k is encoded as i+(-k). */ - asm_intarith(as, ir, XOg_SUB); - break; - case IR_MUL: - if (irt_isnum(ir->t)) - asm_fparith(as, ir, XO_MULSD); - else - asm_intarith(as, ir, XOg_X_IMUL); - break; - case IR_DIV: -#if LJ_64 && LJ_HASFFI - if (!irt_isnum(ir->t)) - asm_arith64(as, ir, irt_isi64(ir->t) ? IRCALL_lj_carith_divi64 : - IRCALL_lj_carith_divu64); - else -#endif - asm_fparith(as, ir, XO_DIVSD); - break; - case IR_MOD: -#if LJ_64 && LJ_HASFFI - if (!irt_isint(ir->t)) - asm_arith64(as, ir, irt_isi64(ir->t) ? IRCALL_lj_carith_modi64 : - IRCALL_lj_carith_modu64); - else -#endif - asm_intmod(as, ir); - break; - - case IR_NEG: - if (irt_isnum(ir->t)) - asm_fparith(as, ir, XO_XORPS); - else - asm_neg_not(as, ir, XOg_NEG); - break; - case IR_ABS: asm_fparith(as, ir, XO_ANDPS); break; - - case IR_MIN: - if (irt_isnum(ir->t)) - asm_fparith(as, ir, XO_MINSD); - else - asm_min_max(as, ir, CC_G); - break; - case IR_MAX: - if (irt_isnum(ir->t)) - asm_fparith(as, ir, XO_MAXSD); - else - asm_min_max(as, ir, CC_L); - break; - - case IR_FPMATH: case IR_ATAN2: case IR_LDEXP: - asm_fpmath(as, ir); - break; - case IR_POW: -#if LJ_64 && LJ_HASFFI - if (!irt_isnum(ir->t)) - asm_arith64(as, ir, irt_isi64(ir->t) ? IRCALL_lj_carith_powi64 : - IRCALL_lj_carith_powu64); - else -#endif - asm_fppowi(as, ir); - break; - - /* Overflow-checking arithmetic ops. Note: don't use LEA here! */ - case IR_ADDOV: asm_intarith(as, ir, XOg_ADD); break; - case IR_SUBOV: asm_intarith(as, ir, XOg_SUB); break; - case IR_MULOV: asm_intarith(as, ir, XOg_X_IMUL); break; - - /* Memory references. */ - case IR_AREF: asm_aref(as, ir); break; - case IR_HREF: asm_href(as, ir); break; - case IR_HREFK: asm_hrefk(as, ir); break; - case IR_NEWREF: asm_newref(as, ir); break; - case IR_UREFO: case IR_UREFC: asm_uref(as, ir); break; - case IR_FREF: asm_fref(as, ir); break; - case IR_STRREF: asm_strref(as, ir); break; - - /* Loads and stores. */ - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - asm_ahuvload(as, ir); - break; - case IR_FLOAD: case IR_XLOAD: asm_fxload(as, ir); break; - case IR_SLOAD: asm_sload(as, ir); break; - - case IR_ASTORE: case IR_HSTORE: case IR_USTORE: asm_ahustore(as, ir); break; - case IR_FSTORE: case IR_XSTORE: asm_fxstore(as, ir); break; - - /* Allocations. */ - case IR_SNEW: case IR_XSNEW: asm_snew(as, ir); break; - case IR_TNEW: asm_tnew(as, ir); break; - case IR_TDUP: asm_tdup(as, ir); break; - case IR_CNEW: case IR_CNEWI: asm_cnew(as, ir); break; - - /* Write barriers. */ - case IR_TBAR: asm_tbar(as, ir); break; - case IR_OBAR: asm_obar(as, ir); break; - - /* Type conversions. */ - case IR_TOBIT: asm_tobit(as, ir); break; - case IR_CONV: asm_conv(as, ir); break; - case IR_TOSTR: asm_tostr(as, ir); break; - case IR_STRTO: asm_strto(as, ir); break; - - /* Calls. */ - case IR_CALLN: case IR_CALLL: case IR_CALLS: asm_call(as, ir); break; - case IR_CALLXS: asm_callx(as, ir); break; - case IR_CARG: break; - - default: - setintV(&as->J->errinfo, ir->o); - lj_trace_err_info(as->J, LJ_TRERR_NYIIR); - break; - } -} - -/* -- Trace setup --------------------------------------------------------- */ - -/* Ensure there are enough stack slots for call arguments. */ -static Reg asm_setup_call_slots(ASMState *as, IRIns *ir, const CCallInfo *ci) -{ - IRRef args[CCI_NARGS_MAX*2]; - int nslots; - asm_collectargs(as, ir, ci, args); - nslots = asm_count_call_slots(as, ci, args); - if (nslots > as->evenspill) /* Leave room for args in stack slots. */ - as->evenspill = nslots; -#if LJ_64 - return irt_isfp(ir->t) ? REGSP_HINT(RID_FPRET) : REGSP_HINT(RID_RET); -#else - return irt_isfp(ir->t) ? REGSP_INIT : REGSP_HINT(RID_RET); -#endif -} - -/* Target-specific setup. */ -static void asm_setup_target(ASMState *as) -{ - asm_exitstub_setup(as, as->T->nsnap); -} - -/* -- Trace patching ------------------------------------------------------ */ - -/* Patch exit jumps of existing machine code to a new target. */ -void lj_asm_patchexit(jit_State *J, GCtrace *T, ExitNo exitno, MCode *target) -{ - MCode *p = T->mcode; - MCode *mcarea = lj_mcode_patch(J, p, 0); - MSize len = T->szmcode; - MCode *px = exitstub_addr(J, exitno) - 6; - MCode *pe = p+len-6; - uint32_t stateaddr = u32ptr(&J2G(J)->vmstate); - if (len > 5 && p[len-5] == XI_JMP && p+len-6 + *(int32_t *)(p+len-4) == px) - *(int32_t *)(p+len-4) = jmprel(p+len, target); - /* Do not patch parent exit for a stack check. Skip beyond vmstate update. */ - for (; p < pe; p++) - if (*(uint32_t *)(p+(LJ_64 ? 3 : 2)) == stateaddr && p[0] == XI_MOVmi) { - p += LJ_64 ? 11 : 10; - break; - } - lua_assert(p < pe); - for (; p < pe; p++) { - if ((*(uint16_t *)p & 0xf0ff) == 0x800f && p + *(int32_t *)(p+2) == px) { - *(int32_t *)(p+2) = jmprel(p+6, target); - p += 5; - } - } - lj_mcode_sync(T->mcode, T->mcode + T->szmcode); - lj_mcode_patch(J, mcarea, 1); -} - diff --git a/deps/luajit/src/lj_bc.c b/deps/luajit/src/lj_bc.c deleted file mode 100644 index a8f444c..0000000 --- a/deps/luajit/src/lj_bc.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -** Bytecode instruction modes. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_bc_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_bc.h" - -/* Bytecode offsets and bytecode instruction modes. */ -#include "lj_bcdef.h" - diff --git a/deps/luajit/src/lj_bc.h b/deps/luajit/src/lj_bc.h deleted file mode 100644 index 7436fab..0000000 --- a/deps/luajit/src/lj_bc.h +++ /dev/null @@ -1,261 +0,0 @@ -/* -** Bytecode instruction format. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_BC_H -#define _LJ_BC_H - -#include "lj_def.h" -#include "lj_arch.h" - -/* Bytecode instruction format, 32 bit wide, fields of 8 or 16 bit: -** -** +----+----+----+----+ -** | B | C | A | OP | Format ABC -** +----+----+----+----+ -** | D | A | OP | Format AD -** +-------------------- -** MSB LSB -** -** In-memory instructions are always stored in host byte order. -*/ - -/* Operand ranges and related constants. */ -#define BCMAX_A 0xff -#define BCMAX_B 0xff -#define BCMAX_C 0xff -#define BCMAX_D 0xffff -#define BCBIAS_J 0x8000 -#define NO_REG BCMAX_A -#define NO_JMP (~(BCPos)0) - -/* Macros to get instruction fields. */ -#define bc_op(i) ((BCOp)((i)&0xff)) -#define bc_a(i) ((BCReg)(((i)>>8)&0xff)) -#define bc_b(i) ((BCReg)((i)>>24)) -#define bc_c(i) ((BCReg)(((i)>>16)&0xff)) -#define bc_d(i) ((BCReg)((i)>>16)) -#define bc_j(i) ((ptrdiff_t)bc_d(i)-BCBIAS_J) - -/* Macros to set instruction fields. */ -#define setbc_byte(p, x, ofs) \ - ((uint8_t *)(p))[LJ_ENDIAN_SELECT(ofs, 3-ofs)] = (uint8_t)(x) -#define setbc_op(p, x) setbc_byte(p, (x), 0) -#define setbc_a(p, x) setbc_byte(p, (x), 1) -#define setbc_b(p, x) setbc_byte(p, (x), 3) -#define setbc_c(p, x) setbc_byte(p, (x), 2) -#define setbc_d(p, x) \ - ((uint16_t *)(p))[LJ_ENDIAN_SELECT(1, 0)] = (uint16_t)(x) -#define setbc_j(p, x) setbc_d(p, (BCPos)((int32_t)(x)+BCBIAS_J)) - -/* Macros to compose instructions. */ -#define BCINS_ABC(o, a, b, c) \ - (((BCIns)(o))|((BCIns)(a)<<8)|((BCIns)(b)<<24)|((BCIns)(c)<<16)) -#define BCINS_AD(o, a, d) \ - (((BCIns)(o))|((BCIns)(a)<<8)|((BCIns)(d)<<16)) -#define BCINS_AJ(o, a, j) BCINS_AD(o, a, (BCPos)((int32_t)(j)+BCBIAS_J)) - -/* Bytecode instruction definition. Order matters, see below. -** -** (name, filler, Amode, Bmode, Cmode or Dmode, metamethod) -** -** The opcode name suffixes specify the type for RB/RC or RD: -** V = variable slot -** S = string const -** N = number const -** P = primitive type (~itype) -** B = unsigned byte literal -** M = multiple args/results -*/ -#define BCDEF(_) \ - /* Comparison ops. ORDER OPR. */ \ - _(ISLT, var, ___, var, lt) \ - _(ISGE, var, ___, var, lt) \ - _(ISLE, var, ___, var, le) \ - _(ISGT, var, ___, var, le) \ - \ - _(ISEQV, var, ___, var, eq) \ - _(ISNEV, var, ___, var, eq) \ - _(ISEQS, var, ___, str, eq) \ - _(ISNES, var, ___, str, eq) \ - _(ISEQN, var, ___, num, eq) \ - _(ISNEN, var, ___, num, eq) \ - _(ISEQP, var, ___, pri, eq) \ - _(ISNEP, var, ___, pri, eq) \ - \ - /* Unary test and copy ops. */ \ - _(ISTC, dst, ___, var, ___) \ - _(ISFC, dst, ___, var, ___) \ - _(IST, ___, ___, var, ___) \ - _(ISF, ___, ___, var, ___) \ - \ - /* Unary ops. */ \ - _(MOV, dst, ___, var, ___) \ - _(NOT, dst, ___, var, ___) \ - _(UNM, dst, ___, var, unm) \ - _(LEN, dst, ___, var, len) \ - \ - /* Binary ops. ORDER OPR. VV last, POW must be next. */ \ - _(ADDVN, dst, var, num, add) \ - _(SUBVN, dst, var, num, sub) \ - _(MULVN, dst, var, num, mul) \ - _(DIVVN, dst, var, num, div) \ - _(MODVN, dst, var, num, mod) \ - \ - _(ADDNV, dst, var, num, add) \ - _(SUBNV, dst, var, num, sub) \ - _(MULNV, dst, var, num, mul) \ - _(DIVNV, dst, var, num, div) \ - _(MODNV, dst, var, num, mod) \ - \ - _(ADDVV, dst, var, var, add) \ - _(SUBVV, dst, var, var, sub) \ - _(MULVV, dst, var, var, mul) \ - _(DIVVV, dst, var, var, div) \ - _(MODVV, dst, var, var, mod) \ - \ - _(POW, dst, var, var, pow) \ - _(CAT, dst, rbase, rbase, concat) \ - \ - /* Constant ops. */ \ - _(KSTR, dst, ___, str, ___) \ - _(KCDATA, dst, ___, cdata, ___) \ - _(KSHORT, dst, ___, lits, ___) \ - _(KNUM, dst, ___, num, ___) \ - _(KPRI, dst, ___, pri, ___) \ - _(KNIL, base, ___, base, ___) \ - \ - /* Upvalue and function ops. */ \ - _(UGET, dst, ___, uv, ___) \ - _(USETV, uv, ___, var, ___) \ - _(USETS, uv, ___, str, ___) \ - _(USETN, uv, ___, num, ___) \ - _(USETP, uv, ___, pri, ___) \ - _(UCLO, rbase, ___, jump, ___) \ - _(FNEW, dst, ___, func, gc) \ - \ - /* Table ops. */ \ - _(TNEW, dst, ___, lit, gc) \ - _(TDUP, dst, ___, tab, gc) \ - _(GGET, dst, ___, str, index) \ - _(GSET, var, ___, str, newindex) \ - _(TGETV, dst, var, var, index) \ - _(TGETS, dst, var, str, index) \ - _(TGETB, dst, var, lit, index) \ - _(TSETV, var, var, var, newindex) \ - _(TSETS, var, var, str, newindex) \ - _(TSETB, var, var, lit, newindex) \ - _(TSETM, base, ___, num, newindex) \ - \ - /* Calls and vararg handling. T = tail call. */ \ - _(CALLM, base, lit, lit, call) \ - _(CALL, base, lit, lit, call) \ - _(CALLMT, base, ___, lit, call) \ - _(CALLT, base, ___, lit, call) \ - _(ITERC, base, lit, lit, call) \ - _(ITERN, base, lit, lit, call) \ - _(VARG, base, lit, lit, ___) \ - _(ISNEXT, base, ___, jump, ___) \ - \ - /* Returns. */ \ - _(RETM, base, ___, lit, ___) \ - _(RET, rbase, ___, lit, ___) \ - _(RET0, rbase, ___, lit, ___) \ - _(RET1, rbase, ___, lit, ___) \ - \ - /* Loops and branches. I/J = interp/JIT, I/C/L = init/call/loop. */ \ - _(FORI, base, ___, jump, ___) \ - _(JFORI, base, ___, jump, ___) \ - \ - _(FORL, base, ___, jump, ___) \ - _(IFORL, base, ___, jump, ___) \ - _(JFORL, base, ___, lit, ___) \ - \ - _(ITERL, base, ___, jump, ___) \ - _(IITERL, base, ___, jump, ___) \ - _(JITERL, base, ___, lit, ___) \ - \ - _(LOOP, rbase, ___, jump, ___) \ - _(ILOOP, rbase, ___, jump, ___) \ - _(JLOOP, rbase, ___, lit, ___) \ - \ - _(JMP, rbase, ___, jump, ___) \ - \ - /* Function headers. I/J = interp/JIT, F/V/C = fixarg/vararg/C func. */ \ - _(FUNCF, rbase, ___, ___, ___) \ - _(IFUNCF, rbase, ___, ___, ___) \ - _(JFUNCF, rbase, ___, lit, ___) \ - _(FUNCV, rbase, ___, ___, ___) \ - _(IFUNCV, rbase, ___, ___, ___) \ - _(JFUNCV, rbase, ___, lit, ___) \ - _(FUNCC, rbase, ___, ___, ___) \ - _(FUNCCW, rbase, ___, ___, ___) - -/* Bytecode opcode numbers. */ -typedef enum { -#define BCENUM(name, ma, mb, mc, mt) BC_##name, -BCDEF(BCENUM) -#undef BCENUM - BC__MAX -} BCOp; - -LJ_STATIC_ASSERT((int)BC_ISEQV+1 == (int)BC_ISNEV); -LJ_STATIC_ASSERT(((int)BC_ISEQV^1) == (int)BC_ISNEV); -LJ_STATIC_ASSERT(((int)BC_ISEQS^1) == (int)BC_ISNES); -LJ_STATIC_ASSERT(((int)BC_ISEQN^1) == (int)BC_ISNEN); -LJ_STATIC_ASSERT(((int)BC_ISEQP^1) == (int)BC_ISNEP); -LJ_STATIC_ASSERT(((int)BC_ISLT^1) == (int)BC_ISGE); -LJ_STATIC_ASSERT(((int)BC_ISLE^1) == (int)BC_ISGT); -LJ_STATIC_ASSERT(((int)BC_ISLT^3) == (int)BC_ISGT); -LJ_STATIC_ASSERT((int)BC_IST-(int)BC_ISTC == (int)BC_ISF-(int)BC_ISFC); -LJ_STATIC_ASSERT((int)BC_CALLT-(int)BC_CALL == (int)BC_CALLMT-(int)BC_CALLM); -LJ_STATIC_ASSERT((int)BC_CALLMT + 1 == (int)BC_CALLT); -LJ_STATIC_ASSERT((int)BC_RETM + 1 == (int)BC_RET); -LJ_STATIC_ASSERT((int)BC_FORL + 1 == (int)BC_IFORL); -LJ_STATIC_ASSERT((int)BC_FORL + 2 == (int)BC_JFORL); -LJ_STATIC_ASSERT((int)BC_ITERL + 1 == (int)BC_IITERL); -LJ_STATIC_ASSERT((int)BC_ITERL + 2 == (int)BC_JITERL); -LJ_STATIC_ASSERT((int)BC_LOOP + 1 == (int)BC_ILOOP); -LJ_STATIC_ASSERT((int)BC_LOOP + 2 == (int)BC_JLOOP); -LJ_STATIC_ASSERT((int)BC_FUNCF + 1 == (int)BC_IFUNCF); -LJ_STATIC_ASSERT((int)BC_FUNCF + 2 == (int)BC_JFUNCF); -LJ_STATIC_ASSERT((int)BC_FUNCV + 1 == (int)BC_IFUNCV); -LJ_STATIC_ASSERT((int)BC_FUNCV + 2 == (int)BC_JFUNCV); - -/* This solves a circular dependency problem, change as needed. */ -#define FF_next_N 4 - -/* Stack slots used by FORI/FORL, relative to operand A. */ -enum { - FORL_IDX, FORL_STOP, FORL_STEP, FORL_EXT -}; - -/* Bytecode operand modes. ORDER BCMode */ -typedef enum { - BCMnone, BCMdst, BCMbase, BCMvar, BCMrbase, BCMuv, /* Mode A must be <= 7 */ - BCMlit, BCMlits, BCMpri, BCMnum, BCMstr, BCMtab, BCMfunc, BCMjump, BCMcdata, - BCM_max -} BCMode; -#define BCM___ BCMnone - -#define bcmode_a(op) ((BCMode)(lj_bc_mode[op] & 7)) -#define bcmode_b(op) ((BCMode)((lj_bc_mode[op]>>3) & 15)) -#define bcmode_c(op) ((BCMode)((lj_bc_mode[op]>>7) & 15)) -#define bcmode_d(op) bcmode_c(op) -#define bcmode_hasd(op) ((lj_bc_mode[op] & (15<<3)) == (BCMnone<<3)) -#define bcmode_mm(op) ((MMS)(lj_bc_mode[op]>>11)) - -#define BCMODE(name, ma, mb, mc, mm) \ - (BCM##ma|(BCM##mb<<3)|(BCM##mc<<7)|(MM_##mm<<11)), -#define BCMODE_FF 0 - -static LJ_AINLINE int bc_isret(BCOp op) -{ - return (op == BC_RETM || op == BC_RET || op == BC_RET0 || op == BC_RET1); -} - -LJ_DATA const uint16_t lj_bc_mode[]; -LJ_DATA const uint16_t lj_bc_ofs[]; - -#endif diff --git a/deps/luajit/src/lj_bcdump.h b/deps/luajit/src/lj_bcdump.h deleted file mode 100644 index 812d0e1..0000000 --- a/deps/luajit/src/lj_bcdump.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -** Bytecode dump definitions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_BCDUMP_H -#define _LJ_BCDUMP_H - -#include "lj_obj.h" -#include "lj_lex.h" - -/* -- Bytecode dump format ------------------------------------------------ */ - -/* -** dump = header proto+ 0U -** header = ESC 'L' 'J' versionB flagsU [namelenU nameB*] -** proto = lengthU pdata -** pdata = phead bcinsW* uvdataH* kgc* knum* [debugB*] -** phead = flagsB numparamsB framesizeB numuvB numkgcU numknU numbcU -** [debuglenU [firstlineU numlineU]] -** kgc = kgctypeU { ktab | (loU hiU) | (rloU rhiU iloU ihiU) | strB* } -** knum = intU0 | (loU1 hiU) -** ktab = narrayU nhashU karray* khash* -** karray = ktabk -** khash = ktabk ktabk -** ktabk = ktabtypeU { intU | (loU hiU) | strB* } -** -** B = 8 bit, H = 16 bit, W = 32 bit, U = ULEB128 of W, U0/U1 = ULEB128 of W+1 -*/ - -/* Bytecode dump header. */ -#define BCDUMP_HEAD1 0x1b -#define BCDUMP_HEAD2 0x4c -#define BCDUMP_HEAD3 0x4a - -/* If you perform *any* kind of private modifications to the bytecode itself -** or to the dump format, you *must* set BCDUMP_VERSION to 0x80 or higher. -*/ -#define BCDUMP_VERSION 1 - -/* Compatibility flags. */ -#define BCDUMP_F_BE 0x01 -#define BCDUMP_F_STRIP 0x02 -#define BCDUMP_F_FFI 0x04 - -#define BCDUMP_F_KNOWN (BCDUMP_F_FFI*2-1) - -/* Type codes for the GC constants of a prototype. Plus length for strings. */ -enum { - BCDUMP_KGC_CHILD, BCDUMP_KGC_TAB, BCDUMP_KGC_I64, BCDUMP_KGC_U64, - BCDUMP_KGC_COMPLEX, BCDUMP_KGC_STR -}; - -/* Type codes for the keys/values of a constant table. */ -enum { - BCDUMP_KTAB_NIL, BCDUMP_KTAB_FALSE, BCDUMP_KTAB_TRUE, - BCDUMP_KTAB_INT, BCDUMP_KTAB_NUM, BCDUMP_KTAB_STR -}; - -/* -- Bytecode reader/writer ---------------------------------------------- */ - -LJ_FUNC int lj_bcwrite(lua_State *L, GCproto *pt, lua_Writer writer, - void *data, int strip); -LJ_FUNC GCproto *lj_bcread(LexState *ls); - -#endif diff --git a/deps/luajit/src/lj_bcread.c b/deps/luajit/src/lj_bcread.c deleted file mode 100644 index 25859d2..0000000 --- a/deps/luajit/src/lj_bcread.c +++ /dev/null @@ -1,476 +0,0 @@ -/* -** Bytecode reader. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_bcread_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_bc.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#include "lj_cdata.h" -#include "lualib.h" -#endif -#include "lj_lex.h" -#include "lj_bcdump.h" -#include "lj_state.h" - -/* Reuse some lexer fields for our own purposes. */ -#define bcread_flags(ls) ls->level -#define bcread_swap(ls) \ - ((bcread_flags(ls) & BCDUMP_F_BE) != LJ_BE*BCDUMP_F_BE) -#define bcread_oldtop(L, ls) restorestack(L, ls->lastline) -#define bcread_savetop(L, ls, top) \ - ls->lastline = (BCLine)savestack(L, (top)) - -/* -- Input buffer handling ----------------------------------------------- */ - -/* Throw reader error. */ -static LJ_NOINLINE void bcread_error(LexState *ls, ErrMsg em) -{ - lua_State *L = ls->L; - const char *name = ls->chunkarg; - if (*name == BCDUMP_HEAD1) name = "(binary)"; - else if (*name == '@' || *name == '=') name++; - lj_str_pushf(L, "%s: %s", name, err2msg(em)); - lj_err_throw(L, LUA_ERRSYNTAX); -} - -/* Resize input buffer. */ -static void bcread_resize(LexState *ls, MSize len) -{ - if (ls->sb.sz < len) { - MSize sz = ls->sb.sz * 2; - while (len > sz) sz = sz * 2; - lj_str_resizebuf(ls->L, &ls->sb, sz); - /* Caveat: this may change ls->sb.buf which may affect ls->p. */ - } -} - -/* Refill buffer if needed. */ -static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need) -{ - lua_assert(len != 0); - if (len > LJ_MAX_MEM || ls->current < 0) - bcread_error(ls, LJ_ERR_BCBAD); - do { - const char *buf; - size_t size; - if (ls->n) { /* Copy remainder to buffer. */ - if (ls->sb.n) { /* Move down in buffer. */ - lua_assert(ls->p + ls->n == ls->sb.buf + ls->sb.n); - if (ls->n != ls->sb.n) - memmove(ls->sb.buf, ls->p, ls->n); - } else { /* Copy from buffer provided by reader. */ - bcread_resize(ls, len); - memcpy(ls->sb.buf, ls->p, ls->n); - } - ls->p = ls->sb.buf; - } - ls->sb.n = ls->n; - buf = ls->rfunc(ls->L, ls->rdata, &size); /* Get more data from reader. */ - if (buf == NULL || size == 0) { /* EOF? */ - if (need) bcread_error(ls, LJ_ERR_BCBAD); - ls->current = -1; /* Only bad if we get called again. */ - break; - } - if (ls->sb.n) { /* Append to buffer. */ - MSize n = ls->sb.n + (MSize)size; - bcread_resize(ls, n < len ? len : n); - memcpy(ls->sb.buf + ls->sb.n, buf, size); - ls->n = ls->sb.n = n; - ls->p = ls->sb.buf; - } else { /* Return buffer provided by reader. */ - ls->n = (MSize)size; - ls->p = buf; - } - } while (ls->n < len); -} - -/* Need a certain number of bytes. */ -static LJ_AINLINE void bcread_need(LexState *ls, MSize len) -{ - if (LJ_UNLIKELY(ls->n < len)) - bcread_fill(ls, len, 1); -} - -/* Want to read up to a certain number of bytes, but may need less. */ -static LJ_AINLINE void bcread_want(LexState *ls, MSize len) -{ - if (LJ_UNLIKELY(ls->n < len)) - bcread_fill(ls, len, 0); -} - -#define bcread_dec(ls) check_exp(ls->n > 0, ls->n--) -#define bcread_consume(ls, len) check_exp(ls->n >= (len), ls->n -= (len)) - -/* Return memory block from buffer. */ -static uint8_t *bcread_mem(LexState *ls, MSize len) -{ - uint8_t *p = (uint8_t *)ls->p; - bcread_consume(ls, len); - ls->p = (char *)p + len; - return p; -} - -/* Copy memory block from buffer. */ -static void bcread_block(LexState *ls, void *q, MSize len) -{ - memcpy(q, bcread_mem(ls, len), len); -} - -/* Read byte from buffer. */ -static LJ_AINLINE uint32_t bcread_byte(LexState *ls) -{ - bcread_dec(ls); - return (uint32_t)(uint8_t)*ls->p++; -} - -/* Read ULEB128 value from buffer. */ -static uint32_t bcread_uleb128(LexState *ls) -{ - const uint8_t *p = (const uint8_t *)ls->p; - uint32_t v = *p++; - if (LJ_UNLIKELY(v >= 0x80)) { - int sh = 0; - v &= 0x7f; - do { - v |= ((*p & 0x7f) << (sh += 7)); - bcread_dec(ls); - } while (*p++ >= 0x80); - } - bcread_dec(ls); - ls->p = (char *)p; - return v; -} - -/* Read top 32 bits of 33 bit ULEB128 value from buffer. */ -static uint32_t bcread_uleb128_33(LexState *ls) -{ - const uint8_t *p = (const uint8_t *)ls->p; - uint32_t v = (*p++ >> 1); - if (LJ_UNLIKELY(v >= 0x40)) { - int sh = -1; - v &= 0x3f; - do { - v |= ((*p & 0x7f) << (sh += 7)); - bcread_dec(ls); - } while (*p++ >= 0x80); - } - bcread_dec(ls); - ls->p = (char *)p; - return v; -} - -/* -- Bytecode reader ----------------------------------------------------- */ - -/* Read debug info of a prototype. */ -static void bcread_dbg(LexState *ls, GCproto *pt, MSize sizedbg) -{ - void *lineinfo = (void *)proto_lineinfo(pt); - bcread_block(ls, lineinfo, sizedbg); - /* Swap lineinfo if the endianess differs. */ - if (bcread_swap(ls) && pt->numline >= 256) { - MSize i, n = pt->sizebc-1; - if (pt->numline < 65536) { - uint16_t *p = (uint16_t *)lineinfo; - for (i = 0; i < n; i++) p[i] = (uint16_t)((p[i] >> 8)|(p[i] << 8)); - } else { - uint32_t *p = (uint32_t *)lineinfo; - for (i = 0; i < n; i++) p[i] = lj_bswap(p[i]); - } - } -} - -/* Find pointer to varinfo. */ -static const void *bcread_varinfo(GCproto *pt) -{ - const uint8_t *p = proto_uvinfo(pt); - MSize n = pt->sizeuv; - if (n) while (*p++ || --n) ; - return p; -} - -/* Read a single constant key/value of a template table. */ -static void bcread_ktabk(LexState *ls, TValue *o) -{ - MSize tp = bcread_uleb128(ls); - if (tp >= BCDUMP_KTAB_STR) { - MSize len = tp - BCDUMP_KTAB_STR; - const char *p = (const char *)bcread_mem(ls, len); - setstrV(ls->L, o, lj_str_new(ls->L, p, len)); - } else if (tp == BCDUMP_KTAB_INT) { - setintV(o, (int32_t)bcread_uleb128(ls)); - } else if (tp == BCDUMP_KTAB_NUM) { - o->u32.lo = bcread_uleb128(ls); - o->u32.hi = bcread_uleb128(ls); - } else { - lua_assert(tp <= BCDUMP_KTAB_TRUE); - setitype(o, ~tp); - } -} - -/* Read a template table. */ -static GCtab *bcread_ktab(LexState *ls) -{ - MSize narray = bcread_uleb128(ls); - MSize nhash = bcread_uleb128(ls); - GCtab *t = lj_tab_new(ls->L, narray, hsize2hbits(nhash)); - if (narray) { /* Read array entries. */ - MSize i; - TValue *o = tvref(t->array); - for (i = 0; i < narray; i++, o++) - bcread_ktabk(ls, o); - } - if (nhash) { /* Read hash entries. */ - MSize i; - for (i = 0; i < nhash; i++) { - TValue key; - bcread_ktabk(ls, &key); - lua_assert(!tvisnil(&key)); - bcread_ktabk(ls, lj_tab_set(ls->L, t, &key)); - } - } - return t; -} - -/* Read GC constants of a prototype. */ -static void bcread_kgc(LexState *ls, GCproto *pt, MSize sizekgc) -{ - MSize i; - GCRef *kr = mref(pt->k, GCRef) - (ptrdiff_t)sizekgc; - for (i = 0; i < sizekgc; i++, kr++) { - MSize tp = bcread_uleb128(ls); - if (tp >= BCDUMP_KGC_STR) { - MSize len = tp - BCDUMP_KGC_STR; - const char *p = (const char *)bcread_mem(ls, len); - setgcref(*kr, obj2gco(lj_str_new(ls->L, p, len))); - } else if (tp == BCDUMP_KGC_TAB) { - setgcref(*kr, obj2gco(bcread_ktab(ls))); -#if LJ_HASFFI - } else if (tp != BCDUMP_KGC_CHILD) { - CTypeID id = tp == BCDUMP_KGC_COMPLEX ? CTID_COMPLEX_DOUBLE : - tp == BCDUMP_KGC_I64 ? CTID_INT64 : CTID_UINT64; - CTSize sz = tp == BCDUMP_KGC_COMPLEX ? 16 : 8; - GCcdata *cd = lj_cdata_new_(ls->L, id, sz); - TValue *p = (TValue *)cdataptr(cd); - setgcref(*kr, obj2gco(cd)); - p[0].u32.lo = bcread_uleb128(ls); - p[0].u32.hi = bcread_uleb128(ls); - if (tp == BCDUMP_KGC_COMPLEX) { - p[1].u32.lo = bcread_uleb128(ls); - p[1].u32.hi = bcread_uleb128(ls); - } -#endif - } else { - lua_State *L = ls->L; - lua_assert(tp == BCDUMP_KGC_CHILD); - if (L->top <= bcread_oldtop(L, ls)) /* Stack underflow? */ - bcread_error(ls, LJ_ERR_BCBAD); - L->top--; - setgcref(*kr, obj2gco(protoV(L->top))); - } - } -} - -/* Read number constants of a prototype. */ -static void bcread_knum(LexState *ls, GCproto *pt, MSize sizekn) -{ - MSize i; - TValue *o = mref(pt->k, TValue); - for (i = 0; i < sizekn; i++, o++) { - int isnum = (ls->p[0] & 1); - uint32_t lo = bcread_uleb128_33(ls); - if (isnum) { - o->u32.lo = lo; - o->u32.hi = bcread_uleb128(ls); - } else { - setintV(o, lo); - } - } -} - -/* Read bytecode instructions. */ -static void bcread_bytecode(LexState *ls, GCproto *pt, MSize sizebc) -{ - BCIns *bc = proto_bc(pt); - bc[0] = BCINS_AD((pt->flags & PROTO_VARARG) ? BC_FUNCV : BC_FUNCF, - pt->framesize, 0); - bcread_block(ls, bc+1, (sizebc-1)*(MSize)sizeof(BCIns)); - /* Swap bytecode instructions if the endianess differs. */ - if (bcread_swap(ls)) { - MSize i; - for (i = 1; i < sizebc; i++) bc[i] = lj_bswap(bc[i]); - } -} - -/* Read upvalue refs. */ -static void bcread_uv(LexState *ls, GCproto *pt, MSize sizeuv) -{ - if (sizeuv) { - uint16_t *uv = proto_uv(pt); - bcread_block(ls, uv, sizeuv*2); - /* Swap upvalue refs if the endianess differs. */ - if (bcread_swap(ls)) { - MSize i; - for (i = 0; i < sizeuv; i++) - uv[i] = (uint16_t)((uv[i] >> 8)|(uv[i] << 8)); - } - } -} - -/* Read a prototype. */ -static GCproto *bcread_proto(LexState *ls) -{ - GCproto *pt; - MSize framesize, numparams, flags, sizeuv, sizekgc, sizekn, sizebc, sizept; - MSize ofsk, ofsuv, ofsdbg; - MSize sizedbg = 0; - BCLine firstline = 0, numline = 0; - MSize len, startn; - - /* Read length. */ - if (ls->n > 0 && ls->p[0] == 0) { /* Shortcut EOF. */ - ls->n--; ls->p++; - return NULL; - } - bcread_want(ls, 5); - len = bcread_uleb128(ls); - if (!len) return NULL; /* EOF */ - bcread_need(ls, len); - startn = ls->n; - - /* Read prototype header. */ - flags = bcread_byte(ls); - numparams = bcread_byte(ls); - framesize = bcread_byte(ls); - sizeuv = bcread_byte(ls); - sizekgc = bcread_uleb128(ls); - sizekn = bcread_uleb128(ls); - sizebc = bcread_uleb128(ls) + 1; - if (!(bcread_flags(ls) & BCDUMP_F_STRIP)) { - sizedbg = bcread_uleb128(ls); - if (sizedbg) { - firstline = bcread_uleb128(ls); - numline = bcread_uleb128(ls); - } - } - - /* Calculate total size of prototype including all colocated arrays. */ - sizept = (MSize)sizeof(GCproto) + - sizebc*(MSize)sizeof(BCIns) + - sizekgc*(MSize)sizeof(GCRef); - sizept = (sizept + (MSize)sizeof(TValue)-1) & ~((MSize)sizeof(TValue)-1); - ofsk = sizept; sizept += sizekn*(MSize)sizeof(TValue); - ofsuv = sizept; sizept += ((sizeuv+1)&~1)*2; - ofsdbg = sizept; sizept += sizedbg; - - /* Allocate prototype object and initialize its fields. */ - pt = (GCproto *)lj_mem_newgco(ls->L, (MSize)sizept); - pt->gct = ~LJ_TPROTO; - pt->numparams = (uint8_t)numparams; - pt->framesize = (uint8_t)framesize; - pt->sizebc = sizebc; - setmref(pt->k, (char *)pt + ofsk); - setmref(pt->uv, (char *)pt + ofsuv); - pt->sizekgc = 0; /* Set to zero until fully initialized. */ - pt->sizekn = sizekn; - pt->sizept = sizept; - pt->sizeuv = (uint8_t)sizeuv; - pt->flags = (uint8_t)flags; - pt->trace = 0; - setgcref(pt->chunkname, obj2gco(ls->chunkname)); - - /* Close potentially uninitialized gap between bc and kgc. */ - *(uint32_t *)((char *)pt + ofsk - sizeof(GCRef)*(sizekgc+1)) = 0; - - /* Read bytecode instructions and upvalue refs. */ - bcread_bytecode(ls, pt, sizebc); - bcread_uv(ls, pt, sizeuv); - - /* Read constants. */ - bcread_kgc(ls, pt, sizekgc); - pt->sizekgc = sizekgc; - bcread_knum(ls, pt, sizekn); - - /* Read and initialize debug info. */ - pt->firstline = firstline; - pt->numline = numline; - if (sizedbg) { - MSize sizeli = (sizebc-1) << (numline < 256 ? 0 : numline < 65536 ? 1 : 2); - setmref(pt->lineinfo, (char *)pt + ofsdbg); - setmref(pt->uvinfo, (char *)pt + ofsdbg + sizeli); - bcread_dbg(ls, pt, sizedbg); - setmref(pt->varinfo, bcread_varinfo(pt)); - } else { - setmref(pt->lineinfo, NULL); - setmref(pt->uvinfo, NULL); - setmref(pt->varinfo, NULL); - } - - if (len != startn - ls->n) - bcread_error(ls, LJ_ERR_BCBAD); - return pt; -} - -/* Read and check header of bytecode dump. */ -static int bcread_header(LexState *ls) -{ - uint32_t flags; - bcread_want(ls, 3+5+5); - if (bcread_byte(ls) != BCDUMP_HEAD2 || - bcread_byte(ls) != BCDUMP_HEAD3 || - bcread_byte(ls) != BCDUMP_VERSION) return 0; - bcread_flags(ls) = flags = bcread_uleb128(ls); - if ((flags & ~(BCDUMP_F_KNOWN)) != 0) return 0; - if ((flags & BCDUMP_F_FFI)) { -#if LJ_HASFFI - lua_State *L = ls->L; - if (!ctype_ctsG(G(L))) { - ptrdiff_t oldtop = savestack(L, L->top); - luaopen_ffi(L); /* Load FFI library on-demand. */ - L->top = restorestack(L, oldtop); - } -#else - return 0; -#endif - } - if ((flags & BCDUMP_F_STRIP)) { - ls->chunkname = lj_str_newz(ls->L, ls->chunkarg); - } else { - MSize len = bcread_uleb128(ls); - bcread_need(ls, len); - ls->chunkname = lj_str_new(ls->L, (const char *)bcread_mem(ls, len), len); - } - return 1; /* Ok. */ -} - -/* Read a bytecode dump. */ -GCproto *lj_bcread(LexState *ls) -{ - lua_State *L = ls->L; - lua_assert(ls->current == BCDUMP_HEAD1); - bcread_savetop(L, ls, L->top); - lj_str_resetbuf(&ls->sb); - /* Check for a valid bytecode dump header. */ - if (!bcread_header(ls)) - bcread_error(ls, LJ_ERR_BCFMT); - for (;;) { /* Process all prototypes in the bytecode dump. */ - GCproto *pt = bcread_proto(ls); - if (!pt) break; - setprotoV(L, L->top, pt); - incr_top(L); - } - if ((int32_t)ls->n > 0 || L->top-1 != bcread_oldtop(L, ls)) - bcread_error(ls, LJ_ERR_BCBAD); - /* Pop off last prototype. */ - L->top--; - return protoV(L->top); -} - diff --git a/deps/luajit/src/lj_bcwrite.c b/deps/luajit/src/lj_bcwrite.c deleted file mode 100644 index ff97450..0000000 --- a/deps/luajit/src/lj_bcwrite.c +++ /dev/null @@ -1,396 +0,0 @@ -/* -** Bytecode writer. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_bcwrite_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_str.h" -#include "lj_bc.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#endif -#if LJ_HASJIT -#include "lj_dispatch.h" -#include "lj_jit.h" -#endif -#include "lj_bcdump.h" -#include "lj_vm.h" - -/* Context for bytecode writer. */ -typedef struct BCWriteCtx { - SBuf sb; /* Output buffer. */ - lua_State *L; /* Lua state. */ - GCproto *pt; /* Root prototype. */ - lua_Writer wfunc; /* Writer callback. */ - void *wdata; /* Writer callback data. */ - int strip; /* Strip debug info. */ - int status; /* Status from writer callback. */ -} BCWriteCtx; - -/* -- Output buffer handling ---------------------------------------------- */ - -/* Resize buffer if needed. */ -static LJ_NOINLINE void bcwrite_resize(BCWriteCtx *ctx, MSize len) -{ - MSize sz = ctx->sb.sz * 2; - while (ctx->sb.n + len > sz) sz = sz * 2; - lj_str_resizebuf(ctx->L, &ctx->sb, sz); -} - -/* Need a certain amount of buffer space. */ -static LJ_AINLINE void bcwrite_need(BCWriteCtx *ctx, MSize len) -{ - if (LJ_UNLIKELY(ctx->sb.n + len > ctx->sb.sz)) - bcwrite_resize(ctx, len); -} - -/* Add memory block to buffer. */ -static void bcwrite_block(BCWriteCtx *ctx, const void *p, MSize len) -{ - uint8_t *q = (uint8_t *)(ctx->sb.buf + ctx->sb.n); - MSize i; - ctx->sb.n += len; - for (i = 0; i < len; i++) q[i] = ((uint8_t *)p)[i]; -} - -/* Add byte to buffer. */ -static LJ_AINLINE void bcwrite_byte(BCWriteCtx *ctx, uint8_t b) -{ - ctx->sb.buf[ctx->sb.n++] = b; -} - -/* Add ULEB128 value to buffer. */ -static void bcwrite_uleb128(BCWriteCtx *ctx, uint32_t v) -{ - MSize n = ctx->sb.n; - uint8_t *p = (uint8_t *)ctx->sb.buf; - for (; v >= 0x80; v >>= 7) - p[n++] = (uint8_t)((v & 0x7f) | 0x80); - p[n++] = (uint8_t)v; - ctx->sb.n = n; -} - -/* -- Bytecode writer ----------------------------------------------------- */ - -/* Write a single constant key/value of a template table. */ -static void bcwrite_ktabk(BCWriteCtx *ctx, cTValue *o, int narrow) -{ - bcwrite_need(ctx, 1+10); - if (tvisstr(o)) { - const GCstr *str = strV(o); - MSize len = str->len; - bcwrite_need(ctx, 5+len); - bcwrite_uleb128(ctx, BCDUMP_KTAB_STR+len); - bcwrite_block(ctx, strdata(str), len); - } else if (tvisint(o)) { - bcwrite_byte(ctx, BCDUMP_KTAB_INT); - bcwrite_uleb128(ctx, intV(o)); - } else if (tvisnum(o)) { - if (!LJ_DUALNUM && narrow) { /* Narrow number constants to integers. */ - lua_Number num = numV(o); - int32_t k = lj_num2int(num); - if (num == (lua_Number)k) { /* -0 is never a constant. */ - bcwrite_byte(ctx, BCDUMP_KTAB_INT); - bcwrite_uleb128(ctx, k); - return; - } - } - bcwrite_byte(ctx, BCDUMP_KTAB_NUM); - bcwrite_uleb128(ctx, o->u32.lo); - bcwrite_uleb128(ctx, o->u32.hi); - } else { - lua_assert(tvispri(o)); - bcwrite_byte(ctx, BCDUMP_KTAB_NIL+~itype(o)); - } -} - -/* Write a template table. */ -static void bcwrite_ktab(BCWriteCtx *ctx, const GCtab *t) -{ - MSize narray = 0, nhash = 0; - if (t->asize > 0) { /* Determine max. length of array part. */ - ptrdiff_t i; - TValue *array = tvref(t->array); - for (i = (ptrdiff_t)t->asize-1; i >= 0; i--) - if (!tvisnil(&array[i])) - break; - narray = (MSize)(i+1); - } - if (t->hmask > 0) { /* Count number of used hash slots. */ - MSize i, hmask = t->hmask; - Node *node = noderef(t->node); - for (i = 0; i <= hmask; i++) - nhash += !tvisnil(&node[i].val); - } - /* Write number of array slots and hash slots. */ - bcwrite_uleb128(ctx, narray); - bcwrite_uleb128(ctx, nhash); - if (narray) { /* Write array entries (may contain nil). */ - MSize i; - TValue *o = tvref(t->array); - for (i = 0; i < narray; i++, o++) - bcwrite_ktabk(ctx, o, 1); - } - if (nhash) { /* Write hash entries. */ - MSize i = nhash; - Node *node = noderef(t->node) + t->hmask; - for (;; node--) - if (!tvisnil(&node->val)) { - bcwrite_ktabk(ctx, &node->key, 0); - bcwrite_ktabk(ctx, &node->val, 1); - if (--i == 0) break; - } - } -} - -/* Write GC constants of a prototype. */ -static void bcwrite_kgc(BCWriteCtx *ctx, GCproto *pt) -{ - MSize i, sizekgc = pt->sizekgc; - GCRef *kr = mref(pt->k, GCRef) - (ptrdiff_t)sizekgc; - for (i = 0; i < sizekgc; i++, kr++) { - GCobj *o = gcref(*kr); - MSize tp, need = 1; - /* Determine constant type and needed size. */ - if (o->gch.gct == ~LJ_TSTR) { - tp = BCDUMP_KGC_STR + gco2str(o)->len; - need = 5+gco2str(o)->len; - } else if (o->gch.gct == ~LJ_TPROTO) { - lua_assert((pt->flags & PROTO_CHILD)); - tp = BCDUMP_KGC_CHILD; -#if LJ_HASFFI - } else if (o->gch.gct == ~LJ_TCDATA) { - CTypeID id = gco2cd(o)->ctypeid; - need = 1+4*5; - if (id == CTID_INT64) { - tp = BCDUMP_KGC_I64; - } else if (id == CTID_UINT64) { - tp = BCDUMP_KGC_U64; - } else { - lua_assert(id == CTID_COMPLEX_DOUBLE); - tp = BCDUMP_KGC_COMPLEX; - } -#endif - } else { - lua_assert(o->gch.gct == ~LJ_TTAB); - tp = BCDUMP_KGC_TAB; - need = 1+2*5; - } - /* Write constant type. */ - bcwrite_need(ctx, need); - bcwrite_uleb128(ctx, tp); - /* Write constant data (if any). */ - if (tp >= BCDUMP_KGC_STR) { - bcwrite_block(ctx, strdata(gco2str(o)), gco2str(o)->len); - } else if (tp == BCDUMP_KGC_TAB) { - bcwrite_ktab(ctx, gco2tab(o)); -#if LJ_HASFFI - } else if (tp != BCDUMP_KGC_CHILD) { - cTValue *p = (TValue *)cdataptr(gco2cd(o)); - bcwrite_uleb128(ctx, p[0].u32.lo); - bcwrite_uleb128(ctx, p[0].u32.hi); - if (tp == BCDUMP_KGC_COMPLEX) { - bcwrite_uleb128(ctx, p[1].u32.lo); - bcwrite_uleb128(ctx, p[1].u32.hi); - } -#endif - } - } -} - -/* Write number constants of a prototype. */ -static void bcwrite_knum(BCWriteCtx *ctx, GCproto *pt) -{ - MSize i, sizekn = pt->sizekn; - cTValue *o = mref(pt->k, TValue); - bcwrite_need(ctx, 10*sizekn); - for (i = 0; i < sizekn; i++, o++) { - int32_t k; - if (tvisint(o)) { - k = intV(o); - goto save_int; - } else { - /* Write a 33 bit ULEB128 for the int (lsb=0) or loword (lsb=1). */ - if (!LJ_DUALNUM) { /* Narrow number constants to integers. */ - lua_Number num = numV(o); - k = lj_num2int(num); - if (num == (lua_Number)k) { /* -0 is never a constant. */ - save_int: - bcwrite_uleb128(ctx, 2*(uint32_t)k | ((uint32_t)k & 0x80000000u)); - if (k < 0) { - char *p = &ctx->sb.buf[ctx->sb.n-1]; - *p = (*p & 7) | ((k>>27) & 0x18); - } - continue; - } - } - bcwrite_uleb128(ctx, 1+(2*o->u32.lo | (o->u32.lo & 0x80000000u))); - if (o->u32.lo >= 0x80000000u) { - char *p = &ctx->sb.buf[ctx->sb.n-1]; - *p = (*p & 7) | ((o->u32.lo>>27) & 0x18); - } - bcwrite_uleb128(ctx, o->u32.hi); - } - } -} - -/* Write bytecode instructions. */ -static void bcwrite_bytecode(BCWriteCtx *ctx, GCproto *pt) -{ - MSize nbc = pt->sizebc-1; /* Omit the [JI]FUNC* header. */ -#if LJ_HASJIT - uint8_t *p = (uint8_t *)&ctx->sb.buf[ctx->sb.n]; -#endif - bcwrite_block(ctx, proto_bc(pt)+1, nbc*(MSize)sizeof(BCIns)); -#if LJ_HASJIT - /* Unpatch modified bytecode containing ILOOP/JLOOP etc. */ - if ((pt->flags & PROTO_ILOOP) || pt->trace) { - jit_State *J = L2J(ctx->L); - MSize i; - for (i = 0; i < nbc; i++, p += sizeof(BCIns)) { - BCOp op = (BCOp)p[LJ_ENDIAN_SELECT(0, 3)]; - if (op == BC_IFORL || op == BC_IITERL || op == BC_ILOOP || - op == BC_JFORI) { - p[LJ_ENDIAN_SELECT(0, 3)] = (uint8_t)(op-BC_IFORL+BC_FORL); - } else if (op == BC_JFORL || op == BC_JITERL || op == BC_JLOOP) { - BCReg rd = p[LJ_ENDIAN_SELECT(2, 1)] + (p[LJ_ENDIAN_SELECT(3, 0)] << 8); - BCIns ins = traceref(J, rd)->startins; - p[LJ_ENDIAN_SELECT(0, 3)] = (uint8_t)(op-BC_JFORL+BC_FORL); - p[LJ_ENDIAN_SELECT(2, 1)] = bc_c(ins); - p[LJ_ENDIAN_SELECT(3, 0)] = bc_b(ins); - } - } - } -#endif -} - -/* Write prototype. */ -static void bcwrite_proto(BCWriteCtx *ctx, GCproto *pt) -{ - MSize sizedbg = 0; - - /* Recursively write children of prototype. */ - if ((pt->flags & PROTO_CHILD)) { - ptrdiff_t i, n = pt->sizekgc; - GCRef *kr = mref(pt->k, GCRef) - 1; - for (i = 0; i < n; i++, kr--) { - GCobj *o = gcref(*kr); - if (o->gch.gct == ~LJ_TPROTO) - bcwrite_proto(ctx, gco2pt(o)); - } - } - - /* Start writing the prototype info to a buffer. */ - lj_str_resetbuf(&ctx->sb); - ctx->sb.n = 5; /* Leave room for final size. */ - bcwrite_need(ctx, 4+6*5+(pt->sizebc-1)*(MSize)sizeof(BCIns)+pt->sizeuv*2); - - /* Write prototype header. */ - bcwrite_byte(ctx, (pt->flags & (PROTO_CHILD|PROTO_VARARG|PROTO_FFI))); - bcwrite_byte(ctx, pt->numparams); - bcwrite_byte(ctx, pt->framesize); - bcwrite_byte(ctx, pt->sizeuv); - bcwrite_uleb128(ctx, pt->sizekgc); - bcwrite_uleb128(ctx, pt->sizekn); - bcwrite_uleb128(ctx, pt->sizebc-1); - if (!ctx->strip) { - if (proto_lineinfo(pt)) - sizedbg = pt->sizept - (MSize)((char *)proto_lineinfo(pt) - (char *)pt); - bcwrite_uleb128(ctx, sizedbg); - if (sizedbg) { - bcwrite_uleb128(ctx, pt->firstline); - bcwrite_uleb128(ctx, pt->numline); - } - } - - /* Write bytecode instructions and upvalue refs. */ - bcwrite_bytecode(ctx, pt); - bcwrite_block(ctx, proto_uv(pt), pt->sizeuv*2); - - /* Write constants. */ - bcwrite_kgc(ctx, pt); - bcwrite_knum(ctx, pt); - - /* Write debug info, if not stripped. */ - if (sizedbg) { - bcwrite_need(ctx, sizedbg); - bcwrite_block(ctx, proto_lineinfo(pt), sizedbg); - } - - /* Pass buffer to writer function. */ - if (ctx->status == 0) { - MSize n = ctx->sb.n - 5; - MSize nn = (lj_fls(n)+8)*9 >> 6; - ctx->sb.n = 5 - nn; - bcwrite_uleb128(ctx, n); /* Fill in final size. */ - lua_assert(ctx->sb.n == 5); - ctx->status = ctx->wfunc(ctx->L, ctx->sb.buf+5-nn, nn+n, ctx->wdata); - } -} - -/* Write header of bytecode dump. */ -static void bcwrite_header(BCWriteCtx *ctx) -{ - GCstr *chunkname = proto_chunkname(ctx->pt); - const char *name = strdata(chunkname); - MSize len = chunkname->len; - lj_str_resetbuf(&ctx->sb); - bcwrite_need(ctx, 5+5+len); - bcwrite_byte(ctx, BCDUMP_HEAD1); - bcwrite_byte(ctx, BCDUMP_HEAD2); - bcwrite_byte(ctx, BCDUMP_HEAD3); - bcwrite_byte(ctx, BCDUMP_VERSION); - bcwrite_byte(ctx, (ctx->strip ? BCDUMP_F_STRIP : 0) + - (LJ_BE ? BCDUMP_F_BE : 0) + - ((ctx->pt->flags & PROTO_FFI) ? BCDUMP_F_FFI : 0)); - if (!ctx->strip) { - bcwrite_uleb128(ctx, len); - bcwrite_block(ctx, name, len); - } - ctx->status = ctx->wfunc(ctx->L, ctx->sb.buf, ctx->sb.n, ctx->wdata); -} - -/* Write footer of bytecode dump. */ -static void bcwrite_footer(BCWriteCtx *ctx) -{ - if (ctx->status == 0) { - uint8_t zero = 0; - ctx->status = ctx->wfunc(ctx->L, &zero, 1, ctx->wdata); - } -} - -/* Protected callback for bytecode writer. */ -static TValue *cpwriter(lua_State *L, lua_CFunction dummy, void *ud) -{ - BCWriteCtx *ctx = (BCWriteCtx *)ud; - UNUSED(dummy); - lj_str_resizebuf(L, &ctx->sb, 1024); /* Avoids resize for most prototypes. */ - bcwrite_header(ctx); - bcwrite_proto(ctx, ctx->pt); - bcwrite_footer(ctx); - return NULL; -} - -/* Write bytecode for a prototype. */ -int lj_bcwrite(lua_State *L, GCproto *pt, lua_Writer writer, void *data, - int strip) -{ - BCWriteCtx ctx; - int status; - ctx.L = L; - ctx.pt = pt; - ctx.wfunc = writer; - ctx.wdata = data; - ctx.strip = strip; - ctx.status = 0; - lj_str_initbuf(&ctx.sb); - status = lj_vm_cpcall(L, NULL, &ctx, cpwriter); - if (status == 0) status = ctx.status; - lj_str_freebuf(G(ctx.L), &ctx.sb); - return status; -} - diff --git a/deps/luajit/src/lj_carith.c b/deps/luajit/src/lj_carith.c deleted file mode 100644 index 2a358a9..0000000 --- a/deps/luajit/src/lj_carith.c +++ /dev/null @@ -1,353 +0,0 @@ -/* -** C data arithmetic. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_ctype.h" -#include "lj_cconv.h" -#include "lj_cdata.h" -#include "lj_carith.h" - -/* -- C data arithmetic --------------------------------------------------- */ - -/* Binary operands of an operator converted to ctypes. */ -typedef struct CDArith { - uint8_t *p[2]; - CType *ct[2]; -} CDArith; - -/* Check arguments for arithmetic metamethods. */ -static int carith_checkarg(lua_State *L, CTState *cts, CDArith *ca) -{ - TValue *o = L->base; - int ok = 1; - MSize i; - if (o+1 >= L->top) - lj_err_argt(L, 1, LUA_TCDATA); - for (i = 0; i < 2; i++, o++) { - if (tviscdata(o)) { - GCcdata *cd = cdataV(o); - CTypeID id = (CTypeID)cd->ctypeid; - CType *ct = ctype_raw(cts, id); - uint8_t *p = (uint8_t *)cdataptr(cd); - if (ctype_isptr(ct->info)) { - p = (uint8_t *)cdata_getptr(p, ct->size); - if (ctype_isref(ct->info)) ct = ctype_rawchild(cts, ct); - } else if (ctype_isfunc(ct->info)) { - p = (uint8_t *)*(void **)p; - ct = ctype_get(cts, - lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|id), CTSIZE_PTR)); - } - if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct); - ca->ct[i] = ct; - ca->p[i] = p; - } else if (tvisint(o)) { - ca->ct[i] = ctype_get(cts, CTID_INT32); - ca->p[i] = (uint8_t *)&o->i; - } else if (tvisnum(o)) { - ca->ct[i] = ctype_get(cts, CTID_DOUBLE); - ca->p[i] = (uint8_t *)&o->n; - } else if (tvisnil(o)) { - ca->ct[i] = ctype_get(cts, CTID_P_VOID); - ca->p[i] = (uint8_t *)0; - } else if (tvisstr(o)) { - TValue *o2 = i == 0 ? o+1 : o-1; - CType *ct = ctype_raw(cts, cdataV(o2)->ctypeid); - ca->ct[i] = NULL; - ca->p[i] = (uint8_t *)strVdata(o); - ok = 0; - if (ctype_isenum(ct->info)) { - CTSize ofs; - CType *cct = lj_ctype_getfield(cts, ct, strV(o), &ofs); - if (cct && ctype_isconstval(cct->info)) { - ca->ct[i] = ctype_child(cts, cct); - ca->p[i] = (uint8_t *)&cct->size; /* Assumes ct does not grow. */ - ok = 1; - } else { - ca->ct[1-i] = ct; /* Use enum to improve error message. */ - ca->p[1-i] = NULL; - break; - } - } - } else { - ca->ct[i] = NULL; - ca->p[i] = (void *)(intptr_t)1; /* To make it unequal. */ - ok = 0; - } - } - return ok; -} - -/* Pointer arithmetic. */ -static int carith_ptr(lua_State *L, CTState *cts, CDArith *ca, MMS mm) -{ - CType *ctp = ca->ct[0]; - uint8_t *pp = ca->p[0]; - ptrdiff_t idx; - CTSize sz; - CTypeID id; - GCcdata *cd; - if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) { - if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) && - (ctype_isptr(ca->ct[1]->info) || ctype_isrefarray(ca->ct[1]->info))) { - uint8_t *pp2 = ca->p[1]; - if (mm == MM_eq) { /* Pointer equality. Incompatible pointers are ok. */ - setboolV(L->top-1, (pp == pp2)); - return 1; - } - if (!lj_cconv_compatptr(cts, ctp, ca->ct[1], CCF_IGNQUAL)) - return 0; - if (mm == MM_sub) { /* Pointer difference. */ - intptr_t diff; - sz = lj_ctype_size(cts, ctype_cid(ctp->info)); /* Element size. */ - if (sz == 0 || sz == CTSIZE_INVALID) - return 0; - diff = ((intptr_t)pp - (intptr_t)pp2) / (int32_t)sz; - /* All valid pointer differences on x64 are in (-2^47, +2^47), - ** which fits into a double without loss of precision. - */ - setintptrV(L->top-1, (int32_t)diff); - return 1; - } else if (mm == MM_lt) { /* Pointer comparison (unsigned). */ - setboolV(L->top-1, ((uintptr_t)pp < (uintptr_t)pp2)); - return 1; - } else { - lua_assert(mm == MM_le); - setboolV(L->top-1, ((uintptr_t)pp <= (uintptr_t)pp2)); - return 1; - } - } - if (!((mm == MM_add || mm == MM_sub) && ctype_isnum(ca->ct[1]->info))) - return 0; - lj_cconv_ct_ct(cts, ctype_get(cts, CTID_INT_PSZ), ca->ct[1], - (uint8_t *)&idx, ca->p[1], 0); - if (mm == MM_sub) idx = -idx; - } else if (mm == MM_add && ctype_isnum(ctp->info) && - (ctype_isptr(ca->ct[1]->info) || ctype_isrefarray(ca->ct[1]->info))) { - /* Swap pointer and index. */ - ctp = ca->ct[1]; pp = ca->p[1]; - lj_cconv_ct_ct(cts, ctype_get(cts, CTID_INT_PSZ), ca->ct[0], - (uint8_t *)&idx, ca->p[0], 0); - } else { - return 0; - } - sz = lj_ctype_size(cts, ctype_cid(ctp->info)); /* Element size. */ - if (sz == CTSIZE_INVALID) - return 0; - pp += idx*(int32_t)sz; /* Compute pointer + index. */ - id = lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|ctype_cid(ctp->info)), - CTSIZE_PTR); - cd = lj_cdata_new(cts, id, CTSIZE_PTR); - *(uint8_t **)cdataptr(cd) = pp; - setcdataV(L, L->top-1, cd); - lj_gc_check(L); - return 1; -} - -/* 64 bit integer arithmetic. */ -static int carith_int64(lua_State *L, CTState *cts, CDArith *ca, MMS mm) -{ - if (ctype_isnum(ca->ct[0]->info) && ca->ct[0]->size <= 8 && - ctype_isnum(ca->ct[1]->info) && ca->ct[1]->size <= 8) { - CTypeID id = (((ca->ct[0]->info & CTF_UNSIGNED) && ca->ct[0]->size == 8) || - ((ca->ct[1]->info & CTF_UNSIGNED) && ca->ct[1]->size == 8)) ? - CTID_UINT64 : CTID_INT64; - CType *ct = ctype_get(cts, id); - GCcdata *cd; - uint64_t u0, u1, *up; - lj_cconv_ct_ct(cts, ct, ca->ct[0], (uint8_t *)&u0, ca->p[0], 0); - if (mm != MM_unm) - lj_cconv_ct_ct(cts, ct, ca->ct[1], (uint8_t *)&u1, ca->p[1], 0); - switch (mm) { - case MM_eq: - setboolV(L->top-1, (u0 == u1)); - return 1; - case MM_lt: - setboolV(L->top-1, - id == CTID_INT64 ? ((int64_t)u0 < (int64_t)u1) : (u0 < u1)); - return 1; - case MM_le: - setboolV(L->top-1, - id == CTID_INT64 ? ((int64_t)u0 <= (int64_t)u1) : (u0 <= u1)); - return 1; - default: break; - } - cd = lj_cdata_new(cts, id, 8); - up = (uint64_t *)cdataptr(cd); - setcdataV(L, L->top-1, cd); - switch (mm) { - case MM_add: *up = u0 + u1; break; - case MM_sub: *up = u0 - u1; break; - case MM_mul: *up = u0 * u1; break; - case MM_div: - if (id == CTID_INT64) - *up = (uint64_t)lj_carith_divi64((int64_t)u0, (int64_t)u1); - else - *up = lj_carith_divu64(u0, u1); - break; - case MM_mod: - if (id == CTID_INT64) - *up = (uint64_t)lj_carith_modi64((int64_t)u0, (int64_t)u1); - else - *up = lj_carith_modu64(u0, u1); - break; - case MM_pow: - if (id == CTID_INT64) - *up = (uint64_t)lj_carith_powi64((int64_t)u0, (int64_t)u1); - else - *up = lj_carith_powu64(u0, u1); - break; - case MM_unm: *up = (uint64_t)-(int64_t)u0; break; - default: lua_assert(0); break; - } - lj_gc_check(L); - return 1; - } - return 0; -} - -/* Handle ctype arithmetic metamethods. */ -static int lj_carith_meta(lua_State *L, CTState *cts, CDArith *ca, MMS mm) -{ - cTValue *tv = NULL; - if (tviscdata(L->base)) { - CTypeID id = cdataV(L->base)->ctypeid; - CType *ct = ctype_raw(cts, id); - if (ctype_isptr(ct->info)) id = ctype_cid(ct->info); - tv = lj_ctype_meta(cts, id, mm); - } - if (!tv && L->base+1 < L->top && tviscdata(L->base+1)) { - CTypeID id = cdataV(L->base+1)->ctypeid; - CType *ct = ctype_raw(cts, id); - if (ctype_isptr(ct->info)) id = ctype_cid(ct->info); - tv = lj_ctype_meta(cts, id, mm); - } - if (!tv) { - const char *repr[2]; - int i, isenum = -1, isstr = -1; - if (mm == MM_eq) { /* Equality checks never raise an error. */ - int eq = ca->p[0] == ca->p[1]; - setboolV(L->top-1, eq); - setboolV(&G(L)->tmptv2, eq); /* Remember for trace recorder. */ - return 1; - } - for (i = 0; i < 2; i++) { - if (ca->ct[i] && tviscdata(L->base+i)) { - if (ctype_isenum(ca->ct[i]->info)) isenum = i; - repr[i] = strdata(lj_ctype_repr(L, ctype_typeid(cts, ca->ct[i]), NULL)); - } else { - if (tvisstr(&L->base[i])) isstr = i; - repr[i] = lj_typename(&L->base[i]); - } - } - if ((isenum ^ isstr) == 1) - lj_err_callerv(L, LJ_ERR_FFI_BADCONV, repr[isstr], repr[isenum]); - lj_err_callerv(L, mm == MM_len ? LJ_ERR_FFI_BADLEN : - mm == MM_concat ? LJ_ERR_FFI_BADCONCAT : - mm < MM_add ? LJ_ERR_FFI_BADCOMP : LJ_ERR_FFI_BADARITH, - repr[0], repr[1]); - } - return lj_meta_tailcall(L, tv); -} - -/* Arithmetic operators for cdata. */ -int lj_carith_op(lua_State *L, MMS mm) -{ - CTState *cts = ctype_cts(L); - CDArith ca; - if (carith_checkarg(L, cts, &ca)) { - if (carith_int64(L, cts, &ca, mm) || carith_ptr(L, cts, &ca, mm)) { - copyTV(L, &G(L)->tmptv2, L->top-1); /* Remember for trace recorder. */ - return 1; - } - } - return lj_carith_meta(L, cts, &ca, mm); -} - -/* -- 64 bit integer arithmetic helpers ----------------------------------- */ - -#if LJ_32 && LJ_HASJIT -/* Signed/unsigned 64 bit multiplication. */ -int64_t lj_carith_mul64(int64_t a, int64_t b) -{ - return a * b; -} -#endif - -/* Unsigned 64 bit division. */ -uint64_t lj_carith_divu64(uint64_t a, uint64_t b) -{ - if (b == 0) return U64x(80000000,00000000); - return a / b; -} - -/* Signed 64 bit division. */ -int64_t lj_carith_divi64(int64_t a, int64_t b) -{ - if (b == 0 || (a == (int64_t)U64x(80000000,00000000) && b == -1)) - return U64x(80000000,00000000); - return a / b; -} - -/* Unsigned 64 bit modulo. */ -uint64_t lj_carith_modu64(uint64_t a, uint64_t b) -{ - if (b == 0) return U64x(80000000,00000000); - return a % b; -} - -/* Signed 64 bit modulo. */ -int64_t lj_carith_modi64(int64_t a, int64_t b) -{ - if (b == 0) return U64x(80000000,00000000); - if (a == (int64_t)U64x(80000000,00000000) && b == -1) return 0; - return a % b; -} - -/* Unsigned 64 bit x^k. */ -uint64_t lj_carith_powu64(uint64_t x, uint64_t k) -{ - uint64_t y; - if (k == 0) - return 1; - for (; (k & 1) == 0; k >>= 1) x *= x; - y = x; - if ((k >>= 1) != 0) { - for (;;) { - x *= x; - if (k == 1) break; - if (k & 1) y *= x; - k >>= 1; - } - y *= x; - } - return y; -} - -/* Signed 64 bit x^k. */ -int64_t lj_carith_powi64(int64_t x, int64_t k) -{ - if (k == 0) - return 1; - if (k < 0) { - if (x == 0) - return U64x(7fffffff,ffffffff); - else if (x == 1) - return 1; - else if (x == -1) - return (k & 1) ? -1 : 1; - else - return 0; - } - return (int64_t)lj_carith_powu64((uint64_t)x, (uint64_t)k); -} - -#endif diff --git a/deps/luajit/src/lj_carith.h b/deps/luajit/src/lj_carith.h deleted file mode 100644 index 8c4bdbb..0000000 --- a/deps/luajit/src/lj_carith.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -** C data arithmetic. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CARITH_H -#define _LJ_CARITH_H - -#include "lj_obj.h" - -#if LJ_HASFFI - -LJ_FUNC int lj_carith_op(lua_State *L, MMS mm); - -#if LJ_32 && LJ_HASJIT -LJ_FUNC int64_t lj_carith_mul64(int64_t x, int64_t k); -#endif -LJ_FUNC uint64_t lj_carith_divu64(uint64_t a, uint64_t b); -LJ_FUNC int64_t lj_carith_divi64(int64_t a, int64_t b); -LJ_FUNC uint64_t lj_carith_modu64(uint64_t a, uint64_t b); -LJ_FUNC int64_t lj_carith_modi64(int64_t a, int64_t b); -LJ_FUNC uint64_t lj_carith_powu64(uint64_t x, uint64_t k); -LJ_FUNC int64_t lj_carith_powi64(int64_t x, int64_t k); - -#endif - -#endif diff --git a/deps/luajit/src/lj_ccall.c b/deps/luajit/src/lj_ccall.c deleted file mode 100644 index 998417c..0000000 --- a/deps/luajit/src/lj_ccall.c +++ /dev/null @@ -1,900 +0,0 @@ -/* -** FFI C call handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_ctype.h" -#include "lj_cconv.h" -#include "lj_cdata.h" -#include "lj_ccall.h" -#include "lj_trace.h" - -/* Target-specific handling of register arguments. */ -#if LJ_TARGET_X86 -/* -- x86 calling conventions --------------------------------------------- */ - -#if LJ_ABI_WIN - -#define CCALL_HANDLE_STRUCTRET \ - /* Return structs bigger than 8 by reference (on stack only). */ \ - cc->retref = (sz > 8); \ - if (cc->retref) cc->stack[nsp++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET CCALL_HANDLE_STRUCTRET - -#else - -#if LJ_TARGET_OSX - -#define CCALL_HANDLE_STRUCTRET \ - /* Return structs of size 1, 2, 4 or 8 in registers. */ \ - cc->retref = !(sz == 1 || sz == 2 || sz == 4 || sz == 8); \ - if (cc->retref) { \ - if (ngpr < maxgpr) \ - cc->gpr[ngpr++] = (GPRArg)dp; \ - else \ - cc->stack[nsp++] = (GPRArg)dp; \ - } else { /* Struct with single FP field ends up in FPR. */ \ - cc->resx87 = ccall_classify_struct(cts, ctr); \ - } - -#define CCALL_HANDLE_STRUCTRET2 \ - if (cc->resx87) sp = (uint8_t *)&cc->fpr[0]; \ - memcpy(dp, sp, ctr->size); - -#else - -#define CCALL_HANDLE_STRUCTRET \ - cc->retref = 1; /* Return all structs by reference (in reg or on stack). */ \ - if (ngpr < maxgpr) \ - cc->gpr[ngpr++] = (GPRArg)dp; \ - else \ - cc->stack[nsp++] = (GPRArg)dp; - -#endif - -#define CCALL_HANDLE_COMPLEXRET \ - /* Return complex float in GPRs and complex double by reference. */ \ - cc->retref = (sz > 8); \ - if (cc->retref) { \ - if (ngpr < maxgpr) \ - cc->gpr[ngpr++] = (GPRArg)dp; \ - else \ - cc->stack[nsp++] = (GPRArg)dp; \ - } - -#endif - -#define CCALL_HANDLE_COMPLEXRET2 \ - if (!cc->retref) \ - *(int64_t *)dp = *(int64_t *)sp; /* Copy complex float from GPRs. */ - -#define CCALL_HANDLE_STRUCTARG \ - ngpr = maxgpr; /* Pass all structs by value on the stack. */ - -#define CCALL_HANDLE_COMPLEXARG \ - isfp = 1; /* Pass complex by value on stack. */ - -#define CCALL_HANDLE_REGARG \ - if (!isfp) { /* Only non-FP values may be passed in registers. */ \ - if (n > 1) { /* Anything > 32 bit is passed on the stack. */ \ - if (!LJ_ABI_WIN) ngpr = maxgpr; /* Prevent reordering. */ \ - } else if (ngpr + 1 <= maxgpr) { \ - dp = &cc->gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#elif LJ_TARGET_X64 && LJ_ABI_WIN -/* -- Windows/x64 calling conventions ------------------------------------- */ - -#define CCALL_HANDLE_STRUCTRET \ - /* Return structs of size 1, 2, 4 or 8 in a GPR. */ \ - cc->retref = !(sz == 1 || sz == 2 || sz == 4 || sz == 8); \ - if (cc->retref) cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET CCALL_HANDLE_STRUCTRET - -#define CCALL_HANDLE_COMPLEXRET2 \ - if (!cc->retref) \ - *(int64_t *)dp = *(int64_t *)sp; /* Copy complex float from GPRs. */ - -#define CCALL_HANDLE_STRUCTARG \ - /* Pass structs of size 1, 2, 4 or 8 in a GPR by value. */ \ - if (!(sz == 1 || sz == 2 || sz == 4 || sz == 8)) { \ - rp = cdataptr(lj_cdata_new(cts, did, sz)); \ - sz = CTSIZE_PTR; /* Pass all other structs by reference. */ \ - } - -#define CCALL_HANDLE_COMPLEXARG \ - /* Pass complex float in a GPR and complex double by reference. */ \ - if (sz != 2*sizeof(float)) { \ - rp = cdataptr(lj_cdata_new(cts, did, sz)); \ - sz = CTSIZE_PTR; \ - } - -/* Windows/x64 argument registers are strictly positional (use ngpr). */ -#define CCALL_HANDLE_REGARG \ - if (isfp) { \ - if (ngpr < maxgpr) { dp = &cc->fpr[ngpr++]; nfpr = ngpr; goto done; } \ - } else { \ - if (ngpr < maxgpr) { dp = &cc->gpr[ngpr++]; goto done; } \ - } - -#elif LJ_TARGET_X64 -/* -- POSIX/x64 calling conventions --------------------------------------- */ - -#define CCALL_HANDLE_STRUCTRET \ - int rcl[2]; rcl[0] = rcl[1] = 0; \ - if (ccall_classify_struct(cts, ctr, rcl, 0)) { \ - cc->retref = 1; /* Return struct by reference. */ \ - cc->gpr[ngpr++] = (GPRArg)dp; \ - } else { \ - cc->retref = 0; /* Return small structs in registers. */ \ - } - -#define CCALL_HANDLE_STRUCTRET2 \ - int rcl[2]; rcl[0] = rcl[1] = 0; \ - ccall_classify_struct(cts, ctr, rcl, 0); \ - ccall_struct_ret(cc, rcl, dp, ctr->size); - -#define CCALL_HANDLE_COMPLEXRET \ - /* Complex values are returned in one or two FPRs. */ \ - cc->retref = 0; - -#define CCALL_HANDLE_COMPLEXRET2 \ - if (ctr->size == 2*sizeof(float)) { /* Copy complex float from FPR. */ \ - *(int64_t *)dp = cc->fpr[0].l[0]; \ - } else { /* Copy non-contiguous complex double from FPRs. */ \ - ((int64_t *)dp)[0] = cc->fpr[0].l[0]; \ - ((int64_t *)dp)[1] = cc->fpr[1].l[0]; \ - } - -#define CCALL_HANDLE_STRUCTARG \ - int rcl[2]; rcl[0] = rcl[1] = 0; \ - if (!ccall_classify_struct(cts, d, rcl, 0)) { \ - cc->nsp = nsp; cc->ngpr = ngpr; cc->nfpr = nfpr; \ - if (ccall_struct_arg(cc, cts, d, rcl, o, narg)) goto err_nyi; \ - nsp = cc->nsp; ngpr = cc->ngpr; nfpr = cc->nfpr; \ - continue; \ - } /* Pass all other structs by value on stack. */ - -#define CCALL_HANDLE_COMPLEXARG \ - isfp = 2; /* Pass complex in FPRs or on stack. Needs postprocessing. */ - -#define CCALL_HANDLE_REGARG \ - if (isfp) { /* Try to pass argument in FPRs. */ \ - int n2 = ctype_isvector(d->info) ? 1 : n; \ - if (nfpr + n2 <= CCALL_NARG_FPR) { \ - dp = &cc->fpr[nfpr]; \ - nfpr += n2; \ - goto done; \ - } \ - } else { /* Try to pass argument in GPRs. */ \ - /* Note that reordering is explicitly allowed in the x64 ABI. */ \ - if (n <= 2 && ngpr + n <= maxgpr) { \ - dp = &cc->gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#elif LJ_TARGET_ARM -/* -- ARM calling conventions --------------------------------------------- */ - -#if LJ_ABI_SOFTFP - -#define CCALL_HANDLE_STRUCTRET \ - /* Return structs of size <= 4 in a GPR. */ \ - cc->retref = !(sz <= 4); \ - if (cc->retref) cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET \ - cc->retref = 1; /* Return all complex values by reference. */ \ - cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET2 \ - UNUSED(dp); /* Nothing to do. */ - -#define CCALL_HANDLE_STRUCTARG \ - /* Pass all structs by value in registers and/or on the stack. */ - -#define CCALL_HANDLE_COMPLEXARG \ - /* Pass complex by value in 2 or 4 GPRs. */ - -#define CCALL_HANDLE_REGARG_FP1 -#define CCALL_HANDLE_REGARG_FP2 - -#else - -#define CCALL_HANDLE_STRUCTRET \ - cc->retref = !ccall_classify_struct(cts, ctr, ct); \ - if (cc->retref) cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_STRUCTRET2 \ - if (ccall_classify_struct(cts, ctr, ct) > 1) sp = (uint8_t *)&cc->fpr[0]; \ - memcpy(dp, sp, ctr->size); - -#define CCALL_HANDLE_COMPLEXRET \ - if (!(ct->info & CTF_VARARG)) cc->retref = 0; /* Return complex in FPRs. */ - -#define CCALL_HANDLE_COMPLEXRET2 \ - if (!(ct->info & CTF_VARARG)) memcpy(dp, &cc->fpr[0], ctr->size); - -#define CCALL_HANDLE_STRUCTARG \ - isfp = (ccall_classify_struct(cts, d, ct) > 1); - /* Pass all structs by value in registers and/or on the stack. */ - -#define CCALL_HANDLE_COMPLEXARG \ - isfp = 1; /* Pass complex by value in FPRs or on stack. */ - -#define CCALL_HANDLE_REGARG_FP1 \ - if (isfp && !(ct->info & CTF_VARARG)) { \ - if ((d->info & CTF_ALIGN) > CTALIGN_PTR) { \ - if (nfpr + (n >> 1) <= CCALL_NARG_FPR) { \ - dp = &cc->fpr[nfpr]; \ - nfpr += (n >> 1); \ - goto done; \ - } \ - } else { \ - if (sz > 1 && fprodd != nfpr) fprodd = 0; \ - if (fprodd) { \ - if (2*nfpr+n <= 2*CCALL_NARG_FPR+1) { \ - dp = (void *)&cc->fpr[fprodd-1].f[1]; \ - nfpr += (n >> 1); \ - if ((n & 1)) fprodd = 0; else fprodd = nfpr-1; \ - goto done; \ - } \ - } else { \ - if (2*nfpr+n <= 2*CCALL_NARG_FPR) { \ - dp = (void *)&cc->fpr[nfpr]; \ - nfpr += (n >> 1); \ - if ((n & 1)) fprodd = ++nfpr; else fprodd = 0; \ - goto done; \ - } \ - } \ - } \ - fprodd = 0; /* No reordering after the first FP value is on stack. */ \ - } else { - -#define CCALL_HANDLE_REGARG_FP2 } - -#endif - -#define CCALL_HANDLE_REGARG \ - CCALL_HANDLE_REGARG_FP1 \ - if ((d->info & CTF_ALIGN) > CTALIGN_PTR) { \ - if (ngpr < maxgpr) \ - ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ - } \ - if (ngpr < maxgpr) { \ - dp = &cc->gpr[ngpr]; \ - if (ngpr + n > maxgpr) { \ - nsp += ngpr + n - maxgpr; /* Assumes contiguous gpr/stack fields. */ \ - if (nsp > CCALL_MAXSTACK) goto err_nyi; /* Too many arguments. */ \ - ngpr = maxgpr; \ - } else { \ - ngpr += n; \ - } \ - goto done; \ - } CCALL_HANDLE_REGARG_FP2 - -#define CCALL_HANDLE_RET \ - if ((ct->info & CTF_VARARG)) sp = (uint8_t *)&cc->gpr[0]; - -#elif LJ_TARGET_PPC -/* -- PPC calling conventions --------------------------------------------- */ - -#define CCALL_HANDLE_STRUCTRET \ - cc->retref = 1; /* Return all structs by reference. */ \ - cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET \ - /* Complex values are returned in 2 or 4 GPRs. */ \ - cc->retref = 0; - -#define CCALL_HANDLE_COMPLEXRET2 \ - memcpy(dp, sp, ctr->size); /* Copy complex from GPRs. */ - -#define CCALL_HANDLE_STRUCTARG \ - rp = cdataptr(lj_cdata_new(cts, did, sz)); \ - sz = CTSIZE_PTR; /* Pass all structs by reference. */ - -#define CCALL_HANDLE_COMPLEXARG \ - /* Pass complex by value in 2 or 4 GPRs. */ - -#define CCALL_HANDLE_REGARG \ - if (isfp) { /* Try to pass argument in FPRs. */ \ - if (nfpr + 1 <= CCALL_NARG_FPR) { \ - dp = &cc->fpr[nfpr]; \ - nfpr += 1; \ - d = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */ \ - goto done; \ - } \ - } else { /* Try to pass argument in GPRs. */ \ - if (n > 1) { \ - lua_assert(n == 2 || n == 4); /* int64_t or complex (float). */ \ - if (ctype_isinteger(d->info)) \ - ngpr = (ngpr + 1u) & ~1u; /* Align int64_t to regpair. */ \ - else if (ngpr + n > maxgpr) \ - ngpr = maxgpr; /* Prevent reordering. */ \ - } \ - if (ngpr + n <= maxgpr) { \ - dp = &cc->gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#define CCALL_HANDLE_RET \ - if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ - ctr = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */ - -#elif LJ_TARGET_PPCSPE -/* -- PPC/SPE calling conventions ----------------------------------------- */ - -#define CCALL_HANDLE_STRUCTRET \ - cc->retref = 1; /* Return all structs by reference. */ \ - cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET \ - /* Complex values are returned in 2 or 4 GPRs. */ \ - cc->retref = 0; - -#define CCALL_HANDLE_COMPLEXRET2 \ - memcpy(dp, sp, ctr->size); /* Copy complex from GPRs. */ - -#define CCALL_HANDLE_STRUCTARG \ - rp = cdataptr(lj_cdata_new(cts, did, sz)); \ - sz = CTSIZE_PTR; /* Pass all structs by reference. */ - -#define CCALL_HANDLE_COMPLEXARG \ - /* Pass complex by value in 2 or 4 GPRs. */ - -/* PPC/SPE has a softfp ABI. */ -#define CCALL_HANDLE_REGARG \ - if (n > 1) { /* Doesn't fit in a single GPR? */ \ - lua_assert(n == 2 || n == 4); /* int64_t, double or complex (float). */ \ - if (n == 2) \ - ngpr = (ngpr + 1u) & ~1u; /* Only align 64 bit value to regpair. */ \ - else if (ngpr + n > maxgpr) \ - ngpr = maxgpr; /* Prevent reordering. */ \ - } \ - if (ngpr + n <= maxgpr) { \ - dp = &cc->gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } - -#elif LJ_TARGET_MIPS -/* -- MIPS calling conventions -------------------------------------------- */ - -#define CCALL_HANDLE_STRUCTRET \ - cc->retref = 1; /* Return all structs by reference. */ \ - cc->gpr[ngpr++] = (GPRArg)dp; - -#define CCALL_HANDLE_COMPLEXRET \ - /* Complex values are returned in 1 or 2 FPRs. */ \ - cc->retref = 0; - -#define CCALL_HANDLE_COMPLEXRET2 \ - if (ctr->size == 2*sizeof(float)) { /* Copy complex float from FPRs. */ \ - ((float *)dp)[0] = cc->fpr[0].f; \ - ((float *)dp)[1] = cc->fpr[1].f; \ - } else { /* Copy complex double from FPRs. */ \ - ((double *)dp)[0] = cc->fpr[0].d; \ - ((double *)dp)[1] = cc->fpr[1].d; \ - } - -#define CCALL_HANDLE_STRUCTARG \ - /* Pass all structs by value in registers and/or on the stack. */ - -#define CCALL_HANDLE_COMPLEXARG \ - /* Pass complex by value in 2 or 4 GPRs. */ - -#define CCALL_HANDLE_REGARG \ - if (isfp && nfpr < CCALL_NARG_FPR && !(ct->info & CTF_VARARG)) { \ - /* Try to pass argument in FPRs. */ \ - dp = n == 1 ? (void *)&cc->fpr[nfpr].f : (void *)&cc->fpr[nfpr].d; \ - nfpr++; ngpr += n; \ - goto done; \ - } else { /* Try to pass argument in GPRs. */ \ - nfpr = CCALL_NARG_FPR; \ - if ((d->info & CTF_ALIGN) > CTALIGN_PTR) \ - ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ - if (ngpr < maxgpr) { \ - dp = &cc->gpr[ngpr]; \ - if (ngpr + n > maxgpr) { \ - nsp += ngpr + n - maxgpr; /* Assumes contiguous gpr/stack fields. */ \ - if (nsp > CCALL_MAXSTACK) goto err_nyi; /* Too many arguments. */ \ - ngpr = maxgpr; \ - } else { \ - ngpr += n; \ - } \ - goto done; \ - } \ - } - -#define CCALL_HANDLE_RET \ - if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ - sp = (uint8_t *)&cc->fpr[0].f; - -#else -#error "Missing calling convention definitions for this architecture" -#endif - -#ifndef CCALL_HANDLE_STRUCTRET2 -#define CCALL_HANDLE_STRUCTRET2 \ - memcpy(dp, sp, ctr->size); /* Copy struct return value from GPRs. */ -#endif - -/* -- x86 OSX ABI struct classification ----------------------------------- */ - -#if LJ_TARGET_X86 && LJ_TARGET_OSX - -/* Check for struct with single FP field. */ -static int ccall_classify_struct(CTState *cts, CType *ct) -{ - CTSize sz = ct->size; - if (!(sz == sizeof(float) || sz == sizeof(double))) return 0; - if ((ct->info & CTF_UNION)) return 0; - while (ct->sib) { - ct = ctype_get(cts, ct->sib); - if (ctype_isfield(ct->info)) { - CType *sct = ctype_rawchild(cts, ct); - if (ctype_isfp(sct->info)) { - if (sct->size == sz) - return (sz >> 2); /* Return 1 for float or 2 for double. */ - } else if (ctype_isstruct(sct->info)) { - if (sct->size) - return ccall_classify_struct(cts, sct); - } else { - break; - } - } else if (ctype_isbitfield(ct->info)) { - break; - } else if (ctype_isxattrib(ct->info, CTA_SUBTYPE)) { - CType *sct = ctype_rawchild(cts, ct); - if (sct->size) - return ccall_classify_struct(cts, sct); - } - } - return 0; -} - -#endif - -/* -- x64 struct classification ------------------------------------------- */ - -#if LJ_TARGET_X64 && !LJ_ABI_WIN - -/* Register classes for x64 struct classification. */ -#define CCALL_RCL_INT 1 -#define CCALL_RCL_SSE 2 -#define CCALL_RCL_MEM 4 -/* NYI: classify vectors. */ - -static int ccall_classify_struct(CTState *cts, CType *ct, int *rcl, CTSize ofs); - -/* Classify a C type. */ -static void ccall_classify_ct(CTState *cts, CType *ct, int *rcl, CTSize ofs) -{ - if (ctype_isarray(ct->info)) { - CType *cct = ctype_rawchild(cts, ct); - CTSize eofs, esz = cct->size, asz = ct->size; - for (eofs = 0; eofs < asz; eofs += esz) - ccall_classify_ct(cts, cct, rcl, ofs+eofs); - } else if (ctype_isstruct(ct->info)) { - ccall_classify_struct(cts, ct, rcl, ofs); - } else { - int cl = ctype_isfp(ct->info) ? CCALL_RCL_SSE : CCALL_RCL_INT; - lua_assert(ctype_hassize(ct->info)); - if ((ofs & (ct->size-1))) cl = CCALL_RCL_MEM; /* Unaligned. */ - rcl[(ofs >= 8)] |= cl; - } -} - -/* Recursively classify a struct based on its fields. */ -static int ccall_classify_struct(CTState *cts, CType *ct, int *rcl, CTSize ofs) -{ - if (ct->size > 16) return CCALL_RCL_MEM; /* Too big, gets memory class. */ - while (ct->sib) { - CTSize fofs; - ct = ctype_get(cts, ct->sib); - fofs = ofs+ct->size; - if (ctype_isfield(ct->info)) - ccall_classify_ct(cts, ctype_rawchild(cts, ct), rcl, fofs); - else if (ctype_isbitfield(ct->info)) - rcl[(fofs >= 8)] |= CCALL_RCL_INT; /* NYI: unaligned bitfields? */ - else if (ctype_isxattrib(ct->info, CTA_SUBTYPE)) - ccall_classify_struct(cts, ctype_rawchild(cts, ct), rcl, fofs); - } - return ((rcl[0]|rcl[1]) & CCALL_RCL_MEM); /* Memory class? */ -} - -/* Try to split up a small struct into registers. */ -static int ccall_struct_reg(CCallState *cc, GPRArg *dp, int *rcl) -{ - MSize ngpr = cc->ngpr, nfpr = cc->nfpr; - uint32_t i; - for (i = 0; i < 2; i++) { - lua_assert(!(rcl[i] & CCALL_RCL_MEM)); - if ((rcl[i] & CCALL_RCL_INT)) { /* Integer class takes precedence. */ - if (ngpr >= CCALL_NARG_GPR) return 1; /* Register overflow. */ - cc->gpr[ngpr++] = dp[i]; - } else if ((rcl[i] & CCALL_RCL_SSE)) { - if (nfpr >= CCALL_NARG_FPR) return 1; /* Register overflow. */ - cc->fpr[nfpr++].l[0] = dp[i]; - } - } - cc->ngpr = ngpr; cc->nfpr = nfpr; - return 0; /* Ok. */ -} - -/* Pass a small struct argument. */ -static int ccall_struct_arg(CCallState *cc, CTState *cts, CType *d, int *rcl, - TValue *o, int narg) -{ - GPRArg dp[2]; - dp[0] = dp[1] = 0; - /* Convert to temp. struct. */ - lj_cconv_ct_tv(cts, d, (uint8_t *)dp, o, CCF_ARG(narg)); - if (ccall_struct_reg(cc, dp, rcl)) { /* Register overflow? Pass on stack. */ - MSize nsp = cc->nsp, n = rcl[1] ? 2 : 1; - if (nsp + n > CCALL_MAXSTACK) return 1; /* Too many arguments. */ - cc->nsp = nsp + n; - memcpy(&cc->stack[nsp], dp, n*CTSIZE_PTR); - } - return 0; /* Ok. */ -} - -/* Combine returned small struct. */ -static void ccall_struct_ret(CCallState *cc, int *rcl, uint8_t *dp, CTSize sz) -{ - GPRArg sp[2]; - MSize ngpr = 0, nfpr = 0; - uint32_t i; - for (i = 0; i < 2; i++) { - if ((rcl[i] & CCALL_RCL_INT)) { /* Integer class takes precedence. */ - sp[i] = cc->gpr[ngpr++]; - } else if ((rcl[i] & CCALL_RCL_SSE)) { - sp[i] = cc->fpr[nfpr++].l[0]; - } - } - memcpy(dp, sp, sz); -} -#endif - -/* -- ARM hard-float ABI struct classification ---------------------------- */ - -#if LJ_TARGET_ARM && !LJ_ABI_SOFTFP - -/* Classify a struct based on its fields. */ -static unsigned int ccall_classify_struct(CTState *cts, CType *ct, CType *ctf) -{ - CTSize sz = ct->size; - unsigned int r = 0, n = 0, isu = (ct->info & CTF_UNION); - if ((ctf->info & CTF_VARARG)) goto noth; - while (ct->sib) { - CType *sct; - ct = ctype_get(cts, ct->sib); - if (ctype_isfield(ct->info)) { - sct = ctype_rawchild(cts, ct); - if (ctype_isfp(sct->info)) { - r |= sct->size; - if (!isu) n++; else if (n == 0) n = 1; - } else if (ctype_iscomplex(sct->info)) { - r |= (sct->size >> 1); - if (!isu) n += 2; else if (n < 2) n = 2; - } else if (ctype_isstruct(sct->info)) { - goto substruct; - } else { - goto noth; - } - } else if (ctype_isbitfield(ct->info)) { - goto noth; - } else if (ctype_isxattrib(ct->info, CTA_SUBTYPE)) { - sct = ctype_rawchild(cts, ct); - substruct: - if (sct->size > 0) { - unsigned int s = ccall_classify_struct(cts, sct, ctf); - if (s <= 1) goto noth; - r |= (s & 255); - if (!isu) n += (s >> 8); else if (n < (s >>8)) n = (s >> 8); - } - } - } - if ((r == 4 || r == 8) && n <= 4) - return r + (n << 8); -noth: /* Not a homogeneous float/double aggregate. */ - return (sz <= 4); /* Return structs of size <= 4 in a GPR. */ -} - -#endif - -/* -- Common C call handling ---------------------------------------------- */ - -/* Infer the destination CTypeID for a vararg argument. */ -CTypeID lj_ccall_ctid_vararg(CTState *cts, cTValue *o) -{ - if (tvisnumber(o)) { - return CTID_DOUBLE; - } else if (tviscdata(o)) { - CTypeID id = cdataV(o)->ctypeid; - CType *s = ctype_get(cts, id); - if (ctype_isrefarray(s->info)) { - return lj_ctype_intern(cts, - CTINFO(CT_PTR, CTALIGN_PTR|ctype_cid(s->info)), CTSIZE_PTR); - } else if (ctype_isstruct(s->info) || ctype_isfunc(s->info)) { - /* NYI: how to pass a struct by value in a vararg argument? */ - return lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|id), CTSIZE_PTR); - } else if (ctype_isfp(s->info) && s->size == sizeof(float)) { - return CTID_DOUBLE; - } else { - return id; - } - } else if (tvisstr(o)) { - return CTID_P_CCHAR; - } else if (tvisbool(o)) { - return CTID_BOOL; - } else { - return CTID_P_VOID; - } -} - -/* Setup arguments for C call. */ -static int ccall_set_args(lua_State *L, CTState *cts, CType *ct, - CCallState *cc) -{ - int gcsteps = 0; - TValue *o, *top = L->top; - CTypeID fid; - CType *ctr; - MSize maxgpr, ngpr = 0, nsp = 0, narg; -#if CCALL_NARG_FPR - MSize nfpr = 0; -#if LJ_TARGET_ARM - MSize fprodd = 0; -#endif -#endif - - /* Clear unused regs to get some determinism in case of misdeclaration. */ - memset(cc->gpr, 0, sizeof(cc->gpr)); -#if CCALL_NUM_FPR - memset(cc->fpr, 0, sizeof(cc->fpr)); -#endif - -#if LJ_TARGET_X86 - /* x86 has several different calling conventions. */ - cc->resx87 = 0; - switch (ctype_cconv(ct->info)) { - case CTCC_FASTCALL: maxgpr = 2; break; - case CTCC_THISCALL: maxgpr = 1; break; - default: maxgpr = 0; break; - } -#else - maxgpr = CCALL_NARG_GPR; -#endif - - /* Perform required setup for some result types. */ - ctr = ctype_rawchild(cts, ct); - if (ctype_isvector(ctr->info)) { - if (!(CCALL_VECTOR_REG && (ctr->size == 8 || ctr->size == 16))) - goto err_nyi; - } else if (ctype_iscomplex(ctr->info) || ctype_isstruct(ctr->info)) { - /* Preallocate cdata object and anchor it after arguments. */ - CTSize sz = ctr->size; - GCcdata *cd = lj_cdata_new(cts, ctype_cid(ct->info), sz); - void *dp = cdataptr(cd); - setcdataV(L, L->top++, cd); - if (ctype_isstruct(ctr->info)) { - CCALL_HANDLE_STRUCTRET - } else { - CCALL_HANDLE_COMPLEXRET - } -#if LJ_TARGET_X86 - } else if (ctype_isfp(ctr->info)) { - cc->resx87 = ctr->size == sizeof(float) ? 1 : 2; -#endif - } - - /* Skip initial attributes. */ - fid = ct->sib; - while (fid) { - CType *ctf = ctype_get(cts, fid); - if (!ctype_isattrib(ctf->info)) break; - fid = ctf->sib; - } - - /* Walk through all passed arguments. */ - for (o = L->base+1, narg = 1; o < top; o++, narg++) { - CTypeID did; - CType *d; - CTSize sz; - MSize n, isfp = 0, isva = 0; - void *dp, *rp = NULL; - - if (fid) { /* Get argument type from field. */ - CType *ctf = ctype_get(cts, fid); - fid = ctf->sib; - lua_assert(ctype_isfield(ctf->info)); - did = ctype_cid(ctf->info); - } else { - if (!(ct->info & CTF_VARARG)) - lj_err_caller(L, LJ_ERR_FFI_NUMARG); /* Too many arguments. */ - did = lj_ccall_ctid_vararg(cts, o); /* Infer vararg type. */ - isva = 1; - } - d = ctype_raw(cts, did); - sz = d->size; - - /* Find out how (by value/ref) and where (GPR/FPR) to pass an argument. */ - if (ctype_isnum(d->info)) { - if (sz > 8) goto err_nyi; - if ((d->info & CTF_FP)) - isfp = 1; - } else if (ctype_isvector(d->info)) { - if (CCALL_VECTOR_REG && (sz == 8 || sz == 16)) - isfp = 1; - else - goto err_nyi; - } else if (ctype_isstruct(d->info)) { - CCALL_HANDLE_STRUCTARG - } else if (ctype_iscomplex(d->info)) { - CCALL_HANDLE_COMPLEXARG - } else { - sz = CTSIZE_PTR; - } - sz = (sz + CTSIZE_PTR-1) & ~(CTSIZE_PTR-1); - n = sz / CTSIZE_PTR; /* Number of GPRs or stack slots needed. */ - - CCALL_HANDLE_REGARG /* Handle register arguments. */ - - /* Otherwise pass argument on stack. */ - if (CCALL_ALIGN_STACKARG && !rp && (d->info & CTF_ALIGN) > CTALIGN_PTR) { - MSize align = (1u << ctype_align(d->info-CTALIGN_PTR)) -1; - nsp = (nsp + align) & ~align; /* Align argument on stack. */ - } - if (nsp + n > CCALL_MAXSTACK) { /* Too many arguments. */ - err_nyi: - lj_err_caller(L, LJ_ERR_FFI_NYICALL); - } - dp = &cc->stack[nsp]; - nsp += n; - isva = 0; - - done: - if (rp) { /* Pass by reference. */ - gcsteps++; - *(void **)dp = rp; - dp = rp; - } - lj_cconv_ct_tv(cts, d, (uint8_t *)dp, o, CCF_ARG(narg)); - /* Extend passed integers to 32 bits at least. */ - if (ctype_isinteger_or_bool(d->info) && d->size < 4) { - if (d->info & CTF_UNSIGNED) - *(uint32_t *)dp = d->size == 1 ? (uint32_t)*(uint8_t *)dp : - (uint32_t)*(uint16_t *)dp; - else - *(int32_t *)dp = d->size == 1 ? (int32_t)*(int8_t *)dp : - (int32_t)*(int16_t *)dp; - } -#if LJ_TARGET_X64 && LJ_ABI_WIN - if (isva) { /* Windows/x64 mirrors varargs in both register sets. */ - if (nfpr == ngpr) - cc->gpr[ngpr-1] = cc->fpr[ngpr-1].l[0]; - else - cc->fpr[ngpr-1].l[0] = cc->gpr[ngpr-1]; - } -#else - UNUSED(isva); -#endif -#if LJ_TARGET_X64 && !LJ_ABI_WIN - if (isfp == 2 && n == 2 && (uint8_t *)dp == (uint8_t *)&cc->fpr[nfpr-2]) { - cc->fpr[nfpr-1].d[0] = cc->fpr[nfpr-2].d[1]; /* Split complex double. */ - cc->fpr[nfpr-2].d[1] = 0; - } -#else - UNUSED(isfp); -#endif - } - if (fid) lj_err_caller(L, LJ_ERR_FFI_NUMARG); /* Too few arguments. */ - -#if LJ_TARGET_X64 || LJ_TARGET_PPC - cc->nfpr = nfpr; /* Required for vararg functions. */ -#endif - cc->nsp = nsp; - cc->spadj = (CCALL_SPS_FREE + CCALL_SPS_EXTRA)*CTSIZE_PTR; - if (nsp > CCALL_SPS_FREE) - cc->spadj += (((nsp-CCALL_SPS_FREE)*CTSIZE_PTR + 15u) & ~15u); - return gcsteps; -} - -/* Get results from C call. */ -static int ccall_get_results(lua_State *L, CTState *cts, CType *ct, - CCallState *cc, int *ret) -{ - CType *ctr = ctype_rawchild(cts, ct); - uint8_t *sp = (uint8_t *)&cc->gpr[0]; - if (ctype_isvoid(ctr->info)) { - *ret = 0; /* Zero results. */ - return 0; /* No additional GC step. */ - } - *ret = 1; /* One result. */ - if (ctype_isstruct(ctr->info)) { - /* Return cdata object which is already on top of stack. */ - if (!cc->retref) { - void *dp = cdataptr(cdataV(L->top-1)); /* Use preallocated object. */ - CCALL_HANDLE_STRUCTRET2 - } - return 1; /* One GC step. */ - } - if (ctype_iscomplex(ctr->info)) { - /* Return cdata object which is already on top of stack. */ - void *dp = cdataptr(cdataV(L->top-1)); /* Use preallocated object. */ - CCALL_HANDLE_COMPLEXRET2 - return 1; /* One GC step. */ - } - if (LJ_BE && ctype_isinteger_or_bool(ctr->info) && ctr->size < CTSIZE_PTR) - sp += (CTSIZE_PTR - ctr->size); -#if CCALL_NUM_FPR - if (ctype_isfp(ctr->info) || ctype_isvector(ctr->info)) - sp = (uint8_t *)&cc->fpr[0]; -#endif -#ifdef CCALL_HANDLE_RET - CCALL_HANDLE_RET -#endif - /* No reference types end up here, so there's no need for the CTypeID. */ - lua_assert(!(ctype_isrefarray(ctr->info) || ctype_isstruct(ctr->info))); - return lj_cconv_tv_ct(cts, ctr, 0, L->top-1, sp); -} - -/* Call C function. */ -int lj_ccall_func(lua_State *L, GCcdata *cd) -{ - CTState *cts = ctype_cts(L); - CType *ct = ctype_raw(cts, cd->ctypeid); - CTSize sz = CTSIZE_PTR; - if (ctype_isptr(ct->info)) { - sz = ct->size; - ct = ctype_rawchild(cts, ct); - } - if (ctype_isfunc(ct->info)) { - CCallState cc; - int gcsteps, ret; - cc.func = (void (*)(void))cdata_getptr(cdataptr(cd), sz); - gcsteps = ccall_set_args(L, cts, ct, &cc); - ct = (CType *)((intptr_t)ct-(intptr_t)cts->tab); - cts->cb.slot = ~0u; - lj_vm_ffi_call(&cc); - if (cts->cb.slot != ~0u) { /* Blacklist function that called a callback. */ - TValue tv; - setlightudV(&tv, (void *)cc.func); - setboolV(lj_tab_set(L, cts->miscmap, &tv), 1); - } - ct = (CType *)((intptr_t)ct+(intptr_t)cts->tab); /* May be reallocated. */ - gcsteps += ccall_get_results(L, cts, ct, &cc, &ret); -#if LJ_TARGET_X86 && LJ_ABI_WIN - /* Automatically detect __stdcall and fix up C function declaration. */ - if (cc.spadj && ctype_cconv(ct->info) == CTCC_CDECL) { - CTF_INSERT(ct->info, CCONV, CTCC_STDCALL); - lj_trace_abort(G(L)); - } -#endif - while (gcsteps-- > 0) - lj_gc_check(L); - return ret; - } - return -1; /* Not a function. */ -} - -#endif diff --git a/deps/luajit/src/lj_ccall.h b/deps/luajit/src/lj_ccall.h deleted file mode 100644 index f553010..0000000 --- a/deps/luajit/src/lj_ccall.h +++ /dev/null @@ -1,171 +0,0 @@ -/* -** FFI C call handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CCALL_H -#define _LJ_CCALL_H - -#include "lj_obj.h" -#include "lj_ctype.h" - -#if LJ_HASFFI - -/* -- C calling conventions ----------------------------------------------- */ - -#if LJ_TARGET_X86ORX64 - -#if LJ_TARGET_X86 -#define CCALL_NARG_GPR 2 /* For fastcall arguments. */ -#define CCALL_NARG_FPR 0 -#define CCALL_NRET_GPR 2 -#define CCALL_NRET_FPR 1 /* For FP results on x87 stack. */ -#define CCALL_ALIGN_STACKARG 0 /* Don't align argument on stack. */ -#elif LJ_ABI_WIN -#define CCALL_NARG_GPR 4 -#define CCALL_NARG_FPR 4 -#define CCALL_NRET_GPR 1 -#define CCALL_NRET_FPR 1 -#define CCALL_SPS_EXTRA 4 -#else -#define CCALL_NARG_GPR 6 -#define CCALL_NARG_FPR 8 -#define CCALL_NRET_GPR 2 -#define CCALL_NRET_FPR 2 -#define CCALL_VECTOR_REG 1 /* Pass vectors in registers. */ -#endif - -#define CCALL_SPS_FREE 1 -#define CCALL_ALIGN_CALLSTATE 16 - -typedef LJ_ALIGN(16) union FPRArg { - double d[2]; - float f[4]; - uint8_t b[16]; - uint16_t s[8]; - int i[4]; - int64_t l[2]; -} FPRArg; - -typedef intptr_t GPRArg; - -#elif LJ_TARGET_ARM - -#define CCALL_NARG_GPR 4 -#define CCALL_NRET_GPR 2 /* For softfp double. */ -#if LJ_ABI_SOFTFP -#define CCALL_NARG_FPR 0 -#define CCALL_NRET_FPR 0 -#else -#define CCALL_NARG_FPR 8 -#define CCALL_NRET_FPR 4 -#endif -#define CCALL_SPS_FREE 0 - -typedef intptr_t GPRArg; -typedef union FPRArg { - double d; - float f[2]; -} FPRArg; - -#elif LJ_TARGET_PPC - -#define CCALL_NARG_GPR 8 -#define CCALL_NARG_FPR 8 -#define CCALL_NRET_GPR 4 /* For complex double. */ -#define CCALL_NRET_FPR 1 -#define CCALL_SPS_EXTRA 4 -#define CCALL_SPS_FREE 0 - -typedef intptr_t GPRArg; -typedef double FPRArg; - -#elif LJ_TARGET_PPCSPE - -#define CCALL_NARG_GPR 8 -#define CCALL_NARG_FPR 0 -#define CCALL_NRET_GPR 4 /* For softfp complex double. */ -#define CCALL_NRET_FPR 0 -#define CCALL_SPS_FREE 0 /* NYI */ - -typedef intptr_t GPRArg; - -#elif LJ_TARGET_MIPS - -#define CCALL_NARG_GPR 4 -#define CCALL_NARG_FPR 2 -#define CCALL_NRET_GPR 2 -#define CCALL_NRET_FPR 2 -#define CCALL_SPS_EXTRA 7 -#define CCALL_SPS_FREE 1 - -typedef intptr_t GPRArg; -typedef union FPRArg { - double d; - struct { LJ_ENDIAN_LOHI(float f; , float g;) }; -} FPRArg; - -#else -#error "Missing calling convention definitions for this architecture" -#endif - -#ifndef CCALL_SPS_EXTRA -#define CCALL_SPS_EXTRA 0 -#endif -#ifndef CCALL_VECTOR_REG -#define CCALL_VECTOR_REG 0 -#endif -#ifndef CCALL_ALIGN_STACKARG -#define CCALL_ALIGN_STACKARG 1 -#endif -#ifndef CCALL_ALIGN_CALLSTATE -#define CCALL_ALIGN_CALLSTATE 8 -#endif - -#define CCALL_NUM_GPR \ - (CCALL_NARG_GPR > CCALL_NRET_GPR ? CCALL_NARG_GPR : CCALL_NRET_GPR) -#define CCALL_NUM_FPR \ - (CCALL_NARG_FPR > CCALL_NRET_FPR ? CCALL_NARG_FPR : CCALL_NRET_FPR) - -/* Check against constants in lj_ctype.h. */ -LJ_STATIC_ASSERT(CCALL_NUM_GPR <= CCALL_MAX_GPR); -LJ_STATIC_ASSERT(CCALL_NUM_FPR <= CCALL_MAX_FPR); - -#define CCALL_MAXSTACK 32 - -/* -- C call state -------------------------------------------------------- */ - -typedef LJ_ALIGN(CCALL_ALIGN_CALLSTATE) struct CCallState { - void (*func)(void); /* Pointer to called function. */ - uint32_t spadj; /* Stack pointer adjustment. */ - uint8_t nsp; /* Number of stack slots. */ - uint8_t retref; /* Return value by reference. */ -#if LJ_TARGET_X64 - uint8_t ngpr; /* Number of arguments in GPRs. */ - uint8_t nfpr; /* Number of arguments in FPRs. */ -#elif LJ_TARGET_X86 - uint8_t resx87; /* Result on x87 stack: 1:float, 2:double. */ -#elif LJ_TARGET_PPC - uint8_t nfpr; /* Number of arguments in FPRs. */ -#endif -#if LJ_32 - int32_t align1; -#endif -#if CCALL_NUM_FPR - FPRArg fpr[CCALL_NUM_FPR]; /* Arguments/results in FPRs. */ -#endif - GPRArg gpr[CCALL_NUM_GPR]; /* Arguments/results in GPRs. */ - GPRArg stack[CCALL_MAXSTACK]; /* Stack slots. */ -} CCallState; - -/* -- C call handling ----------------------------------------------------- */ - -/* Really belongs to lj_vm.h. */ -LJ_ASMF void LJ_FASTCALL lj_vm_ffi_call(CCallState *cc); - -LJ_FUNC CTypeID lj_ccall_ctid_vararg(CTState *cts, cTValue *o); -LJ_FUNC int lj_ccall_func(lua_State *L, GCcdata *cd); - -#endif - -#endif diff --git a/deps/luajit/src/lj_ccallback.c b/deps/luajit/src/lj_ccallback.c deleted file mode 100644 index b210641..0000000 --- a/deps/luajit/src/lj_ccallback.c +++ /dev/null @@ -1,644 +0,0 @@ -/* -** FFI C callback handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_tab.h" -#include "lj_state.h" -#include "lj_frame.h" -#include "lj_ctype.h" -#include "lj_cconv.h" -#include "lj_ccall.h" -#include "lj_ccallback.h" -#include "lj_target.h" -#include "lj_mcode.h" -#include "lj_trace.h" -#include "lj_vm.h" - -/* -- Target-specific handling of callback slots -------------------------- */ - -#define CALLBACK_MCODE_SIZE (LJ_PAGESIZE * LJ_NUM_CBPAGE) - -#if LJ_OS_NOJIT - -/* Disabled callback support. */ -#define CALLBACK_SLOT2OFS(slot) (0*(slot)) -#define CALLBACK_OFS2SLOT(ofs) (0*(ofs)) -#define CALLBACK_MAX_SLOT 0 - -#elif LJ_TARGET_X86ORX64 - -#define CALLBACK_MCODE_HEAD (LJ_64 ? 8 : 0) -#define CALLBACK_MCODE_GROUP (-2+1+2+5+(LJ_64 ? 6 : 5)) - -#define CALLBACK_SLOT2OFS(slot) \ - (CALLBACK_MCODE_HEAD + CALLBACK_MCODE_GROUP*((slot)/32) + 4*(slot)) - -static MSize CALLBACK_OFS2SLOT(MSize ofs) -{ - MSize group; - ofs -= CALLBACK_MCODE_HEAD; - group = ofs / (32*4 + CALLBACK_MCODE_GROUP); - return (ofs % (32*4 + CALLBACK_MCODE_GROUP))/4 + group*32; -} - -#define CALLBACK_MAX_SLOT \ - (((CALLBACK_MCODE_SIZE-CALLBACK_MCODE_HEAD)/(CALLBACK_MCODE_GROUP+4*32))*32) - -#elif LJ_TARGET_ARM - -#define CALLBACK_MCODE_HEAD 32 -#define CALLBACK_SLOT2OFS(slot) (CALLBACK_MCODE_HEAD + 8*(slot)) -#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8) -#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE)) - -#elif LJ_TARGET_PPC - -#define CALLBACK_MCODE_HEAD 24 -#define CALLBACK_SLOT2OFS(slot) (CALLBACK_MCODE_HEAD + 8*(slot)) -#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8) -#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE)) - -#elif LJ_TARGET_MIPS - -#define CALLBACK_MCODE_HEAD 24 -#define CALLBACK_SLOT2OFS(slot) (CALLBACK_MCODE_HEAD + 8*(slot)) -#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8) -#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE)) - -#else - -/* Missing support for this architecture. */ -#define CALLBACK_SLOT2OFS(slot) (0*(slot)) -#define CALLBACK_OFS2SLOT(ofs) (0*(ofs)) -#define CALLBACK_MAX_SLOT 0 - -#endif - -/* Convert callback slot number to callback function pointer. */ -static void *callback_slot2ptr(CTState *cts, MSize slot) -{ - return (uint8_t *)cts->cb.mcode + CALLBACK_SLOT2OFS(slot); -} - -/* Convert callback function pointer to slot number. */ -MSize lj_ccallback_ptr2slot(CTState *cts, void *p) -{ - uintptr_t ofs = (uintptr_t)((uint8_t *)p -(uint8_t *)cts->cb.mcode); - if (ofs < CALLBACK_MCODE_SIZE) { - MSize slot = CALLBACK_OFS2SLOT((MSize)ofs); - if (CALLBACK_SLOT2OFS(slot) == (MSize)ofs) - return slot; - } - return ~0u; /* Not a known callback function pointer. */ -} - -/* Initialize machine code for callback function pointers. */ -#if LJ_OS_NOJIT -/* Disabled callback support. */ -#define callback_mcode_init(g, p) UNUSED(p) -#elif LJ_TARGET_X86ORX64 -static void callback_mcode_init(global_State *g, uint8_t *page) -{ - uint8_t *p = page; - uint8_t *target = (uint8_t *)(void *)lj_vm_ffi_callback; - MSize slot; -#if LJ_64 - *(void **)p = target; p += 8; -#endif - for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) { - /* mov al, slot; jmp group */ - *p++ = XI_MOVrib | RID_EAX; *p++ = (uint8_t)slot; - if ((slot & 31) == 31 || slot == CALLBACK_MAX_SLOT-1) { - /* push ebp/rbp; mov ah, slot>>8; mov ebp, &g. */ - *p++ = XI_PUSH + RID_EBP; - *p++ = XI_MOVrib | (RID_EAX+4); *p++ = (uint8_t)(slot >> 8); - *p++ = XI_MOVri | RID_EBP; - *(int32_t *)p = i32ptr(g); p += 4; -#if LJ_64 - /* jmp [rip-pageofs] where lj_vm_ffi_callback is stored. */ - *p++ = XI_GROUP5; *p++ = XM_OFS0 + (XOg_JMP<<3) + RID_EBP; - *(int32_t *)p = (int32_t)(page-(p+4)); p += 4; -#else - /* jmp lj_vm_ffi_callback. */ - *p++ = XI_JMP; *(int32_t *)p = target-(p+4); p += 4; -#endif - } else { - *p++ = XI_JMPs; *p++ = (uint8_t)((2+2)*(31-(slot&31)) - 2); - } - } - lua_assert(p - page <= CALLBACK_MCODE_SIZE); -} -#elif LJ_TARGET_ARM -static void callback_mcode_init(global_State *g, uint32_t *page) -{ - uint32_t *p = page; - void *target = (void *)lj_vm_ffi_callback; - MSize slot; - /* This must match with the saveregs macro in buildvm_arm.dasc. */ - *p++ = ARMI_SUB|ARMF_D(RID_R12)|ARMF_N(RID_R12)|ARMF_M(RID_PC); - *p++ = ARMI_PUSH|ARMF_N(RID_SP)|RSET_RANGE(RID_R4,RID_R11+1)|RID2RSET(RID_LR); - *p++ = ARMI_SUB|ARMI_K12|ARMF_D(RID_R12)|ARMF_N(RID_R12)|CALLBACK_MCODE_HEAD; - *p++ = ARMI_STR|ARMI_LS_P|ARMI_LS_W|ARMF_D(RID_R12)|ARMF_N(RID_SP)|(CFRAME_SIZE-4*9); - *p++ = ARMI_LDR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_R12)|ARMF_N(RID_PC); - *p++ = ARMI_LDR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_PC)|ARMF_N(RID_PC); - *p++ = u32ptr(g); - *p++ = u32ptr(target); - for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) { - *p++ = ARMI_MOV|ARMF_D(RID_R12)|ARMF_M(RID_PC); - *p = ARMI_B | ((page-p-2) & 0x00ffffffu); - p++; - } - lua_assert(p - page <= CALLBACK_MCODE_SIZE); -} -#elif LJ_TARGET_PPC -static void callback_mcode_init(global_State *g, uint32_t *page) -{ - uint32_t *p = page; - void *target = (void *)lj_vm_ffi_callback; - MSize slot; - *p++ = PPCI_LIS | PPCF_T(RID_TMP) | (u32ptr(target) >> 16); - *p++ = PPCI_LIS | PPCF_T(RID_R12) | (u32ptr(g) >> 16); - *p++ = PPCI_ORI | PPCF_A(RID_TMP)|PPCF_T(RID_TMP) | (u32ptr(target) & 0xffff); - *p++ = PPCI_ORI | PPCF_A(RID_R12)|PPCF_T(RID_R12) | (u32ptr(g) & 0xffff); - *p++ = PPCI_MTCTR | PPCF_T(RID_TMP); - *p++ = PPCI_BCTR; - for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) { - *p++ = PPCI_LI | PPCF_T(RID_R11) | slot; - *p = PPCI_B | (((page-p) & 0x00ffffffu) << 2); - p++; - } - lua_assert(p - page <= CALLBACK_MCODE_SIZE); -} -#elif LJ_TARGET_MIPS -static void callback_mcode_init(global_State *g, uint32_t *page) -{ - uint32_t *p = page; - void *target = (void *)lj_vm_ffi_callback; - MSize slot; - *p++ = MIPSI_SW | MIPSF_T(RID_R1)|MIPSF_S(RID_SP) | 0; - *p++ = MIPSI_LUI | MIPSF_T(RID_R3) | (u32ptr(target) >> 16); - *p++ = MIPSI_LUI | MIPSF_T(RID_R2) | (u32ptr(g) >> 16); - *p++ = MIPSI_ORI | MIPSF_T(RID_R3)|MIPSF_S(RID_R3) |(u32ptr(target)&0xffff); - *p++ = MIPSI_JR | MIPSF_S(RID_R3); - *p++ = MIPSI_ORI | MIPSF_T(RID_R2)|MIPSF_S(RID_R2) | (u32ptr(g)&0xffff); - for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) { - *p = MIPSI_B | ((page-p-1) & 0x0000ffffu); - p++; - *p++ = MIPSI_LI | MIPSF_T(RID_R1) | slot; - } - lua_assert(p - page <= CALLBACK_MCODE_SIZE); -} -#else -/* Missing support for this architecture. */ -#define callback_mcode_init(g, p) UNUSED(p) -#endif - -/* -- Machine code management --------------------------------------------- */ - -#if LJ_TARGET_WINDOWS - -#define WIN32_LEAN_AND_MEAN -#include - -#elif LJ_TARGET_POSIX - -#include -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -#endif - -/* Allocate and initialize area for callback function pointers. */ -static void callback_mcode_new(CTState *cts) -{ - size_t sz = (size_t)CALLBACK_MCODE_SIZE; - void *p; - if (CALLBACK_MAX_SLOT == 0) - lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); -#if LJ_TARGET_WINDOWS - p = VirtualAlloc(NULL, sz, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); - if (!p) - lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); -#elif LJ_TARGET_POSIX - p = mmap(NULL, sz, (PROT_READ|PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS, - -1, 0); - if (p == MAP_FAILED) - lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); -#else - /* Fallback allocator. Fails if memory is not executable by default. */ - p = lj_mem_new(cts->L, sz); -#endif - cts->cb.mcode = p; - callback_mcode_init(cts->g, p); - lj_mcode_sync(p, (char *)p + sz); -#if LJ_TARGET_WINDOWS - { - DWORD oprot; - VirtualProtect(p, sz, PAGE_EXECUTE_READ, &oprot); - } -#elif LJ_TARGET_POSIX - mprotect(p, sz, (PROT_READ|PROT_EXEC)); -#endif -} - -/* Free area for callback function pointers. */ -void lj_ccallback_mcode_free(CTState *cts) -{ - size_t sz = (size_t)CALLBACK_MCODE_SIZE; - void *p = cts->cb.mcode; - if (p == NULL) return; -#if LJ_TARGET_WINDOWS - VirtualFree(p, 0, MEM_RELEASE); - UNUSED(sz); -#elif LJ_TARGET_POSIX - munmap(p, sz); -#else - lj_mem_free(cts->g, p, sz); -#endif -} - -/* -- C callback entry ---------------------------------------------------- */ - -/* Target-specific handling of register arguments. Similar to lj_ccall.c. */ -#if LJ_TARGET_X86 - -#define CALLBACK_HANDLE_REGARG \ - if (!isfp) { /* Only non-FP values may be passed in registers. */ \ - if (n > 1) { /* Anything > 32 bit is passed on the stack. */ \ - if (!LJ_ABI_WIN) ngpr = maxgpr; /* Prevent reordering. */ \ - } else if (ngpr + 1 <= maxgpr) { \ - sp = &cts->cb.gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#elif LJ_TARGET_X64 && LJ_ABI_WIN - -/* Windows/x64 argument registers are strictly positional (use ngpr). */ -#define CALLBACK_HANDLE_REGARG \ - if (isfp) { \ - if (ngpr < maxgpr) { sp = &cts->cb.fpr[ngpr++]; UNUSED(nfpr); goto done; } \ - } else { \ - if (ngpr < maxgpr) { sp = &cts->cb.gpr[ngpr++]; goto done; } \ - } - -#elif LJ_TARGET_X64 - -#define CALLBACK_HANDLE_REGARG \ - if (isfp) { \ - if (nfpr + n <= CCALL_NARG_FPR) { \ - sp = &cts->cb.fpr[nfpr]; \ - nfpr += n; \ - goto done; \ - } \ - } else { \ - if (ngpr + n <= maxgpr) { \ - sp = &cts->cb.gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#elif LJ_TARGET_ARM - -#if LJ_ABI_SOFTFP - -#define CALLBACK_HANDLE_REGARG_FP1 UNUSED(isfp); -#define CALLBACK_HANDLE_REGARG_FP2 - -#else - -#define CALLBACK_HANDLE_REGARG_FP1 \ - if (isfp) { \ - if (n == 1) { \ - if (fprodd) { \ - sp = &cts->cb.fpr[fprodd-1]; \ - fprodd = 0; \ - goto done; \ - } else if (nfpr + 1 <= CCALL_NARG_FPR) { \ - sp = &cts->cb.fpr[nfpr++]; \ - fprodd = nfpr; \ - goto done; \ - } \ - } else { \ - if (nfpr + 1 <= CCALL_NARG_FPR) { \ - sp = &cts->cb.fpr[nfpr++]; \ - goto done; \ - } \ - } \ - fprodd = 0; /* No reordering after the first FP value is on stack. */ \ - } else { - -#define CALLBACK_HANDLE_REGARG_FP2 } - -#endif - -#define CALLBACK_HANDLE_REGARG \ - CALLBACK_HANDLE_REGARG_FP1 \ - if (n > 1) ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ - if (ngpr + n <= maxgpr) { \ - sp = &cts->cb.gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } CALLBACK_HANDLE_REGARG_FP2 - -#elif LJ_TARGET_PPC - -#define CALLBACK_HANDLE_REGARG \ - if (isfp) { \ - if (nfpr + 1 <= CCALL_NARG_FPR) { \ - sp = &cts->cb.fpr[nfpr++]; \ - cta = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */ \ - goto done; \ - } \ - } else { /* Try to pass argument in GPRs. */ \ - if (n > 1) { \ - lua_assert(ctype_isinteger(cta->info) && n == 2); /* int64_t. */ \ - ngpr = (ngpr + 1u) & ~1u; /* Align int64_t to regpair. */ \ - } \ - if (ngpr + n <= maxgpr) { \ - sp = &cts->cb.gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#define CALLBACK_HANDLE_RET \ - if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ - *(double *)dp = *(float *)dp; /* FPRs always hold doubles. */ - -#elif LJ_TARGET_MIPS - -#define CALLBACK_HANDLE_REGARG \ - if (isfp && nfpr < CCALL_NARG_FPR) { /* Try to pass argument in FPRs. */ \ - sp = (void *)((uint8_t *)&cts->cb.fpr[nfpr] + ((LJ_BE && n==1) ? 4 : 0)); \ - nfpr++; ngpr += n; \ - goto done; \ - } else { /* Try to pass argument in GPRs. */ \ - nfpr = CCALL_NARG_FPR; \ - if (n > 1) ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \ - if (ngpr + n <= maxgpr) { \ - sp = &cts->cb.gpr[ngpr]; \ - ngpr += n; \ - goto done; \ - } \ - } - -#define CALLBACK_HANDLE_RET \ - if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ - ((float *)dp)[1] = *(float *)dp; - -#else -#error "Missing calling convention definitions for this architecture" -#endif - -/* Convert and push callback arguments to Lua stack. */ -static void callback_conv_args(CTState *cts, lua_State *L) -{ - TValue *o = L->top; - intptr_t *stack = cts->cb.stack; - MSize slot = cts->cb.slot; - CTypeID id = 0, rid, fid; - int gcsteps = 0; - CType *ct; - GCfunc *fn; - MSize ngpr = 0, nsp = 0, maxgpr = CCALL_NARG_GPR; -#if CCALL_NARG_FPR - MSize nfpr = 0; -#if LJ_TARGET_ARM - MSize fprodd = 0; -#endif -#endif - - if (slot < cts->cb.sizeid && (id = cts->cb.cbid[slot]) != 0) { - ct = ctype_get(cts, id); - rid = ctype_cid(ct->info); - fn = funcV(lj_tab_getint(cts->miscmap, (int32_t)slot)); - } else { /* Must set up frame first, before throwing the error. */ - ct = NULL; - rid = 0; - fn = (GCfunc *)L; - } - o->u32.lo = LJ_CONT_FFI_CALLBACK; /* Continuation returns from callback. */ - o->u32.hi = rid; /* Return type. x86: +(spadj<<16). */ - o++; - setframe_gc(o, obj2gco(fn)); - setframe_ftsz(o, (int)((char *)(o+1) - (char *)L->base) + FRAME_CONT); - L->top = L->base = ++o; - if (!ct) - lj_err_caller(cts->L, LJ_ERR_FFI_BADCBACK); - if (isluafunc(fn)) - setcframe_pc(L->cframe, proto_bc(funcproto(fn))+1); - lj_state_checkstack(L, LUA_MINSTACK); /* May throw. */ - o = L->base; /* Might have been reallocated. */ - -#if LJ_TARGET_X86 - /* x86 has several different calling conventions. */ - switch (ctype_cconv(ct->info)) { - case CTCC_FASTCALL: maxgpr = 2; break; - case CTCC_THISCALL: maxgpr = 1; break; - default: maxgpr = 0; break; - } -#endif - - fid = ct->sib; - while (fid) { - CType *ctf = ctype_get(cts, fid); - if (!ctype_isattrib(ctf->info)) { - CType *cta; - void *sp; - CTSize sz; - int isfp; - MSize n; - lua_assert(ctype_isfield(ctf->info)); - cta = ctype_rawchild(cts, ctf); - isfp = ctype_isfp(cta->info); - sz = (cta->size + CTSIZE_PTR-1) & ~(CTSIZE_PTR-1); - n = sz / CTSIZE_PTR; /* Number of GPRs or stack slots needed. */ - - CALLBACK_HANDLE_REGARG /* Handle register arguments. */ - - /* Otherwise pass argument on stack. */ - if (CCALL_ALIGN_STACKARG && LJ_32 && sz == 8) - nsp = (nsp + 1) & ~1u; /* Align 64 bit argument on stack. */ - sp = &stack[nsp]; - nsp += n; - - done: - if (LJ_BE && cta->size < CTSIZE_PTR) - sp = (void *)((uint8_t *)sp + CTSIZE_PTR-cta->size); - gcsteps += lj_cconv_tv_ct(cts, cta, 0, o++, sp); - } - fid = ctf->sib; - } - L->top = o; -#if LJ_TARGET_X86 - /* Store stack adjustment for returns from non-cdecl callbacks. */ - if (ctype_cconv(ct->info) != CTCC_CDECL) - (L->base-2)->u32.hi |= (nsp << (16+2)); -#endif - while (gcsteps-- > 0) - lj_gc_check(L); -} - -/* Convert Lua object to callback result. */ -static void callback_conv_result(CTState *cts, lua_State *L, TValue *o) -{ - CType *ctr = ctype_raw(cts, (uint16_t)(L->base-2)->u32.hi); -#if LJ_TARGET_X86 - cts->cb.gpr[2] = 0; -#endif - if (!ctype_isvoid(ctr->info)) { - uint8_t *dp = (uint8_t *)&cts->cb.gpr[0]; -#if CCALL_NUM_FPR - if (ctype_isfp(ctr->info)) - dp = (uint8_t *)&cts->cb.fpr[0]; -#endif - lj_cconv_ct_tv(cts, ctr, dp, o, 0); -#ifdef CALLBACK_HANDLE_RET - CALLBACK_HANDLE_RET -#endif - /* Extend returned integers to (at least) 32 bits. */ - if (ctype_isinteger_or_bool(ctr->info) && ctr->size < 4) { - if (ctr->info & CTF_UNSIGNED) - *(uint32_t *)dp = ctr->size == 1 ? (uint32_t)*(uint8_t *)dp : - (uint32_t)*(uint16_t *)dp; - else - *(int32_t *)dp = ctr->size == 1 ? (int32_t)*(int8_t *)dp : - (int32_t)*(int16_t *)dp; - } -#if LJ_TARGET_X86 - if (ctype_isfp(ctr->info)) - cts->cb.gpr[2] = ctr->size == sizeof(float) ? 1 : 2; -#endif - } -} - -/* Enter callback. */ -lua_State * LJ_FASTCALL lj_ccallback_enter(CTState *cts, void *cf) -{ - lua_State *L = cts->L; - global_State *g = cts->g; - lua_assert(L != NULL); - if (gcref(g->jit_L)) { - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_FFI_BADCBACK)); - if (g->panic) g->panic(L); - exit(EXIT_FAILURE); - } - lj_trace_abort(g); /* Never record across callback. */ - /* Setup C frame. */ - cframe_prev(cf) = L->cframe; - setcframe_L(cf, L); - cframe_errfunc(cf) = -1; - cframe_nres(cf) = 0; - L->cframe = cf; - callback_conv_args(cts, L); - return L; /* Now call the function on this stack. */ -} - -/* Leave callback. */ -void LJ_FASTCALL lj_ccallback_leave(CTState *cts, TValue *o) -{ - lua_State *L = cts->L; - GCfunc *fn; - TValue *obase = L->base; - L->base = L->top; /* Keep continuation frame for throwing errors. */ - if (o >= L->base) { - /* PC of RET* is lost. Point to last line for result conv. errors. */ - fn = curr_func(L); - if (isluafunc(fn)) { - GCproto *pt = funcproto(fn); - setcframe_pc(L->cframe, proto_bc(pt)+pt->sizebc+1); - } - } - callback_conv_result(cts, L, o); - /* Finally drop C frame and continuation frame. */ - L->cframe = cframe_prev(L->cframe); - L->top -= 2; - L->base = obase; - cts->cb.slot = 0; /* Blacklist C function that called the callback. */ -} - -/* -- C callback management ----------------------------------------------- */ - -/* Get an unused slot in the callback slot table. */ -static MSize callback_slot_new(CTState *cts, CType *ct) -{ - CTypeID id = ctype_typeid(cts, ct); - CTypeID1 *cbid = cts->cb.cbid; - MSize top; - for (top = cts->cb.topid; top < cts->cb.sizeid; top++) - if (LJ_LIKELY(cbid[top] == 0)) - goto found; -#if CALLBACK_MAX_SLOT - if (top >= CALLBACK_MAX_SLOT) -#endif - lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); - if (!cts->cb.mcode) - callback_mcode_new(cts); - lj_mem_growvec(cts->L, cbid, cts->cb.sizeid, CALLBACK_MAX_SLOT, CTypeID1); - cts->cb.cbid = cbid; - memset(cbid+top, 0, (cts->cb.sizeid-top)*sizeof(CTypeID1)); -found: - cbid[top] = id; - cts->cb.topid = top+1; - return top; -} - -/* Check for function pointer and supported argument/result types. */ -static CType *callback_checkfunc(CTState *cts, CType *ct) -{ - int narg = 0; - if (!ctype_isptr(ct->info) || (LJ_64 && ct->size != CTSIZE_PTR)) - return NULL; - ct = ctype_rawchild(cts, ct); - if (ctype_isfunc(ct->info)) { - CType *ctr = ctype_rawchild(cts, ct); - CTypeID fid = ct->sib; - if (!(ctype_isvoid(ctr->info) || ctype_isenum(ctr->info) || - ctype_isptr(ctr->info) || (ctype_isnum(ctr->info) && ctr->size <= 8))) - return NULL; - if ((ct->info & CTF_VARARG)) - return NULL; - while (fid) { - CType *ctf = ctype_get(cts, fid); - if (!ctype_isattrib(ctf->info)) { - CType *cta; - lua_assert(ctype_isfield(ctf->info)); - cta = ctype_rawchild(cts, ctf); - if (!(ctype_isenum(cta->info) || ctype_isptr(cta->info) || - (ctype_isnum(cta->info) && cta->size <= 8)) || - ++narg >= LUA_MINSTACK-3) - return NULL; - } - fid = ctf->sib; - } - return ct; - } - return NULL; -} - -/* Create a new callback and return the callback function pointer. */ -void *lj_ccallback_new(CTState *cts, CType *ct, GCfunc *fn) -{ - ct = callback_checkfunc(cts, ct); - if (ct) { - MSize slot = callback_slot_new(cts, ct); - GCtab *t = cts->miscmap; - setfuncV(cts->L, lj_tab_setint(cts->L, t, (int32_t)slot), fn); - lj_gc_anybarriert(cts->L, t); - return callback_slot2ptr(cts, slot); - } - return NULL; /* Bad conversion. */ -} - -#endif diff --git a/deps/luajit/src/lj_ccallback.h b/deps/luajit/src/lj_ccallback.h deleted file mode 100644 index 83dbe04..0000000 --- a/deps/luajit/src/lj_ccallback.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -** FFI C callback handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CCALLBACK_H -#define _LJ_CCALLBACK_H - -#include "lj_obj.h" -#include "lj_ctype.h" - -#if LJ_HASFFI - -/* Really belongs to lj_vm.h. */ -LJ_ASMF void lj_vm_ffi_callback(void); - -LJ_FUNC MSize lj_ccallback_ptr2slot(CTState *cts, void *p); -LJ_FUNCA lua_State * LJ_FASTCALL lj_ccallback_enter(CTState *cts, void *cf); -LJ_FUNCA void LJ_FASTCALL lj_ccallback_leave(CTState *cts, TValue *o); -LJ_FUNC void *lj_ccallback_new(CTState *cts, CType *ct, GCfunc *fn); -LJ_FUNC void lj_ccallback_mcode_free(CTState *cts); - -#endif - -#endif diff --git a/deps/luajit/src/lj_cconv.c b/deps/luajit/src/lj_cconv.c deleted file mode 100644 index 8a27076..0000000 --- a/deps/luajit/src/lj_cconv.c +++ /dev/null @@ -1,752 +0,0 @@ -/* -** C type conversions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_err.h" -#include "lj_tab.h" -#include "lj_ctype.h" -#include "lj_cdata.h" -#include "lj_cconv.h" -#include "lj_ccallback.h" - -/* -- Conversion errors --------------------------------------------------- */ - -/* Bad conversion. */ -LJ_NORET static void cconv_err_conv(CTState *cts, CType *d, CType *s, - CTInfo flags) -{ - const char *dst = strdata(lj_ctype_repr(cts->L, ctype_typeid(cts, d), NULL)); - const char *src; - if ((flags & CCF_FROMTV)) - src = lj_obj_typename[1+(ctype_isnum(s->info) ? LUA_TNUMBER : - ctype_isarray(s->info) ? LUA_TSTRING : LUA_TNIL)]; - else - src = strdata(lj_ctype_repr(cts->L, ctype_typeid(cts, s), NULL)); - if (CCF_GETARG(flags)) - lj_err_argv(cts->L, CCF_GETARG(flags), LJ_ERR_FFI_BADCONV, src, dst); - else - lj_err_callerv(cts->L, LJ_ERR_FFI_BADCONV, src, dst); -} - -/* Bad conversion from TValue. */ -LJ_NORET static void cconv_err_convtv(CTState *cts, CType *d, TValue *o, - CTInfo flags) -{ - const char *dst = strdata(lj_ctype_repr(cts->L, ctype_typeid(cts, d), NULL)); - const char *src = lj_typename(o); - if (CCF_GETARG(flags)) - lj_err_argv(cts->L, CCF_GETARG(flags), LJ_ERR_FFI_BADCONV, src, dst); - else - lj_err_callerv(cts->L, LJ_ERR_FFI_BADCONV, src, dst); -} - -/* Initializer overflow. */ -LJ_NORET static void cconv_err_initov(CTState *cts, CType *d) -{ - const char *dst = strdata(lj_ctype_repr(cts->L, ctype_typeid(cts, d), NULL)); - lj_err_callerv(cts->L, LJ_ERR_FFI_INITOV, dst); -} - -/* -- C type compatibility checks ----------------------------------------- */ - -/* Get raw type and qualifiers for a child type. Resolves enums, too. */ -static CType *cconv_childqual(CTState *cts, CType *ct, CTInfo *qual) -{ - ct = ctype_child(cts, ct); - for (;;) { - if (ctype_isattrib(ct->info)) { - if (ctype_attrib(ct->info) == CTA_QUAL) *qual |= ct->size; - } else if (!ctype_isenum(ct->info)) { - break; - } - ct = ctype_child(cts, ct); - } - *qual |= (ct->info & CTF_QUAL); - return ct; -} - -/* Check for compatible types when converting to a pointer. -** Note: these checks are more relaxed than what C99 mandates. -*/ -int lj_cconv_compatptr(CTState *cts, CType *d, CType *s, CTInfo flags) -{ - if (!((flags & CCF_CAST) || d == s)) { - CTInfo dqual = 0, squal = 0; - d = cconv_childqual(cts, d, &dqual); - if (!ctype_isstruct(s->info)) - s = cconv_childqual(cts, s, &squal); - if ((flags & CCF_SAME)) { - if (dqual != squal) - return 0; /* Different qualifiers. */ - } else if (!(flags & CCF_IGNQUAL)) { - if ((dqual & squal) != squal) - return 0; /* Discarded qualifiers. */ - if (ctype_isvoid(d->info) || ctype_isvoid(s->info)) - return 1; /* Converting to/from void * is always ok. */ - } - if (ctype_type(d->info) != ctype_type(s->info) || - d->size != s->size) - return 0; /* Different type or different size. */ - if (ctype_isnum(d->info)) { - if (((d->info ^ s->info) & (CTF_BOOL|CTF_FP))) - return 0; /* Different numeric types. */ - } else if (ctype_ispointer(d->info)) { - /* Check child types for compatibility. */ - return lj_cconv_compatptr(cts, d, s, flags|CCF_SAME); - } else if (ctype_isstruct(d->info)) { - if (d != s) - return 0; /* Must be exact same type for struct/union. */ - } else if (ctype_isfunc(d->info)) { - /* NYI: structural equality of functions. */ - } - } - return 1; /* Types are compatible. */ -} - -/* -- C type to C type conversion ----------------------------------------- */ - -/* Convert C type to C type. Caveat: expects to get the raw CType! -** -** Note: This is only used by the interpreter and not optimized at all. -** The JIT compiler will do a much better job specializing for each case. -*/ -void lj_cconv_ct_ct(CTState *cts, CType *d, CType *s, - uint8_t *dp, uint8_t *sp, CTInfo flags) -{ - CTSize dsize = d->size, ssize = s->size; - CTInfo dinfo = d->info, sinfo = s->info; - void *tmpptr; - - lua_assert(!ctype_isenum(dinfo) && !ctype_isenum(sinfo)); - lua_assert(!ctype_isattrib(dinfo) && !ctype_isattrib(sinfo)); - - if (ctype_type(dinfo) > CT_MAYCONVERT || ctype_type(sinfo) > CT_MAYCONVERT) - goto err_conv; - - /* Some basic sanity checks. */ - lua_assert(!ctype_isnum(dinfo) || dsize > 0); - lua_assert(!ctype_isnum(sinfo) || ssize > 0); - lua_assert(!ctype_isbool(dinfo) || dsize == 1 || dsize == 4); - lua_assert(!ctype_isbool(sinfo) || ssize == 1 || ssize == 4); - lua_assert(!ctype_isinteger(dinfo) || (1u< ssize) { /* Zero-extend or sign-extend LSB. */ -#if LJ_LE - uint8_t fill = (!(sinfo & CTF_UNSIGNED) && (sp[ssize-1]&0x80)) ? 0xff : 0; - memcpy(dp, sp, ssize); - memset(dp + ssize, fill, dsize-ssize); -#else - uint8_t fill = (!(sinfo & CTF_UNSIGNED) && (sp[0]&0x80)) ? 0xff : 0; - memset(dp, fill, dsize-ssize); - memcpy(dp + (dsize-ssize), sp, ssize); -#endif - } else { /* Copy LSB. */ -#if LJ_LE - memcpy(dp, sp, dsize); -#else - memcpy(dp, sp + (ssize-dsize), dsize); -#endif - } - break; - case CCX(I, F): { - double n; /* Always convert via double. */ - conv_I_F: - /* Convert source to double. */ - if (ssize == sizeof(double)) n = *(double *)sp; - else if (ssize == sizeof(float)) n = (double)*(float *)sp; - else goto err_conv; /* NYI: long double. */ - /* Then convert double to integer. */ - /* The conversion must exactly match the semantics of JIT-compiled code! */ - if (dsize < 4 || (dsize == 4 && !(dinfo & CTF_UNSIGNED))) { - int32_t i = (int32_t)n; - if (dsize == 4) *(int32_t *)dp = i; - else if (dsize == 2) *(int16_t *)dp = (int16_t)i; - else *(int8_t *)dp = (int8_t)i; - } else if (dsize == 4) { - *(uint32_t *)dp = (uint32_t)n; - } else if (dsize == 8) { - if (!(dinfo & CTF_UNSIGNED)) - *(int64_t *)dp = (int64_t)n; - else - *(uint64_t *)dp = lj_num2u64(n); - } else { - goto err_conv; /* NYI: conversion to >64 bit integers. */ - } - break; - } - case CCX(I, C): - s = ctype_child(cts, s); - sinfo = s->info; - ssize = s->size; - goto conv_I_F; /* Just convert re. */ - case CCX(I, P): - if (!(flags & CCF_CAST)) goto err_conv; - sinfo = CTINFO(CT_NUM, CTF_UNSIGNED); - goto conv_I_I; - case CCX(I, A): - if (!(flags & CCF_CAST)) goto err_conv; - sinfo = CTINFO(CT_NUM, CTF_UNSIGNED); - ssize = CTSIZE_PTR; - tmpptr = sp; - sp = (uint8_t *)&tmpptr; - goto conv_I_I; - - /* Destination is a floating-point number. */ - case CCX(F, B): - case CCX(F, I): { - double n; /* Always convert via double. */ - conv_F_I: - /* First convert source to double. */ - /* The conversion must exactly match the semantics of JIT-compiled code! */ - if (ssize < 4 || (ssize == 4 && !(sinfo & CTF_UNSIGNED))) { - int32_t i; - if (ssize == 4) { - i = *(int32_t *)sp; - } else if (!(sinfo & CTF_UNSIGNED)) { - if (ssize == 2) i = *(int16_t *)sp; - else i = *(int8_t *)sp; - } else { - if (ssize == 2) i = *(uint16_t *)sp; - else i = *(uint8_t *)sp; - } - n = (double)i; - } else if (ssize == 4) { - n = (double)*(uint32_t *)sp; - } else if (ssize == 8) { - if (!(sinfo & CTF_UNSIGNED)) n = (double)*(int64_t *)sp; - else n = (double)*(uint64_t *)sp; - } else { - goto err_conv; /* NYI: conversion from >64 bit integers. */ - } - /* Convert double to destination. */ - if (dsize == sizeof(double)) *(double *)dp = n; - else if (dsize == sizeof(float)) *(float *)dp = (float)n; - else goto err_conv; /* NYI: long double. */ - break; - } - case CCX(F, F): { - double n; /* Always convert via double. */ - conv_F_F: - if (ssize == dsize) goto copyval; - /* Convert source to double. */ - if (ssize == sizeof(double)) n = *(double *)sp; - else if (ssize == sizeof(float)) n = (double)*(float *)sp; - else goto err_conv; /* NYI: long double. */ - /* Convert double to destination. */ - if (dsize == sizeof(double)) *(double *)dp = n; - else if (dsize == sizeof(float)) *(float *)dp = (float)n; - else goto err_conv; /* NYI: long double. */ - break; - } - case CCX(F, C): - s = ctype_child(cts, s); - sinfo = s->info; - ssize = s->size; - goto conv_F_F; /* Ignore im, and convert from re. */ - - /* Destination is a complex number. */ - case CCX(C, I): - d = ctype_child(cts, d); - dinfo = d->info; - dsize = d->size; - memset(dp + dsize, 0, dsize); /* Clear im. */ - goto conv_F_I; /* Convert to re. */ - case CCX(C, F): - d = ctype_child(cts, d); - dinfo = d->info; - dsize = d->size; - memset(dp + dsize, 0, dsize); /* Clear im. */ - goto conv_F_F; /* Convert to re. */ - - case CCX(C, C): - if (dsize != ssize) { /* Different types: convert re/im separately. */ - CType *dc = ctype_child(cts, d); - CType *sc = ctype_child(cts, s); - lj_cconv_ct_ct(cts, dc, sc, dp, sp, flags); - lj_cconv_ct_ct(cts, dc, sc, dp + dc->size, sp + sc->size, flags); - return; - } - goto copyval; /* Otherwise this is easy. */ - - /* Destination is a vector. */ - case CCX(V, I): - case CCX(V, F): - case CCX(V, C): { - CType *dc = ctype_child(cts, d); - CTSize esize; - /* First convert the scalar to the first element. */ - lj_cconv_ct_ct(cts, dc, s, dp, sp, flags); - /* Then replicate it to the other elements (splat). */ - for (sp = dp, esize = dc->size; dsize > esize; dsize -= esize) { - dp += esize; - memcpy(dp, sp, esize); - } - break; - } - - case CCX(V, V): - /* Copy same-sized vectors, even for different lengths/element-types. */ - if (dsize != ssize) goto err_conv; - goto copyval; - - /* Destination is a pointer. */ - case CCX(P, I): - if (!(flags & CCF_CAST)) goto err_conv; - dinfo = CTINFO(CT_NUM, CTF_UNSIGNED); - goto conv_I_I; - - case CCX(P, F): - if (!(flags & CCF_CAST) || !(flags & CCF_FROMTV)) goto err_conv; - /* The signed conversion is cheaper. x64 really has 47 bit pointers. */ - dinfo = CTINFO(CT_NUM, (LJ_64 && dsize == 8) ? 0 : CTF_UNSIGNED); - goto conv_I_F; - - case CCX(P, P): - if (!lj_cconv_compatptr(cts, d, s, flags)) goto err_conv; - cdata_setptr(dp, dsize, cdata_getptr(sp, ssize)); - break; - - case CCX(P, A): - case CCX(P, S): - if (!lj_cconv_compatptr(cts, d, s, flags)) goto err_conv; - cdata_setptr(dp, dsize, sp); - break; - - /* Destination is an array. */ - case CCX(A, A): - if ((flags & CCF_CAST) || (d->info & CTF_VLA) || dsize != ssize || - d->size == CTSIZE_INVALID || !lj_cconv_compatptr(cts, d, s, flags)) - goto err_conv; - goto copyval; - - /* Destination is a struct/union. */ - case CCX(S, S): - if ((flags & CCF_CAST) || (d->info & CTF_VLA) || d != s) - goto err_conv; /* Must be exact same type. */ -copyval: /* Copy value. */ - lua_assert(dsize == ssize); - memcpy(dp, sp, dsize); - break; - - default: - err_conv: - cconv_err_conv(cts, d, s, flags); - } -} - -/* -- C type to TValue conversion ----------------------------------------- */ - -/* Convert C type to TValue. Caveat: expects to get the raw CType! */ -int lj_cconv_tv_ct(CTState *cts, CType *s, CTypeID sid, - TValue *o, uint8_t *sp) -{ - CTInfo sinfo = s->info; - if (ctype_isnum(sinfo)) { - if (!ctype_isbool(sinfo)) { - if (ctype_isinteger(sinfo) && s->size > 4) goto copyval; - if (LJ_DUALNUM && ctype_isinteger(sinfo)) { - int32_t i; - lj_cconv_ct_ct(cts, ctype_get(cts, CTID_INT32), s, - (uint8_t *)&i, sp, 0); - if ((sinfo & CTF_UNSIGNED) && i < 0) - setnumV(o, (lua_Number)(uint32_t)i); - else - setintV(o, i); - } else { - lj_cconv_ct_ct(cts, ctype_get(cts, CTID_DOUBLE), s, - (uint8_t *)&o->n, sp, 0); - /* Numbers are NOT canonicalized here! Beware of uninitialized data. */ - lua_assert(tvisnum(o)); - } - } else { - uint32_t b = s->size == 1 ? (*sp != 0) : (*(int *)sp != 0); - setboolV(o, b); - setboolV(&cts->g->tmptv2, b); /* Remember for trace recorder. */ - } - return 0; - } else if (ctype_isrefarray(sinfo) || ctype_isstruct(sinfo)) { - /* Create reference. */ - setcdataV(cts->L, o, lj_cdata_newref(cts, sp, sid)); - return 1; /* Need GC step. */ - } else { - GCcdata *cd; - CTSize sz; - copyval: /* Copy value. */ - sz = s->size; - lua_assert(sz != CTSIZE_INVALID); - /* Attributes are stripped, qualifiers are kept (but mostly ignored). */ - cd = lj_cdata_new(cts, ctype_typeid(cts, s), sz); - setcdataV(cts->L, o, cd); - memcpy(cdataptr(cd), sp, sz); - return 1; /* Need GC step. */ - } -} - -/* Convert bitfield to TValue. */ -int lj_cconv_tv_bf(CTState *cts, CType *s, TValue *o, uint8_t *sp) -{ - CTInfo info = s->info; - CTSize pos, bsz; - uint32_t val; - lua_assert(ctype_isbitfield(info)); - /* NYI: packed bitfields may cause misaligned reads. */ - switch (ctype_bitcsz(info)) { - case 4: val = *(uint32_t *)sp; break; - case 2: val = *(uint16_t *)sp; break; - case 1: val = *(uint8_t *)sp; break; - default: lua_assert(0); val = 0; break; - } - /* Check if a packed bitfield crosses a container boundary. */ - pos = ctype_bitpos(info); - bsz = ctype_bitbsz(info); - lua_assert(pos < 8*ctype_bitcsz(info)); - lua_assert(bsz > 0 && bsz <= 8*ctype_bitcsz(info)); - if (pos + bsz > 8*ctype_bitcsz(info)) - lj_err_caller(cts->L, LJ_ERR_FFI_NYIPACKBIT); - if (!(info & CTF_BOOL)) { - CTSize shift = 32 - bsz; - if (!(info & CTF_UNSIGNED)) { - setintV(o, (int32_t)(val << (shift-pos)) >> shift); - } else { - val = (val << (shift-pos)) >> shift; - if (!LJ_DUALNUM || (int32_t)val < 0) - setnumV(o, (lua_Number)(uint32_t)val); - else - setintV(o, (int32_t)val); - } - } else { - lua_assert(bsz == 1); - setboolV(o, (val >> pos) & 1); - } - return 0; /* No GC step needed. */ -} - -/* -- TValue to C type conversion ----------------------------------------- */ - -/* Convert table to array. */ -static void cconv_array_tab(CTState *cts, CType *d, - uint8_t *dp, GCtab *t, CTInfo flags) -{ - int32_t i; - CType *dc = ctype_rawchild(cts, d); /* Array element type. */ - CTSize size = d->size, esize = dc->size, ofs = 0; - for (i = 0; ; i++) { - TValue *tv = (TValue *)lj_tab_getint(t, i); - if (!tv || tvisnil(tv)) { - if (i == 0) continue; /* Try again for 1-based tables. */ - break; /* Stop at first nil. */ - } - if (ofs >= size) - cconv_err_initov(cts, d); - lj_cconv_ct_tv(cts, dc, dp + ofs, tv, flags); - ofs += esize; - } - if (size != CTSIZE_INVALID) { /* Only fill up arrays with known size. */ - if (ofs == esize) { /* Replicate a single element. */ - for (; ofs < size; ofs += esize) memcpy(dp + ofs, dp, esize); - } else { /* Otherwise fill the remainder with zero. */ - memset(dp + ofs, 0, size - ofs); - } - } -} - -/* Convert table to sub-struct/union. */ -static void cconv_substruct_tab(CTState *cts, CType *d, uint8_t *dp, - GCtab *t, int32_t *ip, CTInfo flags) -{ - CTypeID id = d->sib; - while (id) { - CType *df = ctype_get(cts, id); - id = df->sib; - if (ctype_isfield(df->info) || ctype_isbitfield(df->info)) { - TValue *tv; - int32_t i = *ip, iz = i; - if (!gcref(df->name)) continue; /* Ignore unnamed fields. */ - if (i >= 0) { - retry: - tv = (TValue *)lj_tab_getint(t, i); - if (!tv || tvisnil(tv)) { - if (i == 0) { i = 1; goto retry; } /* 1-based tables. */ - if (iz == 0) { *ip = i = -1; goto tryname; } /* Init named fields. */ - break; /* Stop at first nil. */ - } - *ip = i + 1; - } else { - tryname: - tv = (TValue *)lj_tab_getstr(t, gco2str(gcref(df->name))); - if (!tv || tvisnil(tv)) continue; - } - if (ctype_isfield(df->info)) - lj_cconv_ct_tv(cts, ctype_rawchild(cts, df), dp+df->size, tv, flags); - else - lj_cconv_bf_tv(cts, df, dp+df->size, tv); - if ((d->info & CTF_UNION)) break; - } else if (ctype_isxattrib(df->info, CTA_SUBTYPE)) { - cconv_substruct_tab(cts, ctype_rawchild(cts, df), - dp+df->size, t, ip, flags); - } /* Ignore all other entries in the chain. */ - } -} - -/* Convert table to struct/union. */ -static void cconv_struct_tab(CTState *cts, CType *d, - uint8_t *dp, GCtab *t, CTInfo flags) -{ - int32_t i = 0; - memset(dp, 0, d->size); /* Much simpler to clear the struct first. */ - cconv_substruct_tab(cts, d, dp, t, &i, flags); -} - -/* Convert TValue to C type. Caveat: expects to get the raw CType! */ -void lj_cconv_ct_tv(CTState *cts, CType *d, - uint8_t *dp, TValue *o, CTInfo flags) -{ - CTypeID sid = CTID_P_VOID; - CType *s; - void *tmpptr; - uint8_t tmpbool, *sp = (uint8_t *)&tmpptr; - if (LJ_LIKELY(tvisint(o))) { - sp = (uint8_t *)&o->i; - sid = CTID_INT32; - flags |= CCF_FROMTV; - } else if (LJ_LIKELY(tvisnum(o))) { - sp = (uint8_t *)&o->n; - sid = CTID_DOUBLE; - flags |= CCF_FROMTV; - } else if (tviscdata(o)) { - sp = cdataptr(cdataV(o)); - sid = cdataV(o)->ctypeid; - s = ctype_get(cts, sid); - if (ctype_isref(s->info)) { /* Resolve reference for value. */ - lua_assert(s->size == CTSIZE_PTR); - sp = *(void **)sp; - sid = ctype_cid(s->info); - } - s = ctype_raw(cts, sid); - if (ctype_isfunc(s->info)) { - sid = lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|sid), CTSIZE_PTR); - } else { - if (ctype_isenum(s->info)) s = ctype_child(cts, s); - goto doconv; - } - } else if (tvisstr(o)) { - GCstr *str = strV(o); - if (ctype_isenum(d->info)) { /* Match string against enum constant. */ - CTSize ofs; - CType *cct = lj_ctype_getfield(cts, d, str, &ofs); - if (!cct || !ctype_isconstval(cct->info)) - goto err_conv; - lua_assert(d->size == 4); - sp = (uint8_t *)&cct->size; - sid = ctype_cid(cct->info); - } else if (ctype_isrefarray(d->info)) { /* Copy string to array. */ - CType *dc = ctype_rawchild(cts, d); - CTSize sz = str->len+1; - if (!ctype_isinteger(dc->info) || dc->size != 1) - goto err_conv; - if (d->size != 0 && d->size < sz) - sz = d->size; - memcpy(dp, strdata(str), sz); - return; - } else { /* Otherwise pass it as a const char[]. */ - sp = (uint8_t *)strdata(str); - sid = CTID_A_CCHAR; - flags |= CCF_FROMTV; - } - } else if (tvistab(o)) { - if (ctype_isarray(d->info)) { - cconv_array_tab(cts, d, dp, tabV(o), flags); - return; - } else if (ctype_isstruct(d->info)) { - cconv_struct_tab(cts, d, dp, tabV(o), flags); - return; - } else { - goto err_conv; - } - } else if (tvisbool(o)) { - tmpbool = boolV(o); - sp = &tmpbool; - sid = CTID_BOOL; - } else if (tvisnil(o)) { - tmpptr = (void *)0; - flags |= CCF_FROMTV; - } else if (tvisudata(o)) { - GCudata *ud = udataV(o); - tmpptr = uddata(ud); - if (ud->udtype == UDTYPE_IO_FILE) - tmpptr = *(void **)tmpptr; - } else if (tvislightud(o)) { - tmpptr = lightudV(o); - } else if (tvisfunc(o)) { - void *p = lj_ccallback_new(cts, d, funcV(o)); - if (p) { - *(void **)dp = p; - return; - } - goto err_conv; - } else { - err_conv: - cconv_err_convtv(cts, d, o, flags); - } - s = ctype_get(cts, sid); -doconv: - if (ctype_isenum(d->info)) d = ctype_child(cts, d); - lj_cconv_ct_ct(cts, d, s, dp, sp, flags); -} - -/* Convert TValue to bitfield. */ -void lj_cconv_bf_tv(CTState *cts, CType *d, uint8_t *dp, TValue *o) -{ - CTInfo info = d->info; - CTSize pos, bsz; - uint32_t val, mask; - lua_assert(ctype_isbitfield(info)); - if ((info & CTF_BOOL)) { - uint8_t tmpbool; - lua_assert(ctype_bitbsz(info) == 1); - lj_cconv_ct_tv(cts, ctype_get(cts, CTID_BOOL), &tmpbool, o, 0); - val = tmpbool; - } else { - CTypeID did = (info & CTF_UNSIGNED) ? CTID_UINT32 : CTID_INT32; - lj_cconv_ct_tv(cts, ctype_get(cts, did), (uint8_t *)&val, o, 0); - } - pos = ctype_bitpos(info); - bsz = ctype_bitbsz(info); - lua_assert(pos < 8*ctype_bitcsz(info)); - lua_assert(bsz > 0 && bsz <= 8*ctype_bitcsz(info)); - /* Check if a packed bitfield crosses a container boundary. */ - if (pos + bsz > 8*ctype_bitcsz(info)) - lj_err_caller(cts->L, LJ_ERR_FFI_NYIPACKBIT); - mask = ((1u << bsz) - 1u) << pos; - val = (val << pos) & mask; - /* NYI: packed bitfields may cause misaligned reads/writes. */ - switch (ctype_bitcsz(info)) { - case 4: *(uint32_t *)dp = (*(uint32_t *)dp & ~mask) | (uint32_t)val; break; - case 2: *(uint16_t *)dp = (*(uint16_t *)dp & ~mask) | (uint16_t)val; break; - case 1: *(uint8_t *)dp = (*(uint8_t *)dp & ~mask) | (uint8_t)val; break; - default: lua_assert(0); break; - } -} - -/* -- Initialize C type with TValues -------------------------------------- */ - -/* Initialize an array with TValues. */ -static void cconv_array_init(CTState *cts, CType *d, CTSize sz, uint8_t *dp, - TValue *o, MSize len) -{ - CType *dc = ctype_rawchild(cts, d); /* Array element type. */ - CTSize ofs, esize = dc->size; - MSize i; - if (len*esize > sz) - cconv_err_initov(cts, d); - for (i = 0, ofs = 0; i < len; i++, ofs += esize) - lj_cconv_ct_tv(cts, dc, dp + ofs, o + i, 0); - if (ofs == esize) { /* Replicate a single element. */ - for (; ofs < sz; ofs += esize) memcpy(dp + ofs, dp, esize); - } else { /* Otherwise fill the remainder with zero. */ - memset(dp + ofs, 0, sz - ofs); - } -} - -/* Initialize a sub-struct/union with TValues. */ -static void cconv_substruct_init(CTState *cts, CType *d, uint8_t *dp, - TValue *o, MSize len, MSize *ip) -{ - CTypeID id = d->sib; - while (id) { - CType *df = ctype_get(cts, id); - id = df->sib; - if (ctype_isfield(df->info) || ctype_isbitfield(df->info)) { - MSize i = *ip; - if (!gcref(df->name)) continue; /* Ignore unnamed fields. */ - if (i >= len) break; - *ip = i + 1; - if (ctype_isfield(df->info)) - lj_cconv_ct_tv(cts, ctype_rawchild(cts, df), dp+df->size, o + i, 0); - else - lj_cconv_bf_tv(cts, df, dp+df->size, o + i); - if ((d->info & CTF_UNION)) break; - } else if (ctype_isxattrib(df->info, CTA_SUBTYPE)) { - cconv_substruct_init(cts, ctype_rawchild(cts, df), - dp+df->size, o, len, ip); - if ((d->info & CTF_UNION)) break; - } /* Ignore all other entries in the chain. */ - } -} - -/* Initialize a struct/union with TValues. */ -static void cconv_struct_init(CTState *cts, CType *d, CTSize sz, uint8_t *dp, - TValue *o, MSize len) -{ - MSize i = 0; - memset(dp, 0, sz); /* Much simpler to clear the struct first. */ - cconv_substruct_init(cts, d, dp, o, len, &i); - if (i < len) - cconv_err_initov(cts, d); -} - -/* Check whether to use a multi-value initializer. -** This is true if an aggregate is to be initialized with a value. -** Valarrays are treated as values here so ct_tv handles (V|C, I|F). -*/ -int lj_cconv_multi_init(CTState *cts, CType *d, TValue *o) -{ - if (!(ctype_isrefarray(d->info) || ctype_isstruct(d->info))) - return 0; /* Destination is not an aggregate. */ - if (tvistab(o) || (tvisstr(o) && !ctype_isstruct(d->info))) - return 0; /* Initializer is not a value. */ - if (tviscdata(o) && lj_ctype_rawref(cts, cdataV(o)->ctypeid) == d) - return 0; /* Source and destination are identical aggregates. */ - return 1; /* Otherwise the initializer is a value. */ -} - -/* Initialize C type with TValues. Caveat: expects to get the raw CType! */ -void lj_cconv_ct_init(CTState *cts, CType *d, CTSize sz, - uint8_t *dp, TValue *o, MSize len) -{ - if (len == 0) - memset(dp, 0, sz); - else if (len == 1 && !lj_cconv_multi_init(cts, d, o)) - lj_cconv_ct_tv(cts, d, dp, o, 0); - else if (ctype_isarray(d->info)) /* Also handles valarray init with len>1. */ - cconv_array_init(cts, d, sz, dp, o, len); - else if (ctype_isstruct(d->info)) - cconv_struct_init(cts, d, sz, dp, o, len); - else - cconv_err_initov(cts, d); -} - -#endif diff --git a/deps/luajit/src/lj_cconv.h b/deps/luajit/src/lj_cconv.h deleted file mode 100644 index 2bd50ff..0000000 --- a/deps/luajit/src/lj_cconv.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -** C type conversions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CCONV_H -#define _LJ_CCONV_H - -#include "lj_obj.h" -#include "lj_ctype.h" - -#if LJ_HASFFI - -/* Compressed C type index. ORDER CCX. */ -enum { - CCX_B, /* Bool. */ - CCX_I, /* Integer. */ - CCX_F, /* Floating-point number. */ - CCX_C, /* Complex. */ - CCX_V, /* Vector. */ - CCX_P, /* Pointer. */ - CCX_A, /* Refarray. */ - CCX_S /* Struct/union. */ -}; - -/* Convert C type info to compressed C type index. ORDER CT. ORDER CCX. */ -static LJ_AINLINE uint32_t cconv_idx(CTInfo info) -{ - uint32_t idx = ((info >> 26) & 15u); /* Dispatch bits. */ - lua_assert(ctype_type(info) <= CT_MAYCONVERT); -#if LJ_64 - idx = ((uint32_t)(U64x(f436fff5,fff7f021) >> 4*idx) & 15u); -#else - idx = (((idx < 8 ? 0xfff7f021u : 0xf436fff5) >> 4*(idx & 7u)) & 15u); -#endif - lua_assert(idx < 8); - return idx; -} - -#define cconv_idx2(dinfo, sinfo) \ - ((cconv_idx((dinfo)) << 3) + cconv_idx((sinfo))) - -#define CCX(dst, src) ((CCX_##dst << 3) + CCX_##src) - -/* Conversion flags. */ -#define CCF_CAST 0x00000001u -#define CCF_FROMTV 0x00000002u -#define CCF_SAME 0x00000004u -#define CCF_IGNQUAL 0x00000008u - -#define CCF_ARG_SHIFT 8 -#define CCF_ARG(n) ((n) << CCF_ARG_SHIFT) -#define CCF_GETARG(f) ((f) >> CCF_ARG_SHIFT) - -LJ_FUNC int lj_cconv_compatptr(CTState *cts, CType *d, CType *s, CTInfo flags); -LJ_FUNC void lj_cconv_ct_ct(CTState *cts, CType *d, CType *s, - uint8_t *dp, uint8_t *sp, CTInfo flags); -LJ_FUNC int lj_cconv_tv_ct(CTState *cts, CType *s, CTypeID sid, - TValue *o, uint8_t *sp); -LJ_FUNC int lj_cconv_tv_bf(CTState *cts, CType *s, TValue *o, uint8_t *sp); -LJ_FUNC void lj_cconv_ct_tv(CTState *cts, CType *d, - uint8_t *dp, TValue *o, CTInfo flags); -LJ_FUNC void lj_cconv_bf_tv(CTState *cts, CType *d, uint8_t *dp, TValue *o); -LJ_FUNC int lj_cconv_multi_init(CTState *cts, CType *d, TValue *o); -LJ_FUNC void lj_cconv_ct_init(CTState *cts, CType *d, CTSize sz, - uint8_t *dp, TValue *o, MSize len); - -#endif - -#endif diff --git a/deps/luajit/src/lj_cdata.c b/deps/luajit/src/lj_cdata.c deleted file mode 100644 index 39fc13a..0000000 --- a/deps/luajit/src/lj_cdata.c +++ /dev/null @@ -1,285 +0,0 @@ -/* -** C data management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_ctype.h" -#include "lj_cconv.h" -#include "lj_cdata.h" - -/* -- C data allocation --------------------------------------------------- */ - -/* Allocate a new C data object holding a reference to another object. */ -GCcdata *lj_cdata_newref(CTState *cts, const void *p, CTypeID id) -{ - CTypeID refid = lj_ctype_intern(cts, CTINFO_REF(id), CTSIZE_PTR); - GCcdata *cd = lj_cdata_new(cts, refid, CTSIZE_PTR); - *(const void **)cdataptr(cd) = p; - return cd; -} - -/* Allocate variable-sized or specially aligned C data object. */ -GCcdata *lj_cdata_newv(CTState *cts, CTypeID id, CTSize sz, CTSize align) -{ - global_State *g; - MSize extra = sizeof(GCcdataVar) + sizeof(GCcdata) + - (align > CT_MEMALIGN ? (1u<L, extra + sz, char); - uintptr_t adata = (uintptr_t)p + sizeof(GCcdataVar) + sizeof(GCcdata); - uintptr_t almask = (1u << align) - 1u; - GCcdata *cd = (GCcdata *)(((adata + almask) & ~almask) - sizeof(GCcdata)); - lua_assert((char *)cd - p < 65536); - cdatav(cd)->offset = (uint16_t)((char *)cd - p); - cdatav(cd)->extra = extra; - cdatav(cd)->len = sz; - g = cts->g; - setgcrefr(cd->nextgc, g->gc.root); - setgcref(g->gc.root, obj2gco(cd)); - newwhite(g, obj2gco(cd)); - cd->marked |= 0x80; - cd->gct = ~LJ_TCDATA; - cd->ctypeid = id; - return cd; -} - -/* Free a C data object. */ -void LJ_FASTCALL lj_cdata_free(global_State *g, GCcdata *cd) -{ - if (LJ_UNLIKELY(cd->marked & LJ_GC_CDATA_FIN)) { - GCobj *root; - makewhite(g, obj2gco(cd)); - markfinalized(obj2gco(cd)); - if ((root = gcref(g->gc.mmudata)) != NULL) { - setgcrefr(cd->nextgc, root->gch.nextgc); - setgcref(root->gch.nextgc, obj2gco(cd)); - setgcref(g->gc.mmudata, obj2gco(cd)); - } else { - setgcref(cd->nextgc, obj2gco(cd)); - setgcref(g->gc.mmudata, obj2gco(cd)); - } - } else if (LJ_LIKELY(!cdataisv(cd))) { - CType *ct = ctype_raw(ctype_ctsG(g), cd->ctypeid); - CTSize sz = ctype_hassize(ct->info) ? ct->size : CTSIZE_PTR; - lua_assert(ctype_hassize(ct->info) || ctype_isfunc(ct->info) || - ctype_isextern(ct->info)); - lj_mem_free(g, cd, sizeof(GCcdata) + sz); - } else { - lj_mem_free(g, memcdatav(cd), sizecdatav(cd)); - } -} - -TValue * LJ_FASTCALL lj_cdata_setfin(lua_State *L, GCcdata *cd) -{ - global_State *g = G(L); - GCtab *t = ctype_ctsG(g)->finalizer; - if (gcref(t->metatable)) { - /* Add cdata to finalizer table, if still enabled. */ - TValue *tv, tmp; - setcdataV(L, &tmp, cd); - lj_gc_anybarriert(L, t); - tv = lj_tab_set(L, t, &tmp); - cd->marked |= LJ_GC_CDATA_FIN; - return tv; - } else { - /* Otherwise return dummy TValue. */ - return &g->tmptv; - } -} - -/* -- C data indexing ----------------------------------------------------- */ - -/* Index C data by a TValue. Return CType and pointer. */ -CType *lj_cdata_index(CTState *cts, GCcdata *cd, cTValue *key, uint8_t **pp, - CTInfo *qual) -{ - uint8_t *p = (uint8_t *)cdataptr(cd); - CType *ct = ctype_get(cts, cd->ctypeid); - ptrdiff_t idx; - - /* Resolve reference for cdata object. */ - if (ctype_isref(ct->info)) { - lua_assert(ct->size == CTSIZE_PTR); - p = *(uint8_t **)p; - ct = ctype_child(cts, ct); - } - -collect_attrib: - /* Skip attributes and collect qualifiers. */ - while (ctype_isattrib(ct->info)) { - if (ctype_attrib(ct->info) == CTA_QUAL) *qual |= ct->size; - ct = ctype_child(cts, ct); - } - lua_assert(!ctype_isref(ct->info)); /* Interning rejects refs to refs. */ - - if (tvisint(key)) { - idx = (ptrdiff_t)intV(key); - goto integer_key; - } else if (tvisnum(key)) { /* Numeric key. */ - idx = LJ_64 ? (ptrdiff_t)numV(key) : (ptrdiff_t)lj_num2int(numV(key)); - integer_key: - if (ctype_ispointer(ct->info)) { - CTSize sz = lj_ctype_size(cts, ctype_cid(ct->info)); /* Element size. */ - if (sz == CTSIZE_INVALID) - lj_err_caller(cts->L, LJ_ERR_FFI_INVSIZE); - if (ctype_isptr(ct->info)) { - p = (uint8_t *)cdata_getptr(p, ct->size); - } else if ((ct->info & (CTF_VECTOR|CTF_COMPLEX))) { - if ((ct->info & CTF_COMPLEX)) idx &= 1; - *qual |= CTF_CONST; /* Valarray elements are constant. */ - } - *pp = p + idx*(int32_t)sz; - return ct; - } - } else if (tviscdata(key)) { /* Integer cdata key. */ - GCcdata *cdk = cdataV(key); - CType *ctk = ctype_raw(cts, cdk->ctypeid); - if (ctype_isenum(ctk->info)) ctk = ctype_child(cts, ctk); - if (ctype_isinteger(ctk->info)) { - lj_cconv_ct_ct(cts, ctype_get(cts, CTID_INT_PSZ), ctk, - (uint8_t *)&idx, cdataptr(cdk), 0); - goto integer_key; - } - } else if (tvisstr(key)) { /* String key. */ - GCstr *name = strV(key); - if (ctype_isstruct(ct->info)) { - CTSize ofs; - CType *fct = lj_ctype_getfieldq(cts, ct, name, &ofs, qual); - if (fct) { - *pp = p + ofs; - return fct; - } - } else if (ctype_iscomplex(ct->info)) { - if (name->len == 2) { - *qual |= CTF_CONST; /* Complex fields are constant. */ - if (strdata(name)[0] == 'r' && strdata(name)[1] == 'e') { - *pp = p; - return ct; - } else if (strdata(name)[0] == 'i' && strdata(name)[1] == 'm') { - *pp = p + (ct->size >> 1); - return ct; - } - } - } else if (cd->ctypeid == CTID_CTYPEID) { - /* Allow indexing a (pointer to) struct constructor to get constants. */ - CType *sct = ctype_raw(cts, *(CTypeID *)p); - if (ctype_isptr(sct->info)) - sct = ctype_rawchild(cts, sct); - if (ctype_isstruct(sct->info)) { - CTSize ofs; - CType *fct = lj_ctype_getfield(cts, sct, name, &ofs); - if (fct && ctype_isconstval(fct->info)) - return fct; - } - ct = sct; /* Allow resolving metamethods for constructors, too. */ - } - } - if (ctype_isptr(ct->info)) { /* Automatically perform '->'. */ - if (ctype_isstruct(ctype_rawchild(cts, ct)->info)) { - p = (uint8_t *)cdata_getptr(p, ct->size); - ct = ctype_child(cts, ct); - goto collect_attrib; - } - } - *qual |= 1; /* Lookup failed. */ - return ct; /* But return the resolved raw type. */ -} - -/* -- C data getters ------------------------------------------------------ */ - -/* Get constant value and convert to TValue. */ -static void cdata_getconst(CTState *cts, TValue *o, CType *ct) -{ - CType *ctt = ctype_child(cts, ct); - lua_assert(ctype_isinteger(ctt->info) && ctt->size <= 4); - /* Constants are already zero-extended/sign-extended to 32 bits. */ - if ((ctt->info & CTF_UNSIGNED) && (int32_t)ct->size < 0) - setnumV(o, (lua_Number)(uint32_t)ct->size); - else - setintV(o, (int32_t)ct->size); -} - -/* Get C data value and convert to TValue. */ -int lj_cdata_get(CTState *cts, CType *s, TValue *o, uint8_t *sp) -{ - CTypeID sid; - - if (ctype_isconstval(s->info)) { - cdata_getconst(cts, o, s); - return 0; /* No GC step needed. */ - } else if (ctype_isbitfield(s->info)) { - return lj_cconv_tv_bf(cts, s, o, sp); - } - - /* Get child type of pointer/array/field. */ - lua_assert(ctype_ispointer(s->info) || ctype_isfield(s->info)); - sid = ctype_cid(s->info); - s = ctype_get(cts, sid); - - /* Resolve reference for field. */ - if (ctype_isref(s->info)) { - lua_assert(s->size == CTSIZE_PTR); - sp = *(uint8_t **)sp; - sid = ctype_cid(s->info); - s = ctype_get(cts, sid); - } - - /* Skip attributes. */ - while (ctype_isattrib(s->info)) - s = ctype_child(cts, s); - - return lj_cconv_tv_ct(cts, s, sid, o, sp); -} - -/* -- C data setters ------------------------------------------------------ */ - -/* Convert TValue and set C data value. */ -void lj_cdata_set(CTState *cts, CType *d, uint8_t *dp, TValue *o, CTInfo qual) -{ - if (ctype_isconstval(d->info)) { - goto err_const; - } else if (ctype_isbitfield(d->info)) { - if (((d->info|qual) & CTF_CONST)) goto err_const; - lj_cconv_bf_tv(cts, d, dp, o); - return; - } - - /* Get child type of pointer/array/field. */ - lua_assert(ctype_ispointer(d->info) || ctype_isfield(d->info)); - d = ctype_child(cts, d); - - /* Resolve reference for field. */ - if (ctype_isref(d->info)) { - lua_assert(d->size == CTSIZE_PTR); - dp = *(uint8_t **)dp; - d = ctype_child(cts, d); - } - - /* Skip attributes and collect qualifiers. */ - for (;;) { - if (ctype_isattrib(d->info)) { - if (ctype_attrib(d->info) == CTA_QUAL) qual |= d->size; - } else { - break; - } - d = ctype_child(cts, d); - } - - lua_assert(ctype_hassize(d->info) && !ctype_isvoid(d->info)); - - if (((d->info|qual) & CTF_CONST)) { - err_const: - lj_err_caller(cts->L, LJ_ERR_FFI_WRCONST); - } - - lj_cconv_ct_tv(cts, d, dp, o, 0); -} - -#endif diff --git a/deps/luajit/src/lj_cdata.h b/deps/luajit/src/lj_cdata.h deleted file mode 100644 index 3a1275e..0000000 --- a/deps/luajit/src/lj_cdata.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -** C data management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CDATA_H -#define _LJ_CDATA_H - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_ctype.h" - -#if LJ_HASFFI - -/* Get C data pointer. */ -static LJ_AINLINE void *cdata_getptr(void *p, CTSize sz) -{ - if (LJ_64 && sz == 4) { /* Support 32 bit pointers on 64 bit targets. */ - return ((void *)(uintptr_t)*(uint32_t *)p); - } else { - lua_assert(sz == CTSIZE_PTR); - return *(void **)p; - } -} - -/* Set C data pointer. */ -static LJ_AINLINE void cdata_setptr(void *p, CTSize sz, const void *v) -{ - if (LJ_64 && sz == 4) { /* Support 32 bit pointers on 64 bit targets. */ - *(uint32_t *)p = (uint32_t)(uintptr_t)v; - } else { - lua_assert(sz == CTSIZE_PTR); - *(void **)p = (void *)v; - } -} - -/* Allocate fixed-size C data object. */ -static LJ_AINLINE GCcdata *lj_cdata_new(CTState *cts, CTypeID id, CTSize sz) -{ - GCcdata *cd; -#ifdef LUA_USE_ASSERT - CType *ct = ctype_raw(cts, id); - lua_assert((ctype_hassize(ct->info) ? ct->size : CTSIZE_PTR) == sz); -#endif - cd = (GCcdata *)lj_mem_newgco(cts->L, sizeof(GCcdata) + sz); - cd->gct = ~LJ_TCDATA; - cd->ctypeid = ctype_check(cts, id); - return cd; -} - -/* Variant which works without a valid CTState. */ -static LJ_AINLINE GCcdata *lj_cdata_new_(lua_State *L, CTypeID id, CTSize sz) -{ - GCcdata *cd = (GCcdata *)lj_mem_newgco(L, sizeof(GCcdata) + sz); - cd->gct = ~LJ_TCDATA; - cd->ctypeid = id; - return cd; -} - -LJ_FUNC GCcdata *lj_cdata_newref(CTState *cts, const void *pp, CTypeID id); -LJ_FUNC GCcdata *lj_cdata_newv(CTState *cts, CTypeID id, CTSize sz, - CTSize align); - -LJ_FUNC void LJ_FASTCALL lj_cdata_free(global_State *g, GCcdata *cd); -LJ_FUNCA TValue * LJ_FASTCALL lj_cdata_setfin(lua_State *L, GCcdata *cd); - -LJ_FUNC CType *lj_cdata_index(CTState *cts, GCcdata *cd, cTValue *key, - uint8_t **pp, CTInfo *qual); -LJ_FUNC int lj_cdata_get(CTState *cts, CType *s, TValue *o, uint8_t *sp); -LJ_FUNC void lj_cdata_set(CTState *cts, CType *d, uint8_t *dp, TValue *o, - CTInfo qual); - -#endif - -#endif diff --git a/deps/luajit/src/lj_char.c b/deps/luajit/src/lj_char.c deleted file mode 100644 index 11f23ef..0000000 --- a/deps/luajit/src/lj_char.c +++ /dev/null @@ -1,43 +0,0 @@ -/* -** Character types. -** Donated to the public domain. -** -** This is intended to replace the problematic libc single-byte NLS functions. -** These just don't make sense anymore with UTF-8 locales becoming the norm -** on POSIX systems. It never worked too well on Windows systems since hardly -** anyone bothered to call setlocale(). -** -** This table is hardcoded for ASCII. Identifiers include the characters -** 128-255, too. This allows for the use of all non-ASCII chars as identifiers -** in the lexer. This is a broad definition, but works well in practice -** for both UTF-8 locales and most single-byte locales (such as ISO-8859-*). -** -** If you really need proper character types for UTF-8 strings, please use -** an add-on library such as slnunicode: http://luaforge.net/projects/sln/ -*/ - -#define lj_char_c -#define LUA_CORE - -#include "lj_char.h" - -LJ_DATADEF const uint8_t lj_char_bits[257] = { - 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 152,152,152,152,152,152,152,152,152,152, 4, 4, 4, 4, 4, 4, - 4,176,176,176,176,176,176,160,160,160,160,160,160,160,160,160, - 160,160,160,160,160,160,160,160,160,160,160, 4, 4, 4, 4,132, - 4,208,208,208,208,208,208,192,192,192,192,192,192,192,192,192, - 192,192,192,192,192,192,192,192,192,192,192, 4, 4, 4, 4, 1, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, - 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128 -}; - diff --git a/deps/luajit/src/lj_char.h b/deps/luajit/src/lj_char.h deleted file mode 100644 index c3c86d3..0000000 --- a/deps/luajit/src/lj_char.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -** Character types. -** Donated to the public domain. -*/ - -#ifndef _LJ_CHAR_H -#define _LJ_CHAR_H - -#include "lj_def.h" - -#define LJ_CHAR_CNTRL 0x01 -#define LJ_CHAR_SPACE 0x02 -#define LJ_CHAR_PUNCT 0x04 -#define LJ_CHAR_DIGIT 0x08 -#define LJ_CHAR_XDIGIT 0x10 -#define LJ_CHAR_UPPER 0x20 -#define LJ_CHAR_LOWER 0x40 -#define LJ_CHAR_IDENT 0x80 -#define LJ_CHAR_ALPHA (LJ_CHAR_LOWER|LJ_CHAR_UPPER) -#define LJ_CHAR_ALNUM (LJ_CHAR_ALPHA|LJ_CHAR_DIGIT) -#define LJ_CHAR_GRAPH (LJ_CHAR_ALNUM|LJ_CHAR_PUNCT) - -/* Only pass -1 or 0..255 to these macros. Never pass a signed char! */ -#define lj_char_isa(c, t) ((lj_char_bits+1)[(c)] & t) -#define lj_char_iscntrl(c) lj_char_isa((c), LJ_CHAR_CNTRL) -#define lj_char_isspace(c) lj_char_isa((c), LJ_CHAR_SPACE) -#define lj_char_ispunct(c) lj_char_isa((c), LJ_CHAR_PUNCT) -#define lj_char_isdigit(c) lj_char_isa((c), LJ_CHAR_DIGIT) -#define lj_char_isxdigit(c) lj_char_isa((c), LJ_CHAR_XDIGIT) -#define lj_char_isupper(c) lj_char_isa((c), LJ_CHAR_UPPER) -#define lj_char_islower(c) lj_char_isa((c), LJ_CHAR_LOWER) -#define lj_char_isident(c) lj_char_isa((c), LJ_CHAR_IDENT) -#define lj_char_isalpha(c) lj_char_isa((c), LJ_CHAR_ALPHA) -#define lj_char_isalnum(c) lj_char_isa((c), LJ_CHAR_ALNUM) -#define lj_char_isgraph(c) lj_char_isa((c), LJ_CHAR_GRAPH) - -#define lj_char_toupper(c) ((c) - (lj_char_islower(c) >> 1)) -#define lj_char_tolower(c) ((c) + lj_char_isupper(c)) - -LJ_DATA const uint8_t lj_char_bits[257]; - -#endif diff --git a/deps/luajit/src/lj_clib.c b/deps/luajit/src/lj_clib.c deleted file mode 100644 index d352609..0000000 --- a/deps/luajit/src/lj_clib.c +++ /dev/null @@ -1,409 +0,0 @@ -/* -** FFI C library loader. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_tab.h" -#include "lj_str.h" -#include "lj_udata.h" -#include "lj_ctype.h" -#include "lj_cconv.h" -#include "lj_cdata.h" -#include "lj_clib.h" - -/* -- OS-specific functions ----------------------------------------------- */ - -#if LJ_TARGET_DLOPEN - -#include -#include - -#if defined(RTLD_DEFAULT) -#define CLIB_DEFHANDLE RTLD_DEFAULT -#elif LJ_TARGET_OSX || LJ_TARGET_BSD -#define CLIB_DEFHANDLE ((void *)(intptr_t)-2) -#else -#define CLIB_DEFHANDLE NULL -#endif - -LJ_NORET LJ_NOINLINE static void clib_error_(lua_State *L) -{ - lj_err_callermsg(L, dlerror()); -} - -#define clib_error(L, fmt, name) clib_error_(L) - -#if defined(__CYGWIN__) -#define CLIB_SOPREFIX "cyg" -#else -#define CLIB_SOPREFIX "lib" -#endif - -#if LJ_TARGET_OSX -#define CLIB_SOEXT "%s.dylib" -#elif defined(__CYGWIN__) -#define CLIB_SOEXT "%s.dll" -#else -#define CLIB_SOEXT "%s.so" -#endif - -static const char *clib_extname(lua_State *L, const char *name) -{ - if (!strchr(name, '/') -#ifdef __CYGWIN__ - && !strchr(name, '\\') -#endif - ) { - if (!strchr(name, '.')) { - name = lj_str_pushf(L, CLIB_SOEXT, name); - L->top--; -#ifdef __CYGWIN__ - } else { - return name; -#endif - } - if (!(name[0] == CLIB_SOPREFIX[0] && name[1] == CLIB_SOPREFIX[1] && - name[2] == CLIB_SOPREFIX[2])) { - name = lj_str_pushf(L, CLIB_SOPREFIX "%s", name); - L->top--; - } - } - return name; -} - -/* Check for a recognized ld script line. */ -static const char *clib_check_lds(lua_State *L, const char *buf) -{ - char *p, *e; - if ((!strncmp(buf, "GROUP", 5) || !strncmp(buf, "INPUT", 5)) && - (p = strchr(buf, '('))) { - while (*++p == ' ') ; - for (e = p; *e && *e != ' ' && *e != ')'; e++) ; - return strdata(lj_str_new(L, p, e-p)); - } - return NULL; -} - -/* Quick and dirty solution to resolve shared library name from ld script. */ -static const char *clib_resolve_lds(lua_State *L, const char *name) -{ - FILE *fp = fopen(name, "r"); - const char *p = NULL; - if (fp) { - char buf[256]; - if (fgets(buf, sizeof(buf), fp)) { - if (!strncmp(buf, "/* GNU ld script", 16)) { /* ld script magic? */ - while (fgets(buf, sizeof(buf), fp)) { /* Check all lines. */ - p = clib_check_lds(L, buf); - if (p) break; - } - } else { /* Otherwise check only the first line. */ - p = clib_check_lds(L, buf); - } - } - fclose(fp); - } - return p; -} - -static void *clib_loadlib(lua_State *L, const char *name, int global) -{ - void *h = dlopen(clib_extname(L, name), - RTLD_LAZY | (global?RTLD_GLOBAL:RTLD_LOCAL)); - if (!h) { - const char *e, *err = dlerror(); - if (*err == '/' && (e = strchr(err, ':')) && - (name = clib_resolve_lds(L, strdata(lj_str_new(L, err, e-err))))) { - h = dlopen(name, RTLD_LAZY | (global?RTLD_GLOBAL:RTLD_LOCAL)); - if (h) return h; - err = dlerror(); - } - lj_err_callermsg(L, err); - } - return h; -} - -static void clib_unloadlib(CLibrary *cl) -{ - if (cl->handle && cl->handle != CLIB_DEFHANDLE) - dlclose(cl->handle); -} - -static void *clib_getsym(CLibrary *cl, const char *name) -{ - void *p = dlsym(cl->handle, name); - return p; -} - -#elif LJ_TARGET_WINDOWS - -#define WIN32_LEAN_AND_MEAN -#include - -#ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS -#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 -#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2 -BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); -#endif - -#define CLIB_DEFHANDLE ((void *)-1) - -/* Default libraries. */ -enum { - CLIB_HANDLE_EXE, - CLIB_HANDLE_DLL, - CLIB_HANDLE_CRT, - CLIB_HANDLE_KERNEL32, - CLIB_HANDLE_USER32, - CLIB_HANDLE_GDI32, - CLIB_HANDLE_MAX -}; - -static void *clib_def_handle[CLIB_HANDLE_MAX]; - -LJ_NORET LJ_NOINLINE static void clib_error(lua_State *L, const char *fmt, - const char *name) -{ - DWORD err = GetLastError(); - char buf[128]; - if (!FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, buf, sizeof(buf), NULL)) - buf[0] = '\0'; - lj_err_callermsg(L, lj_str_pushf(L, fmt, name, buf)); -} - -static int clib_needext(const char *s) -{ - while (*s) { - if (*s == '/' || *s == '\\' || *s == '.') return 0; - s++; - } - return 1; -} - -static const char *clib_extname(lua_State *L, const char *name) -{ - if (clib_needext(name)) { - name = lj_str_pushf(L, "%s.dll", name); - L->top--; - } - return name; -} - -static void *clib_loadlib(lua_State *L, const char *name, int global) -{ - DWORD oldwerr = GetLastError(); - void *h = (void *)LoadLibraryA(clib_extname(L, name)); - if (!h) clib_error(L, "cannot load module " LUA_QS ": %s", name); - SetLastError(oldwerr); - UNUSED(global); - return h; -} - -static void clib_unloadlib(CLibrary *cl) -{ - if (cl->handle == CLIB_DEFHANDLE) { - MSize i; - for (i = CLIB_HANDLE_KERNEL32; i < CLIB_HANDLE_MAX; i++) { - void *h = clib_def_handle[i]; - if (h) { - clib_def_handle[i] = NULL; - FreeLibrary((HINSTANCE)h); - } - } - } else if (cl->handle) { - FreeLibrary((HINSTANCE)cl->handle); - } -} - -static void *clib_getsym(CLibrary *cl, const char *name) -{ - void *p = NULL; - if (cl->handle == CLIB_DEFHANDLE) { /* Search default libraries. */ - MSize i; - for (i = 0; i < CLIB_HANDLE_MAX; i++) { - HINSTANCE h = (HINSTANCE)clib_def_handle[i]; - if (!(void *)h) { /* Resolve default library handles (once). */ - switch (i) { - case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break; - case CLIB_HANDLE_DLL: - GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (const char *)clib_def_handle, &h); - break; - case CLIB_HANDLE_CRT: - GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (const char *)&_fmode, &h); - break; - case CLIB_HANDLE_KERNEL32: h = LoadLibraryA("kernel32.dll"); break; - case CLIB_HANDLE_USER32: h = LoadLibraryA("user32.dll"); break; - case CLIB_HANDLE_GDI32: h = LoadLibraryA("gdi32.dll"); break; - } - if (!h) continue; - clib_def_handle[i] = (void *)h; - } - p = (void *)GetProcAddress(h, name); - if (p) break; - } - } else { - p = (void *)GetProcAddress((HINSTANCE)cl->handle, name); - } - return p; -} - -#else - -#define CLIB_DEFHANDLE NULL - -LJ_NORET LJ_NOINLINE static void clib_error(lua_State *L, const char *fmt, - const char *name) -{ - lj_err_callermsg(L, lj_str_pushf(L, fmt, name, "no support for this OS")); -} - -static void *clib_loadlib(lua_State *L, const char *name, int global) -{ - lj_err_callermsg(L, "no support for loading dynamic libraries for this OS"); - UNUSED(name); UNUSED(global); - return NULL; -} - -static void clib_unloadlib(CLibrary *cl) -{ - UNUSED(cl); -} - -static void *clib_getsym(CLibrary *cl, const char *name) -{ - UNUSED(cl); UNUSED(name); - return NULL; -} - -#endif - -/* -- C library indexing -------------------------------------------------- */ - -#if LJ_TARGET_X86 && LJ_ABI_WIN -/* Compute argument size for fastcall/stdcall functions. */ -static CTSize clib_func_argsize(CTState *cts, CType *ct) -{ - CTSize n = 0; - while (ct->sib) { - CType *d; - ct = ctype_get(cts, ct->sib); - if (ctype_isfield(ct->info)) { - d = ctype_rawchild(cts, ct); - n += ((d->size + 3) & ~3); - } - } - return n; -} -#endif - -/* Get redirected or mangled external symbol. */ -static const char *clib_extsym(CTState *cts, CType *ct, GCstr *name) -{ - if (ct->sib) { - CType *ctf = ctype_get(cts, ct->sib); - if (ctype_isxattrib(ctf->info, CTA_REDIR)) - return strdata(gco2str(gcref(ctf->name))); - } - return strdata(name); -} - -/* Index a C library by name. */ -TValue *lj_clib_index(lua_State *L, CLibrary *cl, GCstr *name) -{ - TValue *tv = lj_tab_setstr(L, cl->cache, name); - if (LJ_UNLIKELY(tvisnil(tv))) { - CTState *cts = ctype_cts(L); - CType *ct; - CTypeID id = lj_ctype_getname(cts, &ct, name, CLNS_INDEX); - if (!id) - lj_err_callerv(L, LJ_ERR_FFI_NODECL, strdata(name)); - if (ctype_isconstval(ct->info)) { - CType *ctt = ctype_child(cts, ct); - lua_assert(ctype_isinteger(ctt->info) && ctt->size <= 4); - if ((ctt->info & CTF_UNSIGNED) && (int32_t)ct->size < 0) - setnumV(tv, (lua_Number)(uint32_t)ct->size); - else - setintV(tv, (int32_t)ct->size); - } else { - const char *sym = clib_extsym(cts, ct, name); -#if LJ_TARGET_WINDOWS - DWORD oldwerr = GetLastError(); -#endif - void *p = clib_getsym(cl, sym); - GCcdata *cd; - lua_assert(ctype_isfunc(ct->info) || ctype_isextern(ct->info)); -#if LJ_TARGET_X86 && LJ_ABI_WIN - /* Retry with decorated name for fastcall/stdcall functions. */ - if (!p && ctype_isfunc(ct->info)) { - CTInfo cconv = ctype_cconv(ct->info); - if (cconv == CTCC_FASTCALL || cconv == CTCC_STDCALL) { - CTSize sz = clib_func_argsize(cts, ct); - const char *symd = lj_str_pushf(L, - cconv == CTCC_FASTCALL ? "@%s@%d" : "_%s@%d", - sym, sz); - L->top--; - p = clib_getsym(cl, symd); - } - } -#endif - if (!p) - clib_error(L, "cannot resolve symbol " LUA_QS ": %s", sym); -#if LJ_TARGET_WINDOWS - SetLastError(oldwerr); -#endif - cd = lj_cdata_new(cts, id, CTSIZE_PTR); - *(void **)cdataptr(cd) = p; - setcdataV(L, tv, cd); - } - } - return tv; -} - -/* -- C library management ------------------------------------------------ */ - -/* Create a new CLibrary object and push it on the stack. */ -static CLibrary *clib_new(lua_State *L, GCtab *mt) -{ - GCtab *t = lj_tab_new(L, 0, 0); - GCudata *ud = lj_udata_new(L, sizeof(CLibrary), t); - CLibrary *cl = (CLibrary *)uddata(ud); - cl->cache = t; - ud->udtype = UDTYPE_FFI_CLIB; - /* NOBARRIER: The GCudata is new (marked white). */ - setgcref(ud->metatable, obj2gco(mt)); - setudataV(L, L->top++, ud); - return cl; -} - -/* Load a C library. */ -void lj_clib_load(lua_State *L, GCtab *mt, GCstr *name, int global) -{ - void *handle = clib_loadlib(L, strdata(name), global); - CLibrary *cl = clib_new(L, mt); - cl->handle = handle; -} - -/* Unload a C library. */ -void lj_clib_unload(CLibrary *cl) -{ - clib_unloadlib(cl); - cl->handle = NULL; -} - -/* Create the default C library object. */ -void lj_clib_default(lua_State *L, GCtab *mt) -{ - CLibrary *cl = clib_new(L, mt); - cl->handle = CLIB_DEFHANDLE; -} - -#endif diff --git a/deps/luajit/src/lj_clib.h b/deps/luajit/src/lj_clib.h deleted file mode 100644 index e5dc98e..0000000 --- a/deps/luajit/src/lj_clib.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -** FFI C library loader. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CLIB_H -#define _LJ_CLIB_H - -#include "lj_obj.h" - -#if LJ_HASFFI - -/* Namespace for C library indexing. */ -#define CLNS_INDEX ((1u<env. */ -} CLibrary; - -LJ_FUNC TValue *lj_clib_index(lua_State *L, CLibrary *cl, GCstr *name); -LJ_FUNC void lj_clib_load(lua_State *L, GCtab *mt, GCstr *name, int global); -LJ_FUNC void lj_clib_unload(CLibrary *cl); -LJ_FUNC void lj_clib_default(lua_State *L, GCtab *mt); - -#endif - -#endif diff --git a/deps/luajit/src/lj_cparse.c b/deps/luajit/src/lj_cparse.c deleted file mode 100644 index b9df88d..0000000 --- a/deps/luajit/src/lj_cparse.c +++ /dev/null @@ -1,1872 +0,0 @@ -/* -** C declaration parser. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_ctype.h" -#include "lj_cparse.h" -#include "lj_frame.h" -#include "lj_vm.h" -#include "lj_char.h" -#include "lj_strscan.h" - -/* -** Important note: this is NOT a validating C parser! This is a minimal -** C declaration parser, solely for use by the LuaJIT FFI. -** -** It ought to return correct results for properly formed C declarations, -** but it may accept some invalid declarations, too (and return nonsense). -** Also, it shows rather generic error messages to avoid unnecessary bloat. -** If in doubt, please check the input against your favorite C compiler. -*/ - -/* -- C lexer ------------------------------------------------------------- */ - -/* C lexer token names. */ -static const char *const ctoknames[] = { -#define CTOKSTR(name, str) str, -CTOKDEF(CTOKSTR) -#undef CTOKSTR - NULL -}; - -/* Forward declaration. */ -LJ_NORET static void cp_err(CPState *cp, ErrMsg em); - -static const char *cp_tok2str(CPState *cp, CPToken tok) -{ - lua_assert(tok < CTOK_FIRSTDECL); - if (tok > CTOK_OFS) - return ctoknames[tok-CTOK_OFS-1]; - else if (!lj_char_iscntrl(tok)) - return lj_str_pushf(cp->L, "%c", tok); - else - return lj_str_pushf(cp->L, "char(%d)", tok); -} - -/* End-of-line? */ -static LJ_AINLINE int cp_iseol(CPChar c) -{ - return (c == '\n' || c == '\r'); -} - -/* Peek next raw character. */ -static LJ_AINLINE CPChar cp_rawpeek(CPState *cp) -{ - return (CPChar)(uint8_t)(*cp->p); -} - -static LJ_NOINLINE CPChar cp_get_bs(CPState *cp); - -/* Get next character. */ -static LJ_AINLINE CPChar cp_get(CPState *cp) -{ - cp->c = (CPChar)(uint8_t)(*cp->p++); - if (LJ_LIKELY(cp->c != '\\')) return cp->c; - return cp_get_bs(cp); -} - -/* Transparently skip backslash-escaped line breaks. */ -static LJ_NOINLINE CPChar cp_get_bs(CPState *cp) -{ - CPChar c2, c = cp_rawpeek(cp); - if (!cp_iseol(c)) return cp->c; - cp->p++; - c2 = cp_rawpeek(cp); - if (cp_iseol(c2) && c2 != c) cp->p++; - cp->linenumber++; - return cp_get(cp); -} - -/* Grow save buffer. */ -static LJ_NOINLINE void cp_save_grow(CPState *cp, CPChar c) -{ - MSize newsize; - if (cp->sb.sz >= CPARSE_MAX_BUF/2) - cp_err(cp, LJ_ERR_XELEM); - newsize = cp->sb.sz * 2; - lj_str_resizebuf(cp->L, &cp->sb, newsize); - cp->sb.buf[cp->sb.n++] = (char)c; -} - -/* Save character in buffer. */ -static LJ_AINLINE void cp_save(CPState *cp, CPChar c) -{ - if (LJ_UNLIKELY(cp->sb.n + 1 > cp->sb.sz)) - cp_save_grow(cp, c); - else - cp->sb.buf[cp->sb.n++] = (char)c; -} - -/* Skip line break. Handles "\n", "\r", "\r\n" or "\n\r". */ -static void cp_newline(CPState *cp) -{ - CPChar c = cp_rawpeek(cp); - if (cp_iseol(c) && c != cp->c) cp->p++; - cp->linenumber++; -} - -LJ_NORET static void cp_errmsg(CPState *cp, CPToken tok, ErrMsg em, ...) -{ - const char *msg, *tokstr; - lua_State *L; - va_list argp; - if (tok == 0) { - tokstr = NULL; - } else if (tok == CTOK_IDENT || tok == CTOK_INTEGER || tok == CTOK_STRING || - tok >= CTOK_FIRSTDECL) { - if (cp->sb.n == 0) cp_save(cp, '$'); - cp_save(cp, '\0'); - tokstr = cp->sb.buf; - } else { - tokstr = cp_tok2str(cp, tok); - } - L = cp->L; - va_start(argp, em); - msg = lj_str_pushvf(L, err2msg(em), argp); - va_end(argp); - if (tokstr) - msg = lj_str_pushf(L, err2msg(LJ_ERR_XNEAR), msg, tokstr); - if (cp->linenumber > 1) - msg = lj_str_pushf(L, "%s at line %d", msg, cp->linenumber); - lj_err_callermsg(L, msg); -} - -LJ_NORET LJ_NOINLINE static void cp_err_token(CPState *cp, CPToken tok) -{ - cp_errmsg(cp, cp->tok, LJ_ERR_XTOKEN, cp_tok2str(cp, tok)); -} - -LJ_NORET LJ_NOINLINE static void cp_err_badidx(CPState *cp, CType *ct) -{ - GCstr *s = lj_ctype_repr(cp->cts->L, ctype_typeid(cp->cts, ct), NULL); - cp_errmsg(cp, 0, LJ_ERR_FFI_BADIDX, strdata(s)); -} - -LJ_NORET LJ_NOINLINE static void cp_err(CPState *cp, ErrMsg em) -{ - cp_errmsg(cp, 0, em); -} - -/* -- Main lexical scanner ------------------------------------------------ */ - -/* Parse number literal. Only handles int32_t/uint32_t right now. */ -static CPToken cp_number(CPState *cp) -{ - StrScanFmt fmt; - TValue o; - do { cp_save(cp, cp->c); } while (lj_char_isident(cp_get(cp))); - cp_save(cp, '\0'); - fmt = lj_strscan_scan((const uint8_t *)cp->sb.buf, &o, STRSCAN_OPT_C); - if (fmt == STRSCAN_INT) cp->val.id = CTID_INT32; - else if (fmt == STRSCAN_U32) cp->val.id = CTID_UINT32; - else if (!(cp->mode & CPARSE_MODE_SKIP)) - cp_errmsg(cp, CTOK_INTEGER, LJ_ERR_XNUMBER); - cp->val.u32 = (uint32_t)o.i; - return CTOK_INTEGER; -} - -/* Parse identifier or keyword. */ -static CPToken cp_ident(CPState *cp) -{ - do { cp_save(cp, cp->c); } while (lj_char_isident(cp_get(cp))); - cp->str = lj_str_new(cp->L, cp->sb.buf, cp->sb.n); - cp->val.id = lj_ctype_getname(cp->cts, &cp->ct, cp->str, cp->tmask); - if (ctype_type(cp->ct->info) == CT_KW) - return ctype_cid(cp->ct->info); - return CTOK_IDENT; -} - -/* Parse parameter. */ -static CPToken cp_param(CPState *cp) -{ - CPChar c = cp_get(cp); - TValue *o = cp->param; - if (lj_char_isident(c) || c == '$') /* Reserve $xyz for future extensions. */ - cp_errmsg(cp, c, LJ_ERR_XSYNTAX); - if (!o || o >= cp->L->top) - cp_err(cp, LJ_ERR_FFI_NUMPARAM); - cp->param = o+1; - if (tvisstr(o)) { - cp->str = strV(o); - cp->val.id = 0; - cp->ct = &cp->cts->tab[0]; - return CTOK_IDENT; - } else if (tvisnumber(o)) { - cp->val.i32 = numberVint(o); - cp->val.id = CTID_INT32; - return CTOK_INTEGER; - } else { - GCcdata *cd; - if (!tviscdata(o)) - lj_err_argtype(cp->L, (int)(o-cp->L->base)+1, "type parameter"); - cd = cdataV(o); - if (cd->ctypeid == CTID_CTYPEID) - cp->val.id = *(CTypeID *)cdataptr(cd); - else - cp->val.id = cd->ctypeid; - return '$'; - } -} - -/* Parse string or character constant. */ -static CPToken cp_string(CPState *cp) -{ - CPChar delim = cp->c; - cp_get(cp); - while (cp->c != delim) { - CPChar c = cp->c; - if (c == '\0') cp_errmsg(cp, CTOK_EOF, LJ_ERR_XSTR); - if (c == '\\') { - c = cp_get(cp); - switch (c) { - case '\0': cp_errmsg(cp, CTOK_EOF, LJ_ERR_XSTR); break; - case 'a': c = '\a'; break; - case 'b': c = '\b'; break; - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - case 'e': c = 27; break; - case 'x': - c = 0; - while (lj_char_isxdigit(cp_get(cp))) - c = (c<<4) + (lj_char_isdigit(cp->c) ? cp->c-'0' : (cp->c&15)+9); - cp_save(cp, (c & 0xff)); - continue; - default: - if (lj_char_isdigit(c)) { - c -= '0'; - if (lj_char_isdigit(cp_get(cp))) { - c = c*8 + (cp->c - '0'); - if (lj_char_isdigit(cp_get(cp))) { - c = c*8 + (cp->c - '0'); - cp_get(cp); - } - } - cp_save(cp, (c & 0xff)); - continue; - } - break; - } - } - cp_save(cp, c); - cp_get(cp); - } - cp_get(cp); - if (delim == '"') { - cp->str = lj_str_new(cp->L, cp->sb.buf, cp->sb.n); - return CTOK_STRING; - } else { - if (cp->sb.n != 1) cp_err_token(cp, '\''); - cp->val.i32 = (int32_t)(char)cp->sb.buf[0]; - cp->val.id = CTID_INT32; - return CTOK_INTEGER; - } -} - -/* Skip C comment. */ -static void cp_comment_c(CPState *cp) -{ - do { - if (cp_get(cp) == '*') { - do { - if (cp_get(cp) == '/') { cp_get(cp); return; } - } while (cp->c == '*'); - } - if (cp_iseol(cp->c)) cp_newline(cp); - } while (cp->c != '\0'); -} - -/* Skip C++ comment. */ -static void cp_comment_cpp(CPState *cp) -{ - while (!cp_iseol(cp_get(cp)) && cp->c != '\0') - ; -} - -/* Lexical scanner for C. Only a minimal subset is implemented. */ -static CPToken cp_next_(CPState *cp) -{ - lj_str_resetbuf(&cp->sb); - for (;;) { - if (lj_char_isident(cp->c)) - return lj_char_isdigit(cp->c) ? cp_number(cp) : cp_ident(cp); - switch (cp->c) { - case '\n': case '\r': cp_newline(cp); /* fallthrough. */ - case ' ': case '\t': case '\v': case '\f': cp_get(cp); break; - case '"': case '\'': return cp_string(cp); - case '/': - if (cp_get(cp) == '*') cp_comment_c(cp); - else if (cp->c == '/') cp_comment_cpp(cp); - else return '/'; - break; - case '|': - if (cp_get(cp) != '|') return '|'; cp_get(cp); return CTOK_OROR; - case '&': - if (cp_get(cp) != '&') return '&'; cp_get(cp); return CTOK_ANDAND; - case '=': - if (cp_get(cp) != '=') return '='; cp_get(cp); return CTOK_EQ; - case '!': - if (cp_get(cp) != '=') return '!'; cp_get(cp); return CTOK_NE; - case '<': - if (cp_get(cp) == '=') { cp_get(cp); return CTOK_LE; } - else if (cp->c == '<') { cp_get(cp); return CTOK_SHL; } - return '<'; - case '>': - if (cp_get(cp) == '=') { cp_get(cp); return CTOK_GE; } - else if (cp->c == '>') { cp_get(cp); return CTOK_SHR; } - return '>'; - case '-': - if (cp_get(cp) != '>') return '-'; cp_get(cp); return CTOK_DEREF; - case '$': - return cp_param(cp); - case '\0': return CTOK_EOF; - default: { CPToken c = cp->c; cp_get(cp); return c; } - } - } -} - -static LJ_NOINLINE CPToken cp_next(CPState *cp) -{ - return (cp->tok = cp_next_(cp)); -} - -/* -- C parser ------------------------------------------------------------ */ - -/* Namespaces for resolving identifiers. */ -#define CPNS_DEFAULT \ - ((1u<linenumber = 1; - cp->depth = 0; - cp->curpack = 0; - cp->packstack[0] = 255; - lj_str_initbuf(&cp->sb); - lj_str_resizebuf(cp->L, &cp->sb, LJ_MIN_SBUF); - lua_assert(cp->p != NULL); - cp_get(cp); /* Read-ahead first char. */ - cp->tok = 0; - cp->tmask = CPNS_DEFAULT; - cp_next(cp); /* Read-ahead first token. */ -} - -/* Cleanup C parser state. */ -static void cp_cleanup(CPState *cp) -{ - global_State *g = G(cp->L); - lj_str_freebuf(g, &cp->sb); -} - -/* Check and consume optional token. */ -static int cp_opt(CPState *cp, CPToken tok) -{ - if (cp->tok == tok) { cp_next(cp); return 1; } - return 0; -} - -/* Check and consume token. */ -static void cp_check(CPState *cp, CPToken tok) -{ - if (cp->tok != tok) cp_err_token(cp, tok); - cp_next(cp); -} - -/* Check if the next token may start a type declaration. */ -static int cp_istypedecl(CPState *cp) -{ - if (cp->tok >= CTOK_FIRSTDECL && cp->tok <= CTOK_LASTDECL) return 1; - if (cp->tok == CTOK_IDENT && ctype_istypedef(cp->ct->info)) return 1; - if (cp->tok == '$') return 1; - return 0; -} - -/* -- Constant expression evaluator --------------------------------------- */ - -/* Forward declarations. */ -static void cp_expr_unary(CPState *cp, CPValue *k); -static void cp_expr_sub(CPState *cp, CPValue *k, int pri); - -/* Please note that type handling is very weak here. Most ops simply -** assume integer operands. Accessors are only needed to compute types and -** return synthetic values. The only purpose of the expression evaluator -** is to compute the values of constant expressions one would typically -** find in C header files. And again: this is NOT a validating C parser! -*/ - -/* Parse comma separated expression and return last result. */ -static void cp_expr_comma(CPState *cp, CPValue *k) -{ - do { cp_expr_sub(cp, k, 0); } while (cp_opt(cp, ',')); -} - -/* Parse sizeof/alignof operator. */ -static void cp_expr_sizeof(CPState *cp, CPValue *k, int wantsz) -{ - CTSize sz; - CTInfo info; - if (cp_opt(cp, '(')) { - if (cp_istypedecl(cp)) - k->id = cp_decl_abstract(cp); - else - cp_expr_comma(cp, k); - cp_check(cp, ')'); - } else { - cp_expr_unary(cp, k); - } - info = lj_ctype_info(cp->cts, k->id, &sz); - if (wantsz) { - if (sz != CTSIZE_INVALID) - k->u32 = sz; - else if (k->id != CTID_A_CCHAR) /* Special case for sizeof("string"). */ - cp_err(cp, LJ_ERR_FFI_INVSIZE); - } else { - k->u32 = 1u << ctype_align(info); - } - k->id = CTID_UINT32; /* Really size_t. */ -} - -/* Parse prefix operators. */ -static void cp_expr_prefix(CPState *cp, CPValue *k) -{ - if (cp->tok == CTOK_INTEGER) { - *k = cp->val; cp_next(cp); - } else if (cp_opt(cp, '+')) { - cp_expr_unary(cp, k); /* Nothing to do (well, integer promotion). */ - } else if (cp_opt(cp, '-')) { - cp_expr_unary(cp, k); k->i32 = -k->i32; - } else if (cp_opt(cp, '~')) { - cp_expr_unary(cp, k); k->i32 = ~k->i32; - } else if (cp_opt(cp, '!')) { - cp_expr_unary(cp, k); k->i32 = !k->i32; k->id = CTID_INT32; - } else if (cp_opt(cp, '(')) { - if (cp_istypedecl(cp)) { /* Cast operator. */ - CTypeID id = cp_decl_abstract(cp); - cp_check(cp, ')'); - cp_expr_unary(cp, k); - k->id = id; /* No conversion performed. */ - } else { /* Sub-expression. */ - cp_expr_comma(cp, k); - cp_check(cp, ')'); - } - } else if (cp_opt(cp, '*')) { /* Indirection. */ - CType *ct; - cp_expr_unary(cp, k); - ct = lj_ctype_rawref(cp->cts, k->id); - if (!ctype_ispointer(ct->info)) - cp_err_badidx(cp, ct); - k->u32 = 0; k->id = ctype_cid(ct->info); - } else if (cp_opt(cp, '&')) { /* Address operator. */ - cp_expr_unary(cp, k); - k->id = lj_ctype_intern(cp->cts, CTINFO(CT_PTR, CTALIGN_PTR+k->id), - CTSIZE_PTR); - } else if (cp_opt(cp, CTOK_SIZEOF)) { - cp_expr_sizeof(cp, k, 1); - } else if (cp_opt(cp, CTOK_ALIGNOF)) { - cp_expr_sizeof(cp, k, 0); - } else if (cp->tok == CTOK_IDENT) { - if (ctype_type(cp->ct->info) == CT_CONSTVAL) { - k->u32 = cp->ct->size; k->id = ctype_cid(cp->ct->info); - } else if (ctype_type(cp->ct->info) == CT_EXTERN) { - k->u32 = cp->val.id; k->id = ctype_cid(cp->ct->info); - } else if (ctype_type(cp->ct->info) == CT_FUNC) { - k->u32 = cp->val.id; k->id = cp->val.id; - } else { - goto err_expr; - } - cp_next(cp); - } else if (cp->tok == CTOK_STRING) { - CTSize sz = cp->str->len; - while (cp_next(cp) == CTOK_STRING) - sz += cp->str->len; - k->u32 = sz + 1; - k->id = CTID_A_CCHAR; - } else { - err_expr: - cp_errmsg(cp, cp->tok, LJ_ERR_XSYMBOL); - } -} - -/* Parse postfix operators. */ -static void cp_expr_postfix(CPState *cp, CPValue *k) -{ - for (;;) { - CType *ct; - if (cp_opt(cp, '[')) { /* Array/pointer index. */ - CPValue k2; - cp_expr_comma(cp, &k2); - ct = lj_ctype_rawref(cp->cts, k->id); - if (!ctype_ispointer(ct->info)) { - ct = lj_ctype_rawref(cp->cts, k2.id); - if (!ctype_ispointer(ct->info)) - cp_err_badidx(cp, ct); - } - cp_check(cp, ']'); - k->u32 = 0; - } else if (cp->tok == '.' || cp->tok == CTOK_DEREF) { /* Struct deref. */ - CTSize ofs; - CType *fct; - ct = lj_ctype_rawref(cp->cts, k->id); - if (cp->tok == CTOK_DEREF) { - if (!ctype_ispointer(ct->info)) - cp_err_badidx(cp, ct); - ct = lj_ctype_rawref(cp->cts, ctype_cid(ct->info)); - } - cp_next(cp); - if (cp->tok != CTOK_IDENT) cp_err_token(cp, CTOK_IDENT); - if (!ctype_isstruct(ct->info) || ct->size == CTSIZE_INVALID || - !(fct = lj_ctype_getfield(cp->cts, ct, cp->str, &ofs)) || - ctype_isbitfield(fct->info)) { - GCstr *s = lj_ctype_repr(cp->cts->L, ctype_typeid(cp->cts, ct), NULL); - cp_errmsg(cp, 0, LJ_ERR_FFI_BADMEMBER, strdata(s), strdata(cp->str)); - } - ct = fct; - k->u32 = ctype_isconstval(ct->info) ? ct->size : 0; - cp_next(cp); - } else { - return; - } - k->id = ctype_cid(ct->info); - } -} - -/* Parse infix operators. */ -static void cp_expr_infix(CPState *cp, CPValue *k, int pri) -{ - CPValue k2; - k2.u32 = 0; k2.id = 0; /* Silence the compiler. */ - for (;;) { - switch (pri) { - case 0: - if (cp_opt(cp, '?')) { - CPValue k3; - cp_expr_comma(cp, &k2); /* Right-associative. */ - cp_check(cp, ':'); - cp_expr_sub(cp, &k3, 0); - k->u32 = k->u32 ? k2.u32 : k3.u32; - k->id = k2.id > k3.id ? k2.id : k3.id; - continue; - } - case 1: - if (cp_opt(cp, CTOK_OROR)) { - cp_expr_sub(cp, &k2, 2); k->i32 = k->u32 || k2.u32; k->id = CTID_INT32; - continue; - } - case 2: - if (cp_opt(cp, CTOK_ANDAND)) { - cp_expr_sub(cp, &k2, 3); k->i32 = k->u32 && k2.u32; k->id = CTID_INT32; - continue; - } - case 3: - if (cp_opt(cp, '|')) { - cp_expr_sub(cp, &k2, 4); k->u32 = k->u32 | k2.u32; goto arith_result; - } - case 4: - if (cp_opt(cp, '^')) { - cp_expr_sub(cp, &k2, 5); k->u32 = k->u32 ^ k2.u32; goto arith_result; - } - case 5: - if (cp_opt(cp, '&')) { - cp_expr_sub(cp, &k2, 6); k->u32 = k->u32 & k2.u32; goto arith_result; - } - case 6: - if (cp_opt(cp, CTOK_EQ)) { - cp_expr_sub(cp, &k2, 7); k->i32 = k->u32 == k2.u32; k->id = CTID_INT32; - continue; - } else if (cp_opt(cp, CTOK_NE)) { - cp_expr_sub(cp, &k2, 7); k->i32 = k->u32 != k2.u32; k->id = CTID_INT32; - continue; - } - case 7: - if (cp_opt(cp, '<')) { - cp_expr_sub(cp, &k2, 8); - if (k->id == CTID_INT32 && k2.id == CTID_INT32) - k->i32 = k->i32 < k2.i32; - else - k->i32 = k->u32 < k2.u32; - k->id = CTID_INT32; - continue; - } else if (cp_opt(cp, '>')) { - cp_expr_sub(cp, &k2, 8); - if (k->id == CTID_INT32 && k2.id == CTID_INT32) - k->i32 = k->i32 > k2.i32; - else - k->i32 = k->u32 > k2.u32; - k->id = CTID_INT32; - continue; - } else if (cp_opt(cp, CTOK_LE)) { - cp_expr_sub(cp, &k2, 8); - if (k->id == CTID_INT32 && k2.id == CTID_INT32) - k->i32 = k->i32 <= k2.i32; - else - k->i32 = k->u32 <= k2.u32; - k->id = CTID_INT32; - continue; - } else if (cp_opt(cp, CTOK_GE)) { - cp_expr_sub(cp, &k2, 8); - if (k->id == CTID_INT32 && k2.id == CTID_INT32) - k->i32 = k->i32 >= k2.i32; - else - k->i32 = k->u32 >= k2.u32; - k->id = CTID_INT32; - continue; - } - case 8: - if (cp_opt(cp, CTOK_SHL)) { - cp_expr_sub(cp, &k2, 9); k->u32 = k->u32 << k2.u32; - continue; - } else if (cp_opt(cp, CTOK_SHR)) { - cp_expr_sub(cp, &k2, 9); - if (k->id == CTID_INT32) - k->i32 = k->i32 >> k2.i32; - else - k->u32 = k->u32 >> k2.u32; - continue; - } - case 9: - if (cp_opt(cp, '+')) { - cp_expr_sub(cp, &k2, 10); k->u32 = k->u32 + k2.u32; - arith_result: - if (k2.id > k->id) k->id = k2.id; /* Trivial promotion to unsigned. */ - continue; - } else if (cp_opt(cp, '-')) { - cp_expr_sub(cp, &k2, 10); k->u32 = k->u32 - k2.u32; goto arith_result; - } - case 10: - if (cp_opt(cp, '*')) { - cp_expr_unary(cp, &k2); k->u32 = k->u32 * k2.u32; goto arith_result; - } else if (cp_opt(cp, '/')) { - cp_expr_unary(cp, &k2); - if (k2.id > k->id) k->id = k2.id; /* Trivial promotion to unsigned. */ - if (k2.u32 == 0 || - (k->id == CTID_INT32 && k->u32 == 0x80000000u && k2.i32 == -1)) - cp_err(cp, LJ_ERR_BADVAL); - if (k->id == CTID_INT32) - k->i32 = k->i32 / k2.i32; - else - k->u32 = k->u32 / k2.u32; - continue; - } else if (cp_opt(cp, '%')) { - cp_expr_unary(cp, &k2); - if (k2.id > k->id) k->id = k2.id; /* Trivial promotion to unsigned. */ - if (k2.u32 == 0 || - (k->id == CTID_INT32 && k->u32 == 0x80000000u && k2.i32 == -1)) - cp_err(cp, LJ_ERR_BADVAL); - if (k->id == CTID_INT32) - k->i32 = k->i32 % k2.i32; - else - k->u32 = k->u32 % k2.u32; - continue; - } - default: - return; - } - } -} - -/* Parse and evaluate unary expression. */ -static void cp_expr_unary(CPState *cp, CPValue *k) -{ - if (++cp->depth > CPARSE_MAX_DECLDEPTH) cp_err(cp, LJ_ERR_XLEVELS); - cp_expr_prefix(cp, k); - cp_expr_postfix(cp, k); - cp->depth--; -} - -/* Parse and evaluate sub-expression. */ -static void cp_expr_sub(CPState *cp, CPValue *k, int pri) -{ - cp_expr_unary(cp, k); - cp_expr_infix(cp, k, pri); -} - -/* Parse constant integer expression. */ -static void cp_expr_kint(CPState *cp, CPValue *k) -{ - CType *ct; - cp_expr_sub(cp, k, 0); - ct = ctype_raw(cp->cts, k->id); - if (!ctype_isinteger(ct->info)) cp_err(cp, LJ_ERR_BADVAL); -} - -/* Parse (non-negative) size expression. */ -static CTSize cp_expr_ksize(CPState *cp) -{ - CPValue k; - cp_expr_kint(cp, &k); - if (k.u32 >= 0x80000000u) cp_err(cp, LJ_ERR_FFI_INVSIZE); - return k.u32; -} - -/* -- Type declaration stack management ----------------------------------- */ - -/* Add declaration element behind the insertion position. */ -static CPDeclIdx cp_add(CPDecl *decl, CTInfo info, CTSize size) -{ - CPDeclIdx top = decl->top; - if (top >= CPARSE_MAX_DECLSTACK) cp_err(decl->cp, LJ_ERR_XLEVELS); - decl->stack[top].info = info; - decl->stack[top].size = size; - decl->stack[top].sib = 0; - setgcrefnull(decl->stack[top].name); - decl->stack[top].next = decl->stack[decl->pos].next; - decl->stack[decl->pos].next = (CTypeID1)top; - decl->top = top+1; - return top; -} - -/* Push declaration element before the insertion position. */ -static CPDeclIdx cp_push(CPDecl *decl, CTInfo info, CTSize size) -{ - return (decl->pos = cp_add(decl, info, size)); -} - -/* Push or merge attributes. */ -static void cp_push_attributes(CPDecl *decl) -{ - CType *ct = &decl->stack[decl->pos]; - if (ctype_isfunc(ct->info)) { /* Ok to modify in-place. */ -#if LJ_TARGET_X86 - if ((decl->fattr & CTFP_CCONV)) - ct->info = (ct->info & (CTMASK_NUM|CTF_VARARG|CTMASK_CID)) + - (decl->fattr & ~CTMASK_CID); -#endif - } else { - if ((decl->attr & CTFP_ALIGNED) && !(decl->mode & CPARSE_MODE_FIELD)) - cp_push(decl, CTINFO(CT_ATTRIB, CTATTRIB(CTA_ALIGN)), - ctype_align(decl->attr)); - } -} - -/* Push unrolled type to declaration stack and merge qualifiers. */ -static void cp_push_type(CPDecl *decl, CTypeID id) -{ - CType *ct = ctype_get(decl->cp->cts, id); - CTInfo info = ct->info; - CTSize size = ct->size; - switch (ctype_type(info)) { - case CT_STRUCT: case CT_ENUM: - cp_push(decl, CTINFO(CT_TYPEDEF, id), 0); /* Don't copy unique types. */ - if ((decl->attr & CTF_QUAL)) { /* Push unmerged qualifiers. */ - cp_push(decl, CTINFO(CT_ATTRIB, CTATTRIB(CTA_QUAL)), - (decl->attr & CTF_QUAL)); - decl->attr &= ~CTF_QUAL; - } - break; - case CT_ATTRIB: - if (ctype_isxattrib(info, CTA_QUAL)) - decl->attr &= ~size; /* Remove redundant qualifiers. */ - cp_push_type(decl, ctype_cid(info)); /* Unroll. */ - cp_push(decl, info & ~CTMASK_CID, size); /* Copy type. */ - break; - case CT_ARRAY: - cp_push_type(decl, ctype_cid(info)); /* Unroll. */ - cp_push(decl, info & ~CTMASK_CID, size); /* Copy type. */ - decl->stack[decl->pos].sib = 1; /* Mark as already checked and sized. */ - /* Note: this is not copied to the ct->sib in the C type table. */ - break; - case CT_FUNC: - /* Copy type, link parameters (shared). */ - decl->stack[cp_push(decl, info, size)].sib = ct->sib; - break; - default: - /* Copy type, merge common qualifiers. */ - cp_push(decl, info|(decl->attr & CTF_QUAL), size); - decl->attr &= ~CTF_QUAL; - break; - } -} - -/* Consume the declaration element chain and intern the C type. */ -static CTypeID cp_decl_intern(CPState *cp, CPDecl *decl) -{ - CTypeID id = 0; - CPDeclIdx idx = 0; - CTSize csize = CTSIZE_INVALID; - CTSize cinfo = 0; - do { - CType *ct = &decl->stack[idx]; - CTInfo info = ct->info; - CTInfo size = ct->size; - /* The cid is already part of info for copies of pointers/functions. */ - idx = ct->next; - if (ctype_istypedef(info)) { - lua_assert(id == 0); - id = ctype_cid(info); - /* Always refetch info/size, since struct/enum may have been completed. */ - cinfo = ctype_get(cp->cts, id)->info; - csize = ctype_get(cp->cts, id)->size; - lua_assert(ctype_isstruct(cinfo) || ctype_isenum(cinfo)); - } else if (ctype_isfunc(info)) { /* Intern function. */ - CType *fct; - CTypeID fid; - CTypeID sib; - if (id) { - CType *refct = ctype_raw(cp->cts, id); - /* Reject function or refarray return types. */ - if (ctype_isfunc(refct->info) || ctype_isrefarray(refct->info)) - cp_err(cp, LJ_ERR_FFI_INVTYPE); - } - /* No intervening attributes allowed, skip forward. */ - while (idx) { - CType *ctn = &decl->stack[idx]; - if (!ctype_isattrib(ctn->info)) break; - idx = ctn->next; /* Skip attribute. */ - } - sib = ct->sib; /* Next line may reallocate the C type table. */ - fid = lj_ctype_new(cp->cts, &fct); - csize = CTSIZE_INVALID; - fct->info = cinfo = info + id; - fct->size = size; - fct->sib = sib; - id = fid; - } else if (ctype_isattrib(info)) { - if (ctype_isxattrib(info, CTA_QUAL)) - cinfo |= size; - else if (ctype_isxattrib(info, CTA_ALIGN)) - CTF_INSERT(cinfo, ALIGN, size); - id = lj_ctype_intern(cp->cts, info+id, size); - /* Inherit csize/cinfo from original type. */ - } else { - if (ctype_isnum(info)) { /* Handle mode/vector-size attributes. */ - lua_assert(id == 0); - if (!(info & CTF_BOOL)) { - CTSize msize = ctype_msizeP(decl->attr); - CTSize vsize = ctype_vsizeP(decl->attr); - if (msize && (!(info & CTF_FP) || (msize == 4 || msize == 8))) { - CTSize malign = lj_fls(msize); - if (malign > 4) malign = 4; /* Limit alignment. */ - CTF_INSERT(info, ALIGN, malign); - size = msize; /* Override size via mode. */ - } - if (vsize) { /* Vector size set? */ - CTSize esize = lj_fls(size); - if (vsize >= esize) { - /* Intern the element type first. */ - id = lj_ctype_intern(cp->cts, info, size); - /* Then create a vector (array) with vsize alignment. */ - size = (1u << vsize); - if (vsize > 4) vsize = 4; /* Limit alignment. */ - if (ctype_align(info) > vsize) vsize = ctype_align(info); - info = CTINFO(CT_ARRAY, (info & CTF_QUAL) + CTF_VECTOR + - CTALIGN(vsize)); - } - } - } - } else if (ctype_isptr(info)) { - /* Reject pointer/ref to ref. */ - if (id && ctype_isref(ctype_raw(cp->cts, id)->info)) - cp_err(cp, LJ_ERR_FFI_INVTYPE); - if (ctype_isref(info)) { - info &= ~CTF_VOLATILE; /* Refs are always const, never volatile. */ - /* No intervening attributes allowed, skip forward. */ - while (idx) { - CType *ctn = &decl->stack[idx]; - if (!ctype_isattrib(ctn->info)) break; - idx = ctn->next; /* Skip attribute. */ - } - } - } else if (ctype_isarray(info)) { /* Check for valid array size etc. */ - if (ct->sib == 0) { /* Only check/size arrays not copied by unroll. */ - if (ctype_isref(cinfo)) /* Reject arrays of refs. */ - cp_err(cp, LJ_ERR_FFI_INVTYPE); - /* Reject VLS or unknown-sized types. */ - if (ctype_isvltype(cinfo) || csize == CTSIZE_INVALID) - cp_err(cp, LJ_ERR_FFI_INVSIZE); - /* a[] and a[?] keep their invalid size. */ - if (size != CTSIZE_INVALID) { - uint64_t xsz = (uint64_t)size * csize; - if (xsz >= 0x80000000u) cp_err(cp, LJ_ERR_FFI_INVSIZE); - size = (CTSize)xsz; - } - } - if ((cinfo & CTF_ALIGN) > (info & CTF_ALIGN)) /* Find max. align. */ - info = (info & ~CTF_ALIGN) | (cinfo & CTF_ALIGN); - info |= (cinfo & CTF_QUAL); /* Inherit qual. */ - } else { - lua_assert(ctype_isvoid(info)); - } - csize = size; - cinfo = info+id; - id = lj_ctype_intern(cp->cts, info+id, size); - } - } while (idx); - return id; -} - -/* -- C declaration parser ------------------------------------------------ */ - -#define H_(le, be) LJ_ENDIAN_SELECT(0x##le, 0x##be) - -/* Reset declaration state to declaration specifier. */ -static void cp_decl_reset(CPDecl *decl) -{ - decl->pos = decl->specpos; - decl->top = decl->specpos+1; - decl->stack[decl->specpos].next = 0; - decl->attr = decl->specattr; - decl->fattr = decl->specfattr; - decl->name = NULL; - decl->redir = NULL; -} - -/* Parse constant initializer. */ -/* NYI: FP constants and strings as initializers. */ -static CTypeID cp_decl_constinit(CPState *cp, CType **ctp, CTypeID ctypeid) -{ - CType *ctt = ctype_get(cp->cts, ctypeid); - CTInfo info; - CTSize size; - CPValue k; - CTypeID constid; - while (ctype_isattrib(ctt->info)) { /* Skip attributes. */ - ctypeid = ctype_cid(ctt->info); /* Update ID, too. */ - ctt = ctype_get(cp->cts, ctypeid); - } - info = ctt->info; - size = ctt->size; - if (!ctype_isinteger(info) || !(info & CTF_CONST) || size > 4) - cp_err(cp, LJ_ERR_FFI_INVTYPE); - cp_check(cp, '='); - cp_expr_sub(cp, &k, 0); - constid = lj_ctype_new(cp->cts, ctp); - (*ctp)->info = CTINFO(CT_CONSTVAL, CTF_CONST|ctypeid); - k.u32 <<= 8*(4-size); - if ((info & CTF_UNSIGNED)) - k.u32 >>= 8*(4-size); - else - k.u32 = (uint32_t)((int32_t)k.u32 >> 8*(4-size)); - (*ctp)->size = k.u32; - return constid; -} - -/* Parse size in parentheses as part of attribute. */ -static CTSize cp_decl_sizeattr(CPState *cp) -{ - CTSize sz; - uint32_t oldtmask = cp->tmask; - cp->tmask = CPNS_DEFAULT; /* Required for expression evaluator. */ - cp_check(cp, '('); - sz = cp_expr_ksize(cp); - cp->tmask = oldtmask; - cp_check(cp, ')'); - return sz; -} - -/* Parse alignment attribute. */ -static void cp_decl_align(CPState *cp, CPDecl *decl) -{ - CTSize al = 4; /* Unspecified alignment is 16 bytes. */ - if (cp->tok == '(') { - al = cp_decl_sizeattr(cp); - al = al ? lj_fls(al) : 0; - } - CTF_INSERT(decl->attr, ALIGN, al); - decl->attr |= CTFP_ALIGNED; -} - -/* Parse GCC asm("name") redirect. */ -static void cp_decl_asm(CPState *cp, CPDecl *decl) -{ - UNUSED(decl); - cp_next(cp); - cp_check(cp, '('); - if (cp->tok == CTOK_STRING) { - GCstr *str = cp->str; - while (cp_next(cp) == CTOK_STRING) { - lj_str_pushf(cp->L, "%s%s", strdata(str), strdata(cp->str)); - cp->L->top--; - str = strV(cp->L->top); - } - decl->redir = str; - } - cp_check(cp, ')'); -} - -/* Parse GCC __attribute__((mode(...))). */ -static void cp_decl_mode(CPState *cp, CPDecl *decl) -{ - cp_check(cp, '('); - if (cp->tok == CTOK_IDENT) { - const char *s = strdata(cp->str); - CTSize sz = 0, vlen = 0; - if (s[0] == '_' && s[1] == '_') s += 2; - if (*s == 'V') { - s++; - vlen = *s++ - '0'; - if (*s >= '0' && *s <= '9') - vlen = vlen*10 + (*s++ - '0'); - } - switch (*s++) { - case 'Q': sz = 1; break; - case 'H': sz = 2; break; - case 'S': sz = 4; break; - case 'D': sz = 8; break; - case 'T': sz = 16; break; - case 'O': sz = 32; break; - default: goto bad_size; - } - if (*s == 'I' || *s == 'F') { - CTF_INSERT(decl->attr, MSIZEP, sz); - if (vlen) CTF_INSERT(decl->attr, VSIZEP, lj_fls(vlen*sz)); - } - bad_size: - cp_next(cp); - } - cp_check(cp, ')'); -} - -/* Parse GCC __attribute__((...)). */ -static void cp_decl_gccattribute(CPState *cp, CPDecl *decl) -{ - cp_next(cp); - cp_check(cp, '('); - cp_check(cp, '('); - while (cp->tok != ')') { - if (cp->tok == CTOK_IDENT) { - GCstr *attrstr = cp->str; - cp_next(cp); - switch (attrstr->hash) { - case H_(64a9208e,8ce14319): case H_(8e6331b2,95a282af): /* aligned */ - cp_decl_align(cp, decl); - break; - case H_(42eb47de,f0ede26c): case H_(29f48a09,cf383e0c): /* packed */ - decl->attr |= CTFP_PACKED; - break; - case H_(0a84eef6,8dfab04c): case H_(995cf92c,d5696591): /* mode */ - cp_decl_mode(cp, decl); - break; - case H_(0ab31997,2d5213fa): case H_(bf875611,200e9990): /* vector_size */ - { - CTSize vsize = cp_decl_sizeattr(cp); - if (vsize) CTF_INSERT(decl->attr, VSIZEP, lj_fls(vsize)); - } - break; -#if LJ_TARGET_X86 - case H_(5ad22db8,c689b848): case H_(439150fa,65ea78cb): /* regparm */ - CTF_INSERT(decl->fattr, REGPARM, cp_decl_sizeattr(cp)); - decl->fattr |= CTFP_CCONV; - break; - case H_(18fc0b98,7ff4c074): case H_(4e62abed,0a747424): /* cdecl */ - CTF_INSERT(decl->fattr, CCONV, CTCC_CDECL); - decl->fattr |= CTFP_CCONV; - break; - case H_(72b2e41b,494c5a44): case H_(f2356d59,f25fc9bd): /* thiscall */ - CTF_INSERT(decl->fattr, CCONV, CTCC_THISCALL); - decl->fattr |= CTFP_CCONV; - break; - case H_(0d0ffc42,ab746f88): case H_(21c54ba1,7f0ca7e3): /* fastcall */ - CTF_INSERT(decl->fattr, CCONV, CTCC_FASTCALL); - decl->fattr |= CTFP_CCONV; - break; - case H_(ef76b040,9412e06a): case H_(de56697b,c750e6e1): /* stdcall */ - CTF_INSERT(decl->fattr, CCONV, CTCC_STDCALL); - decl->fattr |= CTFP_CCONV; - break; - case H_(ea78b622,f234bd8e): case H_(252ffb06,8d50f34b): /* sseregparm */ - decl->fattr |= CTF_SSEREGPARM; - decl->fattr |= CTFP_CCONV; - break; -#endif - default: /* Skip all other attributes. */ - goto skip_attr; - } - } else if (cp->tok >= CTOK_FIRSTDECL) { /* For __attribute((const)) etc. */ - cp_next(cp); - skip_attr: - if (cp_opt(cp, '(')) { - while (cp->tok != ')' && cp->tok != CTOK_EOF) cp_next(cp); - cp_check(cp, ')'); - } - } else { - break; - } - if (!cp_opt(cp, ',')) break; - } - cp_check(cp, ')'); - cp_check(cp, ')'); -} - -/* Parse MSVC __declspec(...). */ -static void cp_decl_msvcattribute(CPState *cp, CPDecl *decl) -{ - cp_next(cp); - cp_check(cp, '('); - while (cp->tok == CTOK_IDENT) { - GCstr *attrstr = cp->str; - cp_next(cp); - switch (attrstr->hash) { - case H_(bc2395fa,98f267f8): /* align */ - cp_decl_align(cp, decl); - break; - default: /* Ignore all other attributes. */ - if (cp_opt(cp, '(')) { - while (cp->tok != ')' && cp->tok != CTOK_EOF) cp_next(cp); - cp_check(cp, ')'); - } - break; - } - } - cp_check(cp, ')'); -} - -/* Parse declaration attributes (and common qualifiers). */ -static void cp_decl_attributes(CPState *cp, CPDecl *decl) -{ - for (;;) { - switch (cp->tok) { - case CTOK_CONST: decl->attr |= CTF_CONST; break; - case CTOK_VOLATILE: decl->attr |= CTF_VOLATILE; break; - case CTOK_RESTRICT: break; /* Ignore. */ - case CTOK_EXTENSION: break; /* Ignore. */ - case CTOK_ATTRIBUTE: cp_decl_gccattribute(cp, decl); continue; - case CTOK_ASM: cp_decl_asm(cp, decl); continue; - case CTOK_DECLSPEC: cp_decl_msvcattribute(cp, decl); continue; - case CTOK_CCDECL: -#if LJ_TARGET_X86 - CTF_INSERT(decl->fattr, CCONV, cp->ct->size); - decl->fattr |= CTFP_CCONV; -#endif - break; - case CTOK_PTRSZ: -#if LJ_64 - CTF_INSERT(decl->attr, MSIZEP, cp->ct->size); -#endif - break; - default: return; - } - cp_next(cp); - } -} - -/* Parse struct/union/enum name. */ -static CTypeID cp_struct_name(CPState *cp, CPDecl *sdecl, CTInfo info) -{ - CTypeID sid; - CType *ct; - cp->tmask = CPNS_STRUCT; - cp_next(cp); - cp_decl_attributes(cp, sdecl); - cp->tmask = CPNS_DEFAULT; - if (cp->tok != '{') { - if (cp->tok != CTOK_IDENT) cp_err_token(cp, CTOK_IDENT); - if (cp->val.id) { /* Name of existing struct/union/enum. */ - sid = cp->val.id; - ct = cp->ct; - if ((ct->info ^ info) & (CTMASK_NUM|CTF_UNION)) /* Wrong type. */ - cp_errmsg(cp, 0, LJ_ERR_FFI_REDEF, strdata(gco2str(gcref(ct->name)))); - } else { /* Create named, incomplete struct/union/enum. */ - if ((cp->mode & CPARSE_MODE_NOIMPLICIT)) - cp_errmsg(cp, 0, LJ_ERR_FFI_BADTAG, strdata(cp->str)); - sid = lj_ctype_new(cp->cts, &ct); - ct->info = info; - ct->size = CTSIZE_INVALID; - ctype_setname(ct, cp->str); - lj_ctype_addname(cp->cts, ct, sid); - } - cp_next(cp); - } else { /* Create anonymous, incomplete struct/union/enum. */ - sid = lj_ctype_new(cp->cts, &ct); - ct->info = info; - ct->size = CTSIZE_INVALID; - } - if (cp->tok == '{') { - if (ct->size != CTSIZE_INVALID || ct->sib) - cp_errmsg(cp, 0, LJ_ERR_FFI_REDEF, strdata(gco2str(gcref(ct->name)))); - ct->sib = 1; /* Indicate the type is currently being defined. */ - } - return sid; -} - -/* Determine field alignment. */ -static CTSize cp_field_align(CPState *cp, CType *ct, CTInfo info) -{ - CTSize align = ctype_align(info); - UNUSED(cp); UNUSED(ct); -#if (LJ_TARGET_X86 && !LJ_ABI_WIN) || (LJ_TARGET_ARM && __APPLE__) - /* The SYSV i386 and iOS ABIs limit alignment of non-vector fields to 2^2. */ - if (align > 2 && !(info & CTFP_ALIGNED)) { - if (ctype_isarray(info) && !(info & CTF_VECTOR)) { - do { - ct = ctype_rawchild(cp->cts, ct); - info = ct->info; - } while (ctype_isarray(info) && !(info & CTF_VECTOR)); - } - if (ctype_isnum(info) || ctype_isenum(info)) - align = 2; - } -#endif - return align; -} - -/* Layout struct/union fields. */ -static void cp_struct_layout(CPState *cp, CTypeID sid, CTInfo sattr) -{ - CTSize bofs = 0, bmaxofs = 0; /* Bit offset and max. bit offset. */ - CTSize maxalign = ctype_align(sattr); - CType *sct = ctype_get(cp->cts, sid); - CTInfo sinfo = sct->info; - CTypeID fieldid = sct->sib; - while (fieldid) { - CType *ct = ctype_get(cp->cts, fieldid); - CTInfo attr = ct->size; /* Field declaration attributes (temp.). */ - - if (ctype_isfield(ct->info) || - (ctype_isxattrib(ct->info, CTA_SUBTYPE) && attr)) { - CTSize align, amask; /* Alignment (pow2) and alignment mask (bits). */ - CTSize sz; - CTInfo info = lj_ctype_info(cp->cts, ctype_cid(ct->info), &sz); - CTSize bsz, csz = 8*sz; /* Field size and container size (in bits). */ - sinfo |= (info & (CTF_QUAL|CTF_VLA)); /* Merge pseudo-qualifiers. */ - - /* Check for size overflow and determine alignment. */ - if (sz >= 0x20000000u || bofs + csz < bofs || (info & CTF_VLA)) { - if (!(sz == CTSIZE_INVALID && ctype_isarray(info) && - !(sinfo & CTF_UNION))) - cp_err(cp, LJ_ERR_FFI_INVSIZE); - csz = sz = 0; /* Treat a[] and a[?] as zero-sized. */ - } - align = cp_field_align(cp, ct, info); - if (((attr|sattr) & CTFP_PACKED) || - ((attr & CTFP_ALIGNED) && ctype_align(attr) > align)) - align = ctype_align(attr); - if (cp->packstack[cp->curpack] < align) - align = cp->packstack[cp->curpack]; - if (align > maxalign) maxalign = align; - amask = (8u << align) - 1; - - bsz = ctype_bitcsz(ct->info); /* Bitfield size (temp.). */ - if (bsz == CTBSZ_FIELD || !ctype_isfield(ct->info)) { - bsz = csz; /* Regular fields or subtypes always fill the container. */ - bofs = (bofs + amask) & ~amask; /* Start new aligned field. */ - ct->size = (bofs >> 3); /* Store field offset. */ - } else { /* Bitfield. */ - if (bsz == 0 || (attr & CTFP_ALIGNED) || - (!((attr|sattr) & CTFP_PACKED) && (bofs & amask) + bsz > csz)) - bofs = (bofs + amask) & ~amask; /* Start new aligned field. */ - - /* Prefer regular field over bitfield. */ - if (bsz == csz && (bofs & amask) == 0) { - ct->info = CTINFO(CT_FIELD, ctype_cid(ct->info)); - ct->size = (bofs >> 3); /* Store field offset. */ - } else { - ct->info = CTINFO(CT_BITFIELD, - (info & (CTF_QUAL|CTF_UNSIGNED|CTF_BOOL)) + - (csz << (CTSHIFT_BITCSZ-3)) + (bsz << CTSHIFT_BITBSZ)); -#if LJ_BE - ct->info += ((csz - (bofs & (csz-1)) - bsz) << CTSHIFT_BITPOS); -#else - ct->info += ((bofs & (csz-1)) << CTSHIFT_BITPOS); -#endif - ct->size = ((bofs & ~(csz-1)) >> 3); /* Store container offset. */ - } - } - - /* Determine next offset or max. offset. */ - if ((sinfo & CTF_UNION)) { - if (bsz > bmaxofs) bmaxofs = bsz; - } else { - bofs += bsz; - } - } /* All other fields in the chain are already set up. */ - - fieldid = ct->sib; - } - - /* Complete struct/union. */ - sct->info = sinfo + CTALIGN(maxalign); - bofs = (sinfo & CTF_UNION) ? bmaxofs : bofs; - maxalign = (8u << maxalign) - 1; - sct->size = (((bofs + maxalign) & ~maxalign) >> 3); -} - -/* Parse struct/union declaration. */ -static CTypeID cp_decl_struct(CPState *cp, CPDecl *sdecl, CTInfo sinfo) -{ - CTypeID sid = cp_struct_name(cp, sdecl, sinfo); - if (cp_opt(cp, '{')) { /* Struct/union definition. */ - CTypeID lastid = sid; - int lastdecl = 0; - while (cp->tok != '}') { - CPDecl decl; - CPscl scl = cp_decl_spec(cp, &decl, CDF_STATIC); - decl.mode = scl ? CPARSE_MODE_DIRECT : - CPARSE_MODE_DIRECT|CPARSE_MODE_ABSTRACT|CPARSE_MODE_FIELD; - - for (;;) { - CTypeID ctypeid; - - if (lastdecl) cp_err_token(cp, '}'); - - /* Parse field declarator. */ - decl.bits = CTSIZE_INVALID; - cp_declarator(cp, &decl); - ctypeid = cp_decl_intern(cp, &decl); - - if ((scl & CDF_STATIC)) { /* Static constant in struct namespace. */ - CType *ct; - CTypeID fieldid = cp_decl_constinit(cp, &ct, ctypeid); - ctype_get(cp->cts, lastid)->sib = fieldid; - lastid = fieldid; - ctype_setname(ct, decl.name); - } else { - CTSize bsz = CTBSZ_FIELD; /* Temp. for layout phase. */ - CType *ct; - CTypeID fieldid = lj_ctype_new(cp->cts, &ct); /* Do this first. */ - CType *tct = ctype_raw(cp->cts, ctypeid); - - if (decl.bits == CTSIZE_INVALID) { /* Regular field. */ - if (ctype_isarray(tct->info) && tct->size == CTSIZE_INVALID) - lastdecl = 1; /* a[] or a[?] must be the last declared field. */ - - /* Accept transparent struct/union/enum. */ - if (!decl.name) { - if (!((ctype_isstruct(tct->info) && !(tct->info & CTF_VLA)) || - ctype_isenum(tct->info))) - cp_err_token(cp, CTOK_IDENT); - ct->info = CTINFO(CT_ATTRIB, CTATTRIB(CTA_SUBTYPE) + ctypeid); - ct->size = ctype_isstruct(tct->info) ? - (decl.attr|0x80000000u) : 0; /* For layout phase. */ - goto add_field; - } - } else { /* Bitfield. */ - bsz = decl.bits; - if (!ctype_isinteger_or_bool(tct->info) || - (bsz == 0 && decl.name) || 8*tct->size > CTBSZ_MAX || - bsz > ((tct->info & CTF_BOOL) ? 1 : 8*tct->size)) - cp_errmsg(cp, ':', LJ_ERR_BADVAL); - } - - /* Create temporary field for layout phase. */ - ct->info = CTINFO(CT_FIELD, ctypeid + (bsz << CTSHIFT_BITCSZ)); - ct->size = decl.attr; - if (decl.name) ctype_setname(ct, decl.name); - - add_field: - ctype_get(cp->cts, lastid)->sib = fieldid; - lastid = fieldid; - } - if (!cp_opt(cp, ',')) break; - cp_decl_reset(&decl); - } - cp_check(cp, ';'); - } - cp_check(cp, '}'); - ctype_get(cp->cts, lastid)->sib = 0; /* Drop sib = 1 for empty structs. */ - cp_decl_attributes(cp, sdecl); /* Layout phase needs postfix attributes. */ - cp_struct_layout(cp, sid, sdecl->attr); - } - return sid; -} - -/* Parse enum declaration. */ -static CTypeID cp_decl_enum(CPState *cp, CPDecl *sdecl) -{ - CTypeID eid = cp_struct_name(cp, sdecl, CTINFO(CT_ENUM, CTID_VOID)); - CTInfo einfo = CTINFO(CT_ENUM, CTALIGN(2) + CTID_UINT32); - CTSize esize = 4; /* Only 32 bit enums are supported. */ - if (cp_opt(cp, '{')) { /* Enum definition. */ - CPValue k; - CTypeID lastid = eid; - k.u32 = 0; - k.id = CTID_INT32; - do { - GCstr *name = cp->str; - if (cp->tok != CTOK_IDENT) cp_err_token(cp, CTOK_IDENT); - if (cp->val.id) cp_errmsg(cp, 0, LJ_ERR_FFI_REDEF, strdata(name)); - cp_next(cp); - if (cp_opt(cp, '=')) { - cp_expr_kint(cp, &k); - if (k.id == CTID_UINT32) { - /* C99 says that enum constants are always (signed) integers. - ** But since unsigned constants like 0x80000000 are quite common, - ** those are left as uint32_t. - */ - if (k.i32 >= 0) k.id = CTID_INT32; - } else { - /* OTOH it's common practice and even mandated by some ABIs - ** that the enum type itself is unsigned, unless there are any - ** negative constants. - */ - k.id = CTID_INT32; - if (k.i32 < 0) einfo = CTINFO(CT_ENUM, CTALIGN(2) + CTID_INT32); - } - } - /* Add named enum constant. */ - { - CType *ct; - CTypeID constid = lj_ctype_new(cp->cts, &ct); - ctype_get(cp->cts, lastid)->sib = constid; - lastid = constid; - ctype_setname(ct, name); - ct->info = CTINFO(CT_CONSTVAL, CTF_CONST|k.id); - ct->size = k.u32++; - if (k.u32 == 0x80000000u) k.id = CTID_UINT32; - lj_ctype_addname(cp->cts, ct, constid); - } - if (!cp_opt(cp, ',')) break; - } while (cp->tok != '}'); /* Trailing ',' is ok. */ - cp_check(cp, '}'); - /* Complete enum. */ - ctype_get(cp->cts, eid)->info = einfo; - ctype_get(cp->cts, eid)->size = esize; - } - return eid; -} - -/* Parse declaration specifiers. */ -static CPscl cp_decl_spec(CPState *cp, CPDecl *decl, CPscl scl) -{ - uint32_t cds = 0, sz = 0; - CTypeID tdef = 0; - - decl->cp = cp; - decl->mode = cp->mode; - decl->name = NULL; - decl->redir = NULL; - decl->attr = 0; - decl->fattr = 0; - decl->pos = decl->top = 0; - decl->stack[0].next = 0; - - for (;;) { /* Parse basic types. */ - cp_decl_attributes(cp, decl); - if (cp->tok >= CTOK_FIRSTDECL && cp->tok <= CTOK_LASTDECLFLAG) { - uint32_t cbit; - if (cp->ct->size) { - if (sz) goto end_decl; - sz = cp->ct->size; - } - cbit = (1u << (cp->tok - CTOK_FIRSTDECL)); - cds = cds | cbit | ((cbit & cds & CDF_LONG) << 1); - if (cp->tok >= CTOK_FIRSTSCL) { - if (!(scl & cbit)) cp_errmsg(cp, cp->tok, LJ_ERR_FFI_BADSCL); - } else if (tdef) { - goto end_decl; - } - cp_next(cp); - continue; - } - if (sz || tdef || - (cds & (CDF_SHORT|CDF_LONG|CDF_SIGNED|CDF_UNSIGNED|CDF_COMPLEX))) - break; - switch (cp->tok) { - case CTOK_STRUCT: - tdef = cp_decl_struct(cp, decl, CTINFO(CT_STRUCT, 0)); - continue; - case CTOK_UNION: - tdef = cp_decl_struct(cp, decl, CTINFO(CT_STRUCT, CTF_UNION)); - continue; - case CTOK_ENUM: - tdef = cp_decl_enum(cp, decl); - continue; - case CTOK_IDENT: - if (ctype_istypedef(cp->ct->info)) { - tdef = ctype_cid(cp->ct->info); /* Get typedef. */ - cp_next(cp); - continue; - } - break; - case '$': - tdef = cp->val.id; - cp_next(cp); - continue; - default: - break; - } - break; - } -end_decl: - - if ((cds & CDF_COMPLEX)) /* Use predefined complex types. */ - tdef = sz == 4 ? CTID_COMPLEX_FLOAT : CTID_COMPLEX_DOUBLE; - - if (tdef) { - cp_push_type(decl, tdef); - } else if ((cds & CDF_VOID)) { - cp_push(decl, CTINFO(CT_VOID, (decl->attr & CTF_QUAL)), CTSIZE_INVALID); - decl->attr &= ~CTF_QUAL; - } else { - /* Determine type info and size. */ - CTInfo info = CTINFO(CT_NUM, (cds & CDF_UNSIGNED) ? CTF_UNSIGNED : 0); - if ((cds & CDF_BOOL)) { - if ((cds & ~(CDF_SCL|CDF_BOOL|CDF_INT|CDF_SIGNED|CDF_UNSIGNED))) - cp_errmsg(cp, 0, LJ_ERR_FFI_INVTYPE); - info |= CTF_BOOL; - if (!(cds & CDF_SIGNED)) info |= CTF_UNSIGNED; - if (!sz) { - sz = 1; - } - } else if ((cds & CDF_FP)) { - info = CTINFO(CT_NUM, CTF_FP); - if ((cds & CDF_LONG)) sz = sizeof(long double); - } else if ((cds & CDF_CHAR)) { - if ((cds & (CDF_CHAR|CDF_SIGNED|CDF_UNSIGNED)) == CDF_CHAR) - info |= CTF_UCHAR; /* Handle platforms where char is unsigned. */ - } else if ((cds & CDF_SHORT)) { - sz = sizeof(short); - } else if ((cds & CDF_LONGLONG)) { - sz = 8; - } else if ((cds & CDF_LONG)) { - info |= CTF_LONG; - sz = sizeof(long); - } else if (!sz) { - if (!(cds & (CDF_SIGNED|CDF_UNSIGNED))) - cp_errmsg(cp, cp->tok, LJ_ERR_FFI_DECLSPEC); - sz = sizeof(int); - } - lua_assert(sz != 0); - info += CTALIGN(lj_fls(sz)); /* Use natural alignment. */ - info += (decl->attr & CTF_QUAL); /* Merge qualifiers. */ - cp_push(decl, info, sz); - decl->attr &= ~CTF_QUAL; - } - decl->specpos = decl->pos; - decl->specattr = decl->attr; - decl->specfattr = decl->fattr; - return (cds & CDF_SCL); /* Return storage class. */ -} - -/* Parse array declaration. */ -static void cp_decl_array(CPState *cp, CPDecl *decl) -{ - CTInfo info = CTINFO(CT_ARRAY, 0); - CTSize nelem = CTSIZE_INVALID; /* Default size for a[] or a[?]. */ - cp_decl_attributes(cp, decl); - if (cp_opt(cp, '?')) - info |= CTF_VLA; /* Create variable-length array a[?]. */ - else if (cp->tok != ']') - nelem = cp_expr_ksize(cp); - cp_check(cp, ']'); - cp_add(decl, info, nelem); -} - -/* Parse function declaration. */ -static void cp_decl_func(CPState *cp, CPDecl *fdecl) -{ - CTSize nargs = 0; - CTInfo info = CTINFO(CT_FUNC, 0); - CTypeID lastid = 0, anchor = 0; - if (cp->tok != ')') { - do { - CPDecl decl; - CTypeID ctypeid, fieldid; - CType *ct; - if (cp_opt(cp, '.')) { /* Vararg function. */ - cp_check(cp, '.'); /* Workaround for the minimalistic lexer. */ - cp_check(cp, '.'); - info |= CTF_VARARG; - break; - } - cp_decl_spec(cp, &decl, CDF_REGISTER); - decl.mode = CPARSE_MODE_DIRECT|CPARSE_MODE_ABSTRACT; - cp_declarator(cp, &decl); - ctypeid = cp_decl_intern(cp, &decl); - ct = ctype_raw(cp->cts, ctypeid); - if (ctype_isvoid(ct->info)) - break; - else if (ctype_isrefarray(ct->info)) - ctypeid = lj_ctype_intern(cp->cts, - CTINFO(CT_PTR, CTALIGN_PTR|ctype_cid(ct->info)), CTSIZE_PTR); - else if (ctype_isfunc(ct->info)) - ctypeid = lj_ctype_intern(cp->cts, - CTINFO(CT_PTR, CTALIGN_PTR|ctypeid), CTSIZE_PTR); - /* Add new parameter. */ - fieldid = lj_ctype_new(cp->cts, &ct); - if (anchor) - ctype_get(cp->cts, lastid)->sib = fieldid; - else - anchor = fieldid; - lastid = fieldid; - if (decl.name) ctype_setname(ct, decl.name); - ct->info = CTINFO(CT_FIELD, ctypeid); - ct->size = nargs++; - } while (cp_opt(cp, ',')); - } - cp_check(cp, ')'); - if (cp_opt(cp, '{')) { /* Skip function definition. */ - int level = 1; - cp->mode |= CPARSE_MODE_SKIP; - for (;;) { - if (cp->tok == '{') level++; - else if (cp->tok == '}' && --level == 0) break; - else if (cp->tok == CTOK_EOF) cp_err_token(cp, '}'); - cp_next(cp); - } - cp->mode &= ~CPARSE_MODE_SKIP; - cp->tok = ';'; /* Ok for cp_decl_multi(), error in cp_decl_single(). */ - } - info |= (fdecl->fattr & ~CTMASK_CID); - fdecl->fattr = 0; - fdecl->stack[cp_add(fdecl, info, nargs)].sib = anchor; -} - -/* Parse declarator. */ -static void cp_declarator(CPState *cp, CPDecl *decl) -{ - if (++cp->depth > CPARSE_MAX_DECLDEPTH) cp_err(cp, LJ_ERR_XLEVELS); - - for (;;) { /* Head of declarator. */ - if (cp_opt(cp, '*')) { /* Pointer. */ - CTSize sz; - CTInfo info; - cp_decl_attributes(cp, decl); - sz = CTSIZE_PTR; - info = CTINFO(CT_PTR, CTALIGN_PTR); -#if LJ_64 - if (ctype_msizeP(decl->attr) == 4) { - sz = 4; - info = CTINFO(CT_PTR, CTALIGN(2)); - } -#endif - info += (decl->attr & (CTF_QUAL|CTF_REF)); - decl->attr &= ~(CTF_QUAL|(CTMASK_MSIZEP<attr &= ~(CTF_QUAL|(CTMASK_MSIZEP<mode & CPARSE_MODE_ABSTRACT) && - (cp->tok == ')' || cp_istypedecl(cp))) goto func_decl; - pos = decl->pos; - cp_declarator(cp, decl); - cp_check(cp, ')'); - decl->pos = pos; - } else if (cp->tok == CTOK_IDENT) { /* Direct declarator. */ - if (!(decl->mode & CPARSE_MODE_DIRECT)) cp_err_token(cp, CTOK_EOF); - decl->name = cp->str; - decl->nameid = cp->val.id; - cp_next(cp); - } else { /* Abstract declarator. */ - if (!(decl->mode & CPARSE_MODE_ABSTRACT)) cp_err_token(cp, CTOK_IDENT); - } - - for (;;) { /* Tail of declarator. */ - if (cp_opt(cp, '[')) { /* Array. */ - cp_decl_array(cp, decl); - } else if (cp_opt(cp, '(')) { /* Function. */ - func_decl: - cp_decl_func(cp, decl); - } else { - break; - } - } - - if ((decl->mode & CPARSE_MODE_FIELD) && cp_opt(cp, ':')) /* Field width. */ - decl->bits = cp_expr_ksize(cp); - - /* Process postfix attributes. */ - cp_decl_attributes(cp, decl); - cp_push_attributes(decl); - - cp->depth--; -} - -/* Parse an abstract type declaration and return it's C type ID. */ -static CTypeID cp_decl_abstract(CPState *cp) -{ - CPDecl decl; - cp_decl_spec(cp, &decl, 0); - decl.mode = CPARSE_MODE_ABSTRACT; - cp_declarator(cp, &decl); - return cp_decl_intern(cp, &decl); -} - -/* Handle pragmas. */ -static void cp_pragma(CPState *cp, BCLine pragmaline) -{ - cp_next(cp); - if (cp->tok == CTOK_IDENT && - cp->str->hash == H_(e79b999f,42ca3e85)) { /* pack */ - cp_next(cp); - cp_check(cp, '('); - if (cp->tok == CTOK_IDENT) { - if (cp->str->hash == H_(738e923c,a1b65954)) { /* push */ - if (cp->curpack < CPARSE_MAX_PACKSTACK) { - cp->packstack[cp->curpack+1] = cp->packstack[cp->curpack]; - cp->curpack++; - } - } else if (cp->str->hash == H_(6c71cf27,6c71cf27)) { /* pop */ - if (cp->curpack > 0) cp->curpack--; - } else { - cp_errmsg(cp, cp->tok, LJ_ERR_XSYMBOL); - } - cp_next(cp); - if (!cp_opt(cp, ',')) goto end_pack; - } - if (cp->tok == CTOK_INTEGER) { - cp->packstack[cp->curpack] = cp->val.u32 ? lj_fls(cp->val.u32) : 0; - cp_next(cp); - } else { - cp->packstack[cp->curpack] = 255; - } - end_pack: - cp_check(cp, ')'); - } else { /* Ignore all other pragmas. */ - while (cp->tok != CTOK_EOF && cp->linenumber == pragmaline) - cp_next(cp); - } -} - -/* Parse multiple C declarations of types or extern identifiers. */ -static void cp_decl_multi(CPState *cp) -{ - int first = 1; - while (cp->tok != CTOK_EOF) { - CPDecl decl; - CPscl scl; - if (cp_opt(cp, ';')) { /* Skip empty statements. */ - first = 0; - continue; - } - if (cp->tok == '#') { /* Workaround, since we have no preprocessor, yet. */ - BCLine pragmaline = cp->linenumber; - if (!(cp_next(cp) == CTOK_IDENT && - cp->str->hash == H_(f5e6b4f8,1d509107))) /* pragma */ - cp_errmsg(cp, cp->tok, LJ_ERR_XSYMBOL); - cp_pragma(cp, pragmaline); - continue; - } - scl = cp_decl_spec(cp, &decl, CDF_TYPEDEF|CDF_EXTERN|CDF_STATIC); - if ((cp->tok == ';' || cp->tok == CTOK_EOF) && - ctype_istypedef(decl.stack[0].info)) { - CTInfo info = ctype_rawchild(cp->cts, &decl.stack[0])->info; - if (ctype_isstruct(info) || ctype_isenum(info)) - goto decl_end; /* Accept empty declaration of struct/union/enum. */ - } - for (;;) { - CTypeID ctypeid; - cp_declarator(cp, &decl); - ctypeid = cp_decl_intern(cp, &decl); - if (decl.name && !decl.nameid) { /* NYI: redeclarations are ignored. */ - CType *ct; - CTypeID id; - if ((scl & CDF_TYPEDEF)) { /* Create new typedef. */ - id = lj_ctype_new(cp->cts, &ct); - ct->info = CTINFO(CT_TYPEDEF, ctypeid); - goto noredir; - } else if (ctype_isfunc(ctype_get(cp->cts, ctypeid)->info)) { - /* Treat both static and extern function declarations as extern. */ - ct = ctype_get(cp->cts, ctypeid); - /* We always get new anonymous functions (typedefs are copied). */ - lua_assert(gcref(ct->name) == NULL); - id = ctypeid; /* Just name it. */ - } else if ((scl & CDF_STATIC)) { /* Accept static constants. */ - id = cp_decl_constinit(cp, &ct, ctypeid); - goto noredir; - } else { /* External references have extern or no storage class. */ - id = lj_ctype_new(cp->cts, &ct); - ct->info = CTINFO(CT_EXTERN, ctypeid); - } - if (decl.redir) { /* Add attribute for redirected symbol name. */ - CType *cta; - CTypeID aid = lj_ctype_new(cp->cts, &cta); - ct = ctype_get(cp->cts, id); /* Table may have been reallocated. */ - cta->info = CTINFO(CT_ATTRIB, CTATTRIB(CTA_REDIR)); - cta->sib = ct->sib; - ct->sib = aid; - ctype_setname(cta, decl.redir); - } - noredir: - ctype_setname(ct, decl.name); - lj_ctype_addname(cp->cts, ct, id); - } - if (!cp_opt(cp, ',')) break; - cp_decl_reset(&decl); - } - decl_end: - if (cp->tok == CTOK_EOF && first) break; /* May omit ';' for 1 decl. */ - first = 0; - cp_check(cp, ';'); - } -} - -/* Parse a single C type declaration. */ -static void cp_decl_single(CPState *cp) -{ - CPDecl decl; - cp_decl_spec(cp, &decl, 0); - cp_declarator(cp, &decl); - cp->val.id = cp_decl_intern(cp, &decl); - if (cp->tok != CTOK_EOF) cp_err_token(cp, CTOK_EOF); -} - -#undef H_ - -/* ------------------------------------------------------------------------ */ - -/* Protected callback for C parser. */ -static TValue *cpcparser(lua_State *L, lua_CFunction dummy, void *ud) -{ - CPState *cp = (CPState *)ud; - UNUSED(dummy); - cframe_errfunc(L->cframe) = -1; /* Inherit error function. */ - cp_init(cp); - if ((cp->mode & CPARSE_MODE_MULTI)) - cp_decl_multi(cp); - else - cp_decl_single(cp); - if (cp->param && cp->param != cp->L->top) - cp_err(cp, LJ_ERR_FFI_NUMPARAM); - lua_assert(cp->depth == 0); - return NULL; -} - -/* C parser. */ -int lj_cparse(CPState *cp) -{ - LJ_CTYPE_SAVE(cp->cts); - int errcode = lj_vm_cpcall(cp->L, NULL, cp, cpcparser); - if (errcode) - LJ_CTYPE_RESTORE(cp->cts); - cp_cleanup(cp); - return errcode; -} - -#endif diff --git a/deps/luajit/src/lj_cparse.h b/deps/luajit/src/lj_cparse.h deleted file mode 100644 index 441580d..0000000 --- a/deps/luajit/src/lj_cparse.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -** C declaration parser. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CPARSE_H -#define _LJ_CPARSE_H - -#include "lj_obj.h" -#include "lj_ctype.h" - -#if LJ_HASFFI - -/* C parser limits. */ -#define CPARSE_MAX_BUF 32768 /* Max. token buffer size. */ -#define CPARSE_MAX_DECLSTACK 100 /* Max. declaration stack depth. */ -#define CPARSE_MAX_DECLDEPTH 20 /* Max. recursive declaration depth. */ -#define CPARSE_MAX_PACKSTACK 7 /* Max. pack pragma stack depth. */ - -/* Flags for C parser mode. */ -#define CPARSE_MODE_MULTI 1 /* Process multiple declarations. */ -#define CPARSE_MODE_ABSTRACT 2 /* Accept abstract declarators. */ -#define CPARSE_MODE_DIRECT 4 /* Accept direct declarators. */ -#define CPARSE_MODE_FIELD 8 /* Accept field width in bits, too. */ -#define CPARSE_MODE_NOIMPLICIT 16 /* Reject implicit declarations. */ -#define CPARSE_MODE_SKIP 32 /* Skip definitions, ignore errors. */ - -typedef int CPChar; /* C parser character. Unsigned ext. from char. */ -typedef int CPToken; /* C parser token. */ - -/* C parser internal value representation. */ -typedef struct CPValue { - union { - int32_t i32; /* Value for CTID_INT32. */ - uint32_t u32; /* Value for CTID_UINT32. */ - }; - CTypeID id; /* C Type ID of the value. */ -} CPValue; - -/* C parser state. */ -typedef struct CPState { - CPChar c; /* Current character. */ - CPToken tok; /* Current token. */ - CPValue val; /* Token value. */ - GCstr *str; /* Interned string of identifier/keyword. */ - CType *ct; /* C type table entry. */ - const char *p; /* Current position in input buffer. */ - SBuf sb; /* String buffer for tokens. */ - lua_State *L; /* Lua state. */ - CTState *cts; /* C type state. */ - TValue *param; /* C type parameters. */ - const char *srcname; /* Current source name. */ - BCLine linenumber; /* Input line counter. */ - int depth; /* Recursive declaration depth. */ - uint32_t tmask; /* Type mask for next identifier. */ - uint32_t mode; /* C parser mode. */ - uint8_t packstack[CPARSE_MAX_PACKSTACK]; /* Stack for pack pragmas. */ - uint8_t curpack; /* Current position in pack pragma stack. */ -} CPState; - -LJ_FUNC int lj_cparse(CPState *cp); - -#endif - -#endif diff --git a/deps/luajit/src/lj_crecord.c b/deps/luajit/src/lj_crecord.c deleted file mode 100644 index a46665e..0000000 --- a/deps/luajit/src/lj_crecord.c +++ /dev/null @@ -1,1671 +0,0 @@ -/* -** Trace recorder for C data operations. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_ffrecord_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT && LJ_HASFFI - -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_frame.h" -#include "lj_ctype.h" -#include "lj_cdata.h" -#include "lj_cparse.h" -#include "lj_cconv.h" -#include "lj_clib.h" -#include "lj_ccall.h" -#include "lj_ff.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_record.h" -#include "lj_ffrecord.h" -#include "lj_snap.h" -#include "lj_crecord.h" -#include "lj_dispatch.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -#define emitconv(a, dt, st, flags) \ - emitir(IRT(IR_CONV, (dt)), (a), (st)|((dt) << 5)|(flags)) - -/* -- C type checks ------------------------------------------------------- */ - -static GCcdata *argv2cdata(jit_State *J, TRef tr, cTValue *o) -{ - GCcdata *cd; - TRef trtypeid; - if (!tref_iscdata(tr)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - cd = cdataV(o); - /* Specialize to the CTypeID. */ - trtypeid = emitir(IRT(IR_FLOAD, IRT_U16), tr, IRFL_CDATA_CTYPEID); - emitir(IRTG(IR_EQ, IRT_INT), trtypeid, lj_ir_kint(J, (int32_t)cd->ctypeid)); - return cd; -} - -/* Specialize to the CTypeID held by a cdata constructor. */ -static CTypeID crec_constructor(jit_State *J, GCcdata *cd, TRef tr) -{ - CTypeID id; - lua_assert(tref_iscdata(tr) && cd->ctypeid == CTID_CTYPEID); - id = *(CTypeID *)cdataptr(cd); - tr = emitir(IRT(IR_FLOAD, IRT_INT), tr, IRFL_CDATA_INT); - emitir(IRTG(IR_EQ, IRT_INT), tr, lj_ir_kint(J, (int32_t)id)); - return id; -} - -static CTypeID argv2ctype(jit_State *J, TRef tr, cTValue *o) -{ - if (tref_isstr(tr)) { - GCstr *s = strV(o); - CPState cp; - CTypeID oldtop; - /* Specialize to the string containing the C type declaration. */ - emitir(IRTG(IR_EQ, IRT_STR), tr, lj_ir_kstr(J, s)); - cp.L = J->L; - cp.cts = ctype_ctsG(J2G(J)); - oldtop = cp.cts->top; - cp.srcname = strdata(s); - cp.p = strdata(s); - cp.param = NULL; - cp.mode = CPARSE_MODE_ABSTRACT|CPARSE_MODE_NOIMPLICIT; - if (lj_cparse(&cp) || cp.cts->top > oldtop) /* Avoid new struct defs. */ - lj_trace_err(J, LJ_TRERR_BADTYPE); - return cp.val.id; - } else { - GCcdata *cd = argv2cdata(J, tr, o); - return cd->ctypeid == CTID_CTYPEID ? crec_constructor(J, cd, tr) : - cd->ctypeid; - } -} - -/* Convert CType to IRType (if possible). */ -static IRType crec_ct2irt(CTState *cts, CType *ct) -{ - if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct); - if (LJ_LIKELY(ctype_isnum(ct->info))) { - if ((ct->info & CTF_FP)) { - if (ct->size == sizeof(double)) - return IRT_NUM; - else if (ct->size == sizeof(float)) - return IRT_FLOAT; - } else { - uint32_t b = lj_fls(ct->size); - if (b <= 3) - return IRT_I8 + 2*b + ((ct->info & CTF_UNSIGNED) ? 1 : 0); - } - } else if (ctype_isptr(ct->info)) { - return (LJ_64 && ct->size == 8) ? IRT_P64 : IRT_P32; - } else if (ctype_iscomplex(ct->info)) { - if (ct->size == 2*sizeof(double)) - return IRT_NUM; - else if (ct->size == 2*sizeof(float)) - return IRT_FLOAT; - } - return IRT_CDATA; -} - -/* -- Optimized memory fill and copy -------------------------------------- */ - -/* Maximum length and unroll of inlined copy/fill. */ -#define CREC_COPY_MAXUNROLL 16 -#define CREC_COPY_MAXLEN 128 - -#define CREC_FILL_MAXUNROLL 16 - -/* Number of windowed registers used for optimized memory copy. */ -#if LJ_TARGET_X86 -#define CREC_COPY_REGWIN 2 -#elif LJ_TARGET_PPC || LJ_TARGET_MIPS -#define CREC_COPY_REGWIN 8 -#else -#define CREC_COPY_REGWIN 4 -#endif - -/* List of memory offsets for copy/fill. */ -typedef struct CRecMemList { - CTSize ofs; /* Offset in bytes. */ - IRType tp; /* Type of load/store. */ - TRef trofs; /* TRef of interned offset. */ - TRef trval; /* TRef of load value. */ -} CRecMemList; - -/* Generate copy list for element-wise struct copy. */ -static MSize crec_copy_struct(CRecMemList *ml, CTState *cts, CType *ct) -{ - CTypeID fid = ct->sib; - MSize mlp = 0; - while (fid) { - CType *df = ctype_get(cts, fid); - fid = df->sib; - if (ctype_isfield(df->info)) { - CType *cct; - IRType tp; - if (!gcref(df->name)) continue; /* Ignore unnamed fields. */ - cct = ctype_rawchild(cts, df); /* Field type. */ - tp = crec_ct2irt(cts, cct); - if (tp == IRT_CDATA) return 0; /* NYI: aggregates. */ - if (mlp >= CREC_COPY_MAXUNROLL) return 0; - ml[mlp].ofs = df->size; - ml[mlp].tp = tp; - mlp++; - if (ctype_iscomplex(cct->info)) { - if (mlp >= CREC_COPY_MAXUNROLL) return 0; - ml[mlp].ofs = df->size + (cct->size >> 1); - ml[mlp].tp = tp; - mlp++; - } - } else if (!ctype_isconstval(df->info)) { - /* NYI: bitfields and sub-structures. */ - return 0; - } - } - return mlp; -} - -/* Generate unrolled copy list, from highest to lowest step size/alignment. */ -static MSize crec_copy_unroll(CRecMemList *ml, CTSize len, CTSize step, - IRType tp) -{ - CTSize ofs = 0; - MSize mlp = 0; - if (tp == IRT_CDATA) tp = IRT_U8 + 2*lj_fls(step); - do { - while (ofs + step <= len) { - if (mlp >= CREC_COPY_MAXUNROLL) return 0; - ml[mlp].ofs = ofs; - ml[mlp].tp = tp; - mlp++; - ofs += step; - } - step >>= 1; - tp -= 2; - } while (ofs < len); - return mlp; -} - -/* -** Emit copy list with windowed loads/stores. -** LJ_TARGET_UNALIGNED: may emit unaligned loads/stores (not marked as such). -*/ -static void crec_copy_emit(jit_State *J, CRecMemList *ml, MSize mlp, - TRef trdst, TRef trsrc) -{ - MSize i, j, rwin = 0; - for (i = 0, j = 0; i < mlp; ) { - TRef trofs = lj_ir_kintp(J, ml[i].ofs); - TRef trsptr = emitir(IRT(IR_ADD, IRT_PTR), trsrc, trofs); - ml[i].trval = emitir(IRT(IR_XLOAD, ml[i].tp), trsptr, 0); - ml[i].trofs = trofs; - i++; - rwin += (LJ_SOFTFP && ml[i].tp == IRT_NUM) ? 2 : 1; - if (rwin >= CREC_COPY_REGWIN || i >= mlp) { /* Flush buffered stores. */ - rwin = 0; - for ( ; j < i; j++) { - TRef trdptr = emitir(IRT(IR_ADD, IRT_PTR), trdst, ml[j].trofs); - emitir(IRT(IR_XSTORE, ml[j].tp), trdptr, ml[j].trval); - } - } - } -} - -/* Optimized memory copy. */ -static void crec_copy(jit_State *J, TRef trdst, TRef trsrc, TRef trlen, - CType *ct) -{ - if (tref_isk(trlen)) { /* Length must be constant. */ - CRecMemList ml[CREC_COPY_MAXUNROLL]; - MSize mlp = 0; - CTSize step = 1, len = (CTSize)IR(tref_ref(trlen))->i; - IRType tp = IRT_CDATA; - int needxbar = 0; - if (len == 0) return; /* Shortcut. */ - if (len > CREC_COPY_MAXLEN) goto fallback; - if (ct) { - CTState *cts = ctype_ctsG(J2G(J)); - lua_assert(ctype_isarray(ct->info) || ctype_isstruct(ct->info)); - if (ctype_isarray(ct->info)) { - CType *cct = ctype_rawchild(cts, ct); - tp = crec_ct2irt(cts, cct); - if (tp == IRT_CDATA) goto rawcopy; - step = lj_ir_type_size[tp]; - lua_assert((len & (step-1)) == 0); - } else if ((ct->info & CTF_UNION)) { - step = (1u << ctype_align(ct->info)); - goto rawcopy; - } else { - mlp = crec_copy_struct(ml, cts, ct); - goto emitcopy; - } - } else { - rawcopy: - needxbar = 1; - if (LJ_TARGET_UNALIGNED || step >= CTSIZE_PTR) - step = CTSIZE_PTR; - } - mlp = crec_copy_unroll(ml, len, step, tp); - emitcopy: - if (mlp) { - crec_copy_emit(J, ml, mlp, trdst, trsrc); - if (needxbar) - emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); - return; - } - } -fallback: - /* Call memcpy. Always needs a barrier to disable alias analysis. */ - lj_ir_call(J, IRCALL_memcpy, trdst, trsrc, trlen); - emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); -} - -/* Generate unrolled fill list, from highest to lowest step size/alignment. */ -static MSize crec_fill_unroll(CRecMemList *ml, CTSize len, CTSize step) -{ - CTSize ofs = 0; - MSize mlp = 0; - IRType tp = IRT_U8 + 2*lj_fls(step); - do { - while (ofs + step <= len) { - if (mlp >= CREC_COPY_MAXUNROLL) return 0; - ml[mlp].ofs = ofs; - ml[mlp].tp = tp; - mlp++; - ofs += step; - } - step >>= 1; - tp -= 2; - } while (ofs < len); - return mlp; -} - -/* -** Emit stores for fill list. -** LJ_TARGET_UNALIGNED: may emit unaligned stores (not marked as such). -*/ -static void crec_fill_emit(jit_State *J, CRecMemList *ml, MSize mlp, - TRef trdst, TRef trfill) -{ - MSize i; - for (i = 0; i < mlp; i++) { - TRef trofs = lj_ir_kintp(J, ml[i].ofs); - TRef trdptr = emitir(IRT(IR_ADD, IRT_PTR), trdst, trofs); - emitir(IRT(IR_XSTORE, ml[i].tp), trdptr, trfill); - } -} - -/* Optimized memory fill. */ -static void crec_fill(jit_State *J, TRef trdst, TRef trlen, TRef trfill, - CTSize step) -{ - if (tref_isk(trlen)) { /* Length must be constant. */ - CRecMemList ml[CREC_FILL_MAXUNROLL]; - MSize mlp; - CTSize len = (CTSize)IR(tref_ref(trlen))->i; - if (len == 0) return; /* Shortcut. */ - if (LJ_TARGET_UNALIGNED || step >= CTSIZE_PTR) - step = CTSIZE_PTR; - if (step * CREC_FILL_MAXUNROLL < len) goto fallback; - mlp = crec_fill_unroll(ml, len, step); - if (!mlp) goto fallback; - if (tref_isk(trfill) || ml[0].tp != IRT_U8) - trfill = emitconv(trfill, IRT_INT, IRT_U8, 0); - if (ml[0].tp != IRT_U8) { /* Scatter U8 to U16/U32/U64. */ - if (CTSIZE_PTR == 8 && ml[0].tp == IRT_U64) { - if (tref_isk(trfill)) /* Pointless on x64 with zero-extended regs. */ - trfill = emitconv(trfill, IRT_U64, IRT_U32, 0); - trfill = emitir(IRT(IR_MUL, IRT_U64), trfill, - lj_ir_kint64(J, U64x(01010101,01010101))); - } else { - trfill = emitir(IRTI(IR_MUL), trfill, - lj_ir_kint(J, ml[0].tp == IRT_U16 ? 0x0101 : 0x01010101)); - } - } - crec_fill_emit(J, ml, mlp, trdst, trfill); - } else { -fallback: - /* Call memset. Always needs a barrier to disable alias analysis. */ - lj_ir_call(J, IRCALL_memset, trdst, trfill, trlen); /* Note: arg order! */ - } - emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); -} - -/* -- Convert C type to C type -------------------------------------------- */ - -/* -** This code mirrors the code in lj_cconv.c. It performs the same steps -** for the trace recorder that lj_cconv.c does for the interpreter. -** -** One major difference is that we can get away with much fewer checks -** here. E.g. checks for casts, constness or correct types can often be -** omitted, even if they might fail. The interpreter subsequently throws -** an error, which aborts the trace. -** -** All operations are specialized to their C types, so the on-trace -** outcome must be the same as the outcome in the interpreter. If the -** interpreter doesn't throw an error, then the trace is correct, too. -** Care must be taken not to generate invalid (temporary) IR or to -** trigger asserts. -*/ - -/* Determine whether a passed number or cdata number is non-zero. */ -static int crec_isnonzero(CType *s, void *p) -{ - if (p == (void *)0) - return 0; - if (p == (void *)1) - return 1; - if ((s->info & CTF_FP)) { - if (s->size == sizeof(float)) - return (*(float *)p != 0); - else - return (*(double *)p != 0); - } else { - if (s->size == 1) - return (*(uint8_t *)p != 0); - else if (s->size == 2) - return (*(uint16_t *)p != 0); - else if (s->size == 4) - return (*(uint32_t *)p != 0); - else - return (*(uint64_t *)p != 0); - } -} - -static TRef crec_ct_ct(jit_State *J, CType *d, CType *s, TRef dp, TRef sp, - void *svisnz) -{ - IRType dt = crec_ct2irt(ctype_ctsG(J2G(J)), d); - IRType st = crec_ct2irt(ctype_ctsG(J2G(J)), s); - CTSize dsize = d->size, ssize = s->size; - CTInfo dinfo = d->info, sinfo = s->info; - - if (ctype_type(dinfo) > CT_MAYCONVERT || ctype_type(sinfo) > CT_MAYCONVERT) - goto err_conv; - - /* - ** Note: Unlike lj_cconv_ct_ct(), sp holds the _value_ of pointers and - ** numbers up to 8 bytes. Otherwise sp holds a pointer. - */ - - switch (cconv_idx2(dinfo, sinfo)) { - /* Destination is a bool. */ - case CCX(B, B): - goto xstore; /* Source operand is already normalized. */ - case CCX(B, I): - case CCX(B, F): - if (st != IRT_CDATA) { - /* Specialize to the result of a comparison against 0. */ - TRef zero = (st == IRT_NUM || st == IRT_FLOAT) ? lj_ir_knum(J, 0) : - (st == IRT_I64 || st == IRT_U64) ? lj_ir_kint64(J, 0) : - lj_ir_kint(J, 0); - int isnz = crec_isnonzero(s, svisnz); - emitir(IRTG(isnz ? IR_NE : IR_EQ, st), sp, zero); - sp = lj_ir_kint(J, isnz); - goto xstore; - } - goto err_nyi; - - /* Destination is an integer. */ - case CCX(I, B): - case CCX(I, I): - conv_I_I: - if (dt == IRT_CDATA || st == IRT_CDATA) goto err_nyi; - /* Extend 32 to 64 bit integer. */ - if (dsize == 8 && ssize < 8 && !(LJ_64 && (sinfo & CTF_UNSIGNED))) - sp = emitconv(sp, dt, ssize < 4 ? IRT_INT : st, - (sinfo & CTF_UNSIGNED) ? 0 : IRCONV_SEXT); - else if (dsize < 8 && ssize == 8) /* Truncate from 64 bit integer. */ - sp = emitconv(sp, dsize < 4 ? IRT_INT : dt, st, 0); - else if (st == IRT_INT) - sp = lj_opt_narrow_toint(J, sp); - xstore: - if (dt == IRT_I64 || dt == IRT_U64) lj_needsplit(J); - if (dp == 0) return sp; - emitir(IRT(IR_XSTORE, dt), dp, sp); - break; - case CCX(I, C): - sp = emitir(IRT(IR_XLOAD, st), sp, 0); /* Load re. */ - /* fallthrough */ - case CCX(I, F): - if (dt == IRT_CDATA || st == IRT_CDATA) goto err_nyi; - sp = emitconv(sp, dsize < 4 ? IRT_INT : dt, st, IRCONV_TRUNC|IRCONV_ANY); - goto xstore; - case CCX(I, P): - case CCX(I, A): - sinfo = CTINFO(CT_NUM, CTF_UNSIGNED); - ssize = CTSIZE_PTR; - st = IRT_UINTP; - if (((dsize ^ ssize) & 8) == 0) { /* Must insert no-op type conversion. */ - sp = emitconv(sp, dsize < 4 ? IRT_INT : dt, IRT_PTR, 0); - goto xstore; - } - goto conv_I_I; - - /* Destination is a floating-point number. */ - case CCX(F, B): - case CCX(F, I): - conv_F_I: - if (dt == IRT_CDATA || st == IRT_CDATA) goto err_nyi; - sp = emitconv(sp, dt, ssize < 4 ? IRT_INT : st, 0); - goto xstore; - case CCX(F, C): - sp = emitir(IRT(IR_XLOAD, st), sp, 0); /* Load re. */ - /* fallthrough */ - case CCX(F, F): - conv_F_F: - if (dt == IRT_CDATA || st == IRT_CDATA) goto err_nyi; - if (dt != st) sp = emitconv(sp, dt, st, 0); - goto xstore; - - /* Destination is a complex number. */ - case CCX(C, I): - case CCX(C, F): - { /* Clear im. */ - TRef ptr = emitir(IRT(IR_ADD, IRT_PTR), dp, lj_ir_kintp(J, (dsize >> 1))); - emitir(IRT(IR_XSTORE, dt), ptr, lj_ir_knum(J, 0)); - } - /* Convert to re. */ - if ((sinfo & CTF_FP)) goto conv_F_F; else goto conv_F_I; - - case CCX(C, C): - if (dt == IRT_CDATA || st == IRT_CDATA) goto err_nyi; - { - TRef re, im, ptr; - re = emitir(IRT(IR_XLOAD, st), sp, 0); - ptr = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, (ssize >> 1))); - im = emitir(IRT(IR_XLOAD, st), ptr, 0); - if (dt != st) { - re = emitconv(re, dt, st, 0); - im = emitconv(im, dt, st, 0); - } - emitir(IRT(IR_XSTORE, dt), dp, re); - ptr = emitir(IRT(IR_ADD, IRT_PTR), dp, lj_ir_kintp(J, (dsize >> 1))); - emitir(IRT(IR_XSTORE, dt), ptr, im); - } - break; - - /* Destination is a vector. */ - case CCX(V, I): - case CCX(V, F): - case CCX(V, C): - case CCX(V, V): - goto err_nyi; - - /* Destination is a pointer. */ - case CCX(P, P): - case CCX(P, A): - case CCX(P, S): - /* There are only 32 bit pointers/addresses on 32 bit machines. - ** Also ok on x64, since all 32 bit ops clear the upper part of the reg. - */ - goto xstore; - case CCX(P, I): - if (st == IRT_CDATA) goto err_nyi; - if (!LJ_64 && ssize == 8) /* Truncate from 64 bit integer. */ - sp = emitconv(sp, IRT_U32, st, 0); - goto xstore; - case CCX(P, F): - if (st == IRT_CDATA) goto err_nyi; - /* The signed conversion is cheaper. x64 really has 47 bit pointers. */ - sp = emitconv(sp, (LJ_64 && dsize == 8) ? IRT_I64 : IRT_U32, - st, IRCONV_TRUNC|IRCONV_ANY); - goto xstore; - - /* Destination is an array. */ - case CCX(A, A): - /* Destination is a struct/union. */ - case CCX(S, S): - if (dp == 0) goto err_conv; - crec_copy(J, dp, sp, lj_ir_kint(J, dsize), d); - break; - - default: - err_conv: - err_nyi: - lj_trace_err(J, LJ_TRERR_NYICONV); - break; - } - return 0; -} - -/* -- Convert C type to TValue (load) ------------------------------------- */ - -static TRef crec_tv_ct(jit_State *J, CType *s, CTypeID sid, TRef sp) -{ - CTState *cts = ctype_ctsG(J2G(J)); - IRType t = crec_ct2irt(cts, s); - CTInfo sinfo = s->info; - if (ctype_isnum(sinfo)) { - TRef tr; - if (t == IRT_CDATA) - goto err_nyi; /* NYI: copyval of >64 bit integers. */ - tr = emitir(IRT(IR_XLOAD, t), sp, 0); - if (t == IRT_FLOAT || t == IRT_U32) { /* Keep uint32_t/float as numbers. */ - return emitconv(tr, IRT_NUM, t, 0); - } else if (t == IRT_I64 || t == IRT_U64) { /* Box 64 bit integer. */ - sp = tr; - lj_needsplit(J); - } else if ((sinfo & CTF_BOOL)) { - /* Assume not equal to zero. Fixup and emit pending guard later. */ - lj_ir_set(J, IRTGI(IR_NE), tr, lj_ir_kint(J, 0)); - J->postproc = LJ_POST_FIXGUARD; - return TREF_TRUE; - } else { - return tr; - } - } else if (ctype_isptr(sinfo) || ctype_isenum(sinfo)) { - sp = emitir(IRT(IR_XLOAD, t), sp, 0); /* Box pointers and enums. */ - } else if (ctype_isrefarray(sinfo) || ctype_isstruct(sinfo)) { - cts->L = J->L; - sid = lj_ctype_intern(cts, CTINFO_REF(sid), CTSIZE_PTR); /* Create ref. */ - } else if (ctype_iscomplex(sinfo)) { /* Unbox/box complex. */ - ptrdiff_t esz = (ptrdiff_t)(s->size >> 1); - TRef ptr, tr1, tr2, dp; - dp = emitir(IRTG(IR_CNEW, IRT_CDATA), lj_ir_kint(J, sid), TREF_NIL); - tr1 = emitir(IRT(IR_XLOAD, t), sp, 0); - ptr = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, esz)); - tr2 = emitir(IRT(IR_XLOAD, t), ptr, 0); - ptr = emitir(IRT(IR_ADD, IRT_PTR), dp, lj_ir_kintp(J, sizeof(GCcdata))); - emitir(IRT(IR_XSTORE, t), ptr, tr1); - ptr = emitir(IRT(IR_ADD, IRT_PTR), dp, lj_ir_kintp(J, sizeof(GCcdata)+esz)); - emitir(IRT(IR_XSTORE, t), ptr, tr2); - return dp; - } else { - /* NYI: copyval of vectors. */ - err_nyi: - lj_trace_err(J, LJ_TRERR_NYICONV); - } - /* Box pointer, ref, enum or 64 bit integer. */ - return emitir(IRTG(IR_CNEWI, IRT_CDATA), lj_ir_kint(J, sid), sp); -} - -/* -- Convert TValue to C type (store) ------------------------------------ */ - -static TRef crec_ct_tv(jit_State *J, CType *d, TRef dp, TRef sp, cTValue *sval) -{ - CTState *cts = ctype_ctsG(J2G(J)); - CTypeID sid = CTID_P_VOID; - void *svisnz = 0; - CType *s; - if (LJ_LIKELY(tref_isinteger(sp))) { - sid = CTID_INT32; - svisnz = (void *)(intptr_t)(tvisint(sval)?(intV(sval)!=0):!tviszero(sval)); - } else if (tref_isnum(sp)) { - sid = CTID_DOUBLE; - svisnz = (void *)(intptr_t)(tvisint(sval)?(intV(sval)!=0):!tviszero(sval)); - } else if (tref_isbool(sp)) { - sp = lj_ir_kint(J, tref_istrue(sp) ? 1 : 0); - sid = CTID_BOOL; - } else if (tref_isnil(sp)) { - sp = lj_ir_kptr(J, NULL); - } else if (tref_isudata(sp)) { - GCudata *ud = udataV(sval); - if (ud->udtype == UDTYPE_IO_FILE) { - TRef tr = emitir(IRT(IR_FLOAD, IRT_U8), sp, IRFL_UDATA_UDTYPE); - emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, UDTYPE_IO_FILE)); - sp = emitir(IRT(IR_FLOAD, IRT_PTR), sp, IRFL_UDATA_FILE); - } else { - sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCudata))); - } - } else if (tref_isstr(sp)) { - if (ctype_isenum(d->info)) { /* Match string against enum constant. */ - GCstr *str = strV(sval); - CTSize ofs; - CType *cct = lj_ctype_getfield(cts, d, str, &ofs); - /* Specialize to the name of the enum constant. */ - emitir(IRTG(IR_EQ, IRT_STR), sp, lj_ir_kstr(J, str)); - if (cct && ctype_isconstval(cct->info)) { - lua_assert(ctype_child(cts, cct)->size == 4); - svisnz = (void *)(intptr_t)(ofs != 0); - sp = lj_ir_kint(J, (int32_t)ofs); - sid = ctype_cid(cct->info); - } /* else: interpreter will throw. */ - } else if (ctype_isrefarray(d->info)) { /* Copy string to array. */ - lj_trace_err(J, LJ_TRERR_BADTYPE); /* NYI */ - } else { /* Otherwise pass the string data as a const char[]. */ - /* Don't use STRREF. It folds with SNEW, which loses the trailing NUL. */ - sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCstr))); - sid = CTID_A_CCHAR; - } - } else { /* NYI: tref_istab(sp), tref_islightud(sp). */ - IRType t; - sid = argv2cdata(J, sp, sval)->ctypeid; - s = ctype_raw(cts, sid); - svisnz = cdataptr(cdataV(sval)); - t = crec_ct2irt(cts, s); - if (ctype_isptr(s->info)) { - sp = emitir(IRT(IR_FLOAD, t), sp, IRFL_CDATA_PTR); - if (ctype_isref(s->info)) { - svisnz = *(void **)svisnz; - s = ctype_rawchild(cts, s); - if (ctype_isenum(s->info)) s = ctype_child(cts, s); - t = crec_ct2irt(cts, s); - } else { - goto doconv; - } - } else if (t == IRT_I64 || t == IRT_U64) { - sp = emitir(IRT(IR_FLOAD, t), sp, IRFL_CDATA_INT64); - lj_needsplit(J); - goto doconv; - } else if (t == IRT_INT || t == IRT_U32) { - if (ctype_isenum(s->info)) s = ctype_child(cts, s); - sp = emitir(IRT(IR_FLOAD, t), sp, IRFL_CDATA_INT); - goto doconv; - } else { - sp = emitir(IRT(IR_ADD, IRT_PTR), sp, lj_ir_kintp(J, sizeof(GCcdata))); - } - if (ctype_isnum(s->info) && t != IRT_CDATA) - sp = emitir(IRT(IR_XLOAD, t), sp, 0); /* Load number value. */ - goto doconv; - } - s = ctype_get(cts, sid); -doconv: - if (ctype_isenum(d->info)) d = ctype_child(cts, d); - return crec_ct_ct(J, d, s, dp, sp, svisnz); -} - -/* -- C data metamethods -------------------------------------------------- */ - -/* This would be rather difficult in FOLD, so do it here: -** (base+k)+(idx*sz)+ofs ==> (base+idx*sz)+(ofs+k) -** (base+(idx+k)*sz)+ofs ==> (base+idx*sz)+(ofs+k*sz) -*/ -static TRef crec_reassoc_ofs(jit_State *J, TRef tr, ptrdiff_t *ofsp, MSize sz) -{ - IRIns *ir = IR(tref_ref(tr)); - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD) && irref_isk(ir->op2) && - (ir->o == IR_ADD || ir->o == IR_ADDOV || ir->o == IR_SUBOV)) { - IRIns *irk = IR(ir->op2); - ptrdiff_t k; - if (LJ_64 && irk->o == IR_KINT64) - k = (ptrdiff_t)ir_kint64(irk)->u64 * sz; - else - k = (ptrdiff_t)irk->i * sz; - if (ir->o == IR_SUBOV) *ofsp -= k; else *ofsp += k; - tr = ir->op1; /* Not a TRef, but the caller doesn't care. */ - } - return tr; -} - -/* Record ctype __index/__newindex metamethods. */ -static void crec_index_meta(jit_State *J, CTState *cts, CType *ct, - RecordFFData *rd) -{ - CTypeID id = ctype_typeid(cts, ct); - cTValue *tv = lj_ctype_meta(cts, id, rd->data ? MM_newindex : MM_index); - if (!tv) - lj_trace_err(J, LJ_TRERR_BADTYPE); - if (tvisfunc(tv)) { - J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME; - rd->nres = -1; /* Pending tailcall. */ - } else if (rd->data == 0 && tvistab(tv) && tref_isstr(J->base[1])) { - /* Specialize to result of __index lookup. */ - cTValue *o = lj_tab_get(J->L, tabV(tv), &rd->argv[1]); - J->base[0] = lj_record_constify(J, o); - if (!J->base[0]) - lj_trace_err(J, LJ_TRERR_BADTYPE); - /* Always specialize to the key. */ - emitir(IRTG(IR_EQ, IRT_STR), J->base[1], lj_ir_kstr(J, strV(&rd->argv[1]))); - } else { - /* NYI: resolving of non-function metamethods. */ - /* NYI: non-string keys for __index table. */ - /* NYI: stores to __newindex table. */ - lj_trace_err(J, LJ_TRERR_BADTYPE); - } -} - -void LJ_FASTCALL recff_cdata_index(jit_State *J, RecordFFData *rd) -{ - TRef idx, ptr = J->base[0]; - ptrdiff_t ofs = sizeof(GCcdata); - GCcdata *cd = argv2cdata(J, ptr, &rd->argv[0]); - CTState *cts = ctype_ctsG(J2G(J)); - CType *ct = ctype_raw(cts, cd->ctypeid); - CTypeID sid = 0; - - /* Resolve pointer or reference for cdata object. */ - if (ctype_isptr(ct->info)) { - IRType t = (LJ_64 && ct->size == 8) ? IRT_P64 : IRT_P32; - if (ctype_isref(ct->info)) ct = ctype_rawchild(cts, ct); - ptr = emitir(IRT(IR_FLOAD, t), ptr, IRFL_CDATA_PTR); - ofs = 0; - ptr = crec_reassoc_ofs(J, ptr, &ofs, 1); - } - -again: - idx = J->base[1]; - if (tref_isnumber(idx)) { - idx = lj_opt_narrow_cindex(J, idx); - if (ctype_ispointer(ct->info)) { - CTSize sz; - integer_key: - if ((ct->info & CTF_COMPLEX)) - idx = emitir(IRT(IR_BAND, IRT_INTP), idx, lj_ir_kintp(J, 1)); - sz = lj_ctype_size(cts, (sid = ctype_cid(ct->info))); - idx = crec_reassoc_ofs(J, idx, &ofs, sz); -#if LJ_TARGET_ARM || LJ_TARGET_PPC - /* Hoist base add to allow fusion of index/shift into operands. */ - if (LJ_LIKELY(J->flags & JIT_F_OPT_LOOP) && ofs -#if LJ_TARGET_ARM - && (sz == 1 || sz == 4) -#endif - ) { - ptr = emitir(IRT(IR_ADD, IRT_PTR), ptr, lj_ir_kintp(J, ofs)); - ofs = 0; - } -#endif - idx = emitir(IRT(IR_MUL, IRT_INTP), idx, lj_ir_kintp(J, sz)); - ptr = emitir(IRT(IR_ADD, IRT_PTR), idx, ptr); - } - } else if (tref_iscdata(idx)) { - GCcdata *cdk = cdataV(&rd->argv[1]); - CType *ctk = ctype_raw(cts, cdk->ctypeid); - IRType t = crec_ct2irt(cts, ctk); - if (ctype_ispointer(ct->info) && t >= IRT_I8 && t <= IRT_U64) { - if (ctk->size == 8) { - idx = emitir(IRT(IR_FLOAD, t), idx, IRFL_CDATA_INT64); - } else if (ctk->size == 4) { - idx = emitir(IRT(IR_FLOAD, t), idx, IRFL_CDATA_INT); - } else { - idx = emitir(IRT(IR_ADD, IRT_PTR), idx, - lj_ir_kintp(J, sizeof(GCcdata))); - idx = emitir(IRT(IR_XLOAD, t), idx, 0); - } - if (LJ_64 && ctk->size < sizeof(intptr_t) && !(ctk->info & CTF_UNSIGNED)) - idx = emitconv(idx, IRT_INTP, IRT_INT, IRCONV_SEXT); - if (!LJ_64 && ctk->size > sizeof(intptr_t)) { - idx = emitconv(idx, IRT_INTP, t, 0); - lj_needsplit(J); - } - goto integer_key; - } - } else if (tref_isstr(idx)) { - GCstr *name = strV(&rd->argv[1]); - if (cd && cd->ctypeid == CTID_CTYPEID) - ct = ctype_raw(cts, crec_constructor(J, cd, ptr)); - if (ctype_isstruct(ct->info)) { - CTSize fofs; - CType *fct; - fct = lj_ctype_getfield(cts, ct, name, &fofs); - if (fct) { - /* Always specialize to the field name. */ - emitir(IRTG(IR_EQ, IRT_STR), idx, lj_ir_kstr(J, name)); - if (ctype_isconstval(fct->info)) { - if (fct->size >= 0x80000000u && - (ctype_child(cts, fct)->info & CTF_UNSIGNED)) { - J->base[0] = lj_ir_knum(J, (lua_Number)(uint32_t)fct->size); - return; - } - J->base[0] = lj_ir_kint(J, (int32_t)fct->size); - return; /* Interpreter will throw for newindex. */ - } else if (ctype_isbitfield(fct->info)) { - lj_trace_err(J, LJ_TRERR_NYICONV); - } else { - lua_assert(ctype_isfield(fct->info)); - sid = ctype_cid(fct->info); - } - ofs += (ptrdiff_t)fofs; - } - } else if (ctype_iscomplex(ct->info)) { - if (name->len == 2 && - ((strdata(name)[0] == 'r' && strdata(name)[1] == 'e') || - (strdata(name)[0] == 'i' && strdata(name)[1] == 'm'))) { - /* Always specialize to the field name. */ - emitir(IRTG(IR_EQ, IRT_STR), idx, lj_ir_kstr(J, name)); - if (strdata(name)[0] == 'i') ofs += (ct->size >> 1); - sid = ctype_cid(ct->info); - } - } - } - if (!sid) { - if (ctype_isptr(ct->info)) { /* Automatically perform '->'. */ - CType *cct = ctype_rawchild(cts, ct); - if (ctype_isstruct(cct->info)) { - ct = cct; - cd = NULL; - if (tref_isstr(idx)) goto again; - } - } - crec_index_meta(J, cts, ct, rd); - return; - } - - if (ofs) - ptr = emitir(IRT(IR_ADD, IRT_PTR), ptr, lj_ir_kintp(J, ofs)); - - /* Resolve reference for field. */ - ct = ctype_get(cts, sid); - if (ctype_isref(ct->info)) { - ptr = emitir(IRT(IR_XLOAD, IRT_PTR), ptr, 0); - sid = ctype_cid(ct->info); - ct = ctype_get(cts, sid); - } - - while (ctype_isattrib(ct->info)) - ct = ctype_child(cts, ct); /* Skip attributes. */ - - if (rd->data == 0) { /* __index metamethod. */ - J->base[0] = crec_tv_ct(J, ct, sid, ptr); - } else { /* __newindex metamethod. */ - rd->nres = 0; - J->needsnap = 1; - crec_ct_tv(J, ct, ptr, J->base[2], &rd->argv[2]); - } -} - -/* Record setting a finalizer. */ -static void crec_finalizer(jit_State *J, TRef trcd, cTValue *fin) -{ - TRef trlo = lj_ir_call(J, IRCALL_lj_cdata_setfin, trcd); - TRef trhi = emitir(IRT(IR_ADD, IRT_P32), trlo, lj_ir_kint(J, 4)); - if (LJ_BE) { TRef tmp = trlo; trlo = trhi; trhi = tmp; } - if (tvisfunc(fin)) { - emitir(IRT(IR_XSTORE, IRT_P32), trlo, lj_ir_kfunc(J, funcV(fin))); - emitir(IRTI(IR_XSTORE), trhi, lj_ir_kint(J, LJ_TFUNC)); - } else if (tviscdata(fin)) { - emitir(IRT(IR_XSTORE, IRT_P32), trlo, - lj_ir_kgc(J, obj2gco(cdataV(fin)), IRT_CDATA)); - emitir(IRTI(IR_XSTORE), trhi, lj_ir_kint(J, LJ_TCDATA)); - } else { - lj_trace_err(J, LJ_TRERR_BADTYPE); - } - J->needsnap = 1; -} - -/* Record cdata allocation. */ -static void crec_alloc(jit_State *J, RecordFFData *rd, CTypeID id) -{ - CTState *cts = ctype_ctsG(J2G(J)); - CTSize sz; - CTInfo info = lj_ctype_info(cts, id, &sz); - CType *d = ctype_raw(cts, id); - TRef trid; - if (!sz || sz > 128 || (info & CTF_VLA) || ctype_align(info) > CT_MEMALIGN) - lj_trace_err(J, LJ_TRERR_NYICONV); /* NYI: large/special allocations. */ - trid = lj_ir_kint(J, id); - /* Use special instruction to box pointer or 32/64 bit integer. */ - if (ctype_isptr(info) || (ctype_isinteger(info) && (sz == 4 || sz == 8))) { - TRef sp = J->base[1] ? crec_ct_tv(J, d, 0, J->base[1], &rd->argv[1]) : - ctype_isptr(info) ? lj_ir_kptr(J, NULL) : - sz == 4 ? lj_ir_kint(J, 0) : - (lj_needsplit(J), lj_ir_kint64(J, 0)); - J->base[0] = emitir(IRTG(IR_CNEWI, IRT_CDATA), trid, sp); - } else { - TRef trcd = emitir(IRTG(IR_CNEW, IRT_CDATA), trid, TREF_NIL); - cTValue *fin; - J->base[0] = trcd; - if (J->base[1] && !J->base[2] && - !lj_cconv_multi_init(cts, d, &rd->argv[1])) { - goto single_init; - } else if (ctype_isarray(d->info)) { - CType *dc = ctype_rawchild(cts, d); /* Array element type. */ - CTSize ofs, esize = dc->size; - TRef sp = 0; - TValue tv; - TValue *sval = &tv; - MSize i; - tv.u64 = 0; - if (!(ctype_isnum(dc->info) || ctype_isptr(dc->info))) - lj_trace_err(J, LJ_TRERR_NYICONV); /* NYI: init array of aggregates. */ - for (i = 1, ofs = 0; ofs < sz; ofs += esize) { - TRef dp = emitir(IRT(IR_ADD, IRT_PTR), trcd, - lj_ir_kintp(J, ofs + sizeof(GCcdata))); - if (J->base[i]) { - sp = J->base[i]; - sval = &rd->argv[i]; - i++; - } else if (i != 2) { - sp = ctype_isnum(dc->info) ? lj_ir_kint(J, 0) : TREF_NIL; - } - crec_ct_tv(J, dc, dp, sp, sval); - } - } else if (ctype_isstruct(d->info)) { - CTypeID fid = d->sib; - MSize i = 1; - while (fid) { - CType *df = ctype_get(cts, fid); - fid = df->sib; - if (ctype_isfield(df->info)) { - CType *dc; - TRef sp, dp; - TValue tv; - TValue *sval = &tv; - setintV(&tv, 0); - if (!gcref(df->name)) continue; /* Ignore unnamed fields. */ - dc = ctype_rawchild(cts, df); /* Field type. */ - if (!(ctype_isnum(dc->info) || ctype_isptr(dc->info) || - ctype_isenum(dc->info))) - lj_trace_err(J, LJ_TRERR_NYICONV); /* NYI: init aggregates. */ - if (J->base[i]) { - sp = J->base[i]; - sval = &rd->argv[i]; - i++; - } else { - sp = ctype_isptr(dc->info) ? TREF_NIL : lj_ir_kint(J, 0); - } - dp = emitir(IRT(IR_ADD, IRT_PTR), trcd, - lj_ir_kintp(J, df->size + sizeof(GCcdata))); - crec_ct_tv(J, dc, dp, sp, sval); - } else if (!ctype_isconstval(df->info)) { - /* NYI: init bitfields and sub-structures. */ - lj_trace_err(J, LJ_TRERR_NYICONV); - } - } - } else { - TRef dp; - single_init: - dp = emitir(IRT(IR_ADD, IRT_PTR), trcd, lj_ir_kintp(J, sizeof(GCcdata))); - if (J->base[1]) { - crec_ct_tv(J, d, dp, J->base[1], &rd->argv[1]); - } else { - TValue tv; - tv.u64 = 0; - crec_ct_tv(J, d, dp, lj_ir_kint(J, 0), &tv); - } - } - /* Handle __gc metamethod. */ - fin = lj_ctype_meta(cts, id, MM_gc); - if (fin) - crec_finalizer(J, trcd, fin); - } -} - -/* Record argument conversions. */ -static TRef crec_call_args(jit_State *J, RecordFFData *rd, - CTState *cts, CType *ct) -{ - TRef args[CCI_NARGS_MAX]; - CTypeID fid; - MSize i, n; - TRef tr, *base; - cTValue *o; -#if LJ_TARGET_X86 -#if LJ_ABI_WIN - TRef *arg0 = NULL, *arg1 = NULL; -#endif - int ngpr = 0; - if (ctype_cconv(ct->info) == CTCC_THISCALL) - ngpr = 1; - else if (ctype_cconv(ct->info) == CTCC_FASTCALL) - ngpr = 2; -#endif - - /* Skip initial attributes. */ - fid = ct->sib; - while (fid) { - CType *ctf = ctype_get(cts, fid); - if (!ctype_isattrib(ctf->info)) break; - fid = ctf->sib; - } - args[0] = TREF_NIL; - for (n = 0, base = J->base+1, o = rd->argv+1; *base; n++, base++, o++) { - CTypeID did; - CType *d; - - if (n >= CCI_NARGS_MAX) - lj_trace_err(J, LJ_TRERR_NYICALL); - - if (fid) { /* Get argument type from field. */ - CType *ctf = ctype_get(cts, fid); - fid = ctf->sib; - lua_assert(ctype_isfield(ctf->info)); - did = ctype_cid(ctf->info); - } else { - if (!(ct->info & CTF_VARARG)) - lj_trace_err(J, LJ_TRERR_NYICALL); /* Too many arguments. */ - did = lj_ccall_ctid_vararg(cts, o); /* Infer vararg type. */ - } - d = ctype_raw(cts, did); - if (!(ctype_isnum(d->info) || ctype_isptr(d->info) || - ctype_isenum(d->info))) - lj_trace_err(J, LJ_TRERR_NYICALL); - tr = crec_ct_tv(J, d, 0, *base, o); - if (ctype_isinteger_or_bool(d->info)) { - if (d->size < 4) { - if ((d->info & CTF_UNSIGNED)) - tr = emitconv(tr, IRT_INT, d->size==1 ? IRT_U8 : IRT_U16, 0); - else - tr = emitconv(tr, IRT_INT, d->size==1 ? IRT_I8 : IRT_I16,IRCONV_SEXT); - } - } else if (LJ_SOFTFP && ctype_isfp(d->info) && d->size > 4) { - lj_needsplit(J); - } -#if LJ_TARGET_X86 - /* 64 bit args must not end up in registers for fastcall/thiscall. */ -#if LJ_ABI_WIN - if (!ctype_isfp(d->info)) { - /* Sigh, the Windows/x86 ABI allows reordering across 64 bit args. */ - if (tref_typerange(tr, IRT_I64, IRT_U64)) { - if (ngpr) { - arg0 = &args[n]; args[n++] = TREF_NIL; ngpr--; - if (ngpr) { - arg1 = &args[n]; args[n++] = TREF_NIL; ngpr--; - } - } - } else { - if (arg0) { *arg0 = tr; arg0 = NULL; n--; continue; } - if (arg1) { *arg1 = tr; arg1 = NULL; n--; continue; } - if (ngpr) ngpr--; - } - } -#else - if (!ctype_isfp(d->info) && ngpr) { - if (tref_typerange(tr, IRT_I64, IRT_U64)) { - /* No reordering for other x86 ABIs. Simply add alignment args. */ - do { args[n++] = TREF_NIL; } while (--ngpr); - } else { - ngpr--; - } - } -#endif -#endif - args[n] = tr; - } - tr = args[0]; - for (i = 1; i < n; i++) - tr = emitir(IRT(IR_CARG, IRT_NIL), tr, args[i]); - return tr; -} - -/* Create a snapshot for the caller, simulating a 'false' return value. */ -static void crec_snap_caller(jit_State *J) -{ - lua_State *L = J->L; - TValue *base = L->base, *top = L->top; - const BCIns *pc = J->pc; - TRef ftr = J->base[-1]; - ptrdiff_t delta; - if (!frame_islua(base-1) || J->framedepth <= 0) - lj_trace_err(J, LJ_TRERR_NYICALL); - J->pc = frame_pc(base-1); delta = 1+bc_a(J->pc[-1]); - L->top = base; L->base = base - delta; - J->base[-1] = TREF_FALSE; - J->base -= delta; J->baseslot -= (BCReg)delta; - J->maxslot = (BCReg)delta; J->framedepth--; - lj_snap_add(J); - L->base = base; L->top = top; - J->framedepth++; J->maxslot = 1; - J->base += delta; J->baseslot += (BCReg)delta; - J->base[-1] = ftr; J->pc = pc; -} - -/* Record function call. */ -static int crec_call(jit_State *J, RecordFFData *rd, GCcdata *cd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - CType *ct = ctype_raw(cts, cd->ctypeid); - IRType tp = IRT_PTR; - if (ctype_isptr(ct->info)) { - tp = (LJ_64 && ct->size == 8) ? IRT_P64 : IRT_P32; - ct = ctype_rawchild(cts, ct); - } - if (ctype_isfunc(ct->info)) { - TRef func = emitir(IRT(IR_FLOAD, tp), J->base[0], IRFL_CDATA_PTR); - CType *ctr = ctype_rawchild(cts, ct); - IRType t = crec_ct2irt(cts, ctr); - TRef tr; - TValue tv; - /* Check for blacklisted C functions that might call a callback. */ - setlightudV(&tv, - cdata_getptr(cdataptr(cd), (LJ_64 && tp == IRT_P64) ? 8 : 4)); - if (tvistrue(lj_tab_get(J->L, cts->miscmap, &tv))) - lj_trace_err(J, LJ_TRERR_BLACKL); - if (ctype_isvoid(ctr->info)) { - t = IRT_NIL; - rd->nres = 0; - } else if (!(ctype_isnum(ctr->info) || ctype_isptr(ctr->info) || - ctype_isenum(ctr->info)) || t == IRT_CDATA) { - lj_trace_err(J, LJ_TRERR_NYICALL); - } - if ((ct->info & CTF_VARARG) -#if LJ_TARGET_X86 - || ctype_cconv(ct->info) != CTCC_CDECL -#endif - ) - func = emitir(IRT(IR_CARG, IRT_NIL), func, - lj_ir_kint(J, ctype_typeid(cts, ct))); - tr = emitir(IRT(IR_CALLXS, t), crec_call_args(J, rd, cts, ct), func); - if (ctype_isbool(ctr->info)) { - if (frame_islua(J->L->base-1) && bc_b(frame_pc(J->L->base-1)[-1]) == 1) { - /* Don't check result if ignored. */ - tr = TREF_NIL; - } else { - crec_snap_caller(J); -#if LJ_TARGET_X86ORX64 - /* Note: only the x86/x64 backend supports U8 and only for EQ(tr, 0). */ - lj_ir_set(J, IRTG(IR_NE, IRT_U8), tr, lj_ir_kint(J, 0)); -#else - lj_ir_set(J, IRTGI(IR_NE), tr, lj_ir_kint(J, 0)); -#endif - J->postproc = LJ_POST_FIXGUARDSNAP; - tr = TREF_TRUE; - } - } else if (t == IRT_PTR || (LJ_64 && t == IRT_P32) || - t == IRT_I64 || t == IRT_U64 || ctype_isenum(ctr->info)) { - TRef trid = lj_ir_kint(J, ctype_cid(ct->info)); - tr = emitir(IRTG(IR_CNEWI, IRT_CDATA), trid, tr); - if (t == IRT_I64 || t == IRT_U64) lj_needsplit(J); - } else if (t == IRT_FLOAT || t == IRT_U32) { - tr = emitconv(tr, IRT_NUM, t, 0); - } else if (t == IRT_I8 || t == IRT_I16) { - tr = emitconv(tr, IRT_INT, t, IRCONV_SEXT); - } else if (t == IRT_U8 || t == IRT_U16) { - tr = emitconv(tr, IRT_INT, t, 0); - } - J->base[0] = tr; - J->needsnap = 1; - return 1; - } - return 0; -} - -void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - GCcdata *cd = argv2cdata(J, J->base[0], &rd->argv[0]); - CTypeID id = cd->ctypeid; - CType *ct; - cTValue *tv; - MMS mm = MM_call; - if (id == CTID_CTYPEID) { - id = crec_constructor(J, cd, J->base[0]); - mm = MM_new; - } else if (crec_call(J, rd, cd)) { - return; - } - /* Record ctype __call/__new metamethod. */ - ct = ctype_raw(cts, id); - tv = lj_ctype_meta(cts, ctype_isptr(ct->info) ? ctype_cid(ct->info) : id, mm); - if (tv) { - if (tvisfunc(tv)) { - J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME; - rd->nres = -1; /* Pending tailcall. */ - return; - } - } else if (mm == MM_new) { - crec_alloc(J, rd, id); - return; - } - /* No metamethod or NYI: non-function metamethods. */ - lj_trace_err(J, LJ_TRERR_BADTYPE); -} - -static TRef crec_arith_int64(jit_State *J, TRef *sp, CType **s, MMS mm) -{ - if (ctype_isnum(s[0]->info) && ctype_isnum(s[1]->info)) { - IRType dt; - CTypeID id; - TRef tr; - MSize i; - IROp op; - lj_needsplit(J); - if (((s[0]->info & CTF_UNSIGNED) && s[0]->size == 8) || - ((s[1]->info & CTF_UNSIGNED) && s[1]->size == 8)) { - dt = IRT_U64; id = CTID_UINT64; - } else { - dt = IRT_I64; id = CTID_INT64; - if (mm < MM_add && - !((s[0]->info | s[1]->info) & CTF_FP) && - s[0]->size == 4 && s[1]->size == 4) { /* Try to narrow comparison. */ - if (!((s[0]->info ^ s[1]->info) & CTF_UNSIGNED) || - (tref_isk(sp[1]) && IR(tref_ref(sp[1]))->i >= 0)) { - dt = (s[0]->info & CTF_UNSIGNED) ? IRT_U32 : IRT_INT; - goto comp; - } else if (tref_isk(sp[0]) && IR(tref_ref(sp[0]))->i >= 0) { - dt = (s[1]->info & CTF_UNSIGNED) ? IRT_U32 : IRT_INT; - goto comp; - } - } - } - for (i = 0; i < 2; i++) { - IRType st = tref_type(sp[i]); - if (st == IRT_NUM || st == IRT_FLOAT) - sp[i] = emitconv(sp[i], dt, st, IRCONV_TRUNC|IRCONV_ANY); - else if (!(st == IRT_I64 || st == IRT_U64)) - sp[i] = emitconv(sp[i], dt, IRT_INT, - (s[i]->info & CTF_UNSIGNED) ? 0 : IRCONV_SEXT); - } - if (mm < MM_add) { - comp: - /* Assume true comparison. Fixup and emit pending guard later. */ - if (mm == MM_eq) { - op = IR_EQ; - } else { - op = mm == MM_lt ? IR_LT : IR_LE; - if (dt == IRT_U32 || dt == IRT_U64) - op += (IR_ULT-IR_LT); - } - lj_ir_set(J, IRTG(op, dt), sp[0], sp[1]); - J->postproc = LJ_POST_FIXGUARD; - return TREF_TRUE; - } else { - tr = emitir(IRT(mm+(int)IR_ADD-(int)MM_add, dt), sp[0], sp[1]); - } - return emitir(IRTG(IR_CNEWI, IRT_CDATA), lj_ir_kint(J, id), tr); - } - return 0; -} - -static TRef crec_arith_ptr(jit_State *J, TRef *sp, CType **s, MMS mm) -{ - CTState *cts = ctype_ctsG(J2G(J)); - CType *ctp = s[0]; - if (ctype_isptr(ctp->info) || ctype_isrefarray(ctp->info)) { - if ((mm == MM_sub || mm == MM_eq || mm == MM_lt || mm == MM_le) && - (ctype_isptr(s[1]->info) || ctype_isrefarray(s[1]->info))) { - if (mm == MM_sub) { /* Pointer difference. */ - TRef tr; - CTSize sz = lj_ctype_size(cts, ctype_cid(ctp->info)); - if (sz == 0 || (sz & (sz-1)) != 0) - return 0; /* NYI: integer division. */ - tr = emitir(IRT(IR_SUB, IRT_INTP), sp[0], sp[1]); - tr = emitir(IRT(IR_BSAR, IRT_INTP), tr, lj_ir_kint(J, lj_fls(sz))); -#if LJ_64 - tr = emitconv(tr, IRT_NUM, IRT_INTP, 0); -#endif - return tr; - } else { /* Pointer comparison (unsigned). */ - /* Assume true comparison. Fixup and emit pending guard later. */ - IROp op = mm == MM_eq ? IR_EQ : mm == MM_lt ? IR_ULT : IR_ULE; - lj_ir_set(J, IRTG(op, IRT_PTR), sp[0], sp[1]); - J->postproc = LJ_POST_FIXGUARD; - return TREF_TRUE; - } - } - if (!((mm == MM_add || mm == MM_sub) && ctype_isnum(s[1]->info))) - return 0; - } else if (mm == MM_add && ctype_isnum(ctp->info) && - (ctype_isptr(s[1]->info) || ctype_isrefarray(s[1]->info))) { - TRef tr = sp[0]; sp[0] = sp[1]; sp[1] = tr; /* Swap pointer and index. */ - ctp = s[1]; - } else { - return 0; - } - { - TRef tr = sp[1]; - IRType t = tref_type(tr); - CTSize sz = lj_ctype_size(cts, ctype_cid(ctp->info)); - CTypeID id; -#if LJ_64 - if (t == IRT_NUM || t == IRT_FLOAT) - tr = emitconv(tr, IRT_INTP, t, IRCONV_TRUNC|IRCONV_ANY); - else if (!(t == IRT_I64 || t == IRT_U64)) - tr = emitconv(tr, IRT_INTP, IRT_INT, - ((t - IRT_I8) & 1) ? 0 : IRCONV_SEXT); -#else - if (!tref_typerange(sp[1], IRT_I8, IRT_U32)) { - tr = emitconv(tr, IRT_INTP, t, - (t == IRT_NUM || t == IRT_FLOAT) ? - IRCONV_TRUNC|IRCONV_ANY : 0); - } -#endif - tr = emitir(IRT(IR_MUL, IRT_INTP), tr, lj_ir_kintp(J, sz)); - tr = emitir(IRT(mm+(int)IR_ADD-(int)MM_add, IRT_PTR), sp[0], tr); - id = lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|ctype_cid(ctp->info)), - CTSIZE_PTR); - return emitir(IRTG(IR_CNEWI, IRT_CDATA), lj_ir_kint(J, id), tr); - } -} - -/* Record ctype arithmetic metamethods. */ -static TRef crec_arith_meta(jit_State *J, TRef *sp, CType **s, CTState *cts, - RecordFFData *rd) -{ - cTValue *tv = NULL; - if (J->base[0]) { - if (tviscdata(&rd->argv[0])) { - CTypeID id = argv2cdata(J, J->base[0], &rd->argv[0])->ctypeid; - CType *ct = ctype_raw(cts, id); - if (ctype_isptr(ct->info)) id = ctype_cid(ct->info); - tv = lj_ctype_meta(cts, id, (MMS)rd->data); - } - if (!tv && J->base[1] && tviscdata(&rd->argv[1])) { - CTypeID id = argv2cdata(J, J->base[1], &rd->argv[1])->ctypeid; - CType *ct = ctype_raw(cts, id); - if (ctype_isptr(ct->info)) id = ctype_cid(ct->info); - tv = lj_ctype_meta(cts, id, (MMS)rd->data); - } - } - if (tv) { - if (tvisfunc(tv)) { - J->base[-1] = lj_ir_kfunc(J, funcV(tv)) | TREF_FRAME; - rd->nres = -1; /* Pending tailcall. */ - return 0; - } /* NYI: non-function metamethods. */ - } else if ((MMS)rd->data == MM_eq) { /* Fallback cdata pointer comparison. */ - if (sp[0] && sp[1] && ctype_isnum(s[0]->info) == ctype_isnum(s[1]->info)) { - /* Assume true comparison. Fixup and emit pending guard later. */ - lj_ir_set(J, IRTG(IR_EQ, IRT_PTR), sp[0], sp[1]); - J->postproc = LJ_POST_FIXGUARD; - return TREF_TRUE; - } else { - return TREF_FALSE; - } - } - lj_trace_err(J, LJ_TRERR_BADTYPE); - return 0; -} - -void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - TRef sp[2]; - CType *s[2]; - MSize i; - for (i = 0; i < 2; i++) { - TRef tr = J->base[i]; - CType *ct = ctype_get(cts, CTID_DOUBLE); - if (!tr) { - lj_trace_err(J, LJ_TRERR_BADTYPE); - } else if (tref_iscdata(tr)) { - CTypeID id = argv2cdata(J, tr, &rd->argv[i])->ctypeid; - IRType t; - ct = ctype_raw(cts, id); - t = crec_ct2irt(cts, ct); - if (ctype_isptr(ct->info)) { /* Resolve pointer or reference. */ - tr = emitir(IRT(IR_FLOAD, t), tr, IRFL_CDATA_PTR); - if (ctype_isref(ct->info)) { - ct = ctype_rawchild(cts, ct); - t = crec_ct2irt(cts, ct); - } - } else if (t == IRT_I64 || t == IRT_U64) { - tr = emitir(IRT(IR_FLOAD, t), tr, IRFL_CDATA_INT64); - lj_needsplit(J); - goto ok; - } else if (t == IRT_INT || t == IRT_U32) { - tr = emitir(IRT(IR_FLOAD, t), tr, IRFL_CDATA_INT); - if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct); - goto ok; - } else if (ctype_isfunc(ct->info)) { - tr = emitir(IRT(IR_FLOAD, IRT_PTR), tr, IRFL_CDATA_PTR); - ct = ctype_get(cts, - lj_ctype_intern(cts, CTINFO(CT_PTR, CTALIGN_PTR|id), CTSIZE_PTR)); - goto ok; - } else { - tr = emitir(IRT(IR_ADD, IRT_PTR), tr, lj_ir_kintp(J, sizeof(GCcdata))); - } - if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct); - if (ctype_isnum(ct->info)) { - if (t == IRT_CDATA) { - tr = 0; - } else { - if (t == IRT_I64 || t == IRT_U64) lj_needsplit(J); - tr = emitir(IRT(IR_XLOAD, t), tr, 0); - } - } - } else if (tref_isnil(tr)) { - tr = lj_ir_kptr(J, NULL); - ct = ctype_get(cts, CTID_P_VOID); - } else if (tref_isinteger(tr)) { - ct = ctype_get(cts, CTID_INT32); - } else if (tref_isstr(tr)) { - TRef tr2 = J->base[1-i]; - CTypeID id = argv2cdata(J, tr2, &rd->argv[1-i])->ctypeid; - ct = ctype_raw(cts, id); - if (ctype_isenum(ct->info)) { /* Match string against enum constant. */ - GCstr *str = strV(&rd->argv[i]); - CTSize ofs; - CType *cct = lj_ctype_getfield(cts, ct, str, &ofs); - if (cct && ctype_isconstval(cct->info)) { - /* Specialize to the name of the enum constant. */ - emitir(IRTG(IR_EQ, IRT_STR), tr, lj_ir_kstr(J, str)); - ct = ctype_child(cts, cct); - tr = lj_ir_kint(J, (int32_t)ofs); - } else { /* Interpreter will throw or return false. */ - ct = ctype_get(cts, CTID_P_VOID); - } - } else if (ctype_isptr(ct->info)) { - tr = emitir(IRT(IR_ADD, IRT_PTR), tr, lj_ir_kintp(J, sizeof(GCstr))); - } else { - ct = ctype_get(cts, CTID_P_VOID); - } - } else if (!tref_isnum(tr)) { - tr = 0; - ct = ctype_get(cts, CTID_P_VOID); - } - ok: - s[i] = ct; - sp[i] = tr; - } - { - TRef tr; - if (!(tr = crec_arith_int64(J, sp, s, (MMS)rd->data)) && - !(tr = crec_arith_ptr(J, sp, s, (MMS)rd->data)) && - !(tr = crec_arith_meta(J, sp, s, cts, rd))) - return; - J->base[0] = tr; - /* Fixup cdata comparisons, too. Avoids some cdata escapes. */ - if (J->postproc == LJ_POST_FIXGUARD && frame_iscont(J->L->base-1) && - !irt_isguard(J->guardemit)) { - const BCIns *pc = frame_contpc(J->L->base-1) - 1; - if (bc_op(*pc) <= BC_ISNEP) { - setframe_pc(&J2G(J)->tmptv, pc); - J2G(J)->tmptv.u32.lo = ((tref_istrue(tr) ^ bc_op(*pc)) & 1); - J->postproc = LJ_POST_FIXCOMP; - } - } - } -} - -/* -- C library namespace metamethods ------------------------------------- */ - -void LJ_FASTCALL recff_clib_index(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - if (tref_isudata(J->base[0]) && tref_isstr(J->base[1]) && - udataV(&rd->argv[0])->udtype == UDTYPE_FFI_CLIB) { - CLibrary *cl = (CLibrary *)uddata(udataV(&rd->argv[0])); - GCstr *name = strV(&rd->argv[1]); - CType *ct; - CTypeID id = lj_ctype_getname(cts, &ct, name, CLNS_INDEX); - cTValue *tv = lj_tab_getstr(cl->cache, name); - rd->nres = rd->data; - if (id && tv && !tvisnil(tv)) { - /* Specialize to the symbol name and make the result a constant. */ - emitir(IRTG(IR_EQ, IRT_STR), J->base[1], lj_ir_kstr(J, name)); - if (ctype_isconstval(ct->info)) { - if (ct->size >= 0x80000000u && - (ctype_child(cts, ct)->info & CTF_UNSIGNED)) - J->base[0] = lj_ir_knum(J, (lua_Number)(uint32_t)ct->size); - else - J->base[0] = lj_ir_kint(J, (int32_t)ct->size); - } else if (ctype_isextern(ct->info)) { - CTypeID sid = ctype_cid(ct->info); - void *sp = *(void **)cdataptr(cdataV(tv)); - TRef ptr; - ct = ctype_raw(cts, sid); - if (LJ_64 && !checkptr32(sp)) - ptr = lj_ir_kintp(J, (uintptr_t)sp); - else - ptr = lj_ir_kptr(J, sp); - if (rd->data) { - J->base[0] = crec_tv_ct(J, ct, sid, ptr); - } else { - J->needsnap = 1; - crec_ct_tv(J, ct, ptr, J->base[2], &rd->argv[2]); - } - } else { - J->base[0] = lj_ir_kgc(J, obj2gco(cdataV(tv)), IRT_CDATA); - } - } else { - lj_trace_err(J, LJ_TRERR_NOCACHE); - } - } /* else: interpreter will throw. */ -} - -/* -- FFI library functions ----------------------------------------------- */ - -static TRef crec_toint(jit_State *J, CTState *cts, TRef sp, TValue *sval) -{ - return crec_ct_tv(J, ctype_get(cts, CTID_INT32), 0, sp, sval); -} - -void LJ_FASTCALL recff_ffi_new(jit_State *J, RecordFFData *rd) -{ - crec_alloc(J, rd, argv2ctype(J, J->base[0], &rd->argv[0])); -} - -void LJ_FASTCALL recff_ffi_errno(jit_State *J, RecordFFData *rd) -{ - UNUSED(rd); - if (J->base[0]) - lj_trace_err(J, LJ_TRERR_NYICALL); - J->base[0] = lj_ir_call(J, IRCALL_lj_vm_errno); -} - -void LJ_FASTCALL recff_ffi_string(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - TRef tr = J->base[0]; - if (tr) { - TRef trlen = J->base[1]; - if (!tref_isnil(trlen)) { - trlen = crec_toint(J, cts, trlen, &rd->argv[1]); - tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CVOID), 0, tr, &rd->argv[0]); - } else { - tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CCHAR), 0, tr, &rd->argv[0]); - trlen = lj_ir_call(J, IRCALL_strlen, tr); - } - J->base[0] = emitir(IRT(IR_XSNEW, IRT_STR), tr, trlen); - } /* else: interpreter will throw. */ -} - -void LJ_FASTCALL recff_ffi_copy(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - TRef trdst = J->base[0], trsrc = J->base[1], trlen = J->base[2]; - if (trdst && trsrc && (trlen || tref_isstr(trsrc))) { - trdst = crec_ct_tv(J, ctype_get(cts, CTID_P_VOID), 0, trdst, &rd->argv[0]); - trsrc = crec_ct_tv(J, ctype_get(cts, CTID_P_CVOID), 0, trsrc, &rd->argv[1]); - if (trlen) { - trlen = crec_toint(J, cts, trlen, &rd->argv[2]); - } else { - trlen = emitir(IRTI(IR_FLOAD), J->base[1], IRFL_STR_LEN); - trlen = emitir(IRTI(IR_ADD), trlen, lj_ir_kint(J, 1)); - } - rd->nres = 0; - crec_copy(J, trdst, trsrc, trlen, NULL); - } /* else: interpreter will throw. */ -} - -void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - TRef trdst = J->base[0], trlen = J->base[1], trfill = J->base[2]; - if (trdst && trlen) { - CTSize step = 1; - if (tviscdata(&rd->argv[0])) { /* Get alignment of original destination. */ - CTSize sz; - CType *ct = ctype_raw(cts, cdataV(&rd->argv[0])->ctypeid); - if (ctype_isptr(ct->info)) - ct = ctype_rawchild(cts, ct); - step = (1u<argv[0]); - trlen = crec_toint(J, cts, trlen, &rd->argv[1]); - if (trfill) - trfill = crec_toint(J, cts, trfill, &rd->argv[2]); - else - trfill = lj_ir_kint(J, 0); - rd->nres = 0; - crec_fill(J, trdst, trlen, trfill, step); - } /* else: interpreter will throw. */ -} - -void LJ_FASTCALL recff_ffi_typeof(jit_State *J, RecordFFData *rd) -{ - if (tref_iscdata(J->base[0])) { - TRef trid = lj_ir_kint(J, argv2ctype(J, J->base[0], &rd->argv[0])); - J->base[0] = emitir(IRTG(IR_CNEWI, IRT_CDATA), - lj_ir_kint(J, CTID_CTYPEID), trid); - } else { - setfuncV(J->L, &J->errinfo, J->fn); - lj_trace_err_info(J, LJ_TRERR_NYIFFU); - } -} - -void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd) -{ - argv2ctype(J, J->base[0], &rd->argv[0]); - if (tref_iscdata(J->base[1])) { - argv2ctype(J, J->base[1], &rd->argv[1]); - J->postproc = LJ_POST_FIXBOOL; - J->base[0] = TREF_TRUE; - } else { - J->base[0] = TREF_FALSE; - } -} - -void LJ_FASTCALL recff_ffi_abi(jit_State *J, RecordFFData *rd) -{ - if (tref_isstr(J->base[0])) { - /* Specialize to the ABI string to make the boolean result a constant. */ - emitir(IRTG(IR_EQ, IRT_STR), J->base[0], lj_ir_kstr(J, strV(&rd->argv[0]))); - J->postproc = LJ_POST_FIXBOOL; - J->base[0] = TREF_TRUE; - } else { - lj_trace_err(J, LJ_TRERR_BADTYPE); - } -} - -/* Record ffi.sizeof(), ffi.alignof(), ffi.offsetof(). */ -void LJ_FASTCALL recff_ffi_xof(jit_State *J, RecordFFData *rd) -{ - CTypeID id = argv2ctype(J, J->base[0], &rd->argv[0]); - if (rd->data == FF_ffi_sizeof) { - CType *ct = lj_ctype_rawref(ctype_ctsG(J2G(J)), id); - if (ctype_isvltype(ct->info)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - } else if (rd->data == FF_ffi_offsetof) { /* Specialize to the field name. */ - if (!tref_isstr(J->base[1])) - lj_trace_err(J, LJ_TRERR_BADTYPE); - emitir(IRTG(IR_EQ, IRT_STR), J->base[1], lj_ir_kstr(J, strV(&rd->argv[1]))); - rd->nres = 3; /* Just in case. */ - } - J->postproc = LJ_POST_FIXCONST; - J->base[0] = J->base[1] = J->base[2] = TREF_NIL; -} - -void LJ_FASTCALL recff_ffi_gc(jit_State *J, RecordFFData *rd) -{ - argv2cdata(J, J->base[0], &rd->argv[0]); - crec_finalizer(J, J->base[0], &rd->argv[1]); -} - -/* -- Miscellaneous library functions ------------------------------------- */ - -void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd) -{ - CTState *cts = ctype_ctsG(J2G(J)); - CType *d, *ct = lj_ctype_rawref(cts, cdataV(&rd->argv[0])->ctypeid); - if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct); - if (ctype_isnum(ct->info) || ctype_iscomplex(ct->info)) { - if (ctype_isinteger_or_bool(ct->info) && ct->size <= 4 && - !(ct->size == 4 && (ct->info & CTF_UNSIGNED))) - d = ctype_get(cts, CTID_INT32); - else - d = ctype_get(cts, CTID_DOUBLE); - J->base[0] = crec_ct_tv(J, d, 0, J->base[0], &rd->argv[0]); - } else { - J->base[0] = TREF_NIL; - } -} - -#undef IR -#undef emitir -#undef emitconv - -#endif diff --git a/deps/luajit/src/lj_crecord.h b/deps/luajit/src/lj_crecord.h deleted file mode 100644 index a4628ca..0000000 --- a/deps/luajit/src/lj_crecord.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -** Trace recorder for C data operations. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CRECORD_H -#define _LJ_CRECORD_H - -#include "lj_obj.h" -#include "lj_jit.h" -#include "lj_ffrecord.h" - -#if LJ_HASJIT && LJ_HASFFI -LJ_FUNC void LJ_FASTCALL recff_cdata_index(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_cdata_call(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_clib_index(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_new(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_errno(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_string(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_copy(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_typeof(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_istype(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_abi(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_xof(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL recff_ffi_gc(jit_State *J, RecordFFData *rd); -LJ_FUNC void LJ_FASTCALL lj_crecord_tonumber(jit_State *J, RecordFFData *rd); -#endif - -#endif diff --git a/deps/luajit/src/lj_ctype.c b/deps/luajit/src/lj_ctype.c deleted file mode 100644 index ac30174..0000000 --- a/deps/luajit/src/lj_ctype.c +++ /dev/null @@ -1,634 +0,0 @@ -/* -** C type management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include "lj_obj.h" - -#if LJ_HASFFI - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_ctype.h" -#include "lj_ccallback.h" - -/* -- C type definitions -------------------------------------------------- */ - -/* Predefined typedefs. */ -#define CTTDDEF(_) \ - /* Vararg handling. */ \ - _("va_list", P_VOID) \ - _("__builtin_va_list", P_VOID) \ - _("__gnuc_va_list", P_VOID) \ - /* From stddef.h. */ \ - _("ptrdiff_t", INT_PSZ) \ - _("size_t", UINT_PSZ) \ - _("wchar_t", WCHAR) \ - /* Subset of stdint.h. */ \ - _("int8_t", INT8) \ - _("int16_t", INT16) \ - _("int32_t", INT32) \ - _("int64_t", INT64) \ - _("uint8_t", UINT8) \ - _("uint16_t", UINT16) \ - _("uint32_t", UINT32) \ - _("uint64_t", UINT64) \ - _("intptr_t", INT_PSZ) \ - _("uintptr_t", UINT_PSZ) \ - /* End of typedef list. */ - -/* Keywords (only the ones we actually care for). */ -#define CTKWDEF(_) \ - /* Type specifiers. */ \ - _("void", -1, CTOK_VOID) \ - _("_Bool", 0, CTOK_BOOL) \ - _("bool", 1, CTOK_BOOL) \ - _("char", 1, CTOK_CHAR) \ - _("int", 4, CTOK_INT) \ - _("__int8", 1, CTOK_INT) \ - _("__int16", 2, CTOK_INT) \ - _("__int32", 4, CTOK_INT) \ - _("__int64", 8, CTOK_INT) \ - _("float", 4, CTOK_FP) \ - _("double", 8, CTOK_FP) \ - _("long", 0, CTOK_LONG) \ - _("short", 0, CTOK_SHORT) \ - _("_Complex", 0, CTOK_COMPLEX) \ - _("complex", 0, CTOK_COMPLEX) \ - _("__complex", 0, CTOK_COMPLEX) \ - _("__complex__", 0, CTOK_COMPLEX) \ - _("signed", 0, CTOK_SIGNED) \ - _("__signed", 0, CTOK_SIGNED) \ - _("__signed__", 0, CTOK_SIGNED) \ - _("unsigned", 0, CTOK_UNSIGNED) \ - /* Type qualifiers. */ \ - _("const", 0, CTOK_CONST) \ - _("__const", 0, CTOK_CONST) \ - _("__const__", 0, CTOK_CONST) \ - _("volatile", 0, CTOK_VOLATILE) \ - _("__volatile", 0, CTOK_VOLATILE) \ - _("__volatile__", 0, CTOK_VOLATILE) \ - _("restrict", 0, CTOK_RESTRICT) \ - _("__restrict", 0, CTOK_RESTRICT) \ - _("__restrict__", 0, CTOK_RESTRICT) \ - _("inline", 0, CTOK_INLINE) \ - _("__inline", 0, CTOK_INLINE) \ - _("__inline__", 0, CTOK_INLINE) \ - /* Storage class specifiers. */ \ - _("typedef", 0, CTOK_TYPEDEF) \ - _("extern", 0, CTOK_EXTERN) \ - _("static", 0, CTOK_STATIC) \ - _("auto", 0, CTOK_AUTO) \ - _("register", 0, CTOK_REGISTER) \ - /* GCC Attributes. */ \ - _("__extension__", 0, CTOK_EXTENSION) \ - _("__attribute", 0, CTOK_ATTRIBUTE) \ - _("__attribute__", 0, CTOK_ATTRIBUTE) \ - _("asm", 0, CTOK_ASM) \ - _("__asm", 0, CTOK_ASM) \ - _("__asm__", 0, CTOK_ASM) \ - /* MSVC Attributes. */ \ - _("__declspec", 0, CTOK_DECLSPEC) \ - _("__cdecl", CTCC_CDECL, CTOK_CCDECL) \ - _("__thiscall", CTCC_THISCALL, CTOK_CCDECL) \ - _("__fastcall", CTCC_FASTCALL, CTOK_CCDECL) \ - _("__stdcall", CTCC_STDCALL, CTOK_CCDECL) \ - _("__ptr32", 4, CTOK_PTRSZ) \ - _("__ptr64", 8, CTOK_PTRSZ) \ - /* Other type specifiers. */ \ - _("struct", 0, CTOK_STRUCT) \ - _("union", 0, CTOK_UNION) \ - _("enum", 0, CTOK_ENUM) \ - /* Operators. */ \ - _("sizeof", 0, CTOK_SIZEOF) \ - _("__alignof", 0, CTOK_ALIGNOF) \ - _("__alignof__", 0, CTOK_ALIGNOF) \ - /* End of keyword list. */ - -/* Type info for predefined types. Size merged in. */ -static CTInfo lj_ctype_typeinfo[] = { -#define CTTYINFODEF(id, sz, ct, info) CTINFO((ct),(((sz)&0x3fu)<<10)+(info)), -#define CTTDINFODEF(name, id) CTINFO(CT_TYPEDEF, CTID_##id), -#define CTKWINFODEF(name, sz, kw) CTINFO(CT_KW,(((sz)&0x3fu)<<10)+(kw)), -CTTYDEF(CTTYINFODEF) -CTTDDEF(CTTDINFODEF) -CTKWDEF(CTKWINFODEF) -#undef CTTYINFODEF -#undef CTTDINFODEF -#undef CTKWINFODEF - 0 -}; - -/* Predefined type names collected in a single string. */ -static const char * const lj_ctype_typenames = -#define CTTDNAMEDEF(name, id) name "\0" -#define CTKWNAMEDEF(name, sz, cds) name "\0" -CTTDDEF(CTTDNAMEDEF) -CTKWDEF(CTKWNAMEDEF) -#undef CTTDNAMEDEF -#undef CTKWNAMEDEF -; - -#define CTTYPEINFO_NUM (sizeof(lj_ctype_typeinfo)/sizeof(CTInfo)-1) -#ifdef LUAJIT_CTYPE_CHECK_ANCHOR -#define CTTYPETAB_MIN CTTYPEINFO_NUM -#else -#define CTTYPETAB_MIN 128 -#endif - -/* -- C type interning ---------------------------------------------------- */ - -#define ct_hashtype(info, size) (hashrot(info, size) & CTHASH_MASK) -#define ct_hashname(name) \ - (hashrot(u32ptr(name), u32ptr(name) + HASH_BIAS) & CTHASH_MASK) - -/* Create new type element. */ -CTypeID lj_ctype_new(CTState *cts, CType **ctp) -{ - CTypeID id = cts->top; - CType *ct; - lua_assert(cts->L); - if (LJ_UNLIKELY(id >= cts->sizetab)) { - if (id >= CTID_MAX) lj_err_msg(cts->L, LJ_ERR_TABOV); -#ifdef LUAJIT_CTYPE_CHECK_ANCHOR - ct = lj_mem_newvec(cts->L, id+1, CType); - memcpy(ct, cts->tab, id*sizeof(CType)); - memset(cts->tab, 0, id*sizeof(CType)); - lj_mem_freevec(cts->g, cts->tab, cts->sizetab, CType); - cts->tab = ct; - cts->sizetab = id+1; -#else - lj_mem_growvec(cts->L, cts->tab, cts->sizetab, CTID_MAX, CType); -#endif - } - cts->top = id+1; - *ctp = ct = &cts->tab[id]; - ct->info = 0; - ct->size = 0; - ct->sib = 0; - ct->next = 0; - setgcrefnull(ct->name); - return id; -} - -/* Intern a type element. */ -CTypeID lj_ctype_intern(CTState *cts, CTInfo info, CTSize size) -{ - uint32_t h = ct_hashtype(info, size); - CTypeID id = cts->hash[h]; - lua_assert(cts->L); - while (id) { - CType *ct = ctype_get(cts, id); - if (ct->info == info && ct->size == size) - return id; - id = ct->next; - } - id = cts->top; - if (LJ_UNLIKELY(id >= cts->sizetab)) { - if (id >= CTID_MAX) lj_err_msg(cts->L, LJ_ERR_TABOV); - lj_mem_growvec(cts->L, cts->tab, cts->sizetab, CTID_MAX, CType); - } - cts->top = id+1; - cts->tab[id].info = info; - cts->tab[id].size = size; - cts->tab[id].sib = 0; - cts->tab[id].next = cts->hash[h]; - setgcrefnull(cts->tab[id].name); - cts->hash[h] = (CTypeID1)id; - return id; -} - -/* Add type element to hash table. */ -static void ctype_addtype(CTState *cts, CType *ct, CTypeID id) -{ - uint32_t h = ct_hashtype(ct->info, ct->size); - ct->next = cts->hash[h]; - cts->hash[h] = (CTypeID1)id; -} - -/* Add named element to hash table. */ -void lj_ctype_addname(CTState *cts, CType *ct, CTypeID id) -{ - uint32_t h = ct_hashname(gcref(ct->name)); - ct->next = cts->hash[h]; - cts->hash[h] = (CTypeID1)id; -} - -/* Get a C type by name, matching the type mask. */ -CTypeID lj_ctype_getname(CTState *cts, CType **ctp, GCstr *name, uint32_t tmask) -{ - CTypeID id = cts->hash[ct_hashname(name)]; - while (id) { - CType *ct = ctype_get(cts, id); - if (gcref(ct->name) == obj2gco(name) && - ((tmask >> ctype_type(ct->info)) & 1)) { - *ctp = ct; - return id; - } - id = ct->next; - } - *ctp = &cts->tab[0]; /* Simplify caller logic. ctype_get() would assert. */ - return 0; -} - -/* Get a struct/union/enum/function field by name. */ -CType *lj_ctype_getfieldq(CTState *cts, CType *ct, GCstr *name, CTSize *ofs, - CTInfo *qual) -{ - while (ct->sib) { - ct = ctype_get(cts, ct->sib); - if (gcref(ct->name) == obj2gco(name)) { - *ofs = ct->size; - return ct; - } - if (ctype_isxattrib(ct->info, CTA_SUBTYPE)) { - CType *fct, *cct = ctype_child(cts, ct); - CTInfo q = 0; - while (ctype_isattrib(cct->info)) { - if (ctype_attrib(cct->info) == CTA_QUAL) q |= cct->size; - cct = ctype_child(cts, cct); - } - fct = lj_ctype_getfieldq(cts, cct, name, ofs, qual); - if (fct) { - if (qual) *qual |= q; - *ofs += ct->size; - return fct; - } - } - } - return NULL; /* Not found. */ -} - -/* -- C type information -------------------------------------------------- */ - -/* Follow references and get raw type for a C type ID. */ -CType *lj_ctype_rawref(CTState *cts, CTypeID id) -{ - CType *ct = ctype_get(cts, id); - while (ctype_isattrib(ct->info) || ctype_isref(ct->info)) - ct = ctype_child(cts, ct); - return ct; -} - -/* Get size for a C type ID. Does NOT support VLA/VLS. */ -CTSize lj_ctype_size(CTState *cts, CTypeID id) -{ - CType *ct = ctype_raw(cts, id); - return ctype_hassize(ct->info) ? ct->size : CTSIZE_INVALID; -} - -/* Get size for a variable-length C type. Does NOT support other C types. */ -CTSize lj_ctype_vlsize(CTState *cts, CType *ct, CTSize nelem) -{ - uint64_t xsz = 0; - if (ctype_isstruct(ct->info)) { - CTypeID arrid = 0, fid = ct->sib; - xsz = ct->size; /* Add the struct size. */ - while (fid) { - CType *ctf = ctype_get(cts, fid); - if (ctype_type(ctf->info) == CT_FIELD) - arrid = ctype_cid(ctf->info); /* Remember last field of VLS. */ - fid = ctf->sib; - } - ct = ctype_raw(cts, arrid); - } - lua_assert(ctype_isvlarray(ct->info)); /* Must be a VLA. */ - ct = ctype_rawchild(cts, ct); /* Get array element. */ - lua_assert(ctype_hassize(ct->info)); - /* Calculate actual size of VLA and check for overflow. */ - xsz += (uint64_t)ct->size * nelem; - return xsz < 0x80000000u ? (CTSize)xsz : CTSIZE_INVALID; -} - -/* Get type, qualifiers, size and alignment for a C type ID. */ -CTInfo lj_ctype_info(CTState *cts, CTypeID id, CTSize *szp) -{ - CTInfo qual = 0; - CType *ct = ctype_get(cts, id); - for (;;) { - CTInfo info = ct->info; - if (ctype_isenum(info)) { - /* Follow child. Need to look at its attributes, too. */ - } else if (ctype_isattrib(info)) { - if (ctype_isxattrib(info, CTA_QUAL)) - qual |= ct->size; - else if (ctype_isxattrib(info, CTA_ALIGN) && !(qual & CTFP_ALIGNED)) - qual |= CTFP_ALIGNED + CTALIGN(ct->size); - } else { - if (!(qual & CTFP_ALIGNED)) qual |= (info & CTF_ALIGN); - qual |= (info & ~(CTF_ALIGN|CTMASK_CID)); - lua_assert(ctype_hassize(info) || ctype_isfunc(info)); - *szp = ctype_isfunc(info) ? CTSIZE_INVALID : ct->size; - break; - } - ct = ctype_get(cts, ctype_cid(info)); - } - return qual; -} - -/* Get ctype metamethod. */ -cTValue *lj_ctype_meta(CTState *cts, CTypeID id, MMS mm) -{ - CType *ct = ctype_get(cts, id); - cTValue *tv; - while (ctype_isattrib(ct->info) || ctype_isref(ct->info)) { - id = ctype_cid(ct->info); - ct = ctype_get(cts, id); - } - if (ctype_isptr(ct->info) && - ctype_isfunc(ctype_get(cts, ctype_cid(ct->info))->info)) - tv = lj_tab_getstr(cts->miscmap, &cts->g->strempty); - else - tv = lj_tab_getinth(cts->miscmap, -(int32_t)id); - if (tv && tvistab(tv) && - (tv = lj_tab_getstr(tabV(tv), mmname_str(cts->g, mm))) && !tvisnil(tv)) - return tv; - return NULL; -} - -/* -- C type representation ----------------------------------------------- */ - -/* Fixed max. length of a C type representation. */ -#define CTREPR_MAX 512 - -typedef struct CTRepr { - char *pb, *pe; - CTState *cts; - lua_State *L; - int needsp; - int ok; - char buf[CTREPR_MAX]; -} CTRepr; - -/* Prepend string. */ -static void ctype_prepstr(CTRepr *ctr, const char *str, MSize len) -{ - char *p = ctr->pb; - if (ctr->buf + len+1 > p) { ctr->ok = 0; return; } - if (ctr->needsp) *--p = ' '; - ctr->needsp = 1; - p -= len; - while (len-- > 0) p[len] = str[len]; - ctr->pb = p; -} - -#define ctype_preplit(ctr, str) ctype_prepstr((ctr), "" str, sizeof(str)-1) - -/* Prepend char. */ -static void ctype_prepc(CTRepr *ctr, int c) -{ - if (ctr->buf >= ctr->pb) { ctr->ok = 0; return; } - *--ctr->pb = c; -} - -/* Prepend number. */ -static void ctype_prepnum(CTRepr *ctr, uint32_t n) -{ - char *p = ctr->pb; - if (ctr->buf + 10+1 > p) { ctr->ok = 0; return; } - do { *--p = (char)('0' + n % 10); } while (n /= 10); - ctr->pb = p; - ctr->needsp = 0; -} - -/* Append char. */ -static void ctype_appc(CTRepr *ctr, int c) -{ - if (ctr->pe >= ctr->buf + CTREPR_MAX) { ctr->ok = 0; return; } - *ctr->pe++ = c; -} - -/* Append number. */ -static void ctype_appnum(CTRepr *ctr, uint32_t n) -{ - char buf[10]; - char *p = buf+sizeof(buf); - char *q = ctr->pe; - if (q > ctr->buf + CTREPR_MAX - 10) { ctr->ok = 0; return; } - do { *--p = (char)('0' + n % 10); } while (n /= 10); - do { *q++ = *p++; } while (p < buf+sizeof(buf)); - ctr->pe = q; -} - -/* Prepend qualifiers. */ -static void ctype_prepqual(CTRepr *ctr, CTInfo info) -{ - if ((info & CTF_VOLATILE)) ctype_preplit(ctr, "volatile"); - if ((info & CTF_CONST)) ctype_preplit(ctr, "const"); -} - -/* Prepend named type. */ -static void ctype_preptype(CTRepr *ctr, CType *ct, CTInfo qual, const char *t) -{ - if (gcref(ct->name)) { - GCstr *str = gco2str(gcref(ct->name)); - ctype_prepstr(ctr, strdata(str), str->len); - } else { - if (ctr->needsp) ctype_prepc(ctr, ' '); - ctype_prepnum(ctr, ctype_typeid(ctr->cts, ct)); - ctr->needsp = 1; - } - ctype_prepstr(ctr, t, (MSize)strlen(t)); - ctype_prepqual(ctr, qual); -} - -static void ctype_repr(CTRepr *ctr, CTypeID id) -{ - CType *ct = ctype_get(ctr->cts, id); - CTInfo qual = 0; - int ptrto = 0; - for (;;) { - CTInfo info = ct->info; - CTSize size = ct->size; - switch (ctype_type(info)) { - case CT_NUM: - if ((info & CTF_BOOL)) { - ctype_preplit(ctr, "bool"); - } else if ((info & CTF_FP)) { - if (size == sizeof(double)) ctype_preplit(ctr, "double"); - else if (size == sizeof(float)) ctype_preplit(ctr, "float"); - else ctype_preplit(ctr, "long double"); - } else if (size == 1) { - if (!((info ^ CTF_UCHAR) & CTF_UNSIGNED)) ctype_preplit(ctr, "char"); - else if (CTF_UCHAR) ctype_preplit(ctr, "signed char"); - else ctype_preplit(ctr, "unsigned char"); - } else if (size < 8) { - if (size == 4) ctype_preplit(ctr, "int"); - else ctype_preplit(ctr, "short"); - if ((info & CTF_UNSIGNED)) ctype_preplit(ctr, "unsigned"); - } else { - ctype_preplit(ctr, "_t"); - ctype_prepnum(ctr, size*8); - ctype_preplit(ctr, "int"); - if ((info & CTF_UNSIGNED)) ctype_prepc(ctr, 'u'); - } - ctype_prepqual(ctr, (qual|info)); - return; - case CT_VOID: - ctype_preplit(ctr, "void"); - ctype_prepqual(ctr, (qual|info)); - return; - case CT_STRUCT: - ctype_preptype(ctr, ct, qual, (info & CTF_UNION) ? "union" : "struct"); - return; - case CT_ENUM: - if (id == CTID_CTYPEID) { - ctype_preplit(ctr, "ctype"); - return; - } - ctype_preptype(ctr, ct, qual, "enum"); - return; - case CT_ATTRIB: - if (ctype_attrib(info) == CTA_QUAL) qual |= size; - break; - case CT_PTR: - if ((info & CTF_REF)) { - ctype_prepc(ctr, '&'); - } else { - ctype_prepqual(ctr, (qual|info)); - if (LJ_64 && size == 4) ctype_preplit(ctr, "__ptr32"); - ctype_prepc(ctr, '*'); - } - qual = 0; - ptrto = 1; - ctr->needsp = 1; - break; - case CT_ARRAY: - if (ctype_isrefarray(info)) { - ctr->needsp = 1; - if (ptrto) { ptrto = 0; ctype_prepc(ctr, '('); ctype_appc(ctr, ')'); } - ctype_appc(ctr, '['); - if (size != CTSIZE_INVALID) { - CTSize csize = ctype_child(ctr->cts, ct)->size; - ctype_appnum(ctr, csize ? size/csize : 0); - } else if ((info & CTF_VLA)) { - ctype_appc(ctr, '?'); - } - ctype_appc(ctr, ']'); - } else if ((info & CTF_COMPLEX)) { - if (size == 2*sizeof(float)) ctype_preplit(ctr, "float"); - ctype_preplit(ctr, "complex"); - return; - } else { - ctype_preplit(ctr, ")))"); - ctype_prepnum(ctr, size); - ctype_preplit(ctr, "__attribute__((vector_size("); - } - break; - case CT_FUNC: - ctr->needsp = 1; - if (ptrto) { ptrto = 0; ctype_prepc(ctr, '('); ctype_appc(ctr, ')'); } - ctype_appc(ctr, '('); - ctype_appc(ctr, ')'); - break; - default: - lua_assert(0); - break; - } - ct = ctype_get(ctr->cts, ctype_cid(info)); - } -} - -/* Return a printable representation of a C type. */ -GCstr *lj_ctype_repr(lua_State *L, CTypeID id, GCstr *name) -{ - global_State *g = G(L); - CTRepr ctr; - ctr.pb = ctr.pe = &ctr.buf[CTREPR_MAX/2]; - ctr.cts = ctype_ctsG(g); - ctr.L = L; - ctr.ok = 1; - ctr.needsp = 0; - if (name) ctype_prepstr(&ctr, strdata(name), name->len); - ctype_repr(&ctr, id); - if (LJ_UNLIKELY(!ctr.ok)) return lj_str_newlit(L, "?"); - return lj_str_new(L, ctr.pb, ctr.pe - ctr.pb); -} - -/* Convert int64_t/uint64_t to string with 'LL' or 'ULL' suffix. */ -GCstr *lj_ctype_repr_int64(lua_State *L, uint64_t n, int isunsigned) -{ - char buf[1+20+3]; - char *p = buf+sizeof(buf); - int sign = 0; - *--p = 'L'; *--p = 'L'; - if (isunsigned) { - *--p = 'U'; - } else if ((int64_t)n < 0) { - n = (uint64_t)-(int64_t)n; - sign = 1; - } - do { *--p = (char)('0' + n % 10); } while (n /= 10); - if (sign) *--p = '-'; - return lj_str_new(L, p, (size_t)(buf+sizeof(buf)-p)); -} - -/* Convert complex to string with 'i' or 'I' suffix. */ -GCstr *lj_ctype_repr_complex(lua_State *L, void *sp, CTSize size) -{ - char buf[2*LJ_STR_NUMBUF+2+1]; - TValue re, im; - size_t len; - if (size == 2*sizeof(double)) { - re.n = *(double *)sp; im.n = ((double *)sp)[1]; - } else { - re.n = (double)*(float *)sp; im.n = (double)((float *)sp)[1]; - } - len = lj_str_bufnum(buf, &re); - if (!(im.u32.hi & 0x80000000u) || im.n != im.n) buf[len++] = '+'; - len += lj_str_bufnum(buf+len, &im); - buf[len] = buf[len-1] >= 'a' ? 'I' : 'i'; - return lj_str_new(L, buf, len+1); -} - -/* -- C type state -------------------------------------------------------- */ - -/* Initialize C type table and state. */ -CTState *lj_ctype_init(lua_State *L) -{ - CTState *cts = lj_mem_newt(L, sizeof(CTState), CTState); - CType *ct = lj_mem_newvec(L, CTTYPETAB_MIN, CType); - const char *name = lj_ctype_typenames; - CTypeID id; - memset(cts, 0, sizeof(CTState)); - cts->tab = ct; - cts->sizetab = CTTYPETAB_MIN; - cts->top = CTTYPEINFO_NUM; - cts->L = NULL; - cts->g = G(L); - for (id = 0; id < CTTYPEINFO_NUM; id++, ct++) { - CTInfo info = lj_ctype_typeinfo[id]; - ct->size = (CTSize)((int32_t)(info << 16) >> 26); - ct->info = info & 0xffff03ffu; - ct->sib = 0; - if (ctype_type(info) == CT_KW || ctype_istypedef(info)) { - size_t len = strlen(name); - GCstr *str = lj_str_new(L, name, len); - ctype_setname(ct, str); - name += len+1; - lj_ctype_addname(cts, ct, id); - } else { - setgcrefnull(ct->name); - ct->next = 0; - if (!ctype_isenum(info)) ctype_addtype(cts, ct, id); - } - } - setmref(G(L)->ctype_state, cts); - return cts; -} - -/* Free C type table and state. */ -void lj_ctype_freestate(global_State *g) -{ - CTState *cts = ctype_ctsG(g); - if (cts) { - lj_ccallback_mcode_free(cts); - lj_mem_freevec(g, cts->tab, cts->sizetab, CType); - lj_mem_freevec(g, cts->cb.cbid, cts->cb.sizeid, CTypeID1); - lj_mem_freet(g, cts); - } -} - -#endif diff --git a/deps/luajit/src/lj_ctype.h b/deps/luajit/src/lj_ctype.h deleted file mode 100644 index 3df26f0..0000000 --- a/deps/luajit/src/lj_ctype.h +++ /dev/null @@ -1,461 +0,0 @@ -/* -** C type management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_CTYPE_H -#define _LJ_CTYPE_H - -#include "lj_obj.h" -#include "lj_gc.h" - -#if LJ_HASFFI - -/* -- C type definitions -------------------------------------------------- */ - -/* C type numbers. Highest 4 bits of C type info. ORDER CT. */ -enum { - /* Externally visible types. */ - CT_NUM, /* Integer or floating-point numbers. */ - CT_STRUCT, /* Struct or union. */ - CT_PTR, /* Pointer or reference. */ - CT_ARRAY, /* Array or complex type. */ - CT_MAYCONVERT = CT_ARRAY, - CT_VOID, /* Void type. */ - CT_ENUM, /* Enumeration. */ - CT_HASSIZE = CT_ENUM, /* Last type where ct->size holds the actual size. */ - CT_FUNC, /* Function. */ - CT_TYPEDEF, /* Typedef. */ - CT_ATTRIB, /* Miscellaneous attributes. */ - /* Internal element types. */ - CT_FIELD, /* Struct/union field or function parameter. */ - CT_BITFIELD, /* Struct/union bitfield. */ - CT_CONSTVAL, /* Constant value. */ - CT_EXTERN, /* External reference. */ - CT_KW /* Keyword. */ -}; - -LJ_STATIC_ASSERT(((int)CT_PTR & (int)CT_ARRAY) == CT_PTR); -LJ_STATIC_ASSERT(((int)CT_STRUCT & (int)CT_ARRAY) == CT_STRUCT); - -/* -** ---------- info ------------ -** |type flags... A cid | size | sib | next | name | -** +----------------------------+--------+-------+-------+-------+-- -** |NUM BFvcUL.. A | size | | type | | -** |STRUCT ..vcU..V A | size | field | name? | name? | -** |PTR ..vcR... A cid | size | | type | | -** |ARRAY VCvc...V A cid | size | | type | | -** |VOID ..vc.... A | size | | type | | -** |ENUM A cid | size | const | name? | name? | -** |FUNC ....VS.. cc cid | nargs | field | name? | name? | -** |TYPEDEF cid | | | name | name | -** |ATTRIB attrnum cid | attr | sib? | type? | | -** |FIELD cid | offset | field | | name? | -** |BITFIELD B.vcU csz bsz pos | offset | field | | name? | -** |CONSTVAL c cid | value | const | name | name | -** |EXTERN cid | | sib? | name | name | -** |KW tok | size | | name | name | -** +----------------------------+--------+-------+-------+-------+-- -** ^^ ^^--- bits used for C type conversion dispatch -*/ - -/* C type info flags. TFFArrrr */ -#define CTF_BOOL 0x08000000u /* Boolean: NUM, BITFIELD. */ -#define CTF_FP 0x04000000u /* Floating-point: NUM. */ -#define CTF_CONST 0x02000000u /* Const qualifier. */ -#define CTF_VOLATILE 0x01000000u /* Volatile qualifier. */ -#define CTF_UNSIGNED 0x00800000u /* Unsigned: NUM, BITFIELD. */ -#define CTF_LONG 0x00400000u /* Long: NUM. */ -#define CTF_VLA 0x00100000u /* Variable-length: ARRAY, STRUCT. */ -#define CTF_REF 0x00800000u /* Reference: PTR. */ -#define CTF_VECTOR 0x08000000u /* Vector: ARRAY. */ -#define CTF_COMPLEX 0x04000000u /* Complex: ARRAY. */ -#define CTF_UNION 0x00800000u /* Union: STRUCT. */ -#define CTF_VARARG 0x00800000u /* Vararg: FUNC. */ -#define CTF_SSEREGPARM 0x00400000u /* SSE register parameters: FUNC. */ - -#define CTF_QUAL (CTF_CONST|CTF_VOLATILE) -#define CTF_ALIGN (CTMASK_ALIGN< 0 ? CTF_UNSIGNED : 0) - -/* Flags used in parser. .F.Ammvf cp->attr */ -#define CTFP_ALIGNED 0x00000001u /* cp->attr + ALIGN */ -#define CTFP_PACKED 0x00000002u /* cp->attr */ -/* ...C...f cp->fattr */ -#define CTFP_CCONV 0x00000001u /* cp->fattr + CCONV/[SSE]REGPARM */ - -/* C type info bitfields. */ -#define CTMASK_CID 0x0000ffffu /* Max. 65536 type IDs. */ -#define CTMASK_NUM 0xf0000000u /* Max. 16 type numbers. */ -#define CTSHIFT_NUM 28 -#define CTMASK_ALIGN 15 /* Max. alignment is 2^15. */ -#define CTSHIFT_ALIGN 16 -#define CTMASK_ATTRIB 255 /* Max. 256 attributes. */ -#define CTSHIFT_ATTRIB 16 -#define CTMASK_CCONV 3 /* Max. 4 calling conventions. */ -#define CTSHIFT_CCONV 16 -#define CTMASK_REGPARM 3 /* Max. 0-3 regparms. */ -#define CTSHIFT_REGPARM 18 -/* Bitfields only used in parser. */ -#define CTMASK_VSIZEP 15 /* Max. vector size is 2^15. */ -#define CTSHIFT_VSIZEP 4 -#define CTMASK_MSIZEP 255 /* Max. type size (via mode) is 128. */ -#define CTSHIFT_MSIZEP 8 - -/* Info bits for BITFIELD. Max. size of bitfield is 64 bits. */ -#define CTBSZ_MAX 32 /* Max. size of bitfield is 32 bit. */ -#define CTBSZ_FIELD 127 /* Temp. marker for regular field. */ -#define CTMASK_BITPOS 127 -#define CTMASK_BITBSZ 127 -#define CTMASK_BITCSZ 127 -#define CTSHIFT_BITPOS 0 -#define CTSHIFT_BITBSZ 8 -#define CTSHIFT_BITCSZ 16 - -#define CTF_INSERT(info, field, val) \ - info = (info & ~(CTMASK_##field<> CTSHIFT_NUM) -#define ctype_cid(info) ((CTypeID)((info) & CTMASK_CID)) -#define ctype_align(info) (((info) >> CTSHIFT_ALIGN) & CTMASK_ALIGN) -#define ctype_attrib(info) (((info) >> CTSHIFT_ATTRIB) & CTMASK_ATTRIB) -#define ctype_bitpos(info) (((info) >> CTSHIFT_BITPOS) & CTMASK_BITPOS) -#define ctype_bitbsz(info) (((info) >> CTSHIFT_BITBSZ) & CTMASK_BITBSZ) -#define ctype_bitcsz(info) (((info) >> CTSHIFT_BITCSZ) & CTMASK_BITCSZ) -#define ctype_vsizeP(info) (((info) >> CTSHIFT_VSIZEP) & CTMASK_VSIZEP) -#define ctype_msizeP(info) (((info) >> CTSHIFT_MSIZEP) & CTMASK_MSIZEP) -#define ctype_cconv(info) (((info) >> CTSHIFT_CCONV) & CTMASK_CCONV) - -/* Simple type checks. */ -#define ctype_isnum(info) (ctype_type((info)) == CT_NUM) -#define ctype_isvoid(info) (ctype_type((info)) == CT_VOID) -#define ctype_isptr(info) (ctype_type((info)) == CT_PTR) -#define ctype_isarray(info) (ctype_type((info)) == CT_ARRAY) -#define ctype_isstruct(info) (ctype_type((info)) == CT_STRUCT) -#define ctype_isfunc(info) (ctype_type((info)) == CT_FUNC) -#define ctype_isenum(info) (ctype_type((info)) == CT_ENUM) -#define ctype_istypedef(info) (ctype_type((info)) == CT_TYPEDEF) -#define ctype_isattrib(info) (ctype_type((info)) == CT_ATTRIB) -#define ctype_isfield(info) (ctype_type((info)) == CT_FIELD) -#define ctype_isbitfield(info) (ctype_type((info)) == CT_BITFIELD) -#define ctype_isconstval(info) (ctype_type((info)) == CT_CONSTVAL) -#define ctype_isextern(info) (ctype_type((info)) == CT_EXTERN) -#define ctype_hassize(info) (ctype_type((info)) <= CT_HASSIZE) - -/* Combined type and flag checks. */ -#define ctype_isinteger(info) \ - (((info) & (CTMASK_NUM|CTF_BOOL|CTF_FP)) == CTINFO(CT_NUM, 0)) -#define ctype_isinteger_or_bool(info) \ - (((info) & (CTMASK_NUM|CTF_FP)) == CTINFO(CT_NUM, 0)) -#define ctype_isbool(info) \ - (((info) & (CTMASK_NUM|CTF_BOOL)) == CTINFO(CT_NUM, CTF_BOOL)) -#define ctype_isfp(info) \ - (((info) & (CTMASK_NUM|CTF_FP)) == CTINFO(CT_NUM, CTF_FP)) - -#define ctype_ispointer(info) \ - ((ctype_type(info) >> 1) == (CT_PTR >> 1)) /* Pointer or array. */ -#define ctype_isref(info) \ - (((info) & (CTMASK_NUM|CTF_REF)) == CTINFO(CT_PTR, CTF_REF)) - -#define ctype_isrefarray(info) \ - (((info) & (CTMASK_NUM|CTF_VECTOR|CTF_COMPLEX)) == CTINFO(CT_ARRAY, 0)) -#define ctype_isvector(info) \ - (((info) & (CTMASK_NUM|CTF_VECTOR)) == CTINFO(CT_ARRAY, CTF_VECTOR)) -#define ctype_iscomplex(info) \ - (((info) & (CTMASK_NUM|CTF_COMPLEX)) == CTINFO(CT_ARRAY, CTF_COMPLEX)) - -#define ctype_isvltype(info) \ - (((info) & ((CTMASK_NUM|CTF_VLA) - (2u<") _(STRING, "") \ - _(INTEGER, "") _(EOF, "") \ - _(OROR, "||") _(ANDAND, "&&") _(EQ, "==") _(NE, "!=") \ - _(LE, "<=") _(GE, ">=") _(SHL, "<<") _(SHR, ">>") _(DEREF, "->") - -/* Simple declaration specifiers. */ -#define CDSDEF(_) \ - _(VOID) _(BOOL) _(CHAR) _(INT) _(FP) \ - _(LONG) _(LONGLONG) _(SHORT) _(COMPLEX) _(SIGNED) _(UNSIGNED) \ - _(CONST) _(VOLATILE) _(RESTRICT) _(INLINE) \ - _(TYPEDEF) _(EXTERN) _(STATIC) _(AUTO) _(REGISTER) - -/* C keywords. */ -#define CKWDEF(_) \ - CDSDEF(_) _(EXTENSION) _(ASM) _(ATTRIBUTE) \ - _(DECLSPEC) _(CCDECL) _(PTRSZ) \ - _(STRUCT) _(UNION) _(ENUM) \ - _(SIZEOF) _(ALIGNOF) - -/* C token numbers. */ -enum { - CTOK_OFS = 255, -#define CTOKNUM(name, sym) CTOK_##name, -#define CKWNUM(name) CTOK_##name, -CTOKDEF(CTOKNUM) -CKWDEF(CKWNUM) -#undef CTOKNUM -#undef CKWNUM - CTOK_FIRSTDECL = CTOK_VOID, - CTOK_FIRSTSCL = CTOK_TYPEDEF, - CTOK_LASTDECLFLAG = CTOK_REGISTER, - CTOK_LASTDECL = CTOK_ENUM -}; - -/* Declaration specifier flags. */ -enum { -#define CDSFLAG(name) CDF_##name = (1u << (CTOK_##name - CTOK_FIRSTDECL)), -CDSDEF(CDSFLAG) -#undef CDSFLAG - CDF__END -}; - -#define CDF_SCL (CDF_TYPEDEF|CDF_EXTERN|CDF_STATIC|CDF_AUTO|CDF_REGISTER) - -/* -- C type management --------------------------------------------------- */ - -#define ctype_ctsG(g) (mref((g)->ctype_state, CTState)) - -/* Get C type state. */ -static LJ_AINLINE CTState *ctype_cts(lua_State *L) -{ - CTState *cts = ctype_ctsG(G(L)); - cts->L = L; /* Save L for errors and allocations. */ - return cts; -} - -/* Save and restore state of C type table. */ -#define LJ_CTYPE_SAVE(cts) CTState savects_ = *(cts) -#define LJ_CTYPE_RESTORE(cts) \ - ((cts)->top = savects_.top, \ - memcpy((cts)->hash, savects_.hash, sizeof(savects_.hash))) - -/* Check C type ID for validity when assertions are enabled. */ -static LJ_AINLINE CTypeID ctype_check(CTState *cts, CTypeID id) -{ - lua_assert(id > 0 && id < cts->top); UNUSED(cts); - return id; -} - -/* Get C type for C type ID. */ -static LJ_AINLINE CType *ctype_get(CTState *cts, CTypeID id) -{ - return &cts->tab[ctype_check(cts, id)]; -} - -/* Get C type ID for a C type. */ -#define ctype_typeid(cts, ct) ((CTypeID)((ct) - (cts)->tab)) - -/* Get child C type. */ -static LJ_AINLINE CType *ctype_child(CTState *cts, CType *ct) -{ - lua_assert(!(ctype_isvoid(ct->info) || ctype_isstruct(ct->info) || - ctype_isbitfield(ct->info))); /* These don't have children. */ - return ctype_get(cts, ctype_cid(ct->info)); -} - -/* Get raw type for a C type ID. */ -static LJ_AINLINE CType *ctype_raw(CTState *cts, CTypeID id) -{ - CType *ct = ctype_get(cts, id); - while (ctype_isattrib(ct->info)) ct = ctype_child(cts, ct); - return ct; -} - -/* Get raw type of the child of a C type. */ -static LJ_AINLINE CType *ctype_rawchild(CTState *cts, CType *ct) -{ - do { ct = ctype_child(cts, ct); } while (ctype_isattrib(ct->info)); - return ct; -} - -/* Set the name of a C type table element. */ -static LJ_AINLINE void ctype_setname(CType *ct, GCstr *s) -{ - /* NOBARRIER: mark string as fixed -- the C type table is never collected. */ - fixstring(s); - setgcref(ct->name, obj2gco(s)); -} - -LJ_FUNC CTypeID lj_ctype_new(CTState *cts, CType **ctp); -LJ_FUNC CTypeID lj_ctype_intern(CTState *cts, CTInfo info, CTSize size); -LJ_FUNC void lj_ctype_addname(CTState *cts, CType *ct, CTypeID id); -LJ_FUNC CTypeID lj_ctype_getname(CTState *cts, CType **ctp, GCstr *name, - uint32_t tmask); -LJ_FUNC CType *lj_ctype_getfieldq(CTState *cts, CType *ct, GCstr *name, - CTSize *ofs, CTInfo *qual); -#define lj_ctype_getfield(cts, ct, name, ofs) \ - lj_ctype_getfieldq((cts), (ct), (name), (ofs), NULL) -LJ_FUNC CType *lj_ctype_rawref(CTState *cts, CTypeID id); -LJ_FUNC CTSize lj_ctype_size(CTState *cts, CTypeID id); -LJ_FUNC CTSize lj_ctype_vlsize(CTState *cts, CType *ct, CTSize nelem); -LJ_FUNC CTInfo lj_ctype_info(CTState *cts, CTypeID id, CTSize *szp); -LJ_FUNC cTValue *lj_ctype_meta(CTState *cts, CTypeID id, MMS mm); -LJ_FUNC GCstr *lj_ctype_repr(lua_State *L, CTypeID id, GCstr *name); -LJ_FUNC GCstr *lj_ctype_repr_int64(lua_State *L, uint64_t n, int isunsigned); -LJ_FUNC GCstr *lj_ctype_repr_complex(lua_State *L, void *sp, CTSize size); -LJ_FUNC CTState *lj_ctype_init(lua_State *L); -LJ_FUNC void lj_ctype_freestate(global_State *g); - -#endif - -#endif diff --git a/deps/luajit/src/lj_debug.c b/deps/luajit/src/lj_debug.c deleted file mode 100644 index bd2fa1f..0000000 --- a/deps/luajit/src/lj_debug.c +++ /dev/null @@ -1,605 +0,0 @@ -/* -** Debugging and introspection. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_debug_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_state.h" -#include "lj_frame.h" -#include "lj_bc.h" -#include "lj_vm.h" -#if LJ_HASJIT -#include "lj_jit.h" -#endif - -/* -- Frames -------------------------------------------------------------- */ - -/* Get frame corresponding to a level. */ -cTValue *lj_debug_frame(lua_State *L, int level, int *size) -{ - cTValue *frame, *nextframe, *bot = tvref(L->stack); - /* Traverse frames backwards. */ - for (nextframe = frame = L->base-1; frame > bot; ) { - if (frame_gc(frame) == obj2gco(L)) - level++; /* Skip dummy frames. See lj_meta_call(). */ - if (level-- == 0) { - *size = (int)(nextframe - frame); - return frame; /* Level found. */ - } - nextframe = frame; - if (frame_islua(frame)) { - frame = frame_prevl(frame); - } else { - if (frame_isvarg(frame)) - level++; /* Skip vararg pseudo-frame. */ - frame = frame_prevd(frame); - } - } - *size = level; - return NULL; /* Level not found. */ -} - -/* Invalid bytecode position. */ -#define NO_BCPOS (~(BCPos)0) - -/* Return bytecode position for function/frame or NO_BCPOS. */ -static BCPos debug_framepc(lua_State *L, GCfunc *fn, cTValue *nextframe) -{ - const BCIns *ins; - GCproto *pt; - BCPos pos; - lua_assert(fn->c.gct == ~LJ_TFUNC || fn->c.gct == ~LJ_TTHREAD); - if (!isluafunc(fn)) { /* Cannot derive a PC for non-Lua functions. */ - return NO_BCPOS; - } else if (nextframe == NULL) { /* Lua function on top. */ - void *cf = cframe_raw(L->cframe); - if (cf == NULL || (char *)cframe_pc(cf) == (char *)cframe_L(cf)) - return NO_BCPOS; - ins = cframe_pc(cf); /* Only happens during error/hook handling. */ - } else { - if (frame_islua(nextframe)) { - ins = frame_pc(nextframe); - } else if (frame_iscont(nextframe)) { - ins = frame_contpc(nextframe); - } else { - /* Lua function below errfunc/gc/hook: find cframe to get the PC. */ - void *cf = cframe_raw(L->cframe); - TValue *f = L->base-1; - for (;;) { - if (cf == NULL) - return NO_BCPOS; - while (cframe_nres(cf) < 0) { - if (f >= restorestack(L, -cframe_nres(cf))) - break; - cf = cframe_raw(cframe_prev(cf)); - if (cf == NULL) - return NO_BCPOS; - } - if (f < nextframe) - break; - if (frame_islua(f)) { - f = frame_prevl(f); - } else { - if (frame_isc(f) || (LJ_HASFFI && frame_iscont(f) && - (f-1)->u32.lo == LJ_CONT_FFI_CALLBACK)) - cf = cframe_raw(cframe_prev(cf)); - f = frame_prevd(f); - } - } - ins = cframe_pc(cf); - } - } - pt = funcproto(fn); - pos = proto_bcpos(pt, ins) - 1; -#if LJ_HASJIT - if (pos > pt->sizebc) { /* Undo the effects of lj_trace_exit for JLOOP. */ - GCtrace *T = (GCtrace *)((char *)(ins-1) - offsetof(GCtrace, startins)); - lua_assert(bc_isret(bc_op(ins[-1]))); - pos = proto_bcpos(pt, mref(T->startpc, const BCIns)); - } -#endif - return pos; -} - -/* -- Line numbers -------------------------------------------------------- */ - -/* Get line number for a bytecode position. */ -BCLine LJ_FASTCALL lj_debug_line(GCproto *pt, BCPos pc) -{ - const void *lineinfo = proto_lineinfo(pt); - if (pc <= pt->sizebc && lineinfo) { - BCLine first = pt->firstline; - if (pc == pt->sizebc) return first + pt->numline; - if (pc-- == 0) return first; - if (pt->numline < 256) - return first + (BCLine)((const uint8_t *)lineinfo)[pc]; - else if (pt->numline < 65536) - return first + (BCLine)((const uint16_t *)lineinfo)[pc]; - else - return first + (BCLine)((const uint32_t *)lineinfo)[pc]; - } - return 0; -} - -/* Get line number for function/frame. */ -static BCLine debug_frameline(lua_State *L, GCfunc *fn, cTValue *nextframe) -{ - BCPos pc = debug_framepc(L, fn, nextframe); - if (pc != NO_BCPOS) { - GCproto *pt = funcproto(fn); - lua_assert(pc <= pt->sizebc); - return lj_debug_line(pt, pc); - } - return -1; -} - -/* -- Variable names ------------------------------------------------------ */ - -/* Read ULEB128 value. */ -static uint32_t debug_read_uleb128(const uint8_t **pp) -{ - const uint8_t *p = *pp; - uint32_t v = *p++; - if (LJ_UNLIKELY(v >= 0x80)) { - int sh = 0; - v &= 0x7f; - do { v |= ((*p & 0x7f) << (sh += 7)); } while (*p++ >= 0x80); - } - *pp = p; - return v; -} - -/* Get name of a local variable from slot number and PC. */ -static const char *debug_varname(const GCproto *pt, BCPos pc, BCReg slot) -{ - const uint8_t *p = proto_varinfo(pt); - if (p) { - BCPos lastpc = 0; - for (;;) { - const char *name = (const char *)p; - uint32_t vn = *p++; - BCPos startpc, endpc; - if (vn < VARNAME__MAX) { - if (vn == VARNAME_END) break; /* End of varinfo. */ - } else { - while (*p++) ; /* Skip over variable name string. */ - } - lastpc = startpc = lastpc + debug_read_uleb128(&p); - if (startpc > pc) break; - endpc = startpc + debug_read_uleb128(&p); - if (pc < endpc && slot-- == 0) { - if (vn < VARNAME__MAX) { -#define VARNAMESTR(name, str) str "\0" - name = VARNAMEDEF(VARNAMESTR); -#undef VARNAMESTR - if (--vn) while (*name++ || --vn) ; - } - return name; - } - } - } - return NULL; -} - -/* Get name of local variable from 1-based slot number and function/frame. */ -static TValue *debug_localname(lua_State *L, const lua_Debug *ar, - const char **name, BCReg slot1) -{ - uint32_t offset = (uint32_t)ar->i_ci & 0xffff; - uint32_t size = (uint32_t)ar->i_ci >> 16; - TValue *frame = tvref(L->stack) + offset; - TValue *nextframe = size ? frame + size : NULL; - GCfunc *fn = frame_func(frame); - BCPos pc = debug_framepc(L, fn, nextframe); - if (!nextframe) nextframe = L->top; - if ((int)slot1 < 0) { /* Negative slot number is for varargs. */ - if (pc != NO_BCPOS) { - GCproto *pt = funcproto(fn); - if ((pt->flags & PROTO_VARARG)) { - slot1 = pt->numparams + (BCReg)(-(int)slot1); - if (frame_isvarg(frame)) { /* Vararg frame has been set up? (pc!=0) */ - nextframe = frame; - frame = frame_prevd(frame); - } - if (frame + slot1 < nextframe) { - *name = "(*vararg)"; - return frame+slot1; - } - } - } - return NULL; - } - if (pc != NO_BCPOS && - (*name = debug_varname(funcproto(fn), pc, slot1-1)) != NULL) - ; - else if (slot1 > 0 && frame + slot1 < nextframe) - *name = "(*temporary)"; - return frame+slot1; -} - -/* Get name of upvalue. */ -const char *lj_debug_uvname(GCproto *pt, uint32_t idx) -{ - const uint8_t *p = proto_uvinfo(pt); - lua_assert(idx < pt->sizeuv); - if (!p) return ""; - if (idx) while (*p++ || --idx) ; - return (const char *)p; -} - -/* Get name and value of upvalue. */ -const char *lj_debug_uvnamev(cTValue *o, uint32_t idx, TValue **tvp) -{ - if (tvisfunc(o)) { - GCfunc *fn = funcV(o); - if (isluafunc(fn)) { - GCproto *pt = funcproto(fn); - if (idx < pt->sizeuv) { - *tvp = uvval(&gcref(fn->l.uvptr[idx])->uv); - return lj_debug_uvname(pt, idx); - } - } else { - if (idx < fn->c.nupvalues) { - *tvp = &fn->c.upvalue[idx]; - return ""; - } - } - } - return NULL; -} - -/* Deduce name of an object from slot number and PC. */ -const char *lj_debug_slotname(GCproto *pt, const BCIns *ip, BCReg slot, - const char **name) -{ - const char *lname; -restart: - lname = debug_varname(pt, proto_bcpos(pt, ip), slot); - if (lname != NULL) { *name = lname; return "local"; } - while (--ip > proto_bc(pt)) { - BCIns ins = *ip; - BCOp op = bc_op(ins); - BCReg ra = bc_a(ins); - if (bcmode_a(op) == BCMbase) { - if (slot >= ra && (op != BC_KNIL || slot <= bc_d(ins))) - return NULL; - } else if (bcmode_a(op) == BCMdst && ra == slot) { - switch (bc_op(ins)) { - case BC_MOV: - if (ra == slot) { slot = bc_d(ins); goto restart; } - break; - case BC_GGET: - *name = strdata(gco2str(proto_kgc(pt, ~(ptrdiff_t)bc_d(ins)))); - return "global"; - case BC_TGETS: - *name = strdata(gco2str(proto_kgc(pt, ~(ptrdiff_t)bc_c(ins)))); - if (ip > proto_bc(pt)) { - BCIns insp = ip[-1]; - if (bc_op(insp) == BC_MOV && bc_a(insp) == ra+1 && - bc_d(insp) == bc_b(ins)) - return "method"; - } - return "field"; - case BC_UGET: - *name = lj_debug_uvname(pt, bc_d(ins)); - return "upvalue"; - default: - return NULL; - } - } - } - return NULL; -} - -/* Deduce function name from caller of a frame. */ -const char *lj_debug_funcname(lua_State *L, TValue *frame, const char **name) -{ - TValue *pframe; - GCfunc *fn; - BCPos pc; - if (frame <= tvref(L->stack)) - return NULL; - if (frame_isvarg(frame)) - frame = frame_prevd(frame); - pframe = frame_prev(frame); - fn = frame_func(pframe); - pc = debug_framepc(L, fn, frame); - if (pc != NO_BCPOS) { - GCproto *pt = funcproto(fn); - const BCIns *ip = &proto_bc(pt)[check_exp(pc < pt->sizebc, pc)]; - MMS mm = bcmode_mm(bc_op(*ip)); - if (mm == MM_call) { - BCReg slot = bc_a(*ip); - if (bc_op(*ip) == BC_ITERC) slot -= 3; - return lj_debug_slotname(pt, ip, slot, name); - } else if (mm != MM__MAX) { - *name = strdata(mmname_str(G(L), mm)); - return "metamethod"; - } - } - return NULL; -} - -/* -- Source code locations ----------------------------------------------- */ - -/* Generate shortened source name. */ -void lj_debug_shortname(char *out, GCstr *str) -{ - const char *src = strdata(str); - if (*src == '=') { - strncpy(out, src+1, LUA_IDSIZE); /* Remove first char. */ - out[LUA_IDSIZE-1] = '\0'; /* Ensures null termination. */ - } else if (*src == '@') { /* Output "source", or "...source". */ - size_t len = str->len-1; - src++; /* Skip the `@' */ - if (len >= LUA_IDSIZE) { - src += len-(LUA_IDSIZE-4); /* Get last part of file name. */ - *out++ = '.'; *out++ = '.'; *out++ = '.'; - } - strcpy(out, src); - } else { /* Output [string "string"]. */ - size_t len; /* Length, up to first control char. */ - for (len = 0; len < LUA_IDSIZE-12; len++) - if (((const unsigned char *)src)[len] < ' ') break; - strcpy(out, "[string \""); out += 9; - if (src[len] != '\0') { /* Must truncate? */ - if (len > LUA_IDSIZE-15) len = LUA_IDSIZE-15; - strncpy(out, src, len); out += len; - strcpy(out, "..."); out += 3; - } else { - strcpy(out, src); out += len; - } - strcpy(out, "\"]"); - } -} - -/* Add current location of a frame to error message. */ -void lj_debug_addloc(lua_State *L, const char *msg, - cTValue *frame, cTValue *nextframe) -{ - if (frame) { - GCfunc *fn = frame_func(frame); - if (isluafunc(fn)) { - BCLine line = debug_frameline(L, fn, nextframe); - if (line >= 0) { - char buf[LUA_IDSIZE]; - lj_debug_shortname(buf, proto_chunkname(funcproto(fn))); - lj_str_pushf(L, "%s:%d: %s", buf, line, msg); - return; - } - } - } - lj_str_pushf(L, "%s", msg); -} - -/* Push location string for a bytecode position to Lua stack. */ -void lj_debug_pushloc(lua_State *L, GCproto *pt, BCPos pc) -{ - GCstr *name = proto_chunkname(pt); - const char *s = strdata(name); - MSize i, len = name->len; - BCLine line = lj_debug_line(pt, pc); - if (*s == '@') { - s++; len--; - for (i = len; i > 0; i--) - if (s[i] == '/' || s[i] == '\\') { - s += i+1; - break; - } - lj_str_pushf(L, "%s:%d", s, line); - } else if (len > 40) { - lj_str_pushf(L, "%p:%d", pt, line); - } else if (*s == '=') { - lj_str_pushf(L, "%s:%d", s+1, line); - } else { - lj_str_pushf(L, "\"%s\":%d", s, line); - } -} - -/* -- Public debug API ---------------------------------------------------- */ - -/* lua_getupvalue() and lua_setupvalue() are in lj_api.c. */ - -LUA_API const char *lua_getlocal(lua_State *L, const lua_Debug *ar, int n) -{ - const char *name = NULL; - if (ar) { - TValue *o = debug_localname(L, ar, &name, (BCReg)n); - if (name) { - copyTV(L, L->top, o); - incr_top(L); - } - } else if (tvisfunc(L->top-1) && isluafunc(funcV(L->top-1))) { - name = debug_varname(funcproto(funcV(L->top-1)), 0, (BCReg)n-1); - } - return name; -} - -LUA_API const char *lua_setlocal(lua_State *L, const lua_Debug *ar, int n) -{ - const char *name = NULL; - TValue *o = debug_localname(L, ar, &name, (BCReg)n); - if (name) - copyTV(L, o, L->top-1); - L->top--; - return name; -} - -int lj_debug_getinfo(lua_State *L, const char *what, lj_Debug *ar, int ext) -{ - int opt_f = 0, opt_L = 0; - TValue *frame = NULL; - TValue *nextframe = NULL; - GCfunc *fn; - if (*what == '>') { - TValue *func = L->top - 1; - api_check(L, tvisfunc(func)); - fn = funcV(func); - L->top--; - what++; - } else { - uint32_t offset = (uint32_t)ar->i_ci & 0xffff; - uint32_t size = (uint32_t)ar->i_ci >> 16; - lua_assert(offset != 0); - frame = tvref(L->stack) + offset; - if (size) nextframe = frame + size; - lua_assert(frame <= tvref(L->maxstack) && - (!nextframe || nextframe <= tvref(L->maxstack))); - fn = frame_func(frame); - lua_assert(fn->c.gct == ~LJ_TFUNC); - } - for (; *what; what++) { - if (*what == 'S') { - if (isluafunc(fn)) { - GCproto *pt = funcproto(fn); - BCLine firstline = pt->firstline; - GCstr *name = proto_chunkname(pt); - ar->source = strdata(name); - lj_debug_shortname(ar->short_src, name); - ar->linedefined = (int)firstline; - ar->lastlinedefined = (int)(firstline + pt->numline); - ar->what = (firstline || !pt->numline) ? "Lua" : "main"; - } else { - ar->source = "=[C]"; - ar->short_src[0] = '['; - ar->short_src[1] = 'C'; - ar->short_src[2] = ']'; - ar->short_src[3] = '\0'; - ar->linedefined = -1; - ar->lastlinedefined = -1; - ar->what = "C"; - } - } else if (*what == 'l') { - ar->currentline = frame ? debug_frameline(L, fn, nextframe) : -1; - } else if (*what == 'u') { - ar->nups = fn->c.nupvalues; - if (ext) { - if (isluafunc(fn)) { - GCproto *pt = funcproto(fn); - ar->nparams = pt->numparams; - ar->isvararg = !!(pt->flags & PROTO_VARARG); - } else { - ar->nparams = 0; - ar->isvararg = 1; - } - } - } else if (*what == 'n') { - ar->namewhat = frame ? lj_debug_funcname(L, frame, &ar->name) : NULL; - if (ar->namewhat == NULL) { - ar->namewhat = ""; - ar->name = NULL; - } - } else if (*what == 'f') { - opt_f = 1; - } else if (*what == 'L') { - opt_L = 1; - } else { - return 0; /* Bad option. */ - } - } - if (opt_f) { - setfuncV(L, L->top, fn); - incr_top(L); - } - if (opt_L) { - if (isluafunc(fn)) { - GCtab *t = lj_tab_new(L, 0, 0); - GCproto *pt = funcproto(fn); - const void *lineinfo = proto_lineinfo(pt); - if (lineinfo) { - BCLine first = pt->firstline; - int sz = pt->numline < 256 ? 1 : pt->numline < 65536 ? 2 : 4; - MSize i, szl = pt->sizebc-1; - for (i = 0; i < szl; i++) { - BCLine line = first + - (sz == 1 ? (BCLine)((const uint8_t *)lineinfo)[i] : - sz == 2 ? (BCLine)((const uint16_t *)lineinfo)[i] : - (BCLine)((const uint32_t *)lineinfo)[i]); - setboolV(lj_tab_setint(L, t, line), 1); - } - } - settabV(L, L->top, t); - } else { - setnilV(L->top); - } - incr_top(L); - } - return 1; /* Ok. */ -} - -LUA_API int lua_getinfo(lua_State *L, const char *what, lua_Debug *ar) -{ - return lj_debug_getinfo(L, what, (lj_Debug *)ar, 0); -} - -LUA_API int lua_getstack(lua_State *L, int level, lua_Debug *ar) -{ - int size; - cTValue *frame = lj_debug_frame(L, level, &size); - if (frame) { - ar->i_ci = (size << 16) + (int)(frame - tvref(L->stack)); - return 1; - } else { - ar->i_ci = level - size; - return 0; - } -} - -/* Number of frames for the leading and trailing part of a traceback. */ -#define TRACEBACK_LEVELS1 12 -#define TRACEBACK_LEVELS2 10 - -LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, - int level) -{ - int top = (int)(L->top - L->base); - int lim = TRACEBACK_LEVELS1; - lua_Debug ar; - if (msg) lua_pushfstring(L, "%s\n", msg); - lua_pushliteral(L, "stack traceback:"); - while (lua_getstack(L1, level++, &ar)) { - GCfunc *fn; - if (level > lim) { - if (!lua_getstack(L1, level + TRACEBACK_LEVELS2, &ar)) { - level--; - } else { - lua_pushliteral(L, "\n\t..."); - lua_getstack(L1, -10, &ar); - level = ar.i_ci - TRACEBACK_LEVELS2; - } - lim = 2147483647; - continue; - } - lua_getinfo(L1, "Snlf", &ar); - fn = funcV(L1->top-1); L1->top--; - if (isffunc(fn) && !*ar.namewhat) - lua_pushfstring(L, "\n\t[builtin#%d]:", fn->c.ffid); - else - lua_pushfstring(L, "\n\t%s:", ar.short_src); - if (ar.currentline > 0) - lua_pushfstring(L, "%d:", ar.currentline); - if (*ar.namewhat) { - lua_pushfstring(L, " in function " LUA_QS, ar.name); - } else { - if (*ar.what == 'm') { - lua_pushliteral(L, " in main chunk"); - } else if (*ar.what == 'C') { - lua_pushfstring(L, " at %p", fn->c.f); - } else { - lua_pushfstring(L, " in function <%s:%d>", - ar.short_src, ar.linedefined); - } - } - if ((int)(L->top - L->base) - top >= 15) - lua_concat(L, (int)(L->top - L->base) - top); - } - lua_concat(L, (int)(L->top - L->base) - top); -} - diff --git a/deps/luajit/src/lj_debug.h b/deps/luajit/src/lj_debug.h deleted file mode 100644 index fa8988c..0000000 --- a/deps/luajit/src/lj_debug.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -** Debugging and introspection. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_DEBUG_H -#define _LJ_DEBUG_H - -#include "lj_obj.h" - -typedef struct lj_Debug { - /* Common fields. Must be in the same order as in lua.h. */ - int event; - const char *name; - const char *namewhat; - const char *what; - const char *source; - int currentline; - int nups; - int linedefined; - int lastlinedefined; - char short_src[LUA_IDSIZE]; - int i_ci; - /* Extended fields. Only valid if lj_debug_getinfo() is called with ext = 1.*/ - int nparams; - int isvararg; -} lj_Debug; - -LJ_FUNC cTValue *lj_debug_frame(lua_State *L, int level, int *size); -LJ_FUNC BCLine LJ_FASTCALL lj_debug_line(GCproto *pt, BCPos pc); -LJ_FUNC const char *lj_debug_uvname(GCproto *pt, uint32_t idx); -LJ_FUNC const char *lj_debug_uvnamev(cTValue *o, uint32_t idx, TValue **tvp); -LJ_FUNC const char *lj_debug_slotname(GCproto *pt, const BCIns *pc, - BCReg slot, const char **name); -LJ_FUNC const char *lj_debug_funcname(lua_State *L, TValue *frame, - const char **name); -LJ_FUNC void lj_debug_shortname(char *out, GCstr *str); -LJ_FUNC void lj_debug_addloc(lua_State *L, const char *msg, - cTValue *frame, cTValue *nextframe); -LJ_FUNC void lj_debug_pushloc(lua_State *L, GCproto *pt, BCPos pc); -LJ_FUNC int lj_debug_getinfo(lua_State *L, const char *what, lj_Debug *ar, - int ext); - -/* Fixed internal variable names. */ -#define VARNAMEDEF(_) \ - _(FOR_IDX, "(for index)") \ - _(FOR_STOP, "(for limit)") \ - _(FOR_STEP, "(for step)") \ - _(FOR_GEN, "(for generator)") \ - _(FOR_STATE, "(for state)") \ - _(FOR_CTL, "(for control)") - -enum { - VARNAME_END, -#define VARNAMEENUM(name, str) VARNAME_##name, - VARNAMEDEF(VARNAMEENUM) -#undef VARNAMEENUM - VARNAME__MAX -}; - -#endif diff --git a/deps/luajit/src/lj_def.h b/deps/luajit/src/lj_def.h deleted file mode 100644 index e666c9e..0000000 --- a/deps/luajit/src/lj_def.h +++ /dev/null @@ -1,353 +0,0 @@ -/* -** LuaJIT common internal definitions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_DEF_H -#define _LJ_DEF_H - -#include "lua.h" - -#if defined(_MSC_VER) -/* MSVC is stuck in the last century and doesn't have C99's stdint.h. */ -typedef __int8 int8_t; -typedef __int16 int16_t; -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -#ifdef _WIN64 -typedef __int64 intptr_t; -typedef unsigned __int64 uintptr_t; -#else -typedef __int32 intptr_t; -typedef unsigned __int32 uintptr_t; -#endif -#elif defined(__symbian__) -/* Cough. */ -typedef signed char int8_t; -typedef short int int16_t; -typedef int int32_t; -typedef long long int64_t; -typedef unsigned char uint8_t; -typedef unsigned short int uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long long uint64_t; -typedef int intptr_t; -typedef unsigned int uintptr_t; -#else -#include -#endif - -/* Needed everywhere. */ -#include -#include - -/* Various VM limits. */ -#define LJ_MAX_MEM 0x7fffff00 /* Max. total memory allocation. */ -#define LJ_MAX_ALLOC LJ_MAX_MEM /* Max. individual allocation length. */ -#define LJ_MAX_STR LJ_MAX_MEM /* Max. string length. */ -#define LJ_MAX_UDATA LJ_MAX_MEM /* Max. userdata length. */ - -#define LJ_MAX_STRTAB (1<<26) /* Max. string table size. */ -#define LJ_MAX_HBITS 26 /* Max. hash bits. */ -#define LJ_MAX_ABITS 28 /* Max. bits of array key. */ -#define LJ_MAX_ASIZE ((1<<(LJ_MAX_ABITS-1))+1) /* Max. array part size. */ -#define LJ_MAX_COLOSIZE 16 /* Max. elems for colocated array. */ - -#define LJ_MAX_LINE LJ_MAX_MEM /* Max. source code line number. */ -#define LJ_MAX_XLEVEL 200 /* Max. syntactic nesting level. */ -#define LJ_MAX_BCINS (1<<26) /* Max. # of bytecode instructions. */ -#define LJ_MAX_SLOTS 250 /* Max. # of slots in a Lua func. */ -#define LJ_MAX_LOCVAR 200 /* Max. # of local variables. */ -#define LJ_MAX_UPVAL 60 /* Max. # of upvalues. */ - -#define LJ_MAX_IDXCHAIN 100 /* __index/__newindex chain limit. */ -#define LJ_STACK_EXTRA 5 /* Extra stack space (metamethods). */ - -#define LJ_NUM_CBPAGE 1 /* Number of FFI callback pages. */ - -/* Minimum table/buffer sizes. */ -#define LJ_MIN_GLOBAL 6 /* Min. global table size (hbits). */ -#define LJ_MIN_REGISTRY 2 /* Min. registry size (hbits). */ -#define LJ_MIN_STRTAB 256 /* Min. string table size (pow2). */ -#define LJ_MIN_SBUF 32 /* Min. string buffer length. */ -#define LJ_MIN_VECSZ 8 /* Min. size for growable vectors. */ -#define LJ_MIN_IRSZ 32 /* Min. size for growable IR. */ -#define LJ_MIN_K64SZ 16 /* Min. size for chained K64Array. */ - -/* JIT compiler limits. */ -#define LJ_MAX_JSLOTS 250 /* Max. # of stack slots for a trace. */ -#define LJ_MAX_PHI 64 /* Max. # of PHIs for a loop. */ -#define LJ_MAX_EXITSTUBGR 16 /* Max. # of exit stub groups. */ - -/* Various macros. */ -#ifndef UNUSED -#define UNUSED(x) ((void)(x)) /* to avoid warnings */ -#endif - -#define U64x(hi, lo) (((uint64_t)0x##hi << 32) + (uint64_t)0x##lo) -#define i32ptr(p) ((int32_t)(intptr_t)(void *)(p)) -#define u32ptr(p) ((uint32_t)(intptr_t)(void *)(p)) - -#define checki8(x) ((x) == (int32_t)(int8_t)(x)) -#define checku8(x) ((x) == (int32_t)(uint8_t)(x)) -#define checki16(x) ((x) == (int32_t)(int16_t)(x)) -#define checku16(x) ((x) == (int32_t)(uint16_t)(x)) -#define checki32(x) ((x) == (int32_t)(x)) -#define checku32(x) ((x) == (uint32_t)(x)) -#define checkptr32(x) ((uintptr_t)(x) == (uint32_t)(uintptr_t)(x)) - -/* Every half-decent C compiler transforms this into a rotate instruction. */ -#define lj_rol(x, n) (((x)<<(n)) | ((x)>>(-(int)(n)&(8*sizeof(x)-1)))) -#define lj_ror(x, n) (((x)<<(-(int)(n)&(8*sizeof(x)-1))) | ((x)>>(n))) - -/* A really naive Bloom filter. But sufficient for our needs. */ -typedef uintptr_t BloomFilter; -#define BLOOM_MASK (8*sizeof(BloomFilter) - 1) -#define bloombit(x) ((uintptr_t)1 << ((x) & BLOOM_MASK)) -#define bloomset(b, x) ((b) |= bloombit((x))) -#define bloomtest(b, x) ((b) & bloombit((x))) - -#if defined(__GNUC__) || defined(__psp2__) - -#define LJ_NORET __attribute__((noreturn)) -#define LJ_ALIGN(n) __attribute__((aligned(n))) -#define LJ_INLINE inline -#define LJ_AINLINE inline __attribute__((always_inline)) -#define LJ_NOINLINE __attribute__((noinline)) - -#if defined(__ELF__) || defined(__MACH__) || defined(__psp2__) -#if !((defined(__sun__) && defined(__svr4__)) || defined(__CELLOS_LV2__)) -#define LJ_NOAPI extern __attribute__((visibility("hidden"))) -#endif -#endif - -/* Note: it's only beneficial to use fastcall on x86 and then only for up to -** two non-FP args. The amalgamated compile covers all LJ_FUNC cases. Only -** indirect calls and related tail-called C functions are marked as fastcall. -*/ -#if defined(__i386__) -#define LJ_FASTCALL __attribute__((fastcall)) -#endif - -#define LJ_LIKELY(x) __builtin_expect(!!(x), 1) -#define LJ_UNLIKELY(x) __builtin_expect(!!(x), 0) - -#define lj_ffs(x) ((uint32_t)__builtin_ctz(x)) -/* Don't ask ... */ -#if defined(__INTEL_COMPILER) && (defined(__i386__) || defined(__x86_64__)) -static LJ_AINLINE uint32_t lj_fls(uint32_t x) -{ - uint32_t r; __asm__("bsrl %1, %0" : "=r" (r) : "rm" (x) : "cc"); return r; -} -#else -#define lj_fls(x) ((uint32_t)(__builtin_clz(x)^31)) -#endif - -#if defined(__arm__) -static LJ_AINLINE uint32_t lj_bswap(uint32_t x) -{ -#if defined(__psp2__) - return __builtin_rev(x); -#else - uint32_t r; -#if __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6T2__ || __ARM_ARCH_6Z__ ||\ - __ARM_ARCH_6ZK__ || __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ - __asm__("rev %0, %1" : "=r" (r) : "r" (x)); - return r; -#else -#ifdef __thumb__ - r = x ^ lj_ror(x, 16); -#else - __asm__("eor %0, %1, %1, ror #16" : "=r" (r) : "r" (x)); -#endif - return ((r & 0xff00ffffu) >> 8) ^ lj_ror(x, 8); -#endif -#endif -} - -static LJ_AINLINE uint64_t lj_bswap64(uint64_t x) -{ - return ((uint64_t)lj_bswap((uint32_t)x)<<32) | lj_bswap((uint32_t)(x>>32)); -} -#elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) -static LJ_AINLINE uint32_t lj_bswap(uint32_t x) -{ - return (uint32_t)__builtin_bswap32((int32_t)x); -} - -static LJ_AINLINE uint64_t lj_bswap64(uint64_t x) -{ - return (uint64_t)__builtin_bswap64((int64_t)x); -} -#elif defined(__i386__) || defined(__x86_64__) -static LJ_AINLINE uint32_t lj_bswap(uint32_t x) -{ - uint32_t r; __asm__("bswap %0" : "=r" (r) : "0" (x)); return r; -} - -#if defined(__i386__) -static LJ_AINLINE uint64_t lj_bswap64(uint64_t x) -{ - return ((uint64_t)lj_bswap((uint32_t)x)<<32) | lj_bswap((uint32_t)(x>>32)); -} -#else -static LJ_AINLINE uint64_t lj_bswap64(uint64_t x) -{ - uint64_t r; __asm__("bswap %0" : "=r" (r) : "0" (x)); return r; -} -#endif -#else -static LJ_AINLINE uint32_t lj_bswap(uint32_t x) -{ - return (x << 24) | ((x & 0xff00) << 8) | ((x >> 8) & 0xff00) | (x >> 24); -} - -static LJ_AINLINE uint64_t lj_bswap64(uint64_t x) -{ - return (uint64_t)lj_bswap((uint32_t)(x >> 32)) | - ((uint64_t)lj_bswap((uint32_t)x) << 32); -} -#endif - -typedef union __attribute__((packed)) Unaligned16 { - uint16_t u; - uint8_t b[2]; -} Unaligned16; - -typedef union __attribute__((packed)) Unaligned32 { - uint32_t u; - uint8_t b[4]; -} Unaligned32; - -/* Unaligned load of uint16_t. */ -static LJ_AINLINE uint16_t lj_getu16(const void *p) -{ - return ((const Unaligned16 *)p)->u; -} - -/* Unaligned load of uint32_t. */ -static LJ_AINLINE uint32_t lj_getu32(const void *p) -{ - return ((const Unaligned32 *)p)->u; -} - -#elif defined(_MSC_VER) - -#define LJ_NORET __declspec(noreturn) -#define LJ_ALIGN(n) __declspec(align(n)) -#define LJ_INLINE __inline -#define LJ_AINLINE __forceinline -#define LJ_NOINLINE __declspec(noinline) -#if defined(_M_IX86) -#define LJ_FASTCALL __fastcall -#endif - -#ifdef _M_PPC -unsigned int _CountLeadingZeros(long); -#pragma intrinsic(_CountLeadingZeros) -static LJ_AINLINE uint32_t lj_fls(uint32_t x) -{ - return _CountLeadingZeros(x) ^ 31; -} -#else -unsigned char _BitScanForward(uint32_t *, unsigned long); -unsigned char _BitScanReverse(uint32_t *, unsigned long); -#pragma intrinsic(_BitScanForward) -#pragma intrinsic(_BitScanReverse) - -static LJ_AINLINE uint32_t lj_ffs(uint32_t x) -{ - uint32_t r; _BitScanForward(&r, x); return r; -} - -static LJ_AINLINE uint32_t lj_fls(uint32_t x) -{ - uint32_t r; _BitScanReverse(&r, x); return r; -} -#endif - -unsigned long _byteswap_ulong(unsigned long); -uint64_t _byteswap_uint64(uint64_t); -#define lj_bswap(x) (_byteswap_ulong((x))) -#define lj_bswap64(x) (_byteswap_uint64((x))) - -#if defined(_M_PPC) && defined(LUAJIT_NO_UNALIGNED) -/* -** Replacement for unaligned loads on Xbox 360. Disabled by default since it's -** usually more costly than the occasional stall when crossing a cache-line. -*/ -static LJ_AINLINE uint16_t lj_getu16(const void *v) -{ - const uint8_t *p = (const uint8_t *)v; - return (uint16_t)((p[0]<<8) | p[1]); -} -static LJ_AINLINE uint32_t lj_getu32(const void *v) -{ - const uint8_t *p = (const uint8_t *)v; - return (uint32_t)((p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]); -} -#else -/* Unaligned loads are generally ok on x86/x64. */ -#define lj_getu16(p) (*(uint16_t *)(p)) -#define lj_getu32(p) (*(uint32_t *)(p)) -#endif - -#else -#error "missing defines for your compiler" -#endif - -/* Optional defines. */ -#ifndef LJ_FASTCALL -#define LJ_FASTCALL -#endif -#ifndef LJ_NORET -#define LJ_NORET -#endif -#ifndef LJ_NOAPI -#define LJ_NOAPI extern -#endif -#ifndef LJ_LIKELY -#define LJ_LIKELY(x) (x) -#define LJ_UNLIKELY(x) (x) -#endif - -/* Attributes for internal functions. */ -#define LJ_DATA LJ_NOAPI -#define LJ_DATADEF -#define LJ_ASMF LJ_NOAPI -#define LJ_FUNCA LJ_NOAPI -#if defined(ljamalg_c) -#define LJ_FUNC static -#else -#define LJ_FUNC LJ_NOAPI -#endif -#define LJ_FUNC_NORET LJ_FUNC LJ_NORET -#define LJ_FUNCA_NORET LJ_FUNCA LJ_NORET -#define LJ_ASMF_NORET LJ_ASMF LJ_NORET - -/* Runtime assertions. */ -#ifdef lua_assert -#define check_exp(c, e) (lua_assert(c), (e)) -#define api_check(l, e) lua_assert(e) -#else -#define lua_assert(c) ((void)0) -#define check_exp(c, e) (e) -#define api_check luai_apicheck -#endif - -/* Static assertions. */ -#define LJ_ASSERT_NAME2(name, line) name ## line -#define LJ_ASSERT_NAME(line) LJ_ASSERT_NAME2(lj_assert_, line) -#ifdef __COUNTER__ -#define LJ_STATIC_ASSERT(cond) \ - extern void LJ_ASSERT_NAME(__COUNTER__)(int STATIC_ASSERTION_FAILED[(cond)?1:-1]) -#else -#define LJ_STATIC_ASSERT(cond) \ - extern void LJ_ASSERT_NAME(__LINE__)(int STATIC_ASSERTION_FAILED[(cond)?1:-1]) -#endif - -#endif diff --git a/deps/luajit/src/lj_dispatch.c b/deps/luajit/src/lj_dispatch.c deleted file mode 100644 index 3725657..0000000 --- a/deps/luajit/src/lj_dispatch.c +++ /dev/null @@ -1,494 +0,0 @@ -/* -** Instruction dispatch handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_dispatch_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_func.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_debug.h" -#include "lj_state.h" -#include "lj_frame.h" -#include "lj_bc.h" -#include "lj_ff.h" -#if LJ_HASJIT -#include "lj_jit.h" -#endif -#if LJ_HASFFI -#include "lj_ccallback.h" -#endif -#include "lj_trace.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "luajit.h" - -/* Bump GG_NUM_ASMFF in lj_dispatch.h as needed. Ugly. */ -LJ_STATIC_ASSERT(GG_NUM_ASMFF == FF_NUM_ASMFUNC); - -/* -- Dispatch table management ------------------------------------------- */ - -#if LJ_TARGET_MIPS -#include -LJ_FUNCA_NORET void LJ_FASTCALL lj_ffh_coroutine_wrap_err(lua_State *L, - lua_State *co); - -#define GOTFUNC(name) (ASMFunction)name, -static const ASMFunction dispatch_got[] = { - GOTDEF(GOTFUNC) -}; -#undef GOTFUNC -#endif - -/* Initialize instruction dispatch table and hot counters. */ -void lj_dispatch_init(GG_State *GG) -{ - uint32_t i; - ASMFunction *disp = GG->dispatch; - for (i = 0; i < GG_LEN_SDISP; i++) - disp[GG_LEN_DDISP+i] = disp[i] = makeasmfunc(lj_bc_ofs[i]); - for (i = GG_LEN_SDISP; i < GG_LEN_DDISP; i++) - disp[i] = makeasmfunc(lj_bc_ofs[i]); - /* The JIT engine is off by default. luaopen_jit() turns it on. */ - disp[BC_FORL] = disp[BC_IFORL]; - disp[BC_ITERL] = disp[BC_IITERL]; - disp[BC_LOOP] = disp[BC_ILOOP]; - disp[BC_FUNCF] = disp[BC_IFUNCF]; - disp[BC_FUNCV] = disp[BC_IFUNCV]; - GG->g.bc_cfunc_ext = GG->g.bc_cfunc_int = BCINS_AD(BC_FUNCC, LUA_MINSTACK, 0); - for (i = 0; i < GG_NUM_ASMFF; i++) - GG->bcff[i] = BCINS_AD(BC__MAX+i, 0, 0); -#if LJ_TARGET_MIPS - memcpy(GG->got, dispatch_got, LJ_GOT__MAX*4); -#endif -} - -#if LJ_HASJIT -/* Initialize hotcount table. */ -void lj_dispatch_init_hotcount(global_State *g) -{ - int32_t hotloop = G2J(g)->param[JIT_P_hotloop]; - HotCount start = (HotCount)(hotloop*HOTCOUNT_LOOP - 1); - HotCount *hotcount = G2GG(g)->hotcount; - uint32_t i; - for (i = 0; i < HOTCOUNT_SIZE; i++) - hotcount[i] = start; -} -#endif - -/* Internal dispatch mode bits. */ -#define DISPMODE_JIT 0x01 /* JIT compiler on. */ -#define DISPMODE_REC 0x02 /* Recording active. */ -#define DISPMODE_INS 0x04 /* Override instruction dispatch. */ -#define DISPMODE_CALL 0x08 /* Override call dispatch. */ -#define DISPMODE_RET 0x10 /* Override return dispatch. */ - -/* Update dispatch table depending on various flags. */ -void lj_dispatch_update(global_State *g) -{ - uint8_t oldmode = g->dispatchmode; - uint8_t mode = 0; -#if LJ_HASJIT - mode |= (G2J(g)->flags & JIT_F_ON) ? DISPMODE_JIT : 0; - mode |= G2J(g)->state != LJ_TRACE_IDLE ? - (DISPMODE_REC|DISPMODE_INS|DISPMODE_CALL) : 0; -#endif - mode |= (g->hookmask & (LUA_MASKLINE|LUA_MASKCOUNT)) ? DISPMODE_INS : 0; - mode |= (g->hookmask & LUA_MASKCALL) ? DISPMODE_CALL : 0; - mode |= (g->hookmask & LUA_MASKRET) ? DISPMODE_RET : 0; - if (oldmode != mode) { /* Mode changed? */ - ASMFunction *disp = G2GG(g)->dispatch; - ASMFunction f_forl, f_iterl, f_loop, f_funcf, f_funcv; - g->dispatchmode = mode; - - /* Hotcount if JIT is on, but not while recording. */ - if ((mode & (DISPMODE_JIT|DISPMODE_REC)) == DISPMODE_JIT) { - f_forl = makeasmfunc(lj_bc_ofs[BC_FORL]); - f_iterl = makeasmfunc(lj_bc_ofs[BC_ITERL]); - f_loop = makeasmfunc(lj_bc_ofs[BC_LOOP]); - f_funcf = makeasmfunc(lj_bc_ofs[BC_FUNCF]); - f_funcv = makeasmfunc(lj_bc_ofs[BC_FUNCV]); - } else { /* Otherwise use the non-hotcounting instructions. */ - f_forl = disp[GG_LEN_DDISP+BC_IFORL]; - f_iterl = disp[GG_LEN_DDISP+BC_IITERL]; - f_loop = disp[GG_LEN_DDISP+BC_ILOOP]; - f_funcf = makeasmfunc(lj_bc_ofs[BC_IFUNCF]); - f_funcv = makeasmfunc(lj_bc_ofs[BC_IFUNCV]); - } - /* Init static counting instruction dispatch first (may be copied below). */ - disp[GG_LEN_DDISP+BC_FORL] = f_forl; - disp[GG_LEN_DDISP+BC_ITERL] = f_iterl; - disp[GG_LEN_DDISP+BC_LOOP] = f_loop; - - /* Set dynamic instruction dispatch. */ - if ((oldmode ^ mode) & (DISPMODE_REC|DISPMODE_INS)) { - /* Need to update the whole table. */ - if (!(mode & (DISPMODE_REC|DISPMODE_INS))) { /* No ins dispatch? */ - /* Copy static dispatch table to dynamic dispatch table. */ - memcpy(&disp[0], &disp[GG_LEN_DDISP], GG_LEN_SDISP*sizeof(ASMFunction)); - /* Overwrite with dynamic return dispatch. */ - if ((mode & DISPMODE_RET)) { - disp[BC_RETM] = lj_vm_rethook; - disp[BC_RET] = lj_vm_rethook; - disp[BC_RET0] = lj_vm_rethook; - disp[BC_RET1] = lj_vm_rethook; - } - } else { - /* The recording dispatch also checks for hooks. */ - ASMFunction f = (mode & DISPMODE_REC) ? lj_vm_record : lj_vm_inshook; - uint32_t i; - for (i = 0; i < GG_LEN_SDISP; i++) - disp[i] = f; - } - } else if (!(mode & (DISPMODE_REC|DISPMODE_INS))) { - /* Otherwise set dynamic counting ins. */ - disp[BC_FORL] = f_forl; - disp[BC_ITERL] = f_iterl; - disp[BC_LOOP] = f_loop; - /* Set dynamic return dispatch. */ - if ((mode & DISPMODE_RET)) { - disp[BC_RETM] = lj_vm_rethook; - disp[BC_RET] = lj_vm_rethook; - disp[BC_RET0] = lj_vm_rethook; - disp[BC_RET1] = lj_vm_rethook; - } else { - disp[BC_RETM] = disp[GG_LEN_DDISP+BC_RETM]; - disp[BC_RET] = disp[GG_LEN_DDISP+BC_RET]; - disp[BC_RET0] = disp[GG_LEN_DDISP+BC_RET0]; - disp[BC_RET1] = disp[GG_LEN_DDISP+BC_RET1]; - } - } - - /* Set dynamic call dispatch. */ - if ((oldmode ^ mode) & DISPMODE_CALL) { /* Update the whole table? */ - uint32_t i; - if ((mode & DISPMODE_CALL) == 0) { /* No call hooks? */ - for (i = GG_LEN_SDISP; i < GG_LEN_DDISP; i++) - disp[i] = makeasmfunc(lj_bc_ofs[i]); - } else { - for (i = GG_LEN_SDISP; i < GG_LEN_DDISP; i++) - disp[i] = lj_vm_callhook; - } - } - if (!(mode & DISPMODE_CALL)) { /* Overwrite dynamic counting ins. */ - disp[BC_FUNCF] = f_funcf; - disp[BC_FUNCV] = f_funcv; - } - -#if LJ_HASJIT - /* Reset hotcounts for JIT off to on transition. */ - if ((mode & DISPMODE_JIT) && !(oldmode & DISPMODE_JIT)) - lj_dispatch_init_hotcount(g); -#endif - } -} - -/* -- JIT mode setting ---------------------------------------------------- */ - -#if LJ_HASJIT -/* Set JIT mode for a single prototype. */ -static void setptmode(global_State *g, GCproto *pt, int mode) -{ - if ((mode & LUAJIT_MODE_ON)) { /* (Re-)enable JIT compilation. */ - pt->flags &= ~PROTO_NOJIT; - lj_trace_reenableproto(pt); /* Unpatch all ILOOP etc. bytecodes. */ - } else { /* Flush and/or disable JIT compilation. */ - if (!(mode & LUAJIT_MODE_FLUSH)) - pt->flags |= PROTO_NOJIT; - lj_trace_flushproto(g, pt); /* Flush all traces of prototype. */ - } -} - -/* Recursively set the JIT mode for all children of a prototype. */ -static void setptmode_all(global_State *g, GCproto *pt, int mode) -{ - ptrdiff_t i; - if (!(pt->flags & PROTO_CHILD)) return; - for (i = -(ptrdiff_t)pt->sizekgc; i < 0; i++) { - GCobj *o = proto_kgc(pt, i); - if (o->gch.gct == ~LJ_TPROTO) { - setptmode(g, gco2pt(o), mode); - setptmode_all(g, gco2pt(o), mode); - } - } -} -#endif - -/* Public API function: control the JIT engine. */ -int luaJIT_setmode(lua_State *L, int idx, int mode) -{ - global_State *g = G(L); - int mm = mode & LUAJIT_MODE_MASK; - lj_trace_abort(g); /* Abort recording on any state change. */ - /* Avoid pulling the rug from under our own feet. */ - if ((g->hookmask & HOOK_GC)) - lj_err_caller(L, LJ_ERR_NOGCMM); - switch (mm) { -#if LJ_HASJIT - case LUAJIT_MODE_ENGINE: - if ((mode & LUAJIT_MODE_FLUSH)) { - lj_trace_flushall(L); - } else { - if (!(mode & LUAJIT_MODE_ON)) - G2J(g)->flags &= ~(uint32_t)JIT_F_ON; -#if LJ_TARGET_X86ORX64 - else if ((G2J(g)->flags & JIT_F_SSE2)) - G2J(g)->flags |= (uint32_t)JIT_F_ON; - else - return 0; /* Don't turn on JIT compiler without SSE2 support. */ -#else - else - G2J(g)->flags |= (uint32_t)JIT_F_ON; -#endif - lj_dispatch_update(g); - } - break; - case LUAJIT_MODE_FUNC: - case LUAJIT_MODE_ALLFUNC: - case LUAJIT_MODE_ALLSUBFUNC: { - cTValue *tv = idx == 0 ? frame_prev(L->base-1) : - idx > 0 ? L->base + (idx-1) : L->top + idx; - GCproto *pt; - if ((idx == 0 || tvisfunc(tv)) && isluafunc(&gcval(tv)->fn)) - pt = funcproto(&gcval(tv)->fn); /* Cannot use funcV() for frame slot. */ - else if (tvisproto(tv)) - pt = protoV(tv); - else - return 0; /* Failed. */ - if (mm != LUAJIT_MODE_ALLSUBFUNC) - setptmode(g, pt, mode); - if (mm != LUAJIT_MODE_FUNC) - setptmode_all(g, pt, mode); - break; - } - case LUAJIT_MODE_TRACE: - if (!(mode & LUAJIT_MODE_FLUSH)) - return 0; /* Failed. */ - lj_trace_flush(G2J(g), idx); - break; -#else - case LUAJIT_MODE_ENGINE: - case LUAJIT_MODE_FUNC: - case LUAJIT_MODE_ALLFUNC: - case LUAJIT_MODE_ALLSUBFUNC: - UNUSED(idx); - if ((mode & LUAJIT_MODE_ON)) - return 0; /* Failed. */ - break; -#endif - case LUAJIT_MODE_WRAPCFUNC: - if ((mode & LUAJIT_MODE_ON)) { - if (idx != 0) { - cTValue *tv = idx > 0 ? L->base + (idx-1) : L->top + idx; - if (tvislightud(tv)) - g->wrapf = (lua_CFunction)lightudV(tv); - else - return 0; /* Failed. */ - } else { - return 0; /* Failed. */ - } - g->bc_cfunc_ext = BCINS_AD(BC_FUNCCW, 0, 0); - } else { - g->bc_cfunc_ext = BCINS_AD(BC_FUNCC, 0, 0); - } - break; - default: - return 0; /* Failed. */ - } - return 1; /* OK. */ -} - -/* Enforce (dynamic) linker error for version mismatches. See luajit.c. */ -LUA_API void LUAJIT_VERSION_SYM(void) -{ -} - -/* -- Hooks --------------------------------------------------------------- */ - -/* This function can be called asynchronously (e.g. during a signal). */ -LUA_API int lua_sethook(lua_State *L, lua_Hook func, int mask, int count) -{ - global_State *g = G(L); - mask &= HOOK_EVENTMASK; - if (func == NULL || mask == 0) { mask = 0; func = NULL; } /* Consistency. */ - g->hookf = func; - g->hookcount = g->hookcstart = (int32_t)count; - g->hookmask = (uint8_t)((g->hookmask & ~HOOK_EVENTMASK) | mask); - lj_trace_abort(g); /* Abort recording on any hook change. */ - lj_dispatch_update(g); - return 1; -} - -LUA_API lua_Hook lua_gethook(lua_State *L) -{ - return G(L)->hookf; -} - -LUA_API int lua_gethookmask(lua_State *L) -{ - return G(L)->hookmask & HOOK_EVENTMASK; -} - -LUA_API int lua_gethookcount(lua_State *L) -{ - return (int)G(L)->hookcstart; -} - -/* Call a hook. */ -static void callhook(lua_State *L, int event, BCLine line) -{ - global_State *g = G(L); - lua_Hook hookf = g->hookf; - if (hookf && !hook_active(g)) { - lua_Debug ar; - lj_trace_abort(g); /* Abort recording on any hook call. */ - ar.event = event; - ar.currentline = line; - /* Top frame, nextframe = NULL. */ - ar.i_ci = (int)((L->base-1) - tvref(L->stack)); - lj_state_checkstack(L, 1+LUA_MINSTACK); - hook_enter(g); - hookf(L, &ar); - lua_assert(hook_active(g)); - hook_leave(g); - } -} - -/* -- Dispatch callbacks -------------------------------------------------- */ - -/* Calculate number of used stack slots in the current frame. */ -static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres) -{ - BCIns ins = pc[-1]; - if (bc_op(ins) == BC_UCLO) - ins = pc[bc_j(ins)]; - switch (bc_op(ins)) { - case BC_CALLM: case BC_CALLMT: return bc_a(ins) + bc_c(ins) + nres-1+1; - case BC_RETM: return bc_a(ins) + bc_d(ins) + nres-1; - case BC_TSETM: return bc_a(ins) + nres-1; - default: return pt->framesize; - } -} - -/* Instruction dispatch. Used by instr/line/return hooks or when recording. */ -void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc) -{ - ERRNO_SAVE - GCfunc *fn = curr_func(L); - GCproto *pt = funcproto(fn); - void *cf = cframe_raw(L->cframe); - const BCIns *oldpc = cframe_pc(cf); - global_State *g = G(L); - BCReg slots; - setcframe_pc(cf, pc); - slots = cur_topslot(pt, pc, cframe_multres_n(cf)); - L->top = L->base + slots; /* Fix top. */ -#if LJ_HASJIT - { - jit_State *J = G2J(g); - if (J->state != LJ_TRACE_IDLE) { -#ifdef LUA_USE_ASSERT - ptrdiff_t delta = L->top - L->base; -#endif - J->L = L; - lj_trace_ins(J, pc-1); /* The interpreter bytecode PC is offset by 1. */ - lua_assert(L->top - L->base == delta); - } - } -#endif - if ((g->hookmask & LUA_MASKCOUNT) && g->hookcount == 0) { - g->hookcount = g->hookcstart; - callhook(L, LUA_HOOKCOUNT, -1); - L->top = L->base + slots; /* Fix top again. */ - } - if ((g->hookmask & LUA_MASKLINE)) { - BCPos npc = proto_bcpos(pt, pc) - 1; - BCPos opc = proto_bcpos(pt, oldpc) - 1; - BCLine line = lj_debug_line(pt, npc); - if (pc <= oldpc || opc >= pt->sizebc || line != lj_debug_line(pt, opc)) { - callhook(L, LUA_HOOKLINE, line); - L->top = L->base + slots; /* Fix top again. */ - } - } - if ((g->hookmask & LUA_MASKRET) && bc_isret(bc_op(pc[-1]))) - callhook(L, LUA_HOOKRET, -1); - ERRNO_RESTORE -} - -/* Initialize call. Ensure stack space and return # of missing parameters. */ -static int call_init(lua_State *L, GCfunc *fn) -{ - if (isluafunc(fn)) { - GCproto *pt = funcproto(fn); - int numparams = pt->numparams; - int gotparams = (int)(L->top - L->base); - int need = pt->framesize; - if ((pt->flags & PROTO_VARARG)) need += 1+gotparams; - lj_state_checkstack(L, (MSize)need); - numparams -= gotparams; - return numparams >= 0 ? numparams : 0; - } else { - lj_state_checkstack(L, LUA_MINSTACK); - return 0; - } -} - -/* Call dispatch. Used by call hooks, hot calls or when recording. */ -ASMFunction LJ_FASTCALL lj_dispatch_call(lua_State *L, const BCIns *pc) -{ - ERRNO_SAVE - GCfunc *fn = curr_func(L); - BCOp op; - global_State *g = G(L); -#if LJ_HASJIT - jit_State *J = G2J(g); -#endif - int missing = call_init(L, fn); -#if LJ_HASJIT - J->L = L; - if ((uintptr_t)pc & 1) { /* Marker for hot call. */ -#ifdef LUA_USE_ASSERT - ptrdiff_t delta = L->top - L->base; -#endif - pc = (const BCIns *)((uintptr_t)pc & ~(uintptr_t)1); - lj_trace_hot(J, pc); - lua_assert(L->top - L->base == delta); - goto out; - } else if (J->state != LJ_TRACE_IDLE && - !(g->hookmask & (HOOK_GC|HOOK_VMEVENT))) { -#ifdef LUA_USE_ASSERT - ptrdiff_t delta = L->top - L->base; -#endif - /* Record the FUNC* bytecodes, too. */ - lj_trace_ins(J, pc-1); /* The interpreter bytecode PC is offset by 1. */ - lua_assert(L->top - L->base == delta); - } -#endif - if ((g->hookmask & LUA_MASKCALL)) { - int i; - for (i = 0; i < missing; i++) /* Add missing parameters. */ - setnilV(L->top++); - callhook(L, LUA_HOOKCALL, -1); - /* Preserve modifications of missing parameters by lua_setlocal(). */ - while (missing-- > 0 && tvisnil(L->top - 1)) - L->top--; - } -#if LJ_HASJIT -out: -#endif - op = bc_op(pc[-1]); /* Get FUNC* op. */ -#if LJ_HASJIT - /* Use the non-hotcounting variants if JIT is off or while recording. */ - if ((!(J->flags & JIT_F_ON) || J->state != LJ_TRACE_IDLE) && - (op == BC_FUNCF || op == BC_FUNCV)) - op = (BCOp)((int)op+(int)BC_IFUNCF-(int)BC_FUNCF); -#endif - ERRNO_RESTORE - return makeasmfunc(lj_bc_ofs[op]); /* Return static dispatch target. */ -} - diff --git a/deps/luajit/src/lj_dispatch.h b/deps/luajit/src/lj_dispatch.h deleted file mode 100644 index 778affc..0000000 --- a/deps/luajit/src/lj_dispatch.h +++ /dev/null @@ -1,131 +0,0 @@ -/* -** Instruction dispatch handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_DISPATCH_H -#define _LJ_DISPATCH_H - -#include "lj_obj.h" -#include "lj_bc.h" -#if LJ_HASJIT -#include "lj_jit.h" -#endif - -#if LJ_TARGET_MIPS -/* Need our own global offset table for the dreaded MIPS calling conventions. */ -#if LJ_HASJIT -#define JITGOTDEF(_) _(lj_trace_exit) _(lj_trace_hot) -#else -#define JITGOTDEF(_) -#endif -#if LJ_HASFFI -#define FFIGOTDEF(_) \ - _(lj_meta_equal_cd) _(lj_ccallback_enter) _(lj_ccallback_leave) -#else -#define FFIGOTDEF(_) -#endif -#define GOTDEF(_) \ - _(floor) _(ceil) _(trunc) _(log) _(log10) _(exp) _(sin) _(cos) _(tan) \ - _(asin) _(acos) _(atan) _(sinh) _(cosh) _(tanh) _(frexp) _(modf) _(atan2) \ - _(pow) _(fmod) _(ldexp) \ - _(lj_dispatch_call) _(lj_dispatch_ins) _(lj_err_throw) \ - _(lj_ffh_coroutine_wrap_err) _(lj_func_closeuv) _(lj_func_newL_gc) \ - _(lj_gc_barrieruv) _(lj_gc_step) _(lj_gc_step_fixtop) _(lj_meta_arith) \ - _(lj_meta_call) _(lj_meta_cat) _(lj_meta_comp) _(lj_meta_equal) \ - _(lj_meta_for) _(lj_meta_len) _(lj_meta_tget) _(lj_meta_tset) \ - _(lj_state_growstack) _(lj_str_fromnum) _(lj_str_fromnumber) _(lj_str_new) \ - _(lj_tab_dup) _(lj_tab_get) _(lj_tab_getinth) _(lj_tab_len) _(lj_tab_new) \ - _(lj_tab_newkey) _(lj_tab_next) _(lj_tab_reasize) \ - JITGOTDEF(_) FFIGOTDEF(_) - -enum { -#define GOTENUM(name) LJ_GOT_##name, -GOTDEF(GOTENUM) -#undef GOTENUM - LJ_GOT__MAX -}; -#endif - -/* Type of hot counter. Must match the code in the assembler VM. */ -/* 16 bits are sufficient. Only 0.0015% overhead with maximum slot penalty. */ -typedef uint16_t HotCount; - -/* Number of hot counter hash table entries (must be a power of two). */ -#define HOTCOUNT_SIZE 64 -#define HOTCOUNT_PCMASK ((HOTCOUNT_SIZE-1)*sizeof(HotCount)) - -/* Hotcount decrements. */ -#define HOTCOUNT_LOOP 2 -#define HOTCOUNT_CALL 1 - -/* This solves a circular dependency problem -- bump as needed. Sigh. */ -#define GG_NUM_ASMFF 62 - -#define GG_LEN_DDISP (BC__MAX + GG_NUM_ASMFF) -#define GG_LEN_SDISP BC_FUNCF -#define GG_LEN_DISP (GG_LEN_DDISP + GG_LEN_SDISP) - -/* Global state, main thread and extra fields are allocated together. */ -typedef struct GG_State { - lua_State L; /* Main thread. */ - global_State g; /* Global state. */ -#if LJ_TARGET_MIPS - ASMFunction got[LJ_GOT__MAX]; /* Global offset table. */ -#endif -#if LJ_HASJIT - jit_State J; /* JIT state. */ - HotCount hotcount[HOTCOUNT_SIZE]; /* Hot counters. */ -#endif - ASMFunction dispatch[GG_LEN_DISP]; /* Instruction dispatch tables. */ - BCIns bcff[GG_NUM_ASMFF]; /* Bytecode for ASM fast functions. */ -} GG_State; - -#define GG_OFS(field) ((int)offsetof(GG_State, field)) -#define G2GG(gl) ((GG_State *)((char *)(gl) - GG_OFS(g))) -#define J2GG(j) ((GG_State *)((char *)(j) - GG_OFS(J))) -#define L2GG(L) (G2GG(G(L))) -#define J2G(J) (&J2GG(J)->g) -#define G2J(gl) (&G2GG(gl)->J) -#define L2J(L) (&L2GG(L)->J) -#define GG_G2DISP (GG_OFS(dispatch) - GG_OFS(g)) -#define GG_DISP2G (GG_OFS(g) - GG_OFS(dispatch)) -#define GG_DISP2J (GG_OFS(J) - GG_OFS(dispatch)) -#define GG_DISP2HOT (GG_OFS(hotcount) - GG_OFS(dispatch)) -#define GG_DISP2STATIC (GG_LEN_DDISP*(int)sizeof(ASMFunction)) - -#define hotcount_get(gg, pc) \ - (gg)->hotcount[(u32ptr(pc)>>2) & (HOTCOUNT_SIZE-1)] -#define hotcount_set(gg, pc, val) \ - (hotcount_get((gg), (pc)) = (HotCount)(val)) - -/* Dispatch table management. */ -LJ_FUNC void lj_dispatch_init(GG_State *GG); -#if LJ_HASJIT -LJ_FUNC void lj_dispatch_init_hotcount(global_State *g); -#endif -LJ_FUNC void lj_dispatch_update(global_State *g); - -/* Instruction dispatch callback for hooks or when recording. */ -LJ_FUNCA void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc); -LJ_FUNCA ASMFunction LJ_FASTCALL lj_dispatch_call(lua_State *L, const BCIns*pc); -LJ_FUNCA void LJ_FASTCALL lj_dispatch_return(lua_State *L, const BCIns *pc); - -#if LJ_HASFFI && !defined(_BUILDVM_H) -/* Save/restore errno and GetLastError() around hooks, exits and recording. */ -#include -#if LJ_TARGET_WINDOWS -#define WIN32_LEAN_AND_MEAN -#include -#define ERRNO_SAVE int olderr = errno; DWORD oldwerr = GetLastError(); -#define ERRNO_RESTORE errno = olderr; SetLastError(oldwerr); -#else -#define ERRNO_SAVE int olderr = errno; -#define ERRNO_RESTORE errno = olderr; -#endif -#else -#define ERRNO_SAVE -#define ERRNO_RESTORE -#endif - -#endif diff --git a/deps/luajit/src/lj_emit_arm.h b/deps/luajit/src/lj_emit_arm.h deleted file mode 100644 index 8c5e537..0000000 --- a/deps/luajit/src/lj_emit_arm.h +++ /dev/null @@ -1,356 +0,0 @@ -/* -** ARM instruction emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Constant encoding --------------------------------------------------- */ - -static uint8_t emit_invai[16] = { - /* AND */ (ARMI_AND^ARMI_BIC) >> 21, - /* EOR */ 0, - /* SUB */ (ARMI_SUB^ARMI_ADD) >> 21, - /* RSB */ 0, - /* ADD */ (ARMI_ADD^ARMI_SUB) >> 21, - /* ADC */ (ARMI_ADC^ARMI_SBC) >> 21, - /* SBC */ (ARMI_SBC^ARMI_ADC) >> 21, - /* RSC */ 0, - /* TST */ 0, - /* TEQ */ 0, - /* CMP */ (ARMI_CMP^ARMI_CMN) >> 21, - /* CMN */ (ARMI_CMN^ARMI_CMP) >> 21, - /* ORR */ 0, - /* MOV */ (ARMI_MOV^ARMI_MVN) >> 21, - /* BIC */ (ARMI_BIC^ARMI_AND) >> 21, - /* MVN */ (ARMI_MVN^ARMI_MOV) >> 21 -}; - -/* Encode constant in K12 format for data processing instructions. */ -static uint32_t emit_isk12(ARMIns ai, int32_t n) -{ - uint32_t invai, i, m = (uint32_t)n; - /* K12: unsigned 8 bit value, rotated in steps of two bits. */ - for (i = 0; i < 4096; i += 256, m = lj_rol(m, 2)) - if (m <= 255) return ARMI_K12|m|i; - /* Otherwise try negation/complement with the inverse instruction. */ - invai = emit_invai[((ai >> 21) & 15)]; - if (!invai) return 0; /* Failed. No inverse instruction. */ - m = ~(uint32_t)n; - if (invai == ((ARMI_SUB^ARMI_ADD) >> 21) || - invai == (ARMI_CMP^ARMI_CMN) >> 21) m++; - for (i = 0; i < 4096; i += 256, m = lj_rol(m, 2)) - if (m <= 255) return ARMI_K12|(invai<<21)|m|i; - return 0; /* Failed. */ -} - -/* -- Emit basic instructions --------------------------------------------- */ - -static void emit_dnm(ASMState *as, ARMIns ai, Reg rd, Reg rn, Reg rm) -{ - *--as->mcp = ai | ARMF_D(rd) | ARMF_N(rn) | ARMF_M(rm); -} - -static void emit_dm(ASMState *as, ARMIns ai, Reg rd, Reg rm) -{ - *--as->mcp = ai | ARMF_D(rd) | ARMF_M(rm); -} - -static void emit_dn(ASMState *as, ARMIns ai, Reg rd, Reg rn) -{ - *--as->mcp = ai | ARMF_D(rd) | ARMF_N(rn); -} - -static void emit_nm(ASMState *as, ARMIns ai, Reg rn, Reg rm) -{ - *--as->mcp = ai | ARMF_N(rn) | ARMF_M(rm); -} - -static void emit_d(ASMState *as, ARMIns ai, Reg rd) -{ - *--as->mcp = ai | ARMF_D(rd); -} - -static void emit_n(ASMState *as, ARMIns ai, Reg rn) -{ - *--as->mcp = ai | ARMF_N(rn); -} - -static void emit_m(ASMState *as, ARMIns ai, Reg rm) -{ - *--as->mcp = ai | ARMF_M(rm); -} - -static void emit_lsox(ASMState *as, ARMIns ai, Reg rd, Reg rn, int32_t ofs) -{ - lua_assert(ofs >= -255 && ofs <= 255); - if (ofs < 0) ofs = -ofs; else ai |= ARMI_LS_U; - *--as->mcp = ai | ARMI_LS_P | ARMI_LSX_I | ARMF_D(rd) | ARMF_N(rn) | - ((ofs & 0xf0) << 4) | (ofs & 0x0f); -} - -static void emit_lso(ASMState *as, ARMIns ai, Reg rd, Reg rn, int32_t ofs) -{ - lua_assert(ofs >= -4095 && ofs <= 4095); - /* Combine LDR/STR pairs to LDRD/STRD. */ - if (*as->mcp == (ai|ARMI_LS_P|ARMI_LS_U|ARMF_D(rd^1)|ARMF_N(rn)|(ofs^4)) && - (ai & ~(ARMI_LDR^ARMI_STR)) == ARMI_STR && rd != rn && - (uint32_t)ofs <= 252 && !(ofs & 3) && !((rd ^ (ofs >>2)) & 1) && - as->mcp != as->mcloop) { - as->mcp++; - emit_lsox(as, ai == ARMI_LDR ? ARMI_LDRD : ARMI_STRD, rd&~1, rn, ofs&~4); - return; - } - if (ofs < 0) ofs = -ofs; else ai |= ARMI_LS_U; - *--as->mcp = ai | ARMI_LS_P | ARMF_D(rd) | ARMF_N(rn) | ofs; -} - -#if !LJ_SOFTFP -static void emit_vlso(ASMState *as, ARMIns ai, Reg rd, Reg rn, int32_t ofs) -{ - lua_assert(ofs >= -1020 && ofs <= 1020 && (ofs&3) == 0); - if (ofs < 0) ofs = -ofs; else ai |= ARMI_LS_U; - *--as->mcp = ai | ARMI_LS_P | ARMF_D(rd & 15) | ARMF_N(rn) | (ofs >> 2); -} -#endif - -/* -- Emit loads/stores --------------------------------------------------- */ - -/* Prefer spills of BASE/L. */ -#define emit_canremat(ref) ((ref) < ASMREF_L) - -/* Try to find a one step delta relative to another constant. */ -static int emit_kdelta1(ASMState *as, Reg d, int32_t i) -{ - RegSet work = ~as->freeset & RSET_GPR; - while (work) { - Reg r = rset_picktop(work); - IRRef ref = regcost_ref(as->cost[r]); - lua_assert(r != d); - if (emit_canremat(ref)) { - int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i); - uint32_t k = emit_isk12(ARMI_ADD, delta); - if (k) { - if (k == ARMI_K12) - emit_dm(as, ARMI_MOV, d, r); - else - emit_dn(as, ARMI_ADD^k, d, r); - return 1; - } - } - rset_clear(work, r); - } - return 0; /* Failed. */ -} - -/* Try to find a two step delta relative to another constant. */ -static int emit_kdelta2(ASMState *as, Reg d, int32_t i) -{ - RegSet work = ~as->freeset & RSET_GPR; - while (work) { - Reg r = rset_picktop(work); - IRRef ref = regcost_ref(as->cost[r]); - lua_assert(r != d); - if (emit_canremat(ref)) { - int32_t other = ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i; - if (other) { - int32_t delta = i - other; - uint32_t sh, inv = 0, k2, k; - if (delta < 0) { delta = -delta; inv = ARMI_ADD^ARMI_SUB; } - sh = lj_ffs(delta) & ~1; - k2 = emit_isk12(0, delta & (255 << sh)); - k = emit_isk12(0, delta & ~(255 << sh)); - if (k) { - emit_dn(as, ARMI_ADD^k2^inv, d, d); - emit_dn(as, ARMI_ADD^k^inv, d, r); - return 1; - } - } - } - rset_clear(work, r); - } - return 0; /* Failed. */ -} - -/* Load a 32 bit constant into a GPR. */ -static void emit_loadi(ASMState *as, Reg r, int32_t i) -{ - uint32_t k = emit_isk12(ARMI_MOV, i); - lua_assert(rset_test(as->freeset, r) || r == RID_TMP); - if (k) { - /* Standard K12 constant. */ - emit_d(as, ARMI_MOV^k, r); - } else if ((as->flags & JIT_F_ARMV6T2) && (uint32_t)i < 0x00010000u) { - /* 16 bit loword constant for ARMv6T2. */ - emit_d(as, ARMI_MOVW|(i & 0x0fff)|((i & 0xf000)<<4), r); - } else if (emit_kdelta1(as, r, i)) { - /* One step delta relative to another constant. */ - } else if ((as->flags & JIT_F_ARMV6T2)) { - /* 32 bit hiword/loword constant for ARMv6T2. */ - emit_d(as, ARMI_MOVT|((i>>16) & 0x0fff)|(((i>>16) & 0xf000)<<4), r); - emit_d(as, ARMI_MOVW|(i & 0x0fff)|((i & 0xf000)<<4), r); - } else if (emit_kdelta2(as, r, i)) { - /* Two step delta relative to another constant. */ - } else { - /* Otherwise construct the constant with up to 4 instructions. */ - /* NYI: use mvn+bic, use pc-relative loads. */ - for (;;) { - uint32_t sh = lj_ffs(i) & ~1; - int32_t m = i & (255 << sh); - i &= ~(255 << sh); - if (i == 0) { - emit_d(as, ARMI_MOV ^ emit_isk12(0, m), r); - break; - } - emit_dn(as, ARMI_ORR ^ emit_isk12(0, m), r, r); - } - } -} - -#define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr))) - -static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); - -/* Get/set from constant pointer. */ -static void emit_lsptr(ASMState *as, ARMIns ai, Reg r, void *p) -{ - int32_t i = i32ptr(p); - emit_lso(as, ai, r, ra_allock(as, (i & ~4095), rset_exclude(RSET_GPR, r)), - (i & 4095)); -} - -#if !LJ_SOFTFP -/* Load a number constant into an FPR. */ -static void emit_loadn(ASMState *as, Reg r, cTValue *tv) -{ - int32_t i; - if ((as->flags & JIT_F_VFPV3) && !tv->u32.lo) { - uint32_t hi = tv->u32.hi; - uint32_t b = ((hi >> 22) & 0x1ff); - if (!(hi & 0xffff) && (b == 0x100 || b == 0x0ff)) { - *--as->mcp = ARMI_VMOVI_D | ARMF_D(r & 15) | - ((tv->u32.hi >> 12) & 0x00080000) | - ((tv->u32.hi >> 4) & 0x00070000) | - ((tv->u32.hi >> 16) & 0x0000000f); - return; - } - } - i = i32ptr(tv); - emit_vlso(as, ARMI_VLDR_D, r, - ra_allock(as, (i & ~1020), RSET_GPR), (i & 1020)); -} -#endif - -/* Get/set global_State fields. */ -#define emit_getgl(as, r, field) \ - emit_lsptr(as, ARMI_LDR, (r), (void *)&J2G(as->J)->field) -#define emit_setgl(as, r, field) \ - emit_lsptr(as, ARMI_STR, (r), (void *)&J2G(as->J)->field) - -/* Trace number is determined from pc of exit instruction. */ -#define emit_setvmstate(as, i) UNUSED(i) - -/* -- Emit control-flow instructions -------------------------------------- */ - -/* Label for internal jumps. */ -typedef MCode *MCLabel; - -/* Return label pointing to current PC. */ -#define emit_label(as) ((as)->mcp) - -static void emit_branch(ASMState *as, ARMIns ai, MCode *target) -{ - MCode *p = as->mcp; - ptrdiff_t delta = (target - p) - 1; - lua_assert(((delta + 0x00800000) >> 24) == 0); - *--p = ai | ((uint32_t)delta & 0x00ffffffu); - as->mcp = p; -} - -#define emit_jmp(as, target) emit_branch(as, ARMI_B, (target)) - -static void emit_call(ASMState *as, void *target) -{ - MCode *p = --as->mcp; - ptrdiff_t delta = ((char *)target - (char *)p) - 8; - if ((((delta>>2) + 0x00800000) >> 24) == 0) { - if ((delta & 1)) - *p = ARMI_BLX | ((uint32_t)(delta>>2) & 0x00ffffffu) | ((delta&2) << 27); - else - *p = ARMI_BL | ((uint32_t)(delta>>2) & 0x00ffffffu); - } else { /* Target out of range: need indirect call. But don't use R0-R3. */ - Reg r = ra_allock(as, i32ptr(target), RSET_RANGE(RID_R4, RID_R12+1)); - *p = ARMI_BLXr | ARMF_M(r); - } -} - -/* -- Emit generic operations --------------------------------------------- */ - -/* Generic move between two regs. */ -static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src) -{ -#if LJ_SOFTFP - lua_assert(!irt_isnum(ir->t)); UNUSED(ir); -#else - if (dst >= RID_MAX_GPR) { - emit_dm(as, irt_isnum(ir->t) ? ARMI_VMOV_D : ARMI_VMOV_S, - (dst & 15), (src & 15)); - return; - } -#endif - if (as->mcp != as->mcloop) { /* Swap early registers for loads/stores. */ - MCode ins = *as->mcp, swp = (src^dst); - if ((ins & 0x0c000000) == 0x04000000 && (ins & 0x02000010) != 0x02000010) { - if (!((ins ^ (dst << 16)) & 0x000f0000)) - *as->mcp = ins ^ (swp << 16); /* Swap N in load/store. */ - if (!(ins & 0x00100000) && !((ins ^ (dst << 12)) & 0x0000f000)) - *as->mcp = ins ^ (swp << 12); /* Swap D in store. */ - } - } - emit_dm(as, ARMI_MOV, dst, src); -} - -/* Generic load of register from stack slot. */ -static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ -#if LJ_SOFTFP - lua_assert(!irt_isnum(ir->t)); UNUSED(ir); -#else - if (r >= RID_MAX_GPR) - emit_vlso(as, irt_isnum(ir->t) ? ARMI_VLDR_D : ARMI_VLDR_S, r, RID_SP, ofs); - else -#endif - emit_lso(as, ARMI_LDR, r, RID_SP, ofs); -} - -/* Generic store of register to stack slot. */ -static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ -#if LJ_SOFTFP - lua_assert(!irt_isnum(ir->t)); UNUSED(ir); -#else - if (r >= RID_MAX_GPR) - emit_vlso(as, irt_isnum(ir->t) ? ARMI_VSTR_D : ARMI_VSTR_S, r, RID_SP, ofs); - else -#endif - emit_lso(as, ARMI_STR, r, RID_SP, ofs); -} - -/* Emit an arithmetic/logic operation with a constant operand. */ -static void emit_opk(ASMState *as, ARMIns ai, Reg dest, Reg src, - int32_t i, RegSet allow) -{ - uint32_t k = emit_isk12(ai, i); - if (k) - emit_dn(as, ai^k, dest, src); - else - emit_dnm(as, ai, dest, src, ra_allock(as, i, allow)); -} - -/* Add offset to pointer. */ -static void emit_addptr(ASMState *as, Reg r, int32_t ofs) -{ - if (ofs) - emit_opk(as, ARMI_ADD, r, r, ofs, rset_exclude(RSET_GPR, r)); -} - -#define emit_spsub(as, ofs) emit_addptr(as, RID_SP, -(ofs)) - diff --git a/deps/luajit/src/lj_emit_mips.h b/deps/luajit/src/lj_emit_mips.h deleted file mode 100644 index 0fc07d9..0000000 --- a/deps/luajit/src/lj_emit_mips.h +++ /dev/null @@ -1,211 +0,0 @@ -/* -** MIPS instruction emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Emit basic instructions --------------------------------------------- */ - -static void emit_dst(ASMState *as, MIPSIns mi, Reg rd, Reg rs, Reg rt) -{ - *--as->mcp = mi | MIPSF_D(rd) | MIPSF_S(rs) | MIPSF_T(rt); -} - -static void emit_dta(ASMState *as, MIPSIns mi, Reg rd, Reg rt, uint32_t a) -{ - *--as->mcp = mi | MIPSF_D(rd) | MIPSF_T(rt) | MIPSF_A(a); -} - -#define emit_ds(as, mi, rd, rs) emit_dst(as, (mi), (rd), (rs), 0) -#define emit_tg(as, mi, rt, rg) emit_dst(as, (mi), (rg)&31, 0, (rt)) - -static void emit_tsi(ASMState *as, MIPSIns mi, Reg rt, Reg rs, int32_t i) -{ - *--as->mcp = mi | MIPSF_T(rt) | MIPSF_S(rs) | (i & 0xffff); -} - -#define emit_ti(as, mi, rt, i) emit_tsi(as, (mi), (rt), 0, (i)) -#define emit_hsi(as, mi, rh, rs, i) emit_tsi(as, (mi), (rh) & 31, (rs), (i)) - -static void emit_fgh(ASMState *as, MIPSIns mi, Reg rf, Reg rg, Reg rh) -{ - *--as->mcp = mi | MIPSF_F(rf&31) | MIPSF_G(rg&31) | MIPSF_H(rh&31); -} - -#define emit_fg(as, mi, rf, rg) emit_fgh(as, (mi), (rf), (rg), 0) - -static void emit_rotr(ASMState *as, Reg dest, Reg src, Reg tmp, uint32_t shift) -{ - if ((as->flags & JIT_F_MIPS32R2)) { - emit_dta(as, MIPSI_ROTR, dest, src, shift); - } else { - emit_dst(as, MIPSI_OR, dest, dest, tmp); - emit_dta(as, MIPSI_SLL, dest, src, (-shift)&31); - emit_dta(as, MIPSI_SRL, tmp, src, shift); - } -} - -/* -- Emit loads/stores --------------------------------------------------- */ - -/* Prefer rematerialization of BASE/L from global_State over spills. */ -#define emit_canremat(ref) ((ref) <= REF_BASE) - -/* Try to find a one step delta relative to another constant. */ -static int emit_kdelta1(ASMState *as, Reg t, int32_t i) -{ - RegSet work = ~as->freeset & RSET_GPR; - while (work) { - Reg r = rset_picktop(work); - IRRef ref = regcost_ref(as->cost[r]); - lua_assert(r != t); - if (ref < ASMREF_L) { - int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i); - if (checki16(delta)) { - emit_tsi(as, MIPSI_ADDIU, t, r, delta); - return 1; - } - } - rset_clear(work, r); - } - return 0; /* Failed. */ -} - -/* Load a 32 bit constant into a GPR. */ -static void emit_loadi(ASMState *as, Reg r, int32_t i) -{ - if (checki16(i)) { - emit_ti(as, MIPSI_LI, r, i); - } else { - if ((i & 0xffff)) { - int32_t jgl = i32ptr(J2G(as->J)); - if ((uint32_t)(i-jgl) < 65536) { - emit_tsi(as, MIPSI_ADDIU, r, RID_JGL, i-jgl-32768); - return; - } else if (emit_kdelta1(as, r, i)) { - return; - } else if ((i >> 16) == 0) { - emit_tsi(as, MIPSI_ORI, r, RID_ZERO, i); - return; - } - emit_tsi(as, MIPSI_ORI, r, r, i); - } - emit_ti(as, MIPSI_LUI, r, (i >> 16)); - } -} - -#define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr))) - -static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); -static void ra_allockreg(ASMState *as, int32_t k, Reg r); - -/* Get/set from constant pointer. */ -static void emit_lsptr(ASMState *as, MIPSIns mi, Reg r, void *p, RegSet allow) -{ - int32_t jgl = i32ptr(J2G(as->J)); - int32_t i = i32ptr(p); - Reg base; - if ((uint32_t)(i-jgl) < 65536) { - i = i-jgl-32768; - base = RID_JGL; - } else { - base = ra_allock(as, i-(int16_t)i, allow); - } - emit_tsi(as, mi, r, base, i); -} - -#define emit_loadn(as, r, tv) \ - emit_lsptr(as, MIPSI_LDC1, ((r) & 31), (void *)(tv), RSET_GPR) - -/* Get/set global_State fields. */ -static void emit_lsglptr(ASMState *as, MIPSIns mi, Reg r, int32_t ofs) -{ - emit_tsi(as, mi, r, RID_JGL, ofs-32768); -} - -#define emit_getgl(as, r, field) \ - emit_lsglptr(as, MIPSI_LW, (r), (int32_t)offsetof(global_State, field)) -#define emit_setgl(as, r, field) \ - emit_lsglptr(as, MIPSI_SW, (r), (int32_t)offsetof(global_State, field)) - -/* Trace number is determined from per-trace exit stubs. */ -#define emit_setvmstate(as, i) UNUSED(i) - -/* -- Emit control-flow instructions -------------------------------------- */ - -/* Label for internal jumps. */ -typedef MCode *MCLabel; - -/* Return label pointing to current PC. */ -#define emit_label(as) ((as)->mcp) - -static void emit_branch(ASMState *as, MIPSIns mi, Reg rs, Reg rt, MCode *target) -{ - MCode *p = as->mcp; - ptrdiff_t delta = target - p; - lua_assert(((delta + 0x8000) >> 16) == 0); - *--p = mi | MIPSF_S(rs) | MIPSF_T(rt) | ((uint32_t)delta & 0xffffu); - as->mcp = p; -} - -static void emit_jmp(ASMState *as, MCode *target) -{ - *--as->mcp = MIPSI_NOP; - emit_branch(as, MIPSI_B, RID_ZERO, RID_ZERO, (target)); -} - -static void emit_call(ASMState *as, void *target) -{ - MCode *p = as->mcp; - *--p = MIPSI_NOP; - if ((((uintptr_t)target ^ (uintptr_t)p) >> 28) == 0) - *--p = MIPSI_JAL | (((uintptr_t)target >>2) & 0x03ffffffu); - else /* Target out of range: need indirect call. */ - *--p = MIPSI_JALR | MIPSF_S(RID_CFUNCADDR); - as->mcp = p; - ra_allockreg(as, i32ptr(target), RID_CFUNCADDR); -} - -/* -- Emit generic operations --------------------------------------------- */ - -#define emit_move(as, dst, src) \ - emit_ds(as, MIPSI_MOVE, (dst), (src)) - -/* Generic move between two regs. */ -static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src) -{ - if (dst < RID_MAX_GPR) - emit_move(as, dst, src); - else - emit_fg(as, irt_isnum(ir->t) ? MIPSI_MOV_D : MIPSI_MOV_S, dst, src); -} - -/* Generic load of register from stack slot. */ -static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ - if (r < RID_MAX_GPR) - emit_tsi(as, MIPSI_LW, r, RID_SP, ofs); - else - emit_tsi(as, irt_isnum(ir->t) ? MIPSI_LDC1 : MIPSI_LWC1, - (r & 31), RID_SP, ofs); -} - -/* Generic store of register to stack slot. */ -static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ - if (r < RID_MAX_GPR) - emit_tsi(as, MIPSI_SW, r, RID_SP, ofs); - else - emit_tsi(as, irt_isnum(ir->t) ? MIPSI_SDC1 : MIPSI_SWC1, - (r&31), RID_SP, ofs); -} - -/* Add offset to pointer. */ -static void emit_addptr(ASMState *as, Reg r, int32_t ofs) -{ - if (ofs) { - lua_assert(checki16(ofs)); - emit_tsi(as, MIPSI_ADDIU, r, r, ofs); - } -} - -#define emit_spsub(as, ofs) emit_addptr(as, RID_SP, -(ofs)) - diff --git a/deps/luajit/src/lj_emit_ppc.h b/deps/luajit/src/lj_emit_ppc.h deleted file mode 100644 index 14edf00..0000000 --- a/deps/luajit/src/lj_emit_ppc.h +++ /dev/null @@ -1,238 +0,0 @@ -/* -** PPC instruction emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Emit basic instructions --------------------------------------------- */ - -static void emit_tab(ASMState *as, PPCIns pi, Reg rt, Reg ra, Reg rb) -{ - *--as->mcp = pi | PPCF_T(rt) | PPCF_A(ra) | PPCF_B(rb); -} - -#define emit_asb(as, pi, ra, rs, rb) emit_tab(as, (pi), (rs), (ra), (rb)) -#define emit_as(as, pi, ra, rs) emit_tab(as, (pi), (rs), (ra), 0) -#define emit_ab(as, pi, ra, rb) emit_tab(as, (pi), 0, (ra), (rb)) - -static void emit_tai(ASMState *as, PPCIns pi, Reg rt, Reg ra, int32_t i) -{ - *--as->mcp = pi | PPCF_T(rt) | PPCF_A(ra) | (i & 0xffff); -} - -#define emit_ti(as, pi, rt, i) emit_tai(as, (pi), (rt), 0, (i)) -#define emit_ai(as, pi, ra, i) emit_tai(as, (pi), 0, (ra), (i)) -#define emit_asi(as, pi, ra, rs, i) emit_tai(as, (pi), (rs), (ra), (i)) - -#define emit_fab(as, pi, rf, ra, rb) \ - emit_tab(as, (pi), (rf)&31, (ra)&31, (rb)&31) -#define emit_fb(as, pi, rf, rb) emit_tab(as, (pi), (rf)&31, 0, (rb)&31) -#define emit_fac(as, pi, rf, ra, rc) \ - emit_tab(as, (pi) | PPCF_C((rc) & 31), (rf)&31, (ra)&31, 0) -#define emit_facb(as, pi, rf, ra, rc, rb) \ - emit_tab(as, (pi) | PPCF_C((rc) & 31), (rf)&31, (ra)&31, (rb)&31) -#define emit_fai(as, pi, rf, ra, i) emit_tai(as, (pi), (rf)&31, (ra), (i)) - -static void emit_rot(ASMState *as, PPCIns pi, Reg ra, Reg rs, - int32_t n, int32_t b, int32_t e) -{ - *--as->mcp = pi | PPCF_T(rs) | PPCF_A(ra) | PPCF_B(n) | - PPCF_MB(b) | PPCF_ME(e); -} - -static void emit_slwi(ASMState *as, Reg ra, Reg rs, int32_t n) -{ - lua_assert(n >= 0 && n < 32); - emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31-n); -} - -static void emit_rotlwi(ASMState *as, Reg ra, Reg rs, int32_t n) -{ - lua_assert(n >= 0 && n < 32); - emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31); -} - -/* -- Emit loads/stores --------------------------------------------------- */ - -/* Prefer rematerialization of BASE/L from global_State over spills. */ -#define emit_canremat(ref) ((ref) <= REF_BASE) - -/* Try to find a one step delta relative to another constant. */ -static int emit_kdelta1(ASMState *as, Reg t, int32_t i) -{ - RegSet work = ~as->freeset & RSET_GPR; - while (work) { - Reg r = rset_picktop(work); - IRRef ref = regcost_ref(as->cost[r]); - lua_assert(r != t); - if (ref < ASMREF_L) { - int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i); - if (checki16(delta)) { - emit_tai(as, PPCI_ADDI, t, r, delta); - return 1; - } - } - rset_clear(work, r); - } - return 0; /* Failed. */ -} - -/* Load a 32 bit constant into a GPR. */ -static void emit_loadi(ASMState *as, Reg r, int32_t i) -{ - if (checki16(i)) { - emit_ti(as, PPCI_LI, r, i); - } else { - if ((i & 0xffff)) { - int32_t jgl = i32ptr(J2G(as->J)); - if ((uint32_t)(i-jgl) < 65536) { - emit_tai(as, PPCI_ADDI, r, RID_JGL, i-jgl-32768); - return; - } else if (emit_kdelta1(as, r, i)) { - return; - } - emit_asi(as, PPCI_ORI, r, r, i); - } - emit_ti(as, PPCI_LIS, r, (i >> 16)); - } -} - -#define emit_loada(as, r, addr) emit_loadi(as, (r), i32ptr((addr))) - -static Reg ra_allock(ASMState *as, int32_t k, RegSet allow); - -/* Get/set from constant pointer. */ -static void emit_lsptr(ASMState *as, PPCIns pi, Reg r, void *p, RegSet allow) -{ - int32_t jgl = i32ptr(J2G(as->J)); - int32_t i = i32ptr(p); - Reg base; - if ((uint32_t)(i-jgl) < 65536) { - i = i-jgl-32768; - base = RID_JGL; - } else { - base = ra_allock(as, i-(int16_t)i, allow); - } - emit_tai(as, pi, r, base, i); -} - -#define emit_loadn(as, r, tv) \ - emit_lsptr(as, PPCI_LFD, ((r) & 31), (void *)(tv), RSET_GPR) - -/* Get/set global_State fields. */ -static void emit_lsglptr(ASMState *as, PPCIns pi, Reg r, int32_t ofs) -{ - emit_tai(as, pi, r, RID_JGL, ofs-32768); -} - -#define emit_getgl(as, r, field) \ - emit_lsglptr(as, PPCI_LWZ, (r), (int32_t)offsetof(global_State, field)) -#define emit_setgl(as, r, field) \ - emit_lsglptr(as, PPCI_STW, (r), (int32_t)offsetof(global_State, field)) - -/* Trace number is determined from per-trace exit stubs. */ -#define emit_setvmstate(as, i) UNUSED(i) - -/* -- Emit control-flow instructions -------------------------------------- */ - -/* Label for internal jumps. */ -typedef MCode *MCLabel; - -/* Return label pointing to current PC. */ -#define emit_label(as) ((as)->mcp) - -static void emit_condbranch(ASMState *as, PPCIns pi, PPCCC cc, MCode *target) -{ - MCode *p = --as->mcp; - ptrdiff_t delta = (char *)target - (char *)p; - lua_assert(((delta + 0x8000) >> 16) == 0); - pi ^= (delta & 0x8000) * (PPCF_Y/0x8000); - *p = pi | PPCF_CC(cc) | ((uint32_t)delta & 0xffffu); -} - -static void emit_jmp(ASMState *as, MCode *target) -{ - MCode *p = --as->mcp; - ptrdiff_t delta = (char *)target - (char *)p; - *p = PPCI_B | (delta & 0x03fffffcu); -} - -static void emit_call(ASMState *as, void *target) -{ - MCode *p = --as->mcp; - ptrdiff_t delta = (char *)target - (char *)p; - if ((((delta>>2) + 0x00800000) >> 24) == 0) { - *p = PPCI_BL | (delta & 0x03fffffcu); - } else { /* Target out of range: need indirect call. Don't use arg reg. */ - RegSet allow = RSET_GPR & ~RSET_RANGE(RID_R0, REGARG_LASTGPR+1); - Reg r = ra_allock(as, i32ptr(target), allow); - *p = PPCI_BCTRL; - p[-1] = PPCI_MTCTR | PPCF_T(r); - as->mcp = p-1; - } -} - -/* -- Emit generic operations --------------------------------------------- */ - -#define emit_mr(as, dst, src) \ - emit_asb(as, PPCI_MR, (dst), (src), (src)) - -/* Generic move between two regs. */ -static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src) -{ - UNUSED(ir); - if (dst < RID_MAX_GPR) - emit_mr(as, dst, src); - else - emit_fb(as, PPCI_FMR, dst, src); -} - -/* Generic load of register from stack slot. */ -static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ - if (r < RID_MAX_GPR) - emit_tai(as, PPCI_LWZ, r, RID_SP, ofs); - else - emit_fai(as, irt_isnum(ir->t) ? PPCI_LFD : PPCI_LFS, r, RID_SP, ofs); -} - -/* Generic store of register to stack slot. */ -static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ - if (r < RID_MAX_GPR) - emit_tai(as, PPCI_STW, r, RID_SP, ofs); - else - emit_fai(as, irt_isnum(ir->t) ? PPCI_STFD : PPCI_STFS, r, RID_SP, ofs); -} - -/* Emit a compare (for equality) with a constant operand. */ -static void emit_cmpi(ASMState *as, Reg r, int32_t k) -{ - if (checki16(k)) { - emit_ai(as, PPCI_CMPWI, r, k); - } else if (checku16(k)) { - emit_ai(as, PPCI_CMPLWI, r, k); - } else { - emit_ai(as, PPCI_CMPLWI, RID_TMP, k); - emit_asi(as, PPCI_XORIS, RID_TMP, r, (k >> 16)); - } -} - -/* Add offset to pointer. */ -static void emit_addptr(ASMState *as, Reg r, int32_t ofs) -{ - if (ofs) { - emit_tai(as, PPCI_ADDI, r, r, ofs); - if (!checki16(ofs)) - emit_tai(as, PPCI_ADDIS, r, r, (ofs + 32768) >> 16); - } -} - -static void emit_spsub(ASMState *as, int32_t ofs) -{ - if (ofs) { - emit_tai(as, PPCI_STWU, RID_TMP, RID_SP, -ofs); - emit_tai(as, PPCI_ADDI, RID_TMP, RID_SP, - CFRAME_SIZE + (as->parent ? as->parent->spadjust : 0)); - } -} - diff --git a/deps/luajit/src/lj_emit_x86.h b/deps/luajit/src/lj_emit_x86.h deleted file mode 100644 index 3a2f651..0000000 --- a/deps/luajit/src/lj_emit_x86.h +++ /dev/null @@ -1,466 +0,0 @@ -/* -** x86/x64 instruction emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -- Emit basic instructions --------------------------------------------- */ - -#define MODRM(mode, r1, r2) ((MCode)((mode)+(((r1)&7)<<3)+((r2)&7))) - -#if LJ_64 -#define REXRB(p, rr, rb) \ - { MCode rex = 0x40 + (((rr)>>1)&4) + (((rb)>>3)&1); \ - if (rex != 0x40) *--(p) = rex; } -#define FORCE_REX 0x200 -#define REX_64 (FORCE_REX|0x080000) -#else -#define REXRB(p, rr, rb) ((void)0) -#define FORCE_REX 0 -#define REX_64 0 -#endif - -#define emit_i8(as, i) (*--as->mcp = (MCode)(i)) -#define emit_i32(as, i) (*(int32_t *)(as->mcp-4) = (i), as->mcp -= 4) -#define emit_u32(as, u) (*(uint32_t *)(as->mcp-4) = (u), as->mcp -= 4) - -#define emit_x87op(as, xo) \ - (*(uint16_t *)(as->mcp-2) = (uint16_t)(xo), as->mcp -= 2) - -/* op */ -static LJ_AINLINE MCode *emit_op(x86Op xo, Reg rr, Reg rb, Reg rx, - MCode *p, int delta) -{ - int n = (int8_t)xo; -#if defined(__GNUC__) - if (__builtin_constant_p(xo) && n == -2) - p[delta-2] = (MCode)(xo >> 24); - else if (__builtin_constant_p(xo) && n == -3) - *(uint16_t *)(p+delta-3) = (uint16_t)(xo >> 16); - else -#endif - *(uint32_t *)(p+delta-5) = (uint32_t)xo; - p += n + delta; -#if LJ_64 - { - uint32_t rex = 0x40 + ((rr>>1)&(4+(FORCE_REX>>1)))+((rx>>2)&2)+((rb>>3)&1); - if (rex != 0x40) { - rex |= (rr >> 16); - if (n == -4) { *p = (MCode)rex; rex = (MCode)(xo >> 8); } - else if ((xo & 0xffffff) == 0x6600fd) { *p = (MCode)rex; rex = 0x66; } - *--p = (MCode)rex; - } - } -#else - UNUSED(rr); UNUSED(rb); UNUSED(rx); -#endif - return p; -} - -/* op + modrm */ -#define emit_opm(xo, mode, rr, rb, p, delta) \ - (p[(delta)-1] = MODRM((mode), (rr), (rb)), \ - emit_op((xo), (rr), (rb), 0, (p), (delta))) - -/* op + modrm + sib */ -#define emit_opmx(xo, mode, scale, rr, rb, rx, p) \ - (p[-1] = MODRM((scale), (rx), (rb)), \ - p[-2] = MODRM((mode), (rr), RID_ESP), \ - emit_op((xo), (rr), (rb), (rx), (p), -1)) - -/* op r1, r2 */ -static void emit_rr(ASMState *as, x86Op xo, Reg r1, Reg r2) -{ - MCode *p = as->mcp; - as->mcp = emit_opm(xo, XM_REG, r1, r2, p, 0); -} - -#if LJ_64 && defined(LUA_USE_ASSERT) -/* [addr] is sign-extended in x64 and must be in lower 2G (not 4G). */ -static int32_t ptr2addr(const void *p) -{ - lua_assert((uintptr_t)p < (uintptr_t)0x80000000); - return i32ptr(p); -} -#else -#define ptr2addr(p) (i32ptr((p))) -#endif - -/* op r, [addr] */ -static void emit_rma(ASMState *as, x86Op xo, Reg rr, const void *addr) -{ - MCode *p = as->mcp; - *(int32_t *)(p-4) = ptr2addr(addr); -#if LJ_64 - p[-5] = MODRM(XM_SCALE1, RID_ESP, RID_EBP); - as->mcp = emit_opm(xo, XM_OFS0, rr, RID_ESP, p, -5); -#else - as->mcp = emit_opm(xo, XM_OFS0, rr, RID_EBP, p, -4); -#endif -} - -/* op r, [base+ofs] */ -static void emit_rmro(ASMState *as, x86Op xo, Reg rr, Reg rb, int32_t ofs) -{ - MCode *p = as->mcp; - x86Mode mode; - if (ra_hasreg(rb)) { - if (ofs == 0 && (rb&7) != RID_EBP) { - mode = XM_OFS0; - } else if (checki8(ofs)) { - *--p = (MCode)ofs; - mode = XM_OFS8; - } else { - p -= 4; - *(int32_t *)p = ofs; - mode = XM_OFS32; - } - if ((rb&7) == RID_ESP) - *--p = MODRM(XM_SCALE1, RID_ESP, RID_ESP); - } else { - *(int32_t *)(p-4) = ofs; -#if LJ_64 - p[-5] = MODRM(XM_SCALE1, RID_ESP, RID_EBP); - p -= 5; - rb = RID_ESP; -#else - p -= 4; - rb = RID_EBP; -#endif - mode = XM_OFS0; - } - as->mcp = emit_opm(xo, mode, rr, rb, p, 0); -} - -/* op r, [base+idx*scale+ofs] */ -static void emit_rmrxo(ASMState *as, x86Op xo, Reg rr, Reg rb, Reg rx, - x86Mode scale, int32_t ofs) -{ - MCode *p = as->mcp; - x86Mode mode; - if (ofs == 0 && (rb&7) != RID_EBP) { - mode = XM_OFS0; - } else if (checki8(ofs)) { - mode = XM_OFS8; - *--p = (MCode)ofs; - } else { - mode = XM_OFS32; - p -= 4; - *(int32_t *)p = ofs; - } - as->mcp = emit_opmx(xo, mode, scale, rr, rb, rx, p); -} - -/* op r, i */ -static void emit_gri(ASMState *as, x86Group xg, Reg rb, int32_t i) -{ - MCode *p = as->mcp; - x86Op xo; - if (checki8(i)) { - *--p = (MCode)i; - xo = XG_TOXOi8(xg); - } else { - p -= 4; - *(int32_t *)p = i; - xo = XG_TOXOi(xg); - } - as->mcp = emit_opm(xo, XM_REG, (Reg)(xg & 7) | (rb & REX_64), rb, p, 0); -} - -/* op [base+ofs], i */ -static void emit_gmroi(ASMState *as, x86Group xg, Reg rb, int32_t ofs, - int32_t i) -{ - x86Op xo; - if (checki8(i)) { - emit_i8(as, i); - xo = XG_TOXOi8(xg); - } else { - emit_i32(as, i); - xo = XG_TOXOi(xg); - } - emit_rmro(as, xo, (Reg)(xg & 7), rb, ofs); -} - -#define emit_shifti(as, xg, r, i) \ - (emit_i8(as, (i)), emit_rr(as, XO_SHIFTi, (Reg)(xg), (r))) - -/* op r, rm/mrm */ -static void emit_mrm(ASMState *as, x86Op xo, Reg rr, Reg rb) -{ - MCode *p = as->mcp; - x86Mode mode = XM_REG; - if (rb == RID_MRM) { - rb = as->mrm.base; - if (rb == RID_NONE) { - rb = RID_EBP; - mode = XM_OFS0; - p -= 4; - *(int32_t *)p = as->mrm.ofs; - if (as->mrm.idx != RID_NONE) - goto mrmidx; -#if LJ_64 - *--p = MODRM(XM_SCALE1, RID_ESP, RID_EBP); - rb = RID_ESP; -#endif - } else { - if (as->mrm.ofs == 0 && (rb&7) != RID_EBP) { - mode = XM_OFS0; - } else if (checki8(as->mrm.ofs)) { - *--p = (MCode)as->mrm.ofs; - mode = XM_OFS8; - } else { - p -= 4; - *(int32_t *)p = as->mrm.ofs; - mode = XM_OFS32; - } - if (as->mrm.idx != RID_NONE) { - mrmidx: - as->mcp = emit_opmx(xo, mode, as->mrm.scale, rr, rb, as->mrm.idx, p); - return; - } - if ((rb&7) == RID_ESP) - *--p = MODRM(XM_SCALE1, RID_ESP, RID_ESP); - } - } - as->mcp = emit_opm(xo, mode, rr, rb, p, 0); -} - -/* op rm/mrm, i */ -static void emit_gmrmi(ASMState *as, x86Group xg, Reg rb, int32_t i) -{ - x86Op xo; - if (checki8(i)) { - emit_i8(as, i); - xo = XG_TOXOi8(xg); - } else { - emit_i32(as, i); - xo = XG_TOXOi(xg); - } - emit_mrm(as, xo, (Reg)(xg & 7) | (rb & REX_64), (rb & ~REX_64)); -} - -/* -- Emit loads/stores --------------------------------------------------- */ - -/* Instruction selection for XMM moves. */ -#define XMM_MOVRR(as) ((as->flags & JIT_F_SPLIT_XMM) ? XO_MOVSD : XO_MOVAPS) -#define XMM_MOVRM(as) ((as->flags & JIT_F_SPLIT_XMM) ? XO_MOVLPD : XO_MOVSD) - -/* mov [base+ofs], i */ -static void emit_movmroi(ASMState *as, Reg base, int32_t ofs, int32_t i) -{ - emit_i32(as, i); - emit_rmro(as, XO_MOVmi, 0, base, ofs); -} - -/* mov [base+ofs], r */ -#define emit_movtomro(as, r, base, ofs) \ - emit_rmro(as, XO_MOVto, (r), (base), (ofs)) - -/* Get/set global_State fields. */ -#define emit_opgl(as, xo, r, field) \ - emit_rma(as, (xo), (r), (void *)&J2G(as->J)->field) -#define emit_getgl(as, r, field) emit_opgl(as, XO_MOV, (r), field) -#define emit_setgl(as, r, field) emit_opgl(as, XO_MOVto, (r), field) - -#define emit_setvmstate(as, i) \ - (emit_i32(as, i), emit_opgl(as, XO_MOVmi, 0, vmstate)) - -/* mov r, i / xor r, r */ -static void emit_loadi(ASMState *as, Reg r, int32_t i) -{ - /* XOR r,r is shorter, but modifies the flags. This is bad for HIOP. */ - if (i == 0 && !(LJ_32 && (IR(as->curins)->o == IR_HIOP || - (as->curins+1 < as->T->nins && - IR(as->curins+1)->o == IR_HIOP)))) { - emit_rr(as, XO_ARITH(XOg_XOR), r, r); - } else { - MCode *p = as->mcp; - *(int32_t *)(p-4) = i; - p[-5] = (MCode)(XI_MOVri+(r&7)); - p -= 5; - REXRB(p, 0, r); - as->mcp = p; - } -} - -/* mov r, addr */ -#define emit_loada(as, r, addr) \ - emit_loadi(as, (r), ptr2addr((addr))) - -#if LJ_64 -/* mov r, imm64 or shorter 32 bit extended load. */ -static void emit_loadu64(ASMState *as, Reg r, uint64_t u64) -{ - if (checku32(u64)) { /* 32 bit load clears upper 32 bits. */ - emit_loadi(as, r, (int32_t)u64); - } else if (checki32((int64_t)u64)) { /* Sign-extended 32 bit load. */ - MCode *p = as->mcp; - *(int32_t *)(p-4) = (int32_t)u64; - as->mcp = emit_opm(XO_MOVmi, XM_REG, REX_64, r, p, -4); - } else { /* Full-size 64 bit load. */ - MCode *p = as->mcp; - *(uint64_t *)(p-8) = u64; - p[-9] = (MCode)(XI_MOVri+(r&7)); - p[-10] = 0x48 + ((r>>3)&1); - p -= 10; - as->mcp = p; - } -} -#endif - -/* movsd r, [&tv->n] / xorps r, r */ -static void emit_loadn(ASMState *as, Reg r, cTValue *tv) -{ - if (tvispzero(tv)) /* Use xor only for +0. */ - emit_rr(as, XO_XORPS, r, r); - else - emit_rma(as, XMM_MOVRM(as), r, &tv->n); -} - -/* -- Emit control-flow instructions -------------------------------------- */ - -/* Label for short jumps. */ -typedef MCode *MCLabel; - -#if LJ_32 && LJ_HASFFI -/* jmp short target */ -static void emit_sjmp(ASMState *as, MCLabel target) -{ - MCode *p = as->mcp; - ptrdiff_t delta = target - p; - lua_assert(delta == (int8_t)delta); - p[-1] = (MCode)(int8_t)delta; - p[-2] = XI_JMPs; - as->mcp = p - 2; -} -#endif - -/* jcc short target */ -static void emit_sjcc(ASMState *as, int cc, MCLabel target) -{ - MCode *p = as->mcp; - ptrdiff_t delta = target - p; - lua_assert(delta == (int8_t)delta); - p[-1] = (MCode)(int8_t)delta; - p[-2] = (MCode)(XI_JCCs+(cc&15)); - as->mcp = p - 2; -} - -/* jcc short (pending target) */ -static MCLabel emit_sjcc_label(ASMState *as, int cc) -{ - MCode *p = as->mcp; - p[-1] = 0; - p[-2] = (MCode)(XI_JCCs+(cc&15)); - as->mcp = p - 2; - return p; -} - -/* Fixup jcc short target. */ -static void emit_sfixup(ASMState *as, MCLabel source) -{ - source[-1] = (MCode)(as->mcp-source); -} - -/* Return label pointing to current PC. */ -#define emit_label(as) ((as)->mcp) - -/* Compute relative 32 bit offset for jump and call instructions. */ -static LJ_AINLINE int32_t jmprel(MCode *p, MCode *target) -{ - ptrdiff_t delta = target - p; - lua_assert(delta == (int32_t)delta); - return (int32_t)delta; -} - -/* jcc target */ -static void emit_jcc(ASMState *as, int cc, MCode *target) -{ - MCode *p = as->mcp; - *(int32_t *)(p-4) = jmprel(p, target); - p[-5] = (MCode)(XI_JCCn+(cc&15)); - p[-6] = 0x0f; - as->mcp = p - 6; -} - -/* jmp target */ -static void emit_jmp(ASMState *as, MCode *target) -{ - MCode *p = as->mcp; - *(int32_t *)(p-4) = jmprel(p, target); - p[-5] = XI_JMP; - as->mcp = p - 5; -} - -/* call target */ -static void emit_call_(ASMState *as, MCode *target) -{ - MCode *p = as->mcp; -#if LJ_64 - if (target-p != (int32_t)(target-p)) { - /* Assumes RID_RET is never an argument to calls and always clobbered. */ - emit_rr(as, XO_GROUP5, XOg_CALL, RID_RET); - emit_loadu64(as, RID_RET, (uint64_t)target); - return; - } -#endif - *(int32_t *)(p-4) = jmprel(p, target); - p[-5] = XI_CALL; - as->mcp = p - 5; -} - -#define emit_call(as, f) emit_call_(as, (MCode *)(void *)(f)) - -/* -- Emit generic operations --------------------------------------------- */ - -/* Use 64 bit operations to handle 64 bit IR types. */ -#if LJ_64 -#define REX_64IR(ir, r) ((r) + (irt_is64((ir)->t) ? REX_64 : 0)) -#else -#define REX_64IR(ir, r) (r) -#endif - -/* Generic move between two regs. */ -static void emit_movrr(ASMState *as, IRIns *ir, Reg dst, Reg src) -{ - UNUSED(ir); - if (dst < RID_MAX_GPR) - emit_rr(as, XO_MOV, REX_64IR(ir, dst), src); - else - emit_rr(as, XMM_MOVRR(as), dst, src); -} - -/* Generic load of register from stack slot. */ -static void emit_spload(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ - if (r < RID_MAX_GPR) - emit_rmro(as, XO_MOV, REX_64IR(ir, r), RID_ESP, ofs); - else - emit_rmro(as, irt_isnum(ir->t) ? XMM_MOVRM(as) : XO_MOVSS, r, RID_ESP, ofs); -} - -/* Generic store of register to stack slot. */ -static void emit_spstore(ASMState *as, IRIns *ir, Reg r, int32_t ofs) -{ - if (r < RID_MAX_GPR) - emit_rmro(as, XO_MOVto, REX_64IR(ir, r), RID_ESP, ofs); - else - emit_rmro(as, irt_isnum(ir->t) ? XO_MOVSDto : XO_MOVSSto, r, RID_ESP, ofs); -} - -/* Add offset to pointer. */ -static void emit_addptr(ASMState *as, Reg r, int32_t ofs) -{ - if (ofs) { - if ((as->flags & JIT_F_LEA_AGU)) - emit_rmro(as, XO_LEA, r, r, ofs); - else - emit_gri(as, XG_ARITHi(XOg_ADD), r, ofs); - } -} - -#define emit_spsub(as, ofs) emit_addptr(as, RID_ESP|REX_64, -(ofs)) - -/* Prefer rematerialization of BASE/L from global_State over spills. */ -#define emit_canremat(ref) ((ref) <= REF_BASE) - diff --git a/deps/luajit/src/lj_err.c b/deps/luajit/src/lj_err.c deleted file mode 100644 index 081bfde..0000000 --- a/deps/luajit/src/lj_err.c +++ /dev/null @@ -1,800 +0,0 @@ -/* -** Error handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_err_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_func.h" -#include "lj_state.h" -#include "lj_frame.h" -#include "lj_ff.h" -#include "lj_trace.h" -#include "lj_vm.h" - -/* -** LuaJIT can either use internal or external frame unwinding: -** -** - Internal frame unwinding (INT) is free-standing and doesn't require -** any OS or library support. -** -** - External frame unwinding (EXT) uses the system-provided unwind handler. -** -** Pros and Cons: -** -** - EXT requires unwind tables for *all* functions on the C stack between -** the pcall/catch and the error/throw. This is the default on x64, -** but needs to be manually enabled on x86/PPC for non-C++ code. -** -** - INT is faster when actually throwing errors (but this happens rarely). -** Setting up error handlers is zero-cost in any case. -** -** - EXT provides full interoperability with C++ exceptions. You can throw -** Lua errors or C++ exceptions through a mix of Lua frames and C++ frames. -** C++ destructors are called as needed. C++ exceptions caught by pcall -** are converted to the string "C++ exception". Lua errors can be caught -** with catch (...) in C++. -** -** - INT has only limited support for automatically catching C++ exceptions -** on POSIX systems using DWARF2 stack unwinding. Other systems may use -** the wrapper function feature. Lua errors thrown through C++ frames -** cannot be caught by C++ code and C++ destructors are not run. -** -** EXT is the default on x64 systems, INT is the default on all other systems. -** -** EXT can be manually enabled on POSIX systems using GCC and DWARF2 stack -** unwinding with -DLUAJIT_UNWIND_EXTERNAL. *All* C code must be compiled -** with -funwind-tables (or -fexceptions). This includes LuaJIT itself (set -** TARGET_CFLAGS), all of your C/Lua binding code, all loadable C modules -** and all C libraries that have callbacks which may be used to call back -** into Lua. C++ code must *not* be compiled with -fno-exceptions. -** -** EXT cannot be enabled on WIN32 since system exceptions use code-driven SEH. -** EXT is mandatory on WIN64 since the calling convention has an abundance -** of callee-saved registers (rbx, rbp, rsi, rdi, r12-r15, xmm6-xmm15). -** EXT is mandatory on POSIX/x64 since the interpreter doesn't save r12/r13. -*/ - -#if defined(__GNUC__) && (LJ_TARGET_X64 || defined(LUAJIT_UNWIND_EXTERNAL)) -#define LJ_UNWIND_EXT 1 -#elif LJ_TARGET_X64 && LJ_TARGET_WINDOWS -#define LJ_UNWIND_EXT 1 -#endif - -/* -- Error messages ------------------------------------------------------ */ - -/* Error message strings. */ -LJ_DATADEF const char *lj_err_allmsg = -#define ERRDEF(name, msg) msg "\0" -#include "lj_errmsg.h" -; - -/* -- Internal frame unwinding -------------------------------------------- */ - -/* Unwind Lua stack and move error message to new top. */ -LJ_NOINLINE static void unwindstack(lua_State *L, TValue *top) -{ - lj_func_closeuv(L, top); - if (top < L->top-1) { - copyTV(L, top, L->top-1); - L->top = top+1; - } - lj_state_relimitstack(L); -} - -/* Unwind until stop frame. Optionally cleanup frames. */ -static void *err_unwind(lua_State *L, void *stopcf, int errcode) -{ - TValue *frame = L->base-1; - void *cf = L->cframe; - while (cf) { - int32_t nres = cframe_nres(cframe_raw(cf)); - if (nres < 0) { /* C frame without Lua frame? */ - TValue *top = restorestack(L, -nres); - if (frame < top) { /* Frame reached? */ - if (errcode) { - L->cframe = cframe_prev(cf); - L->base = frame+1; - unwindstack(L, top); - } - return cf; - } - } - if (frame <= tvref(L->stack)) - break; - switch (frame_typep(frame)) { - case FRAME_LUA: /* Lua frame. */ - case FRAME_LUAP: - frame = frame_prevl(frame); - break; - case FRAME_C: /* C frame. */ -#if LJ_HASFFI - unwind_c: -#endif -#if LJ_UNWIND_EXT - if (errcode) { - L->cframe = cframe_prev(cf); - L->base = frame_prevd(frame) + 1; - unwindstack(L, frame); - } else if (cf != stopcf) { - cf = cframe_prev(cf); - frame = frame_prevd(frame); - break; - } - return NULL; /* Continue unwinding. */ -#else - UNUSED(stopcf); - cf = cframe_prev(cf); - frame = frame_prevd(frame); - break; -#endif - case FRAME_CP: /* Protected C frame. */ - if (cframe_canyield(cf)) { /* Resume? */ - if (errcode) { - hook_leave(G(L)); /* Assumes nobody uses coroutines inside hooks. */ - L->cframe = NULL; - L->status = (uint8_t)errcode; - } - return cf; - } - if (errcode) { - L->cframe = cframe_prev(cf); - L->base = frame_prevd(frame) + 1; - unwindstack(L, frame); - } - return cf; - case FRAME_CONT: /* Continuation frame. */ -#if LJ_HASFFI - if ((frame-1)->u32.lo == LJ_CONT_FFI_CALLBACK) - goto unwind_c; -#endif - case FRAME_VARG: /* Vararg frame. */ - frame = frame_prevd(frame); - break; - case FRAME_PCALL: /* FF pcall() frame. */ - case FRAME_PCALLH: /* FF pcall() frame inside hook. */ - if (errcode) { - if (errcode == LUA_YIELD) { - frame = frame_prevd(frame); - break; - } - if (frame_typep(frame) == FRAME_PCALL) - hook_leave(G(L)); - L->cframe = cf; - L->base = frame_prevd(frame) + 1; - unwindstack(L, L->base); - } - return (void *)((intptr_t)cf | CFRAME_UNWIND_FF); - } - } - /* No C frame. */ - if (errcode) { - L->cframe = NULL; - L->base = tvref(L->stack)+1; - unwindstack(L, L->base); - if (G(L)->panic) - G(L)->panic(L); - exit(EXIT_FAILURE); - } - return L; /* Anything non-NULL will do. */ -} - -/* -- External frame unwinding -------------------------------------------- */ - -#if defined(__GNUC__) && !LJ_NO_UNWIND && !LJ_TARGET_WINDOWS - -/* -** We have to use our own definitions instead of the mandatory (!) unwind.h, -** since various OS, distros and compilers mess up the header installation. -*/ - -typedef struct _Unwind_Exception -{ - uint64_t exclass; - void (*excleanup)(int, struct _Unwind_Exception *); - uintptr_t p1, p2; -} __attribute__((__aligned__)) _Unwind_Exception; - -typedef struct _Unwind_Context _Unwind_Context; - -#define _URC_OK 0 -#define _URC_FATAL_PHASE1_ERROR 3 -#define _URC_HANDLER_FOUND 6 -#define _URC_INSTALL_CONTEXT 7 -#define _URC_CONTINUE_UNWIND 8 -#define _URC_FAILURE 9 - -#if !LJ_TARGET_ARM - -extern uintptr_t _Unwind_GetCFA(_Unwind_Context *); -extern void _Unwind_SetGR(_Unwind_Context *, int, uintptr_t); -extern void _Unwind_SetIP(_Unwind_Context *, uintptr_t); -extern void _Unwind_DeleteException(_Unwind_Exception *); -extern int _Unwind_RaiseException(_Unwind_Exception *); - -#define _UA_SEARCH_PHASE 1 -#define _UA_CLEANUP_PHASE 2 -#define _UA_HANDLER_FRAME 4 -#define _UA_FORCE_UNWIND 8 - -#define LJ_UEXCLASS 0x4c55414a49543200ULL /* LUAJIT2\0 */ -#define LJ_UEXCLASS_MAKE(c) (LJ_UEXCLASS | (uint64_t)(c)) -#define LJ_UEXCLASS_CHECK(cl) (((cl) ^ LJ_UEXCLASS) <= 0xff) -#define LJ_UEXCLASS_ERRCODE(cl) ((int)((cl) & 0xff)) - -/* DWARF2 personality handler referenced from interpreter .eh_frame. */ -LJ_FUNCA int lj_err_unwind_dwarf(int version, int actions, - uint64_t uexclass, _Unwind_Exception *uex, _Unwind_Context *ctx) -{ - void *cf; - lua_State *L; - if (version != 1) - return _URC_FATAL_PHASE1_ERROR; - UNUSED(uexclass); - cf = (void *)_Unwind_GetCFA(ctx); - L = cframe_L(cf); - if ((actions & _UA_SEARCH_PHASE)) { -#if LJ_UNWIND_EXT - if (err_unwind(L, cf, 0) == NULL) - return _URC_CONTINUE_UNWIND; -#endif - if (!LJ_UEXCLASS_CHECK(uexclass)) { - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRCPP)); - } - return _URC_HANDLER_FOUND; - } - if ((actions & _UA_CLEANUP_PHASE)) { - int errcode; - if (LJ_UEXCLASS_CHECK(uexclass)) { - errcode = LJ_UEXCLASS_ERRCODE(uexclass); - } else { - if ((actions & _UA_HANDLER_FRAME)) - _Unwind_DeleteException(uex); - errcode = LUA_ERRRUN; - } -#if LJ_UNWIND_EXT - cf = err_unwind(L, cf, errcode); - if ((actions & _UA_FORCE_UNWIND)) { - return _URC_CONTINUE_UNWIND; - } else if (cf) { - _Unwind_SetGR(ctx, LJ_TARGET_EHRETREG, errcode); - _Unwind_SetIP(ctx, (uintptr_t)(cframe_unwind_ff(cf) ? - lj_vm_unwind_ff_eh : - lj_vm_unwind_c_eh)); - return _URC_INSTALL_CONTEXT; - } -#if LJ_TARGET_X86ORX64 - else if ((actions & _UA_HANDLER_FRAME)) { - /* Workaround for ancient libgcc bug. Still present in RHEL 5.5. :-/ - ** Real fix: http://gcc.gnu.org/viewcvs/trunk/gcc/unwind-dw2.c?r1=121165&r2=124837&pathrev=153877&diff_format=h - */ - _Unwind_SetGR(ctx, LJ_TARGET_EHRETREG, errcode); - _Unwind_SetIP(ctx, (uintptr_t)lj_vm_unwind_rethrow); - return _URC_INSTALL_CONTEXT; - } -#endif -#else - /* This is not the proper way to escape from the unwinder. We get away with - ** it on non-x64 because the interpreter restores all callee-saved regs. - */ - lj_err_throw(L, errcode); -#endif - } - return _URC_CONTINUE_UNWIND; -} - -#if LJ_UNWIND_EXT -#if LJ_TARGET_OSX || defined(__OpenBSD__) -/* Sorry, no thread safety for OSX. Complain to Apple, not me. */ -static _Unwind_Exception static_uex; -#else -static __thread _Unwind_Exception static_uex; -#endif - -/* Raise DWARF2 exception. */ -static void err_raise_ext(int errcode) -{ - static_uex.exclass = LJ_UEXCLASS_MAKE(errcode); - static_uex.excleanup = NULL; - _Unwind_RaiseException(&static_uex); -} -#endif - -#else - -extern void _Unwind_DeleteException(void *); -extern int __gnu_unwind_frame (void *, _Unwind_Context *); -extern int _Unwind_VRS_Set(_Unwind_Context *, int, uint32_t, int, void *); -extern int _Unwind_VRS_Get(_Unwind_Context *, int, uint32_t, int, void *); - -static inline uint32_t _Unwind_GetGR(_Unwind_Context *ctx, int r) -{ - uint32_t v; - _Unwind_VRS_Get(ctx, 0, r, 0, &v); - return v; -} - -static inline void _Unwind_SetGR(_Unwind_Context *ctx, int r, uint32_t v) -{ - _Unwind_VRS_Set(ctx, 0, r, 0, &v); -} - -#define _US_VIRTUAL_UNWIND_FRAME 0 -#define _US_UNWIND_FRAME_STARTING 1 -#define _US_ACTION_MASK 3 -#define _US_FORCE_UNWIND 8 - -/* ARM unwinder personality handler referenced from interpreter .ARM.extab. */ -LJ_FUNCA int lj_err_unwind_arm(int state, void *ucb, _Unwind_Context *ctx) -{ - void *cf = (void *)_Unwind_GetGR(ctx, 13); - lua_State *L = cframe_L(cf); - if ((state & _US_ACTION_MASK) == _US_VIRTUAL_UNWIND_FRAME) { - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRCPP)); - return _URC_HANDLER_FOUND; - } - if ((state&(_US_ACTION_MASK|_US_FORCE_UNWIND)) == _US_UNWIND_FRAME_STARTING) { - _Unwind_DeleteException(ucb); - _Unwind_SetGR(ctx, 15, (uint32_t)(void *)lj_err_throw); - _Unwind_SetGR(ctx, 0, (uint32_t)L); - _Unwind_SetGR(ctx, 1, (uint32_t)LUA_ERRRUN); - return _URC_INSTALL_CONTEXT; - } - if (__gnu_unwind_frame(ucb, ctx) != _URC_OK) - return _URC_FAILURE; - return _URC_CONTINUE_UNWIND; -} - -#endif - -#elif LJ_TARGET_X64 && LJ_TARGET_WINDOWS - -/* -** Someone in Redmond owes me several days of my life. A lot of this is -** undocumented or just plain wrong on MSDN. Some of it can be gathered -** from 3rd party docs or must be found by trial-and-error. They really -** don't want you to write your own language-specific exception handler -** or to interact gracefully with MSVC. :-( -** -** Apparently MSVC doesn't call C++ destructors for foreign exceptions -** unless you compile your C++ code with /EHa. Unfortunately this means -** catch (...) also catches things like access violations. The use of -** _set_se_translator doesn't really help, because it requires /EHa, too. -*/ - -#define WIN32_LEAN_AND_MEAN -#include - -/* Taken from: http://www.nynaeve.net/?p=99 */ -typedef struct UndocumentedDispatcherContext { - ULONG64 ControlPc; - ULONG64 ImageBase; - PRUNTIME_FUNCTION FunctionEntry; - ULONG64 EstablisherFrame; - ULONG64 TargetIp; - PCONTEXT ContextRecord; - void (*LanguageHandler)(void); - PVOID HandlerData; - PUNWIND_HISTORY_TABLE HistoryTable; - ULONG ScopeIndex; - ULONG Fill0; -} UndocumentedDispatcherContext; - -/* Another wild guess. */ -extern void __DestructExceptionObject(EXCEPTION_RECORD *rec, int nothrow); - -#ifdef MINGW_SDK_INIT -/* Workaround for broken MinGW64 declaration. */ -VOID RtlUnwindEx_FIXED(PVOID,PVOID,PVOID,PVOID,PVOID,PVOID) asm("RtlUnwindEx"); -#define RtlUnwindEx RtlUnwindEx_FIXED -#endif - -#define LJ_MSVC_EXCODE ((DWORD)0xe06d7363) -#define LJ_GCC_EXCODE ((DWORD)0x20474343) - -#define LJ_EXCODE ((DWORD)0xe24c4a00) -#define LJ_EXCODE_MAKE(c) (LJ_EXCODE | (DWORD)(c)) -#define LJ_EXCODE_CHECK(cl) (((cl) ^ LJ_EXCODE) <= 0xff) -#define LJ_EXCODE_ERRCODE(cl) ((int)((cl) & 0xff)) - -/* Win64 exception handler for interpreter frame. */ -LJ_FUNCA EXCEPTION_DISPOSITION lj_err_unwind_win64(EXCEPTION_RECORD *rec, - void *cf, CONTEXT *ctx, UndocumentedDispatcherContext *dispatch) -{ - lua_State *L = cframe_L(cf); - int errcode = LJ_EXCODE_CHECK(rec->ExceptionCode) ? - LJ_EXCODE_ERRCODE(rec->ExceptionCode) : LUA_ERRRUN; - if ((rec->ExceptionFlags & 6)) { /* EH_UNWINDING|EH_EXIT_UNWIND */ - /* Unwind internal frames. */ - err_unwind(L, cf, errcode); - } else { - void *cf2 = err_unwind(L, cf, 0); - if (cf2) { /* We catch it, so start unwinding the upper frames. */ - if (rec->ExceptionCode == LJ_MSVC_EXCODE || - rec->ExceptionCode == LJ_GCC_EXCODE) { - __DestructExceptionObject(rec, 1); - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRCPP)); - } else if (!LJ_EXCODE_CHECK(rec->ExceptionCode)) { - /* Don't catch access violations etc. */ - return ExceptionContinueSearch; - } - /* Unwind the stack and call all handlers for all lower C frames - ** (including ourselves) again with EH_UNWINDING set. Then set - ** rsp = cf, rax = errcode and jump to the specified target. - */ - RtlUnwindEx(cf, (void *)((cframe_unwind_ff(cf2) && errcode != LUA_YIELD) ? - lj_vm_unwind_ff_eh : - lj_vm_unwind_c_eh), - rec, (void *)(uintptr_t)errcode, ctx, dispatch->HistoryTable); - /* RtlUnwindEx should never return. */ - } - } - return ExceptionContinueSearch; -} - -/* Raise Windows exception. */ -static void err_raise_ext(int errcode) -{ - RaiseException(LJ_EXCODE_MAKE(errcode), 1 /* EH_NONCONTINUABLE */, 0, NULL); -} - -#endif - -/* -- Error handling ------------------------------------------------------ */ - -/* Throw error. Find catch frame, unwind stack and continue. */ -LJ_NOINLINE void LJ_FASTCALL lj_err_throw(lua_State *L, int errcode) -{ - global_State *g = G(L); - lj_trace_abort(g); - setgcrefnull(g->jit_L); - L->status = 0; -#if LJ_UNWIND_EXT - err_raise_ext(errcode); - /* - ** A return from this function signals a corrupt C stack that cannot be - ** unwound. We have no choice but to call the panic function and exit. - ** - ** Usually this is caused by a C function without unwind information. - ** This should never happen on x64, but may happen if you've manually - ** enabled LUAJIT_UNWIND_EXTERNAL and forgot to recompile *every* - ** non-C++ file with -funwind-tables. - */ - if (G(L)->panic) - G(L)->panic(L); -#else - { - void *cf = err_unwind(L, NULL, errcode); - if (cframe_unwind_ff(cf)) - lj_vm_unwind_ff(cframe_raw(cf)); - else - lj_vm_unwind_c(cframe_raw(cf), errcode); - } -#endif - exit(EXIT_FAILURE); -} - -/* Return string object for error message. */ -LJ_NOINLINE GCstr *lj_err_str(lua_State *L, ErrMsg em) -{ - return lj_str_newz(L, err2msg(em)); -} - -/* Out-of-memory error. */ -LJ_NOINLINE void lj_err_mem(lua_State *L) -{ - if (L->status == LUA_ERRERR+1) /* Don't touch the stack during lua_open. */ - lj_vm_unwind_c(L->cframe, LUA_ERRMEM); - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRMEM)); - lj_err_throw(L, LUA_ERRMEM); -} - -/* Find error function for runtime errors. Requires an extra stack traversal. */ -static ptrdiff_t finderrfunc(lua_State *L) -{ - cTValue *frame = L->base-1, *bot = tvref(L->stack); - void *cf = L->cframe; - while (frame > bot && cf) { - while (cframe_nres(cframe_raw(cf)) < 0) { /* cframe without frame? */ - if (frame >= restorestack(L, -cframe_nres(cf))) - break; - if (cframe_errfunc(cf) >= 0) /* Error handler not inherited (-1)? */ - return cframe_errfunc(cf); - cf = cframe_prev(cf); /* Else unwind cframe and continue searching. */ - if (cf == NULL) - return 0; - } - switch (frame_typep(frame)) { - case FRAME_LUA: - case FRAME_LUAP: - frame = frame_prevl(frame); - break; - case FRAME_C: - cf = cframe_prev(cf); - /* fallthrough */ - case FRAME_VARG: - frame = frame_prevd(frame); - break; - case FRAME_CONT: -#if LJ_HASFFI - if ((frame-1)->u32.lo == LJ_CONT_FFI_CALLBACK) - cf = cframe_prev(cf); -#endif - frame = frame_prevd(frame); - break; - case FRAME_CP: - if (cframe_canyield(cf)) return 0; - if (cframe_errfunc(cf) >= 0) - return cframe_errfunc(cf); - frame = frame_prevd(frame); - break; - case FRAME_PCALL: - case FRAME_PCALLH: - if (frame_ftsz(frame) >= (ptrdiff_t)(2*sizeof(TValue))) /* xpcall? */ - return savestack(L, frame-1); /* Point to xpcall's errorfunc. */ - return 0; - default: - lua_assert(0); - return 0; - } - } - return 0; -} - -/* Runtime error. */ -LJ_NOINLINE void lj_err_run(lua_State *L) -{ - ptrdiff_t ef = finderrfunc(L); - if (ef) { - TValue *errfunc = restorestack(L, ef); - TValue *top = L->top; - lj_trace_abort(G(L)); - if (!tvisfunc(errfunc) || L->status == LUA_ERRERR) { - setstrV(L, top-1, lj_err_str(L, LJ_ERR_ERRERR)); - lj_err_throw(L, LUA_ERRERR); - } - L->status = LUA_ERRERR; - copyTV(L, top, top-1); - copyTV(L, top-1, errfunc); - L->top = top+1; - lj_vm_call(L, top, 1+1); /* Stack: |errfunc|msg| -> |msg| */ - } - lj_err_throw(L, LUA_ERRRUN); -} - -/* Formatted runtime error message. */ -LJ_NORET LJ_NOINLINE static void err_msgv(lua_State *L, ErrMsg em, ...) -{ - const char *msg; - va_list argp; - va_start(argp, em); - if (curr_funcisL(L)) L->top = curr_topL(L); - msg = lj_str_pushvf(L, err2msg(em), argp); - va_end(argp); - lj_debug_addloc(L, msg, L->base-1, NULL); - lj_err_run(L); -} - -/* Non-vararg variant for better calling conventions. */ -LJ_NOINLINE void lj_err_msg(lua_State *L, ErrMsg em) -{ - err_msgv(L, em); -} - -/* Lexer error. */ -LJ_NOINLINE void lj_err_lex(lua_State *L, GCstr *src, const char *tok, - BCLine line, ErrMsg em, va_list argp) -{ - char buff[LUA_IDSIZE]; - const char *msg; - lj_debug_shortname(buff, src); - msg = lj_str_pushvf(L, err2msg(em), argp); - msg = lj_str_pushf(L, "%s:%d: %s", buff, line, msg); - if (tok) - lj_str_pushf(L, err2msg(LJ_ERR_XNEAR), msg, tok); - lj_err_throw(L, LUA_ERRSYNTAX); -} - -/* Typecheck error for operands. */ -LJ_NOINLINE void lj_err_optype(lua_State *L, cTValue *o, ErrMsg opm) -{ - const char *tname = lj_typename(o); - const char *opname = err2msg(opm); - if (curr_funcisL(L)) { - GCproto *pt = curr_proto(L); - const BCIns *pc = cframe_Lpc(L) - 1; - const char *oname = NULL; - const char *kind = lj_debug_slotname(pt, pc, (BCReg)(o-L->base), &oname); - if (kind) - err_msgv(L, LJ_ERR_BADOPRT, opname, kind, oname, tname); - } - err_msgv(L, LJ_ERR_BADOPRV, opname, tname); -} - -/* Typecheck error for ordered comparisons. */ -LJ_NOINLINE void lj_err_comp(lua_State *L, cTValue *o1, cTValue *o2) -{ - const char *t1 = lj_typename(o1); - const char *t2 = lj_typename(o2); - err_msgv(L, t1 == t2 ? LJ_ERR_BADCMPV : LJ_ERR_BADCMPT, t1, t2); - /* This assumes the two "boolean" entries are commoned by the C compiler. */ -} - -/* Typecheck error for __call. */ -LJ_NOINLINE void lj_err_optype_call(lua_State *L, TValue *o) -{ - /* Gross hack if lua_[p]call or pcall/xpcall fail for a non-callable object: - ** L->base still points to the caller. So add a dummy frame with L instead - ** of a function. See lua_getstack(). - */ - const BCIns *pc = cframe_Lpc(L); - if (((ptrdiff_t)pc & FRAME_TYPE) != FRAME_LUA) { - const char *tname = lj_typename(o); - setframe_pc(o, pc); - setframe_gc(o, obj2gco(L)); - L->top = L->base = o+1; - err_msgv(L, LJ_ERR_BADCALL, tname); - } - lj_err_optype(L, o, LJ_ERR_OPCALL); -} - -/* Error in context of caller. */ -LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) -{ - TValue *frame = L->base-1; - TValue *pframe = NULL; - if (frame_islua(frame)) { - pframe = frame_prevl(frame); - } else if (frame_iscont(frame)) { -#if LJ_HASFFI - if ((frame-1)->u32.lo == LJ_CONT_FFI_CALLBACK) { - pframe = frame; - frame = NULL; - } else -#endif - { - pframe = frame_prevd(frame); -#if LJ_HASFFI - /* Remove frame for FFI metamethods. */ - if (frame_func(frame)->c.ffid >= FF_ffi_meta___index && - frame_func(frame)->c.ffid <= FF_ffi_meta___tostring) { - L->base = pframe+1; - L->top = frame; - setcframe_pc(cframe_raw(L->cframe), frame_contpc(frame)); - } -#endif - } - } - lj_debug_addloc(L, msg, pframe, frame); - lj_err_run(L); -} - -/* Formatted error in context of caller. */ -LJ_NOINLINE void lj_err_callerv(lua_State *L, ErrMsg em, ...) -{ - const char *msg; - va_list argp; - va_start(argp, em); - msg = lj_str_pushvf(L, err2msg(em), argp); - va_end(argp); - lj_err_callermsg(L, msg); -} - -/* Error in context of caller. */ -LJ_NOINLINE void lj_err_caller(lua_State *L, ErrMsg em) -{ - lj_err_callermsg(L, err2msg(em)); -} - -/* Argument error message. */ -LJ_NORET LJ_NOINLINE static void err_argmsg(lua_State *L, int narg, - const char *msg) -{ - const char *fname = "?"; - const char *ftype = lj_debug_funcname(L, L->base - 1, &fname); - if (narg < 0 && narg > LUA_REGISTRYINDEX) - narg = (int)(L->top - L->base) + narg + 1; - if (ftype && ftype[3] == 'h' && --narg == 0) /* Check for "method". */ - msg = lj_str_pushf(L, err2msg(LJ_ERR_BADSELF), fname, msg); - else - msg = lj_str_pushf(L, err2msg(LJ_ERR_BADARG), narg, fname, msg); - lj_err_callermsg(L, msg); -} - -/* Formatted argument error. */ -LJ_NOINLINE void lj_err_argv(lua_State *L, int narg, ErrMsg em, ...) -{ - const char *msg; - va_list argp; - va_start(argp, em); - msg = lj_str_pushvf(L, err2msg(em), argp); - va_end(argp); - err_argmsg(L, narg, msg); -} - -/* Argument error. */ -LJ_NOINLINE void lj_err_arg(lua_State *L, int narg, ErrMsg em) -{ - err_argmsg(L, narg, err2msg(em)); -} - -/* Typecheck error for arguments. */ -LJ_NOINLINE void lj_err_argtype(lua_State *L, int narg, const char *xname) -{ - const char *tname, *msg; - if (narg <= LUA_REGISTRYINDEX) { - if (narg >= LUA_GLOBALSINDEX) { - tname = lj_obj_itypename[~LJ_TTAB]; - } else { - GCfunc *fn = curr_func(L); - int idx = LUA_GLOBALSINDEX - narg; - if (idx <= fn->c.nupvalues) - tname = lj_typename(&fn->c.upvalue[idx-1]); - else - tname = lj_obj_typename[0]; - } - } else { - TValue *o = narg < 0 ? L->top + narg : L->base + narg-1; - tname = o < L->top ? lj_typename(o) : lj_obj_typename[0]; - } - msg = lj_str_pushf(L, err2msg(LJ_ERR_BADTYPE), xname, tname); - err_argmsg(L, narg, msg); -} - -/* Typecheck error for arguments. */ -LJ_NOINLINE void lj_err_argt(lua_State *L, int narg, int tt) -{ - lj_err_argtype(L, narg, lj_obj_typename[tt+1]); -} - -/* -- Public error handling API ------------------------------------------- */ - -LUA_API lua_CFunction lua_atpanic(lua_State *L, lua_CFunction panicf) -{ - lua_CFunction old = G(L)->panic; - G(L)->panic = panicf; - return old; -} - -/* Forwarders for the public API (C calling convention and no LJ_NORET). */ -LUA_API int lua_error(lua_State *L) -{ - lj_err_run(L); - return 0; /* unreachable */ -} - -LUALIB_API int luaL_argerror(lua_State *L, int narg, const char *msg) -{ - err_argmsg(L, narg, msg); - return 0; /* unreachable */ -} - -LUALIB_API int luaL_typerror(lua_State *L, int narg, const char *xname) -{ - lj_err_argtype(L, narg, xname); - return 0; /* unreachable */ -} - -LUALIB_API void luaL_where(lua_State *L, int level) -{ - int size; - cTValue *frame = lj_debug_frame(L, level, &size); - lj_debug_addloc(L, "", frame, size ? frame+size : NULL); -} - -LUALIB_API int luaL_error(lua_State *L, const char *fmt, ...) -{ - const char *msg; - va_list argp; - va_start(argp, fmt); - msg = lj_str_pushvf(L, fmt, argp); - va_end(argp); - lj_err_callermsg(L, msg); - return 0; /* unreachable */ -} - diff --git a/deps/luajit/src/lj_err.h b/deps/luajit/src/lj_err.h deleted file mode 100644 index 03a56f0..0000000 --- a/deps/luajit/src/lj_err.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -** Error handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_ERR_H -#define _LJ_ERR_H - -#include - -#include "lj_obj.h" - -typedef enum { -#define ERRDEF(name, msg) \ - LJ_ERR_##name, LJ_ERR_##name##_ = LJ_ERR_##name + sizeof(msg)-1, -#include "lj_errmsg.h" - LJ_ERR__MAX -} ErrMsg; - -LJ_DATA const char *lj_err_allmsg; -#define err2msg(em) (lj_err_allmsg+(int)(em)) - -LJ_FUNC GCstr *lj_err_str(lua_State *L, ErrMsg em); -LJ_FUNCA_NORET void LJ_FASTCALL lj_err_throw(lua_State *L, int errcode); -LJ_FUNC_NORET void lj_err_mem(lua_State *L); -LJ_FUNC_NORET void lj_err_run(lua_State *L); -LJ_FUNC_NORET void lj_err_msg(lua_State *L, ErrMsg em); -LJ_FUNC_NORET void lj_err_lex(lua_State *L, GCstr *src, const char *tok, - BCLine line, ErrMsg em, va_list argp); -LJ_FUNC_NORET void lj_err_optype(lua_State *L, cTValue *o, ErrMsg opm); -LJ_FUNC_NORET void lj_err_comp(lua_State *L, cTValue *o1, cTValue *o2); -LJ_FUNC_NORET void lj_err_optype_call(lua_State *L, TValue *o); -LJ_FUNC_NORET void lj_err_callermsg(lua_State *L, const char *msg); -LJ_FUNC_NORET void lj_err_callerv(lua_State *L, ErrMsg em, ...); -LJ_FUNC_NORET void lj_err_caller(lua_State *L, ErrMsg em); -LJ_FUNC_NORET void lj_err_arg(lua_State *L, int narg, ErrMsg em); -LJ_FUNC_NORET void lj_err_argv(lua_State *L, int narg, ErrMsg em, ...); -LJ_FUNC_NORET void lj_err_argtype(lua_State *L, int narg, const char *xname); -LJ_FUNC_NORET void lj_err_argt(lua_State *L, int narg, int tt); - -#endif diff --git a/deps/luajit/src/lj_errmsg.h b/deps/luajit/src/lj_errmsg.h deleted file mode 100644 index 1c94876..0000000 --- a/deps/luajit/src/lj_errmsg.h +++ /dev/null @@ -1,193 +0,0 @@ -/* -** VM error messages. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* This file may be included multiple times with different ERRDEF macros. */ - -/* Basic error handling. */ -ERRDEF(ERRMEM, "not enough memory") -ERRDEF(ERRERR, "error in error handling") -ERRDEF(ERRCPP, "C++ exception") - -/* Allocations. */ -ERRDEF(STROV, "string length overflow") -ERRDEF(UDATAOV, "userdata length overflow") -ERRDEF(STKOV, "stack overflow") -ERRDEF(STKOVM, "stack overflow (%s)") -ERRDEF(TABOV, "table overflow") - -/* Table indexing. */ -ERRDEF(NANIDX, "table index is NaN") -ERRDEF(NILIDX, "table index is nil") -ERRDEF(NEXTIDX, "invalid key to " LUA_QL("next")) - -/* Metamethod resolving. */ -ERRDEF(BADCALL, "attempt to call a %s value") -ERRDEF(BADOPRT, "attempt to %s %s " LUA_QS " (a %s value)") -ERRDEF(BADOPRV, "attempt to %s a %s value") -ERRDEF(BADCMPT, "attempt to compare %s with %s") -ERRDEF(BADCMPV, "attempt to compare two %s values") -ERRDEF(GETLOOP, "loop in gettable") -ERRDEF(SETLOOP, "loop in settable") -ERRDEF(OPCALL, "call") -ERRDEF(OPINDEX, "index") -ERRDEF(OPARITH, "perform arithmetic on") -ERRDEF(OPCAT, "concatenate") -ERRDEF(OPLEN, "get length of") - -/* Type checks. */ -ERRDEF(BADSELF, "calling " LUA_QS " on bad self (%s)") -ERRDEF(BADARG, "bad argument #%d to " LUA_QS " (%s)") -ERRDEF(BADTYPE, "%s expected, got %s") -ERRDEF(BADVAL, "invalid value") -ERRDEF(NOVAL, "value expected") -ERRDEF(NOCORO, "coroutine expected") -ERRDEF(NOTABN, "nil or table expected") -ERRDEF(NOLFUNC, "Lua function expected") -ERRDEF(NOFUNCL, "function or level expected") -ERRDEF(NOSFT, "string/function/table expected") -ERRDEF(NOPROXY, "boolean or proxy expected") -ERRDEF(FORINIT, LUA_QL("for") " initial value must be a number") -ERRDEF(FORLIM, LUA_QL("for") " limit must be a number") -ERRDEF(FORSTEP, LUA_QL("for") " step must be a number") - -/* C API checks. */ -ERRDEF(NOENV, "no calling environment") -ERRDEF(CYIELD, "attempt to yield across C-call boundary") -ERRDEF(BADLU, "bad light userdata pointer") -ERRDEF(NOGCMM, "bad action while in __gc metamethod") -#if LJ_TARGET_WINDOWS -ERRDEF(BADFPU, "bad FPU precision (use D3DCREATE_FPU_PRESERVE with DirectX)") -#endif - -/* Standard library function errors. */ -ERRDEF(ASSERT, "assertion failed!") -ERRDEF(PROTMT, "cannot change a protected metatable") -ERRDEF(UNPACK, "too many results to unpack") -ERRDEF(RDRSTR, "reader function must return a string") -ERRDEF(PRTOSTR, LUA_QL("tostring") " must return a string to " LUA_QL("print")) -ERRDEF(IDXRNG, "index out of range") -ERRDEF(BASERNG, "base out of range") -ERRDEF(LVLRNG, "level out of range") -ERRDEF(INVLVL, "invalid level") -ERRDEF(INVOPT, "invalid option") -ERRDEF(INVOPTM, "invalid option " LUA_QS) -ERRDEF(INVFMT, "invalid format") -ERRDEF(SETFENV, LUA_QL("setfenv") " cannot change environment of given object") -ERRDEF(CORUN, "cannot resume running coroutine") -ERRDEF(CODEAD, "cannot resume dead coroutine") -ERRDEF(COSUSP, "cannot resume non-suspended coroutine") -ERRDEF(TABINS, "wrong number of arguments to " LUA_QL("insert")) -ERRDEF(TABCAT, "invalid value (%s) at index %d in table for " LUA_QL("concat")) -ERRDEF(TABSORT, "invalid order function for sorting") -ERRDEF(IOCLFL, "attempt to use a closed file") -ERRDEF(IOSTDCL, "standard file is closed") -ERRDEF(OSUNIQF, "unable to generate a unique filename") -ERRDEF(OSDATEF, "field " LUA_QS " missing in date table") -ERRDEF(STRDUMP, "unable to dump given function") -ERRDEF(STRSLC, "string slice too long") -ERRDEF(STRPATB, "missing " LUA_QL("[") " after " LUA_QL("%f") " in pattern") -ERRDEF(STRPATC, "invalid pattern capture") -ERRDEF(STRPATE, "malformed pattern (ends with " LUA_QL("%") ")") -ERRDEF(STRPATM, "malformed pattern (missing " LUA_QL("]") ")") -ERRDEF(STRPATU, "unbalanced pattern") -ERRDEF(STRPATX, "pattern too complex") -ERRDEF(STRCAPI, "invalid capture index") -ERRDEF(STRCAPN, "too many captures") -ERRDEF(STRCAPU, "unfinished capture") -ERRDEF(STRFMTO, "invalid option " LUA_QL("%%%c") " to " LUA_QL("format")) -ERRDEF(STRFMTR, "invalid format (repeated flags)") -ERRDEF(STRFMTW, "invalid format (width or precision too long)") -ERRDEF(STRGSRV, "invalid replacement value (a %s)") -ERRDEF(BADMODN, "name conflict for module " LUA_QS) -#if LJ_HASJIT -ERRDEF(JITPROT, "runtime code generation failed, restricted kernel?") -#if LJ_TARGET_X86ORX64 -ERRDEF(NOJIT, "JIT compiler disabled, CPU does not support SSE2") -#else -ERRDEF(NOJIT, "JIT compiler disabled") -#endif -#elif defined(LJ_ARCH_NOJIT) -ERRDEF(NOJIT, "no JIT compiler for this architecture (yet)") -#else -ERRDEF(NOJIT, "JIT compiler permanently disabled by build option") -#endif -ERRDEF(JITOPT, "unknown or malformed optimization flag " LUA_QS) - -/* Lexer/parser errors. */ -ERRDEF(XMODE, "attempt to load chunk with wrong mode") -ERRDEF(XNEAR, "%s near " LUA_QS) -ERRDEF(XELEM, "lexical element too long") -ERRDEF(XLINES, "chunk has too many lines") -ERRDEF(XLEVELS, "chunk has too many syntax levels") -ERRDEF(XNUMBER, "malformed number") -ERRDEF(XLSTR, "unfinished long string") -ERRDEF(XLCOM, "unfinished long comment") -ERRDEF(XSTR, "unfinished string") -ERRDEF(XESC, "invalid escape sequence") -ERRDEF(XLDELIM, "invalid long string delimiter") -ERRDEF(XTOKEN, LUA_QS " expected") -ERRDEF(XJUMP, "control structure too long") -ERRDEF(XSLOTS, "function or expression too complex") -ERRDEF(XLIMC, "chunk has more than %d local variables") -ERRDEF(XLIMM, "main function has more than %d %s") -ERRDEF(XLIMF, "function at line %d has more than %d %s") -ERRDEF(XMATCH, LUA_QS " expected (to close " LUA_QS " at line %d)") -ERRDEF(XFIXUP, "function too long for return fixup") -ERRDEF(XPARAM, " or " LUA_QL("...") " expected") -#if !LJ_52 -ERRDEF(XAMBIG, "ambiguous syntax (function call x new statement)") -#endif -ERRDEF(XFUNARG, "function arguments expected") -ERRDEF(XSYMBOL, "unexpected symbol") -ERRDEF(XDOTS, "cannot use " LUA_QL("...") " outside a vararg function") -ERRDEF(XSYNTAX, "syntax error") -ERRDEF(XFOR, LUA_QL("=") " or " LUA_QL("in") " expected") -ERRDEF(XBREAK, "no loop to break") -ERRDEF(XLUNDEF, "undefined label " LUA_QS) -ERRDEF(XLDUP, "duplicate label " LUA_QS) -ERRDEF(XGSCOPE, " jumps into the scope of local " LUA_QS) - -/* Bytecode reader errors. */ -ERRDEF(BCFMT, "cannot load incompatible bytecode") -ERRDEF(BCBAD, "cannot load malformed bytecode") - -#if LJ_HASFFI -/* FFI errors. */ -ERRDEF(FFI_INVTYPE, "invalid C type") -ERRDEF(FFI_INVSIZE, "size of C type is unknown or too large") -ERRDEF(FFI_BADSCL, "bad storage class") -ERRDEF(FFI_DECLSPEC, "declaration specifier expected") -ERRDEF(FFI_BADTAG, "undeclared or implicit tag " LUA_QS) -ERRDEF(FFI_REDEF, "attempt to redefine " LUA_QS) -ERRDEF(FFI_NUMPARAM, "wrong number of type parameters") -ERRDEF(FFI_INITOV, "too many initializers for " LUA_QS) -ERRDEF(FFI_BADCONV, "cannot convert " LUA_QS " to " LUA_QS) -ERRDEF(FFI_BADLEN, "attempt to get length of " LUA_QS) -ERRDEF(FFI_BADCONCAT, "attempt to concatenate " LUA_QS " and " LUA_QS) -ERRDEF(FFI_BADARITH, "attempt to perform arithmetic on " LUA_QS " and " LUA_QS) -ERRDEF(FFI_BADCOMP, "attempt to compare " LUA_QS " with " LUA_QS) -ERRDEF(FFI_BADCALL, LUA_QS " is not callable") -ERRDEF(FFI_NUMARG, "wrong number of arguments for function call") -ERRDEF(FFI_BADMEMBER, LUA_QS " has no member named " LUA_QS) -ERRDEF(FFI_BADIDX, LUA_QS " cannot be indexed") -ERRDEF(FFI_BADIDXW, LUA_QS " cannot be indexed with " LUA_QS) -ERRDEF(FFI_BADMM, LUA_QS " has no " LUA_QS " metamethod") -ERRDEF(FFI_WRCONST, "attempt to write to constant location") -ERRDEF(FFI_NODECL, "missing declaration for symbol " LUA_QS) -ERRDEF(FFI_BADCBACK, "bad callback") -#if LJ_OS_NOJIT -ERRDEF(FFI_CBACKOV, "no support for callbacks on this OS") -#else -ERRDEF(FFI_CBACKOV, "too many callbacks") -#endif -ERRDEF(FFI_NYIPACKBIT, "NYI: packed bit fields") -ERRDEF(FFI_NYICALL, "NYI: cannot call this C function (yet)") -#endif - -#undef ERRDEF - -/* Detecting unused error messages: - awk -F, '/^ERRDEF/ { gsub(/ERRDEF./, ""); printf "grep -q LJ_ERR_%s *.[ch] || echo %s\n", $1, $1}' lj_errmsg.h | sh -*/ diff --git a/deps/luajit/src/lj_ff.h b/deps/luajit/src/lj_ff.h deleted file mode 100644 index 73dad96..0000000 --- a/deps/luajit/src/lj_ff.h +++ /dev/null @@ -1,18 +0,0 @@ -/* -** Fast function IDs. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_FF_H -#define _LJ_FF_H - -/* Fast function ID. */ -typedef enum { - FF_LUA_ = FF_LUA, /* Lua function (must be 0). */ - FF_C_ = FF_C, /* Regular C function (must be 1). */ -#define FFDEF(name) FF_##name, -#include "lj_ffdef.h" - FF__MAX -} FastFunc; - -#endif diff --git a/deps/luajit/src/lj_ffrecord.c b/deps/luajit/src/lj_ffrecord.c deleted file mode 100644 index 69f71ab..0000000 --- a/deps/luajit/src/lj_ffrecord.c +++ /dev/null @@ -1,888 +0,0 @@ -/* -** Fast function call recorder. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_ffrecord_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_frame.h" -#include "lj_bc.h" -#include "lj_ff.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_record.h" -#include "lj_ffrecord.h" -#include "lj_crecord.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_strscan.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -/* -- Fast function recording handlers ------------------------------------ */ - -/* Conventions for fast function call handlers: -** -** The argument slots start at J->base[0]. All of them are guaranteed to be -** valid and type-specialized references. J->base[J->maxslot] is set to 0 -** as a sentinel. The runtime argument values start at rd->argv[0]. -** -** In general fast functions should check for presence of all of their -** arguments and for the correct argument types. Some simplifications -** are allowed if the interpreter throws instead. But even if recording -** is aborted, the generated IR must be consistent (no zero-refs). -** -** The number of results in rd->nres is set to 1. Handlers that return -** a different number of results need to override it. A negative value -** prevents return processing (e.g. for pending calls). -** -** Results need to be stored starting at J->base[0]. Return processing -** moves them to the right slots later. -** -** The per-ffid auxiliary data is the value of the 2nd part of the -** LJLIB_REC() annotation. This allows handling similar functionality -** in a common handler. -*/ - -/* Type of handler to record a fast function. */ -typedef void (LJ_FASTCALL *RecordFunc)(jit_State *J, RecordFFData *rd); - -/* Get runtime value of int argument. */ -static int32_t argv2int(jit_State *J, TValue *o) -{ - if (!lj_strscan_numberobj(o)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - return tvisint(o) ? intV(o) : lj_num2int(numV(o)); -} - -/* Get runtime value of string argument. */ -static GCstr *argv2str(jit_State *J, TValue *o) -{ - if (LJ_LIKELY(tvisstr(o))) { - return strV(o); - } else { - GCstr *s; - if (!tvisnumber(o)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - if (tvisint(o)) - s = lj_str_fromint(J->L, intV(o)); - else - s = lj_str_fromnum(J->L, &o->n); - setstrV(J->L, o, s); - return s; - } -} - -/* Return number of results wanted by caller. */ -static ptrdiff_t results_wanted(jit_State *J) -{ - TValue *frame = J->L->base-1; - if (frame_islua(frame)) - return (ptrdiff_t)bc_b(frame_pc(frame)[-1]) - 1; - else - return -1; -} - -/* Throw error for unsupported variant of fast function. */ -LJ_NORET static void recff_nyiu(jit_State *J) -{ - setfuncV(J->L, &J->errinfo, J->fn); - lj_trace_err_info(J, LJ_TRERR_NYIFFU); -} - -/* Fallback handler for all fast functions that are not recorded (yet). */ -static void LJ_FASTCALL recff_nyi(jit_State *J, RecordFFData *rd) -{ - setfuncV(J->L, &J->errinfo, J->fn); - lj_trace_err_info(J, LJ_TRERR_NYIFF); - UNUSED(rd); -} - -/* C functions can have arbitrary side-effects and are not recorded (yet). */ -static void LJ_FASTCALL recff_c(jit_State *J, RecordFFData *rd) -{ - setfuncV(J->L, &J->errinfo, J->fn); - lj_trace_err_info(J, LJ_TRERR_NYICF); - UNUSED(rd); -} - -/* -- Base library fast functions ----------------------------------------- */ - -static void LJ_FASTCALL recff_assert(jit_State *J, RecordFFData *rd) -{ - /* Arguments already specialized. The interpreter throws for nil/false. */ - rd->nres = J->maxslot; /* Pass through all arguments. */ -} - -static void LJ_FASTCALL recff_type(jit_State *J, RecordFFData *rd) -{ - /* Arguments already specialized. Result is a constant string. Neat, huh? */ - uint32_t t; - if (tvisnumber(&rd->argv[0])) - t = ~LJ_TNUMX; - else if (LJ_64 && tvislightud(&rd->argv[0])) - t = ~LJ_TLIGHTUD; - else - t = ~itype(&rd->argv[0]); - J->base[0] = lj_ir_kstr(J, strV(&J->fn->c.upvalue[t])); - UNUSED(rd); -} - -static void LJ_FASTCALL recff_getmetatable(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - if (tr) { - RecordIndex ix; - ix.tab = tr; - copyTV(J->L, &ix.tabv, &rd->argv[0]); - if (lj_record_mm_lookup(J, &ix, MM_metatable)) - J->base[0] = ix.mobj; - else - J->base[0] = ix.mt; - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_setmetatable(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - TRef mt = J->base[1]; - if (tref_istab(tr) && (tref_istab(mt) || (mt && tref_isnil(mt)))) { - TRef fref, mtref; - RecordIndex ix; - ix.tab = tr; - copyTV(J->L, &ix.tabv, &rd->argv[0]); - lj_record_mm_lookup(J, &ix, MM_metatable); /* Guard for no __metatable. */ - fref = emitir(IRT(IR_FREF, IRT_P32), tr, IRFL_TAB_META); - mtref = tref_isnil(mt) ? lj_ir_knull(J, IRT_TAB) : mt; - emitir(IRT(IR_FSTORE, IRT_TAB), fref, mtref); - if (!tref_isnil(mt)) - emitir(IRT(IR_TBAR, IRT_TAB), tr, 0); - J->base[0] = tr; - J->needsnap = 1; - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_rawget(jit_State *J, RecordFFData *rd) -{ - RecordIndex ix; - ix.tab = J->base[0]; ix.key = J->base[1]; - if (tref_istab(ix.tab) && ix.key) { - ix.val = 0; ix.idxchain = 0; - settabV(J->L, &ix.tabv, tabV(&rd->argv[0])); - copyTV(J->L, &ix.keyv, &rd->argv[1]); - J->base[0] = lj_record_idx(J, &ix); - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_rawset(jit_State *J, RecordFFData *rd) -{ - RecordIndex ix; - ix.tab = J->base[0]; ix.key = J->base[1]; ix.val = J->base[2]; - if (tref_istab(ix.tab) && ix.key && ix.val) { - ix.idxchain = 0; - settabV(J->L, &ix.tabv, tabV(&rd->argv[0])); - copyTV(J->L, &ix.keyv, &rd->argv[1]); - copyTV(J->L, &ix.valv, &rd->argv[2]); - lj_record_idx(J, &ix); - /* Pass through table at J->base[0] as result. */ - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_rawequal(jit_State *J, RecordFFData *rd) -{ - TRef tra = J->base[0]; - TRef trb = J->base[1]; - if (tra && trb) { - int diff = lj_record_objcmp(J, tra, trb, &rd->argv[0], &rd->argv[1]); - J->base[0] = diff ? TREF_FALSE : TREF_TRUE; - } /* else: Interpreter will throw. */ -} - -#if LJ_52 -static void LJ_FASTCALL recff_rawlen(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - if (tref_isstr(tr)) - J->base[0] = emitir(IRTI(IR_FLOAD), tr, IRFL_STR_LEN); - else if (tref_istab(tr)) - J->base[0] = lj_ir_call(J, IRCALL_lj_tab_len, tr); - /* else: Interpreter will throw. */ - UNUSED(rd); -} -#endif - -/* Determine mode of select() call. */ -int32_t lj_ffrecord_select_mode(jit_State *J, TRef tr, TValue *tv) -{ - if (tref_isstr(tr) && *strVdata(tv) == '#') { /* select('#', ...) */ - if (strV(tv)->len == 1) { - emitir(IRTG(IR_EQ, IRT_STR), tr, lj_ir_kstr(J, strV(tv))); - } else { - TRef trptr = emitir(IRT(IR_STRREF, IRT_P32), tr, lj_ir_kint(J, 0)); - TRef trchar = emitir(IRT(IR_XLOAD, IRT_U8), trptr, IRXLOAD_READONLY); - emitir(IRTG(IR_EQ, IRT_INT), trchar, lj_ir_kint(J, '#')); - } - return 0; - } else { /* select(n, ...) */ - int32_t start = argv2int(J, tv); - if (start == 0) lj_trace_err(J, LJ_TRERR_BADTYPE); /* A bit misleading. */ - return start; - } -} - -static void LJ_FASTCALL recff_select(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - if (tr) { - ptrdiff_t start = lj_ffrecord_select_mode(J, tr, &rd->argv[0]); - if (start == 0) { /* select('#', ...) */ - J->base[0] = lj_ir_kint(J, J->maxslot - 1); - } else if (tref_isk(tr)) { /* select(k, ...) */ - ptrdiff_t n = (ptrdiff_t)J->maxslot; - if (start < 0) start += n; - else if (start > n) start = n; - rd->nres = n - start; - if (start >= 1) { - ptrdiff_t i; - for (i = 0; i < n - start; i++) - J->base[i] = J->base[start+i]; - } /* else: Interpreter will throw. */ - } else { - recff_nyiu(J); - } - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_tonumber(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - TRef base = J->base[1]; - if (tr && !tref_isnil(base)) { - base = lj_opt_narrow_toint(J, base); - if (!tref_isk(base) || IR(tref_ref(base))->i != 10) - recff_nyiu(J); - } - if (tref_isnumber_str(tr)) { - if (tref_isstr(tr)) { - TValue tmp; - if (!lj_strscan_num(strV(&rd->argv[0]), &tmp)) - recff_nyiu(J); /* Would need an inverted STRTO for this case. */ - tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0); - } -#if LJ_HASFFI - } else if (tref_iscdata(tr)) { - lj_crecord_tonumber(J, rd); - return; -#endif - } else { - tr = TREF_NIL; - } - J->base[0] = tr; - UNUSED(rd); -} - -static TValue *recff_metacall_cp(lua_State *L, lua_CFunction dummy, void *ud) -{ - jit_State *J = (jit_State *)ud; - lj_record_tailcall(J, 0, 1); - UNUSED(L); UNUSED(dummy); - return NULL; -} - -static int recff_metacall(jit_State *J, RecordFFData *rd, MMS mm) -{ - RecordIndex ix; - ix.tab = J->base[0]; - copyTV(J->L, &ix.tabv, &rd->argv[0]); - if (lj_record_mm_lookup(J, &ix, mm)) { /* Has metamethod? */ - int errcode; - TValue argv0; - /* Temporarily insert metamethod below object. */ - J->base[1] = J->base[0]; - J->base[0] = ix.mobj; - copyTV(J->L, &argv0, &rd->argv[0]); - copyTV(J->L, &rd->argv[1], &rd->argv[0]); - copyTV(J->L, &rd->argv[0], &ix.mobjv); - /* Need to protect lj_record_tailcall because it may throw. */ - errcode = lj_vm_cpcall(J->L, NULL, J, recff_metacall_cp); - /* Always undo Lua stack changes to avoid confusing the interpreter. */ - copyTV(J->L, &rd->argv[0], &argv0); - if (errcode) - lj_err_throw(J->L, errcode); /* Propagate errors. */ - rd->nres = -1; /* Pending call. */ - return 1; /* Tailcalled to metamethod. */ - } - return 0; -} - -static void LJ_FASTCALL recff_tostring(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - if (tref_isstr(tr)) { - /* Ignore __tostring in the string base metatable. */ - /* Pass on result in J->base[0]. */ - } else if (!recff_metacall(J, rd, MM_tostring)) { - if (tref_isnumber(tr)) { - J->base[0] = emitir(IRT(IR_TOSTR, IRT_STR), tr, 0); - } else if (tref_ispri(tr)) { - J->base[0] = lj_ir_kstr(J, strV(&J->fn->c.upvalue[tref_type(tr)])); - } else { - recff_nyiu(J); - } - } -} - -static void LJ_FASTCALL recff_ipairs_aux(jit_State *J, RecordFFData *rd) -{ - RecordIndex ix; - ix.tab = J->base[0]; - if (tref_istab(ix.tab)) { - if (!tvisnumber(&rd->argv[1])) /* No support for string coercion. */ - lj_trace_err(J, LJ_TRERR_BADTYPE); - setintV(&ix.keyv, numberVint(&rd->argv[1])+1); - settabV(J->L, &ix.tabv, tabV(&rd->argv[0])); - ix.val = 0; ix.idxchain = 0; - ix.key = lj_opt_narrow_toint(J, J->base[1]); - J->base[0] = ix.key = emitir(IRTI(IR_ADD), ix.key, lj_ir_kint(J, 1)); - J->base[1] = lj_record_idx(J, &ix); - rd->nres = tref_isnil(J->base[1]) ? 0 : 2; - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd) -{ - if (!(LJ_52 && recff_metacall(J, rd, MM_ipairs))) { - TRef tab = J->base[0]; - if (tref_istab(tab)) { - J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0])); - J->base[1] = tab; - J->base[2] = lj_ir_kint(J, 0); - rd->nres = 3; - } /* else: Interpreter will throw. */ - } -} - -static void LJ_FASTCALL recff_pcall(jit_State *J, RecordFFData *rd) -{ - if (J->maxslot >= 1) { - lj_record_call(J, 0, J->maxslot - 1); - rd->nres = -1; /* Pending call. */ - } /* else: Interpreter will throw. */ -} - -static TValue *recff_xpcall_cp(lua_State *L, lua_CFunction dummy, void *ud) -{ - jit_State *J = (jit_State *)ud; - lj_record_call(J, 1, J->maxslot - 2); - UNUSED(L); UNUSED(dummy); - return NULL; -} - -static void LJ_FASTCALL recff_xpcall(jit_State *J, RecordFFData *rd) -{ - if (J->maxslot >= 2) { - TValue argv0, argv1; - TRef tmp; - int errcode; - /* Swap function and traceback. */ - tmp = J->base[0]; J->base[0] = J->base[1]; J->base[1] = tmp; - copyTV(J->L, &argv0, &rd->argv[0]); - copyTV(J->L, &argv1, &rd->argv[1]); - copyTV(J->L, &rd->argv[0], &argv1); - copyTV(J->L, &rd->argv[1], &argv0); - /* Need to protect lj_record_call because it may throw. */ - errcode = lj_vm_cpcall(J->L, NULL, J, recff_xpcall_cp); - /* Always undo Lua stack swap to avoid confusing the interpreter. */ - copyTV(J->L, &rd->argv[0], &argv0); - copyTV(J->L, &rd->argv[1], &argv1); - if (errcode) - lj_err_throw(J->L, errcode); /* Propagate errors. */ - rd->nres = -1; /* Pending call. */ - } /* else: Interpreter will throw. */ -} - -/* -- Math library fast functions ----------------------------------------- */ - -static void LJ_FASTCALL recff_math_abs(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); - J->base[0] = emitir(IRTN(IR_ABS), tr, lj_ir_knum_abs(J)); - UNUSED(rd); -} - -/* Record rounding functions math.floor and math.ceil. */ -static void LJ_FASTCALL recff_math_round(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - if (!tref_isinteger(tr)) { /* Pass through integers unmodified. */ - tr = emitir(IRTN(IR_FPMATH), lj_ir_tonum(J, tr), rd->data); - /* Result is integral (or NaN/Inf), but may not fit an int32_t. */ - if (LJ_DUALNUM) { /* Try to narrow using a guarded conversion to int. */ - lua_Number n = lj_vm_foldfpm(numberVnum(&rd->argv[0]), rd->data); - if (n == (lua_Number)lj_num2int(n)) - tr = emitir(IRTGI(IR_CONV), tr, IRCONV_INT_NUM|IRCONV_CHECK); - } - J->base[0] = tr; - } -} - -/* Record unary math.* functions, mapped to IR_FPMATH opcode. */ -static void LJ_FASTCALL recff_math_unary(jit_State *J, RecordFFData *rd) -{ - J->base[0] = emitir(IRTN(IR_FPMATH), lj_ir_tonum(J, J->base[0]), rd->data); -} - -/* Record math.log. */ -static void LJ_FASTCALL recff_math_log(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); - if (J->base[1]) { -#ifdef LUAJIT_NO_LOG2 - uint32_t fpm = IRFPM_LOG; -#else - uint32_t fpm = IRFPM_LOG2; -#endif - TRef trb = lj_ir_tonum(J, J->base[1]); - tr = emitir(IRTN(IR_FPMATH), tr, fpm); - trb = emitir(IRTN(IR_FPMATH), trb, fpm); - trb = emitir(IRTN(IR_DIV), lj_ir_knum_one(J), trb); - tr = emitir(IRTN(IR_MUL), tr, trb); - } else { - tr = emitir(IRTN(IR_FPMATH), tr, IRFPM_LOG); - } - J->base[0] = tr; - UNUSED(rd); -} - -/* Record math.atan2. */ -static void LJ_FASTCALL recff_math_atan2(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); - TRef tr2 = lj_ir_tonum(J, J->base[1]); - J->base[0] = emitir(IRTN(IR_ATAN2), tr, tr2); - UNUSED(rd); -} - -/* Record math.ldexp. */ -static void LJ_FASTCALL recff_math_ldexp(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); -#if LJ_TARGET_X86ORX64 - TRef tr2 = lj_ir_tonum(J, J->base[1]); -#else - TRef tr2 = lj_opt_narrow_toint(J, J->base[1]); -#endif - J->base[0] = emitir(IRTN(IR_LDEXP), tr, tr2); - UNUSED(rd); -} - -/* Record math.asin, math.acos, math.atan. */ -static void LJ_FASTCALL recff_math_atrig(jit_State *J, RecordFFData *rd) -{ - TRef y = lj_ir_tonum(J, J->base[0]); - TRef x = lj_ir_knum_one(J); - uint32_t ffid = rd->data; - if (ffid != FF_math_atan) { - TRef tmp = emitir(IRTN(IR_MUL), y, y); - tmp = emitir(IRTN(IR_SUB), x, tmp); - tmp = emitir(IRTN(IR_FPMATH), tmp, IRFPM_SQRT); - if (ffid == FF_math_asin) { x = tmp; } else { x = y; y = tmp; } - } - J->base[0] = emitir(IRTN(IR_ATAN2), y, x); -} - -static void LJ_FASTCALL recff_math_htrig(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); - J->base[0] = emitir(IRTN(IR_CALLN), tr, rd->data); -} - -static void LJ_FASTCALL recff_math_modf(jit_State *J, RecordFFData *rd) -{ - TRef tr = J->base[0]; - if (tref_isinteger(tr)) { - J->base[0] = tr; - J->base[1] = lj_ir_kint(J, 0); - } else { - TRef trt; - tr = lj_ir_tonum(J, tr); - trt = emitir(IRTN(IR_FPMATH), tr, IRFPM_TRUNC); - J->base[0] = trt; - J->base[1] = emitir(IRTN(IR_SUB), tr, trt); - } - rd->nres = 2; -} - -static void LJ_FASTCALL recff_math_degrad(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); - TRef trm = lj_ir_knum(J, numV(&J->fn->c.upvalue[0])); - J->base[0] = emitir(IRTN(IR_MUL), tr, trm); - UNUSED(rd); -} - -static void LJ_FASTCALL recff_math_pow(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonum(J, J->base[0]); - if (!tref_isnumber_str(J->base[1])) - lj_trace_err(J, LJ_TRERR_BADTYPE); - J->base[0] = lj_opt_narrow_pow(J, tr, J->base[1], &rd->argv[1]); - UNUSED(rd); -} - -static void LJ_FASTCALL recff_math_minmax(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_ir_tonumber(J, J->base[0]); - uint32_t op = rd->data; - BCReg i; - for (i = 1; J->base[i] != 0; i++) { - TRef tr2 = lj_ir_tonumber(J, J->base[i]); - IRType t = IRT_INT; - if (!(tref_isinteger(tr) && tref_isinteger(tr2))) { - if (tref_isinteger(tr)) tr = emitir(IRTN(IR_CONV), tr, IRCONV_NUM_INT); - if (tref_isinteger(tr2)) tr2 = emitir(IRTN(IR_CONV), tr2, IRCONV_NUM_INT); - t = IRT_NUM; - } - tr = emitir(IRT(op, t), tr, tr2); - } - J->base[0] = tr; -} - -static void LJ_FASTCALL recff_math_random(jit_State *J, RecordFFData *rd) -{ - GCudata *ud = udataV(&J->fn->c.upvalue[0]); - TRef tr, one; - lj_ir_kgc(J, obj2gco(ud), IRT_UDATA); /* Prevent collection. */ - tr = lj_ir_call(J, IRCALL_lj_math_random_step, lj_ir_kptr(J, uddata(ud))); - one = lj_ir_knum_one(J); - tr = emitir(IRTN(IR_SUB), tr, one); - if (J->base[0]) { - TRef tr1 = lj_ir_tonum(J, J->base[0]); - if (J->base[1]) { /* d = floor(d*(r2-r1+1.0)) + r1 */ - TRef tr2 = lj_ir_tonum(J, J->base[1]); - tr2 = emitir(IRTN(IR_SUB), tr2, tr1); - tr2 = emitir(IRTN(IR_ADD), tr2, one); - tr = emitir(IRTN(IR_MUL), tr, tr2); - tr = emitir(IRTN(IR_FPMATH), tr, IRFPM_FLOOR); - tr = emitir(IRTN(IR_ADD), tr, tr1); - } else { /* d = floor(d*r1) + 1.0 */ - tr = emitir(IRTN(IR_MUL), tr, tr1); - tr = emitir(IRTN(IR_FPMATH), tr, IRFPM_FLOOR); - tr = emitir(IRTN(IR_ADD), tr, one); - } - } - J->base[0] = tr; - UNUSED(rd); -} - -/* -- Bit library fast functions ------------------------------------------ */ - -/* Record unary bit.tobit, bit.bnot, bit.bswap. */ -static void LJ_FASTCALL recff_bit_unary(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_opt_narrow_tobit(J, J->base[0]); - J->base[0] = (rd->data == IR_TOBIT) ? tr : emitir(IRTI(rd->data), tr, 0); -} - -/* Record N-ary bit.band, bit.bor, bit.bxor. */ -static void LJ_FASTCALL recff_bit_nary(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_opt_narrow_tobit(J, J->base[0]); - uint32_t op = rd->data; - BCReg i; - for (i = 1; J->base[i] != 0; i++) - tr = emitir(IRTI(op), tr, lj_opt_narrow_tobit(J, J->base[i])); - J->base[0] = tr; -} - -/* Record bit shifts. */ -static void LJ_FASTCALL recff_bit_shift(jit_State *J, RecordFFData *rd) -{ - TRef tr = lj_opt_narrow_tobit(J, J->base[0]); - TRef tsh = lj_opt_narrow_tobit(J, J->base[1]); - IROp op = (IROp)rd->data; - if (!(op < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) && - !tref_isk(tsh)) - tsh = emitir(IRTI(IR_BAND), tsh, lj_ir_kint(J, 31)); -#ifdef LJ_TARGET_UNIFYROT - if (op == (LJ_TARGET_UNIFYROT == 1 ? IR_BROR : IR_BROL)) { - op = LJ_TARGET_UNIFYROT == 1 ? IR_BROL : IR_BROR; - tsh = emitir(IRTI(IR_NEG), tsh, tsh); - } -#endif - J->base[0] = emitir(IRTI(op), tr, tsh); -} - -/* -- String library fast functions --------------------------------------- */ - -static void LJ_FASTCALL recff_string_len(jit_State *J, RecordFFData *rd) -{ - J->base[0] = emitir(IRTI(IR_FLOAD), lj_ir_tostr(J, J->base[0]), IRFL_STR_LEN); - UNUSED(rd); -} - -/* Handle string.byte (rd->data = 0) and string.sub (rd->data = 1). */ -static void LJ_FASTCALL recff_string_range(jit_State *J, RecordFFData *rd) -{ - TRef trstr = lj_ir_tostr(J, J->base[0]); - TRef trlen = emitir(IRTI(IR_FLOAD), trstr, IRFL_STR_LEN); - TRef tr0 = lj_ir_kint(J, 0); - TRef trstart, trend; - GCstr *str = argv2str(J, &rd->argv[0]); - int32_t start, end; - if (rd->data) { /* string.sub(str, start [,end]) */ - start = argv2int(J, &rd->argv[1]); - trstart = lj_opt_narrow_toint(J, J->base[1]); - trend = J->base[2]; - if (tref_isnil(trend)) { - trend = lj_ir_kint(J, -1); - end = -1; - } else { - trend = lj_opt_narrow_toint(J, trend); - end = argv2int(J, &rd->argv[2]); - } - } else { /* string.byte(str, [,start [,end]]) */ - if (tref_isnil(J->base[1])) { - start = 1; - trstart = lj_ir_kint(J, 1); - } else { - start = argv2int(J, &rd->argv[1]); - trstart = lj_opt_narrow_toint(J, J->base[1]); - } - if (J->base[1] && !tref_isnil(J->base[2])) { - trend = lj_opt_narrow_toint(J, J->base[2]); - end = argv2int(J, &rd->argv[2]); - } else { - trend = trstart; - end = start; - } - } - if (end < 0) { - emitir(IRTGI(IR_LT), trend, tr0); - trend = emitir(IRTI(IR_ADD), emitir(IRTI(IR_ADD), trlen, trend), - lj_ir_kint(J, 1)); - end = end+(int32_t)str->len+1; - } else if ((MSize)end <= str->len) { - emitir(IRTGI(IR_ULE), trend, trlen); - } else { - emitir(IRTGI(IR_GT), trend, trlen); - end = (int32_t)str->len; - trend = trlen; - } - if (start < 0) { - emitir(IRTGI(IR_LT), trstart, tr0); - trstart = emitir(IRTI(IR_ADD), trlen, trstart); - start = start+(int32_t)str->len; - emitir(start < 0 ? IRTGI(IR_LT) : IRTGI(IR_GE), trstart, tr0); - if (start < 0) { - trstart = tr0; - start = 0; - } - } else { - if (start == 0) { - emitir(IRTGI(IR_EQ), trstart, tr0); - trstart = tr0; - } else { - trstart = emitir(IRTI(IR_ADD), trstart, lj_ir_kint(J, -1)); - emitir(IRTGI(IR_GE), trstart, tr0); - start--; - } - } - if (rd->data) { /* Return string.sub result. */ - if (end - start >= 0) { - /* Also handle empty range here, to avoid extra traces. */ - TRef trptr, trslen = emitir(IRTI(IR_SUB), trend, trstart); - emitir(IRTGI(IR_GE), trslen, tr0); - trptr = emitir(IRT(IR_STRREF, IRT_P32), trstr, trstart); - J->base[0] = emitir(IRT(IR_SNEW, IRT_STR), trptr, trslen); - } else { /* Range underflow: return empty string. */ - emitir(IRTGI(IR_LT), trend, trstart); - J->base[0] = lj_ir_kstr(J, lj_str_new(J->L, strdata(str), 0)); - } - } else { /* Return string.byte result(s). */ - ptrdiff_t i, len = end - start; - if (len > 0) { - TRef trslen = emitir(IRTI(IR_SUB), trend, trstart); - emitir(IRTGI(IR_EQ), trslen, lj_ir_kint(J, (int32_t)len)); - if (J->baseslot + len > LJ_MAX_JSLOTS) - lj_trace_err_info(J, LJ_TRERR_STACKOV); - rd->nres = len; - for (i = 0; i < len; i++) { - TRef tmp = emitir(IRTI(IR_ADD), trstart, lj_ir_kint(J, (int32_t)i)); - tmp = emitir(IRT(IR_STRREF, IRT_P32), trstr, tmp); - J->base[i] = emitir(IRT(IR_XLOAD, IRT_U8), tmp, IRXLOAD_READONLY); - } - } else { /* Empty range or range underflow: return no results. */ - emitir(IRTGI(IR_LE), trend, trstart); - rd->nres = 0; - } - } -} - -/* -- Table library fast functions ---------------------------------------- */ - -static void LJ_FASTCALL recff_table_getn(jit_State *J, RecordFFData *rd) -{ - if (tref_istab(J->base[0])) - J->base[0] = lj_ir_call(J, IRCALL_lj_tab_len, J->base[0]); - /* else: Interpreter will throw. */ - UNUSED(rd); -} - -static void LJ_FASTCALL recff_table_remove(jit_State *J, RecordFFData *rd) -{ - TRef tab = J->base[0]; - rd->nres = 0; - if (tref_istab(tab)) { - if (tref_isnil(J->base[1])) { /* Simple pop: t[#t] = nil */ - TRef trlen = lj_ir_call(J, IRCALL_lj_tab_len, tab); - GCtab *t = tabV(&rd->argv[0]); - MSize len = lj_tab_len(t); - emitir(IRTGI(len ? IR_NE : IR_EQ), trlen, lj_ir_kint(J, 0)); - if (len) { - RecordIndex ix; - ix.tab = tab; - ix.key = trlen; - settabV(J->L, &ix.tabv, t); - setintV(&ix.keyv, len); - ix.idxchain = 0; - if (results_wanted(J) != 0) { /* Specialize load only if needed. */ - ix.val = 0; - J->base[0] = lj_record_idx(J, &ix); /* Load previous value. */ - rd->nres = 1; - /* Assumes ix.key/ix.tab is not modified for raw lj_record_idx(). */ - } - ix.val = TREF_NIL; - lj_record_idx(J, &ix); /* Remove value. */ - } - } else { /* Complex case: remove in the middle. */ - recff_nyiu(J); - } - } /* else: Interpreter will throw. */ -} - -static void LJ_FASTCALL recff_table_insert(jit_State *J, RecordFFData *rd) -{ - RecordIndex ix; - ix.tab = J->base[0]; - ix.val = J->base[1]; - rd->nres = 0; - if (tref_istab(ix.tab) && ix.val) { - if (!J->base[2]) { /* Simple push: t[#t+1] = v */ - TRef trlen = lj_ir_call(J, IRCALL_lj_tab_len, ix.tab); - GCtab *t = tabV(&rd->argv[0]); - ix.key = emitir(IRTI(IR_ADD), trlen, lj_ir_kint(J, 1)); - settabV(J->L, &ix.tabv, t); - setintV(&ix.keyv, lj_tab_len(t) + 1); - ix.idxchain = 0; - lj_record_idx(J, &ix); /* Set new value. */ - } else { /* Complex case: insert in the middle. */ - recff_nyiu(J); - } - } /* else: Interpreter will throw. */ -} - -/* -- I/O library fast functions ------------------------------------------ */ - -/* Get FILE* for I/O function. Any I/O error aborts recording, so there's -** no need to encode the alternate cases for any of the guards. -*/ -static TRef recff_io_fp(jit_State *J, TRef *udp, int32_t id) -{ - TRef tr, ud, fp; - if (id) { /* io.func() */ - tr = lj_ir_kptr(J, &J2G(J)->gcroot[id]); - ud = emitir(IRT(IR_XLOAD, IRT_UDATA), tr, 0); - } else { /* fp:method() */ - ud = J->base[0]; - if (!tref_isudata(ud)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - tr = emitir(IRT(IR_FLOAD, IRT_U8), ud, IRFL_UDATA_UDTYPE); - emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, UDTYPE_IO_FILE)); - } - *udp = ud; - fp = emitir(IRT(IR_FLOAD, IRT_PTR), ud, IRFL_UDATA_FILE); - emitir(IRTG(IR_NE, IRT_PTR), fp, lj_ir_knull(J, IRT_PTR)); - return fp; -} - -static void LJ_FASTCALL recff_io_write(jit_State *J, RecordFFData *rd) -{ - TRef ud, fp = recff_io_fp(J, &ud, rd->data); - TRef zero = lj_ir_kint(J, 0); - TRef one = lj_ir_kint(J, 1); - ptrdiff_t i = rd->data == 0 ? 1 : 0; - for (; J->base[i]; i++) { - TRef str = lj_ir_tostr(J, J->base[i]); - TRef buf = emitir(IRT(IR_STRREF, IRT_P32), str, zero); - TRef len = emitir(IRTI(IR_FLOAD), str, IRFL_STR_LEN); - if (tref_isk(len) && IR(tref_ref(len))->i == 1) { - TRef tr = emitir(IRT(IR_XLOAD, IRT_U8), buf, IRXLOAD_READONLY); - tr = lj_ir_call(J, IRCALL_fputc, tr, fp); - if (results_wanted(J) != 0) /* Check result only if not ignored. */ - emitir(IRTGI(IR_NE), tr, lj_ir_kint(J, -1)); - } else { - TRef tr = lj_ir_call(J, IRCALL_fwrite, buf, one, len, fp); - if (results_wanted(J) != 0) /* Check result only if not ignored. */ - emitir(IRTGI(IR_EQ), tr, len); - } - } - J->base[0] = LJ_52 ? ud : TREF_TRUE; -} - -static void LJ_FASTCALL recff_io_flush(jit_State *J, RecordFFData *rd) -{ - TRef ud, fp = recff_io_fp(J, &ud, rd->data); - TRef tr = lj_ir_call(J, IRCALL_fflush, fp); - if (results_wanted(J) != 0) /* Check result only if not ignored. */ - emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, 0)); - J->base[0] = TREF_TRUE; -} - -/* -- Record calls to fast functions -------------------------------------- */ - -#include "lj_recdef.h" - -static uint32_t recdef_lookup(GCfunc *fn) -{ - if (fn->c.ffid < sizeof(recff_idmap)/sizeof(recff_idmap[0])) - return recff_idmap[fn->c.ffid]; - else - return 0; -} - -/* Record entry to a fast function or C function. */ -void lj_ffrecord_func(jit_State *J) -{ - RecordFFData rd; - uint32_t m = recdef_lookup(J->fn); - rd.data = m & 0xff; - rd.nres = 1; /* Default is one result. */ - rd.argv = J->L->base; - J->base[J->maxslot] = 0; /* Mark end of arguments. */ - (recff_func[m >> 8])(J, &rd); /* Call recff_* handler. */ - if (rd.nres >= 0) { - if (J->postproc == LJ_POST_NONE) J->postproc = LJ_POST_FFRETRY; - lj_record_ret(J, 0, rd.nres); - } -} - -#undef IR -#undef emitir - -#endif diff --git a/deps/luajit/src/lj_ffrecord.h b/deps/luajit/src/lj_ffrecord.h deleted file mode 100644 index f858ca2..0000000 --- a/deps/luajit/src/lj_ffrecord.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -** Fast function call recorder. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_FFRECORD_H -#define _LJ_FFRECORD_H - -#include "lj_obj.h" -#include "lj_jit.h" - -#if LJ_HASJIT -/* Data used by handlers to record a fast function. */ -typedef struct RecordFFData { - TValue *argv; /* Runtime argument values. */ - ptrdiff_t nres; /* Number of returned results (defaults to 1). */ - uint32_t data; /* Per-ffid auxiliary data (opcode, literal etc.). */ -} RecordFFData; - -LJ_FUNC int32_t lj_ffrecord_select_mode(jit_State *J, TRef tr, TValue *tv); -LJ_FUNC void lj_ffrecord_func(jit_State *J); -#endif - -#endif diff --git a/deps/luajit/src/lj_frame.h b/deps/luajit/src/lj_frame.h deleted file mode 100644 index cd57be2..0000000 --- a/deps/luajit/src/lj_frame.h +++ /dev/null @@ -1,183 +0,0 @@ -/* -** Stack frames. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_FRAME_H -#define _LJ_FRAME_H - -#include "lj_obj.h" -#include "lj_bc.h" - -/* -- Lua stack frame ----------------------------------------------------- */ - -/* Frame type markers in callee function slot (callee base-1). */ -enum { - FRAME_LUA, FRAME_C, FRAME_CONT, FRAME_VARG, - FRAME_LUAP, FRAME_CP, FRAME_PCALL, FRAME_PCALLH -}; -#define FRAME_TYPE 3 -#define FRAME_P 4 -#define FRAME_TYPEP (FRAME_TYPE|FRAME_P) - -/* Macros to access and modify Lua frames. */ -#define frame_gc(f) (gcref((f)->fr.func)) -#define frame_func(f) (&frame_gc(f)->fn) -#define frame_ftsz(f) ((f)->fr.tp.ftsz) - -#define frame_type(f) (frame_ftsz(f) & FRAME_TYPE) -#define frame_typep(f) (frame_ftsz(f) & FRAME_TYPEP) -#define frame_islua(f) (frame_type(f) == FRAME_LUA) -#define frame_isc(f) (frame_type(f) == FRAME_C) -#define frame_iscont(f) (frame_typep(f) == FRAME_CONT) -#define frame_isvarg(f) (frame_typep(f) == FRAME_VARG) -#define frame_ispcall(f) ((frame_ftsz(f) & 6) == FRAME_PCALL) - -#define frame_pc(f) (mref((f)->fr.tp.pcr, const BCIns)) -#define frame_contpc(f) (frame_pc((f)-1)) -#if LJ_64 -#define frame_contf(f) \ - ((ASMFunction)(void *)((intptr_t)lj_vm_asm_begin + \ - (intptr_t)(int32_t)((f)-1)->u32.lo)) -#else -#define frame_contf(f) ((ASMFunction)gcrefp(((f)-1)->gcr, void)) -#endif -#define frame_delta(f) (frame_ftsz(f) >> 3) -#define frame_sized(f) (frame_ftsz(f) & ~FRAME_TYPEP) - -#define frame_prevl(f) ((f) - (1+bc_a(frame_pc(f)[-1]))) -#define frame_prevd(f) ((TValue *)((char *)(f) - frame_sized(f))) -#define frame_prev(f) (frame_islua(f)?frame_prevl(f):frame_prevd(f)) -/* Note: this macro does not skip over FRAME_VARG. */ - -#define setframe_pc(f, pc) (setmref((f)->fr.tp.pcr, (pc))) -#define setframe_ftsz(f, sz) ((f)->fr.tp.ftsz = (sz)) -#define setframe_gc(f, p) (setgcref((f)->fr.func, (p))) - -/* -- C stack frame ------------------------------------------------------- */ - -/* Macros to access and modify the C stack frame chain. */ - -/* These definitions must match with the arch-specific *.dasc files. */ -#if LJ_TARGET_X86 -#define CFRAME_OFS_ERRF (15*4) -#define CFRAME_OFS_NRES (14*4) -#define CFRAME_OFS_PREV (13*4) -#define CFRAME_OFS_L (12*4) -#define CFRAME_OFS_PC (6*4) -#define CFRAME_OFS_MULTRES (5*4) -#define CFRAME_SIZE (12*4) -#define CFRAME_SHIFT_MULTRES 0 -#elif LJ_TARGET_X64 -#if LJ_ABI_WIN -#define CFRAME_OFS_PREV (13*8) -#define CFRAME_OFS_PC (25*4) -#define CFRAME_OFS_L (24*4) -#define CFRAME_OFS_ERRF (23*4) -#define CFRAME_OFS_NRES (22*4) -#define CFRAME_OFS_MULTRES (21*4) -#define CFRAME_SIZE (10*8) -#define CFRAME_SIZE_JIT (CFRAME_SIZE + 9*16 + 4*8) -#define CFRAME_SHIFT_MULTRES 0 -#else -#define CFRAME_OFS_PREV (4*8) -#define CFRAME_OFS_PC (7*4) -#define CFRAME_OFS_L (6*4) -#define CFRAME_OFS_ERRF (5*4) -#define CFRAME_OFS_NRES (4*4) -#define CFRAME_OFS_MULTRES (1*4) -#define CFRAME_SIZE (10*8) -#define CFRAME_SIZE_JIT (CFRAME_SIZE + 16) -#define CFRAME_SHIFT_MULTRES 0 -#endif -#elif LJ_TARGET_ARM -#define CFRAME_OFS_ERRF 24 -#define CFRAME_OFS_NRES 20 -#define CFRAME_OFS_PREV 16 -#define CFRAME_OFS_L 12 -#define CFRAME_OFS_PC 8 -#define CFRAME_OFS_MULTRES 4 -#if LJ_ARCH_HASFPU -#define CFRAME_SIZE 128 -#else -#define CFRAME_SIZE 64 -#endif -#define CFRAME_SHIFT_MULTRES 3 -#elif LJ_TARGET_PPC -#if LJ_TARGET_XBOX360 -#define CFRAME_OFS_ERRF 424 -#define CFRAME_OFS_NRES 420 -#define CFRAME_OFS_PREV 400 -#define CFRAME_OFS_L 416 -#define CFRAME_OFS_PC 412 -#define CFRAME_OFS_MULTRES 408 -#define CFRAME_SIZE 384 -#define CFRAME_SHIFT_MULTRES 3 -#elif LJ_ARCH_PPC64 -#define CFRAME_OFS_ERRF 472 -#define CFRAME_OFS_NRES 468 -#define CFRAME_OFS_PREV 448 -#define CFRAME_OFS_L 464 -#define CFRAME_OFS_PC 460 -#define CFRAME_OFS_MULTRES 456 -#define CFRAME_SIZE 400 -#define CFRAME_SHIFT_MULTRES 3 -#else -#define CFRAME_OFS_ERRF 48 -#define CFRAME_OFS_NRES 44 -#define CFRAME_OFS_PREV 40 -#define CFRAME_OFS_L 36 -#define CFRAME_OFS_PC 32 -#define CFRAME_OFS_MULTRES 28 -#define CFRAME_SIZE 272 -#define CFRAME_SHIFT_MULTRES 3 -#endif -#elif LJ_TARGET_PPCSPE -#define CFRAME_OFS_ERRF 28 -#define CFRAME_OFS_NRES 24 -#define CFRAME_OFS_PREV 20 -#define CFRAME_OFS_L 16 -#define CFRAME_OFS_PC 12 -#define CFRAME_OFS_MULTRES 8 -#define CFRAME_SIZE 184 -#define CFRAME_SHIFT_MULTRES 3 -#elif LJ_TARGET_MIPS -#define CFRAME_OFS_ERRF 124 -#define CFRAME_OFS_NRES 120 -#define CFRAME_OFS_PREV 116 -#define CFRAME_OFS_L 112 -#define CFRAME_OFS_PC 20 -#define CFRAME_OFS_MULTRES 16 -#define CFRAME_SIZE 112 -#define CFRAME_SHIFT_MULTRES 3 -#else -#error "Missing CFRAME_* definitions for this architecture" -#endif - -#ifndef CFRAME_SIZE_JIT -#define CFRAME_SIZE_JIT CFRAME_SIZE -#endif - -#define CFRAME_RESUME 1 -#define CFRAME_UNWIND_FF 2 /* Only used in unwinder. */ -#define CFRAME_RAWMASK (~(intptr_t)(CFRAME_RESUME|CFRAME_UNWIND_FF)) - -#define cframe_errfunc(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_ERRF)) -#define cframe_nres(cf) (*(int32_t *)(((char *)(cf))+CFRAME_OFS_NRES)) -#define cframe_prev(cf) (*(void **)(((char *)(cf))+CFRAME_OFS_PREV)) -#define cframe_multres(cf) (*(uint32_t *)(((char *)(cf))+CFRAME_OFS_MULTRES)) -#define cframe_multres_n(cf) (cframe_multres((cf)) >> CFRAME_SHIFT_MULTRES) -#define cframe_L(cf) \ - (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th) -#define cframe_pc(cf) \ - (mref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), const BCIns)) -#define setcframe_L(cf, L) \ - (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_L), (L))) -#define setcframe_pc(cf, pc) \ - (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), (pc))) -#define cframe_canyield(cf) ((intptr_t)(cf) & CFRAME_RESUME) -#define cframe_unwind_ff(cf) ((intptr_t)(cf) & CFRAME_UNWIND_FF) -#define cframe_raw(cf) ((void *)((intptr_t)(cf) & CFRAME_RAWMASK)) -#define cframe_Lpc(L) cframe_pc(cframe_raw(L->cframe)) - -#endif diff --git a/deps/luajit/src/lj_func.c b/deps/luajit/src/lj_func.c deleted file mode 100644 index eb8a9db..0000000 --- a/deps/luajit/src/lj_func.c +++ /dev/null @@ -1,185 +0,0 @@ -/* -** Function handling (prototypes, functions and upvalues). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_func_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_func.h" -#include "lj_trace.h" -#include "lj_vm.h" - -/* -- Prototypes ---------------------------------------------------------- */ - -void LJ_FASTCALL lj_func_freeproto(global_State *g, GCproto *pt) -{ - lj_mem_free(g, pt, pt->sizept); -} - -/* -- Upvalues ------------------------------------------------------------ */ - -static void unlinkuv(GCupval *uv) -{ - lua_assert(uvprev(uvnext(uv)) == uv && uvnext(uvprev(uv)) == uv); - setgcrefr(uvnext(uv)->prev, uv->prev); - setgcrefr(uvprev(uv)->next, uv->next); -} - -/* Find existing open upvalue for a stack slot or create a new one. */ -static GCupval *func_finduv(lua_State *L, TValue *slot) -{ - global_State *g = G(L); - GCRef *pp = &L->openupval; - GCupval *p; - GCupval *uv; - /* Search the sorted list of open upvalues. */ - while (gcref(*pp) != NULL && uvval((p = gco2uv(gcref(*pp)))) >= slot) { - lua_assert(!p->closed && uvval(p) != &p->tv); - if (uvval(p) == slot) { /* Found open upvalue pointing to same slot? */ - if (isdead(g, obj2gco(p))) /* Resurrect it, if it's dead. */ - flipwhite(obj2gco(p)); - return p; - } - pp = &p->nextgc; - } - /* No matching upvalue found. Create a new one. */ - uv = lj_mem_newt(L, sizeof(GCupval), GCupval); - newwhite(g, uv); - uv->gct = ~LJ_TUPVAL; - uv->closed = 0; /* Still open. */ - setmref(uv->v, slot); /* Pointing to the stack slot. */ - /* NOBARRIER: The GCupval is new (marked white) and open. */ - setgcrefr(uv->nextgc, *pp); /* Insert into sorted list of open upvalues. */ - setgcref(*pp, obj2gco(uv)); - setgcref(uv->prev, obj2gco(&g->uvhead)); /* Insert into GC list, too. */ - setgcrefr(uv->next, g->uvhead.next); - setgcref(uvnext(uv)->prev, obj2gco(uv)); - setgcref(g->uvhead.next, obj2gco(uv)); - lua_assert(uvprev(uvnext(uv)) == uv && uvnext(uvprev(uv)) == uv); - return uv; -} - -/* Create an empty and closed upvalue. */ -static GCupval *func_emptyuv(lua_State *L) -{ - GCupval *uv = (GCupval *)lj_mem_newgco(L, sizeof(GCupval)); - uv->gct = ~LJ_TUPVAL; - uv->closed = 1; - setnilV(&uv->tv); - setmref(uv->v, &uv->tv); - return uv; -} - -/* Close all open upvalues pointing to some stack level or above. */ -void LJ_FASTCALL lj_func_closeuv(lua_State *L, TValue *level) -{ - GCupval *uv; - global_State *g = G(L); - while (gcref(L->openupval) != NULL && - uvval((uv = gco2uv(gcref(L->openupval)))) >= level) { - GCobj *o = obj2gco(uv); - lua_assert(!isblack(o) && !uv->closed && uvval(uv) != &uv->tv); - setgcrefr(L->openupval, uv->nextgc); /* No longer in open list. */ - if (isdead(g, o)) { - lj_func_freeuv(g, uv); - } else { - unlinkuv(uv); - lj_gc_closeuv(g, uv); - } - } -} - -void LJ_FASTCALL lj_func_freeuv(global_State *g, GCupval *uv) -{ - if (!uv->closed) - unlinkuv(uv); - lj_mem_freet(g, uv); -} - -/* -- Functions (closures) ------------------------------------------------ */ - -GCfunc *lj_func_newC(lua_State *L, MSize nelems, GCtab *env) -{ - GCfunc *fn = (GCfunc *)lj_mem_newgco(L, sizeCfunc(nelems)); - fn->c.gct = ~LJ_TFUNC; - fn->c.ffid = FF_C; - fn->c.nupvalues = (uint8_t)nelems; - /* NOBARRIER: The GCfunc is new (marked white). */ - setmref(fn->c.pc, &G(L)->bc_cfunc_ext); - setgcref(fn->c.env, obj2gco(env)); - return fn; -} - -static GCfunc *func_newL(lua_State *L, GCproto *pt, GCtab *env) -{ - uint32_t count; - GCfunc *fn = (GCfunc *)lj_mem_newgco(L, sizeLfunc((MSize)pt->sizeuv)); - fn->l.gct = ~LJ_TFUNC; - fn->l.ffid = FF_LUA; - fn->l.nupvalues = 0; /* Set to zero until upvalues are initialized. */ - /* NOBARRIER: Really a setgcref. But the GCfunc is new (marked white). */ - setmref(fn->l.pc, proto_bc(pt)); - setgcref(fn->l.env, obj2gco(env)); - /* Saturating 3 bit counter (0..7) for created closures. */ - count = (uint32_t)pt->flags + PROTO_CLCOUNT; - pt->flags = (uint8_t)(count - ((count >> PROTO_CLC_BITS) & PROTO_CLCOUNT)); - return fn; -} - -/* Create a new Lua function with empty upvalues. */ -GCfunc *lj_func_newL_empty(lua_State *L, GCproto *pt, GCtab *env) -{ - GCfunc *fn = func_newL(L, pt, env); - MSize i, nuv = pt->sizeuv; - /* NOBARRIER: The GCfunc is new (marked white). */ - for (i = 0; i < nuv; i++) { - GCupval *uv = func_emptyuv(L); - uv->dhash = (uint32_t)(uintptr_t)pt ^ ((uint32_t)proto_uv(pt)[i] << 24); - setgcref(fn->l.uvptr[i], obj2gco(uv)); - } - fn->l.nupvalues = (uint8_t)nuv; - return fn; -} - -/* Do a GC check and create a new Lua function with inherited upvalues. */ -GCfunc *lj_func_newL_gc(lua_State *L, GCproto *pt, GCfuncL *parent) -{ - GCfunc *fn; - GCRef *puv; - MSize i, nuv; - TValue *base; - lj_gc_check_fixtop(L); - fn = func_newL(L, pt, tabref(parent->env)); - /* NOBARRIER: The GCfunc is new (marked white). */ - puv = parent->uvptr; - nuv = pt->sizeuv; - base = L->base; - for (i = 0; i < nuv; i++) { - uint32_t v = proto_uv(pt)[i]; - GCupval *uv; - if ((v & PROTO_UV_LOCAL)) { - uv = func_finduv(L, base + (v & 0xff)); - uv->immutable = ((v / PROTO_UV_IMMUTABLE) & 1); - uv->dhash = (uint32_t)(uintptr_t)mref(parent->pc, char) ^ (v << 24); - } else { - uv = &gcref(puv[v])->uv; - } - setgcref(fn->l.uvptr[i], obj2gco(uv)); - } - fn->l.nupvalues = (uint8_t)nuv; - return fn; -} - -void LJ_FASTCALL lj_func_free(global_State *g, GCfunc *fn) -{ - MSize size = isluafunc(fn) ? sizeLfunc((MSize)fn->l.nupvalues) : - sizeCfunc((MSize)fn->c.nupvalues); - lj_mem_free(g, fn, size); -} - diff --git a/deps/luajit/src/lj_func.h b/deps/luajit/src/lj_func.h deleted file mode 100644 index a6e534e..0000000 --- a/deps/luajit/src/lj_func.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -** Function handling (prototypes, functions and upvalues). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_FUNC_H -#define _LJ_FUNC_H - -#include "lj_obj.h" - -/* Prototypes. */ -LJ_FUNC void LJ_FASTCALL lj_func_freeproto(global_State *g, GCproto *pt); - -/* Upvalues. */ -LJ_FUNCA void LJ_FASTCALL lj_func_closeuv(lua_State *L, TValue *level); -LJ_FUNC void LJ_FASTCALL lj_func_freeuv(global_State *g, GCupval *uv); - -/* Functions (closures). */ -LJ_FUNC GCfunc *lj_func_newC(lua_State *L, MSize nelems, GCtab *env); -LJ_FUNC GCfunc *lj_func_newL_empty(lua_State *L, GCproto *pt, GCtab *env); -LJ_FUNCA GCfunc *lj_func_newL_gc(lua_State *L, GCproto *pt, GCfuncL *parent); -LJ_FUNC void LJ_FASTCALL lj_func_free(global_State *g, GCfunc *c); - -#endif diff --git a/deps/luajit/src/lj_gc.c b/deps/luajit/src/lj_gc.c deleted file mode 100644 index b498aba..0000000 --- a/deps/luajit/src/lj_gc.c +++ /dev/null @@ -1,849 +0,0 @@ -/* -** Garbage collector. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_gc_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_func.h" -#include "lj_udata.h" -#include "lj_meta.h" -#include "lj_state.h" -#include "lj_frame.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#include "lj_cdata.h" -#endif -#include "lj_trace.h" -#include "lj_vm.h" - -#define GCSTEPSIZE 1024u -#define GCSWEEPMAX 40 -#define GCSWEEPCOST 10 -#define GCFINALIZECOST 100 - -/* Macros to set GCobj colors and flags. */ -#define white2gray(x) ((x)->gch.marked &= (uint8_t)~LJ_GC_WHITES) -#define gray2black(x) ((x)->gch.marked |= LJ_GC_BLACK) -#define isfinalized(u) ((u)->marked & LJ_GC_FINALIZED) - -/* -- Mark phase ---------------------------------------------------------- */ - -/* Mark a TValue (if needed). */ -#define gc_marktv(g, tv) \ - { lua_assert(!tvisgcv(tv) || (~itype(tv) == gcval(tv)->gch.gct)); \ - if (tviswhite(tv)) gc_mark(g, gcV(tv)); } - -/* Mark a GCobj (if needed). */ -#define gc_markobj(g, o) \ - { if (iswhite(obj2gco(o))) gc_mark(g, obj2gco(o)); } - -/* Mark a string object. */ -#define gc_mark_str(s) ((s)->marked &= (uint8_t)~LJ_GC_WHITES) - -/* Mark a white GCobj. */ -static void gc_mark(global_State *g, GCobj *o) -{ - int gct = o->gch.gct; - lua_assert(iswhite(o) && !isdead(g, o)); - white2gray(o); - if (LJ_UNLIKELY(gct == ~LJ_TUDATA)) { - GCtab *mt = tabref(gco2ud(o)->metatable); - gray2black(o); /* Userdata are never gray. */ - if (mt) gc_markobj(g, mt); - gc_markobj(g, tabref(gco2ud(o)->env)); - } else if (LJ_UNLIKELY(gct == ~LJ_TUPVAL)) { - GCupval *uv = gco2uv(o); - gc_marktv(g, uvval(uv)); - if (uv->closed) - gray2black(o); /* Closed upvalues are never gray. */ - } else if (gct != ~LJ_TSTR && gct != ~LJ_TCDATA) { - lua_assert(gct == ~LJ_TFUNC || gct == ~LJ_TTAB || - gct == ~LJ_TTHREAD || gct == ~LJ_TPROTO); - setgcrefr(o->gch.gclist, g->gc.gray); - setgcref(g->gc.gray, o); - } -} - -/* Mark GC roots. */ -static void gc_mark_gcroot(global_State *g) -{ - ptrdiff_t i; - for (i = 0; i < GCROOT_MAX; i++) - if (gcref(g->gcroot[i]) != NULL) - gc_markobj(g, gcref(g->gcroot[i])); -} - -/* Start a GC cycle and mark the root set. */ -static void gc_mark_start(global_State *g) -{ - setgcrefnull(g->gc.gray); - setgcrefnull(g->gc.grayagain); - setgcrefnull(g->gc.weak); - gc_markobj(g, mainthread(g)); - gc_markobj(g, tabref(mainthread(g)->env)); - gc_marktv(g, &g->registrytv); - gc_mark_gcroot(g); - g->gc.state = GCSpropagate; -} - -/* Mark open upvalues. */ -static void gc_mark_uv(global_State *g) -{ - GCupval *uv; - for (uv = uvnext(&g->uvhead); uv != &g->uvhead; uv = uvnext(uv)) { - lua_assert(uvprev(uvnext(uv)) == uv && uvnext(uvprev(uv)) == uv); - if (isgray(obj2gco(uv))) - gc_marktv(g, uvval(uv)); - } -} - -/* Mark userdata in mmudata list. */ -static void gc_mark_mmudata(global_State *g) -{ - GCobj *root = gcref(g->gc.mmudata); - GCobj *u = root; - if (u) { - do { - u = gcnext(u); - makewhite(g, u); /* Could be from previous GC. */ - gc_mark(g, u); - } while (u != root); - } -} - -/* Separate userdata objects to be finalized to mmudata list. */ -size_t lj_gc_separateudata(global_State *g, int all) -{ - size_t m = 0; - GCRef *p = &mainthread(g)->nextgc; - GCobj *o; - while ((o = gcref(*p)) != NULL) { - if (!(iswhite(o) || all) || isfinalized(gco2ud(o))) { - p = &o->gch.nextgc; /* Nothing to do. */ - } else if (!lj_meta_fastg(g, tabref(gco2ud(o)->metatable), MM_gc)) { - markfinalized(o); /* Done, as there's no __gc metamethod. */ - p = &o->gch.nextgc; - } else { /* Otherwise move userdata to be finalized to mmudata list. */ - m += sizeudata(gco2ud(o)); - markfinalized(o); - *p = o->gch.nextgc; - if (gcref(g->gc.mmudata)) { /* Link to end of mmudata list. */ - GCobj *root = gcref(g->gc.mmudata); - setgcrefr(o->gch.nextgc, root->gch.nextgc); - setgcref(root->gch.nextgc, o); - setgcref(g->gc.mmudata, o); - } else { /* Create circular list. */ - setgcref(o->gch.nextgc, o); - setgcref(g->gc.mmudata, o); - } - } - } - return m; -} - -/* -- Propagation phase --------------------------------------------------- */ - -/* Traverse a table. */ -static int gc_traverse_tab(global_State *g, GCtab *t) -{ - int weak = 0; - cTValue *mode; - GCtab *mt = tabref(t->metatable); - if (mt) - gc_markobj(g, mt); - mode = lj_meta_fastg(g, mt, MM_mode); - if (mode && tvisstr(mode)) { /* Valid __mode field? */ - const char *modestr = strVdata(mode); - int c; - while ((c = *modestr++)) { - if (c == 'k') weak |= LJ_GC_WEAKKEY; - else if (c == 'v') weak |= LJ_GC_WEAKVAL; - else if (c == 'K') weak = (int)(~0u & ~LJ_GC_WEAKVAL); - } - if (weak > 0) { /* Weak tables are cleared in the atomic phase. */ - t->marked = (uint8_t)((t->marked & ~LJ_GC_WEAK) | weak); - setgcrefr(t->gclist, g->gc.weak); - setgcref(g->gc.weak, obj2gco(t)); - } - } - if (weak == LJ_GC_WEAK) /* Nothing to mark if both keys/values are weak. */ - return 1; - if (!(weak & LJ_GC_WEAKVAL)) { /* Mark array part. */ - MSize i, asize = t->asize; - for (i = 0; i < asize; i++) - gc_marktv(g, arrayslot(t, i)); - } - if (t->hmask > 0) { /* Mark hash part. */ - Node *node = noderef(t->node); - MSize i, hmask = t->hmask; - for (i = 0; i <= hmask; i++) { - Node *n = &node[i]; - if (!tvisnil(&n->val)) { /* Mark non-empty slot. */ - lua_assert(!tvisnil(&n->key)); - if (!(weak & LJ_GC_WEAKKEY)) gc_marktv(g, &n->key); - if (!(weak & LJ_GC_WEAKVAL)) gc_marktv(g, &n->val); - } - } - } - return weak; -} - -/* Traverse a function. */ -static void gc_traverse_func(global_State *g, GCfunc *fn) -{ - gc_markobj(g, tabref(fn->c.env)); - if (isluafunc(fn)) { - uint32_t i; - lua_assert(fn->l.nupvalues <= funcproto(fn)->sizeuv); - gc_markobj(g, funcproto(fn)); - for (i = 0; i < fn->l.nupvalues; i++) /* Mark Lua function upvalues. */ - gc_markobj(g, &gcref(fn->l.uvptr[i])->uv); - } else { - uint32_t i; - for (i = 0; i < fn->c.nupvalues; i++) /* Mark C function upvalues. */ - gc_marktv(g, &fn->c.upvalue[i]); - } -} - -#if LJ_HASJIT -/* Mark a trace. */ -static void gc_marktrace(global_State *g, TraceNo traceno) -{ - GCobj *o = obj2gco(traceref(G2J(g), traceno)); - lua_assert(traceno != G2J(g)->cur.traceno); - if (iswhite(o)) { - white2gray(o); - setgcrefr(o->gch.gclist, g->gc.gray); - setgcref(g->gc.gray, o); - } -} - -/* Traverse a trace. */ -static void gc_traverse_trace(global_State *g, GCtrace *T) -{ - IRRef ref; - if (T->traceno == 0) return; - for (ref = T->nk; ref < REF_TRUE; ref++) { - IRIns *ir = &T->ir[ref]; - if (ir->o == IR_KGC) - gc_markobj(g, ir_kgc(ir)); - } - if (T->link) gc_marktrace(g, T->link); - if (T->nextroot) gc_marktrace(g, T->nextroot); - if (T->nextside) gc_marktrace(g, T->nextside); - gc_markobj(g, gcref(T->startpt)); -} - -/* The current trace is a GC root while not anchored in the prototype (yet). */ -#define gc_traverse_curtrace(g) gc_traverse_trace(g, &G2J(g)->cur) -#else -#define gc_traverse_curtrace(g) UNUSED(g) -#endif - -/* Traverse a prototype. */ -static void gc_traverse_proto(global_State *g, GCproto *pt) -{ - ptrdiff_t i; - gc_mark_str(proto_chunkname(pt)); - for (i = -(ptrdiff_t)pt->sizekgc; i < 0; i++) /* Mark collectable consts. */ - gc_markobj(g, proto_kgc(pt, i)); -#if LJ_HASJIT - if (pt->trace) gc_marktrace(g, pt->trace); -#endif -} - -/* Traverse the frame structure of a stack. */ -static MSize gc_traverse_frames(global_State *g, lua_State *th) -{ - TValue *frame, *top = th->top-1, *bot = tvref(th->stack); - /* Note: extra vararg frame not skipped, marks function twice (harmless). */ - for (frame = th->base-1; frame > bot; frame = frame_prev(frame)) { - GCfunc *fn = frame_func(frame); - TValue *ftop = frame; - if (isluafunc(fn)) ftop += funcproto(fn)->framesize; - if (ftop > top) top = ftop; - gc_markobj(g, fn); /* Need to mark hidden function (or L). */ - } - top++; /* Correct bias of -1 (frame == base-1). */ - if (top > tvref(th->maxstack)) top = tvref(th->maxstack); - return (MSize)(top - bot); /* Return minimum needed stack size. */ -} - -/* Traverse a thread object. */ -static void gc_traverse_thread(global_State *g, lua_State *th) -{ - TValue *o, *top = th->top; - for (o = tvref(th->stack)+1; o < top; o++) - gc_marktv(g, o); - if (g->gc.state == GCSatomic) { - top = tvref(th->stack) + th->stacksize; - for (; o < top; o++) /* Clear unmarked slots. */ - setnilV(o); - } - gc_markobj(g, tabref(th->env)); - lj_state_shrinkstack(th, gc_traverse_frames(g, th)); -} - -/* Propagate one gray object. Traverse it and turn it black. */ -static size_t propagatemark(global_State *g) -{ - GCobj *o = gcref(g->gc.gray); - int gct = o->gch.gct; - lua_assert(isgray(o)); - gray2black(o); - setgcrefr(g->gc.gray, o->gch.gclist); /* Remove from gray list. */ - if (LJ_LIKELY(gct == ~LJ_TTAB)) { - GCtab *t = gco2tab(o); - if (gc_traverse_tab(g, t) > 0) - black2gray(o); /* Keep weak tables gray. */ - return sizeof(GCtab) + sizeof(TValue) * t->asize + - sizeof(Node) * (t->hmask + 1); - } else if (LJ_LIKELY(gct == ~LJ_TFUNC)) { - GCfunc *fn = gco2func(o); - gc_traverse_func(g, fn); - return isluafunc(fn) ? sizeLfunc((MSize)fn->l.nupvalues) : - sizeCfunc((MSize)fn->c.nupvalues); - } else if (LJ_LIKELY(gct == ~LJ_TPROTO)) { - GCproto *pt = gco2pt(o); - gc_traverse_proto(g, pt); - return pt->sizept; - } else if (LJ_LIKELY(gct == ~LJ_TTHREAD)) { - lua_State *th = gco2th(o); - setgcrefr(th->gclist, g->gc.grayagain); - setgcref(g->gc.grayagain, o); - black2gray(o); /* Threads are never black. */ - gc_traverse_thread(g, th); - return sizeof(lua_State) + sizeof(TValue) * th->stacksize; - } else { -#if LJ_HASJIT - GCtrace *T = gco2trace(o); - gc_traverse_trace(g, T); - return ((sizeof(GCtrace)+7)&~7) + (T->nins-T->nk)*sizeof(IRIns) + - T->nsnap*sizeof(SnapShot) + T->nsnapmap*sizeof(SnapEntry); -#else - lua_assert(0); - return 0; -#endif - } -} - -/* Propagate all gray objects. */ -static size_t gc_propagate_gray(global_State *g) -{ - size_t m = 0; - while (gcref(g->gc.gray) != NULL) - m += propagatemark(g); - return m; -} - -/* -- Sweep phase --------------------------------------------------------- */ - -/* Try to shrink some common data structures. */ -static void gc_shrink(global_State *g, lua_State *L) -{ - if (g->strnum <= (g->strmask >> 2) && g->strmask > LJ_MIN_STRTAB*2-1) - lj_str_resize(L, g->strmask >> 1); /* Shrink string table. */ - if (g->tmpbuf.sz > LJ_MIN_SBUF*2) - lj_str_resizebuf(L, &g->tmpbuf, g->tmpbuf.sz >> 1); /* Shrink temp buf. */ -} - -/* Type of GC free functions. */ -typedef void (LJ_FASTCALL *GCFreeFunc)(global_State *g, GCobj *o); - -/* GC free functions for LJ_TSTR .. LJ_TUDATA. ORDER LJ_T */ -static const GCFreeFunc gc_freefunc[] = { - (GCFreeFunc)lj_str_free, - (GCFreeFunc)lj_func_freeuv, - (GCFreeFunc)lj_state_free, - (GCFreeFunc)lj_func_freeproto, - (GCFreeFunc)lj_func_free, -#if LJ_HASJIT - (GCFreeFunc)lj_trace_free, -#else - (GCFreeFunc)0, -#endif -#if LJ_HASFFI - (GCFreeFunc)lj_cdata_free, -#else - (GCFreeFunc)0, -#endif - (GCFreeFunc)lj_tab_free, - (GCFreeFunc)lj_udata_free -}; - -/* Full sweep of a GC list. */ -#define gc_fullsweep(g, p) gc_sweep(g, (p), LJ_MAX_MEM) - -/* Partial sweep of a GC list. */ -static GCRef *gc_sweep(global_State *g, GCRef *p, uint32_t lim) -{ - /* Mask with other white and LJ_GC_FIXED. Or LJ_GC_SFIXED on shutdown. */ - int ow = otherwhite(g); - GCobj *o; - while ((o = gcref(*p)) != NULL && lim-- > 0) { - if (o->gch.gct == ~LJ_TTHREAD) /* Need to sweep open upvalues, too. */ - gc_fullsweep(g, &gco2th(o)->openupval); - if (((o->gch.marked ^ LJ_GC_WHITES) & ow)) { /* Black or current white? */ - lua_assert(!isdead(g, o) || (o->gch.marked & LJ_GC_FIXED)); - makewhite(g, o); /* Value is alive, change to the current white. */ - p = &o->gch.nextgc; - } else { /* Otherwise value is dead, free it. */ - lua_assert(isdead(g, o) || ow == LJ_GC_SFIXED); - setgcrefr(*p, o->gch.nextgc); - if (o == gcref(g->gc.root)) - setgcrefr(g->gc.root, o->gch.nextgc); /* Adjust list anchor. */ - gc_freefunc[o->gch.gct - ~LJ_TSTR](g, o); - } - } - return p; -} - -/* Check whether we can clear a key or a value slot from a table. */ -static int gc_mayclear(cTValue *o, int val) -{ - if (tvisgcv(o)) { /* Only collectable objects can be weak references. */ - if (tvisstr(o)) { /* But strings cannot be used as weak references. */ - gc_mark_str(strV(o)); /* And need to be marked. */ - return 0; - } - if (iswhite(gcV(o))) - return 1; /* Object is about to be collected. */ - if (tvisudata(o) && val && isfinalized(udataV(o))) - return 1; /* Finalized userdata is dropped only from values. */ - } - return 0; /* Cannot clear. */ -} - -/* Clear collected entries from weak tables. */ -static void gc_clearweak(GCobj *o) -{ - while (o) { - GCtab *t = gco2tab(o); - lua_assert((t->marked & LJ_GC_WEAK)); - if ((t->marked & LJ_GC_WEAKVAL)) { - MSize i, asize = t->asize; - for (i = 0; i < asize; i++) { - /* Clear array slot when value is about to be collected. */ - TValue *tv = arrayslot(t, i); - if (gc_mayclear(tv, 1)) - setnilV(tv); - } - } - if (t->hmask > 0) { - Node *node = noderef(t->node); - MSize i, hmask = t->hmask; - for (i = 0; i <= hmask; i++) { - Node *n = &node[i]; - /* Clear hash slot when key or value is about to be collected. */ - if (!tvisnil(&n->val) && (gc_mayclear(&n->key, 0) || - gc_mayclear(&n->val, 1))) - setnilV(&n->val); - } - } - o = gcref(t->gclist); - } -} - -/* Call a userdata or cdata finalizer. */ -static void gc_call_finalizer(global_State *g, lua_State *L, - cTValue *mo, GCobj *o) -{ - /* Save and restore lots of state around the __gc callback. */ - uint8_t oldh = hook_save(g); - MSize oldt = g->gc.threshold; - int errcode; - TValue *top; - lj_trace_abort(g); - top = L->top; - L->top = top+2; - hook_entergc(g); /* Disable hooks and new traces during __gc. */ - g->gc.threshold = LJ_MAX_MEM; /* Prevent GC steps. */ - copyTV(L, top, mo); - setgcV(L, top+1, o, ~o->gch.gct); - errcode = lj_vm_pcall(L, top+1, 1+0, -1); /* Stack: |mo|o| -> | */ - hook_restore(g, oldh); - g->gc.threshold = oldt; /* Restore GC threshold. */ - if (errcode) - lj_err_throw(L, errcode); /* Propagate errors. */ -} - -/* Finalize one userdata or cdata object from the mmudata list. */ -static void gc_finalize(lua_State *L) -{ - global_State *g = G(L); - GCobj *o = gcnext(gcref(g->gc.mmudata)); - cTValue *mo; - lua_assert(gcref(g->jit_L) == NULL); /* Must not be called on trace. */ - /* Unchain from list of userdata to be finalized. */ - if (o == gcref(g->gc.mmudata)) - setgcrefnull(g->gc.mmudata); - else - setgcrefr(gcref(g->gc.mmudata)->gch.nextgc, o->gch.nextgc); -#if LJ_HASFFI - if (o->gch.gct == ~LJ_TCDATA) { - TValue tmp, *tv; - /* Add cdata back to the GC list and make it white. */ - setgcrefr(o->gch.nextgc, g->gc.root); - setgcref(g->gc.root, o); - makewhite(g, o); - o->gch.marked &= (uint8_t)~LJ_GC_CDATA_FIN; - /* Resolve finalizer. */ - setcdataV(L, &tmp, gco2cd(o)); - tv = lj_tab_set(L, ctype_ctsG(g)->finalizer, &tmp); - if (!tvisnil(tv)) { - g->gc.nocdatafin = 0; - copyTV(L, &tmp, tv); - setnilV(tv); /* Clear entry in finalizer table. */ - gc_call_finalizer(g, L, &tmp, o); - } - return; - } -#endif - /* Add userdata back to the main userdata list and make it white. */ - setgcrefr(o->gch.nextgc, mainthread(g)->nextgc); - setgcref(mainthread(g)->nextgc, o); - makewhite(g, o); - /* Resolve the __gc metamethod. */ - mo = lj_meta_fastg(g, tabref(gco2ud(o)->metatable), MM_gc); - if (mo) - gc_call_finalizer(g, L, mo, o); -} - -/* Finalize all userdata objects from mmudata list. */ -void lj_gc_finalize_udata(lua_State *L) -{ - while (gcref(G(L)->gc.mmudata) != NULL) - gc_finalize(L); -} - -#if LJ_HASFFI -/* Finalize all cdata objects from finalizer table. */ -void lj_gc_finalize_cdata(lua_State *L) -{ - global_State *g = G(L); - CTState *cts = ctype_ctsG(g); - if (cts) { - GCtab *t = cts->finalizer; - Node *node = noderef(t->node); - ptrdiff_t i; - setgcrefnull(t->metatable); /* Mark finalizer table as disabled. */ - for (i = (ptrdiff_t)t->hmask; i >= 0; i--) - if (!tvisnil(&node[i].val) && tviscdata(&node[i].key)) { - GCobj *o = gcV(&node[i].key); - TValue tmp; - makewhite(g, o); - o->gch.marked &= (uint8_t)~LJ_GC_CDATA_FIN; - copyTV(L, &tmp, &node[i].val); - setnilV(&node[i].val); - gc_call_finalizer(g, L, &tmp, o); - } - } -} -#endif - -/* Free all remaining GC objects. */ -void lj_gc_freeall(global_State *g) -{ - MSize i, strmask; - /* Free everything, except super-fixed objects (the main thread). */ - g->gc.currentwhite = LJ_GC_WHITES | LJ_GC_SFIXED; - gc_fullsweep(g, &g->gc.root); - strmask = g->strmask; - for (i = 0; i <= strmask; i++) /* Free all string hash chains. */ - gc_fullsweep(g, &g->strhash[i]); -} - -/* -- Collector ----------------------------------------------------------- */ - -/* Atomic part of the GC cycle, transitioning from mark to sweep phase. */ -static void atomic(global_State *g, lua_State *L) -{ - size_t udsize; - - gc_mark_uv(g); /* Need to remark open upvalues (the thread may be dead). */ - gc_propagate_gray(g); /* Propagate any left-overs. */ - - setgcrefr(g->gc.gray, g->gc.weak); /* Empty the list of weak tables. */ - setgcrefnull(g->gc.weak); - lua_assert(!iswhite(obj2gco(mainthread(g)))); - gc_markobj(g, L); /* Mark running thread. */ - gc_traverse_curtrace(g); /* Traverse current trace. */ - gc_mark_gcroot(g); /* Mark GC roots (again). */ - gc_propagate_gray(g); /* Propagate all of the above. */ - - setgcrefr(g->gc.gray, g->gc.grayagain); /* Empty the 2nd chance list. */ - setgcrefnull(g->gc.grayagain); - gc_propagate_gray(g); /* Propagate it. */ - - udsize = lj_gc_separateudata(g, 0); /* Separate userdata to be finalized. */ - gc_mark_mmudata(g); /* Mark them. */ - udsize += gc_propagate_gray(g); /* And propagate the marks. */ - - /* All marking done, clear weak tables. */ - gc_clearweak(gcref(g->gc.weak)); - - /* Prepare for sweep phase. */ - g->gc.currentwhite = (uint8_t)otherwhite(g); /* Flip current white. */ - g->strempty.marked = g->gc.currentwhite; - setmref(g->gc.sweep, &g->gc.root); - g->gc.estimate = g->gc.total - (MSize)udsize; /* Initial estimate. */ -} - -/* GC state machine. Returns a cost estimate for each step performed. */ -static size_t gc_onestep(lua_State *L) -{ - global_State *g = G(L); - switch (g->gc.state) { - case GCSpause: - gc_mark_start(g); /* Start a new GC cycle by marking all GC roots. */ - return 0; - case GCSpropagate: - if (gcref(g->gc.gray) != NULL) - return propagatemark(g); /* Propagate one gray object. */ - g->gc.state = GCSatomic; /* End of mark phase. */ - return 0; - case GCSatomic: - if (gcref(g->jit_L)) /* Don't run atomic phase on trace. */ - return LJ_MAX_MEM; - atomic(g, L); - g->gc.state = GCSsweepstring; /* Start of sweep phase. */ - g->gc.sweepstr = 0; - return 0; - case GCSsweepstring: { - MSize old = g->gc.total; - gc_fullsweep(g, &g->strhash[g->gc.sweepstr++]); /* Sweep one chain. */ - if (g->gc.sweepstr > g->strmask) - g->gc.state = GCSsweep; /* All string hash chains sweeped. */ - lua_assert(old >= g->gc.total); - g->gc.estimate -= old - g->gc.total; - return GCSWEEPCOST; - } - case GCSsweep: { - MSize old = g->gc.total; - setmref(g->gc.sweep, gc_sweep(g, mref(g->gc.sweep, GCRef), GCSWEEPMAX)); - lua_assert(old >= g->gc.total); - g->gc.estimate -= old - g->gc.total; - if (gcref(*mref(g->gc.sweep, GCRef)) == NULL) { - gc_shrink(g, L); - if (gcref(g->gc.mmudata)) { /* Need any finalizations? */ - g->gc.state = GCSfinalize; -#if LJ_HASFFI - g->gc.nocdatafin = 1; -#endif - } else { /* Otherwise skip this phase to help the JIT. */ - g->gc.state = GCSpause; /* End of GC cycle. */ - g->gc.debt = 0; - } - } - return GCSWEEPMAX*GCSWEEPCOST; - } - case GCSfinalize: - if (gcref(g->gc.mmudata) != NULL) { - if (gcref(g->jit_L)) /* Don't call finalizers on trace. */ - return LJ_MAX_MEM; - gc_finalize(L); /* Finalize one userdata object. */ - if (g->gc.estimate > GCFINALIZECOST) - g->gc.estimate -= GCFINALIZECOST; - return GCFINALIZECOST; - } -#if LJ_HASFFI - if (!g->gc.nocdatafin) lj_tab_rehash(L, ctype_ctsG(g)->finalizer); -#endif - g->gc.state = GCSpause; /* End of GC cycle. */ - g->gc.debt = 0; - return 0; - default: - lua_assert(0); - return 0; - } -} - -/* Perform a limited amount of incremental GC steps. */ -int LJ_FASTCALL lj_gc_step(lua_State *L) -{ - global_State *g = G(L); - MSize lim; - int32_t ostate = g->vmstate; - setvmstate(g, GC); - lim = (GCSTEPSIZE/100) * g->gc.stepmul; - if (lim == 0) - lim = LJ_MAX_MEM; - if (g->gc.total > g->gc.threshold) - g->gc.debt += g->gc.total - g->gc.threshold; - do { - lim -= (MSize)gc_onestep(L); - if (g->gc.state == GCSpause) { - g->gc.threshold = (g->gc.estimate/100) * g->gc.pause; - g->vmstate = ostate; - return 1; /* Finished a GC cycle. */ - } - } while ((int32_t)lim > 0); - if (g->gc.debt < GCSTEPSIZE) { - g->gc.threshold = g->gc.total + GCSTEPSIZE; - g->vmstate = ostate; - return -1; - } else { - g->gc.debt -= GCSTEPSIZE; - g->gc.threshold = g->gc.total; - g->vmstate = ostate; - return 0; - } -} - -/* Ditto, but fix the stack top first. */ -void LJ_FASTCALL lj_gc_step_fixtop(lua_State *L) -{ - if (curr_funcisL(L)) L->top = curr_topL(L); - lj_gc_step(L); -} - -#if LJ_HASJIT -/* Perform multiple GC steps. Called from JIT-compiled code. */ -int LJ_FASTCALL lj_gc_step_jit(global_State *g, MSize steps) -{ - lua_State *L = gco2th(gcref(g->jit_L)); - L->base = mref(G(L)->jit_base, TValue); - L->top = curr_topL(L); - while (steps-- > 0 && lj_gc_step(L) == 0) - ; - /* Return 1 to force a trace exit. */ - return (G(L)->gc.state == GCSatomic || G(L)->gc.state == GCSfinalize); -} -#endif - -/* Perform a full GC cycle. */ -void lj_gc_fullgc(lua_State *L) -{ - global_State *g = G(L); - int32_t ostate = g->vmstate; - setvmstate(g, GC); - if (g->gc.state <= GCSatomic) { /* Caught somewhere in the middle. */ - setmref(g->gc.sweep, &g->gc.root); /* Sweep everything (preserving it). */ - setgcrefnull(g->gc.gray); /* Reset lists from partial propagation. */ - setgcrefnull(g->gc.grayagain); - setgcrefnull(g->gc.weak); - g->gc.state = GCSsweepstring; /* Fast forward to the sweep phase. */ - g->gc.sweepstr = 0; - } - while (g->gc.state == GCSsweepstring || g->gc.state == GCSsweep) - gc_onestep(L); /* Finish sweep. */ - lua_assert(g->gc.state == GCSfinalize || g->gc.state == GCSpause); - /* Now perform a full GC. */ - g->gc.state = GCSpause; - do { gc_onestep(L); } while (g->gc.state != GCSpause); - g->gc.threshold = (g->gc.estimate/100) * g->gc.pause; - g->vmstate = ostate; -} - -/* -- Write barriers ------------------------------------------------------ */ - -/* Move the GC propagation frontier forward. */ -void lj_gc_barrierf(global_State *g, GCobj *o, GCobj *v) -{ - lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); - lua_assert(g->gc.state != GCSfinalize && g->gc.state != GCSpause); - lua_assert(o->gch.gct != ~LJ_TTAB); - /* Preserve invariant during propagation. Otherwise it doesn't matter. */ - if (g->gc.state == GCSpropagate || g->gc.state == GCSatomic) - gc_mark(g, v); /* Move frontier forward. */ - else - makewhite(g, o); /* Make it white to avoid the following barrier. */ -} - -/* Specialized barrier for closed upvalue. Pass &uv->tv. */ -void LJ_FASTCALL lj_gc_barrieruv(global_State *g, TValue *tv) -{ -#define TV2MARKED(x) \ - (*((uint8_t *)(x) - offsetof(GCupval, tv) + offsetof(GCupval, marked))) - if (g->gc.state == GCSpropagate || g->gc.state == GCSatomic) - gc_mark(g, gcV(tv)); - else - TV2MARKED(tv) = (TV2MARKED(tv) & (uint8_t)~LJ_GC_COLORS) | curwhite(g); -#undef TV2MARKED -} - -/* Close upvalue. Also needs a write barrier. */ -void lj_gc_closeuv(global_State *g, GCupval *uv) -{ - GCobj *o = obj2gco(uv); - /* Copy stack slot to upvalue itself and point to the copy. */ - copyTV(mainthread(g), &uv->tv, uvval(uv)); - setmref(uv->v, &uv->tv); - uv->closed = 1; - setgcrefr(o->gch.nextgc, g->gc.root); - setgcref(g->gc.root, o); - if (isgray(o)) { /* A closed upvalue is never gray, so fix this. */ - if (g->gc.state == GCSpropagate || g->gc.state == GCSatomic) { - gray2black(o); /* Make it black and preserve invariant. */ - if (tviswhite(&uv->tv)) - lj_gc_barrierf(g, o, gcV(&uv->tv)); - } else { - makewhite(g, o); /* Make it white, i.e. sweep the upvalue. */ - lua_assert(g->gc.state != GCSfinalize && g->gc.state != GCSpause); - } - } -} - -#if LJ_HASJIT -/* Mark a trace if it's saved during the propagation phase. */ -void lj_gc_barriertrace(global_State *g, uint32_t traceno) -{ - if (g->gc.state == GCSpropagate || g->gc.state == GCSatomic) - gc_marktrace(g, traceno); -} -#endif - -/* -- Allocator ----------------------------------------------------------- */ - -/* Call pluggable memory allocator to allocate or resize a fragment. */ -void *lj_mem_realloc(lua_State *L, void *p, MSize osz, MSize nsz) -{ - global_State *g = G(L); - lua_assert((osz == 0) == (p == NULL)); - p = g->allocf(g->allocd, p, osz, nsz); - if (p == NULL && nsz > 0) - lj_err_mem(L); - lua_assert((nsz == 0) == (p == NULL)); - lua_assert(checkptr32(p)); - g->gc.total = (g->gc.total - osz) + nsz; - return p; -} - -/* Allocate new GC object and link it to the root set. */ -void * LJ_FASTCALL lj_mem_newgco(lua_State *L, MSize size) -{ - global_State *g = G(L); - GCobj *o = (GCobj *)g->allocf(g->allocd, NULL, 0, size); - if (o == NULL) - lj_err_mem(L); - lua_assert(checkptr32(o)); - g->gc.total += size; - setgcrefr(o->gch.nextgc, g->gc.root); - setgcref(g->gc.root, o); - newwhite(g, o); - return o; -} - -/* Resize growable vector. */ -void *lj_mem_grow(lua_State *L, void *p, MSize *szp, MSize lim, MSize esz) -{ - MSize sz = (*szp) << 1; - if (sz < LJ_MIN_VECSZ) - sz = LJ_MIN_VECSZ; - if (sz > lim) - sz = lim; - p = lj_mem_realloc(L, p, (*szp)*esz, sz*esz); - *szp = sz; - return p; -} - diff --git a/deps/luajit/src/lj_gc.h b/deps/luajit/src/lj_gc.h deleted file mode 100644 index ba061bc..0000000 --- a/deps/luajit/src/lj_gc.h +++ /dev/null @@ -1,134 +0,0 @@ -/* -** Garbage collector. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_GC_H -#define _LJ_GC_H - -#include "lj_obj.h" - -/* Garbage collector states. Order matters. */ -enum { - GCSpause, GCSpropagate, GCSatomic, GCSsweepstring, GCSsweep, GCSfinalize -}; - -/* Bitmasks for marked field of GCobj. */ -#define LJ_GC_WHITE0 0x01 -#define LJ_GC_WHITE1 0x02 -#define LJ_GC_BLACK 0x04 -#define LJ_GC_FINALIZED 0x08 -#define LJ_GC_WEAKKEY 0x08 -#define LJ_GC_WEAKVAL 0x10 -#define LJ_GC_CDATA_FIN 0x10 -#define LJ_GC_FIXED 0x20 -#define LJ_GC_SFIXED 0x40 - -#define LJ_GC_WHITES (LJ_GC_WHITE0 | LJ_GC_WHITE1) -#define LJ_GC_COLORS (LJ_GC_WHITES | LJ_GC_BLACK) -#define LJ_GC_WEAK (LJ_GC_WEAKKEY | LJ_GC_WEAKVAL) - -/* Macros to test and set GCobj colors. */ -#define iswhite(x) ((x)->gch.marked & LJ_GC_WHITES) -#define isblack(x) ((x)->gch.marked & LJ_GC_BLACK) -#define isgray(x) (!((x)->gch.marked & (LJ_GC_BLACK|LJ_GC_WHITES))) -#define tviswhite(x) (tvisgcv(x) && iswhite(gcV(x))) -#define otherwhite(g) (g->gc.currentwhite ^ LJ_GC_WHITES) -#define isdead(g, v) ((v)->gch.marked & otherwhite(g) & LJ_GC_WHITES) - -#define curwhite(g) ((g)->gc.currentwhite & LJ_GC_WHITES) -#define newwhite(g, x) (obj2gco(x)->gch.marked = (uint8_t)curwhite(g)) -#define makewhite(g, x) \ - ((x)->gch.marked = ((x)->gch.marked & (uint8_t)~LJ_GC_COLORS) | curwhite(g)) -#define flipwhite(x) ((x)->gch.marked ^= LJ_GC_WHITES) -#define black2gray(x) ((x)->gch.marked &= (uint8_t)~LJ_GC_BLACK) -#define fixstring(s) ((s)->marked |= LJ_GC_FIXED) -#define markfinalized(x) ((x)->gch.marked |= LJ_GC_FINALIZED) - -/* Collector. */ -LJ_FUNC size_t lj_gc_separateudata(global_State *g, int all); -LJ_FUNC void lj_gc_finalize_udata(lua_State *L); -#if LJ_HASFFI -LJ_FUNC void lj_gc_finalize_cdata(lua_State *L); -#else -#define lj_gc_finalize_cdata(L) UNUSED(L) -#endif -LJ_FUNC void lj_gc_freeall(global_State *g); -LJ_FUNCA int LJ_FASTCALL lj_gc_step(lua_State *L); -LJ_FUNCA void LJ_FASTCALL lj_gc_step_fixtop(lua_State *L); -#if LJ_HASJIT -LJ_FUNC int LJ_FASTCALL lj_gc_step_jit(global_State *g, MSize steps); -#endif -LJ_FUNC void lj_gc_fullgc(lua_State *L); - -/* GC check: drive collector forward if the GC threshold has been reached. */ -#define lj_gc_check(L) \ - { if (LJ_UNLIKELY(G(L)->gc.total >= G(L)->gc.threshold)) \ - lj_gc_step(L); } -#define lj_gc_check_fixtop(L) \ - { if (LJ_UNLIKELY(G(L)->gc.total >= G(L)->gc.threshold)) \ - lj_gc_step_fixtop(L); } - -/* Write barriers. */ -LJ_FUNC void lj_gc_barrierf(global_State *g, GCobj *o, GCobj *v); -LJ_FUNCA void LJ_FASTCALL lj_gc_barrieruv(global_State *g, TValue *tv); -LJ_FUNC void lj_gc_closeuv(global_State *g, GCupval *uv); -#if LJ_HASJIT -LJ_FUNC void lj_gc_barriertrace(global_State *g, uint32_t traceno); -#endif - -/* Move the GC propagation frontier back for tables (make it gray again). */ -static LJ_AINLINE void lj_gc_barrierback(global_State *g, GCtab *t) -{ - GCobj *o = obj2gco(t); - lua_assert(isblack(o) && !isdead(g, o)); - lua_assert(g->gc.state != GCSfinalize && g->gc.state != GCSpause); - black2gray(o); - setgcrefr(t->gclist, g->gc.grayagain); - setgcref(g->gc.grayagain, o); -} - -/* Barrier for stores to table objects. TValue and GCobj variant. */ -#define lj_gc_anybarriert(L, t) \ - { if (LJ_UNLIKELY(isblack(obj2gco(t)))) lj_gc_barrierback(G(L), (t)); } -#define lj_gc_barriert(L, t, tv) \ - { if (tviswhite(tv) && isblack(obj2gco(t))) \ - lj_gc_barrierback(G(L), (t)); } -#define lj_gc_objbarriert(L, t, o) \ - { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) \ - lj_gc_barrierback(G(L), (t)); } - -/* Barrier for stores to any other object. TValue and GCobj variant. */ -#define lj_gc_barrier(L, p, tv) \ - { if (tviswhite(tv) && isblack(obj2gco(p))) \ - lj_gc_barrierf(G(L), obj2gco(p), gcV(tv)); } -#define lj_gc_objbarrier(L, p, o) \ - { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \ - lj_gc_barrierf(G(L), obj2gco(p), obj2gco(o)); } - -/* Allocator. */ -LJ_FUNC void *lj_mem_realloc(lua_State *L, void *p, MSize osz, MSize nsz); -LJ_FUNC void * LJ_FASTCALL lj_mem_newgco(lua_State *L, MSize size); -LJ_FUNC void *lj_mem_grow(lua_State *L, void *p, - MSize *szp, MSize lim, MSize esz); - -#define lj_mem_new(L, s) lj_mem_realloc(L, NULL, 0, (s)) - -static LJ_AINLINE void lj_mem_free(global_State *g, void *p, size_t osize) -{ - g->gc.total -= (MSize)osize; - g->allocf(g->allocd, p, osize, 0); -} - -#define lj_mem_newvec(L, n, t) ((t *)lj_mem_new(L, (MSize)((n)*sizeof(t)))) -#define lj_mem_reallocvec(L, p, on, n, t) \ - ((p) = (t *)lj_mem_realloc(L, p, (on)*sizeof(t), (MSize)((n)*sizeof(t)))) -#define lj_mem_growvec(L, p, n, m, t) \ - ((p) = (t *)lj_mem_grow(L, (p), &(n), (m), (MSize)sizeof(t))) -#define lj_mem_freevec(g, p, n, t) lj_mem_free(g, (p), (n)*sizeof(t)) - -#define lj_mem_newobj(L, t) ((t *)lj_mem_newgco(L, sizeof(t))) -#define lj_mem_newt(L, s, t) ((t *)lj_mem_new(L, (s))) -#define lj_mem_freet(g, p) lj_mem_free(g, (p), sizeof(*(p))) - -#endif diff --git a/deps/luajit/src/lj_gdbjit.c b/deps/luajit/src/lj_gdbjit.c deleted file mode 100644 index d3f3e61..0000000 --- a/deps/luajit/src/lj_gdbjit.c +++ /dev/null @@ -1,795 +0,0 @@ -/* -** Client for the GDB JIT API. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_gdbjit_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_frame.h" -#include "lj_jit.h" -#include "lj_dispatch.h" - -/* This is not compiled in by default. -** Enable with -DLUAJIT_USE_GDBJIT in the Makefile and recompile everything. -*/ -#ifdef LUAJIT_USE_GDBJIT - -/* The GDB JIT API allows JIT compilers to pass debug information about -** JIT-compiled code back to GDB. You need at least GDB 7.0 or higher -** to see it in action. -** -** This is a passive API, so it works even when not running under GDB -** or when attaching to an already running process. Alas, this implies -** enabling it always has a non-negligible overhead -- do not use in -** release mode! -** -** The LuaJIT GDB JIT client is rather minimal at the moment. It gives -** each trace a symbol name and adds a source location and frame unwind -** information. Obviously LuaJIT itself and any embedding C application -** should be compiled with debug symbols, too (see the Makefile). -** -** Traces are named TRACE_1, TRACE_2, ... these correspond to the trace -** numbers from -jv or -jdump. Use "break TRACE_1" or "tbreak TRACE_1" etc. -** to set breakpoints on specific traces (even ahead of their creation). -** -** The source location for each trace allows listing the corresponding -** source lines with the GDB command "list" (but only if the Lua source -** has been loaded from a file). Currently this is always set to the -** location where the trace has been started. -** -** Frame unwind information can be inspected with the GDB command -** "info frame". This also allows proper backtraces across JIT-compiled -** code with the GDB command "bt". -** -** You probably want to add the following settings to a .gdbinit file -** (or add them to ~/.gdbinit): -** set disassembly-flavor intel -** set breakpoint pending on -** -** Here's a sample GDB session: -** ------------------------------------------------------------------------ - -$ cat >x.lua -for outer=1,100 do - for inner=1,100 do end -end -^D - -$ luajit -jv x.lua -[TRACE 1 x.lua:2] -[TRACE 2 (1/3) x.lua:1 -> 1] - -$ gdb --quiet --args luajit x.lua -(gdb) tbreak TRACE_1 -Function "TRACE_1" not defined. -Temporary breakpoint 1 (TRACE_1) pending. -(gdb) run -Starting program: luajit x.lua - -Temporary breakpoint 1, TRACE_1 () at x.lua:2 -2 for inner=1,100 do end -(gdb) list -1 for outer=1,100 do -2 for inner=1,100 do end -3 end -(gdb) bt -#0 TRACE_1 () at x.lua:2 -#1 0x08053690 in lua_pcall [...] -[...] -#7 0x0806ff90 in main [...] -(gdb) disass TRACE_1 -Dump of assembler code for function TRACE_1: -0xf7fd9fba : mov DWORD PTR ds:0xf7e0e2a0,0x1 -0xf7fd9fc4 : movsd xmm7,QWORD PTR [edx+0x20] -[...] -0xf7fd9ff8 : jmp 0xf7fd2014 -End of assembler dump. -(gdb) tbreak TRACE_2 -Function "TRACE_2" not defined. -Temporary breakpoint 2 (TRACE_2) pending. -(gdb) cont -Continuing. - -Temporary breakpoint 2, TRACE_2 () at x.lua:1 -1 for outer=1,100 do -(gdb) info frame -Stack level 0, frame at 0xffffd7c0: - eip = 0xf7fd9f60 in TRACE_2 (x.lua:1); saved eip 0x8053690 - called by frame at 0xffffd7e0 - source language unknown. - Arglist at 0xffffd78c, args: - Locals at 0xffffd78c, Previous frame's sp is 0xffffd7c0 - Saved registers: - ebx at 0xffffd7ac, ebp at 0xffffd7b8, esi at 0xffffd7b0, edi at 0xffffd7b4, - eip at 0xffffd7bc -(gdb) - -** ------------------------------------------------------------------------ -*/ - -/* -- GDB JIT API --------------------------------------------------------- */ - -/* GDB JIT actions. */ -enum { - GDBJIT_NOACTION = 0, - GDBJIT_REGISTER, - GDBJIT_UNREGISTER -}; - -/* GDB JIT entry. */ -typedef struct GDBJITentry { - struct GDBJITentry *next_entry; - struct GDBJITentry *prev_entry; - const char *symfile_addr; - uint64_t symfile_size; -} GDBJITentry; - -/* GDB JIT descriptor. */ -typedef struct GDBJITdesc { - uint32_t version; - uint32_t action_flag; - GDBJITentry *relevant_entry; - GDBJITentry *first_entry; -} GDBJITdesc; - -GDBJITdesc __jit_debug_descriptor = { - 1, GDBJIT_NOACTION, NULL, NULL -}; - -/* GDB sets a breakpoint at this function. */ -void LJ_NOINLINE __jit_debug_register_code() -{ - __asm__ __volatile__(""); -}; - -/* -- In-memory ELF object definitions ------------------------------------ */ - -/* ELF definitions. */ -typedef struct ELFheader { - uint8_t emagic[4]; - uint8_t eclass; - uint8_t eendian; - uint8_t eversion; - uint8_t eosabi; - uint8_t eabiversion; - uint8_t epad[7]; - uint16_t type; - uint16_t machine; - uint32_t version; - uintptr_t entry; - uintptr_t phofs; - uintptr_t shofs; - uint32_t flags; - uint16_t ehsize; - uint16_t phentsize; - uint16_t phnum; - uint16_t shentsize; - uint16_t shnum; - uint16_t shstridx; -} ELFheader; - -typedef struct ELFsectheader { - uint32_t name; - uint32_t type; - uintptr_t flags; - uintptr_t addr; - uintptr_t ofs; - uintptr_t size; - uint32_t link; - uint32_t info; - uintptr_t align; - uintptr_t entsize; -} ELFsectheader; - -#define ELFSECT_IDX_ABS 0xfff1 - -enum { - ELFSECT_TYPE_PROGBITS = 1, - ELFSECT_TYPE_SYMTAB = 2, - ELFSECT_TYPE_STRTAB = 3, - ELFSECT_TYPE_NOBITS = 8 -}; - -#define ELFSECT_FLAGS_WRITE 1 -#define ELFSECT_FLAGS_ALLOC 2 -#define ELFSECT_FLAGS_EXEC 4 - -typedef struct ELFsymbol { -#if LJ_64 - uint32_t name; - uint8_t info; - uint8_t other; - uint16_t sectidx; - uintptr_t value; - uint64_t size; -#else - uint32_t name; - uintptr_t value; - uint32_t size; - uint8_t info; - uint8_t other; - uint16_t sectidx; -#endif -} ELFsymbol; - -enum { - ELFSYM_TYPE_FUNC = 2, - ELFSYM_TYPE_FILE = 4, - ELFSYM_BIND_LOCAL = 0 << 4, - ELFSYM_BIND_GLOBAL = 1 << 4, -}; - -/* DWARF definitions. */ -#define DW_CIE_VERSION 1 - -enum { - DW_CFA_nop = 0x0, - DW_CFA_offset_extended = 0x5, - DW_CFA_def_cfa = 0xc, - DW_CFA_def_cfa_offset = 0xe, - DW_CFA_offset_extended_sf = 0x11, - DW_CFA_advance_loc = 0x40, - DW_CFA_offset = 0x80 -}; - -enum { - DW_EH_PE_udata4 = 3, - DW_EH_PE_textrel = 0x20 -}; - -enum { - DW_TAG_compile_unit = 0x11 -}; - -enum { - DW_children_no = 0, - DW_children_yes = 1 -}; - -enum { - DW_AT_name = 0x03, - DW_AT_stmt_list = 0x10, - DW_AT_low_pc = 0x11, - DW_AT_high_pc = 0x12 -}; - -enum { - DW_FORM_addr = 0x01, - DW_FORM_data4 = 0x06, - DW_FORM_string = 0x08 -}; - -enum { - DW_LNS_extended_op = 0, - DW_LNS_copy = 1, - DW_LNS_advance_pc = 2, - DW_LNS_advance_line = 3 -}; - -enum { - DW_LNE_end_sequence = 1, - DW_LNE_set_address = 2 -}; - -enum { -#if LJ_TARGET_X86 - DW_REG_AX, DW_REG_CX, DW_REG_DX, DW_REG_BX, - DW_REG_SP, DW_REG_BP, DW_REG_SI, DW_REG_DI, - DW_REG_RA, -#elif LJ_TARGET_X64 - /* Yes, the order is strange, but correct. */ - DW_REG_AX, DW_REG_DX, DW_REG_CX, DW_REG_BX, - DW_REG_SI, DW_REG_DI, DW_REG_BP, DW_REG_SP, - DW_REG_8, DW_REG_9, DW_REG_10, DW_REG_11, - DW_REG_12, DW_REG_13, DW_REG_14, DW_REG_15, - DW_REG_RA, -#elif LJ_TARGET_ARM - DW_REG_SP = 13, - DW_REG_RA = 14, -#elif LJ_TARGET_PPC - DW_REG_SP = 1, - DW_REG_RA = 65, - DW_REG_CR = 70, -#elif LJ_TARGET_MIPS - DW_REG_SP = 29, - DW_REG_RA = 31, -#else -#error "Unsupported target architecture" -#endif -}; - -/* Minimal list of sections for the in-memory ELF object. */ -enum { - GDBJIT_SECT_NULL, - GDBJIT_SECT_text, - GDBJIT_SECT_eh_frame, - GDBJIT_SECT_shstrtab, - GDBJIT_SECT_strtab, - GDBJIT_SECT_symtab, - GDBJIT_SECT_debug_info, - GDBJIT_SECT_debug_abbrev, - GDBJIT_SECT_debug_line, - GDBJIT_SECT__MAX -}; - -enum { - GDBJIT_SYM_UNDEF, - GDBJIT_SYM_FILE, - GDBJIT_SYM_FUNC, - GDBJIT_SYM__MAX -}; - -/* In-memory ELF object. */ -typedef struct GDBJITobj { - ELFheader hdr; /* ELF header. */ - ELFsectheader sect[GDBJIT_SECT__MAX]; /* ELF sections. */ - ELFsymbol sym[GDBJIT_SYM__MAX]; /* ELF symbol table. */ - uint8_t space[4096]; /* Space for various section data. */ -} GDBJITobj; - -/* Combined structure for GDB JIT entry and ELF object. */ -typedef struct GDBJITentryobj { - GDBJITentry entry; - size_t sz; - GDBJITobj obj; -} GDBJITentryobj; - -/* Template for in-memory ELF header. */ -static const ELFheader elfhdr_template = { - .emagic = { 0x7f, 'E', 'L', 'F' }, - .eclass = LJ_64 ? 2 : 1, - .eendian = LJ_ENDIAN_SELECT(1, 2), - .eversion = 1, -#if LJ_TARGET_LINUX - .eosabi = 0, /* Nope, it's not 3. */ -#elif defined(__FreeBSD__) - .eosabi = 9, -#elif defined(__NetBSD__) - .eosabi = 2, -#elif defined(__OpenBSD__) - .eosabi = 12, -#elif defined(__DragonFly__) - .eosabi = 0, -#elif (defined(__sun__) && defined(__svr4__)) - .eosabi = 6, -#else - .eosabi = 0, -#endif - .eabiversion = 0, - .epad = { 0, 0, 0, 0, 0, 0, 0 }, - .type = 1, -#if LJ_TARGET_X86 - .machine = 3, -#elif LJ_TARGET_X64 - .machine = 62, -#elif LJ_TARGET_ARM - .machine = 40, -#elif LJ_TARGET_PPC - .machine = 20, -#elif LJ_TARGET_MIPS - .machine = 8, -#else -#error "Unsupported target architecture" -#endif - .version = 1, - .entry = 0, - .phofs = 0, - .shofs = offsetof(GDBJITobj, sect), - .flags = 0, - .ehsize = sizeof(ELFheader), - .phentsize = 0, - .phnum = 0, - .shentsize = sizeof(ELFsectheader), - .shnum = GDBJIT_SECT__MAX, - .shstridx = GDBJIT_SECT_shstrtab -}; - -/* -- In-memory ELF object generation ------------------------------------- */ - -/* Context for generating the ELF object for the GDB JIT API. */ -typedef struct GDBJITctx { - uint8_t *p; /* Pointer to next address in obj.space. */ - uint8_t *startp; /* Pointer to start address in obj.space. */ - GCtrace *T; /* Generate symbols for this trace. */ - uintptr_t mcaddr; /* Machine code address. */ - MSize szmcode; /* Size of machine code. */ - MSize spadjp; /* Stack adjustment for parent trace or interpreter. */ - MSize spadj; /* Stack adjustment for trace itself. */ - BCLine lineno; /* Starting line number. */ - const char *filename; /* Starting file name. */ - size_t objsize; /* Final size of ELF object. */ - GDBJITobj obj; /* In-memory ELF object. */ -} GDBJITctx; - -/* Add a zero-terminated string. */ -static uint32_t gdbjit_strz(GDBJITctx *ctx, const char *str) -{ - uint8_t *p = ctx->p; - uint32_t ofs = (uint32_t)(p - ctx->startp); - do { - *p++ = (uint8_t)*str; - } while (*str++); - ctx->p = p; - return ofs; -} - -/* Append a decimal number. */ -static void gdbjit_catnum(GDBJITctx *ctx, uint32_t n) -{ - if (n >= 10) { uint32_t m = n / 10; n = n % 10; gdbjit_catnum(ctx, m); } - *ctx->p++ = '0' + n; -} - -/* Add a ULEB128 value. */ -static void gdbjit_uleb128(GDBJITctx *ctx, uint32_t v) -{ - uint8_t *p = ctx->p; - for (; v >= 0x80; v >>= 7) - *p++ = (uint8_t)((v & 0x7f) | 0x80); - *p++ = (uint8_t)v; - ctx->p = p; -} - -/* Add a SLEB128 value. */ -static void gdbjit_sleb128(GDBJITctx *ctx, int32_t v) -{ - uint8_t *p = ctx->p; - for (; (uint32_t)(v+0x40) >= 0x80; v >>= 7) - *p++ = (uint8_t)((v & 0x7f) | 0x80); - *p++ = (uint8_t)(v & 0x7f); - ctx->p = p; -} - -/* Shortcuts to generate DWARF structures. */ -#define DB(x) (*p++ = (x)) -#define DI8(x) (*(int8_t *)p = (x), p++) -#define DU16(x) (*(uint16_t *)p = (x), p += 2) -#define DU32(x) (*(uint32_t *)p = (x), p += 4) -#define DADDR(x) (*(uintptr_t *)p = (x), p += sizeof(uintptr_t)) -#define DUV(x) (ctx->p = p, gdbjit_uleb128(ctx, (x)), p = ctx->p) -#define DSV(x) (ctx->p = p, gdbjit_sleb128(ctx, (x)), p = ctx->p) -#define DSTR(str) (ctx->p = p, gdbjit_strz(ctx, (str)), p = ctx->p) -#define DALIGNNOP(s) while ((uintptr_t)p & ((s)-1)) *p++ = DW_CFA_nop -#define DSECT(name, stmt) \ - { uint32_t *szp_##name = (uint32_t *)p; p += 4; stmt \ - *szp_##name = (uint32_t)((p-(uint8_t *)szp_##name)-4); } \ - -/* Initialize ELF section headers. */ -static void LJ_FASTCALL gdbjit_secthdr(GDBJITctx *ctx) -{ - ELFsectheader *sect; - - *ctx->p++ = '\0'; /* Empty string at start of string table. */ - -#define SECTDEF(id, tp, al) \ - sect = &ctx->obj.sect[GDBJIT_SECT_##id]; \ - sect->name = gdbjit_strz(ctx, "." #id); \ - sect->type = ELFSECT_TYPE_##tp; \ - sect->align = (al) - - SECTDEF(text, NOBITS, 16); - sect->flags = ELFSECT_FLAGS_ALLOC|ELFSECT_FLAGS_EXEC; - sect->addr = ctx->mcaddr; - sect->ofs = 0; - sect->size = ctx->szmcode; - - SECTDEF(eh_frame, PROGBITS, sizeof(uintptr_t)); - sect->flags = ELFSECT_FLAGS_ALLOC; - - SECTDEF(shstrtab, STRTAB, 1); - SECTDEF(strtab, STRTAB, 1); - - SECTDEF(symtab, SYMTAB, sizeof(uintptr_t)); - sect->ofs = offsetof(GDBJITobj, sym); - sect->size = sizeof(ctx->obj.sym); - sect->link = GDBJIT_SECT_strtab; - sect->entsize = sizeof(ELFsymbol); - sect->info = GDBJIT_SYM_FUNC; - - SECTDEF(debug_info, PROGBITS, 1); - SECTDEF(debug_abbrev, PROGBITS, 1); - SECTDEF(debug_line, PROGBITS, 1); - -#undef SECTDEF -} - -/* Initialize symbol table. */ -static void LJ_FASTCALL gdbjit_symtab(GDBJITctx *ctx) -{ - ELFsymbol *sym; - - *ctx->p++ = '\0'; /* Empty string at start of string table. */ - - sym = &ctx->obj.sym[GDBJIT_SYM_FILE]; - sym->name = gdbjit_strz(ctx, "JIT mcode"); - sym->sectidx = ELFSECT_IDX_ABS; - sym->info = ELFSYM_TYPE_FILE|ELFSYM_BIND_LOCAL; - - sym = &ctx->obj.sym[GDBJIT_SYM_FUNC]; - sym->name = gdbjit_strz(ctx, "TRACE_"); ctx->p--; - gdbjit_catnum(ctx, ctx->T->traceno); *ctx->p++ = '\0'; - sym->sectidx = GDBJIT_SECT_text; - sym->value = 0; - sym->size = ctx->szmcode; - sym->info = ELFSYM_TYPE_FUNC|ELFSYM_BIND_GLOBAL; -} - -/* Initialize .eh_frame section. */ -static void LJ_FASTCALL gdbjit_ehframe(GDBJITctx *ctx) -{ - uint8_t *p = ctx->p; - uint8_t *framep = p; - - /* Emit DWARF EH CIE. */ - DSECT(CIE, - DU32(0); /* Offset to CIE itself. */ - DB(DW_CIE_VERSION); - DSTR("zR"); /* Augmentation. */ - DUV(1); /* Code alignment factor. */ - DSV(-(int32_t)sizeof(uintptr_t)); /* Data alignment factor. */ - DB(DW_REG_RA); /* Return address register. */ - DB(1); DB(DW_EH_PE_textrel|DW_EH_PE_udata4); /* Augmentation data. */ - DB(DW_CFA_def_cfa); DUV(DW_REG_SP); DUV(sizeof(uintptr_t)); -#if LJ_TARGET_PPC - DB(DW_CFA_offset_extended_sf); DB(DW_REG_RA); DSV(-1); -#else - DB(DW_CFA_offset|DW_REG_RA); DUV(1); -#endif - DALIGNNOP(sizeof(uintptr_t)); - ) - - /* Emit DWARF EH FDE. */ - DSECT(FDE, - DU32((uint32_t)(p-framep)); /* Offset to CIE. */ - DU32(0); /* Machine code offset relative to .text. */ - DU32(ctx->szmcode); /* Machine code length. */ - DB(0); /* Augmentation data. */ - /* Registers saved in CFRAME. */ -#if LJ_TARGET_X86 - DB(DW_CFA_offset|DW_REG_BP); DUV(2); - DB(DW_CFA_offset|DW_REG_DI); DUV(3); - DB(DW_CFA_offset|DW_REG_SI); DUV(4); - DB(DW_CFA_offset|DW_REG_BX); DUV(5); -#elif LJ_TARGET_X64 - DB(DW_CFA_offset|DW_REG_BP); DUV(2); - DB(DW_CFA_offset|DW_REG_BX); DUV(3); - DB(DW_CFA_offset|DW_REG_15); DUV(4); - DB(DW_CFA_offset|DW_REG_14); DUV(5); - /* Extra registers saved for JIT-compiled code. */ - DB(DW_CFA_offset|DW_REG_13); DUV(9); - DB(DW_CFA_offset|DW_REG_12); DUV(10); -#elif LJ_TARGET_ARM - { - int i; - for (i = 11; i >= 4; i--) { DB(DW_CFA_offset|i); DUV(2+(11-i)); } - } -#elif LJ_TARGET_PPC - { - int i; - DB(DW_CFA_offset_extended); DB(DW_REG_CR); DUV(55); - for (i = 14; i <= 31; i++) { - DB(DW_CFA_offset|i); DUV(37+(31-i)); - DB(DW_CFA_offset|32|i); DUV(2+2*(31-i)); - } - } -#elif LJ_TARGET_MIPS - { - int i; - DB(DW_CFA_offset|30); DUV(2); - for (i = 23; i >= 16; i--) { DB(DW_CFA_offset|i); DUV(26-i); } - for (i = 30; i >= 20; i -= 2) { DB(DW_CFA_offset|32|i); DUV(42-i); } - } -#else -#error "Unsupported target architecture" -#endif - if (ctx->spadjp != ctx->spadj) { /* Parent/interpreter stack frame size. */ - DB(DW_CFA_def_cfa_offset); DUV(ctx->spadjp); - DB(DW_CFA_advance_loc|1); /* Only an approximation. */ - } - DB(DW_CFA_def_cfa_offset); DUV(ctx->spadj); /* Trace stack frame size. */ - DALIGNNOP(sizeof(uintptr_t)); - ) - - ctx->p = p; -} - -/* Initialize .debug_info section. */ -static void LJ_FASTCALL gdbjit_debuginfo(GDBJITctx *ctx) -{ - uint8_t *p = ctx->p; - - DSECT(info, - DU16(2); /* DWARF version. */ - DU32(0); /* Abbrev offset. */ - DB(sizeof(uintptr_t)); /* Pointer size. */ - - DUV(1); /* Abbrev #1: DW_TAG_compile_unit. */ - DSTR(ctx->filename); /* DW_AT_name. */ - DADDR(ctx->mcaddr); /* DW_AT_low_pc. */ - DADDR(ctx->mcaddr + ctx->szmcode); /* DW_AT_high_pc. */ - DU32(0); /* DW_AT_stmt_list. */ - ) - - ctx->p = p; -} - -/* Initialize .debug_abbrev section. */ -static void LJ_FASTCALL gdbjit_debugabbrev(GDBJITctx *ctx) -{ - uint8_t *p = ctx->p; - - /* Abbrev #1: DW_TAG_compile_unit. */ - DUV(1); DUV(DW_TAG_compile_unit); - DB(DW_children_no); - DUV(DW_AT_name); DUV(DW_FORM_string); - DUV(DW_AT_low_pc); DUV(DW_FORM_addr); - DUV(DW_AT_high_pc); DUV(DW_FORM_addr); - DUV(DW_AT_stmt_list); DUV(DW_FORM_data4); - DB(0); DB(0); - - ctx->p = p; -} - -#define DLNE(op, s) (DB(DW_LNS_extended_op), DUV(1+(s)), DB((op))) - -/* Initialize .debug_line section. */ -static void LJ_FASTCALL gdbjit_debugline(GDBJITctx *ctx) -{ - uint8_t *p = ctx->p; - - DSECT(line, - DU16(2); /* DWARF version. */ - DSECT(header, - DB(1); /* Minimum instruction length. */ - DB(1); /* is_stmt. */ - DI8(0); /* Line base for special opcodes. */ - DB(2); /* Line range for special opcodes. */ - DB(3+1); /* Opcode base at DW_LNS_advance_line+1. */ - DB(0); DB(1); DB(1); /* Standard opcode lengths. */ - /* Directory table. */ - DB(0); - /* File name table. */ - DSTR(ctx->filename); DUV(0); DUV(0); DUV(0); - DB(0); - ) - - DLNE(DW_LNE_set_address, sizeof(uintptr_t)); DADDR(ctx->mcaddr); - if (ctx->lineno) { - DB(DW_LNS_advance_line); DSV(ctx->lineno-1); - } - DB(DW_LNS_copy); - DB(DW_LNS_advance_pc); DUV(ctx->szmcode); - DLNE(DW_LNE_end_sequence, 0); - ) - - ctx->p = p; -} - -#undef DLNE - -/* Undef shortcuts. */ -#undef DB -#undef DI8 -#undef DU16 -#undef DU32 -#undef DADDR -#undef DUV -#undef DSV -#undef DSTR -#undef DALIGNNOP -#undef DSECT - -/* Type of a section initializer callback. */ -typedef void (LJ_FASTCALL *GDBJITinitf)(GDBJITctx *ctx); - -/* Call section initializer and set the section offset and size. */ -static void gdbjit_initsect(GDBJITctx *ctx, int sect, GDBJITinitf initf) -{ - ctx->startp = ctx->p; - ctx->obj.sect[sect].ofs = (uintptr_t)((char *)ctx->p - (char *)&ctx->obj); - initf(ctx); - ctx->obj.sect[sect].size = (uintptr_t)(ctx->p - ctx->startp); -} - -#define SECTALIGN(p, a) \ - ((p) = (uint8_t *)(((uintptr_t)(p) + ((a)-1)) & ~(uintptr_t)((a)-1))) - -/* Build in-memory ELF object. */ -static void gdbjit_buildobj(GDBJITctx *ctx) -{ - GDBJITobj *obj = &ctx->obj; - /* Fill in ELF header and clear structures. */ - memcpy(&obj->hdr, &elfhdr_template, sizeof(ELFheader)); - memset(&obj->sect, 0, sizeof(ELFsectheader)*GDBJIT_SECT__MAX); - memset(&obj->sym, 0, sizeof(ELFsymbol)*GDBJIT_SYM__MAX); - /* Initialize sections. */ - ctx->p = obj->space; - gdbjit_initsect(ctx, GDBJIT_SECT_shstrtab, gdbjit_secthdr); - gdbjit_initsect(ctx, GDBJIT_SECT_strtab, gdbjit_symtab); - gdbjit_initsect(ctx, GDBJIT_SECT_debug_info, gdbjit_debuginfo); - gdbjit_initsect(ctx, GDBJIT_SECT_debug_abbrev, gdbjit_debugabbrev); - gdbjit_initsect(ctx, GDBJIT_SECT_debug_line, gdbjit_debugline); - SECTALIGN(ctx->p, sizeof(uintptr_t)); - gdbjit_initsect(ctx, GDBJIT_SECT_eh_frame, gdbjit_ehframe); - ctx->objsize = (size_t)((char *)ctx->p - (char *)obj); - lua_assert(ctx->objsize < sizeof(GDBJITobj)); -} - -#undef SECTALIGN - -/* -- Interface to GDB JIT API -------------------------------------------- */ - -/* Add new entry to GDB JIT symbol chain. */ -static void gdbjit_newentry(lua_State *L, GDBJITctx *ctx) -{ - /* Allocate memory for GDB JIT entry and ELF object. */ - MSize sz = (MSize)(sizeof(GDBJITentryobj) - sizeof(GDBJITobj) + ctx->objsize); - GDBJITentryobj *eo = lj_mem_newt(L, sz, GDBJITentryobj); - memcpy(&eo->obj, &ctx->obj, ctx->objsize); /* Copy ELF object. */ - eo->sz = sz; - ctx->T->gdbjit_entry = (void *)eo; - /* Link new entry to chain and register it. */ - eo->entry.prev_entry = NULL; - eo->entry.next_entry = __jit_debug_descriptor.first_entry; - if (eo->entry.next_entry) - eo->entry.next_entry->prev_entry = &eo->entry; - eo->entry.symfile_addr = (const char *)&eo->obj; - eo->entry.symfile_size = ctx->objsize; - __jit_debug_descriptor.first_entry = &eo->entry; - __jit_debug_descriptor.relevant_entry = &eo->entry; - __jit_debug_descriptor.action_flag = GDBJIT_REGISTER; - __jit_debug_register_code(); -} - -/* Add debug info for newly compiled trace and notify GDB. */ -void lj_gdbjit_addtrace(jit_State *J, GCtrace *T) -{ - GDBJITctx ctx; - GCproto *pt = &gcref(T->startpt)->pt; - TraceNo parent = T->ir[REF_BASE].op1; - const BCIns *startpc = mref(T->startpc, const BCIns); - ctx.T = T; - ctx.mcaddr = (uintptr_t)T->mcode; - ctx.szmcode = T->szmcode; - ctx.spadjp = CFRAME_SIZE_JIT + - (MSize)(parent ? traceref(J, parent)->spadjust : 0); - ctx.spadj = CFRAME_SIZE_JIT + T->spadjust; - lua_assert(startpc >= proto_bc(pt) && startpc < proto_bc(pt) + pt->sizebc); - ctx.lineno = lj_debug_line(pt, proto_bcpos(pt, startpc)); - ctx.filename = proto_chunknamestr(pt); - if (*ctx.filename == '@' || *ctx.filename == '=') - ctx.filename++; - else - ctx.filename = "(string)"; - gdbjit_buildobj(&ctx); - gdbjit_newentry(J->L, &ctx); -} - -/* Delete debug info for trace and notify GDB. */ -void lj_gdbjit_deltrace(jit_State *J, GCtrace *T) -{ - GDBJITentryobj *eo = (GDBJITentryobj *)T->gdbjit_entry; - if (eo) { - if (eo->entry.prev_entry) - eo->entry.prev_entry->next_entry = eo->entry.next_entry; - else - __jit_debug_descriptor.first_entry = eo->entry.next_entry; - if (eo->entry.next_entry) - eo->entry.next_entry->prev_entry = eo->entry.prev_entry; - __jit_debug_descriptor.relevant_entry = &eo->entry; - __jit_debug_descriptor.action_flag = GDBJIT_UNREGISTER; - __jit_debug_register_code(); - lj_mem_free(J2G(J), eo, eo->sz); - } -} - -#endif -#endif diff --git a/deps/luajit/src/lj_gdbjit.h b/deps/luajit/src/lj_gdbjit.h deleted file mode 100644 index 49c5863..0000000 --- a/deps/luajit/src/lj_gdbjit.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -** Client for the GDB JIT API. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_GDBJIT_H -#define _LJ_GDBJIT_H - -#include "lj_obj.h" -#include "lj_jit.h" - -#if LJ_HASJIT && defined(LUAJIT_USE_GDBJIT) - -LJ_FUNC void lj_gdbjit_addtrace(jit_State *J, GCtrace *T); -LJ_FUNC void lj_gdbjit_deltrace(jit_State *J, GCtrace *T); - -#else -#define lj_gdbjit_addtrace(J, T) UNUSED(T) -#define lj_gdbjit_deltrace(J, T) UNUSED(T) -#endif - -#endif diff --git a/deps/luajit/src/lj_ir.c b/deps/luajit/src/lj_ir.c deleted file mode 100644 index 439f3fc..0000000 --- a/deps/luajit/src/lj_ir.c +++ /dev/null @@ -1,501 +0,0 @@ -/* -** SSA IR (Intermediate Representation) emitter. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_ir_c -#define LUA_CORE - -/* For pointers to libc/libm functions. */ -#include -#include - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_gc.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#include "lj_cdata.h" -#include "lj_carith.h" -#endif -#include "lj_vm.h" -#include "lj_strscan.h" -#include "lj_lib.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) -#define fins (&J->fold.ins) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -/* -- IR tables ----------------------------------------------------------- */ - -/* IR instruction modes. */ -LJ_DATADEF const uint8_t lj_ir_mode[IR__MAX+1] = { -IRDEF(IRMODE) - 0 -}; - -/* IR type sizes. */ -LJ_DATADEF const uint8_t lj_ir_type_size[IRT__MAX+1] = { -#define IRTSIZE(name, size) size, -IRTDEF(IRTSIZE) -#undef IRTSIZE - 0 -}; - -/* C call info for CALL* instructions. */ -LJ_DATADEF const CCallInfo lj_ir_callinfo[] = { -#define IRCALLCI(cond, name, nargs, kind, type, flags) \ - { (ASMFunction)IRCALLCOND_##cond(name), \ - (nargs)|(CCI_CALL_##kind)|(IRT_##type<irbuf + J->irbotlim; - MSize szins = J->irtoplim - J->irbotlim; - if (szins) { - baseir = (IRIns *)lj_mem_realloc(J->L, baseir, szins*sizeof(IRIns), - 2*szins*sizeof(IRIns)); - J->irtoplim = J->irbotlim + 2*szins; - } else { - baseir = (IRIns *)lj_mem_realloc(J->L, NULL, 0, LJ_MIN_IRSZ*sizeof(IRIns)); - J->irbotlim = REF_BASE - LJ_MIN_IRSZ/4; - J->irtoplim = J->irbotlim + LJ_MIN_IRSZ; - } - J->cur.ir = J->irbuf = baseir - J->irbotlim; -} - -/* Grow IR buffer at the bottom or shift it up. */ -static void lj_ir_growbot(jit_State *J) -{ - IRIns *baseir = J->irbuf + J->irbotlim; - MSize szins = J->irtoplim - J->irbotlim; - lua_assert(szins != 0); - lua_assert(J->cur.nk == J->irbotlim); - if (J->cur.nins + (szins >> 1) < J->irtoplim) { - /* More than half of the buffer is free on top: shift up by a quarter. */ - MSize ofs = szins >> 2; - memmove(baseir + ofs, baseir, (J->cur.nins - J->irbotlim)*sizeof(IRIns)); - J->irbotlim -= ofs; - J->irtoplim -= ofs; - J->cur.ir = J->irbuf = baseir - J->irbotlim; - } else { - /* Double the buffer size, but split the growth amongst top/bottom. */ - IRIns *newbase = lj_mem_newt(J->L, 2*szins*sizeof(IRIns), IRIns); - MSize ofs = szins >= 256 ? 128 : (szins >> 1); /* Limit bottom growth. */ - memcpy(newbase + ofs, baseir, (J->cur.nins - J->irbotlim)*sizeof(IRIns)); - lj_mem_free(G(J->L), baseir, szins*sizeof(IRIns)); - J->irbotlim -= ofs; - J->irtoplim = J->irbotlim + 2*szins; - J->cur.ir = J->irbuf = newbase - J->irbotlim; - } -} - -/* Emit IR without any optimizations. */ -TRef LJ_FASTCALL lj_ir_emit(jit_State *J) -{ - IRRef ref = lj_ir_nextins(J); - IRIns *ir = IR(ref); - IROp op = fins->o; - ir->prev = J->chain[op]; - J->chain[op] = (IRRef1)ref; - ir->o = op; - ir->op1 = fins->op1; - ir->op2 = fins->op2; - J->guardemit.irt |= fins->t.irt; - return TREF(ref, irt_t((ir->t = fins->t))); -} - -/* Emit call to a C function. */ -TRef lj_ir_call(jit_State *J, IRCallID id, ...) -{ - const CCallInfo *ci = &lj_ir_callinfo[id]; - uint32_t n = CCI_NARGS(ci); - TRef tr = TREF_NIL; - va_list argp; - va_start(argp, id); - if ((ci->flags & CCI_L)) n--; - if (n > 0) - tr = va_arg(argp, IRRef); - while (n-- > 1) - tr = emitir(IRT(IR_CARG, IRT_NIL), tr, va_arg(argp, IRRef)); - va_end(argp); - if (CCI_OP(ci) == IR_CALLS) - J->needsnap = 1; /* Need snapshot after call with side effect. */ - return emitir(CCI_OPTYPE(ci), tr, id); -} - -/* -- Interning of constants ---------------------------------------------- */ - -/* -** IR instructions for constants are kept between J->cur.nk >= ref < REF_BIAS. -** They are chained like all other instructions, but grow downwards. -** The are interned (like strings in the VM) to facilitate reference -** comparisons. The same constant must get the same reference. -*/ - -/* Get ref of next IR constant and optionally grow IR. -** Note: this may invalidate all IRIns *! -*/ -static LJ_AINLINE IRRef ir_nextk(jit_State *J) -{ - IRRef ref = J->cur.nk; - if (LJ_UNLIKELY(ref <= J->irbotlim)) lj_ir_growbot(J); - J->cur.nk = --ref; - return ref; -} - -/* Intern int32_t constant. */ -TRef LJ_FASTCALL lj_ir_kint(jit_State *J, int32_t k) -{ - IRIns *ir, *cir = J->cur.ir; - IRRef ref; - for (ref = J->chain[IR_KINT]; ref; ref = cir[ref].prev) - if (cir[ref].i == k) - goto found; - ref = ir_nextk(J); - ir = IR(ref); - ir->i = k; - ir->t.irt = IRT_INT; - ir->o = IR_KINT; - ir->prev = J->chain[IR_KINT]; - J->chain[IR_KINT] = (IRRef1)ref; -found: - return TREF(ref, IRT_INT); -} - -/* The MRef inside the KNUM/KINT64 IR instructions holds the address of the -** 64 bit constant. The constants themselves are stored in a chained array -** and shared across traces. -** -** Rationale for choosing this data structure: -** - The address of the constants is embedded in the generated machine code -** and must never move. A resizable array or hash table wouldn't work. -** - Most apps need very few non-32 bit integer constants (less than a dozen). -** - Linear search is hard to beat in terms of speed and low complexity. -*/ -typedef struct K64Array { - MRef next; /* Pointer to next list. */ - MSize numk; /* Number of used elements in this array. */ - TValue k[LJ_MIN_K64SZ]; /* Array of constants. */ -} K64Array; - -/* Free all chained arrays. */ -void lj_ir_k64_freeall(jit_State *J) -{ - K64Array *k; - for (k = mref(J->k64, K64Array); k; ) { - K64Array *next = mref(k->next, K64Array); - lj_mem_free(J2G(J), k, sizeof(K64Array)); - k = next; - } -} - -/* Find 64 bit constant in chained array or add it. */ -cTValue *lj_ir_k64_find(jit_State *J, uint64_t u64) -{ - K64Array *k, *kp = NULL; - TValue *ntv; - MSize idx; - /* Search for the constant in the whole chain of arrays. */ - for (k = mref(J->k64, K64Array); k; k = mref(k->next, K64Array)) { - kp = k; /* Remember previous element in list. */ - for (idx = 0; idx < k->numk; idx++) { /* Search one array. */ - TValue *tv = &k->k[idx]; - if (tv->u64 == u64) /* Needed for +-0/NaN/absmask. */ - return tv; - } - } - /* Constant was not found, need to add it. */ - if (!(kp && kp->numk < LJ_MIN_K64SZ)) { /* Allocate a new array. */ - K64Array *kn = lj_mem_newt(J->L, sizeof(K64Array), K64Array); - setmref(kn->next, NULL); - kn->numk = 0; - if (kp) - setmref(kp->next, kn); /* Chain to the end of the list. */ - else - setmref(J->k64, kn); /* Link first array. */ - kp = kn; - } - ntv = &kp->k[kp->numk++]; /* Add to current array. */ - ntv->u64 = u64; - return ntv; -} - -/* Intern 64 bit constant, given by its address. */ -TRef lj_ir_k64(jit_State *J, IROp op, cTValue *tv) -{ - IRIns *ir, *cir = J->cur.ir; - IRRef ref; - IRType t = op == IR_KNUM ? IRT_NUM : IRT_I64; - for (ref = J->chain[op]; ref; ref = cir[ref].prev) - if (ir_k64(&cir[ref]) == tv) - goto found; - ref = ir_nextk(J); - ir = IR(ref); - lua_assert(checkptr32(tv)); - setmref(ir->ptr, tv); - ir->t.irt = t; - ir->o = op; - ir->prev = J->chain[op]; - J->chain[op] = (IRRef1)ref; -found: - return TREF(ref, t); -} - -/* Intern FP constant, given by its 64 bit pattern. */ -TRef lj_ir_knum_u64(jit_State *J, uint64_t u64) -{ - return lj_ir_k64(J, IR_KNUM, lj_ir_k64_find(J, u64)); -} - -/* Intern 64 bit integer constant. */ -TRef lj_ir_kint64(jit_State *J, uint64_t u64) -{ - return lj_ir_k64(J, IR_KINT64, lj_ir_k64_find(J, u64)); -} - -/* Check whether a number is int and return it. -0 is NOT considered an int. */ -static int numistrueint(lua_Number n, int32_t *kp) -{ - int32_t k = lj_num2int(n); - if (n == (lua_Number)k) { - if (kp) *kp = k; - if (k == 0) { /* Special check for -0. */ - TValue tv; - setnumV(&tv, n); - if (tv.u32.hi != 0) - return 0; - } - return 1; - } - return 0; -} - -/* Intern number as int32_t constant if possible, otherwise as FP constant. */ -TRef lj_ir_knumint(jit_State *J, lua_Number n) -{ - int32_t k; - if (numistrueint(n, &k)) - return lj_ir_kint(J, k); - else - return lj_ir_knum(J, n); -} - -/* Intern GC object "constant". */ -TRef lj_ir_kgc(jit_State *J, GCobj *o, IRType t) -{ - IRIns *ir, *cir = J->cur.ir; - IRRef ref; - lua_assert(!isdead(J2G(J), o)); - for (ref = J->chain[IR_KGC]; ref; ref = cir[ref].prev) - if (ir_kgc(&cir[ref]) == o) - goto found; - ref = ir_nextk(J); - ir = IR(ref); - /* NOBARRIER: Current trace is a GC root. */ - setgcref(ir->gcr, o); - ir->t.irt = (uint8_t)t; - ir->o = IR_KGC; - ir->prev = J->chain[IR_KGC]; - J->chain[IR_KGC] = (IRRef1)ref; -found: - return TREF(ref, t); -} - -/* Intern 32 bit pointer constant. */ -TRef lj_ir_kptr_(jit_State *J, IROp op, void *ptr) -{ - IRIns *ir, *cir = J->cur.ir; - IRRef ref; - lua_assert((void *)(intptr_t)i32ptr(ptr) == ptr); - for (ref = J->chain[op]; ref; ref = cir[ref].prev) - if (mref(cir[ref].ptr, void) == ptr) - goto found; - ref = ir_nextk(J); - ir = IR(ref); - setmref(ir->ptr, ptr); - ir->t.irt = IRT_P32; - ir->o = op; - ir->prev = J->chain[op]; - J->chain[op] = (IRRef1)ref; -found: - return TREF(ref, IRT_P32); -} - -/* Intern typed NULL constant. */ -TRef lj_ir_knull(jit_State *J, IRType t) -{ - IRIns *ir, *cir = J->cur.ir; - IRRef ref; - for (ref = J->chain[IR_KNULL]; ref; ref = cir[ref].prev) - if (irt_t(cir[ref].t) == t) - goto found; - ref = ir_nextk(J); - ir = IR(ref); - ir->i = 0; - ir->t.irt = (uint8_t)t; - ir->o = IR_KNULL; - ir->prev = J->chain[IR_KNULL]; - J->chain[IR_KNULL] = (IRRef1)ref; -found: - return TREF(ref, t); -} - -/* Intern key slot. */ -TRef lj_ir_kslot(jit_State *J, TRef key, IRRef slot) -{ - IRIns *ir, *cir = J->cur.ir; - IRRef2 op12 = IRREF2((IRRef1)key, (IRRef1)slot); - IRRef ref; - /* Const part is not touched by CSE/DCE, so 0-65535 is ok for IRMlit here. */ - lua_assert(tref_isk(key) && slot == (IRRef)(IRRef1)slot); - for (ref = J->chain[IR_KSLOT]; ref; ref = cir[ref].prev) - if (cir[ref].op12 == op12) - goto found; - ref = ir_nextk(J); - ir = IR(ref); - ir->op12 = op12; - ir->t.irt = IRT_P32; - ir->o = IR_KSLOT; - ir->prev = J->chain[IR_KSLOT]; - J->chain[IR_KSLOT] = (IRRef1)ref; -found: - return TREF(ref, IRT_P32); -} - -/* -- Access to IR constants ---------------------------------------------- */ - -/* Copy value of IR constant. */ -void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir) -{ - UNUSED(L); - lua_assert(ir->o != IR_KSLOT); /* Common mistake. */ - switch (ir->o) { - case IR_KPRI: setitype(tv, irt_toitype(ir->t)); break; - case IR_KINT: setintV(tv, ir->i); break; - case IR_KGC: setgcV(L, tv, ir_kgc(ir), irt_toitype(ir->t)); break; - case IR_KPTR: case IR_KKPTR: case IR_KNULL: - setlightudV(tv, mref(ir->ptr, void)); - break; - case IR_KNUM: setnumV(tv, ir_knum(ir)->n); break; -#if LJ_HASFFI - case IR_KINT64: { - GCcdata *cd = lj_cdata_new_(L, CTID_INT64, 8); - *(uint64_t *)cdataptr(cd) = ir_kint64(ir)->u64; - setcdataV(L, tv, cd); - break; - } -#endif - default: lua_assert(0); break; - } -} - -/* -- Convert IR operand types -------------------------------------------- */ - -/* Convert from string to number. */ -TRef LJ_FASTCALL lj_ir_tonumber(jit_State *J, TRef tr) -{ - if (!tref_isnumber(tr)) { - if (tref_isstr(tr)) - tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0); - else - lj_trace_err(J, LJ_TRERR_BADTYPE); - } - return tr; -} - -/* Convert from integer or string to number. */ -TRef LJ_FASTCALL lj_ir_tonum(jit_State *J, TRef tr) -{ - if (!tref_isnum(tr)) { - if (tref_isinteger(tr)) - tr = emitir(IRTN(IR_CONV), tr, IRCONV_NUM_INT); - else if (tref_isstr(tr)) - tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0); - else - lj_trace_err(J, LJ_TRERR_BADTYPE); - } - return tr; -} - -/* Convert from integer or number to string. */ -TRef LJ_FASTCALL lj_ir_tostr(jit_State *J, TRef tr) -{ - if (!tref_isstr(tr)) { - if (!tref_isnumber(tr)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - tr = emitir(IRT(IR_TOSTR, IRT_STR), tr, 0); - } - return tr; -} - -/* -- Miscellaneous IR ops ------------------------------------------------ */ - -/* Evaluate numeric comparison. */ -int lj_ir_numcmp(lua_Number a, lua_Number b, IROp op) -{ - switch (op) { - case IR_EQ: return (a == b); - case IR_NE: return (a != b); - case IR_LT: return (a < b); - case IR_GE: return (a >= b); - case IR_LE: return (a <= b); - case IR_GT: return (a > b); - case IR_ULT: return !(a >= b); - case IR_UGE: return !(a < b); - case IR_ULE: return !(a > b); - case IR_UGT: return !(a <= b); - default: lua_assert(0); return 0; - } -} - -/* Evaluate string comparison. */ -int lj_ir_strcmp(GCstr *a, GCstr *b, IROp op) -{ - int res = lj_str_cmp(a, b); - switch (op) { - case IR_LT: return (res < 0); - case IR_GE: return (res >= 0); - case IR_LE: return (res <= 0); - case IR_GT: return (res > 0); - default: lua_assert(0); return 0; - } -} - -/* Rollback IR to previous state. */ -void lj_ir_rollback(jit_State *J, IRRef ref) -{ - IRRef nins = J->cur.nins; - while (nins > ref) { - IRIns *ir; - nins--; - ir = IR(nins); - J->chain[ir->o] = ir->prev; - } - J->cur.nins = nins; -} - -#undef IR -#undef fins -#undef emitir - -#endif diff --git a/deps/luajit/src/lj_ir.h b/deps/luajit/src/lj_ir.h deleted file mode 100644 index 8126482..0000000 --- a/deps/luajit/src/lj_ir.h +++ /dev/null @@ -1,551 +0,0 @@ -/* -** SSA IR (Intermediate Representation) format. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_IR_H -#define _LJ_IR_H - -#include "lj_obj.h" - -/* -- IR instructions ----------------------------------------------------- */ - -/* IR instruction definition. Order matters, see below. ORDER IR */ -#define IRDEF(_) \ - /* Guarded assertions. */ \ - /* Must be properly aligned to flip opposites (^1) and (un)ordered (^4). */ \ - _(LT, N , ref, ref) \ - _(GE, N , ref, ref) \ - _(LE, N , ref, ref) \ - _(GT, N , ref, ref) \ - \ - _(ULT, N , ref, ref) \ - _(UGE, N , ref, ref) \ - _(ULE, N , ref, ref) \ - _(UGT, N , ref, ref) \ - \ - _(EQ, C , ref, ref) \ - _(NE, C , ref, ref) \ - \ - _(ABC, N , ref, ref) \ - _(RETF, S , ref, ref) \ - \ - /* Miscellaneous ops. */ \ - _(NOP, N , ___, ___) \ - _(BASE, N , lit, lit) \ - _(PVAL, N , lit, ___) \ - _(GCSTEP, S , ___, ___) \ - _(HIOP, S , ref, ref) \ - _(LOOP, S , ___, ___) \ - _(USE, S , ref, ___) \ - _(PHI, S , ref, ref) \ - _(RENAME, S , ref, lit) \ - \ - /* Constants. */ \ - _(KPRI, N , ___, ___) \ - _(KINT, N , cst, ___) \ - _(KGC, N , cst, ___) \ - _(KPTR, N , cst, ___) \ - _(KKPTR, N , cst, ___) \ - _(KNULL, N , cst, ___) \ - _(KNUM, N , cst, ___) \ - _(KINT64, N , cst, ___) \ - _(KSLOT, N , ref, lit) \ - \ - /* Bit ops. */ \ - _(BNOT, N , ref, ___) \ - _(BSWAP, N , ref, ___) \ - _(BAND, C , ref, ref) \ - _(BOR, C , ref, ref) \ - _(BXOR, C , ref, ref) \ - _(BSHL, N , ref, ref) \ - _(BSHR, N , ref, ref) \ - _(BSAR, N , ref, ref) \ - _(BROL, N , ref, ref) \ - _(BROR, N , ref, ref) \ - \ - /* Arithmetic ops. ORDER ARITH */ \ - _(ADD, C , ref, ref) \ - _(SUB, N , ref, ref) \ - _(MUL, C , ref, ref) \ - _(DIV, N , ref, ref) \ - _(MOD, N , ref, ref) \ - _(POW, N , ref, ref) \ - _(NEG, N , ref, ref) \ - \ - _(ABS, N , ref, ref) \ - _(ATAN2, N , ref, ref) \ - _(LDEXP, N , ref, ref) \ - _(MIN, C , ref, ref) \ - _(MAX, C , ref, ref) \ - _(FPMATH, N , ref, lit) \ - \ - /* Overflow-checking arithmetic ops. */ \ - _(ADDOV, CW, ref, ref) \ - _(SUBOV, NW, ref, ref) \ - _(MULOV, CW, ref, ref) \ - \ - /* Memory ops. A = array, H = hash, U = upvalue, F = field, S = stack. */ \ - \ - /* Memory references. */ \ - _(AREF, R , ref, ref) \ - _(HREFK, R , ref, ref) \ - _(HREF, L , ref, ref) \ - _(NEWREF, S , ref, ref) \ - _(UREFO, LW, ref, lit) \ - _(UREFC, LW, ref, lit) \ - _(FREF, R , ref, lit) \ - _(STRREF, N , ref, ref) \ - \ - /* Loads and Stores. These must be in the same order. */ \ - _(ALOAD, L , ref, ___) \ - _(HLOAD, L , ref, ___) \ - _(ULOAD, L , ref, ___) \ - _(FLOAD, L , ref, lit) \ - _(XLOAD, L , ref, lit) \ - _(SLOAD, L , lit, lit) \ - _(VLOAD, L , ref, ___) \ - \ - _(ASTORE, S , ref, ref) \ - _(HSTORE, S , ref, ref) \ - _(USTORE, S , ref, ref) \ - _(FSTORE, S , ref, ref) \ - _(XSTORE, S , ref, ref) \ - \ - /* Allocations. */ \ - _(SNEW, N , ref, ref) /* CSE is ok, not marked as A. */ \ - _(XSNEW, A , ref, ref) \ - _(TNEW, AW, lit, lit) \ - _(TDUP, AW, ref, ___) \ - _(CNEW, AW, ref, ref) \ - _(CNEWI, NW, ref, ref) /* CSE is ok, not marked as A. */ \ - \ - /* Barriers. */ \ - _(TBAR, S , ref, ___) \ - _(OBAR, S , ref, ref) \ - _(XBAR, S , ___, ___) \ - \ - /* Type conversions. */ \ - _(CONV, NW, ref, lit) \ - _(TOBIT, N , ref, ref) \ - _(TOSTR, N , ref, ___) \ - _(STRTO, N , ref, ___) \ - \ - /* Calls. */ \ - _(CALLN, N , ref, lit) \ - _(CALLL, L , ref, lit) \ - _(CALLS, S , ref, lit) \ - _(CALLXS, S , ref, ref) \ - _(CARG, N , ref, ref) \ - \ - /* End of list. */ - -/* IR opcodes (max. 256). */ -typedef enum { -#define IRENUM(name, m, m1, m2) IR_##name, -IRDEF(IRENUM) -#undef IRENUM - IR__MAX -} IROp; - -/* Stored opcode. */ -typedef uint8_t IROp1; - -LJ_STATIC_ASSERT(((int)IR_EQ^1) == (int)IR_NE); -LJ_STATIC_ASSERT(((int)IR_LT^1) == (int)IR_GE); -LJ_STATIC_ASSERT(((int)IR_LE^1) == (int)IR_GT); -LJ_STATIC_ASSERT(((int)IR_LT^3) == (int)IR_GT); -LJ_STATIC_ASSERT(((int)IR_LT^4) == (int)IR_ULT); - -/* Delta between xLOAD and xSTORE. */ -#define IRDELTA_L2S ((int)IR_ASTORE - (int)IR_ALOAD) - -LJ_STATIC_ASSERT((int)IR_HLOAD + IRDELTA_L2S == (int)IR_HSTORE); -LJ_STATIC_ASSERT((int)IR_ULOAD + IRDELTA_L2S == (int)IR_USTORE); -LJ_STATIC_ASSERT((int)IR_FLOAD + IRDELTA_L2S == (int)IR_FSTORE); -LJ_STATIC_ASSERT((int)IR_XLOAD + IRDELTA_L2S == (int)IR_XSTORE); - -/* -- Named IR literals --------------------------------------------------- */ - -/* FPMATH sub-functions. ORDER FPM. */ -#define IRFPMDEF(_) \ - _(FLOOR) _(CEIL) _(TRUNC) /* Must be first and in this order. */ \ - _(SQRT) _(EXP) _(EXP2) _(LOG) _(LOG2) _(LOG10) \ - _(SIN) _(COS) _(TAN) \ - _(OTHER) - -typedef enum { -#define FPMENUM(name) IRFPM_##name, -IRFPMDEF(FPMENUM) -#undef FPMENUM - IRFPM__MAX -} IRFPMathOp; - -/* FLOAD fields. */ -#define IRFLDEF(_) \ - _(STR_LEN, offsetof(GCstr, len)) \ - _(FUNC_ENV, offsetof(GCfunc, l.env)) \ - _(FUNC_PC, offsetof(GCfunc, l.pc)) \ - _(TAB_META, offsetof(GCtab, metatable)) \ - _(TAB_ARRAY, offsetof(GCtab, array)) \ - _(TAB_NODE, offsetof(GCtab, node)) \ - _(TAB_ASIZE, offsetof(GCtab, asize)) \ - _(TAB_HMASK, offsetof(GCtab, hmask)) \ - _(TAB_NOMM, offsetof(GCtab, nomm)) \ - _(UDATA_META, offsetof(GCudata, metatable)) \ - _(UDATA_UDTYPE, offsetof(GCudata, udtype)) \ - _(UDATA_FILE, sizeof(GCudata)) \ - _(CDATA_CTYPEID, offsetof(GCcdata, ctypeid)) \ - _(CDATA_PTR, sizeof(GCcdata)) \ - _(CDATA_INT, sizeof(GCcdata)) \ - _(CDATA_INT64, sizeof(GCcdata)) \ - _(CDATA_INT64_4, sizeof(GCcdata) + 4) - -typedef enum { -#define FLENUM(name, ofs) IRFL_##name, -IRFLDEF(FLENUM) -#undef FLENUM - IRFL__MAX -} IRFieldID; - -/* SLOAD mode bits, stored in op2. */ -#define IRSLOAD_PARENT 0x01 /* Coalesce with parent trace. */ -#define IRSLOAD_FRAME 0x02 /* Load hiword of frame. */ -#define IRSLOAD_TYPECHECK 0x04 /* Needs type check. */ -#define IRSLOAD_CONVERT 0x08 /* Number to integer conversion. */ -#define IRSLOAD_READONLY 0x10 /* Read-only, omit slot store. */ -#define IRSLOAD_INHERIT 0x20 /* Inherited by exits/side traces. */ - -/* XLOAD mode, stored in op2. */ -#define IRXLOAD_READONLY 1 /* Load from read-only data. */ -#define IRXLOAD_VOLATILE 2 /* Load from volatile data. */ -#define IRXLOAD_UNALIGNED 4 /* Unaligned load. */ - -/* CONV mode, stored in op2. */ -#define IRCONV_SRCMASK 0x001f /* Source IRType. */ -#define IRCONV_DSTMASK 0x03e0 /* Dest. IRType (also in ir->t). */ -#define IRCONV_DSH 5 -#define IRCONV_NUM_INT ((IRT_NUM<>2)&3)) -#define irm_iscomm(m) ((m) & IRM_C) -#define irm_kind(m) ((m) & IRM_S) - -#define IRMODE(name, m, m1, m2) (((IRM##m1)|((IRM##m2)<<2)|(IRM_##m))^IRM_W), - -LJ_DATA const uint8_t lj_ir_mode[IR__MAX+1]; - -/* -- IR instruction types ------------------------------------------------ */ - -/* Map of itypes to non-negative numbers. ORDER LJ_T. -** LJ_TUPVAL/LJ_TTRACE never appear in a TValue. Use these itypes for -** IRT_P32 and IRT_P64, which never escape the IR. -** The various integers are only used in the IR and can only escape to -** a TValue after implicit or explicit conversion. Their types must be -** contiguous and next to IRT_NUM (see the typerange macros below). -*/ -#define IRTDEF(_) \ - _(NIL, 4) _(FALSE, 4) _(TRUE, 4) _(LIGHTUD, LJ_64 ? 8 : 4) _(STR, 4) \ - _(P32, 4) _(THREAD, 4) _(PROTO, 4) _(FUNC, 4) _(P64, 8) _(CDATA, 4) \ - _(TAB, 4) _(UDATA, 4) \ - _(FLOAT, 4) _(NUM, 8) _(I8, 1) _(U8, 1) _(I16, 2) _(U16, 2) \ - _(INT, 4) _(U32, 4) _(I64, 8) _(U64, 8) \ - _(SOFTFP, 4) /* There is room for 9 more types. */ - -/* IR result type and flags (8 bit). */ -typedef enum { -#define IRTENUM(name, size) IRT_##name, -IRTDEF(IRTENUM) -#undef IRTENUM - IRT__MAX, - - /* Native pointer type and the corresponding integer type. */ - IRT_PTR = LJ_64 ? IRT_P64 : IRT_P32, - IRT_INTP = LJ_64 ? IRT_I64 : IRT_INT, - IRT_UINTP = LJ_64 ? IRT_U64 : IRT_U32, - - /* Additional flags. */ - IRT_MARK = 0x20, /* Marker for misc. purposes. */ - IRT_ISPHI = 0x40, /* Instruction is left or right PHI operand. */ - IRT_GUARD = 0x80, /* Instruction is a guard. */ - - /* Masks. */ - IRT_TYPE = 0x1f, - IRT_T = 0xff -} IRType; - -#define irtype_ispri(irt) ((uint32_t)(irt) <= IRT_TRUE) - -/* Stored IRType. */ -typedef struct IRType1 { uint8_t irt; } IRType1; - -#define IRT(o, t) ((uint32_t)(((o)<<8) | (t))) -#define IRTI(o) (IRT((o), IRT_INT)) -#define IRTN(o) (IRT((o), IRT_NUM)) -#define IRTG(o, t) (IRT((o), IRT_GUARD|(t))) -#define IRTGI(o) (IRT((o), IRT_GUARD|IRT_INT)) - -#define irt_t(t) ((IRType)(t).irt) -#define irt_type(t) ((IRType)((t).irt & IRT_TYPE)) -#define irt_sametype(t1, t2) ((((t1).irt ^ (t2).irt) & IRT_TYPE) == 0) -#define irt_typerange(t, first, last) \ - ((uint32_t)((t).irt & IRT_TYPE) - (uint32_t)(first) <= (uint32_t)(last-first)) - -#define irt_isnil(t) (irt_type(t) == IRT_NIL) -#define irt_ispri(t) ((uint32_t)irt_type(t) <= IRT_TRUE) -#define irt_islightud(t) (irt_type(t) == IRT_LIGHTUD) -#define irt_isstr(t) (irt_type(t) == IRT_STR) -#define irt_istab(t) (irt_type(t) == IRT_TAB) -#define irt_iscdata(t) (irt_type(t) == IRT_CDATA) -#define irt_isfloat(t) (irt_type(t) == IRT_FLOAT) -#define irt_isnum(t) (irt_type(t) == IRT_NUM) -#define irt_isint(t) (irt_type(t) == IRT_INT) -#define irt_isi8(t) (irt_type(t) == IRT_I8) -#define irt_isu8(t) (irt_type(t) == IRT_U8) -#define irt_isi16(t) (irt_type(t) == IRT_I16) -#define irt_isu16(t) (irt_type(t) == IRT_U16) -#define irt_isu32(t) (irt_type(t) == IRT_U32) -#define irt_isi64(t) (irt_type(t) == IRT_I64) -#define irt_isu64(t) (irt_type(t) == IRT_U64) - -#define irt_isfp(t) (irt_isnum(t) || irt_isfloat(t)) -#define irt_isinteger(t) (irt_typerange((t), IRT_I8, IRT_INT)) -#define irt_isgcv(t) (irt_typerange((t), IRT_STR, IRT_UDATA)) -#define irt_isaddr(t) (irt_typerange((t), IRT_LIGHTUD, IRT_UDATA)) -#define irt_isint64(t) (irt_typerange((t), IRT_I64, IRT_U64)) - -#if LJ_64 -#define IRT_IS64 \ - ((1u<> irt_type(t)) & 1) -#define irt_is64orfp(t) (((IRT_IS64|(1u<>irt_type(t)) & 1) - -#define irt_size(t) (lj_ir_type_size[irt_t((t))]) - -LJ_DATA const uint8_t lj_ir_type_size[]; - -static LJ_AINLINE IRType itype2irt(const TValue *tv) -{ - if (tvisint(tv)) - return IRT_INT; - else if (tvisnum(tv)) - return IRT_NUM; -#if LJ_64 - else if (tvislightud(tv)) - return IRT_LIGHTUD; -#endif - else - return (IRType)~itype(tv); -} - -static LJ_AINLINE uint32_t irt_toitype_(IRType t) -{ - lua_assert(!LJ_64 || t != IRT_LIGHTUD); - if (LJ_DUALNUM && t > IRT_NUM) { - return LJ_TISNUM; - } else { - lua_assert(t <= IRT_NUM); - return ~(uint32_t)t; - } -} - -#define irt_toitype(t) irt_toitype_(irt_type((t))) - -#define irt_isguard(t) ((t).irt & IRT_GUARD) -#define irt_ismarked(t) ((t).irt & IRT_MARK) -#define irt_setmark(t) ((t).irt |= IRT_MARK) -#define irt_clearmark(t) ((t).irt &= ~IRT_MARK) -#define irt_isphi(t) ((t).irt & IRT_ISPHI) -#define irt_setphi(t) ((t).irt |= IRT_ISPHI) -#define irt_clearphi(t) ((t).irt &= ~IRT_ISPHI) - -/* Stored combined IR opcode and type. */ -typedef uint16_t IROpT; - -/* -- IR references ------------------------------------------------------- */ - -/* IR references. */ -typedef uint16_t IRRef1; /* One stored reference. */ -typedef uint32_t IRRef2; /* Two stored references. */ -typedef uint32_t IRRef; /* Used to pass around references. */ - -/* Fixed references. */ -enum { - REF_BIAS = 0x8000, - REF_TRUE = REF_BIAS-3, - REF_FALSE = REF_BIAS-2, - REF_NIL = REF_BIAS-1, /* \--- Constants grow downwards. */ - REF_BASE = REF_BIAS, /* /--- IR grows upwards. */ - REF_FIRST = REF_BIAS+1, - REF_DROP = 0xffff -}; - -/* Note: IRMlit operands must be < REF_BIAS, too! -** This allows for fast and uniform manipulation of all operands -** without looking up the operand mode in lj_ir_mode: -** - CSE calculates the maximum reference of two operands. -** This must work with mixed reference/literal operands, too. -** - DCE marking only checks for operand >= REF_BIAS. -** - LOOP needs to substitute reference operands. -** Constant references and literals must not be modified. -*/ - -#define IRREF2(lo, hi) ((IRRef2)(lo) | ((IRRef2)(hi) << 16)) - -#define irref_isk(ref) ((ref) < REF_BIAS) - -/* Tagged IR references (32 bit). -** -** +-------+-------+---------------+ -** | irt | flags | ref | -** +-------+-------+---------------+ -** -** The tag holds a copy of the IRType and speeds up IR type checks. -*/ -typedef uint32_t TRef; - -#define TREF_REFMASK 0x0000ffff -#define TREF_FRAME 0x00010000 -#define TREF_CONT 0x00020000 - -#define TREF(ref, t) ((TRef)((ref) + ((t)<<24))) - -#define tref_ref(tr) ((IRRef1)(tr)) -#define tref_t(tr) ((IRType)((tr)>>24)) -#define tref_type(tr) ((IRType)(((tr)>>24) & IRT_TYPE)) -#define tref_typerange(tr, first, last) \ - ((((tr)>>24) & IRT_TYPE) - (TRef)(first) <= (TRef)(last-first)) - -#define tref_istype(tr, t) (((tr) & (IRT_TYPE<<24)) == ((t)<<24)) -#define tref_isnil(tr) (tref_istype((tr), IRT_NIL)) -#define tref_isfalse(tr) (tref_istype((tr), IRT_FALSE)) -#define tref_istrue(tr) (tref_istype((tr), IRT_TRUE)) -#define tref_isstr(tr) (tref_istype((tr), IRT_STR)) -#define tref_isfunc(tr) (tref_istype((tr), IRT_FUNC)) -#define tref_iscdata(tr) (tref_istype((tr), IRT_CDATA)) -#define tref_istab(tr) (tref_istype((tr), IRT_TAB)) -#define tref_isudata(tr) (tref_istype((tr), IRT_UDATA)) -#define tref_isnum(tr) (tref_istype((tr), IRT_NUM)) -#define tref_isint(tr) (tref_istype((tr), IRT_INT)) - -#define tref_isbool(tr) (tref_typerange((tr), IRT_FALSE, IRT_TRUE)) -#define tref_ispri(tr) (tref_typerange((tr), IRT_NIL, IRT_TRUE)) -#define tref_istruecond(tr) (!tref_typerange((tr), IRT_NIL, IRT_FALSE)) -#define tref_isinteger(tr) (tref_typerange((tr), IRT_I8, IRT_INT)) -#define tref_isnumber(tr) (tref_typerange((tr), IRT_NUM, IRT_INT)) -#define tref_isnumber_str(tr) (tref_isnumber((tr)) || tref_isstr((tr))) -#define tref_isgcv(tr) (tref_typerange((tr), IRT_STR, IRT_UDATA)) - -#define tref_isk(tr) (irref_isk(tref_ref((tr)))) -#define tref_isk2(tr1, tr2) (irref_isk(tref_ref((tr1) | (tr2)))) - -#define TREF_PRI(t) (TREF(REF_NIL-(t), (t))) -#define TREF_NIL (TREF_PRI(IRT_NIL)) -#define TREF_FALSE (TREF_PRI(IRT_FALSE)) -#define TREF_TRUE (TREF_PRI(IRT_TRUE)) - -/* -- IR format ----------------------------------------------------------- */ - -/* IR instruction format (64 bit). -** -** 16 16 8 8 8 8 -** +-------+-------+---+---+---+---+ -** | op1 | op2 | t | o | r | s | -** +-------+-------+---+---+---+---+ -** | op12/i/gco | ot | prev | (alternative fields in union) -** +---------------+-------+-------+ -** 32 16 16 -** -** prev is only valid prior to register allocation and then reused for r + s. -*/ - -typedef union IRIns { - struct { - LJ_ENDIAN_LOHI( - IRRef1 op1; /* IR operand 1. */ - , IRRef1 op2; /* IR operand 2. */ - ) - IROpT ot; /* IR opcode and type (overlaps t and o). */ - IRRef1 prev; /* Previous ins in same chain (overlaps r and s). */ - }; - struct { - IRRef2 op12; /* IR operand 1 and 2 (overlaps op1 and op2). */ - LJ_ENDIAN_LOHI( - IRType1 t; /* IR type. */ - , IROp1 o; /* IR opcode. */ - ) - LJ_ENDIAN_LOHI( - uint8_t r; /* Register allocation (overlaps prev). */ - , uint8_t s; /* Spill slot allocation (overlaps prev). */ - ) - }; - int32_t i; /* 32 bit signed integer literal (overlaps op12). */ - GCRef gcr; /* GCobj constant (overlaps op12). */ - MRef ptr; /* Pointer constant (overlaps op12). */ -} IRIns; - -#define ir_kgc(ir) check_exp((ir)->o == IR_KGC, gcref((ir)->gcr)) -#define ir_kstr(ir) (gco2str(ir_kgc((ir)))) -#define ir_ktab(ir) (gco2tab(ir_kgc((ir)))) -#define ir_kfunc(ir) (gco2func(ir_kgc((ir)))) -#define ir_kcdata(ir) (gco2cd(ir_kgc((ir)))) -#define ir_knum(ir) check_exp((ir)->o == IR_KNUM, mref((ir)->ptr, cTValue)) -#define ir_kint64(ir) check_exp((ir)->o == IR_KINT64, mref((ir)->ptr,cTValue)) -#define ir_k64(ir) \ - check_exp((ir)->o == IR_KNUM || (ir)->o == IR_KINT64, mref((ir)->ptr,cTValue)) -#define ir_kptr(ir) \ - check_exp((ir)->o == IR_KPTR || (ir)->o == IR_KKPTR, mref((ir)->ptr, void)) - -/* A store or any other op with a non-weak guard has a side-effect. */ -static LJ_AINLINE int ir_sideeff(IRIns *ir) -{ - return (((ir->t.irt | ~IRT_GUARD) & lj_ir_mode[ir->o]) >= IRM_S); -} - -LJ_STATIC_ASSERT((int)IRT_GUARD == (int)IRM_W); - -#endif diff --git a/deps/luajit/src/lj_ircall.h b/deps/luajit/src/lj_ircall.h deleted file mode 100644 index 893dac2..0000000 --- a/deps/luajit/src/lj_ircall.h +++ /dev/null @@ -1,277 +0,0 @@ -/* -** IR CALL* instruction definitions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_IRCALL_H -#define _LJ_IRCALL_H - -#include "lj_obj.h" -#include "lj_ir.h" -#include "lj_jit.h" - -/* C call info for CALL* instructions. */ -typedef struct CCallInfo { - ASMFunction func; /* Function pointer. */ - uint32_t flags; /* Number of arguments and flags. */ -} CCallInfo; - -#define CCI_NARGS(ci) ((ci)->flags & 0xff) /* Extract # of args. */ -#define CCI_NARGS_MAX 32 /* Max. # of args. */ - -#define CCI_OTSHIFT 16 -#define CCI_OPTYPE(ci) ((ci)->flags >> CCI_OTSHIFT) /* Get op/type. */ -#define CCI_OPSHIFT 24 -#define CCI_OP(ci) ((ci)->flags >> CCI_OPSHIFT) /* Get op. */ - -#define CCI_CALL_N (IR_CALLN << CCI_OPSHIFT) -#define CCI_CALL_L (IR_CALLL << CCI_OPSHIFT) -#define CCI_CALL_S (IR_CALLS << CCI_OPSHIFT) -#define CCI_CALL_FN (CCI_CALL_N|CCI_CC_FASTCALL) -#define CCI_CALL_FL (CCI_CALL_L|CCI_CC_FASTCALL) -#define CCI_CALL_FS (CCI_CALL_S|CCI_CC_FASTCALL) - -/* C call info flags. */ -#define CCI_L 0x0100 /* Implicit L arg. */ -#define CCI_CASTU64 0x0200 /* Cast u64 result to number. */ -#define CCI_NOFPRCLOBBER 0x0400 /* Does not clobber any FPRs. */ -#define CCI_VARARG 0x0800 /* Vararg function. */ - -#define CCI_CC_MASK 0x3000 /* Calling convention mask. */ -#define CCI_CC_SHIFT 12 -/* ORDER CC */ -#define CCI_CC_CDECL 0x0000 /* Default cdecl calling convention. */ -#define CCI_CC_THISCALL 0x1000 /* Thiscall calling convention. */ -#define CCI_CC_FASTCALL 0x2000 /* Fastcall calling convention. */ -#define CCI_CC_STDCALL 0x3000 /* Stdcall calling convention. */ - -/* Helpers for conditional function definitions. */ -#define IRCALLCOND_ANY(x) x - -#if LJ_TARGET_X86ORX64 -#define IRCALLCOND_FPMATH(x) NULL -#else -#define IRCALLCOND_FPMATH(x) x -#endif - -#if LJ_SOFTFP -#define IRCALLCOND_SOFTFP(x) x -#if LJ_HASFFI -#define IRCALLCOND_SOFTFP_FFI(x) x -#else -#define IRCALLCOND_SOFTFP_FFI(x) NULL -#endif -#else -#define IRCALLCOND_SOFTFP(x) NULL -#define IRCALLCOND_SOFTFP_FFI(x) NULL -#endif - -#define LJ_NEED_FP64 (LJ_TARGET_ARM || LJ_TARGET_PPC || LJ_TARGET_MIPS) - -#if LJ_HASFFI && (LJ_SOFTFP || LJ_NEED_FP64) -#define IRCALLCOND_FP64_FFI(x) x -#else -#define IRCALLCOND_FP64_FFI(x) NULL -#endif - -#if LJ_HASFFI -#define IRCALLCOND_FFI(x) x -#if LJ_32 -#define IRCALLCOND_FFI32(x) x -#else -#define IRCALLCOND_FFI32(x) NULL -#endif -#else -#define IRCALLCOND_FFI(x) NULL -#define IRCALLCOND_FFI32(x) NULL -#endif - -#if LJ_TARGET_X86 -#define CCI_RANDFPR 0 /* Clang on OSX/x86 is overzealous. */ -#else -#define CCI_RANDFPR CCI_NOFPRCLOBBER -#endif - -#if LJ_SOFTFP -#define ARG1_FP 2 /* Treat as 2 32 bit arguments. */ -#else -#define ARG1_FP 1 -#endif - -#if LJ_32 -#define ARG2_64 4 /* Treat as 4 32 bit arguments. */ -#else -#define ARG2_64 2 -#endif - -/* Function definitions for CALL* instructions. */ -#define IRCALLDEF(_) \ - _(ANY, lj_str_cmp, 2, FN, INT, CCI_NOFPRCLOBBER) \ - _(ANY, lj_str_new, 3, S, STR, CCI_L) \ - _(ANY, lj_strscan_num, 2, FN, INT, 0) \ - _(ANY, lj_str_fromint, 2, FN, STR, CCI_L) \ - _(ANY, lj_str_fromnum, 2, FN, STR, CCI_L) \ - _(ANY, lj_tab_new1, 2, FS, TAB, CCI_L) \ - _(ANY, lj_tab_dup, 2, FS, TAB, CCI_L) \ - _(ANY, lj_tab_newkey, 3, S, P32, CCI_L) \ - _(ANY, lj_tab_len, 1, FL, INT, 0) \ - _(ANY, lj_gc_step_jit, 2, FS, NIL, CCI_L) \ - _(ANY, lj_gc_barrieruv, 2, FS, NIL, 0) \ - _(ANY, lj_mem_newgco, 2, FS, P32, CCI_L) \ - _(ANY, lj_math_random_step, 1, FS, NUM, CCI_CASTU64|CCI_RANDFPR)\ - _(ANY, lj_vm_modi, 2, FN, INT, 0) \ - _(ANY, sinh, ARG1_FP, N, NUM, 0) \ - _(ANY, cosh, ARG1_FP, N, NUM, 0) \ - _(ANY, tanh, ARG1_FP, N, NUM, 0) \ - _(ANY, fputc, 2, S, INT, 0) \ - _(ANY, fwrite, 4, S, INT, 0) \ - _(ANY, fflush, 1, S, INT, 0) \ - /* ORDER FPM */ \ - _(FPMATH, lj_vm_floor, ARG1_FP, N, NUM, 0) \ - _(FPMATH, lj_vm_ceil, ARG1_FP, N, NUM, 0) \ - _(FPMATH, lj_vm_trunc, ARG1_FP, N, NUM, 0) \ - _(FPMATH, sqrt, ARG1_FP, N, NUM, 0) \ - _(FPMATH, exp, ARG1_FP, N, NUM, 0) \ - _(FPMATH, lj_vm_exp2, ARG1_FP, N, NUM, 0) \ - _(FPMATH, log, ARG1_FP, N, NUM, 0) \ - _(FPMATH, lj_vm_log2, ARG1_FP, N, NUM, 0) \ - _(FPMATH, log10, ARG1_FP, N, NUM, 0) \ - _(FPMATH, sin, ARG1_FP, N, NUM, 0) \ - _(FPMATH, cos, ARG1_FP, N, NUM, 0) \ - _(FPMATH, tan, ARG1_FP, N, NUM, 0) \ - _(FPMATH, lj_vm_powi, ARG1_FP+1, N, NUM, 0) \ - _(FPMATH, pow, ARG1_FP*2, N, NUM, 0) \ - _(FPMATH, atan2, ARG1_FP*2, N, NUM, 0) \ - _(FPMATH, ldexp, ARG1_FP+1, N, NUM, 0) \ - _(SOFTFP, lj_vm_tobit, 2, N, INT, 0) \ - _(SOFTFP, softfp_add, 4, N, NUM, 0) \ - _(SOFTFP, softfp_sub, 4, N, NUM, 0) \ - _(SOFTFP, softfp_mul, 4, N, NUM, 0) \ - _(SOFTFP, softfp_div, 4, N, NUM, 0) \ - _(SOFTFP, softfp_cmp, 4, N, NIL, 0) \ - _(SOFTFP, softfp_i2d, 1, N, NUM, 0) \ - _(SOFTFP, softfp_d2i, 2, N, INT, 0) \ - _(SOFTFP_FFI, softfp_ui2d, 1, N, NUM, 0) \ - _(SOFTFP_FFI, softfp_f2d, 1, N, NUM, 0) \ - _(SOFTFP_FFI, softfp_d2ui, 2, N, INT, 0) \ - _(SOFTFP_FFI, softfp_d2f, 2, N, FLOAT, 0) \ - _(SOFTFP_FFI, softfp_i2f, 1, N, FLOAT, 0) \ - _(SOFTFP_FFI, softfp_ui2f, 1, N, FLOAT, 0) \ - _(SOFTFP_FFI, softfp_f2i, 1, N, INT, 0) \ - _(SOFTFP_FFI, softfp_f2ui, 1, N, INT, 0) \ - _(FP64_FFI, fp64_l2d, 2, N, NUM, 0) \ - _(FP64_FFI, fp64_ul2d, 2, N, NUM, 0) \ - _(FP64_FFI, fp64_l2f, 2, N, FLOAT, 0) \ - _(FP64_FFI, fp64_ul2f, 2, N, FLOAT, 0) \ - _(FP64_FFI, fp64_d2l, ARG1_FP, N, I64, 0) \ - _(FP64_FFI, fp64_d2ul, ARG1_FP, N, U64, 0) \ - _(FP64_FFI, fp64_f2l, 1, N, I64, 0) \ - _(FP64_FFI, fp64_f2ul, 1, N, U64, 0) \ - _(FFI, lj_carith_divi64, ARG2_64, N, I64, CCI_NOFPRCLOBBER) \ - _(FFI, lj_carith_divu64, ARG2_64, N, U64, CCI_NOFPRCLOBBER) \ - _(FFI, lj_carith_modi64, ARG2_64, N, I64, CCI_NOFPRCLOBBER) \ - _(FFI, lj_carith_modu64, ARG2_64, N, U64, CCI_NOFPRCLOBBER) \ - _(FFI, lj_carith_powi64, ARG2_64, N, I64, CCI_NOFPRCLOBBER) \ - _(FFI, lj_carith_powu64, ARG2_64, N, U64, CCI_NOFPRCLOBBER) \ - _(FFI, lj_cdata_setfin, 2, FN, P32, CCI_L) \ - _(FFI, strlen, 1, L, INTP, 0) \ - _(FFI, memcpy, 3, S, PTR, 0) \ - _(FFI, memset, 3, S, PTR, 0) \ - _(FFI, lj_vm_errno, 0, S, INT, CCI_NOFPRCLOBBER) \ - _(FFI32, lj_carith_mul64, ARG2_64, N, I64, CCI_NOFPRCLOBBER) - \ - /* End of list. */ - -typedef enum { -#define IRCALLENUM(cond, name, nargs, kind, type, flags) IRCALL_##name, -IRCALLDEF(IRCALLENUM) -#undef IRCALLENUM - IRCALL__MAX -} IRCallID; - -LJ_FUNC TRef lj_ir_call(jit_State *J, IRCallID id, ...); - -LJ_DATA const CCallInfo lj_ir_callinfo[IRCALL__MAX+1]; - -/* Soft-float declarations. */ -#if LJ_SOFTFP -#if LJ_TARGET_ARM -#define softfp_add __aeabi_dadd -#define softfp_sub __aeabi_dsub -#define softfp_mul __aeabi_dmul -#define softfp_div __aeabi_ddiv -#define softfp_cmp __aeabi_cdcmple -#define softfp_i2d __aeabi_i2d -#define softfp_d2i __aeabi_d2iz -#define softfp_ui2d __aeabi_ui2d -#define softfp_f2d __aeabi_f2d -#define softfp_d2ui __aeabi_d2uiz -#define softfp_d2f __aeabi_d2f -#define softfp_i2f __aeabi_i2f -#define softfp_ui2f __aeabi_ui2f -#define softfp_f2i __aeabi_f2iz -#define softfp_f2ui __aeabi_f2uiz -#define fp64_l2d __aeabi_l2d -#define fp64_ul2d __aeabi_ul2d -#define fp64_l2f __aeabi_l2f -#define fp64_ul2f __aeabi_ul2f -#if LJ_TARGET_IOS -#define fp64_d2l __fixdfdi -#define fp64_d2ul __fixunsdfdi -#define fp64_f2l __fixsfdi -#define fp64_f2ul __fixunssfdi -#else -#define fp64_d2l __aeabi_d2lz -#define fp64_d2ul __aeabi_d2ulz -#define fp64_f2l __aeabi_f2lz -#define fp64_f2ul __aeabi_f2ulz -#endif -#else -#error "Missing soft-float definitions for target architecture" -#endif -extern double softfp_add(double a, double b); -extern double softfp_sub(double a, double b); -extern double softfp_mul(double a, double b); -extern double softfp_div(double a, double b); -extern void softfp_cmp(double a, double b); -extern double softfp_i2d(int32_t a); -extern int32_t softfp_d2i(double a); -#if LJ_HASFFI -extern double softfp_ui2d(uint32_t a); -extern double softfp_f2d(float a); -extern uint32_t softfp_d2ui(double a); -extern float softfp_d2f(double a); -extern float softfp_i2f(int32_t a); -extern float softfp_ui2f(uint32_t a); -extern int32_t softfp_f2i(float a); -extern uint32_t softfp_f2ui(float a); -#endif -#endif - -#if LJ_HASFFI && LJ_NEED_FP64 && !(LJ_TARGET_ARM && LJ_SOFTFP) -#ifdef __GNUC__ -#define fp64_l2d __floatdidf -#define fp64_ul2d __floatundidf -#define fp64_l2f __floatdisf -#define fp64_ul2f __floatundisf -#define fp64_d2l __fixdfdi -#define fp64_d2ul __fixunsdfdi -#define fp64_f2l __fixsfdi -#define fp64_f2ul __fixunssfdi -#else -#error "Missing fp64 helper definitions for this compiler" -#endif -#endif - -#if LJ_HASFFI && (LJ_SOFTFP || LJ_NEED_FP64) -extern double fp64_l2d(int64_t a); -extern double fp64_ul2d(uint64_t a); -extern float fp64_l2f(int64_t a); -extern float fp64_ul2f(uint64_t a); -extern int64_t fp64_d2l(double a); -extern uint64_t fp64_d2ul(double a); -extern int64_t fp64_f2l(float a); -extern uint64_t fp64_f2ul(float a); -#endif - -#endif diff --git a/deps/luajit/src/lj_iropt.h b/deps/luajit/src/lj_iropt.h deleted file mode 100644 index 4e424e7..0000000 --- a/deps/luajit/src/lj_iropt.h +++ /dev/null @@ -1,161 +0,0 @@ -/* -** Common header for IR emitter and optimizations. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_IROPT_H -#define _LJ_IROPT_H - -#include - -#include "lj_obj.h" -#include "lj_jit.h" - -#if LJ_HASJIT -/* IR emitter. */ -LJ_FUNC void LJ_FASTCALL lj_ir_growtop(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_ir_emit(jit_State *J); - -/* Save current IR in J->fold.ins, but do not emit it (yet). */ -static LJ_AINLINE void lj_ir_set_(jit_State *J, uint16_t ot, IRRef1 a, IRRef1 b) -{ - J->fold.ins.ot = ot; J->fold.ins.op1 = a; J->fold.ins.op2 = b; -} - -#define lj_ir_set(J, ot, a, b) \ - lj_ir_set_(J, (uint16_t)(ot), (IRRef1)(a), (IRRef1)(b)) - -/* Get ref of next IR instruction and optionally grow IR. -** Note: this may invalidate all IRIns*! -*/ -static LJ_AINLINE IRRef lj_ir_nextins(jit_State *J) -{ - IRRef ref = J->cur.nins; - if (LJ_UNLIKELY(ref >= J->irtoplim)) lj_ir_growtop(J); - J->cur.nins = ref + 1; - return ref; -} - -/* Interning of constants. */ -LJ_FUNC TRef LJ_FASTCALL lj_ir_kint(jit_State *J, int32_t k); -LJ_FUNC void lj_ir_k64_freeall(jit_State *J); -LJ_FUNC TRef lj_ir_k64(jit_State *J, IROp op, cTValue *tv); -LJ_FUNC cTValue *lj_ir_k64_find(jit_State *J, uint64_t u64); -LJ_FUNC TRef lj_ir_knum_u64(jit_State *J, uint64_t u64); -LJ_FUNC TRef lj_ir_knumint(jit_State *J, lua_Number n); -LJ_FUNC TRef lj_ir_kint64(jit_State *J, uint64_t u64); -LJ_FUNC TRef lj_ir_kgc(jit_State *J, GCobj *o, IRType t); -LJ_FUNC TRef lj_ir_kptr_(jit_State *J, IROp op, void *ptr); -LJ_FUNC TRef lj_ir_knull(jit_State *J, IRType t); -LJ_FUNC TRef lj_ir_kslot(jit_State *J, TRef key, IRRef slot); - -#if LJ_64 -#define lj_ir_kintp(J, k) lj_ir_kint64(J, (uint64_t)(k)) -#else -#define lj_ir_kintp(J, k) lj_ir_kint(J, (int32_t)(k)) -#endif - -static LJ_AINLINE TRef lj_ir_knum(jit_State *J, lua_Number n) -{ - TValue tv; - tv.n = n; - return lj_ir_knum_u64(J, tv.u64); -} - -#define lj_ir_kstr(J, str) lj_ir_kgc(J, obj2gco((str)), IRT_STR) -#define lj_ir_ktab(J, tab) lj_ir_kgc(J, obj2gco((tab)), IRT_TAB) -#define lj_ir_kfunc(J, func) lj_ir_kgc(J, obj2gco((func)), IRT_FUNC) -#define lj_ir_kptr(J, ptr) lj_ir_kptr_(J, IR_KPTR, (ptr)) -#define lj_ir_kkptr(J, ptr) lj_ir_kptr_(J, IR_KKPTR, (ptr)) - -/* Special FP constants. */ -#define lj_ir_knum_zero(J) lj_ir_knum_u64(J, U64x(00000000,00000000)) -#define lj_ir_knum_one(J) lj_ir_knum_u64(J, U64x(3ff00000,00000000)) -#define lj_ir_knum_tobit(J) lj_ir_knum_u64(J, U64x(43380000,00000000)) - -/* Special 128 bit SIMD constants. */ -#define lj_ir_knum_abs(J) lj_ir_k64(J, IR_KNUM, LJ_KSIMD(J, LJ_KSIMD_ABS)) -#define lj_ir_knum_neg(J) lj_ir_k64(J, IR_KNUM, LJ_KSIMD(J, LJ_KSIMD_NEG)) - -/* Access to constants. */ -LJ_FUNC void lj_ir_kvalue(lua_State *L, TValue *tv, const IRIns *ir); - -/* Convert IR operand types. */ -LJ_FUNC TRef LJ_FASTCALL lj_ir_tonumber(jit_State *J, TRef tr); -LJ_FUNC TRef LJ_FASTCALL lj_ir_tonum(jit_State *J, TRef tr); -LJ_FUNC TRef LJ_FASTCALL lj_ir_tostr(jit_State *J, TRef tr); - -/* Miscellaneous IR ops. */ -LJ_FUNC int lj_ir_numcmp(lua_Number a, lua_Number b, IROp op); -LJ_FUNC int lj_ir_strcmp(GCstr *a, GCstr *b, IROp op); -LJ_FUNC void lj_ir_rollback(jit_State *J, IRRef ref); - -/* Emit IR instructions with on-the-fly optimizations. */ -LJ_FUNC TRef LJ_FASTCALL lj_opt_fold(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_cse(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_cselim(jit_State *J, IRRef lim); - -/* Special return values for the fold functions. */ -enum { - NEXTFOLD, /* Couldn't fold, pass on. */ - RETRYFOLD, /* Retry fold with modified fins. */ - KINTFOLD, /* Return ref for int constant in fins->i. */ - FAILFOLD, /* Guard would always fail. */ - DROPFOLD, /* Guard eliminated. */ - MAX_FOLD -}; - -#define INTFOLD(k) ((J->fold.ins.i = (k)), (TRef)KINTFOLD) -#define INT64FOLD(k) (lj_ir_kint64(J, (k))) -#define CONDFOLD(cond) ((TRef)FAILFOLD + (TRef)(cond)) -#define LEFTFOLD (J->fold.ins.op1) -#define RIGHTFOLD (J->fold.ins.op2) -#define CSEFOLD (lj_opt_cse(J)) -#define EMITFOLD (lj_ir_emit(J)) - -/* Load/store forwarding. */ -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_aload(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_hload(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_uload(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_fload(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_xload(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_tab_len(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_fwd_hrefk(jit_State *J); -LJ_FUNC int LJ_FASTCALL lj_opt_fwd_href_nokey(jit_State *J); -LJ_FUNC int LJ_FASTCALL lj_opt_fwd_tptr(jit_State *J, IRRef lim); -LJ_FUNC int lj_opt_fwd_wasnonnil(jit_State *J, IROpT loadop, IRRef xref); - -/* Dead-store elimination. */ -LJ_FUNC TRef LJ_FASTCALL lj_opt_dse_ahstore(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_dse_ustore(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_dse_fstore(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_dse_xstore(jit_State *J); - -/* Narrowing. */ -LJ_FUNC TRef LJ_FASTCALL lj_opt_narrow_convert(jit_State *J); -LJ_FUNC TRef LJ_FASTCALL lj_opt_narrow_index(jit_State *J, TRef key); -LJ_FUNC TRef LJ_FASTCALL lj_opt_narrow_toint(jit_State *J, TRef tr); -LJ_FUNC TRef LJ_FASTCALL lj_opt_narrow_tobit(jit_State *J, TRef tr); -#if LJ_HASFFI -LJ_FUNC TRef LJ_FASTCALL lj_opt_narrow_cindex(jit_State *J, TRef key); -#endif -LJ_FUNC TRef lj_opt_narrow_arith(jit_State *J, TRef rb, TRef rc, - TValue *vb, TValue *vc, IROp op); -LJ_FUNC TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc); -LJ_FUNC TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc); -LJ_FUNC TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc); -LJ_FUNC IRType lj_opt_narrow_forl(jit_State *J, cTValue *forbase); - -/* Optimization passes. */ -LJ_FUNC void lj_opt_dce(jit_State *J); -LJ_FUNC int lj_opt_loop(jit_State *J); -#if LJ_SOFTFP || (LJ_32 && LJ_HASFFI) -LJ_FUNC void lj_opt_split(jit_State *J); -#else -#define lj_opt_split(J) UNUSED(J) -#endif -LJ_FUNC void lj_opt_sink(jit_State *J); - -#endif - -#endif diff --git a/deps/luajit/src/lj_jit.h b/deps/luajit/src/lj_jit.h deleted file mode 100644 index eb76547..0000000 --- a/deps/luajit/src/lj_jit.h +++ /dev/null @@ -1,417 +0,0 @@ -/* -** Common definitions for the JIT compiler. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_JIT_H -#define _LJ_JIT_H - -#include "lj_obj.h" -#include "lj_ir.h" - -/* JIT engine flags. */ -#define JIT_F_ON 0x00000001 - -/* CPU-specific JIT engine flags. */ -#if LJ_TARGET_X86ORX64 -#define JIT_F_CMOV 0x00000010 -#define JIT_F_SSE2 0x00000020 -#define JIT_F_SSE3 0x00000040 -#define JIT_F_SSE4_1 0x00000080 -#define JIT_F_P4 0x00000100 -#define JIT_F_PREFER_IMUL 0x00000200 -#define JIT_F_SPLIT_XMM 0x00000400 -#define JIT_F_LEA_AGU 0x00000800 - -/* Names for the CPU-specific flags. Must match the order above. */ -#define JIT_F_CPU_FIRST JIT_F_CMOV -#define JIT_F_CPUSTRING "\4CMOV\4SSE2\4SSE3\6SSE4.1\2P4\3AMD\2K8\4ATOM" -#elif LJ_TARGET_ARM -#define JIT_F_ARMV6_ 0x00000010 -#define JIT_F_ARMV6T2_ 0x00000020 -#define JIT_F_ARMV7 0x00000040 -#define JIT_F_VFPV2 0x00000080 -#define JIT_F_VFPV3 0x00000100 - -#define JIT_F_ARMV6 (JIT_F_ARMV6_|JIT_F_ARMV6T2_|JIT_F_ARMV7) -#define JIT_F_ARMV6T2 (JIT_F_ARMV6T2_|JIT_F_ARMV7) -#define JIT_F_VFP (JIT_F_VFPV2|JIT_F_VFPV3) - -/* Names for the CPU-specific flags. Must match the order above. */ -#define JIT_F_CPU_FIRST JIT_F_ARMV6_ -#define JIT_F_CPUSTRING "\5ARMv6\7ARMv6T2\5ARMv7\5VFPv2\5VFPv3" -#elif LJ_TARGET_PPC -#define JIT_F_SQRT 0x00000010 -#define JIT_F_ROUND 0x00000020 - -/* Names for the CPU-specific flags. Must match the order above. */ -#define JIT_F_CPU_FIRST JIT_F_SQRT -#define JIT_F_CPUSTRING "\4SQRT\5ROUND" -#elif LJ_TARGET_MIPS -#define JIT_F_MIPS32R2 0x00000010 - -/* Names for the CPU-specific flags. Must match the order above. */ -#define JIT_F_CPU_FIRST JIT_F_MIPS32R2 -#define JIT_F_CPUSTRING "\010MIPS32R2" -#else -#define JIT_F_CPU_FIRST 0 -#define JIT_F_CPUSTRING "" -#endif - -/* Optimization flags. */ -#define JIT_F_OPT_MASK 0x0fff0000 - -#define JIT_F_OPT_FOLD 0x00010000 -#define JIT_F_OPT_CSE 0x00020000 -#define JIT_F_OPT_DCE 0x00040000 -#define JIT_F_OPT_FWD 0x00080000 -#define JIT_F_OPT_DSE 0x00100000 -#define JIT_F_OPT_NARROW 0x00200000 -#define JIT_F_OPT_LOOP 0x00400000 -#define JIT_F_OPT_ABC 0x00800000 -#define JIT_F_OPT_SINK 0x01000000 -#define JIT_F_OPT_FUSE 0x02000000 - -/* Optimizations names for -O. Must match the order above. */ -#define JIT_F_OPT_FIRST JIT_F_OPT_FOLD -#define JIT_F_OPTSTRING \ - "\4fold\3cse\3dce\3fwd\3dse\6narrow\4loop\3abc\4sink\4fuse" - -/* Optimization levels set a fixed combination of flags. */ -#define JIT_F_OPT_0 0 -#define JIT_F_OPT_1 (JIT_F_OPT_FOLD|JIT_F_OPT_CSE|JIT_F_OPT_DCE) -#define JIT_F_OPT_2 (JIT_F_OPT_1|JIT_F_OPT_NARROW|JIT_F_OPT_LOOP) -#define JIT_F_OPT_3 (JIT_F_OPT_2|\ - JIT_F_OPT_FWD|JIT_F_OPT_DSE|JIT_F_OPT_ABC|JIT_F_OPT_SINK|JIT_F_OPT_FUSE) -#define JIT_F_OPT_DEFAULT JIT_F_OPT_3 - -#if LJ_TARGET_WINDOWS || LJ_64 -/* See: http://blogs.msdn.com/oldnewthing/archive/2003/10/08/55239.aspx */ -#define JIT_P_sizemcode_DEFAULT 64 -#else -/* Could go as low as 4K, but the mmap() overhead would be rather high. */ -#define JIT_P_sizemcode_DEFAULT 32 -#endif - -/* Optimization parameters and their defaults. Length is a char in octal! */ -#define JIT_PARAMDEF(_) \ - _(\010, maxtrace, 1000) /* Max. # of traces in cache. */ \ - _(\011, maxrecord, 4000) /* Max. # of recorded IR instructions. */ \ - _(\012, maxirconst, 500) /* Max. # of IR constants of a trace. */ \ - _(\007, maxside, 100) /* Max. # of side traces of a root trace. */ \ - _(\007, maxsnap, 500) /* Max. # of snapshots for a trace. */ \ - \ - _(\007, hotloop, 56) /* # of iter. to detect a hot loop/call. */ \ - _(\007, hotexit, 10) /* # of taken exits to start a side trace. */ \ - _(\007, tryside, 4) /* # of attempts to compile a side trace. */ \ - \ - _(\012, instunroll, 4) /* Max. unroll for instable loops. */ \ - _(\012, loopunroll, 15) /* Max. unroll for loop ops in side traces. */ \ - _(\012, callunroll, 3) /* Max. unroll for recursive calls. */ \ - _(\011, recunroll, 2) /* Min. unroll for true recursion. */ \ - \ - /* Size of each machine code area (in KBytes). */ \ - _(\011, sizemcode, JIT_P_sizemcode_DEFAULT) \ - /* Max. total size of all machine code areas (in KBytes). */ \ - _(\010, maxmcode, 512) \ - /* End of list. */ - -enum { -#define JIT_PARAMENUM(len, name, value) JIT_P_##name, -JIT_PARAMDEF(JIT_PARAMENUM) -#undef JIT_PARAMENUM - JIT_P__MAX -}; - -#define JIT_PARAMSTR(len, name, value) #len #name -#define JIT_P_STRING JIT_PARAMDEF(JIT_PARAMSTR) - -/* Trace compiler state. */ -typedef enum { - LJ_TRACE_IDLE, /* Trace compiler idle. */ - LJ_TRACE_ACTIVE = 0x10, - LJ_TRACE_RECORD, /* Bytecode recording active. */ - LJ_TRACE_START, /* New trace started. */ - LJ_TRACE_END, /* End of trace. */ - LJ_TRACE_ASM, /* Assemble trace. */ - LJ_TRACE_ERR /* Trace aborted with error. */ -} TraceState; - -/* Post-processing action. */ -typedef enum { - LJ_POST_NONE, /* No action. */ - LJ_POST_FIXCOMP, /* Fixup comparison and emit pending guard. */ - LJ_POST_FIXGUARD, /* Fixup and emit pending guard. */ - LJ_POST_FIXGUARDSNAP, /* Fixup and emit pending guard and snapshot. */ - LJ_POST_FIXBOOL, /* Fixup boolean result. */ - LJ_POST_FIXCONST, /* Fixup constant results. */ - LJ_POST_FFRETRY /* Suppress recording of retried fast functions. */ -} PostProc; - -/* Machine code type. */ -#if LJ_TARGET_X86ORX64 -typedef uint8_t MCode; -#else -typedef uint32_t MCode; -#endif - -/* Stack snapshot header. */ -typedef struct SnapShot { - uint16_t mapofs; /* Offset into snapshot map. */ - IRRef1 ref; /* First IR ref for this snapshot. */ - uint8_t nslots; /* Number of valid slots. */ - uint8_t topslot; /* Maximum frame extent. */ - uint8_t nent; /* Number of compressed entries. */ - uint8_t count; /* Count of taken exits for this snapshot. */ -} SnapShot; - -#define SNAPCOUNT_DONE 255 /* Already compiled and linked a side trace. */ - -/* Compressed snapshot entry. */ -typedef uint32_t SnapEntry; - -#define SNAP_FRAME 0x010000 /* Frame slot. */ -#define SNAP_CONT 0x020000 /* Continuation slot. */ -#define SNAP_NORESTORE 0x040000 /* No need to restore slot. */ -#define SNAP_SOFTFPNUM 0x080000 /* Soft-float number. */ -LJ_STATIC_ASSERT(SNAP_FRAME == TREF_FRAME); -LJ_STATIC_ASSERT(SNAP_CONT == TREF_CONT); - -#define SNAP(slot, flags, ref) (((SnapEntry)(slot) << 24) + (flags) + (ref)) -#define SNAP_TR(slot, tr) \ - (((SnapEntry)(slot) << 24) + ((tr) & (TREF_CONT|TREF_FRAME|TREF_REFMASK))) -#define SNAP_MKPC(pc) ((SnapEntry)u32ptr(pc)) -#define SNAP_MKFTSZ(ftsz) ((SnapEntry)(ftsz)) -#define snap_ref(sn) ((sn) & 0xffff) -#define snap_slot(sn) ((BCReg)((sn) >> 24)) -#define snap_isframe(sn) ((sn) & SNAP_FRAME) -#define snap_pc(sn) ((const BCIns *)(uintptr_t)(sn)) -#define snap_setref(sn, ref) (((sn) & (0xffff0000&~SNAP_NORESTORE)) | (ref)) - -/* Snapshot and exit numbers. */ -typedef uint32_t SnapNo; -typedef uint32_t ExitNo; - -/* Trace number. */ -typedef uint32_t TraceNo; /* Used to pass around trace numbers. */ -typedef uint16_t TraceNo1; /* Stored trace number. */ - -/* Type of link. ORDER LJ_TRLINK */ -typedef enum { - LJ_TRLINK_NONE, /* Incomplete trace. No link, yet. */ - LJ_TRLINK_ROOT, /* Link to other root trace. */ - LJ_TRLINK_LOOP, /* Loop to same trace. */ - LJ_TRLINK_TAILREC, /* Tail-recursion. */ - LJ_TRLINK_UPREC, /* Up-recursion. */ - LJ_TRLINK_DOWNREC, /* Down-recursion. */ - LJ_TRLINK_INTERP, /* Fallback to interpreter. */ - LJ_TRLINK_RETURN /* Return to interpreter. */ -} TraceLink; - -/* Trace object. */ -typedef struct GCtrace { - GCHeader; - uint8_t topslot; /* Top stack slot already checked to be allocated. */ - uint8_t linktype; /* Type of link. */ - IRRef nins; /* Next IR instruction. Biased with REF_BIAS. */ - GCRef gclist; - IRIns *ir; /* IR instructions/constants. Biased with REF_BIAS. */ - IRRef nk; /* Lowest IR constant. Biased with REF_BIAS. */ - uint16_t nsnap; /* Number of snapshots. */ - uint16_t nsnapmap; /* Number of snapshot map elements. */ - SnapShot *snap; /* Snapshot array. */ - SnapEntry *snapmap; /* Snapshot map. */ - GCRef startpt; /* Starting prototype. */ - MRef startpc; /* Bytecode PC of starting instruction. */ - BCIns startins; /* Original bytecode of starting instruction. */ - MSize szmcode; /* Size of machine code. */ - MCode *mcode; /* Start of machine code. */ - MSize mcloop; /* Offset of loop start in machine code. */ - uint16_t nchild; /* Number of child traces (root trace only). */ - uint16_t spadjust; /* Stack pointer adjustment (offset in bytes). */ - TraceNo1 traceno; /* Trace number. */ - TraceNo1 link; /* Linked trace (or self for loops). */ - TraceNo1 root; /* Root trace of side trace (or 0 for root traces). */ - TraceNo1 nextroot; /* Next root trace for same prototype. */ - TraceNo1 nextside; /* Next side trace of same root trace. */ - uint8_t sinktags; /* Trace has SINK tags. */ - uint8_t unused1; -#ifdef LUAJIT_USE_GDBJIT - void *gdbjit_entry; /* GDB JIT entry. */ -#endif -} GCtrace; - -#define gco2trace(o) check_exp((o)->gch.gct == ~LJ_TTRACE, (GCtrace *)(o)) -#define traceref(J, n) \ - check_exp((n)>0 && (MSize)(n)sizetrace, (GCtrace *)gcref(J->trace[(n)])) - -LJ_STATIC_ASSERT(offsetof(GChead, gclist) == offsetof(GCtrace, gclist)); - -static LJ_AINLINE MSize snap_nextofs(GCtrace *T, SnapShot *snap) -{ - if (snap+1 == &T->snap[T->nsnap]) - return T->nsnapmap; - else - return (snap+1)->mapofs; -} - -/* Round-robin penalty cache for bytecodes leading to aborted traces. */ -typedef struct HotPenalty { - MRef pc; /* Starting bytecode PC. */ - uint16_t val; /* Penalty value, i.e. hotcount start. */ - uint16_t reason; /* Abort reason (really TraceErr). */ -} HotPenalty; - -#define PENALTY_SLOTS 64 /* Penalty cache slot. Must be a power of 2. */ -#define PENALTY_MIN (36*2) /* Minimum penalty value. */ -#define PENALTY_MAX 60000 /* Maximum penalty value. */ -#define PENALTY_RNDBITS 4 /* # of random bits to add to penalty value. */ - -/* Round-robin backpropagation cache for narrowing conversions. */ -typedef struct BPropEntry { - IRRef1 key; /* Key: original reference. */ - IRRef1 val; /* Value: reference after conversion. */ - IRRef mode; /* Mode for this entry (currently IRCONV_*). */ -} BPropEntry; - -/* Number of slots for the backpropagation cache. Must be a power of 2. */ -#define BPROP_SLOTS 16 - -/* Scalar evolution analysis cache. */ -typedef struct ScEvEntry { - MRef pc; /* Bytecode PC of FORI. */ - IRRef1 idx; /* Index reference. */ - IRRef1 start; /* Constant start reference. */ - IRRef1 stop; /* Constant stop reference. */ - IRRef1 step; /* Constant step reference. */ - IRType1 t; /* Scalar type. */ - uint8_t dir; /* Direction. 1: +, 0: -. */ -} ScEvEntry; - -/* 128 bit SIMD constants. */ -enum { - LJ_KSIMD_ABS, - LJ_KSIMD_NEG, - LJ_KSIMD__MAX -}; - -/* Get 16 byte aligned pointer to SIMD constant. */ -#define LJ_KSIMD(J, n) \ - ((TValue *)(((intptr_t)&J->ksimd[2*(n)] + 15) & ~(intptr_t)15)) - -/* Set/reset flag to activate the SPLIT pass for the current trace. */ -#if LJ_SOFTFP || (LJ_32 && LJ_HASFFI) -#define lj_needsplit(J) (J->needsplit = 1) -#define lj_resetsplit(J) (J->needsplit = 0) -#else -#define lj_needsplit(J) UNUSED(J) -#define lj_resetsplit(J) UNUSED(J) -#endif - -/* Fold state is used to fold instructions on-the-fly. */ -typedef struct FoldState { - IRIns ins; /* Currently emitted instruction. */ - IRIns left; /* Instruction referenced by left operand. */ - IRIns right; /* Instruction referenced by right operand. */ -} FoldState; - -/* JIT compiler state. */ -typedef struct jit_State { - GCtrace cur; /* Current trace. */ - - lua_State *L; /* Current Lua state. */ - const BCIns *pc; /* Current PC. */ - GCfunc *fn; /* Current function. */ - GCproto *pt; /* Current prototype. */ - TRef *base; /* Current frame base, points into J->slots. */ - - uint32_t flags; /* JIT engine flags. */ - BCReg maxslot; /* Relative to baseslot. */ - BCReg baseslot; /* Current frame base, offset into J->slots. */ - - uint8_t mergesnap; /* Allowed to merge with next snapshot. */ - uint8_t needsnap; /* Need snapshot before recording next bytecode. */ - IRType1 guardemit; /* Accumulated IRT_GUARD for emitted instructions. */ - uint8_t bcskip; /* Number of bytecode instructions to skip. */ - - FoldState fold; /* Fold state. */ - - const BCIns *bc_min; /* Start of allowed bytecode range for root trace. */ - MSize bc_extent; /* Extent of the range. */ - - TraceState state; /* Trace compiler state. */ - - int32_t instunroll; /* Unroll counter for instable loops. */ - int32_t loopunroll; /* Unroll counter for loop ops in side traces. */ - int32_t tailcalled; /* Number of successive tailcalls. */ - int32_t framedepth; /* Current frame depth. */ - int32_t retdepth; /* Return frame depth (count of RETF). */ - - MRef k64; /* Pointer to chained array of 64 bit constants. */ - TValue ksimd[LJ_KSIMD__MAX*2+1]; /* 16 byte aligned SIMD constants. */ - - IRIns *irbuf; /* Temp. IR instruction buffer. Biased with REF_BIAS. */ - IRRef irtoplim; /* Upper limit of instuction buffer (biased). */ - IRRef irbotlim; /* Lower limit of instuction buffer (biased). */ - IRRef loopref; /* Last loop reference or ref of final LOOP (or 0). */ - - MSize sizesnap; /* Size of temp. snapshot buffer. */ - SnapShot *snapbuf; /* Temp. snapshot buffer. */ - SnapEntry *snapmapbuf; /* Temp. snapshot map buffer. */ - MSize sizesnapmap; /* Size of temp. snapshot map buffer. */ - - PostProc postproc; /* Required post-processing after execution. */ -#if LJ_SOFTFP || (LJ_32 && LJ_HASFFI) - int needsplit; /* Need SPLIT pass. */ -#endif - - GCRef *trace; /* Array of traces. */ - TraceNo freetrace; /* Start of scan for next free trace. */ - MSize sizetrace; /* Size of trace array. */ - - IRRef1 chain[IR__MAX]; /* IR instruction skip-list chain anchors. */ - TRef slot[LJ_MAX_JSLOTS+LJ_STACK_EXTRA]; /* Stack slot map. */ - - int32_t param[JIT_P__MAX]; /* JIT engine parameters. */ - - MCode *exitstubgroup[LJ_MAX_EXITSTUBGR]; /* Exit stub group addresses. */ - - HotPenalty penalty[PENALTY_SLOTS]; /* Penalty slots. */ - uint32_t penaltyslot; /* Round-robin index into penalty slots. */ - uint32_t prngstate; /* PRNG state. */ - - BPropEntry bpropcache[BPROP_SLOTS]; /* Backpropagation cache slots. */ - uint32_t bpropslot; /* Round-robin index into bpropcache slots. */ - - ScEvEntry scev; /* Scalar evolution analysis cache slots. */ - - const BCIns *startpc; /* Bytecode PC of starting instruction. */ - TraceNo parent; /* Parent of current side trace (0 for root traces). */ - ExitNo exitno; /* Exit number in parent of current side trace. */ - - BCIns *patchpc; /* PC for pending re-patch. */ - BCIns patchins; /* Instruction for pending re-patch. */ - - int mcprot; /* Protection of current mcode area. */ - MCode *mcarea; /* Base of current mcode area. */ - MCode *mctop; /* Top of current mcode area. */ - MCode *mcbot; /* Bottom of current mcode area. */ - size_t szmcarea; /* Size of current mcode area. */ - size_t szallmcarea; /* Total size of all allocated mcode areas. */ - - TValue errinfo; /* Additional info element for trace errors. */ -} -#if LJ_TARGET_ARM -LJ_ALIGN(16) /* For DISPATCH-relative addresses in assembler part. */ -#endif -jit_State; - -/* Trivial PRNG e.g. used for penalty randomization. */ -static LJ_AINLINE uint32_t LJ_PRNG_BITS(jit_State *J, int bits) -{ - /* Yes, this LCG is very weak, but that doesn't matter for our use case. */ - J->prngstate = J->prngstate * 1103515245 + 12345; - return J->prngstate >> (32-bits); -} - -#endif diff --git a/deps/luajit/src/lj_lex.c b/deps/luajit/src/lj_lex.c deleted file mode 100644 index e1dc3cd..0000000 --- a/deps/luajit/src/lj_lex.c +++ /dev/null @@ -1,482 +0,0 @@ -/* -** Lexical analyzer. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_lex_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#if LJ_HASFFI -#include "lj_tab.h" -#include "lj_ctype.h" -#include "lj_cdata.h" -#include "lualib.h" -#endif -#include "lj_state.h" -#include "lj_lex.h" -#include "lj_parse.h" -#include "lj_char.h" -#include "lj_strscan.h" - -/* Lua lexer token names. */ -static const char *const tokennames[] = { -#define TKSTR1(name) #name, -#define TKSTR2(name, sym) #sym, -TKDEF(TKSTR1, TKSTR2) -#undef TKSTR1 -#undef TKSTR2 - NULL -}; - -/* -- Buffer handling ----------------------------------------------------- */ - -#define char2int(c) ((int)(uint8_t)(c)) -#define next(ls) \ - (ls->current = (ls->n--) > 0 ? char2int(*ls->p++) : fillbuf(ls)) -#define save_and_next(ls) (save(ls, ls->current), next(ls)) -#define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') -#define END_OF_STREAM (-1) - -static int fillbuf(LexState *ls) -{ - size_t sz; - const char *buf = ls->rfunc(ls->L, ls->rdata, &sz); - if (buf == NULL || sz == 0) return END_OF_STREAM; - ls->n = (MSize)sz - 1; - ls->p = buf; - return char2int(*(ls->p++)); -} - -static LJ_NOINLINE void save_grow(LexState *ls, int c) -{ - MSize newsize; - if (ls->sb.sz >= LJ_MAX_STR/2) - lj_lex_error(ls, 0, LJ_ERR_XELEM); - newsize = ls->sb.sz * 2; - lj_str_resizebuf(ls->L, &ls->sb, newsize); - ls->sb.buf[ls->sb.n++] = (char)c; -} - -static LJ_AINLINE void save(LexState *ls, int c) -{ - if (LJ_UNLIKELY(ls->sb.n + 1 > ls->sb.sz)) - save_grow(ls, c); - else - ls->sb.buf[ls->sb.n++] = (char)c; -} - -static void inclinenumber(LexState *ls) -{ - int old = ls->current; - lua_assert(currIsNewline(ls)); - next(ls); /* skip `\n' or `\r' */ - if (currIsNewline(ls) && ls->current != old) - next(ls); /* skip `\n\r' or `\r\n' */ - if (++ls->linenumber >= LJ_MAX_LINE) - lj_lex_error(ls, ls->token, LJ_ERR_XLINES); -} - -/* -- Scanner for terminals ----------------------------------------------- */ - -/* Parse a number literal. */ -static void lex_number(LexState *ls, TValue *tv) -{ - StrScanFmt fmt; - int c, xp = 'e'; - lua_assert(lj_char_isdigit(ls->current)); - if ((c = ls->current) == '0') { - save_and_next(ls); - if ((ls->current | 0x20) == 'x') xp = 'p'; - } - while (lj_char_isident(ls->current) || ls->current == '.' || - ((ls->current == '-' || ls->current == '+') && (c | 0x20) == xp)) { - c = ls->current; - save_and_next(ls); - } - save(ls, '\0'); - fmt = lj_strscan_scan((const uint8_t *)ls->sb.buf, tv, - (LJ_DUALNUM ? STRSCAN_OPT_TOINT : STRSCAN_OPT_TONUM) | - (LJ_HASFFI ? (STRSCAN_OPT_LL|STRSCAN_OPT_IMAG) : 0)); - if (LJ_DUALNUM && fmt == STRSCAN_INT) { - setitype(tv, LJ_TISNUM); - } else if (fmt == STRSCAN_NUM) { - /* Already in correct format. */ -#if LJ_HASFFI - } else if (fmt != STRSCAN_ERROR) { - lua_State *L = ls->L; - GCcdata *cd; - lua_assert(fmt == STRSCAN_I64 || fmt == STRSCAN_U64 || fmt == STRSCAN_IMAG); - if (!ctype_ctsG(G(L))) { - ptrdiff_t oldtop = savestack(L, L->top); - luaopen_ffi(L); /* Load FFI library on-demand. */ - L->top = restorestack(L, oldtop); - } - if (fmt == STRSCAN_IMAG) { - cd = lj_cdata_new_(L, CTID_COMPLEX_DOUBLE, 2*sizeof(double)); - ((double *)cdataptr(cd))[0] = 0; - ((double *)cdataptr(cd))[1] = numV(tv); - } else { - cd = lj_cdata_new_(L, fmt==STRSCAN_I64 ? CTID_INT64 : CTID_UINT64, 8); - *(uint64_t *)cdataptr(cd) = tv->u64; - } - lj_parse_keepcdata(ls, tv, cd); -#endif - } else { - lua_assert(fmt == STRSCAN_ERROR); - lj_lex_error(ls, TK_number, LJ_ERR_XNUMBER); - } -} - -static int skip_sep(LexState *ls) -{ - int count = 0; - int s = ls->current; - lua_assert(s == '[' || s == ']'); - save_and_next(ls); - while (ls->current == '=') { - save_and_next(ls); - count++; - } - return (ls->current == s) ? count : (-count) - 1; -} - -static void read_long_string(LexState *ls, TValue *tv, int sep) -{ - save_and_next(ls); /* skip 2nd `[' */ - if (currIsNewline(ls)) /* string starts with a newline? */ - inclinenumber(ls); /* skip it */ - for (;;) { - switch (ls->current) { - case END_OF_STREAM: - lj_lex_error(ls, TK_eof, tv ? LJ_ERR_XLSTR : LJ_ERR_XLCOM); - break; - case ']': - if (skip_sep(ls) == sep) { - save_and_next(ls); /* skip 2nd `]' */ - goto endloop; - } - break; - case '\n': - case '\r': - save(ls, '\n'); - inclinenumber(ls); - if (!tv) lj_str_resetbuf(&ls->sb); /* avoid wasting space */ - break; - default: - if (tv) save_and_next(ls); - else next(ls); - break; - } - } endloop: - if (tv) { - GCstr *str = lj_parse_keepstr(ls, ls->sb.buf + (2 + (MSize)sep), - ls->sb.n - 2*(2 + (MSize)sep)); - setstrV(ls->L, tv, str); - } -} - -static void read_string(LexState *ls, int delim, TValue *tv) -{ - save_and_next(ls); - while (ls->current != delim) { - switch (ls->current) { - case END_OF_STREAM: - lj_lex_error(ls, TK_eof, LJ_ERR_XSTR); - continue; - case '\n': - case '\r': - lj_lex_error(ls, TK_string, LJ_ERR_XSTR); - continue; - case '\\': { - int c = next(ls); /* Skip the '\\'. */ - switch (c) { - case 'a': c = '\a'; break; - case 'b': c = '\b'; break; - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - case 'x': /* Hexadecimal escape '\xXX'. */ - c = (next(ls) & 15u) << 4; - if (!lj_char_isdigit(ls->current)) { - if (!lj_char_isxdigit(ls->current)) goto err_xesc; - c += 9 << 4; - } - c += (next(ls) & 15u); - if (!lj_char_isdigit(ls->current)) { - if (!lj_char_isxdigit(ls->current)) goto err_xesc; - c += 9; - } - break; - case 'z': /* Skip whitespace. */ - next(ls); - while (lj_char_isspace(ls->current)) - if (currIsNewline(ls)) inclinenumber(ls); else next(ls); - continue; - case '\n': case '\r': save(ls, '\n'); inclinenumber(ls); continue; - case '\\': case '\"': case '\'': break; - case END_OF_STREAM: continue; - default: - if (!lj_char_isdigit(c)) - goto err_xesc; - c -= '0'; /* Decimal escape '\ddd'. */ - if (lj_char_isdigit(next(ls))) { - c = c*10 + (ls->current - '0'); - if (lj_char_isdigit(next(ls))) { - c = c*10 + (ls->current - '0'); - if (c > 255) { - err_xesc: - lj_lex_error(ls, TK_string, LJ_ERR_XESC); - } - next(ls); - } - } - save(ls, c); - continue; - } - save(ls, c); - next(ls); - continue; - } - default: - save_and_next(ls); - break; - } - } - save_and_next(ls); /* skip delimiter */ - setstrV(ls->L, tv, lj_parse_keepstr(ls, ls->sb.buf + 1, ls->sb.n - 2)); -} - -/* -- Main lexical scanner ------------------------------------------------ */ - -static int llex(LexState *ls, TValue *tv) -{ - lj_str_resetbuf(&ls->sb); - for (;;) { - if (lj_char_isident(ls->current)) { - GCstr *s; - if (lj_char_isdigit(ls->current)) { /* Numeric literal. */ - lex_number(ls, tv); - return TK_number; - } - /* Identifier or reserved word. */ - do { - save_and_next(ls); - } while (lj_char_isident(ls->current)); - s = lj_parse_keepstr(ls, ls->sb.buf, ls->sb.n); - setstrV(ls->L, tv, s); - if (s->reserved > 0) /* Reserved word? */ - return TK_OFS + s->reserved; - return TK_name; - } - switch (ls->current) { - case '\n': - case '\r': - inclinenumber(ls); - continue; - case ' ': - case '\t': - case '\v': - case '\f': - next(ls); - continue; - case '-': - next(ls); - if (ls->current != '-') return '-'; - /* else is a comment */ - next(ls); - if (ls->current == '[') { - int sep = skip_sep(ls); - lj_str_resetbuf(&ls->sb); /* `skip_sep' may dirty the buffer */ - if (sep >= 0) { - read_long_string(ls, NULL, sep); /* long comment */ - lj_str_resetbuf(&ls->sb); - continue; - } - } - /* else short comment */ - while (!currIsNewline(ls) && ls->current != END_OF_STREAM) - next(ls); - continue; - case '[': { - int sep = skip_sep(ls); - if (sep >= 0) { - read_long_string(ls, tv, sep); - return TK_string; - } else if (sep == -1) { - return '['; - } else { - lj_lex_error(ls, TK_string, LJ_ERR_XLDELIM); - continue; - } - } - case '=': - next(ls); - if (ls->current != '=') return '='; else { next(ls); return TK_eq; } - case '<': - next(ls); - if (ls->current != '=') return '<'; else { next(ls); return TK_le; } - case '>': - next(ls); - if (ls->current != '=') return '>'; else { next(ls); return TK_ge; } - case '~': - next(ls); - if (ls->current != '=') return '~'; else { next(ls); return TK_ne; } - case ':': - next(ls); - if (ls->current != ':') return ':'; else { next(ls); return TK_label; } - case '"': - case '\'': - read_string(ls, ls->current, tv); - return TK_string; - case '.': - save_and_next(ls); - if (ls->current == '.') { - next(ls); - if (ls->current == '.') { - next(ls); - return TK_dots; /* ... */ - } - return TK_concat; /* .. */ - } else if (!lj_char_isdigit(ls->current)) { - return '.'; - } else { - lex_number(ls, tv); - return TK_number; - } - case END_OF_STREAM: - return TK_eof; - default: { - int c = ls->current; - next(ls); - return c; /* Single-char tokens (+ - / ...). */ - } - } - } -} - -/* -- Lexer API ----------------------------------------------------------- */ - -/* Setup lexer state. */ -int lj_lex_setup(lua_State *L, LexState *ls) -{ - int header = 0; - ls->L = L; - ls->fs = NULL; - ls->n = 0; - ls->p = NULL; - ls->vstack = NULL; - ls->sizevstack = 0; - ls->vtop = 0; - ls->bcstack = NULL; - ls->sizebcstack = 0; - ls->token = 0; - ls->lookahead = TK_eof; /* No look-ahead token. */ - ls->linenumber = 1; - ls->lastline = 1; - lj_str_resizebuf(ls->L, &ls->sb, LJ_MIN_SBUF); - next(ls); /* Read-ahead first char. */ - if (ls->current == 0xef && ls->n >= 2 && char2int(ls->p[0]) == 0xbb && - char2int(ls->p[1]) == 0xbf) { /* Skip UTF-8 BOM (if buffered). */ - ls->n -= 2; - ls->p += 2; - next(ls); - header = 1; - } - if (ls->current == '#') { /* Skip POSIX #! header line. */ - do { - next(ls); - if (ls->current == END_OF_STREAM) return 0; - } while (!currIsNewline(ls)); - inclinenumber(ls); - header = 1; - } - if (ls->current == LUA_SIGNATURE[0]) { /* Bytecode dump. */ - if (header) { - /* - ** Loading bytecode with an extra header is disabled for security - ** reasons. This may circumvent the usual check for bytecode vs. - ** Lua code by looking at the first char. Since this is a potential - ** security violation no attempt is made to echo the chunkname either. - */ - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_BCBAD)); - lj_err_throw(L, LUA_ERRSYNTAX); - } - return 1; - } - return 0; -} - -/* Cleanup lexer state. */ -void lj_lex_cleanup(lua_State *L, LexState *ls) -{ - global_State *g = G(L); - lj_mem_freevec(g, ls->bcstack, ls->sizebcstack, BCInsLine); - lj_mem_freevec(g, ls->vstack, ls->sizevstack, VarInfo); - lj_str_freebuf(g, &ls->sb); -} - -void lj_lex_next(LexState *ls) -{ - ls->lastline = ls->linenumber; - if (LJ_LIKELY(ls->lookahead == TK_eof)) { /* No lookahead token? */ - ls->token = llex(ls, &ls->tokenval); /* Get next token. */ - } else { /* Otherwise return lookahead token. */ - ls->token = ls->lookahead; - ls->lookahead = TK_eof; - ls->tokenval = ls->lookaheadval; - } -} - -LexToken lj_lex_lookahead(LexState *ls) -{ - lua_assert(ls->lookahead == TK_eof); - ls->lookahead = llex(ls, &ls->lookaheadval); - return ls->lookahead; -} - -const char *lj_lex_token2str(LexState *ls, LexToken token) -{ - if (token > TK_OFS) - return tokennames[token-TK_OFS-1]; - else if (!lj_char_iscntrl(token)) - return lj_str_pushf(ls->L, "%c", token); - else - return lj_str_pushf(ls->L, "char(%d)", token); -} - -void lj_lex_error(LexState *ls, LexToken token, ErrMsg em, ...) -{ - const char *tok; - va_list argp; - if (token == 0) { - tok = NULL; - } else if (token == TK_name || token == TK_string || token == TK_number) { - save(ls, '\0'); - tok = ls->sb.buf; - } else { - tok = lj_lex_token2str(ls, token); - } - va_start(argp, em); - lj_err_lex(ls->L, ls->chunkname, tok, ls->linenumber, em, argp); - va_end(argp); -} - -void lj_lex_init(lua_State *L) -{ - uint32_t i; - for (i = 0; i < TK_RESERVED; i++) { - GCstr *s = lj_str_newz(L, tokennames[i]); - fixstring(s); /* Reserved words are never collected. */ - s->reserved = (uint8_t)(i+1); - } -} - diff --git a/deps/luajit/src/lj_lex.h b/deps/luajit/src/lj_lex.h deleted file mode 100644 index fe01768..0000000 --- a/deps/luajit/src/lj_lex.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -** Lexical analyzer. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_LEX_H -#define _LJ_LEX_H - -#include - -#include "lj_obj.h" -#include "lj_err.h" - -/* Lua lexer tokens. */ -#define TKDEF(_, __) \ - _(and) _(break) _(do) _(else) _(elseif) _(end) _(false) \ - _(for) _(function) _(goto) _(if) _(in) _(local) _(nil) _(not) _(or) \ - _(repeat) _(return) _(then) _(true) _(until) _(while) \ - __(concat, ..) __(dots, ...) __(eq, ==) __(ge, >=) __(le, <=) __(ne, ~=) \ - __(label, ::) __(number, ) __(name, ) __(string, ) \ - __(eof, ) - -enum { - TK_OFS = 256, -#define TKENUM1(name) TK_##name, -#define TKENUM2(name, sym) TK_##name, -TKDEF(TKENUM1, TKENUM2) -#undef TKENUM1 -#undef TKENUM2 - TK_RESERVED = TK_while - TK_OFS -}; - -typedef int LexToken; - -/* Combined bytecode ins/line. Only used during bytecode generation. */ -typedef struct BCInsLine { - BCIns ins; /* Bytecode instruction. */ - BCLine line; /* Line number for this bytecode. */ -} BCInsLine; - -/* Info for local variables. Only used during bytecode generation. */ -typedef struct VarInfo { - GCRef name; /* Local variable name or goto/label name. */ - BCPos startpc; /* First point where the local variable is active. */ - BCPos endpc; /* First point where the local variable is dead. */ - uint8_t slot; /* Variable slot. */ - uint8_t info; /* Variable/goto/label info. */ -} VarInfo; - -/* Lua lexer state. */ -typedef struct LexState { - struct FuncState *fs; /* Current FuncState. Defined in lj_parse.c. */ - struct lua_State *L; /* Lua state. */ - TValue tokenval; /* Current token value. */ - TValue lookaheadval; /* Lookahead token value. */ - int current; /* Current character (charint). */ - LexToken token; /* Current token. */ - LexToken lookahead; /* Lookahead token. */ - MSize n; /* Bytes left in input buffer. */ - const char *p; /* Current position in input buffer. */ - SBuf sb; /* String buffer for tokens. */ - lua_Reader rfunc; /* Reader callback. */ - void *rdata; /* Reader callback data. */ - BCLine linenumber; /* Input line counter. */ - BCLine lastline; /* Line of last token. */ - GCstr *chunkname; /* Current chunk name (interned string). */ - const char *chunkarg; /* Chunk name argument. */ - const char *mode; /* Allow loading bytecode (b) and/or source text (t). */ - VarInfo *vstack; /* Stack for names and extents of local variables. */ - MSize sizevstack; /* Size of variable stack. */ - MSize vtop; /* Top of variable stack. */ - BCInsLine *bcstack; /* Stack for bytecode instructions/line numbers. */ - MSize sizebcstack; /* Size of bytecode stack. */ - uint32_t level; /* Syntactical nesting level. */ -} LexState; - -LJ_FUNC int lj_lex_setup(lua_State *L, LexState *ls); -LJ_FUNC void lj_lex_cleanup(lua_State *L, LexState *ls); -LJ_FUNC void lj_lex_next(LexState *ls); -LJ_FUNC LexToken lj_lex_lookahead(LexState *ls); -LJ_FUNC const char *lj_lex_token2str(LexState *ls, LexToken token); -LJ_FUNC_NORET void lj_lex_error(LexState *ls, LexToken token, ErrMsg em, ...); -LJ_FUNC void lj_lex_init(lua_State *L); - -#endif diff --git a/deps/luajit/src/lj_lib.c b/deps/luajit/src/lj_lib.c deleted file mode 100644 index 856685e..0000000 --- a/deps/luajit/src/lj_lib.c +++ /dev/null @@ -1,258 +0,0 @@ -/* -** Library function support. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_lib_c -#define LUA_CORE - -#include "lauxlib.h" - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_func.h" -#include "lj_bc.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_strscan.h" -#include "lj_lib.h" - -/* -- Library initialization ---------------------------------------------- */ - -static GCtab *lib_create_table(lua_State *L, const char *libname, int hsize) -{ - if (libname) { - luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 16); - lua_getfield(L, -1, libname); - if (!tvistab(L->top-1)) { - L->top--; - if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, hsize) != NULL) - lj_err_callerv(L, LJ_ERR_BADMODN, libname); - settabV(L, L->top, tabV(L->top-1)); - L->top++; - lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */ - } - L->top--; - settabV(L, L->top-1, tabV(L->top)); - } else { - lua_createtable(L, 0, hsize); - } - return tabV(L->top-1); -} - -void lj_lib_register(lua_State *L, const char *libname, - const uint8_t *p, const lua_CFunction *cf) -{ - GCtab *env = tabref(L->env); - GCfunc *ofn = NULL; - int ffid = *p++; - BCIns *bcff = &L2GG(L)->bcff[*p++]; - GCtab *tab = lib_create_table(L, libname, *p++); - ptrdiff_t tpos = L->top - L->base; - - /* Avoid barriers further down. */ - lj_gc_anybarriert(L, tab); - tab->nomm = 0; - - for (;;) { - uint32_t tag = *p++; - MSize len = tag & LIBINIT_LENMASK; - tag &= LIBINIT_TAGMASK; - if (tag != LIBINIT_STRING) { - const char *name; - MSize nuv = (MSize)(L->top - L->base - tpos); - GCfunc *fn = lj_func_newC(L, nuv, env); - if (nuv) { - L->top = L->base + tpos; - memcpy(fn->c.upvalue, L->top, sizeof(TValue)*nuv); - } - fn->c.ffid = (uint8_t)(ffid++); - name = (const char *)p; - p += len; - if (tag == LIBINIT_CF) - setmref(fn->c.pc, &G(L)->bc_cfunc_int); - else - setmref(fn->c.pc, bcff++); - if (tag == LIBINIT_ASM_) - fn->c.f = ofn->c.f; /* Copy handler from previous function. */ - else - fn->c.f = *cf++; /* Get cf or handler from C function table. */ - if (len) { - /* NOBARRIER: See above for common barrier. */ - setfuncV(L, lj_tab_setstr(L, tab, lj_str_new(L, name, len)), fn); - } - ofn = fn; - } else { - switch (tag | len) { - case LIBINIT_SET: - L->top -= 2; - if (tvisstr(L->top+1) && strV(L->top+1)->len == 0) - env = tabV(L->top); - else /* NOBARRIER: See above for common barrier. */ - copyTV(L, lj_tab_set(L, tab, L->top+1), L->top); - break; - case LIBINIT_NUMBER: - memcpy(&L->top->n, p, sizeof(double)); - L->top++; - p += sizeof(double); - break; - case LIBINIT_COPY: - copyTV(L, L->top, L->top - *p++); - L->top++; - break; - case LIBINIT_LASTCL: - setfuncV(L, L->top++, ofn); - break; - case LIBINIT_FFID: - ffid++; - break; - case LIBINIT_END: - return; - default: - setstrV(L, L->top++, lj_str_new(L, (const char *)p, len)); - p += len; - break; - } - } - } -} - -/* -- Type checks --------------------------------------------------------- */ - -TValue *lj_lib_checkany(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (o >= L->top) - lj_err_arg(L, narg, LJ_ERR_NOVAL); - return o; -} - -GCstr *lj_lib_checkstr(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (o < L->top) { - if (LJ_LIKELY(tvisstr(o))) { - return strV(o); - } else if (tvisnumber(o)) { - GCstr *s = lj_str_fromnumber(L, o); - setstrV(L, o, s); - return s; - } - } - lj_err_argt(L, narg, LUA_TSTRING); - return NULL; /* unreachable */ -} - -GCstr *lj_lib_optstr(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - return (o < L->top && !tvisnil(o)) ? lj_lib_checkstr(L, narg) : NULL; -} - -#if LJ_DUALNUM -void lj_lib_checknumber(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && lj_strscan_numberobj(o))) - lj_err_argt(L, narg, LUA_TNUMBER); -} -#endif - -lua_Number lj_lib_checknum(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && - (tvisnumber(o) || (tvisstr(o) && lj_strscan_num(strV(o), o))))) - lj_err_argt(L, narg, LUA_TNUMBER); - if (LJ_UNLIKELY(tvisint(o))) { - lua_Number n = (lua_Number)intV(o); - setnumV(o, n); - return n; - } else { - return numV(o); - } -} - -int32_t lj_lib_checkint(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && lj_strscan_numberobj(o))) - lj_err_argt(L, narg, LUA_TNUMBER); - if (LJ_LIKELY(tvisint(o))) { - return intV(o); - } else { - int32_t i = lj_num2int(numV(o)); - if (LJ_DUALNUM) setintV(o, i); - return i; - } -} - -int32_t lj_lib_optint(lua_State *L, int narg, int32_t def) -{ - TValue *o = L->base + narg-1; - return (o < L->top && !tvisnil(o)) ? lj_lib_checkint(L, narg) : def; -} - -int32_t lj_lib_checkbit(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && lj_strscan_numberobj(o))) - lj_err_argt(L, narg, LUA_TNUMBER); - if (LJ_LIKELY(tvisint(o))) { - return intV(o); - } else { - int32_t i = lj_num2bit(numV(o)); - if (LJ_DUALNUM) setintV(o, i); - return i; - } -} - -GCfunc *lj_lib_checkfunc(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && tvisfunc(o))) - lj_err_argt(L, narg, LUA_TFUNCTION); - return funcV(o); -} - -GCtab *lj_lib_checktab(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (!(o < L->top && tvistab(o))) - lj_err_argt(L, narg, LUA_TTABLE); - return tabV(o); -} - -GCtab *lj_lib_checktabornil(lua_State *L, int narg) -{ - TValue *o = L->base + narg-1; - if (o < L->top) { - if (tvistab(o)) - return tabV(o); - else if (tvisnil(o)) - return NULL; - } - lj_err_arg(L, narg, LJ_ERR_NOTABN); - return NULL; /* unreachable */ -} - -int lj_lib_checkopt(lua_State *L, int narg, int def, const char *lst) -{ - GCstr *s = def >= 0 ? lj_lib_optstr(L, narg) : lj_lib_checkstr(L, narg); - if (s) { - const char *opt = strdata(s); - MSize len = s->len; - int i; - for (i = 0; *(const uint8_t *)lst; i++) { - if (*(const uint8_t *)lst == len && memcmp(opt, lst+1, len) == 0) - return i; - lst += 1+*(const uint8_t *)lst; - } - lj_err_argv(L, narg, LJ_ERR_INVOPTM, opt); - } - return def; -} - diff --git a/deps/luajit/src/lj_lib.h b/deps/luajit/src/lj_lib.h deleted file mode 100644 index 9320f34..0000000 --- a/deps/luajit/src/lj_lib.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -** Library function support. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_LIB_H -#define _LJ_LIB_H - -#include "lj_obj.h" - -/* -** A fallback handler is called by the assembler VM if the fast path fails: -** -** - too few arguments: unrecoverable. -** - wrong argument type: recoverable, if coercion succeeds. -** - bad argument value: unrecoverable. -** - stack overflow: recoverable, if stack reallocation succeeds. -** - extra handling: recoverable. -** -** The unrecoverable cases throw an error with lj_err_arg(), lj_err_argtype(), -** lj_err_caller() or lj_err_callermsg(). -** The recoverable cases return 0 or the number of results + 1. -** The assembler VM retries the fast path only if 0 is returned. -** This time the fallback must not be called again or it gets stuck in a loop. -*/ - -/* Return values from fallback handler. */ -#define FFH_RETRY 0 -#define FFH_UNREACHABLE FFH_RETRY -#define FFH_RES(n) ((n)+1) -#define FFH_TAILCALL (-1) - -LJ_FUNC TValue *lj_lib_checkany(lua_State *L, int narg); -LJ_FUNC GCstr *lj_lib_checkstr(lua_State *L, int narg); -LJ_FUNC GCstr *lj_lib_optstr(lua_State *L, int narg); -#if LJ_DUALNUM -LJ_FUNC void lj_lib_checknumber(lua_State *L, int narg); -#else -#define lj_lib_checknumber(L, narg) lj_lib_checknum((L), (narg)) -#endif -LJ_FUNC lua_Number lj_lib_checknum(lua_State *L, int narg); -LJ_FUNC int32_t lj_lib_checkint(lua_State *L, int narg); -LJ_FUNC int32_t lj_lib_optint(lua_State *L, int narg, int32_t def); -LJ_FUNC int32_t lj_lib_checkbit(lua_State *L, int narg); -LJ_FUNC GCfunc *lj_lib_checkfunc(lua_State *L, int narg); -LJ_FUNC GCtab *lj_lib_checktab(lua_State *L, int narg); -LJ_FUNC GCtab *lj_lib_checktabornil(lua_State *L, int narg); -LJ_FUNC int lj_lib_checkopt(lua_State *L, int narg, int def, const char *lst); - -/* Avoid including lj_frame.h. */ -#define lj_lib_upvalue(L, n) \ - (&gcref((L->base-1)->fr.func)->fn.c.upvalue[(n)-1]) - -#if LJ_TARGET_WINDOWS -#define lj_lib_checkfpu(L) \ - do { setnumV(L->top++, (lua_Number)1437217655); \ - if (lua_tointeger(L, -1) != 1437217655) lj_err_caller(L, LJ_ERR_BADFPU); \ - L->top--; } while (0) -#else -#define lj_lib_checkfpu(L) UNUSED(L) -#endif - -/* Push internal function on the stack. */ -static LJ_AINLINE void lj_lib_pushcc(lua_State *L, lua_CFunction f, - int id, int n) -{ - GCfunc *fn; - lua_pushcclosure(L, f, n); - fn = funcV(L->top-1); - fn->c.ffid = (uint8_t)id; - setmref(fn->c.pc, &G(L)->bc_cfunc_int); -} - -#define lj_lib_pushcf(L, fn, id) (lj_lib_pushcc(L, (fn), (id), 0)) - -/* Library function declarations. Scanned by buildvm. */ -#define LJLIB_CF(name) static int lj_cf_##name(lua_State *L) -#define LJLIB_ASM(name) static int lj_ffh_##name(lua_State *L) -#define LJLIB_ASM_(name) -#define LJLIB_SET(name) -#define LJLIB_PUSH(arg) -#define LJLIB_REC(handler) -#define LJLIB_NOREGUV -#define LJLIB_NOREG - -#define LJ_LIB_REG(L, regname, name) \ - lj_lib_register(L, regname, lj_lib_init_##name, lj_lib_cf_##name) - -LJ_FUNC void lj_lib_register(lua_State *L, const char *libname, - const uint8_t *init, const lua_CFunction *cf); - -/* Library init data tags. */ -#define LIBINIT_LENMASK 0x3f -#define LIBINIT_TAGMASK 0xc0 -#define LIBINIT_CF 0x00 -#define LIBINIT_ASM 0x40 -#define LIBINIT_ASM_ 0x80 -#define LIBINIT_STRING 0xc0 -#define LIBINIT_MAXSTR 0x39 -#define LIBINIT_SET 0xfa -#define LIBINIT_NUMBER 0xfb -#define LIBINIT_COPY 0xfc -#define LIBINIT_LASTCL 0xfd -#define LIBINIT_FFID 0xfe -#define LIBINIT_END 0xff - -/* Exported library functions. */ - -typedef struct RandomState RandomState; -LJ_FUNC uint64_t LJ_FASTCALL lj_math_random_step(RandomState *rs); - -#endif diff --git a/deps/luajit/src/lj_load.c b/deps/luajit/src/lj_load.c deleted file mode 100644 index ff7b851..0000000 --- a/deps/luajit/src/lj_load.c +++ /dev/null @@ -1,168 +0,0 @@ -/* -** Load and dump code. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include -#include - -#define lj_load_c -#define LUA_CORE - -#include "lua.h" -#include "lauxlib.h" - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_func.h" -#include "lj_frame.h" -#include "lj_vm.h" -#include "lj_lex.h" -#include "lj_bcdump.h" -#include "lj_parse.h" - -/* -- Load Lua source code and bytecode ----------------------------------- */ - -static TValue *cpparser(lua_State *L, lua_CFunction dummy, void *ud) -{ - LexState *ls = (LexState *)ud; - GCproto *pt; - GCfunc *fn; - int bc; - UNUSED(dummy); - cframe_errfunc(L->cframe) = -1; /* Inherit error function. */ - bc = lj_lex_setup(L, ls); - if (ls->mode && !strchr(ls->mode, bc ? 'b' : 't')) { - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_XMODE)); - lj_err_throw(L, LUA_ERRSYNTAX); - } - pt = bc ? lj_bcread(ls) : lj_parse(ls); - fn = lj_func_newL_empty(L, pt, tabref(L->env)); - /* Don't combine above/below into one statement. */ - setfuncV(L, L->top++, fn); - return NULL; -} - -LUA_API int lua_loadx(lua_State *L, lua_Reader reader, void *data, - const char *chunkname, const char *mode) -{ - LexState ls; - int status; - ls.rfunc = reader; - ls.rdata = data; - ls.chunkarg = chunkname ? chunkname : "?"; - ls.mode = mode; - lj_str_initbuf(&ls.sb); - status = lj_vm_cpcall(L, NULL, &ls, cpparser); - lj_lex_cleanup(L, &ls); - lj_gc_check(L); - return status; -} - -LUA_API int lua_load(lua_State *L, lua_Reader reader, void *data, - const char *chunkname) -{ - return lua_loadx(L, reader, data, chunkname, NULL); -} - -typedef struct FileReaderCtx { - FILE *fp; - char buf[LUAL_BUFFERSIZE]; -} FileReaderCtx; - -static const char *reader_file(lua_State *L, void *ud, size_t *size) -{ - FileReaderCtx *ctx = (FileReaderCtx *)ud; - UNUSED(L); - if (feof(ctx->fp)) return NULL; - *size = fread(ctx->buf, 1, sizeof(ctx->buf), ctx->fp); - return *size > 0 ? ctx->buf : NULL; -} - -LUALIB_API int luaL_loadfilex(lua_State *L, const char *filename, - const char *mode) -{ - FileReaderCtx ctx; - int status; - const char *chunkname; - if (filename) { - ctx.fp = fopen(filename, "rb"); - if (ctx.fp == NULL) { - lua_pushfstring(L, "cannot open %s: %s", filename, strerror(errno)); - return LUA_ERRFILE; - } - chunkname = lua_pushfstring(L, "@%s", filename); - } else { - ctx.fp = stdin; - chunkname = "=stdin"; - } - status = lua_loadx(L, reader_file, &ctx, chunkname, mode); - if (ferror(ctx.fp)) { - L->top -= filename ? 2 : 1; - lua_pushfstring(L, "cannot read %s: %s", chunkname+1, strerror(errno)); - if (filename) - fclose(ctx.fp); - return LUA_ERRFILE; - } - if (filename) { - L->top--; - copyTV(L, L->top-1, L->top); - fclose(ctx.fp); - } - return status; -} - -LUALIB_API int luaL_loadfile(lua_State *L, const char *filename) -{ - return luaL_loadfilex(L, filename, NULL); -} - -typedef struct StringReaderCtx { - const char *str; - size_t size; -} StringReaderCtx; - -static const char *reader_string(lua_State *L, void *ud, size_t *size) -{ - StringReaderCtx *ctx = (StringReaderCtx *)ud; - UNUSED(L); - if (ctx->size == 0) return NULL; - *size = ctx->size; - ctx->size = 0; - return ctx->str; -} - -LUALIB_API int luaL_loadbufferx(lua_State *L, const char *buf, size_t size, - const char *name, const char *mode) -{ - StringReaderCtx ctx; - ctx.str = buf; - ctx.size = size; - return lua_loadx(L, reader_string, &ctx, name, mode); -} - -LUALIB_API int luaL_loadbuffer(lua_State *L, const char *buf, size_t size, - const char *name) -{ - return luaL_loadbufferx(L, buf, size, name, NULL); -} - -LUALIB_API int luaL_loadstring(lua_State *L, const char *s) -{ - return luaL_loadbuffer(L, s, strlen(s), s); -} - -/* -- Dump bytecode ------------------------------------------------------- */ - -LUA_API int lua_dump(lua_State *L, lua_Writer writer, void *data) -{ - cTValue *o = L->top-1; - api_check(L, L->top > L->base); - if (tvisfunc(o) && isluafunc(funcV(o))) - return lj_bcwrite(L, funcproto(funcV(o)), writer, data, 0); - else - return 1; -} - diff --git a/deps/luajit/src/lj_mcode.c b/deps/luajit/src/lj_mcode.c deleted file mode 100644 index d95ebeb..0000000 --- a/deps/luajit/src/lj_mcode.c +++ /dev/null @@ -1,386 +0,0 @@ -/* -** Machine code management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_mcode_c -#define LUA_CORE - -#include "lj_obj.h" -#if LJ_HASJIT -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_jit.h" -#include "lj_mcode.h" -#include "lj_trace.h" -#include "lj_dispatch.h" -#endif -#if LJ_HASJIT || LJ_HASFFI -#include "lj_vm.h" -#endif - -/* -- OS-specific functions ----------------------------------------------- */ - -#if LJ_HASJIT || LJ_HASFFI - -/* Define this if you want to run LuaJIT with Valgrind. */ -#ifdef LUAJIT_USE_VALGRIND -#include -#endif - -#if LJ_TARGET_IOS -void sys_icache_invalidate(void *start, size_t len); -#endif - -/* Synchronize data/instruction cache. */ -void lj_mcode_sync(void *start, void *end) -{ -#ifdef LUAJIT_USE_VALGRIND - VALGRIND_DISCARD_TRANSLATIONS(start, (char *)end-(char *)start); -#endif -#if LJ_TARGET_X86ORX64 - UNUSED(start); UNUSED(end); -#elif LJ_TARGET_IOS - sys_icache_invalidate(start, (char *)end-(char *)start); -#elif LJ_TARGET_PPC - lj_vm_cachesync(start, end); -#elif defined(__GNUC__) - __clear_cache(start, end); -#else -#error "Missing builtin to flush instruction cache" -#endif -} - -#endif - -#if LJ_HASJIT - -#if LJ_TARGET_WINDOWS - -#define WIN32_LEAN_AND_MEAN -#include - -#define MCPROT_RW PAGE_READWRITE -#define MCPROT_RX PAGE_EXECUTE_READ -#define MCPROT_RWX PAGE_EXECUTE_READWRITE - -static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, DWORD prot) -{ - void *p = VirtualAlloc((void *)hint, sz, - MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot); - if (!p && !hint) - lj_trace_err(J, LJ_TRERR_MCODEAL); - return p; -} - -static void mcode_free(jit_State *J, void *p, size_t sz) -{ - UNUSED(J); UNUSED(sz); - VirtualFree(p, 0, MEM_RELEASE); -} - -static int mcode_setprot(void *p, size_t sz, DWORD prot) -{ - DWORD oprot; - return !VirtualProtect(p, sz, prot, &oprot); -} - -#elif LJ_TARGET_POSIX - -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -#define MCPROT_RW (PROT_READ|PROT_WRITE) -#define MCPROT_RX (PROT_READ|PROT_EXEC) -#define MCPROT_RWX (PROT_READ|PROT_WRITE|PROT_EXEC) - -static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, int prot) -{ - void *p = mmap((void *)hint, sz, prot, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); - if (p == MAP_FAILED) { - if (!hint) lj_trace_err(J, LJ_TRERR_MCODEAL); - p = NULL; - } - return p; -} - -static void mcode_free(jit_State *J, void *p, size_t sz) -{ - UNUSED(J); - munmap(p, sz); -} - -static int mcode_setprot(void *p, size_t sz, int prot) -{ - return mprotect(p, sz, prot); -} - -#elif LJ_64 - -#error "Missing OS support for explicit placement of executable memory" - -#else - -/* Fallback allocator. This will fail if memory is not executable by default. */ -#define LUAJIT_UNPROTECT_MCODE -#define MCPROT_RW 0 -#define MCPROT_RX 0 -#define MCPROT_RWX 0 - -static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, int prot) -{ - UNUSED(hint); UNUSED(prot); - return lj_mem_new(J->L, sz); -} - -static void mcode_free(jit_State *J, void *p, size_t sz) -{ - lj_mem_free(J2G(J), p, sz); -} - -#endif - -/* -- MCode area protection ----------------------------------------------- */ - -/* Define this ONLY if page protection twiddling becomes a bottleneck. */ -#ifdef LUAJIT_UNPROTECT_MCODE - -/* It's generally considered to be a potential security risk to have -** pages with simultaneous write *and* execute access in a process. -** -** Do not even think about using this mode for server processes or -** apps handling untrusted external data (such as a browser). -** -** The security risk is not in LuaJIT itself -- but if an adversary finds -** any *other* flaw in your C application logic, then any RWX memory page -** simplifies writing an exploit considerably. -*/ -#define MCPROT_GEN MCPROT_RWX -#define MCPROT_RUN MCPROT_RWX - -static void mcode_protect(jit_State *J, int prot) -{ - UNUSED(J); UNUSED(prot); -} - -#else - -/* This is the default behaviour and much safer: -** -** Most of the time the memory pages holding machine code are executable, -** but NONE of them is writable. -** -** The current memory area is marked read-write (but NOT executable) only -** during the short time window while the assembler generates machine code. -*/ -#define MCPROT_GEN MCPROT_RW -#define MCPROT_RUN MCPROT_RX - -/* Protection twiddling failed. Probably due to kernel security. */ -static LJ_NOINLINE void mcode_protfail(jit_State *J) -{ - lua_CFunction panic = J2G(J)->panic; - if (panic) { - lua_State *L = J->L; - setstrV(L, L->top++, lj_err_str(L, LJ_ERR_JITPROT)); - panic(L); - } -} - -/* Change protection of MCode area. */ -static void mcode_protect(jit_State *J, int prot) -{ - if (J->mcprot != prot) { - if (LJ_UNLIKELY(mcode_setprot(J->mcarea, J->szmcarea, prot))) - mcode_protfail(J); - J->mcprot = prot; - } -} - -#endif - -/* -- MCode area allocation ----------------------------------------------- */ - -#if LJ_TARGET_X64 -#define mcode_validptr(p) ((p) && (uintptr_t)(p) < (uintptr_t)1<<47) -#else -#define mcode_validptr(p) ((p) && (uintptr_t)(p) < 0xffff0000) -#endif - -#ifdef LJ_TARGET_JUMPRANGE - -/* Get memory within relative jump distance of our code in 64 bit mode. */ -static void *mcode_alloc(jit_State *J, size_t sz) -{ - /* Target an address in the static assembler code (64K aligned). - ** Try addresses within a distance of target-range/2+1MB..target+range/2-1MB. - ** Use half the jump range so every address in the range can reach any other. - */ -#if LJ_TARGET_MIPS - /* Use the middle of the 256MB-aligned region. */ - uintptr_t target = ((uintptr_t)(void *)lj_vm_exit_handler & 0xf0000000u) + - 0x08000000u; -#else - uintptr_t target = (uintptr_t)(void *)lj_vm_exit_handler & ~(uintptr_t)0xffff; -#endif - const uintptr_t range = (1u << (LJ_TARGET_JUMPRANGE-1)) - (1u << 21); - /* First try a contiguous area below the last one. */ - uintptr_t hint = J->mcarea ? (uintptr_t)J->mcarea - sz : 0; - int i; - for (i = 0; i < 32; i++) { /* 32 attempts ought to be enough ... */ - if (mcode_validptr(hint)) { - void *p = mcode_alloc_at(J, hint, sz, MCPROT_GEN); - - if (mcode_validptr(p) && - ((uintptr_t)p + sz - target < range || target - (uintptr_t)p < range)) - return p; - if (p) mcode_free(J, p, sz); /* Free badly placed area. */ - } - /* Next try probing pseudo-random addresses. */ - do { - hint = (0x78fb ^ LJ_PRNG_BITS(J, 15)) << 16; /* 64K aligned. */ - } while (!(hint + sz < range)); - hint = target + hint - (range>>1); - } - lj_trace_err(J, LJ_TRERR_MCODEAL); /* Give up. OS probably ignores hints? */ - return NULL; -} - -#else - -/* All memory addresses are reachable by relative jumps. */ -static void *mcode_alloc(jit_State *J, size_t sz) -{ -#ifdef __OpenBSD__ - /* Allow better executable memory allocation for OpenBSD W^X mode. */ - void *p = mcode_alloc_at(J, 0, sz, MCPROT_RUN); - if (p && mcode_setprot(p, sz, MCPROT_GEN)) { - mcode_free(J, p, sz); - return NULL; - } - return p; -#else - return mcode_alloc_at(J, 0, sz, MCPROT_GEN); -#endif -} - -#endif - -/* -- MCode area management ----------------------------------------------- */ - -/* Linked list of MCode areas. */ -typedef struct MCLink { - MCode *next; /* Next area. */ - size_t size; /* Size of current area. */ -} MCLink; - -/* Allocate a new MCode area. */ -static void mcode_allocarea(jit_State *J) -{ - MCode *oldarea = J->mcarea; - size_t sz = (size_t)J->param[JIT_P_sizemcode] << 10; - sz = (sz + LJ_PAGESIZE-1) & ~(size_t)(LJ_PAGESIZE - 1); - J->mcarea = (MCode *)mcode_alloc(J, sz); - J->szmcarea = sz; - J->mcprot = MCPROT_GEN; - J->mctop = (MCode *)((char *)J->mcarea + J->szmcarea); - J->mcbot = (MCode *)((char *)J->mcarea + sizeof(MCLink)); - ((MCLink *)J->mcarea)->next = oldarea; - ((MCLink *)J->mcarea)->size = sz; - J->szallmcarea += sz; -} - -/* Free all MCode areas. */ -void lj_mcode_free(jit_State *J) -{ - MCode *mc = J->mcarea; - J->mcarea = NULL; - J->szallmcarea = 0; - while (mc) { - MCode *next = ((MCLink *)mc)->next; - mcode_free(J, mc, ((MCLink *)mc)->size); - mc = next; - } -} - -/* -- MCode transactions -------------------------------------------------- */ - -/* Reserve the remainder of the current MCode area. */ -MCode *lj_mcode_reserve(jit_State *J, MCode **lim) -{ - if (!J->mcarea) - mcode_allocarea(J); - else - mcode_protect(J, MCPROT_GEN); - *lim = J->mcbot; - return J->mctop; -} - -/* Commit the top part of the current MCode area. */ -void lj_mcode_commit(jit_State *J, MCode *top) -{ - J->mctop = top; - mcode_protect(J, MCPROT_RUN); -} - -/* Abort the reservation. */ -void lj_mcode_abort(jit_State *J) -{ - if (J->mcarea) - mcode_protect(J, MCPROT_RUN); -} - -/* Set/reset protection to allow patching of MCode areas. */ -MCode *lj_mcode_patch(jit_State *J, MCode *ptr, int finish) -{ -#ifdef LUAJIT_UNPROTECT_MCODE - UNUSED(J); UNUSED(ptr); UNUSED(finish); - return NULL; -#else - if (finish) { - if (J->mcarea == ptr) - mcode_protect(J, MCPROT_RUN); - else if (LJ_UNLIKELY(mcode_setprot(ptr, ((MCLink *)ptr)->size, MCPROT_RUN))) - mcode_protfail(J); - return NULL; - } else { - MCode *mc = J->mcarea; - /* Try current area first to use the protection cache. */ - if (ptr >= mc && ptr < (MCode *)((char *)mc + J->szmcarea)) { - mcode_protect(J, MCPROT_GEN); - return mc; - } - /* Otherwise search through the list of MCode areas. */ - for (;;) { - mc = ((MCLink *)mc)->next; - lua_assert(mc != NULL); - if (ptr >= mc && ptr < (MCode *)((char *)mc + ((MCLink *)mc)->size)) { - if (LJ_UNLIKELY(mcode_setprot(mc, ((MCLink *)mc)->size, MCPROT_GEN))) - mcode_protfail(J); - return mc; - } - } - } -#endif -} - -/* Limit of MCode reservation reached. */ -void lj_mcode_limiterr(jit_State *J, size_t need) -{ - size_t sizemcode, maxmcode; - lj_mcode_abort(J); - sizemcode = (size_t)J->param[JIT_P_sizemcode] << 10; - sizemcode = (sizemcode + LJ_PAGESIZE-1) & ~(size_t)(LJ_PAGESIZE - 1); - maxmcode = (size_t)J->param[JIT_P_maxmcode] << 10; - if ((size_t)need > sizemcode) - lj_trace_err(J, LJ_TRERR_MCODEOV); /* Too long for any area. */ - if (J->szallmcarea + sizemcode > maxmcode) - lj_trace_err(J, LJ_TRERR_MCODEAL); - mcode_allocarea(J); - lj_trace_err(J, LJ_TRERR_MCODELM); /* Retry with new area. */ -} - -#endif diff --git a/deps/luajit/src/lj_mcode.h b/deps/luajit/src/lj_mcode.h deleted file mode 100644 index ee60452..0000000 --- a/deps/luajit/src/lj_mcode.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -** Machine code management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_MCODE_H -#define _LJ_MCODE_H - -#include "lj_obj.h" - -#if LJ_HASJIT || LJ_HASFFI -LJ_FUNC void lj_mcode_sync(void *start, void *end); -#endif - -#if LJ_HASJIT - -#include "lj_jit.h" - -LJ_FUNC void lj_mcode_free(jit_State *J); -LJ_FUNC MCode *lj_mcode_reserve(jit_State *J, MCode **lim); -LJ_FUNC void lj_mcode_commit(jit_State *J, MCode *m); -LJ_FUNC void lj_mcode_abort(jit_State *J); -LJ_FUNC MCode *lj_mcode_patch(jit_State *J, MCode *ptr, int finish); -LJ_FUNC_NORET void lj_mcode_limiterr(jit_State *J, size_t need); - -#define lj_mcode_commitbot(J, m) (J->mcbot = (m)) - -#endif - -#endif diff --git a/deps/luajit/src/lj_meta.c b/deps/luajit/src/lj_meta.c deleted file mode 100644 index faaaf70..0000000 --- a/deps/luajit/src/lj_meta.c +++ /dev/null @@ -1,466 +0,0 @@ -/* -** Metamethod handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_meta_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_frame.h" -#include "lj_bc.h" -#include "lj_vm.h" -#include "lj_strscan.h" - -/* -- Metamethod handling ------------------------------------------------- */ - -/* String interning of metamethod names for fast indexing. */ -void lj_meta_init(lua_State *L) -{ -#define MMNAME(name) "__" #name - const char *metanames = MMDEF(MMNAME); -#undef MMNAME - global_State *g = G(L); - const char *p, *q; - uint32_t mm; - for (mm = 0, p = metanames; *p; mm++, p = q) { - GCstr *s; - for (q = p+2; *q && *q != '_'; q++) ; - s = lj_str_new(L, p, (size_t)(q-p)); - /* NOBARRIER: g->gcroot[] is a GC root. */ - setgcref(g->gcroot[GCROOT_MMNAME+mm], obj2gco(s)); - } -} - -/* Negative caching of a few fast metamethods. See the lj_meta_fast() macro. */ -cTValue *lj_meta_cache(GCtab *mt, MMS mm, GCstr *name) -{ - cTValue *mo = lj_tab_getstr(mt, name); - lua_assert(mm <= MM_FAST); - if (!mo || tvisnil(mo)) { /* No metamethod? */ - mt->nomm |= (uint8_t)(1u<metatable); - else if (tvisudata(o)) - mt = tabref(udataV(o)->metatable); - else - mt = tabref(basemt_obj(G(L), o)); - if (mt) { - cTValue *mo = lj_tab_getstr(mt, mmname_str(G(L), mm)); - if (mo) - return mo; - } - return niltv(L); -} - -#if LJ_HASFFI -/* Tailcall from C function. */ -int lj_meta_tailcall(lua_State *L, cTValue *tv) -{ - TValue *base = L->base; - TValue *top = L->top; - const BCIns *pc = frame_pc(base-1); /* Preserve old PC from frame. */ - copyTV(L, base-1, tv); /* Replace frame with new object. */ - top->u32.lo = LJ_CONT_TAILCALL; - setframe_pc(top, pc); - setframe_gc(top+1, obj2gco(L)); /* Dummy frame object. */ - setframe_ftsz(top+1, (int)((char *)(top+2) - (char *)base) + FRAME_CONT); - L->base = L->top = top+2; - /* - ** before: [old_mo|PC] [... ...] - ** ^base ^top - ** after: [new_mo|itype] [... ...] [NULL|PC] [dummy|delta] - ** ^base/top - ** tailcall: [new_mo|PC] [... ...] - ** ^base ^top - */ - return 0; -} -#endif - -/* Setup call to metamethod to be run by Assembler VM. */ -static TValue *mmcall(lua_State *L, ASMFunction cont, cTValue *mo, - cTValue *a, cTValue *b) -{ - /* - ** |-- framesize -> top top+1 top+2 top+3 - ** before: [func slots ...] - ** mm setup: [func slots ...] [cont|?] [mo|tmtype] [a] [b] - ** in asm: [func slots ...] [cont|PC] [mo|delta] [a] [b] - ** ^-- func base ^-- mm base - ** after mm: [func slots ...] [result] - ** ^-- copy to base[PC_RA] --/ for lj_cont_ra - ** istruecond + branch for lj_cont_cond* - ** ignore for lj_cont_nop - ** next PC: [func slots ...] - */ - TValue *top = L->top; - if (curr_funcisL(L)) top = curr_topL(L); - setcont(top, cont); /* Assembler VM stores PC in upper word. */ - copyTV(L, top+1, mo); /* Store metamethod and two arguments. */ - copyTV(L, top+2, a); - copyTV(L, top+3, b); - return top+2; /* Return new base. */ -} - -/* -- C helpers for some instructions, called from assembler VM ----------- */ - -/* Helper for TGET*. __index chain and metamethod. */ -cTValue *lj_meta_tget(lua_State *L, cTValue *o, cTValue *k) -{ - int loop; - for (loop = 0; loop < LJ_MAX_IDXCHAIN; loop++) { - cTValue *mo; - if (LJ_LIKELY(tvistab(o))) { - GCtab *t = tabV(o); - cTValue *tv = lj_tab_get(L, t, k); - if (!tvisnil(tv) || - !(mo = lj_meta_fast(L, tabref(t->metatable), MM_index))) - return tv; - } else if (tvisnil(mo = lj_meta_lookup(L, o, MM_index))) { - lj_err_optype(L, o, LJ_ERR_OPINDEX); - return NULL; /* unreachable */ - } - if (tvisfunc(mo)) { - L->top = mmcall(L, lj_cont_ra, mo, o, k); - return NULL; /* Trigger metamethod call. */ - } - o = mo; - } - lj_err_msg(L, LJ_ERR_GETLOOP); - return NULL; /* unreachable */ -} - -/* Helper for TSET*. __newindex chain and metamethod. */ -TValue *lj_meta_tset(lua_State *L, cTValue *o, cTValue *k) -{ - TValue tmp; - int loop; - for (loop = 0; loop < LJ_MAX_IDXCHAIN; loop++) { - cTValue *mo; - if (LJ_LIKELY(tvistab(o))) { - GCtab *t = tabV(o); - cTValue *tv = lj_tab_get(L, t, k); - if (LJ_LIKELY(!tvisnil(tv))) { - t->nomm = 0; /* Invalidate negative metamethod cache. */ - lj_gc_anybarriert(L, t); - return (TValue *)tv; - } else if (!(mo = lj_meta_fast(L, tabref(t->metatable), MM_newindex))) { - t->nomm = 0; /* Invalidate negative metamethod cache. */ - lj_gc_anybarriert(L, t); - if (tv != niltv(L)) - return (TValue *)tv; - if (tvisnil(k)) lj_err_msg(L, LJ_ERR_NILIDX); - else if (tvisint(k)) { setnumV(&tmp, (lua_Number)intV(k)); k = &tmp; } - else if (tvisnum(k) && tvisnan(k)) lj_err_msg(L, LJ_ERR_NANIDX); - return lj_tab_newkey(L, t, k); - } - } else if (tvisnil(mo = lj_meta_lookup(L, o, MM_newindex))) { - lj_err_optype(L, o, LJ_ERR_OPINDEX); - return NULL; /* unreachable */ - } - if (tvisfunc(mo)) { - L->top = mmcall(L, lj_cont_nop, mo, o, k); - /* L->top+2 = v filled in by caller. */ - return NULL; /* Trigger metamethod call. */ - } - copyTV(L, &tmp, mo); - o = &tmp; - } - lj_err_msg(L, LJ_ERR_SETLOOP); - return NULL; /* unreachable */ -} - -static cTValue *str2num(cTValue *o, TValue *n) -{ - if (tvisnum(o)) - return o; - else if (tvisint(o)) - return (setnumV(n, (lua_Number)intV(o)), n); - else if (tvisstr(o) && lj_strscan_num(strV(o), n)) - return n; - else - return NULL; -} - -/* Helper for arithmetic instructions. Coercion, metamethod. */ -TValue *lj_meta_arith(lua_State *L, TValue *ra, cTValue *rb, cTValue *rc, - BCReg op) -{ - MMS mm = bcmode_mm(op); - TValue tempb, tempc; - cTValue *b, *c; - if ((b = str2num(rb, &tempb)) != NULL && - (c = str2num(rc, &tempc)) != NULL) { /* Try coercion first. */ - setnumV(ra, lj_vm_foldarith(numV(b), numV(c), (int)mm-MM_add)); - return NULL; - } else { - cTValue *mo = lj_meta_lookup(L, rb, mm); - if (tvisnil(mo)) { - mo = lj_meta_lookup(L, rc, mm); - if (tvisnil(mo)) { - if (str2num(rb, &tempb) == NULL) rc = rb; - lj_err_optype(L, rc, LJ_ERR_OPARITH); - return NULL; /* unreachable */ - } - } - return mmcall(L, lj_cont_ra, mo, rb, rc); - } -} - -/* In-place coercion of a number to a string. */ -static LJ_AINLINE int tostring(lua_State *L, TValue *o) -{ - if (tvisstr(o)) { - return 1; - } else if (tvisnumber(o)) { - setstrV(L, o, lj_str_fromnumber(L, o)); - return 1; - } else { - return 0; - } -} - -/* Helper for CAT. Coercion, iterative concat, __concat metamethod. */ -TValue *lj_meta_cat(lua_State *L, TValue *top, int left) -{ - int fromc = 0; - if (left < 0) { left = -left; fromc = 1; } - do { - int n = 1; - if (!(tvisstr(top-1) || tvisnumber(top-1)) || !tostring(L, top)) { - cTValue *mo = lj_meta_lookup(L, top-1, MM_concat); - if (tvisnil(mo)) { - mo = lj_meta_lookup(L, top, MM_concat); - if (tvisnil(mo)) { - if (tvisstr(top-1) || tvisnumber(top-1)) top++; - lj_err_optype(L, top-1, LJ_ERR_OPCAT); - return NULL; /* unreachable */ - } - } - /* One of the top two elements is not a string, call __cat metamethod: - ** - ** before: [...][CAT stack .........................] - ** top-1 top top+1 top+2 - ** pick two: [...][CAT stack ...] [o1] [o2] - ** setup mm: [...][CAT stack ...] [cont|?] [mo|tmtype] [o1] [o2] - ** in asm: [...][CAT stack ...] [cont|PC] [mo|delta] [o1] [o2] - ** ^-- func base ^-- mm base - ** after mm: [...][CAT stack ...] <--push-- [result] - ** next step: [...][CAT stack .............] - */ - copyTV(L, top+2, top); /* Careful with the order of stack copies! */ - copyTV(L, top+1, top-1); - copyTV(L, top, mo); - setcont(top-1, lj_cont_cat); - return top+1; /* Trigger metamethod call. */ - } else if (strV(top)->len == 0) { /* Shortcut. */ - (void)tostring(L, top-1); - } else { - /* Pick as many strings as possible from the top and concatenate them: - ** - ** before: [...][CAT stack ...........................] - ** pick str: [...][CAT stack ...] [...... strings ......] - ** concat: [...][CAT stack ...] [result] - ** next step: [...][CAT stack ............] - */ - MSize tlen = strV(top)->len; - char *buffer; - int i; - for (n = 1; n <= left && tostring(L, top-n); n++) { - MSize len = strV(top-n)->len; - if (len >= LJ_MAX_STR - tlen) - lj_err_msg(L, LJ_ERR_STROV); - tlen += len; - } - buffer = lj_str_needbuf(L, &G(L)->tmpbuf, tlen); - n--; - tlen = 0; - for (i = n; i >= 0; i--) { - MSize len = strV(top-i)->len; - memcpy(buffer + tlen, strVdata(top-i), len); - tlen += len; - } - setstrV(L, top-n, lj_str_new(L, buffer, tlen)); - } - left -= n; - top -= n; - } while (left >= 1); - if (LJ_UNLIKELY(G(L)->gc.total >= G(L)->gc.threshold)) { - if (!fromc) L->top = curr_topL(L); - lj_gc_step(L); - } - return NULL; -} - -/* Helper for LEN. __len metamethod. */ -TValue * LJ_FASTCALL lj_meta_len(lua_State *L, cTValue *o) -{ - cTValue *mo = lj_meta_lookup(L, o, MM_len); - if (tvisnil(mo)) { - if (LJ_52 && tvistab(o)) - tabref(tabV(o)->metatable)->nomm |= (uint8_t)(1u<gch.metatable), MM_eq); - if (mo) { - TValue *top; - uint32_t it; - if (tabref(o1->gch.metatable) != tabref(o2->gch.metatable)) { - cTValue *mo2 = lj_meta_fast(L, tabref(o2->gch.metatable), MM_eq); - if (mo2 == NULL || !lj_obj_equal(mo, mo2)) - return (TValue *)(intptr_t)ne; - } - top = curr_top(L); - setcont(top, ne ? lj_cont_condf : lj_cont_condt); - copyTV(L, top+1, mo); - it = ~(uint32_t)o1->gch.gct; - setgcV(L, top+2, o1, it); - setgcV(L, top+3, o2, it); - return top+2; /* Trigger metamethod call. */ - } - return (TValue *)(intptr_t)ne; -} - -#if LJ_HASFFI -TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins) -{ - ASMFunction cont = (bc_op(ins) & 1) ? lj_cont_condf : lj_cont_condt; - int op = (int)bc_op(ins) & ~1; - TValue tv; - cTValue *mo, *o2, *o1 = &L->base[bc_a(ins)]; - cTValue *o1mm = o1; - if (op == BC_ISEQV) { - o2 = &L->base[bc_d(ins)]; - if (!tviscdata(o1mm)) o1mm = o2; - } else if (op == BC_ISEQS) { - setstrV(L, &tv, gco2str(proto_kgc(curr_proto(L), ~(ptrdiff_t)bc_d(ins)))); - o2 = &tv; - } else if (op == BC_ISEQN) { - o2 = &mref(curr_proto(L)->k, cTValue)[bc_d(ins)]; - } else { - lua_assert(op == BC_ISEQP); - setitype(&tv, ~bc_d(ins)); - o2 = &tv; - } - mo = lj_meta_lookup(L, o1mm, MM_eq); - if (LJ_LIKELY(!tvisnil(mo))) - return mmcall(L, cont, mo, o1, o2); - else - return (TValue *)(intptr_t)(bc_op(ins) & 1); -} -#endif - -/* Helper for ordered comparisons. String compare, __lt/__le metamethods. */ -TValue *lj_meta_comp(lua_State *L, cTValue *o1, cTValue *o2, int op) -{ - if (LJ_HASFFI && (tviscdata(o1) || tviscdata(o2))) { - ASMFunction cont = (op & 1) ? lj_cont_condf : lj_cont_condt; - MMS mm = (op & 2) ? MM_le : MM_lt; - cTValue *mo = lj_meta_lookup(L, tviscdata(o1) ? o1 : o2, mm); - if (LJ_UNLIKELY(tvisnil(mo))) goto err; - return mmcall(L, cont, mo, o1, o2); - } else if (LJ_52 || itype(o1) == itype(o2)) { - /* Never called with two numbers. */ - if (tvisstr(o1) && tvisstr(o2)) { - int32_t res = lj_str_cmp(strV(o1), strV(o2)); - return (TValue *)(intptr_t)(((op&2) ? res <= 0 : res < 0) ^ (op&1)); - } else { - trymt: - while (1) { - ASMFunction cont = (op & 1) ? lj_cont_condf : lj_cont_condt; - MMS mm = (op & 2) ? MM_le : MM_lt; - cTValue *mo = lj_meta_lookup(L, o1, mm); -#if LJ_52 - if (tvisnil(mo) && tvisnil((mo = lj_meta_lookup(L, o2, mm)))) -#else - cTValue *mo2 = lj_meta_lookup(L, o2, mm); - if (tvisnil(mo) || !lj_obj_equal(mo, mo2)) -#endif - { - if (op & 2) { /* MM_le not found: retry with MM_lt. */ - cTValue *ot = o1; o1 = o2; o2 = ot; /* Swap operands. */ - op ^= 3; /* Use LT and flip condition. */ - continue; - } - goto err; - } - return mmcall(L, cont, mo, o1, o2); - } - } - } else if (tvisbool(o1) && tvisbool(o2)) { - goto trymt; - } else { - err: - lj_err_comp(L, o1, o2); - return NULL; - } -} - -/* Helper for calls. __call metamethod. */ -void lj_meta_call(lua_State *L, TValue *func, TValue *top) -{ - cTValue *mo = lj_meta_lookup(L, func, MM_call); - TValue *p; - if (!tvisfunc(mo)) - lj_err_optype_call(L, func); - for (p = top; p > func; p--) copyTV(L, p, p-1); - copyTV(L, func, mo); -} - -/* Helper for FORI. Coercion. */ -void LJ_FASTCALL lj_meta_for(lua_State *L, TValue *o) -{ - if (!lj_strscan_numberobj(o)) lj_err_msg(L, LJ_ERR_FORINIT); - if (!lj_strscan_numberobj(o+1)) lj_err_msg(L, LJ_ERR_FORLIM); - if (!lj_strscan_numberobj(o+2)) lj_err_msg(L, LJ_ERR_FORSTEP); - if (LJ_DUALNUM) { - /* Ensure all slots are integers or all slots are numbers. */ - int32_t k[3]; - int nint = 0; - ptrdiff_t i; - for (i = 0; i <= 2; i++) { - if (tvisint(o+i)) { - k[i] = intV(o+i); nint++; - } else { - k[i] = lj_num2int(numV(o+i)); nint += ((lua_Number)k[i] == numV(o+i)); - } - } - if (nint == 3) { /* Narrow to integers. */ - setintV(o, k[0]); - setintV(o+1, k[1]); - setintV(o+2, k[2]); - } else if (nint != 0) { /* Widen to numbers. */ - if (tvisint(o)) setnumV(o, (lua_Number)intV(o)); - if (tvisint(o+1)) setnumV(o+1, (lua_Number)intV(o+1)); - if (tvisint(o+2)) setnumV(o+2, (lua_Number)intV(o+2)); - } - } -} - diff --git a/deps/luajit/src/lj_meta.h b/deps/luajit/src/lj_meta.h deleted file mode 100644 index 2c1ad0d..0000000 --- a/deps/luajit/src/lj_meta.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -** Metamethod handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_META_H -#define _LJ_META_H - -#include "lj_obj.h" - -/* Metamethod handling */ -LJ_FUNC void lj_meta_init(lua_State *L); -LJ_FUNC cTValue *lj_meta_cache(GCtab *mt, MMS mm, GCstr *name); -LJ_FUNC cTValue *lj_meta_lookup(lua_State *L, cTValue *o, MMS mm); -#if LJ_HASFFI -LJ_FUNC int lj_meta_tailcall(lua_State *L, cTValue *tv); -#endif - -#define lj_meta_fastg(g, mt, mm) \ - ((mt) == NULL ? NULL : ((mt)->nomm & (1u<<(mm))) ? NULL : \ - lj_meta_cache(mt, mm, mmname_str(g, mm))) -#define lj_meta_fast(L, mt, mm) lj_meta_fastg(G(L), mt, mm) - -/* C helpers for some instructions, called from assembler VM. */ -LJ_FUNCA cTValue *lj_meta_tget(lua_State *L, cTValue *o, cTValue *k); -LJ_FUNCA TValue *lj_meta_tset(lua_State *L, cTValue *o, cTValue *k); -LJ_FUNCA TValue *lj_meta_arith(lua_State *L, TValue *ra, cTValue *rb, - cTValue *rc, BCReg op); -LJ_FUNCA TValue *lj_meta_cat(lua_State *L, TValue *top, int left); -LJ_FUNCA TValue * LJ_FASTCALL lj_meta_len(lua_State *L, cTValue *o); -LJ_FUNCA TValue *lj_meta_equal(lua_State *L, GCobj *o1, GCobj *o2, int ne); -LJ_FUNCA TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins); -LJ_FUNCA TValue *lj_meta_comp(lua_State *L, cTValue *o1, cTValue *o2, int op); -LJ_FUNCA void lj_meta_call(lua_State *L, TValue *func, TValue *top); -LJ_FUNCA void LJ_FASTCALL lj_meta_for(lua_State *L, TValue *o); - -#endif diff --git a/deps/luajit/src/lj_obj.c b/deps/luajit/src/lj_obj.c deleted file mode 100644 index 7fab714..0000000 --- a/deps/luajit/src/lj_obj.c +++ /dev/null @@ -1,35 +0,0 @@ -/* -** Miscellaneous object handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_obj_c -#define LUA_CORE - -#include "lj_obj.h" - -/* Object type names. */ -LJ_DATADEF const char *const lj_obj_typename[] = { /* ORDER LUA_T */ - "no value", "nil", "boolean", "userdata", "number", "string", - "table", "function", "userdata", "thread", "proto", "cdata" -}; - -LJ_DATADEF const char *const lj_obj_itypename[] = { /* ORDER LJ_T */ - "nil", "boolean", "boolean", "userdata", "string", "upval", "thread", - "proto", "function", "trace", "cdata", "table", "userdata", "number" -}; - -/* Compare two objects without calling metamethods. */ -int lj_obj_equal(cTValue *o1, cTValue *o2) -{ - if (itype(o1) == itype(o2)) { - if (tvispri(o1)) - return 1; - if (!tvisnum(o1)) - return gcrefeq(o1->gcr, o2->gcr); - } else if (!tvisnumber(o1) || !tvisnumber(o2)) { - return 0; - } - return numberVnum(o1) == numberVnum(o2); -} - diff --git a/deps/luajit/src/lj_obj.h b/deps/luajit/src/lj_obj.h deleted file mode 100644 index 6e8381c..0000000 --- a/deps/luajit/src/lj_obj.h +++ /dev/null @@ -1,856 +0,0 @@ -/* -** LuaJIT VM tags, values and objects. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#ifndef _LJ_OBJ_H -#define _LJ_OBJ_H - -#include "lua.h" -#include "lj_def.h" -#include "lj_arch.h" - -/* -- Memory references (32 bit address space) ---------------------------- */ - -/* Memory size. */ -typedef uint32_t MSize; - -/* Memory reference */ -typedef struct MRef { - uint32_t ptr32; /* Pseudo 32 bit pointer. */ -} MRef; - -#define mref(r, t) ((t *)(void *)(uintptr_t)(r).ptr32) - -#define setmref(r, p) ((r).ptr32 = (uint32_t)(uintptr_t)(void *)(p)) -#define setmrefr(r, v) ((r).ptr32 = (v).ptr32) - -/* -- GC object references (32 bit address space) ------------------------- */ - -/* GCobj reference */ -typedef struct GCRef { - uint32_t gcptr32; /* Pseudo 32 bit pointer. */ -} GCRef; - -/* Common GC header for all collectable objects. */ -#define GCHeader GCRef nextgc; uint8_t marked; uint8_t gct -/* This occupies 6 bytes, so use the next 2 bytes for non-32 bit fields. */ - -#define gcref(r) ((GCobj *)(uintptr_t)(r).gcptr32) -#define gcrefp(r, t) ((t *)(void *)(uintptr_t)(r).gcptr32) -#define gcrefu(r) ((r).gcptr32) -#define gcrefi(r) ((int32_t)(r).gcptr32) -#define gcrefeq(r1, r2) ((r1).gcptr32 == (r2).gcptr32) -#define gcnext(gc) (gcref((gc)->gch.nextgc)) - -#define setgcref(r, gc) ((r).gcptr32 = (uint32_t)(uintptr_t)&(gc)->gch) -#define setgcrefi(r, i) ((r).gcptr32 = (uint32_t)(i)) -#define setgcrefp(r, p) ((r).gcptr32 = (uint32_t)(uintptr_t)(p)) -#define setgcrefnull(r) ((r).gcptr32 = 0) -#define setgcrefr(r, v) ((r).gcptr32 = (v).gcptr32) - -/* IMPORTANT NOTE: -** -** All uses of the setgcref* macros MUST be accompanied with a write barrier. -** -** This is to ensure the integrity of the incremental GC. The invariant -** to preserve is that a black object never points to a white object. -** I.e. never store a white object into a field of a black object. -** -** It's ok to LEAVE OUT the write barrier ONLY in the following cases: -** - The source is not a GC object (NULL). -** - The target is a GC root. I.e. everything in global_State. -** - The target is a lua_State field (threads are never black). -** - The target is a stack slot, see setgcV et al. -** - The target is an open upvalue, i.e. pointing to a stack slot. -** - The target is a newly created object (i.e. marked white). But make -** sure nothing invokes the GC inbetween. -** - The target and the source are the same object (self-reference). -** - The target already contains the object (e.g. moving elements around). -** -** The most common case is a store to a stack slot. All other cases where -** a barrier has been omitted are annotated with a NOBARRIER comment. -** -** The same logic applies for stores to table slots (array part or hash -** part). ALL uses of lj_tab_set* require a barrier for the stored value -** *and* the stored key, based on the above rules. In practice this means -** a barrier is needed if *either* of the key or value are a GC object. -** -** It's ok to LEAVE OUT the write barrier in the following special cases: -** - The stored value is nil. The key doesn't matter because it's either -** not resurrected or lj_tab_newkey() will take care of the key barrier. -** - The key doesn't matter if the *previously* stored value is guaranteed -** to be non-nil (because the key is kept alive in the table). -** - The key doesn't matter if it's guaranteed not to be part of the table, -** since lj_tab_newkey() takes care of the key barrier. This applies -** trivially to new tables, but watch out for resurrected keys. Storing -** a nil value leaves the key in the table! -** -** In case of doubt use lj_gc_anybarriert() as it's rather cheap. It's used -** by the interpreter for all table stores. -** -** Note: In contrast to Lua's GC, LuaJIT's GC does *not* specially mark -** dead keys in tables. The reference is left in, but it's guaranteed to -** be never dereferenced as long as the value is nil. It's ok if the key is -** freed or if any object subsequently gets the same address. -** -** Not destroying dead keys helps to keep key hash slots stable. This avoids -** specialization back-off for HREFK when a value flips between nil and -** non-nil and the GC gets in the way. It also allows safely hoisting -** HREF/HREFK across GC steps. Dead keys are only removed if a table is -** resized (i.e. by NEWREF) and xREF must not be CSEd across a resize. -** -** The trade-off is that a write barrier for tables must take the key into -** account, too. Implicitly resurrecting the key by storing a non-nil value -** may invalidate the incremental GC invariant. -*/ - -/* -- Common type definitions --------------------------------------------- */ - -/* Types for handling bytecodes. Need this here, details in lj_bc.h. */ -typedef uint32_t BCIns; /* Bytecode instruction. */ -typedef uint32_t BCPos; /* Bytecode position. */ -typedef uint32_t BCReg; /* Bytecode register. */ -typedef int32_t BCLine; /* Bytecode line number. */ - -/* Internal assembler functions. Never call these directly from C. */ -typedef void (*ASMFunction)(void); - -/* Resizable string buffer. Need this here, details in lj_str.h. */ -typedef struct SBuf { - char *buf; /* String buffer base. */ - MSize n; /* String buffer length. */ - MSize sz; /* String buffer size. */ -} SBuf; - -/* -- Tags and values ----------------------------------------------------- */ - -/* Frame link. */ -typedef union { - int32_t ftsz; /* Frame type and size of previous frame. */ - MRef pcr; /* Overlaps PC for Lua frames. */ -} FrameLink; - -/* Tagged value. */ -typedef LJ_ALIGN(8) union TValue { - uint64_t u64; /* 64 bit pattern overlaps number. */ - lua_Number n; /* Number object overlaps split tag/value object. */ - struct { - LJ_ENDIAN_LOHI( - union { - GCRef gcr; /* GCobj reference (if any). */ - int32_t i; /* Integer value. */ - }; - , uint32_t it; /* Internal object tag. Must overlap MSW of number. */ - ) - }; - struct { - LJ_ENDIAN_LOHI( - GCRef func; /* Function for next frame (or dummy L). */ - , FrameLink tp; /* Link to previous frame. */ - ) - } fr; - struct { - LJ_ENDIAN_LOHI( - uint32_t lo; /* Lower 32 bits of number. */ - , uint32_t hi; /* Upper 32 bits of number. */ - ) - } u32; -} TValue; - -typedef const TValue cTValue; - -#define tvref(r) (mref(r, TValue)) - -/* More external and GCobj tags for internal objects. */ -#define LAST_TT LUA_TTHREAD -#define LUA_TPROTO (LAST_TT+1) -#define LUA_TCDATA (LAST_TT+2) - -/* Internal object tags. -** -** Internal tags overlap the MSW of a number object (must be a double). -** Interpreted as a double these are special NaNs. The FPU only generates -** one type of NaN (0xfff8_0000_0000_0000). So MSWs > 0xfff80000 are available -** for use as internal tags. Small negative numbers are used to shorten the -** encoding of type comparisons (reg/mem against sign-ext. 8 bit immediate). -** -** ---MSW---.---LSW--- -** primitive types | itype | | -** lightuserdata | itype | void * | (32 bit platforms) -** lightuserdata |ffff| void * | (64 bit platforms, 47 bit pointers) -** GC objects | itype | GCRef | -** int (LJ_DUALNUM)| itype | int | -** number -------double------ -** -** ORDER LJ_T -** Primitive types nil/false/true must be first, lightuserdata next. -** GC objects are at the end, table/userdata must be lowest. -** Also check lj_ir.h for similar ordering constraints. -*/ -#define LJ_TNIL (~0u) -#define LJ_TFALSE (~1u) -#define LJ_TTRUE (~2u) -#define LJ_TLIGHTUD (~3u) -#define LJ_TSTR (~4u) -#define LJ_TUPVAL (~5u) -#define LJ_TTHREAD (~6u) -#define LJ_TPROTO (~7u) -#define LJ_TFUNC (~8u) -#define LJ_TTRACE (~9u) -#define LJ_TCDATA (~10u) -#define LJ_TTAB (~11u) -#define LJ_TUDATA (~12u) -/* This is just the canonical number type used in some places. */ -#define LJ_TNUMX (~13u) - -/* Integers have itype == LJ_TISNUM doubles have itype < LJ_TISNUM */ -#if LJ_64 -#define LJ_TISNUM 0xfffeffffu -#else -#define LJ_TISNUM LJ_TNUMX -#endif -#define LJ_TISTRUECOND LJ_TFALSE -#define LJ_TISPRI LJ_TTRUE -#define LJ_TISGCV (LJ_TSTR+1) -#define LJ_TISTABUD LJ_TTAB - -/* -- String object ------------------------------------------------------- */ - -/* String object header. String payload follows. */ -typedef struct GCstr { - GCHeader; - uint8_t reserved; /* Used by lexer for fast lookup of reserved words. */ - uint8_t unused; - MSize hash; /* Hash of string. */ - MSize len; /* Size of string. */ -} GCstr; - -#define strref(r) (&gcref((r))->str) -#define strdata(s) ((const char *)((s)+1)) -#define strdatawr(s) ((char *)((s)+1)) -#define strVdata(o) strdata(strV(o)) -#define sizestring(s) (sizeof(struct GCstr)+(s)->len+1) - -/* -- Userdata object ----------------------------------------------------- */ - -/* Userdata object. Payload follows. */ -typedef struct GCudata { - GCHeader; - uint8_t udtype; /* Userdata type. */ - uint8_t unused2; - GCRef env; /* Should be at same offset in GCfunc. */ - MSize len; /* Size of payload. */ - GCRef metatable; /* Must be at same offset in GCtab. */ - uint32_t align1; /* To force 8 byte alignment of the payload. */ -} GCudata; - -/* Userdata types. */ -enum { - UDTYPE_USERDATA, /* Regular userdata. */ - UDTYPE_IO_FILE, /* I/O library FILE. */ - UDTYPE_FFI_CLIB, /* FFI C library namespace. */ - UDTYPE__MAX -}; - -#define uddata(u) ((void *)((u)+1)) -#define sizeudata(u) (sizeof(struct GCudata)+(u)->len) - -/* -- C data object ------------------------------------------------------- */ - -/* C data object. Payload follows. */ -typedef struct GCcdata { - GCHeader; - uint16_t ctypeid; /* C type ID. */ -} GCcdata; - -/* Prepended to variable-sized or realigned C data objects. */ -typedef struct GCcdataVar { - uint16_t offset; /* Offset to allocated memory (relative to GCcdata). */ - uint16_t extra; /* Extra space allocated (incl. GCcdata + GCcdatav). */ - MSize len; /* Size of payload. */ -} GCcdataVar; - -#define cdataptr(cd) ((void *)((cd)+1)) -#define cdataisv(cd) ((cd)->marked & 0x80) -#define cdatav(cd) ((GCcdataVar *)((char *)(cd) - sizeof(GCcdataVar))) -#define cdatavlen(cd) check_exp(cdataisv(cd), cdatav(cd)->len) -#define sizecdatav(cd) (cdatavlen(cd) + cdatav(cd)->extra) -#define memcdatav(cd) ((void *)((char *)(cd) - cdatav(cd)->offset)) - -/* -- Prototype object ---------------------------------------------------- */ - -#define SCALE_NUM_GCO ((int32_t)sizeof(lua_Number)/sizeof(GCRef)) -#define round_nkgc(n) (((n) + SCALE_NUM_GCO-1) & ~(SCALE_NUM_GCO-1)) - -typedef struct GCproto { - GCHeader; - uint8_t numparams; /* Number of parameters. */ - uint8_t framesize; /* Fixed frame size. */ - MSize sizebc; /* Number of bytecode instructions. */ - GCRef gclist; - MRef k; /* Split constant array (points to the middle). */ - MRef uv; /* Upvalue list. local slot|0x8000 or parent uv idx. */ - MSize sizekgc; /* Number of collectable constants. */ - MSize sizekn; /* Number of lua_Number constants. */ - MSize sizept; /* Total size including colocated arrays. */ - uint8_t sizeuv; /* Number of upvalues. */ - uint8_t flags; /* Miscellaneous flags (see below). */ - uint16_t trace; /* Anchor for chain of root traces. */ - /* ------ The following fields are for debugging/tracebacks only ------ */ - GCRef chunkname; /* Name of the chunk this function was defined in. */ - BCLine firstline; /* First line of the function definition. */ - BCLine numline; /* Number of lines for the function definition. */ - MRef lineinfo; /* Compressed map from bytecode ins. to source line. */ - MRef uvinfo; /* Upvalue names. */ - MRef varinfo; /* Names and compressed extents of local variables. */ -} GCproto; - -/* Flags for prototype. */ -#define PROTO_CHILD 0x01 /* Has child prototypes. */ -#define PROTO_VARARG 0x02 /* Vararg function. */ -#define PROTO_FFI 0x04 /* Uses BC_KCDATA for FFI datatypes. */ -#define PROTO_NOJIT 0x08 /* JIT disabled for this function. */ -#define PROTO_ILOOP 0x10 /* Patched bytecode with ILOOP etc. */ -/* Only used during parsing. */ -#define PROTO_HAS_RETURN 0x20 /* Already emitted a return. */ -#define PROTO_FIXUP_RETURN 0x40 /* Need to fixup emitted returns. */ -/* Top bits used for counting created closures. */ -#define PROTO_CLCOUNT 0x20 /* Base of saturating 3 bit counter. */ -#define PROTO_CLC_BITS 3 -#define PROTO_CLC_POLY (3*PROTO_CLCOUNT) /* Polymorphic threshold. */ - -#define PROTO_UV_LOCAL 0x8000 /* Upvalue for local slot. */ -#define PROTO_UV_IMMUTABLE 0x4000 /* Immutable upvalue. */ - -#define proto_kgc(pt, idx) \ - check_exp((uintptr_t)(intptr_t)(idx) >= (uintptr_t)-(intptr_t)(pt)->sizekgc, \ - gcref(mref((pt)->k, GCRef)[(idx)])) -#define proto_knumtv(pt, idx) \ - check_exp((uintptr_t)(idx) < (pt)->sizekn, &mref((pt)->k, TValue)[(idx)]) -#define proto_bc(pt) ((BCIns *)((char *)(pt) + sizeof(GCproto))) -#define proto_bcpos(pt, pc) ((BCPos)((pc) - proto_bc(pt))) -#define proto_uv(pt) (mref((pt)->uv, uint16_t)) - -#define proto_chunkname(pt) (strref((pt)->chunkname)) -#define proto_chunknamestr(pt) (strdata(proto_chunkname((pt)))) -#define proto_lineinfo(pt) (mref((pt)->lineinfo, const void)) -#define proto_uvinfo(pt) (mref((pt)->uvinfo, const uint8_t)) -#define proto_varinfo(pt) (mref((pt)->varinfo, const uint8_t)) - -/* -- Upvalue object ------------------------------------------------------ */ - -typedef struct GCupval { - GCHeader; - uint8_t closed; /* Set if closed (i.e. uv->v == &uv->u.value). */ - uint8_t immutable; /* Immutable value. */ - union { - TValue tv; /* If closed: the value itself. */ - struct { /* If open: double linked list, anchored at thread. */ - GCRef prev; - GCRef next; - }; - }; - MRef v; /* Points to stack slot (open) or above (closed). */ - uint32_t dhash; /* Disambiguation hash: dh1 != dh2 => cannot alias. */ -} GCupval; - -#define uvprev(uv_) (&gcref((uv_)->prev)->uv) -#define uvnext(uv_) (&gcref((uv_)->next)->uv) -#define uvval(uv_) (mref((uv_)->v, TValue)) - -/* -- Function object (closures) ------------------------------------------ */ - -/* Common header for functions. env should be at same offset in GCudata. */ -#define GCfuncHeader \ - GCHeader; uint8_t ffid; uint8_t nupvalues; \ - GCRef env; GCRef gclist; MRef pc - -typedef struct GCfuncC { - GCfuncHeader; - lua_CFunction f; /* C function to be called. */ - TValue upvalue[1]; /* Array of upvalues (TValue). */ -} GCfuncC; - -typedef struct GCfuncL { - GCfuncHeader; - GCRef uvptr[1]; /* Array of _pointers_ to upvalue objects (GCupval). */ -} GCfuncL; - -typedef union GCfunc { - GCfuncC c; - GCfuncL l; -} GCfunc; - -#define FF_LUA 0 -#define FF_C 1 -#define isluafunc(fn) ((fn)->c.ffid == FF_LUA) -#define iscfunc(fn) ((fn)->c.ffid == FF_C) -#define isffunc(fn) ((fn)->c.ffid > FF_C) -#define funcproto(fn) \ - check_exp(isluafunc(fn), (GCproto *)(mref((fn)->l.pc, char)-sizeof(GCproto))) -#define sizeCfunc(n) (sizeof(GCfuncC)-sizeof(TValue)+sizeof(TValue)*(n)) -#define sizeLfunc(n) (sizeof(GCfuncL)-sizeof(GCRef)+sizeof(GCRef)*(n)) - -/* -- Table object -------------------------------------------------------- */ - -/* Hash node. */ -typedef struct Node { - TValue val; /* Value object. Must be first field. */ - TValue key; /* Key object. */ - MRef next; /* Hash chain. */ - MRef freetop; /* Top of free elements (stored in t->node[0]). */ -} Node; - -LJ_STATIC_ASSERT(offsetof(Node, val) == 0); - -typedef struct GCtab { - GCHeader; - uint8_t nomm; /* Negative cache for fast metamethods. */ - int8_t colo; /* Array colocation. */ - MRef array; /* Array part. */ - GCRef gclist; - GCRef metatable; /* Must be at same offset in GCudata. */ - MRef node; /* Hash part. */ - uint32_t asize; /* Size of array part (keys [0, asize-1]). */ - uint32_t hmask; /* Hash part mask (size of hash part - 1). */ -} GCtab; - -#define sizetabcolo(n) ((n)*sizeof(TValue) + sizeof(GCtab)) -#define tabref(r) (&gcref((r))->tab) -#define noderef(r) (mref((r), Node)) -#define nextnode(n) (mref((n)->next, Node)) - -/* -- State objects ------------------------------------------------------- */ - -/* VM states. */ -enum { - LJ_VMST_INTERP, /* Interpreter. */ - LJ_VMST_C, /* C function. */ - LJ_VMST_GC, /* Garbage collector. */ - LJ_VMST_EXIT, /* Trace exit handler. */ - LJ_VMST_RECORD, /* Trace recorder. */ - LJ_VMST_OPT, /* Optimizer. */ - LJ_VMST_ASM, /* Assembler. */ - LJ_VMST__MAX -}; - -#define setvmstate(g, st) ((g)->vmstate = ~LJ_VMST_##st) - -/* Metamethods. ORDER MM */ -#ifdef LJ_HASFFI -#define MMDEF_FFI(_) _(new) -#else -#define MMDEF_FFI(_) -#endif - -#if LJ_52 || LJ_HASFFI -#define MMDEF_PAIRS(_) _(pairs) _(ipairs) -#else -#define MMDEF_PAIRS(_) -#define MM_pairs 255 -#define MM_ipairs 255 -#endif - -#define MMDEF(_) \ - _(index) _(newindex) _(gc) _(mode) _(eq) _(len) \ - /* Only the above (fast) metamethods are negative cached (max. 8). */ \ - _(lt) _(le) _(concat) _(call) \ - /* The following must be in ORDER ARITH. */ \ - _(add) _(sub) _(mul) _(div) _(mod) _(pow) _(unm) \ - /* The following are used in the standard libraries. */ \ - _(metatable) _(tostring) MMDEF_FFI(_) MMDEF_PAIRS(_) - -typedef enum { -#define MMENUM(name) MM_##name, -MMDEF(MMENUM) -#undef MMENUM - MM__MAX, - MM____ = MM__MAX, - MM_FAST = MM_len -} MMS; - -/* GC root IDs. */ -typedef enum { - GCROOT_MMNAME, /* Metamethod names. */ - GCROOT_MMNAME_LAST = GCROOT_MMNAME + MM__MAX-1, - GCROOT_BASEMT, /* Metatables for base types. */ - GCROOT_BASEMT_NUM = GCROOT_BASEMT + ~LJ_TNUMX, - GCROOT_IO_INPUT, /* Userdata for default I/O input file. */ - GCROOT_IO_OUTPUT, /* Userdata for default I/O output file. */ - GCROOT_MAX -} GCRootID; - -#define basemt_it(g, it) ((g)->gcroot[GCROOT_BASEMT+~(it)]) -#define basemt_obj(g, o) ((g)->gcroot[GCROOT_BASEMT+itypemap(o)]) -#define mmname_str(g, mm) (strref((g)->gcroot[GCROOT_MMNAME+(mm)])) - -typedef struct GCState { - MSize total; /* Memory currently allocated. */ - MSize threshold; /* Memory threshold. */ - uint8_t currentwhite; /* Current white color. */ - uint8_t state; /* GC state. */ - uint8_t nocdatafin; /* No cdata finalizer called. */ - uint8_t unused2; - MSize sweepstr; /* Sweep position in string table. */ - GCRef root; /* List of all collectable objects. */ - MRef sweep; /* Sweep position in root list. */ - GCRef gray; /* List of gray objects. */ - GCRef grayagain; /* List of objects for atomic traversal. */ - GCRef weak; /* List of weak tables (to be cleared). */ - GCRef mmudata; /* List of userdata (to be finalized). */ - MSize stepmul; /* Incremental GC step granularity. */ - MSize debt; /* Debt (how much GC is behind schedule). */ - MSize estimate; /* Estimate of memory actually in use. */ - MSize pause; /* Pause between successive GC cycles. */ -} GCState; - -/* Global state, shared by all threads of a Lua universe. */ -typedef struct global_State { - GCRef *strhash; /* String hash table (hash chain anchors). */ - MSize strmask; /* String hash mask (size of hash table - 1). */ - MSize strnum; /* Number of strings in hash table. */ - lua_Alloc allocf; /* Memory allocator. */ - void *allocd; /* Memory allocator data. */ - GCState gc; /* Garbage collector. */ - SBuf tmpbuf; /* Temporary buffer for string concatenation. */ - Node nilnode; /* Fallback 1-element hash part (nil key and value). */ - GCstr strempty; /* Empty string. */ - uint8_t stremptyz; /* Zero terminator of empty string. */ - uint8_t hookmask; /* Hook mask. */ - uint8_t dispatchmode; /* Dispatch mode. */ - uint8_t vmevmask; /* VM event mask. */ - GCRef mainthref; /* Link to main thread. */ - TValue registrytv; /* Anchor for registry. */ - TValue tmptv, tmptv2; /* Temporary TValues. */ - GCupval uvhead; /* Head of double-linked list of all open upvalues. */ - int32_t hookcount; /* Instruction hook countdown. */ - int32_t hookcstart; /* Start count for instruction hook counter. */ - lua_Hook hookf; /* Hook function. */ - lua_CFunction wrapf; /* Wrapper for C function calls. */ - lua_CFunction panic; /* Called as a last resort for errors. */ - volatile int32_t vmstate; /* VM state or current JIT code trace number. */ - BCIns bc_cfunc_int; /* Bytecode for internal C function calls. */ - BCIns bc_cfunc_ext; /* Bytecode for external C function calls. */ - GCRef jit_L; /* Current JIT code lua_State or NULL. */ - MRef jit_base; /* Current JIT code L->base. */ - MRef ctype_state; /* Pointer to C type state. */ - GCRef gcroot[GCROOT_MAX]; /* GC roots. */ -} global_State; - -#define mainthread(g) (&gcref(g->mainthref)->th) -#define niltv(L) \ - check_exp(tvisnil(&G(L)->nilnode.val), &G(L)->nilnode.val) -#define niltvg(g) \ - check_exp(tvisnil(&(g)->nilnode.val), &(g)->nilnode.val) - -/* Hook management. Hook event masks are defined in lua.h. */ -#define HOOK_EVENTMASK 0x0f -#define HOOK_ACTIVE 0x10 -#define HOOK_ACTIVE_SHIFT 4 -#define HOOK_VMEVENT 0x20 -#define HOOK_GC 0x40 -#define hook_active(g) ((g)->hookmask & HOOK_ACTIVE) -#define hook_enter(g) ((g)->hookmask |= HOOK_ACTIVE) -#define hook_entergc(g) ((g)->hookmask |= (HOOK_ACTIVE|HOOK_GC)) -#define hook_vmevent(g) ((g)->hookmask |= (HOOK_ACTIVE|HOOK_VMEVENT)) -#define hook_leave(g) ((g)->hookmask &= ~HOOK_ACTIVE) -#define hook_save(g) ((g)->hookmask & ~HOOK_EVENTMASK) -#define hook_restore(g, h) \ - ((g)->hookmask = ((g)->hookmask & HOOK_EVENTMASK) | (h)) - -/* Per-thread state object. */ -struct lua_State { - GCHeader; - uint8_t dummy_ffid; /* Fake FF_C for curr_funcisL() on dummy frames. */ - uint8_t status; /* Thread status. */ - MRef glref; /* Link to global state. */ - GCRef gclist; /* GC chain. */ - TValue *base; /* Base of currently executing function. */ - TValue *top; /* First free slot in the stack. */ - MRef maxstack; /* Last free slot in the stack. */ - MRef stack; /* Stack base. */ - GCRef openupval; /* List of open upvalues in the stack. */ - GCRef env; /* Thread environment (table of globals). */ - void *cframe; /* End of C stack frame chain. */ - MSize stacksize; /* True stack size (incl. LJ_STACK_EXTRA). */ -}; - -#define G(L) (mref(L->glref, global_State)) -#define registry(L) (&G(L)->registrytv) - -/* Macros to access the currently executing (Lua) function. */ -#define curr_func(L) (&gcref((L->base-1)->fr.func)->fn) -#define curr_funcisL(L) (isluafunc(curr_func(L))) -#define curr_proto(L) (funcproto(curr_func(L))) -#define curr_topL(L) (L->base + curr_proto(L)->framesize) -#define curr_top(L) (curr_funcisL(L) ? curr_topL(L) : L->top) - -/* -- GC object definition and conversions -------------------------------- */ - -/* GC header for generic access to common fields of GC objects. */ -typedef struct GChead { - GCHeader; - uint8_t unused1; - uint8_t unused2; - GCRef env; - GCRef gclist; - GCRef metatable; -} GChead; - -/* The env field SHOULD be at the same offset for all GC objects. */ -LJ_STATIC_ASSERT(offsetof(GChead, env) == offsetof(GCfuncL, env)); -LJ_STATIC_ASSERT(offsetof(GChead, env) == offsetof(GCudata, env)); - -/* The metatable field MUST be at the same offset for all GC objects. */ -LJ_STATIC_ASSERT(offsetof(GChead, metatable) == offsetof(GCtab, metatable)); -LJ_STATIC_ASSERT(offsetof(GChead, metatable) == offsetof(GCudata, metatable)); - -/* The gclist field MUST be at the same offset for all GC objects. */ -LJ_STATIC_ASSERT(offsetof(GChead, gclist) == offsetof(lua_State, gclist)); -LJ_STATIC_ASSERT(offsetof(GChead, gclist) == offsetof(GCproto, gclist)); -LJ_STATIC_ASSERT(offsetof(GChead, gclist) == offsetof(GCfuncL, gclist)); -LJ_STATIC_ASSERT(offsetof(GChead, gclist) == offsetof(GCtab, gclist)); - -typedef union GCobj { - GChead gch; - GCstr str; - GCupval uv; - lua_State th; - GCproto pt; - GCfunc fn; - GCcdata cd; - GCtab tab; - GCudata ud; -} GCobj; - -/* Macros to convert a GCobj pointer into a specific value. */ -#define gco2str(o) check_exp((o)->gch.gct == ~LJ_TSTR, &(o)->str) -#define gco2uv(o) check_exp((o)->gch.gct == ~LJ_TUPVAL, &(o)->uv) -#define gco2th(o) check_exp((o)->gch.gct == ~LJ_TTHREAD, &(o)->th) -#define gco2pt(o) check_exp((o)->gch.gct == ~LJ_TPROTO, &(o)->pt) -#define gco2func(o) check_exp((o)->gch.gct == ~LJ_TFUNC, &(o)->fn) -#define gco2cd(o) check_exp((o)->gch.gct == ~LJ_TCDATA, &(o)->cd) -#define gco2tab(o) check_exp((o)->gch.gct == ~LJ_TTAB, &(o)->tab) -#define gco2ud(o) check_exp((o)->gch.gct == ~LJ_TUDATA, &(o)->ud) - -/* Macro to convert any collectable object into a GCobj pointer. */ -#define obj2gco(v) ((GCobj *)(v)) - -/* -- TValue getters/setters ---------------------------------------------- */ - -#ifdef LUA_USE_ASSERT -#include "lj_gc.h" -#endif - -/* Macros to test types. */ -#define itype(o) ((o)->it) -#define tvisnil(o) (itype(o) == LJ_TNIL) -#define tvisfalse(o) (itype(o) == LJ_TFALSE) -#define tvistrue(o) (itype(o) == LJ_TTRUE) -#define tvisbool(o) (tvisfalse(o) || tvistrue(o)) -#if LJ_64 -#define tvislightud(o) (((int32_t)itype(o) >> 15) == -2) -#else -#define tvislightud(o) (itype(o) == LJ_TLIGHTUD) -#endif -#define tvisstr(o) (itype(o) == LJ_TSTR) -#define tvisfunc(o) (itype(o) == LJ_TFUNC) -#define tvisthread(o) (itype(o) == LJ_TTHREAD) -#define tvisproto(o) (itype(o) == LJ_TPROTO) -#define tviscdata(o) (itype(o) == LJ_TCDATA) -#define tvistab(o) (itype(o) == LJ_TTAB) -#define tvisudata(o) (itype(o) == LJ_TUDATA) -#define tvisnumber(o) (itype(o) <= LJ_TISNUM) -#define tvisint(o) (LJ_DUALNUM && itype(o) == LJ_TISNUM) -#define tvisnum(o) (itype(o) < LJ_TISNUM) - -#define tvistruecond(o) (itype(o) < LJ_TISTRUECOND) -#define tvispri(o) (itype(o) >= LJ_TISPRI) -#define tvistabud(o) (itype(o) <= LJ_TISTABUD) /* && !tvisnum() */ -#define tvisgcv(o) ((itype(o) - LJ_TISGCV) > (LJ_TNUMX - LJ_TISGCV)) - -/* Special macros to test numbers for NaN, +0, -0, +1 and raw equality. */ -#define tvisnan(o) ((o)->n != (o)->n) -#if LJ_64 -#define tviszero(o) (((o)->u64 << 1) == 0) -#else -#define tviszero(o) (((o)->u32.lo | ((o)->u32.hi << 1)) == 0) -#endif -#define tvispzero(o) ((o)->u64 == 0) -#define tvismzero(o) ((o)->u64 == U64x(80000000,00000000)) -#define tvispone(o) ((o)->u64 == U64x(3ff00000,00000000)) -#define rawnumequal(o1, o2) ((o1)->u64 == (o2)->u64) - -/* Macros to convert type ids. */ -#if LJ_64 -#define itypemap(o) \ - (tvisnumber(o) ? ~LJ_TNUMX : tvislightud(o) ? ~LJ_TLIGHTUD : ~itype(o)) -#else -#define itypemap(o) (tvisnumber(o) ? ~LJ_TNUMX : ~itype(o)) -#endif - -/* Macros to get tagged values. */ -#define gcval(o) (gcref((o)->gcr)) -#define boolV(o) check_exp(tvisbool(o), (LJ_TFALSE - (o)->it)) -#if LJ_64 -#define lightudV(o) \ - check_exp(tvislightud(o), (void *)((o)->u64 & U64x(00007fff,ffffffff))) -#else -#define lightudV(o) check_exp(tvislightud(o), gcrefp((o)->gcr, void)) -#endif -#define gcV(o) check_exp(tvisgcv(o), gcval(o)) -#define strV(o) check_exp(tvisstr(o), &gcval(o)->str) -#define funcV(o) check_exp(tvisfunc(o), &gcval(o)->fn) -#define threadV(o) check_exp(tvisthread(o), &gcval(o)->th) -#define protoV(o) check_exp(tvisproto(o), &gcval(o)->pt) -#define cdataV(o) check_exp(tviscdata(o), &gcval(o)->cd) -#define tabV(o) check_exp(tvistab(o), &gcval(o)->tab) -#define udataV(o) check_exp(tvisudata(o), &gcval(o)->ud) -#define numV(o) check_exp(tvisnum(o), (o)->n) -#define intV(o) check_exp(tvisint(o), (int32_t)(o)->i) - -/* Macros to set tagged values. */ -#define setitype(o, i) ((o)->it = (i)) -#define setnilV(o) ((o)->it = LJ_TNIL) -#define setboolV(o, x) ((o)->it = LJ_TFALSE-(uint32_t)(x)) - -static LJ_AINLINE void setlightudV(TValue *o, void *p) -{ -#if LJ_64 - o->u64 = (uint64_t)p | (((uint64_t)0xffff) << 48); -#else - setgcrefp(o->gcr, p); setitype(o, LJ_TLIGHTUD); -#endif -} - -#if LJ_64 -#define checklightudptr(L, p) \ - (((uint64_t)(p) >> 47) ? (lj_err_msg(L, LJ_ERR_BADLU), NULL) : (p)) -#define setcont(o, f) \ - ((o)->u64 = (uint64_t)(void *)(f) - (uint64_t)lj_vm_asm_begin) -#else -#define checklightudptr(L, p) (p) -#define setcont(o, f) setlightudV((o), (void *)(f)) -#endif - -#define tvchecklive(L, o) \ - UNUSED(L), lua_assert(!tvisgcv(o) || \ - ((~itype(o) == gcval(o)->gch.gct) && !isdead(G(L), gcval(o)))) - -static LJ_AINLINE void setgcV(lua_State *L, TValue *o, GCobj *v, uint32_t itype) -{ - setgcref(o->gcr, v); setitype(o, itype); tvchecklive(L, o); -} - -#define define_setV(name, type, tag) \ -static LJ_AINLINE void name(lua_State *L, TValue *o, type *v) \ -{ \ - setgcV(L, o, obj2gco(v), tag); \ -} -define_setV(setstrV, GCstr, LJ_TSTR) -define_setV(setthreadV, lua_State, LJ_TTHREAD) -define_setV(setprotoV, GCproto, LJ_TPROTO) -define_setV(setfuncV, GCfunc, LJ_TFUNC) -define_setV(setcdataV, GCcdata, LJ_TCDATA) -define_setV(settabV, GCtab, LJ_TTAB) -define_setV(setudataV, GCudata, LJ_TUDATA) - -#define setnumV(o, x) ((o)->n = (x)) -#define setnanV(o) ((o)->u64 = U64x(fff80000,00000000)) -#define setpinfV(o) ((o)->u64 = U64x(7ff00000,00000000)) -#define setminfV(o) ((o)->u64 = U64x(fff00000,00000000)) - -static LJ_AINLINE void setintV(TValue *o, int32_t i) -{ -#if LJ_DUALNUM - o->i = (uint32_t)i; setitype(o, LJ_TISNUM); -#else - o->n = (lua_Number)i; -#endif -} - -static LJ_AINLINE void setint64V(TValue *o, int64_t i) -{ - if (LJ_DUALNUM && LJ_LIKELY(i == (int64_t)(int32_t)i)) - setintV(o, (int32_t)i); - else - setnumV(o, (lua_Number)i); -} - -#if LJ_64 -#define setintptrV(o, i) setint64V((o), (i)) -#else -#define setintptrV(o, i) setintV((o), (i)) -#endif - -/* Copy tagged values. */ -static LJ_AINLINE void copyTV(lua_State *L, TValue *o1, const TValue *o2) -{ - *o1 = *o2; tvchecklive(L, o1); -} - -/* -- Number to integer conversion ---------------------------------------- */ - -#if LJ_SOFTFP -LJ_ASMF int32_t lj_vm_tobit(double x); -#endif - -static LJ_AINLINE int32_t lj_num2bit(lua_Number n) -{ -#if LJ_SOFTFP - return lj_vm_tobit(n); -#else - TValue o; - o.n = n + 6755399441055744.0; /* 2^52 + 2^51 */ - return (int32_t)o.u32.lo; -#endif -} - -#if LJ_TARGET_X86 && !defined(__SSE2__) -#define lj_num2int(n) lj_num2bit((n)) -#else -#define lj_num2int(n) ((int32_t)(n)) -#endif - -static LJ_AINLINE uint64_t lj_num2u64(lua_Number n) -{ -#ifdef _MSC_VER - if (n >= 9223372036854775808.0) /* They think it's a feature. */ - return (uint64_t)(int64_t)(n - 18446744073709551616.0); - else -#endif - return (uint64_t)n; -} - -static LJ_AINLINE int32_t numberVint(cTValue *o) -{ - if (LJ_LIKELY(tvisint(o))) - return intV(o); - else - return lj_num2int(numV(o)); -} - -static LJ_AINLINE lua_Number numberVnum(cTValue *o) -{ - if (LJ_UNLIKELY(tvisint(o))) - return (lua_Number)intV(o); - else - return numV(o); -} - -/* -- Miscellaneous object handling --------------------------------------- */ - -/* Names and maps for internal and external object tags. */ -LJ_DATA const char *const lj_obj_typename[1+LUA_TCDATA+1]; -LJ_DATA const char *const lj_obj_itypename[~LJ_TNUMX+1]; - -#define lj_typename(o) (lj_obj_itypename[itypemap(o)]) - -/* Compare two objects without calling metamethods. */ -LJ_FUNC int lj_obj_equal(cTValue *o1, cTValue *o2); - -#endif diff --git a/deps/luajit/src/lj_opt_dce.c b/deps/luajit/src/lj_opt_dce.c deleted file mode 100644 index 7f1faaf..0000000 --- a/deps/luajit/src/lj_opt_dce.c +++ /dev/null @@ -1,78 +0,0 @@ -/* -** DCE: Dead Code Elimination. Pre-LOOP only -- ASM already performs DCE. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_dce_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Scan through all snapshots and mark all referenced instructions. */ -static void dce_marksnap(jit_State *J) -{ - SnapNo i, nsnap = J->cur.nsnap; - for (i = 0; i < nsnap; i++) { - SnapShot *snap = &J->cur.snap[i]; - SnapEntry *map = &J->cur.snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - IRRef ref = snap_ref(map[n]); - if (ref >= REF_FIRST) - irt_setmark(IR(ref)->t); - } - } -} - -/* Backwards propagate marks. Replace unused instructions with NOPs. */ -static void dce_propagate(jit_State *J) -{ - IRRef1 *pchain[IR__MAX]; - IRRef ins; - uint32_t i; - for (i = 0; i < IR__MAX; i++) pchain[i] = &J->chain[i]; - for (ins = J->cur.nins-1; ins >= REF_FIRST; ins--) { - IRIns *ir = IR(ins); - if (irt_ismarked(ir->t)) { - irt_clearmark(ir->t); - pchain[ir->o] = &ir->prev; - } else if (!ir_sideeff(ir)) { - *pchain[ir->o] = ir->prev; /* Reroute original instruction chain. */ - ir->t.irt = IRT_NIL; - ir->o = IR_NOP; /* Replace instruction with NOP. */ - ir->op1 = ir->op2 = 0; - ir->prev = 0; - continue; - } - if (ir->op1 >= REF_FIRST) irt_setmark(IR(ir->op1)->t); - if (ir->op2 >= REF_FIRST) irt_setmark(IR(ir->op2)->t); - } -} - -/* Dead Code Elimination. -** -** First backpropagate marks for all used instructions. Then replace -** the unused ones with a NOP. Note that compressing the IR to eliminate -** the NOPs does not pay off. -*/ -void lj_opt_dce(jit_State *J) -{ - if ((J->flags & JIT_F_OPT_DCE)) { - dce_marksnap(J); - dce_propagate(J); - memset(J->bpropcache, 0, sizeof(J->bpropcache)); /* Invalidate cache. */ - } -} - -#undef IR - -#endif diff --git a/deps/luajit/src/lj_opt_fold.c b/deps/luajit/src/lj_opt_fold.c deleted file mode 100644 index d00fdd5..0000000 --- a/deps/luajit/src/lj_opt_fold.c +++ /dev/null @@ -1,2304 +0,0 @@ -/* -** FOLD: Constant Folding, Algebraic Simplifications and Reassociation. -** ABCelim: Array Bounds Check Elimination. -** CSE: Common-Subexpression Elimination. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_fold_c -#define LUA_CORE - -#include - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#endif -#include "lj_carith.h" -#include "lj_vm.h" -#include "lj_strscan.h" - -/* Here's a short description how the FOLD engine processes instructions: -** -** The FOLD engine receives a single instruction stored in fins (J->fold.ins). -** The instruction and its operands are used to select matching fold rules. -** These are applied iteratively until a fixed point is reached. -** -** The 8 bit opcode of the instruction itself plus the opcodes of the -** two instructions referenced by its operands form a 24 bit key -** 'ins left right' (unused operands -> 0, literals -> lowest 8 bits). -** -** This key is used for partial matching against the fold rules. The -** left/right operand fields of the key are successively masked with -** the 'any' wildcard, from most specific to least specific: -** -** ins left right -** ins any right -** ins left any -** ins any any -** -** The masked key is used to lookup a matching fold rule in a semi-perfect -** hash table. If a matching rule is found, the related fold function is run. -** Multiple rules can share the same fold function. A fold rule may return -** one of several special values: -** -** - NEXTFOLD means no folding was applied, because an additional test -** inside the fold function failed. Matching continues against less -** specific fold rules. Finally the instruction is passed on to CSE. -** -** - RETRYFOLD means the instruction was modified in-place. Folding is -** retried as if this instruction had just been received. -** -** All other return values are terminal actions -- no further folding is -** applied: -** -** - INTFOLD(i) returns a reference to the integer constant i. -** -** - LEFTFOLD and RIGHTFOLD return the left/right operand reference -** without emitting an instruction. -** -** - CSEFOLD and EMITFOLD pass the instruction directly to CSE or emit -** it without passing through any further optimizations. -** -** - FAILFOLD, DROPFOLD and CONDFOLD only apply to instructions which have -** no result (e.g. guarded assertions): FAILFOLD means the guard would -** always fail, i.e. the current trace is pointless. DROPFOLD means -** the guard is always true and has been eliminated. CONDFOLD is a -** shortcut for FAILFOLD + cond (i.e. drop if true, otherwise fail). -** -** - Any other return value is interpreted as an IRRef or TRef. This -** can be a reference to an existing or a newly created instruction. -** Only the least-significant 16 bits (IRRef1) are used to form a TRef -** which is finally returned to the caller. -** -** The FOLD engine receives instructions both from the trace recorder and -** substituted instructions from LOOP unrolling. This means all types -** of instructions may end up here, even though the recorder bypasses -** FOLD in some cases. Thus all loads, stores and allocations must have -** an any/any rule to avoid being passed on to CSE. -** -** Carefully read the following requirements before adding or modifying -** any fold rules: -** -** Requirement #1: All fold rules must preserve their destination type. -** -** Consistently use INTFOLD() (KINT result) or lj_ir_knum() (KNUM result). -** Never use lj_ir_knumint() which can have either a KINT or KNUM result. -** -** Requirement #2: Fold rules should not create *new* instructions which -** reference operands *across* PHIs. -** -** E.g. a RETRYFOLD with 'fins->op1 = fleft->op1' is invalid if the -** left operand is a PHI. Then fleft->op1 would point across the PHI -** frontier to an invariant instruction. Adding a PHI for this instruction -** would be counterproductive. The solution is to add a barrier which -** prevents folding across PHIs, i.e. 'PHIBARRIER(fleft)' in this case. -** The only exception is for recurrences with high latencies like -** repeated int->num->int conversions. -** -** One could relax this condition a bit if the referenced instruction is -** a PHI, too. But this often leads to worse code due to excessive -** register shuffling. -** -** Note: returning *existing* instructions (e.g. LEFTFOLD) is ok, though. -** Even returning fleft->op1 would be ok, because a new PHI will added, -** if needed. But again, this leads to excessive register shuffling and -** should be avoided. -** -** Requirement #3: The set of all fold rules must be monotonic to guarantee -** termination. -** -** The goal is optimization, so one primarily wants to add strength-reducing -** rules. This means eliminating an instruction or replacing an instruction -** with one or more simpler instructions. Don't add fold rules which point -** into the other direction. -** -** Some rules (like commutativity) do not directly reduce the strength of -** an instruction, but enable other fold rules (e.g. by moving constants -** to the right operand). These rules must be made unidirectional to avoid -** cycles. -** -** Rule of thumb: the trace recorder expands the IR and FOLD shrinks it. -*/ - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) -#define fins (&J->fold.ins) -#define fleft (&J->fold.left) -#define fright (&J->fold.right) -#define knumleft (ir_knum(fleft)->n) -#define knumright (ir_knum(fright)->n) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -/* Fold function type. Fastcall on x86 significantly reduces their size. */ -typedef IRRef (LJ_FASTCALL *FoldFunc)(jit_State *J); - -/* Macros for the fold specs, so buildvm can recognize them. */ -#define LJFOLD(x) -#define LJFOLDX(x) -#define LJFOLDF(name) static TRef LJ_FASTCALL fold_##name(jit_State *J) -/* Note: They must be at the start of a line or buildvm ignores them! */ - -/* Barrier to prevent using operands across PHIs. */ -#define PHIBARRIER(ir) if (irt_isphi((ir)->t)) return NEXTFOLD - -/* Barrier to prevent folding across a GC step. -** GC steps can only happen at the head of a trace and at LOOP. -** And the GC is only driven forward if there is at least one allocation. -*/ -#define gcstep_barrier(J, ref) \ - ((ref) < J->chain[IR_LOOP] && \ - (J->chain[IR_SNEW] || J->chain[IR_XSNEW] || \ - J->chain[IR_TNEW] || J->chain[IR_TDUP] || \ - J->chain[IR_CNEW] || J->chain[IR_CNEWI] || J->chain[IR_TOSTR])) - -/* -- Constant folding for FP numbers ------------------------------------- */ - -LJFOLD(ADD KNUM KNUM) -LJFOLD(SUB KNUM KNUM) -LJFOLD(MUL KNUM KNUM) -LJFOLD(DIV KNUM KNUM) -LJFOLD(NEG KNUM KNUM) -LJFOLD(ABS KNUM KNUM) -LJFOLD(ATAN2 KNUM KNUM) -LJFOLD(LDEXP KNUM KNUM) -LJFOLD(MIN KNUM KNUM) -LJFOLD(MAX KNUM KNUM) -LJFOLDF(kfold_numarith) -{ - lua_Number a = knumleft; - lua_Number b = knumright; - lua_Number y = lj_vm_foldarith(a, b, fins->o - IR_ADD); - return lj_ir_knum(J, y); -} - -LJFOLD(LDEXP KNUM KINT) -LJFOLDF(kfold_ldexp) -{ -#if LJ_TARGET_X86ORX64 - UNUSED(J); - return NEXTFOLD; -#else - return lj_ir_knum(J, ldexp(knumleft, fright->i)); -#endif -} - -LJFOLD(FPMATH KNUM any) -LJFOLDF(kfold_fpmath) -{ - lua_Number a = knumleft; - lua_Number y = lj_vm_foldfpm(a, fins->op2); - return lj_ir_knum(J, y); -} - -LJFOLD(POW KNUM KINT) -LJFOLDF(kfold_numpow) -{ - lua_Number a = knumleft; - lua_Number b = (lua_Number)fright->i; - lua_Number y = lj_vm_foldarith(a, b, IR_POW - IR_ADD); - return lj_ir_knum(J, y); -} - -/* Must not use kfold_kref for numbers (could be NaN). */ -LJFOLD(EQ KNUM KNUM) -LJFOLD(NE KNUM KNUM) -LJFOLD(LT KNUM KNUM) -LJFOLD(GE KNUM KNUM) -LJFOLD(LE KNUM KNUM) -LJFOLD(GT KNUM KNUM) -LJFOLD(ULT KNUM KNUM) -LJFOLD(UGE KNUM KNUM) -LJFOLD(ULE KNUM KNUM) -LJFOLD(UGT KNUM KNUM) -LJFOLDF(kfold_numcomp) -{ - return CONDFOLD(lj_ir_numcmp(knumleft, knumright, (IROp)fins->o)); -} - -/* -- Constant folding for 32 bit integers -------------------------------- */ - -static int32_t kfold_intop(int32_t k1, int32_t k2, IROp op) -{ - switch (op) { - case IR_ADD: k1 += k2; break; - case IR_SUB: k1 -= k2; break; - case IR_MUL: k1 *= k2; break; - case IR_MOD: k1 = lj_vm_modi(k1, k2); break; - case IR_NEG: k1 = -k1; break; - case IR_BAND: k1 &= k2; break; - case IR_BOR: k1 |= k2; break; - case IR_BXOR: k1 ^= k2; break; - case IR_BSHL: k1 <<= (k2 & 31); break; - case IR_BSHR: k1 = (int32_t)((uint32_t)k1 >> (k2 & 31)); break; - case IR_BSAR: k1 >>= (k2 & 31); break; - case IR_BROL: k1 = (int32_t)lj_rol((uint32_t)k1, (k2 & 31)); break; - case IR_BROR: k1 = (int32_t)lj_ror((uint32_t)k1, (k2 & 31)); break; - case IR_MIN: k1 = k1 < k2 ? k1 : k2; break; - case IR_MAX: k1 = k1 > k2 ? k1 : k2; break; - default: lua_assert(0); break; - } - return k1; -} - -LJFOLD(ADD KINT KINT) -LJFOLD(SUB KINT KINT) -LJFOLD(MUL KINT KINT) -LJFOLD(MOD KINT KINT) -LJFOLD(NEG KINT KINT) -LJFOLD(BAND KINT KINT) -LJFOLD(BOR KINT KINT) -LJFOLD(BXOR KINT KINT) -LJFOLD(BSHL KINT KINT) -LJFOLD(BSHR KINT KINT) -LJFOLD(BSAR KINT KINT) -LJFOLD(BROL KINT KINT) -LJFOLD(BROR KINT KINT) -LJFOLD(MIN KINT KINT) -LJFOLD(MAX KINT KINT) -LJFOLDF(kfold_intarith) -{ - return INTFOLD(kfold_intop(fleft->i, fright->i, (IROp)fins->o)); -} - -LJFOLD(ADDOV KINT KINT) -LJFOLD(SUBOV KINT KINT) -LJFOLD(MULOV KINT KINT) -LJFOLDF(kfold_intovarith) -{ - lua_Number n = lj_vm_foldarith((lua_Number)fleft->i, (lua_Number)fright->i, - fins->o - IR_ADDOV); - int32_t k = lj_num2int(n); - if (n != (lua_Number)k) - return FAILFOLD; - return INTFOLD(k); -} - -LJFOLD(BNOT KINT) -LJFOLDF(kfold_bnot) -{ - return INTFOLD(~fleft->i); -} - -LJFOLD(BSWAP KINT) -LJFOLDF(kfold_bswap) -{ - return INTFOLD((int32_t)lj_bswap((uint32_t)fleft->i)); -} - -LJFOLD(LT KINT KINT) -LJFOLD(GE KINT KINT) -LJFOLD(LE KINT KINT) -LJFOLD(GT KINT KINT) -LJFOLD(ULT KINT KINT) -LJFOLD(UGE KINT KINT) -LJFOLD(ULE KINT KINT) -LJFOLD(UGT KINT KINT) -LJFOLD(ABC KINT KINT) -LJFOLDF(kfold_intcomp) -{ - int32_t a = fleft->i, b = fright->i; - switch ((IROp)fins->o) { - case IR_LT: return CONDFOLD(a < b); - case IR_GE: return CONDFOLD(a >= b); - case IR_LE: return CONDFOLD(a <= b); - case IR_GT: return CONDFOLD(a > b); - case IR_ULT: return CONDFOLD((uint32_t)a < (uint32_t)b); - case IR_UGE: return CONDFOLD((uint32_t)a >= (uint32_t)b); - case IR_ULE: return CONDFOLD((uint32_t)a <= (uint32_t)b); - case IR_ABC: - case IR_UGT: return CONDFOLD((uint32_t)a > (uint32_t)b); - default: lua_assert(0); return FAILFOLD; - } -} - -LJFOLD(UGE any KINT) -LJFOLDF(kfold_intcomp0) -{ - if (fright->i == 0) - return DROPFOLD; - return NEXTFOLD; -} - -/* -- Constant folding for 64 bit integers -------------------------------- */ - -static uint64_t kfold_int64arith(uint64_t k1, uint64_t k2, IROp op) -{ - switch (op) { -#if LJ_64 || LJ_HASFFI - case IR_ADD: k1 += k2; break; - case IR_SUB: k1 -= k2; break; -#endif -#if LJ_HASFFI - case IR_MUL: k1 *= k2; break; - case IR_BAND: k1 &= k2; break; - case IR_BOR: k1 |= k2; break; - case IR_BXOR: k1 ^= k2; break; -#endif - default: UNUSED(k2); lua_assert(0); break; - } - return k1; -} - -LJFOLD(ADD KINT64 KINT64) -LJFOLD(SUB KINT64 KINT64) -LJFOLD(MUL KINT64 KINT64) -LJFOLD(BAND KINT64 KINT64) -LJFOLD(BOR KINT64 KINT64) -LJFOLD(BXOR KINT64 KINT64) -LJFOLDF(kfold_int64arith) -{ - return INT64FOLD(kfold_int64arith(ir_k64(fleft)->u64, - ir_k64(fright)->u64, (IROp)fins->o)); -} - -LJFOLD(DIV KINT64 KINT64) -LJFOLD(MOD KINT64 KINT64) -LJFOLD(POW KINT64 KINT64) -LJFOLDF(kfold_int64arith2) -{ -#if LJ_HASFFI - uint64_t k1 = ir_k64(fleft)->u64, k2 = ir_k64(fright)->u64; - if (irt_isi64(fins->t)) { - k1 = fins->o == IR_DIV ? lj_carith_divi64((int64_t)k1, (int64_t)k2) : - fins->o == IR_MOD ? lj_carith_modi64((int64_t)k1, (int64_t)k2) : - lj_carith_powi64((int64_t)k1, (int64_t)k2); - } else { - k1 = fins->o == IR_DIV ? lj_carith_divu64(k1, k2) : - fins->o == IR_MOD ? lj_carith_modu64(k1, k2) : - lj_carith_powu64(k1, k2); - } - return INT64FOLD(k1); -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -LJFOLD(BSHL KINT64 KINT) -LJFOLD(BSHR KINT64 KINT) -LJFOLD(BSAR KINT64 KINT) -LJFOLD(BROL KINT64 KINT) -LJFOLD(BROR KINT64 KINT) -LJFOLDF(kfold_int64shift) -{ -#if LJ_HASFFI || LJ_64 - uint64_t k = ir_k64(fleft)->u64; - int32_t sh = (fright->i & 63); - switch ((IROp)fins->o) { - case IR_BSHL: k <<= sh; break; -#if LJ_HASFFI - case IR_BSHR: k >>= sh; break; - case IR_BSAR: k = (uint64_t)((int64_t)k >> sh); break; - case IR_BROL: k = lj_rol(k, sh); break; - case IR_BROR: k = lj_ror(k, sh); break; -#endif - default: lua_assert(0); break; - } - return INT64FOLD(k); -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -LJFOLD(BNOT KINT64) -LJFOLDF(kfold_bnot64) -{ -#if LJ_HASFFI - return INT64FOLD(~ir_k64(fleft)->u64); -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -LJFOLD(BSWAP KINT64) -LJFOLDF(kfold_bswap64) -{ -#if LJ_HASFFI - return INT64FOLD(lj_bswap64(ir_k64(fleft)->u64)); -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -LJFOLD(LT KINT64 KINT64) -LJFOLD(GE KINT64 KINT64) -LJFOLD(LE KINT64 KINT64) -LJFOLD(GT KINT64 KINT64) -LJFOLD(ULT KINT64 KINT64) -LJFOLD(UGE KINT64 KINT64) -LJFOLD(ULE KINT64 KINT64) -LJFOLD(UGT KINT64 KINT64) -LJFOLDF(kfold_int64comp) -{ -#if LJ_HASFFI - uint64_t a = ir_k64(fleft)->u64, b = ir_k64(fright)->u64; - switch ((IROp)fins->o) { - case IR_LT: return CONDFOLD(a < b); - case IR_GE: return CONDFOLD(a >= b); - case IR_LE: return CONDFOLD(a <= b); - case IR_GT: return CONDFOLD(a > b); - case IR_ULT: return CONDFOLD((uint64_t)a < (uint64_t)b); - case IR_UGE: return CONDFOLD((uint64_t)a >= (uint64_t)b); - case IR_ULE: return CONDFOLD((uint64_t)a <= (uint64_t)b); - case IR_UGT: return CONDFOLD((uint64_t)a > (uint64_t)b); - default: lua_assert(0); return FAILFOLD; - } -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -LJFOLD(UGE any KINT64) -LJFOLDF(kfold_int64comp0) -{ -#if LJ_HASFFI - if (ir_k64(fright)->u64 == 0) - return DROPFOLD; - return NEXTFOLD; -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -/* -- Constant folding for strings ---------------------------------------- */ - -LJFOLD(SNEW KKPTR KINT) -LJFOLDF(kfold_snew_kptr) -{ - GCstr *s = lj_str_new(J->L, (const char *)ir_kptr(fleft), (size_t)fright->i); - return lj_ir_kstr(J, s); -} - -LJFOLD(SNEW any KINT) -LJFOLDF(kfold_snew_empty) -{ - if (fright->i == 0) - return lj_ir_kstr(J, &J2G(J)->strempty); - return NEXTFOLD; -} - -LJFOLD(STRREF KGC KINT) -LJFOLDF(kfold_strref) -{ - GCstr *str = ir_kstr(fleft); - lua_assert((MSize)fright->i <= str->len); - return lj_ir_kkptr(J, (char *)strdata(str) + fright->i); -} - -LJFOLD(STRREF SNEW any) -LJFOLDF(kfold_strref_snew) -{ - PHIBARRIER(fleft); - if (irref_isk(fins->op2) && fright->i == 0) { - return fleft->op1; /* strref(snew(ptr, len), 0) ==> ptr */ - } else { - /* Reassociate: strref(snew(strref(str, a), len), b) ==> strref(str, a+b) */ - IRIns *ir = IR(fleft->op1); - if (ir->o == IR_STRREF) { - IRRef1 str = ir->op1; /* IRIns * is not valid across emitir. */ - PHIBARRIER(ir); - fins->op2 = emitir(IRTI(IR_ADD), ir->op2, fins->op2); /* Clobbers fins! */ - fins->op1 = str; - fins->ot = IRT(IR_STRREF, IRT_P32); - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(CALLN CARG IRCALL_lj_str_cmp) -LJFOLDF(kfold_strcmp) -{ - if (irref_isk(fleft->op1) && irref_isk(fleft->op2)) { - GCstr *a = ir_kstr(IR(fleft->op1)); - GCstr *b = ir_kstr(IR(fleft->op2)); - return INTFOLD(lj_str_cmp(a, b)); - } - return NEXTFOLD; -} - -/* -- Constant folding of pointer arithmetic ------------------------------ */ - -LJFOLD(ADD KGC KINT) -LJFOLD(ADD KGC KINT64) -LJFOLDF(kfold_add_kgc) -{ - GCobj *o = ir_kgc(fleft); -#if LJ_64 - ptrdiff_t ofs = (ptrdiff_t)ir_kint64(fright)->u64; -#else - ptrdiff_t ofs = fright->i; -#endif -#if LJ_HASFFI - if (irt_iscdata(fleft->t)) { - CType *ct = ctype_raw(ctype_ctsG(J2G(J)), gco2cd(o)->ctypeid); - if (ctype_isnum(ct->info) || ctype_isenum(ct->info) || - ctype_isptr(ct->info) || ctype_isfunc(ct->info) || - ctype_iscomplex(ct->info) || ctype_isvector(ct->info)) - return lj_ir_kkptr(J, (char *)o + ofs); - } -#endif - return lj_ir_kptr(J, (char *)o + ofs); -} - -LJFOLD(ADD KPTR KINT) -LJFOLD(ADD KPTR KINT64) -LJFOLD(ADD KKPTR KINT) -LJFOLD(ADD KKPTR KINT64) -LJFOLDF(kfold_add_kptr) -{ - void *p = ir_kptr(fleft); -#if LJ_64 - ptrdiff_t ofs = (ptrdiff_t)ir_kint64(fright)->u64; -#else - ptrdiff_t ofs = fright->i; -#endif - return lj_ir_kptr_(J, fleft->o, (char *)p + ofs); -} - -LJFOLD(ADD any KGC) -LJFOLD(ADD any KPTR) -LJFOLD(ADD any KKPTR) -LJFOLDF(kfold_add_kright) -{ - if (fleft->o == IR_KINT || fleft->o == IR_KINT64) { - IRRef1 tmp = fins->op1; fins->op1 = fins->op2; fins->op2 = tmp; - return RETRYFOLD; - } - return NEXTFOLD; -} - -/* -- Constant folding of conversions ------------------------------------- */ - -LJFOLD(TOBIT KNUM KNUM) -LJFOLDF(kfold_tobit) -{ - return INTFOLD(lj_num2bit(knumleft)); -} - -LJFOLD(CONV KINT IRCONV_NUM_INT) -LJFOLDF(kfold_conv_kint_num) -{ - return lj_ir_knum(J, (lua_Number)fleft->i); -} - -LJFOLD(CONV KINT IRCONV_NUM_U32) -LJFOLDF(kfold_conv_kintu32_num) -{ - return lj_ir_knum(J, (lua_Number)(uint32_t)fleft->i); -} - -LJFOLD(CONV KINT IRCONV_INT_I8) -LJFOLD(CONV KINT IRCONV_INT_U8) -LJFOLD(CONV KINT IRCONV_INT_I16) -LJFOLD(CONV KINT IRCONV_INT_U16) -LJFOLDF(kfold_conv_kint_ext) -{ - int32_t k = fleft->i; - if ((fins->op2 & IRCONV_SRCMASK) == IRT_I8) k = (int8_t)k; - else if ((fins->op2 & IRCONV_SRCMASK) == IRT_U8) k = (uint8_t)k; - else if ((fins->op2 & IRCONV_SRCMASK) == IRT_I16) k = (int16_t)k; - else k = (uint16_t)k; - return INTFOLD(k); -} - -LJFOLD(CONV KINT IRCONV_I64_INT) -LJFOLD(CONV KINT IRCONV_U64_INT) -LJFOLD(CONV KINT IRCONV_I64_U32) -LJFOLD(CONV KINT IRCONV_U64_U32) -LJFOLDF(kfold_conv_kint_i64) -{ - if ((fins->op2 & IRCONV_SEXT)) - return INT64FOLD((uint64_t)(int64_t)fleft->i); - else - return INT64FOLD((uint64_t)(int64_t)(uint32_t)fleft->i); -} - -LJFOLD(CONV KINT64 IRCONV_NUM_I64) -LJFOLDF(kfold_conv_kint64_num_i64) -{ - return lj_ir_knum(J, (lua_Number)(int64_t)ir_kint64(fleft)->u64); -} - -LJFOLD(CONV KINT64 IRCONV_NUM_U64) -LJFOLDF(kfold_conv_kint64_num_u64) -{ - return lj_ir_knum(J, (lua_Number)ir_kint64(fleft)->u64); -} - -LJFOLD(CONV KINT64 IRCONV_INT_I64) -LJFOLD(CONV KINT64 IRCONV_U32_I64) -LJFOLDF(kfold_conv_kint64_int_i64) -{ - return INTFOLD((int32_t)ir_kint64(fleft)->u64); -} - -LJFOLD(CONV KNUM IRCONV_INT_NUM) -LJFOLDF(kfold_conv_knum_int_num) -{ - lua_Number n = knumleft; - if (!(fins->op2 & IRCONV_TRUNC)) { - int32_t k = lj_num2int(n); - if (irt_isguard(fins->t) && n != (lua_Number)k) { - /* We're about to create a guard which always fails, like CONV +1.5. - ** Some pathological loops cause this during LICM, e.g.: - ** local x,k,t = 0,1.5,{1,[1.5]=2} - ** for i=1,200 do x = x+ t[k]; k = k == 1 and 1.5 or 1 end - ** assert(x == 300) - */ - return FAILFOLD; - } - return INTFOLD(k); - } else { - return INTFOLD((int32_t)n); - } -} - -LJFOLD(CONV KNUM IRCONV_U32_NUM) -LJFOLDF(kfold_conv_knum_u32_num) -{ - lua_assert((fins->op2 & IRCONV_TRUNC)); -#ifdef _MSC_VER - { /* Workaround for MSVC bug. */ - volatile uint32_t u = (uint32_t)knumleft; - return INTFOLD((int32_t)u); - } -#else - return INTFOLD((int32_t)(uint32_t)knumleft); -#endif -} - -LJFOLD(CONV KNUM IRCONV_I64_NUM) -LJFOLDF(kfold_conv_knum_i64_num) -{ - lua_assert((fins->op2 & IRCONV_TRUNC)); - return INT64FOLD((uint64_t)(int64_t)knumleft); -} - -LJFOLD(CONV KNUM IRCONV_U64_NUM) -LJFOLDF(kfold_conv_knum_u64_num) -{ - lua_assert((fins->op2 & IRCONV_TRUNC)); - return INT64FOLD(lj_num2u64(knumleft)); -} - -LJFOLD(TOSTR KNUM) -LJFOLDF(kfold_tostr_knum) -{ - return lj_ir_kstr(J, lj_str_fromnum(J->L, &knumleft)); -} - -LJFOLD(TOSTR KINT) -LJFOLDF(kfold_tostr_kint) -{ - return lj_ir_kstr(J, lj_str_fromint(J->L, fleft->i)); -} - -LJFOLD(STRTO KGC) -LJFOLDF(kfold_strto) -{ - TValue n; - if (lj_strscan_num(ir_kstr(fleft), &n)) - return lj_ir_knum(J, numV(&n)); - return FAILFOLD; -} - -/* -- Constant folding of equality checks --------------------------------- */ - -/* Don't constant-fold away FLOAD checks against KNULL. */ -LJFOLD(EQ FLOAD KNULL) -LJFOLD(NE FLOAD KNULL) -LJFOLDX(lj_opt_cse) - -/* But fold all other KNULL compares, since only KNULL is equal to KNULL. */ -LJFOLD(EQ any KNULL) -LJFOLD(NE any KNULL) -LJFOLD(EQ KNULL any) -LJFOLD(NE KNULL any) -LJFOLD(EQ KINT KINT) /* Constants are unique, so same refs <==> same value. */ -LJFOLD(NE KINT KINT) -LJFOLD(EQ KINT64 KINT64) -LJFOLD(NE KINT64 KINT64) -LJFOLD(EQ KGC KGC) -LJFOLD(NE KGC KGC) -LJFOLDF(kfold_kref) -{ - return CONDFOLD((fins->op1 == fins->op2) ^ (fins->o == IR_NE)); -} - -/* -- Algebraic shortcuts ------------------------------------------------- */ - -LJFOLD(FPMATH FPMATH IRFPM_FLOOR) -LJFOLD(FPMATH FPMATH IRFPM_CEIL) -LJFOLD(FPMATH FPMATH IRFPM_TRUNC) -LJFOLDF(shortcut_round) -{ - IRFPMathOp op = (IRFPMathOp)fleft->op2; - if (op == IRFPM_FLOOR || op == IRFPM_CEIL || op == IRFPM_TRUNC) - return LEFTFOLD; /* round(round_left(x)) = round_left(x) */ - return NEXTFOLD; -} - -LJFOLD(ABS ABS KNUM) -LJFOLDF(shortcut_left) -{ - return LEFTFOLD; /* f(g(x)) ==> g(x) */ -} - -LJFOLD(ABS NEG KNUM) -LJFOLDF(shortcut_dropleft) -{ - PHIBARRIER(fleft); - fins->op1 = fleft->op1; /* abs(neg(x)) ==> abs(x) */ - return RETRYFOLD; -} - -/* Note: no safe shortcuts with STRTO and TOSTR ("1e2" ==> +100 ==> "100"). */ -LJFOLD(NEG NEG any) -LJFOLD(BNOT BNOT) -LJFOLD(BSWAP BSWAP) -LJFOLDF(shortcut_leftleft) -{ - PHIBARRIER(fleft); /* See above. Fold would be ok, but not beneficial. */ - return fleft->op1; /* f(g(x)) ==> x */ -} - -/* -- FP algebraic simplifications ---------------------------------------- */ - -/* FP arithmetic is tricky -- there's not much to simplify. -** Please note the following common pitfalls before sending "improvements": -** x+0 ==> x is INVALID for x=-0 -** 0-x ==> -x is INVALID for x=+0 -** x*0 ==> 0 is INVALID for x=-0, x=+-Inf or x=NaN -*/ - -LJFOLD(ADD NEG any) -LJFOLDF(simplify_numadd_negx) -{ - PHIBARRIER(fleft); - fins->o = IR_SUB; /* (-a) + b ==> b - a */ - fins->op1 = fins->op2; - fins->op2 = fleft->op1; - return RETRYFOLD; -} - -LJFOLD(ADD any NEG) -LJFOLDF(simplify_numadd_xneg) -{ - PHIBARRIER(fright); - fins->o = IR_SUB; /* a + (-b) ==> a - b */ - fins->op2 = fright->op1; - return RETRYFOLD; -} - -LJFOLD(SUB any KNUM) -LJFOLDF(simplify_numsub_k) -{ - lua_Number n = knumright; - if (n == 0.0) /* x - (+-0) ==> x */ - return LEFTFOLD; - return NEXTFOLD; -} - -LJFOLD(SUB NEG KNUM) -LJFOLDF(simplify_numsub_negk) -{ - PHIBARRIER(fleft); - fins->op2 = fleft->op1; /* (-x) - k ==> (-k) - x */ - fins->op1 = (IRRef1)lj_ir_knum(J, -knumright); - return RETRYFOLD; -} - -LJFOLD(SUB any NEG) -LJFOLDF(simplify_numsub_xneg) -{ - PHIBARRIER(fright); - fins->o = IR_ADD; /* a - (-b) ==> a + b */ - fins->op2 = fright->op1; - return RETRYFOLD; -} - -LJFOLD(MUL any KNUM) -LJFOLD(DIV any KNUM) -LJFOLDF(simplify_nummuldiv_k) -{ - lua_Number n = knumright; - if (n == 1.0) { /* x o 1 ==> x */ - return LEFTFOLD; - } else if (n == -1.0) { /* x o -1 ==> -x */ - fins->o = IR_NEG; - fins->op2 = (IRRef1)lj_ir_knum_neg(J); - return RETRYFOLD; - } else if (fins->o == IR_MUL && n == 2.0) { /* x * 2 ==> x + x */ - fins->o = IR_ADD; - fins->op2 = fins->op1; - return RETRYFOLD; - } else if (fins->o == IR_DIV) { /* x / 2^k ==> x * 2^-k */ - uint64_t u = ir_knum(fright)->u64; - uint32_t ex = ((uint32_t)(u >> 52) & 0x7ff); - if ((u & U64x(000fffff,ffffffff)) == 0 && ex - 1 < 0x7fd) { - u = (u & ((uint64_t)1 << 63)) | ((uint64_t)(0x7fe - ex) << 52); - fins->o = IR_MUL; /* Multiply by exact reciprocal. */ - fins->op2 = lj_ir_knum_u64(J, u); - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(MUL NEG KNUM) -LJFOLD(DIV NEG KNUM) -LJFOLDF(simplify_nummuldiv_negk) -{ - PHIBARRIER(fleft); - fins->op1 = fleft->op1; /* (-a) o k ==> a o (-k) */ - fins->op2 = (IRRef1)lj_ir_knum(J, -knumright); - return RETRYFOLD; -} - -LJFOLD(MUL NEG NEG) -LJFOLD(DIV NEG NEG) -LJFOLDF(simplify_nummuldiv_negneg) -{ - PHIBARRIER(fleft); - PHIBARRIER(fright); - fins->op1 = fleft->op1; /* (-a) o (-b) ==> a o b */ - fins->op2 = fright->op1; - return RETRYFOLD; -} - -LJFOLD(POW any KINT) -LJFOLDF(simplify_numpow_xk) -{ - int32_t k = fright->i; - TRef ref = fins->op1; - if (k == 0) /* x ^ 0 ==> 1 */ - return lj_ir_knum_one(J); /* Result must be a number, not an int. */ - if (k == 1) /* x ^ 1 ==> x */ - return LEFTFOLD; - if ((uint32_t)(k+65536) > 2*65536u) /* Limit code explosion. */ - return NEXTFOLD; - if (k < 0) { /* x ^ (-k) ==> (1/x) ^ k. */ - ref = emitir(IRTN(IR_DIV), lj_ir_knum_one(J), ref); - k = -k; - } - /* Unroll x^k for 1 <= k <= 65536. */ - for (; (k & 1) == 0; k >>= 1) /* Handle leading zeros. */ - ref = emitir(IRTN(IR_MUL), ref, ref); - if ((k >>= 1) != 0) { /* Handle trailing bits. */ - TRef tmp = emitir(IRTN(IR_MUL), ref, ref); - for (; k != 1; k >>= 1) { - if (k & 1) - ref = emitir(IRTN(IR_MUL), ref, tmp); - tmp = emitir(IRTN(IR_MUL), tmp, tmp); - } - ref = emitir(IRTN(IR_MUL), ref, tmp); - } - return ref; -} - -LJFOLD(POW KNUM any) -LJFOLDF(simplify_numpow_kx) -{ - lua_Number n = knumleft; - if (n == 2.0) { /* 2.0 ^ i ==> ldexp(1.0, tonum(i)) */ - fins->o = IR_CONV; -#if LJ_TARGET_X86ORX64 - fins->op1 = fins->op2; - fins->op2 = IRCONV_NUM_INT; - fins->op2 = (IRRef1)lj_opt_fold(J); -#endif - fins->op1 = (IRRef1)lj_ir_knum_one(J); - fins->o = IR_LDEXP; - return RETRYFOLD; - } - return NEXTFOLD; -} - -/* -- Simplify conversions ------------------------------------------------ */ - -LJFOLD(CONV CONV IRCONV_NUM_INT) /* _NUM */ -LJFOLDF(shortcut_conv_num_int) -{ - PHIBARRIER(fleft); - /* Only safe with a guarded conversion to int. */ - if ((fleft->op2 & IRCONV_SRCMASK) == IRT_NUM && irt_isguard(fleft->t)) - return fleft->op1; /* f(g(x)) ==> x */ - return NEXTFOLD; -} - -LJFOLD(CONV CONV IRCONV_INT_NUM) /* _INT */ -LJFOLD(CONV CONV IRCONV_U32_NUM) /* _U32*/ -LJFOLDF(simplify_conv_int_num) -{ - /* Fold even across PHI to avoid expensive num->int conversions in loop. */ - if ((fleft->op2 & IRCONV_SRCMASK) == - ((fins->op2 & IRCONV_DSTMASK) >> IRCONV_DSH)) - return fleft->op1; - return NEXTFOLD; -} - -LJFOLD(CONV CONV IRCONV_I64_NUM) /* _INT or _U32 */ -LJFOLD(CONV CONV IRCONV_U64_NUM) /* _INT or _U32 */ -LJFOLDF(simplify_conv_i64_num) -{ - PHIBARRIER(fleft); - if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT) { - /* Reduce to a sign-extension. */ - fins->op1 = fleft->op1; - fins->op2 = ((IRT_I64<<5)|IRT_INT|IRCONV_SEXT); - return RETRYFOLD; - } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { -#if LJ_TARGET_X64 - return fleft->op1; -#else - /* Reduce to a zero-extension. */ - fins->op1 = fleft->op1; - fins->op2 = (IRT_I64<<5)|IRT_U32; - return RETRYFOLD; -#endif - } - return NEXTFOLD; -} - -LJFOLD(CONV CONV IRCONV_INT_I64) /* _INT or _U32 */ -LJFOLD(CONV CONV IRCONV_INT_U64) /* _INT or _U32 */ -LJFOLD(CONV CONV IRCONV_U32_I64) /* _INT or _U32 */ -LJFOLD(CONV CONV IRCONV_U32_U64) /* _INT or _U32 */ -LJFOLDF(simplify_conv_int_i64) -{ - int src; - PHIBARRIER(fleft); - src = (fleft->op2 & IRCONV_SRCMASK); - if (src == IRT_INT || src == IRT_U32) { - if (src == ((fins->op2 & IRCONV_DSTMASK) >> IRCONV_DSH)) { - return fleft->op1; - } else { - fins->op2 = ((fins->op2 & IRCONV_DSTMASK) | src); - fins->op1 = fleft->op1; - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(CONV CONV IRCONV_FLOAT_NUM) /* _FLOAT */ -LJFOLDF(simplify_conv_flt_num) -{ - PHIBARRIER(fleft); - if ((fleft->op2 & IRCONV_SRCMASK) == IRT_FLOAT) - return fleft->op1; - return NEXTFOLD; -} - -/* Shortcut TOBIT + IRT_NUM <- IRT_INT/IRT_U32 conversion. */ -LJFOLD(TOBIT CONV KNUM) -LJFOLDF(simplify_tobit_conv) -{ - /* Fold even across PHI to avoid expensive num->int conversions in loop. */ - if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT) { - lua_assert(irt_isnum(fleft->t)); - return fleft->op1; - } else if ((fleft->op2 & IRCONV_SRCMASK) == IRT_U32) { - lua_assert(irt_isnum(fleft->t)); - fins->o = IR_CONV; - fins->op1 = fleft->op1; - fins->op2 = (IRT_INT<<5)|IRT_U32; - return RETRYFOLD; - } - return NEXTFOLD; -} - -/* Shortcut floor/ceil/round + IRT_NUM <- IRT_INT/IRT_U32 conversion. */ -LJFOLD(FPMATH CONV IRFPM_FLOOR) -LJFOLD(FPMATH CONV IRFPM_CEIL) -LJFOLD(FPMATH CONV IRFPM_TRUNC) -LJFOLDF(simplify_floor_conv) -{ - if ((fleft->op2 & IRCONV_SRCMASK) == IRT_INT || - (fleft->op2 & IRCONV_SRCMASK) == IRT_U32) - return LEFTFOLD; - return NEXTFOLD; -} - -/* Strength reduction of widening. */ -LJFOLD(CONV any IRCONV_I64_INT) -LJFOLD(CONV any IRCONV_U64_INT) -LJFOLDF(simplify_conv_sext) -{ - IRRef ref = fins->op1; - int64_t ofs = 0; - if (!(fins->op2 & IRCONV_SEXT)) - return NEXTFOLD; - PHIBARRIER(fleft); - if (fleft->o == IR_XLOAD && (irt_isu8(fleft->t) || irt_isu16(fleft->t))) - goto ok_reduce; - if (fleft->o == IR_ADD && irref_isk(fleft->op2)) { - ofs = (int64_t)IR(fleft->op2)->i; - ref = fleft->op1; - } - /* Use scalar evolution analysis results to strength-reduce sign-extension. */ - if (ref == J->scev.idx) { - IRRef lo = J->scev.dir ? J->scev.start : J->scev.stop; - lua_assert(irt_isint(J->scev.t)); - if (lo && IR(lo)->i + ofs >= 0) { - ok_reduce: -#if LJ_TARGET_X64 - /* Eliminate widening. All 32 bit ops do an implicit zero-extension. */ - return LEFTFOLD; -#else - /* Reduce to a (cheaper) zero-extension. */ - fins->op2 &= ~IRCONV_SEXT; - return RETRYFOLD; -#endif - } - } - return NEXTFOLD; -} - -/* Strength reduction of narrowing. */ -LJFOLD(CONV ADD IRCONV_INT_I64) -LJFOLD(CONV SUB IRCONV_INT_I64) -LJFOLD(CONV MUL IRCONV_INT_I64) -LJFOLD(CONV ADD IRCONV_INT_U64) -LJFOLD(CONV SUB IRCONV_INT_U64) -LJFOLD(CONV MUL IRCONV_INT_U64) -LJFOLD(CONV ADD IRCONV_U32_I64) -LJFOLD(CONV SUB IRCONV_U32_I64) -LJFOLD(CONV MUL IRCONV_U32_I64) -LJFOLD(CONV ADD IRCONV_U32_U64) -LJFOLD(CONV SUB IRCONV_U32_U64) -LJFOLD(CONV MUL IRCONV_U32_U64) -LJFOLDF(simplify_conv_narrow) -{ - IROp op = (IROp)fleft->o; - IRType t = irt_type(fins->t); - IRRef op1 = fleft->op1, op2 = fleft->op2, mode = fins->op2; - PHIBARRIER(fleft); - op1 = emitir(IRTI(IR_CONV), op1, mode); - op2 = emitir(IRTI(IR_CONV), op2, mode); - fins->ot = IRT(op, t); - fins->op1 = op1; - fins->op2 = op2; - return RETRYFOLD; -} - -/* Special CSE rule for CONV. */ -LJFOLD(CONV any any) -LJFOLDF(cse_conv) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_CSE)) { - IRRef op1 = fins->op1, op2 = (fins->op2 & IRCONV_MODEMASK); - uint8_t guard = irt_isguard(fins->t); - IRRef ref = J->chain[IR_CONV]; - while (ref > op1) { - IRIns *ir = IR(ref); - /* Commoning with stronger checks is ok. */ - if (ir->op1 == op1 && (ir->op2 & IRCONV_MODEMASK) == op2 && - irt_isguard(ir->t) >= guard) - return ref; - ref = ir->prev; - } - } - return EMITFOLD; /* No fallthrough to regular CSE. */ -} - -/* FP conversion narrowing. */ -LJFOLD(TOBIT ADD KNUM) -LJFOLD(TOBIT SUB KNUM) -LJFOLD(CONV ADD IRCONV_INT_NUM) -LJFOLD(CONV SUB IRCONV_INT_NUM) -LJFOLD(CONV ADD IRCONV_I64_NUM) -LJFOLD(CONV SUB IRCONV_I64_NUM) -LJFOLDF(narrow_convert) -{ - PHIBARRIER(fleft); - /* Narrowing ignores PHIs and repeating it inside the loop is not useful. */ - if (J->chain[IR_LOOP]) - return NEXTFOLD; - lua_assert(fins->o != IR_CONV || (fins->op2&IRCONV_CONVMASK) != IRCONV_TOBIT); - return lj_opt_narrow_convert(J); -} - -/* -- Integer algebraic simplifications ----------------------------------- */ - -LJFOLD(ADD any KINT) -LJFOLD(ADDOV any KINT) -LJFOLD(SUBOV any KINT) -LJFOLDF(simplify_intadd_k) -{ - if (fright->i == 0) /* i o 0 ==> i */ - return LEFTFOLD; - return NEXTFOLD; -} - -LJFOLD(MULOV any KINT) -LJFOLDF(simplify_intmul_k) -{ - if (fright->i == 0) /* i * 0 ==> 0 */ - return RIGHTFOLD; - if (fright->i == 1) /* i * 1 ==> i */ - return LEFTFOLD; - if (fright->i == 2) { /* i * 2 ==> i + i */ - fins->o = IR_ADDOV; - fins->op2 = fins->op1; - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(SUB any KINT) -LJFOLDF(simplify_intsub_k) -{ - if (fright->i == 0) /* i - 0 ==> i */ - return LEFTFOLD; - fins->o = IR_ADD; /* i - k ==> i + (-k) */ - fins->op2 = (IRRef1)lj_ir_kint(J, -fright->i); /* Overflow for -2^31 ok. */ - return RETRYFOLD; -} - -LJFOLD(SUB KINT any) -LJFOLD(SUB KINT64 any) -LJFOLDF(simplify_intsub_kleft) -{ - if (fleft->o == IR_KINT ? (fleft->i == 0) : (ir_kint64(fleft)->u64 == 0)) { - fins->o = IR_NEG; /* 0 - i ==> -i */ - fins->op1 = fins->op2; - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(ADD any KINT64) -LJFOLDF(simplify_intadd_k64) -{ - if (ir_kint64(fright)->u64 == 0) /* i + 0 ==> i */ - return LEFTFOLD; - return NEXTFOLD; -} - -LJFOLD(SUB any KINT64) -LJFOLDF(simplify_intsub_k64) -{ - uint64_t k = ir_kint64(fright)->u64; - if (k == 0) /* i - 0 ==> i */ - return LEFTFOLD; - fins->o = IR_ADD; /* i - k ==> i + (-k) */ - fins->op2 = (IRRef1)lj_ir_kint64(J, (uint64_t)-(int64_t)k); - return RETRYFOLD; -} - -static TRef simplify_intmul_k(jit_State *J, int32_t k) -{ - /* Note: many more simplifications are possible, e.g. 2^k1 +- 2^k2. - ** But this is mainly intended for simple address arithmetic. - ** Also it's easier for the backend to optimize the original multiplies. - */ - if (k == 1) { /* i * 1 ==> i */ - return LEFTFOLD; - } else if ((k & (k-1)) == 0) { /* i * 2^k ==> i << k */ - fins->o = IR_BSHL; - fins->op2 = lj_ir_kint(J, lj_fls((uint32_t)k)); - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(MUL any KINT) -LJFOLDF(simplify_intmul_k32) -{ - if (fright->i == 0) /* i * 0 ==> 0 */ - return INTFOLD(0); - else if (fright->i > 0) - return simplify_intmul_k(J, fright->i); - return NEXTFOLD; -} - -LJFOLD(MUL any KINT64) -LJFOLDF(simplify_intmul_k64) -{ - if (ir_kint64(fright)->u64 == 0) /* i * 0 ==> 0 */ - return INT64FOLD(0); -#if LJ_64 - /* NYI: SPLIT for BSHL and 32 bit backend support. */ - else if (ir_kint64(fright)->u64 < 0x80000000u) - return simplify_intmul_k(J, (int32_t)ir_kint64(fright)->u64); -#endif - return NEXTFOLD; -} - -LJFOLD(MOD any KINT) -LJFOLDF(simplify_intmod_k) -{ - int32_t k = fright->i; - lua_assert(k != 0); - if (k > 0 && (k & (k-1)) == 0) { /* i % (2^k) ==> i & (2^k-1) */ - fins->o = IR_BAND; - fins->op2 = lj_ir_kint(J, k-1); - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(MOD KINT any) -LJFOLDF(simplify_intmod_kleft) -{ - if (fleft->i == 0) - return INTFOLD(0); - return NEXTFOLD; -} - -LJFOLD(SUB any any) -LJFOLD(SUBOV any any) -LJFOLDF(simplify_intsub) -{ - if (fins->op1 == fins->op2 && !irt_isnum(fins->t)) /* i - i ==> 0 */ - return irt_is64(fins->t) ? INT64FOLD(0) : INTFOLD(0); - return NEXTFOLD; -} - -LJFOLD(SUB ADD any) -LJFOLDF(simplify_intsubadd_leftcancel) -{ - if (!irt_isnum(fins->t)) { - PHIBARRIER(fleft); - if (fins->op2 == fleft->op1) /* (i + j) - i ==> j */ - return fleft->op2; - if (fins->op2 == fleft->op2) /* (i + j) - j ==> i */ - return fleft->op1; - } - return NEXTFOLD; -} - -LJFOLD(SUB SUB any) -LJFOLDF(simplify_intsubsub_leftcancel) -{ - if (!irt_isnum(fins->t)) { - PHIBARRIER(fleft); - if (fins->op2 == fleft->op1) { /* (i - j) - i ==> 0 - j */ - fins->op1 = (IRRef1)lj_ir_kint(J, 0); - fins->op2 = fleft->op2; - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(SUB any SUB) -LJFOLDF(simplify_intsubsub_rightcancel) -{ - if (!irt_isnum(fins->t)) { - PHIBARRIER(fright); - if (fins->op1 == fright->op1) /* i - (i - j) ==> j */ - return fright->op2; - } - return NEXTFOLD; -} - -LJFOLD(SUB any ADD) -LJFOLDF(simplify_intsubadd_rightcancel) -{ - if (!irt_isnum(fins->t)) { - PHIBARRIER(fright); - if (fins->op1 == fright->op1) { /* i - (i + j) ==> 0 - j */ - fins->op2 = fright->op2; - fins->op1 = (IRRef1)lj_ir_kint(J, 0); - return RETRYFOLD; - } - if (fins->op1 == fright->op2) { /* i - (j + i) ==> 0 - j */ - fins->op2 = fright->op1; - fins->op1 = (IRRef1)lj_ir_kint(J, 0); - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(SUB ADD ADD) -LJFOLDF(simplify_intsubaddadd_cancel) -{ - if (!irt_isnum(fins->t)) { - PHIBARRIER(fleft); - PHIBARRIER(fright); - if (fleft->op1 == fright->op1) { /* (i + j1) - (i + j2) ==> j1 - j2 */ - fins->op1 = fleft->op2; - fins->op2 = fright->op2; - return RETRYFOLD; - } - if (fleft->op1 == fright->op2) { /* (i + j1) - (j2 + i) ==> j1 - j2 */ - fins->op1 = fleft->op2; - fins->op2 = fright->op1; - return RETRYFOLD; - } - if (fleft->op2 == fright->op1) { /* (j1 + i) - (i + j2) ==> j1 - j2 */ - fins->op1 = fleft->op1; - fins->op2 = fright->op2; - return RETRYFOLD; - } - if (fleft->op2 == fright->op2) { /* (j1 + i) - (j2 + i) ==> j1 - j2 */ - fins->op1 = fleft->op1; - fins->op2 = fright->op1; - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(BAND any KINT) -LJFOLD(BAND any KINT64) -LJFOLDF(simplify_band_k) -{ - int64_t k = fright->o == IR_KINT ? (int64_t)fright->i : - (int64_t)ir_k64(fright)->u64; - if (k == 0) /* i & 0 ==> 0 */ - return RIGHTFOLD; - if (k == -1) /* i & -1 ==> i */ - return LEFTFOLD; - return NEXTFOLD; -} - -LJFOLD(BOR any KINT) -LJFOLD(BOR any KINT64) -LJFOLDF(simplify_bor_k) -{ - int64_t k = fright->o == IR_KINT ? (int64_t)fright->i : - (int64_t)ir_k64(fright)->u64; - if (k == 0) /* i | 0 ==> i */ - return LEFTFOLD; - if (k == -1) /* i | -1 ==> -1 */ - return RIGHTFOLD; - return NEXTFOLD; -} - -LJFOLD(BXOR any KINT) -LJFOLD(BXOR any KINT64) -LJFOLDF(simplify_bxor_k) -{ - int64_t k = fright->o == IR_KINT ? (int64_t)fright->i : - (int64_t)ir_k64(fright)->u64; - if (k == 0) /* i xor 0 ==> i */ - return LEFTFOLD; - if (k == -1) { /* i xor -1 ==> ~i */ - fins->o = IR_BNOT; - fins->op2 = 0; - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(BSHL any KINT) -LJFOLD(BSHR any KINT) -LJFOLD(BSAR any KINT) -LJFOLD(BROL any KINT) -LJFOLD(BROR any KINT) -LJFOLDF(simplify_shift_ik) -{ - int32_t mask = irt_is64(fins->t) ? 63 : 31; - int32_t k = (fright->i & mask); - if (k == 0) /* i o 0 ==> i */ - return LEFTFOLD; - if (k == 1 && fins->o == IR_BSHL) { /* i << 1 ==> i + i */ - fins->o = IR_ADD; - fins->op2 = fins->op1; - return RETRYFOLD; - } - if (k != fright->i) { /* i o k ==> i o (k & mask) */ - fins->op2 = (IRRef1)lj_ir_kint(J, k); - return RETRYFOLD; - } -#ifndef LJ_TARGET_UNIFYROT - if (fins->o == IR_BROR) { /* bror(i, k) ==> brol(i, (-k)&mask) */ - fins->o = IR_BROL; - fins->op2 = (IRRef1)lj_ir_kint(J, (-k)&mask); - return RETRYFOLD; - } -#endif - return NEXTFOLD; -} - -LJFOLD(BSHL any BAND) -LJFOLD(BSHR any BAND) -LJFOLD(BSAR any BAND) -LJFOLD(BROL any BAND) -LJFOLD(BROR any BAND) -LJFOLDF(simplify_shift_andk) -{ - IRIns *irk = IR(fright->op2); - PHIBARRIER(fright); - if ((fins->o < IR_BROL ? LJ_TARGET_MASKSHIFT : LJ_TARGET_MASKROT) && - irk->o == IR_KINT) { /* i o (j & mask) ==> i o j */ - int32_t mask = irt_is64(fins->t) ? 63 : 31; - int32_t k = irk->i & mask; - if (k == mask) { - fins->op2 = fright->op1; - return RETRYFOLD; - } - } - return NEXTFOLD; -} - -LJFOLD(BSHL KINT any) -LJFOLD(BSHR KINT any) -LJFOLD(BSHL KINT64 any) -LJFOLD(BSHR KINT64 any) -LJFOLDF(simplify_shift1_ki) -{ - int64_t k = fleft->o == IR_KINT ? (int64_t)fleft->i : - (int64_t)ir_k64(fleft)->u64; - if (k == 0) /* 0 o i ==> 0 */ - return LEFTFOLD; - return NEXTFOLD; -} - -LJFOLD(BSAR KINT any) -LJFOLD(BROL KINT any) -LJFOLD(BROR KINT any) -LJFOLD(BSAR KINT64 any) -LJFOLD(BROL KINT64 any) -LJFOLD(BROR KINT64 any) -LJFOLDF(simplify_shift2_ki) -{ - int64_t k = fleft->o == IR_KINT ? (int64_t)fleft->i : - (int64_t)ir_k64(fleft)->u64; - if (k == 0 || k == -1) /* 0 o i ==> 0; -1 o i ==> -1 */ - return LEFTFOLD; - return NEXTFOLD; -} - -LJFOLD(BSHL BAND KINT) -LJFOLD(BSHR BAND KINT) -LJFOLD(BROL BAND KINT) -LJFOLD(BROR BAND KINT) -LJFOLDF(simplify_shiftk_andk) -{ - IRIns *irk = IR(fleft->op2); - PHIBARRIER(fleft); - if (irk->o == IR_KINT) { /* (i & k1) o k2 ==> (i o k2) & (k1 o k2) */ - int32_t k = kfold_intop(irk->i, fright->i, (IROp)fins->o); - fins->op1 = fleft->op1; - fins->op1 = (IRRef1)lj_opt_fold(J); - fins->op2 = (IRRef1)lj_ir_kint(J, k); - fins->ot = IRTI(IR_BAND); - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(BAND BSHL KINT) -LJFOLD(BAND BSHR KINT) -LJFOLDF(simplify_andk_shiftk) -{ - IRIns *irk = IR(fleft->op2); - if (irk->o == IR_KINT && - kfold_intop(-1, irk->i, (IROp)fleft->o) == fright->i) - return LEFTFOLD; /* (i o k1) & k2 ==> i, if (-1 o k1) == k2 */ - return NEXTFOLD; -} - -/* -- Reassociation ------------------------------------------------------- */ - -LJFOLD(ADD ADD KINT) -LJFOLD(MUL MUL KINT) -LJFOLD(BAND BAND KINT) -LJFOLD(BOR BOR KINT) -LJFOLD(BXOR BXOR KINT) -LJFOLDF(reassoc_intarith_k) -{ - IRIns *irk = IR(fleft->op2); - if (irk->o == IR_KINT) { - int32_t k = kfold_intop(irk->i, fright->i, (IROp)fins->o); - if (k == irk->i) /* (i o k1) o k2 ==> i o k1, if (k1 o k2) == k1. */ - return LEFTFOLD; - PHIBARRIER(fleft); - fins->op1 = fleft->op1; - fins->op2 = (IRRef1)lj_ir_kint(J, k); - return RETRYFOLD; /* (i o k1) o k2 ==> i o (k1 o k2) */ - } - return NEXTFOLD; -} - -LJFOLD(ADD ADD KINT64) -LJFOLD(MUL MUL KINT64) -LJFOLD(BAND BAND KINT64) -LJFOLD(BOR BOR KINT64) -LJFOLD(BXOR BXOR KINT64) -LJFOLDF(reassoc_intarith_k64) -{ -#if LJ_HASFFI || LJ_64 - IRIns *irk = IR(fleft->op2); - if (irk->o == IR_KINT64) { - uint64_t k = kfold_int64arith(ir_k64(irk)->u64, - ir_k64(fright)->u64, (IROp)fins->o); - PHIBARRIER(fleft); - fins->op1 = fleft->op1; - fins->op2 = (IRRef1)lj_ir_kint64(J, k); - return RETRYFOLD; /* (i o k1) o k2 ==> i o (k1 o k2) */ - } - return NEXTFOLD; -#else - UNUSED(J); lua_assert(0); return FAILFOLD; -#endif -} - -LJFOLD(MIN MIN any) -LJFOLD(MAX MAX any) -LJFOLD(BAND BAND any) -LJFOLD(BOR BOR any) -LJFOLDF(reassoc_dup) -{ - if (fins->op2 == fleft->op1 || fins->op2 == fleft->op2) - return LEFTFOLD; /* (a o b) o a ==> a o b; (a o b) o b ==> a o b */ - return NEXTFOLD; -} - -LJFOLD(BXOR BXOR any) -LJFOLDF(reassoc_bxor) -{ - PHIBARRIER(fleft); - if (fins->op2 == fleft->op1) /* (a xor b) xor a ==> b */ - return fleft->op2; - if (fins->op2 == fleft->op2) /* (a xor b) xor b ==> a */ - return fleft->op1; - return NEXTFOLD; -} - -LJFOLD(BSHL BSHL KINT) -LJFOLD(BSHR BSHR KINT) -LJFOLD(BSAR BSAR KINT) -LJFOLD(BROL BROL KINT) -LJFOLD(BROR BROR KINT) -LJFOLDF(reassoc_shift) -{ - IRIns *irk = IR(fleft->op2); - PHIBARRIER(fleft); /* The (shift any KINT) rule covers k2 == 0 and more. */ - if (irk->o == IR_KINT) { /* (i o k1) o k2 ==> i o (k1 + k2) */ - int32_t mask = irt_is64(fins->t) ? 63 : 31; - int32_t k = (irk->i & mask) + (fright->i & mask); - if (k > mask) { /* Combined shift too wide? */ - if (fins->o == IR_BSHL || fins->o == IR_BSHR) - return mask == 31 ? INTFOLD(0) : INT64FOLD(0); - else if (fins->o == IR_BSAR) - k = mask; - else - k &= mask; - } - fins->op1 = fleft->op1; - fins->op2 = (IRRef1)lj_ir_kint(J, k); - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(MIN MIN KNUM) -LJFOLD(MAX MAX KNUM) -LJFOLD(MIN MIN KINT) -LJFOLD(MAX MAX KINT) -LJFOLDF(reassoc_minmax_k) -{ - IRIns *irk = IR(fleft->op2); - if (irk->o == IR_KNUM) { - lua_Number a = ir_knum(irk)->n; - lua_Number y = lj_vm_foldarith(a, knumright, fins->o - IR_ADD); - if (a == y) /* (x o k1) o k2 ==> x o k1, if (k1 o k2) == k1. */ - return LEFTFOLD; - PHIBARRIER(fleft); - fins->op1 = fleft->op1; - fins->op2 = (IRRef1)lj_ir_knum(J, y); - return RETRYFOLD; /* (x o k1) o k2 ==> x o (k1 o k2) */ - } else if (irk->o == IR_KINT) { - int32_t a = irk->i; - int32_t y = kfold_intop(a, fright->i, fins->o); - if (a == y) /* (x o k1) o k2 ==> x o k1, if (k1 o k2) == k1. */ - return LEFTFOLD; - PHIBARRIER(fleft); - fins->op1 = fleft->op1; - fins->op2 = (IRRef1)lj_ir_kint(J, y); - return RETRYFOLD; /* (x o k1) o k2 ==> x o (k1 o k2) */ - } - return NEXTFOLD; -} - -LJFOLD(MIN MAX any) -LJFOLD(MAX MIN any) -LJFOLDF(reassoc_minmax_left) -{ - if (fins->op2 == fleft->op1 || fins->op2 == fleft->op2) - return RIGHTFOLD; /* (b o1 a) o2 b ==> b; (a o1 b) o2 b ==> b */ - return NEXTFOLD; -} - -LJFOLD(MIN any MAX) -LJFOLD(MAX any MIN) -LJFOLDF(reassoc_minmax_right) -{ - if (fins->op1 == fright->op1 || fins->op1 == fright->op2) - return LEFTFOLD; /* a o2 (a o1 b) ==> a; a o2 (b o1 a) ==> a */ - return NEXTFOLD; -} - -/* -- Array bounds check elimination -------------------------------------- */ - -/* Eliminate ABC across PHIs to handle t[i-1] forwarding case. -** ABC(asize, (i+k)+(-k)) ==> ABC(asize, i), but only if it already exists. -** Could be generalized to (i+k1)+k2 ==> i+(k1+k2), but needs better disambig. -*/ -LJFOLD(ABC any ADD) -LJFOLDF(abc_fwd) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_ABC)) { - if (irref_isk(fright->op2)) { - IRIns *add2 = IR(fright->op1); - if (add2->o == IR_ADD && irref_isk(add2->op2) && - IR(fright->op2)->i == -IR(add2->op2)->i) { - IRRef ref = J->chain[IR_ABC]; - IRRef lim = add2->op1; - if (fins->op1 > lim) lim = fins->op1; - while (ref > lim) { - IRIns *ir = IR(ref); - if (ir->op1 == fins->op1 && ir->op2 == add2->op1) - return DROPFOLD; - ref = ir->prev; - } - } - } - } - return NEXTFOLD; -} - -/* Eliminate ABC for constants. -** ABC(asize, k1), ABC(asize k2) ==> ABC(asize, max(k1, k2)) -** Drop second ABC if k2 is lower. Otherwise patch first ABC with k2. -*/ -LJFOLD(ABC any KINT) -LJFOLDF(abc_k) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_ABC)) { - IRRef ref = J->chain[IR_ABC]; - IRRef asize = fins->op1; - while (ref > asize) { - IRIns *ir = IR(ref); - if (ir->op1 == asize && irref_isk(ir->op2)) { - int32_t k = IR(ir->op2)->i; - if (fright->i > k) - ir->op2 = fins->op2; - return DROPFOLD; - } - ref = ir->prev; - } - return EMITFOLD; /* Already performed CSE. */ - } - return NEXTFOLD; -} - -/* Eliminate invariant ABC inside loop. */ -LJFOLD(ABC any any) -LJFOLDF(abc_invar) -{ - /* Invariant ABC marked as PTR. Drop if op1 is invariant, too. */ - if (!irt_isint(fins->t) && fins->op1 < J->chain[IR_LOOP] && - !irt_isphi(IR(fins->op1)->t)) - return DROPFOLD; - return NEXTFOLD; -} - -/* -- Commutativity ------------------------------------------------------- */ - -/* The refs of commutative ops are canonicalized. Lower refs go to the right. -** Rationale behind this: -** - It (also) moves constants to the right. -** - It reduces the number of FOLD rules (e.g. (BOR any KINT) suffices). -** - It helps CSE to find more matches. -** - The assembler generates better code with constants at the right. -*/ - -LJFOLD(ADD any any) -LJFOLD(MUL any any) -LJFOLD(ADDOV any any) -LJFOLD(MULOV any any) -LJFOLDF(comm_swap) -{ - if (fins->op1 < fins->op2) { /* Move lower ref to the right. */ - IRRef1 tmp = fins->op1; - fins->op1 = fins->op2; - fins->op2 = tmp; - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(EQ any any) -LJFOLD(NE any any) -LJFOLDF(comm_equal) -{ - /* For non-numbers only: x == x ==> drop; x ~= x ==> fail */ - if (fins->op1 == fins->op2 && !irt_isnum(fins->t)) - return CONDFOLD(fins->o == IR_EQ); - return fold_comm_swap(J); -} - -LJFOLD(LT any any) -LJFOLD(GE any any) -LJFOLD(LE any any) -LJFOLD(GT any any) -LJFOLD(ULT any any) -LJFOLD(UGE any any) -LJFOLD(ULE any any) -LJFOLD(UGT any any) -LJFOLDF(comm_comp) -{ - /* For non-numbers only: x <=> x ==> drop; x <> x ==> fail */ - if (fins->op1 == fins->op2 && !irt_isnum(fins->t)) - return CONDFOLD((fins->o ^ (fins->o >> 1)) & 1); - if (fins->op1 < fins->op2) { /* Move lower ref to the right. */ - IRRef1 tmp = fins->op1; - fins->op1 = fins->op2; - fins->op2 = tmp; - fins->o ^= 3; /* GT <-> LT, GE <-> LE, does not affect U */ - return RETRYFOLD; - } - return NEXTFOLD; -} - -LJFOLD(BAND any any) -LJFOLD(BOR any any) -LJFOLD(MIN any any) -LJFOLD(MAX any any) -LJFOLDF(comm_dup) -{ - if (fins->op1 == fins->op2) /* x o x ==> x */ - return LEFTFOLD; - return fold_comm_swap(J); -} - -LJFOLD(BXOR any any) -LJFOLDF(comm_bxor) -{ - if (fins->op1 == fins->op2) /* i xor i ==> 0 */ - return irt_is64(fins->t) ? INT64FOLD(0) : INTFOLD(0); - return fold_comm_swap(J); -} - -/* -- Simplification of compound expressions ------------------------------ */ - -static TRef kfold_xload(jit_State *J, IRIns *ir, const void *p) -{ - int32_t k; - switch (irt_type(ir->t)) { - case IRT_NUM: return lj_ir_knum_u64(J, *(uint64_t *)p); - case IRT_I8: k = (int32_t)*(int8_t *)p; break; - case IRT_U8: k = (int32_t)*(uint8_t *)p; break; - case IRT_I16: k = (int32_t)(int16_t)lj_getu16(p); break; - case IRT_U16: k = (int32_t)(uint16_t)lj_getu16(p); break; - case IRT_INT: case IRT_U32: k = (int32_t)lj_getu32(p); break; - case IRT_I64: case IRT_U64: return lj_ir_kint64(J, *(uint64_t *)p); - default: return 0; - } - return lj_ir_kint(J, k); -} - -/* Turn: string.sub(str, a, b) == kstr -** into: string.byte(str, a) == string.byte(kstr, 1) etc. -** Note: this creates unaligned XLOADs on x86/x64. -*/ -LJFOLD(EQ SNEW KGC) -LJFOLD(NE SNEW KGC) -LJFOLDF(merge_eqne_snew_kgc) -{ - GCstr *kstr = ir_kstr(fright); - int32_t len = (int32_t)kstr->len; - lua_assert(irt_isstr(fins->t)); - -#if LJ_TARGET_UNALIGNED -#define FOLD_SNEW_MAX_LEN 4 /* Handle string lengths 0, 1, 2, 3, 4. */ -#define FOLD_SNEW_TYPE8 IRT_I8 /* Creates shorter immediates. */ -#else -#define FOLD_SNEW_MAX_LEN 1 /* Handle string lengths 0 or 1. */ -#define FOLD_SNEW_TYPE8 IRT_U8 /* Prefer unsigned loads. */ -#endif - - PHIBARRIER(fleft); - if (len <= FOLD_SNEW_MAX_LEN) { - IROp op = (IROp)fins->o; - IRRef strref = fleft->op1; - if (IR(strref)->o != IR_STRREF) - return NEXTFOLD; - if (op == IR_EQ) { - emitir(IRTGI(IR_EQ), fleft->op2, lj_ir_kint(J, len)); - /* Caveat: fins/fleft/fright is no longer valid after emitir. */ - } else { - /* NE is not expanded since this would need an OR of two conds. */ - if (!irref_isk(fleft->op2)) /* Only handle the constant length case. */ - return NEXTFOLD; - if (IR(fleft->op2)->i != len) - return DROPFOLD; - } - if (len > 0) { - /* A 4 byte load for length 3 is ok -- all strings have an extra NUL. */ - uint16_t ot = (uint16_t)(len == 1 ? IRT(IR_XLOAD, FOLD_SNEW_TYPE8) : - len == 2 ? IRT(IR_XLOAD, IRT_U16) : - IRTI(IR_XLOAD)); - TRef tmp = emitir(ot, strref, - IRXLOAD_READONLY | (len > 1 ? IRXLOAD_UNALIGNED : 0)); - TRef val = kfold_xload(J, IR(tref_ref(tmp)), strdata(kstr)); - if (len == 3) - tmp = emitir(IRTI(IR_BAND), tmp, - lj_ir_kint(J, LJ_ENDIAN_SELECT(0x00ffffff, 0xffffff00))); - fins->op1 = (IRRef1)tmp; - fins->op2 = (IRRef1)val; - fins->ot = (IROpT)IRTGI(op); - return RETRYFOLD; - } else { - return DROPFOLD; - } - } - return NEXTFOLD; -} - -/* -- Loads --------------------------------------------------------------- */ - -/* Loads cannot be folded or passed on to CSE in general. -** Alias analysis is needed to check for forwarding opportunities. -** -** Caveat: *all* loads must be listed here or they end up at CSE! -*/ - -LJFOLD(ALOAD any) -LJFOLDX(lj_opt_fwd_aload) - -/* From HREF fwd (see below). Must eliminate, not supported by fwd/backend. */ -LJFOLD(HLOAD KKPTR) -LJFOLDF(kfold_hload_kkptr) -{ - UNUSED(J); - lua_assert(ir_kptr(fleft) == niltvg(J2G(J))); - return TREF_NIL; -} - -LJFOLD(HLOAD any) -LJFOLDX(lj_opt_fwd_hload) - -LJFOLD(ULOAD any) -LJFOLDX(lj_opt_fwd_uload) - -LJFOLD(CALLL any IRCALL_lj_tab_len) -LJFOLDX(lj_opt_fwd_tab_len) - -/* Upvalue refs are really loads, but there are no corresponding stores. -** So CSE is ok for them, except for UREFO across a GC step (see below). -** If the referenced function is const, its upvalue addresses are const, too. -** This can be used to improve CSE by looking for the same address, -** even if the upvalues originate from a different function. -*/ -LJFOLD(UREFO KGC any) -LJFOLD(UREFC KGC any) -LJFOLDF(cse_uref) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_CSE)) { - IRRef ref = J->chain[fins->o]; - GCfunc *fn = ir_kfunc(fleft); - GCupval *uv = gco2uv(gcref(fn->l.uvptr[(fins->op2 >> 8)])); - while (ref > 0) { - IRIns *ir = IR(ref); - if (irref_isk(ir->op1)) { - GCfunc *fn2 = ir_kfunc(IR(ir->op1)); - if (gco2uv(gcref(fn2->l.uvptr[(ir->op2 >> 8)])) == uv) { - if (fins->o == IR_UREFO && gcstep_barrier(J, ref)) - break; - return ref; - } - } - ref = ir->prev; - } - } - return EMITFOLD; -} - -LJFOLD(HREFK any any) -LJFOLDX(lj_opt_fwd_hrefk) - -LJFOLD(HREF TNEW any) -LJFOLDF(fwd_href_tnew) -{ - if (lj_opt_fwd_href_nokey(J)) - return lj_ir_kkptr(J, niltvg(J2G(J))); - return NEXTFOLD; -} - -LJFOLD(HREF TDUP KPRI) -LJFOLD(HREF TDUP KGC) -LJFOLD(HREF TDUP KNUM) -LJFOLDF(fwd_href_tdup) -{ - TValue keyv; - lj_ir_kvalue(J->L, &keyv, fright); - if (lj_tab_get(J->L, ir_ktab(IR(fleft->op1)), &keyv) == niltvg(J2G(J)) && - lj_opt_fwd_href_nokey(J)) - return lj_ir_kkptr(J, niltvg(J2G(J))); - return NEXTFOLD; -} - -/* We can safely FOLD/CSE array/hash refs and field loads, since there -** are no corresponding stores. But we need to check for any NEWREF with -** an aliased table, as it may invalidate all of the pointers and fields. -** Only HREF needs the NEWREF check -- AREF and HREFK already depend on -** FLOADs. And NEWREF itself is treated like a store (see below). -*/ -LJFOLD(FLOAD TNEW IRFL_TAB_ASIZE) -LJFOLDF(fload_tab_tnew_asize) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD) && lj_opt_fwd_tptr(J, fins->op1)) - return INTFOLD(fleft->op1); - return NEXTFOLD; -} - -LJFOLD(FLOAD TNEW IRFL_TAB_HMASK) -LJFOLDF(fload_tab_tnew_hmask) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD) && lj_opt_fwd_tptr(J, fins->op1)) - return INTFOLD((1 << fleft->op2)-1); - return NEXTFOLD; -} - -LJFOLD(FLOAD TDUP IRFL_TAB_ASIZE) -LJFOLDF(fload_tab_tdup_asize) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD) && lj_opt_fwd_tptr(J, fins->op1)) - return INTFOLD((int32_t)ir_ktab(IR(fleft->op1))->asize); - return NEXTFOLD; -} - -LJFOLD(FLOAD TDUP IRFL_TAB_HMASK) -LJFOLDF(fload_tab_tdup_hmask) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD) && lj_opt_fwd_tptr(J, fins->op1)) - return INTFOLD((int32_t)ir_ktab(IR(fleft->op1))->hmask); - return NEXTFOLD; -} - -LJFOLD(HREF any any) -LJFOLD(FLOAD any IRFL_TAB_ARRAY) -LJFOLD(FLOAD any IRFL_TAB_NODE) -LJFOLD(FLOAD any IRFL_TAB_ASIZE) -LJFOLD(FLOAD any IRFL_TAB_HMASK) -LJFOLDF(fload_tab_ah) -{ - TRef tr = lj_opt_cse(J); - return lj_opt_fwd_tptr(J, tref_ref(tr)) ? tr : EMITFOLD; -} - -/* Strings are immutable, so we can safely FOLD/CSE the related FLOAD. */ -LJFOLD(FLOAD KGC IRFL_STR_LEN) -LJFOLDF(fload_str_len_kgc) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) - return INTFOLD((int32_t)ir_kstr(fleft)->len); - return NEXTFOLD; -} - -LJFOLD(FLOAD SNEW IRFL_STR_LEN) -LJFOLDF(fload_str_len_snew) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) { - PHIBARRIER(fleft); - return fleft->op2; - } - return NEXTFOLD; -} - -/* The C type ID of cdata objects is immutable. */ -LJFOLD(FLOAD KGC IRFL_CDATA_CTYPEID) -LJFOLDF(fload_cdata_typeid_kgc) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) - return INTFOLD((int32_t)ir_kcdata(fleft)->ctypeid); - return NEXTFOLD; -} - -/* Get the contents of immutable cdata objects. */ -LJFOLD(FLOAD KGC IRFL_CDATA_PTR) -LJFOLD(FLOAD KGC IRFL_CDATA_INT) -LJFOLD(FLOAD KGC IRFL_CDATA_INT64) -LJFOLDF(fload_cdata_int64_kgc) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) { - void *p = cdataptr(ir_kcdata(fleft)); - if (irt_is64(fins->t)) - return INT64FOLD(*(uint64_t *)p); - else - return INTFOLD(*(int32_t *)p); - } - return NEXTFOLD; -} - -LJFOLD(FLOAD CNEW IRFL_CDATA_CTYPEID) -LJFOLD(FLOAD CNEWI IRFL_CDATA_CTYPEID) -LJFOLDF(fload_cdata_typeid_cnew) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) - return fleft->op1; /* No PHI barrier needed. CNEW/CNEWI op1 is const. */ - return NEXTFOLD; -} - -/* Pointer, int and int64 cdata objects are immutable. */ -LJFOLD(FLOAD CNEWI IRFL_CDATA_PTR) -LJFOLD(FLOAD CNEWI IRFL_CDATA_INT) -LJFOLD(FLOAD CNEWI IRFL_CDATA_INT64) -LJFOLDF(fload_cdata_ptr_int64_cnew) -{ - if (LJ_LIKELY(J->flags & JIT_F_OPT_FOLD)) - return fleft->op2; /* Fold even across PHI to avoid allocations. */ - return NEXTFOLD; -} - -LJFOLD(FLOAD any IRFL_STR_LEN) -LJFOLD(FLOAD any IRFL_CDATA_CTYPEID) -LJFOLD(FLOAD any IRFL_CDATA_PTR) -LJFOLD(FLOAD any IRFL_CDATA_INT) -LJFOLD(FLOAD any IRFL_CDATA_INT64) -LJFOLD(VLOAD any any) /* Vararg loads have no corresponding stores. */ -LJFOLDX(lj_opt_cse) - -/* All other field loads need alias analysis. */ -LJFOLD(FLOAD any any) -LJFOLDX(lj_opt_fwd_fload) - -/* This is for LOOP only. Recording handles SLOADs internally. */ -LJFOLD(SLOAD any any) -LJFOLDF(fwd_sload) -{ - if ((fins->op2 & IRSLOAD_FRAME)) { - TRef tr = lj_opt_cse(J); - return tref_ref(tr) < J->chain[IR_RETF] ? EMITFOLD : tr; - } else { - lua_assert(J->slot[fins->op1] != 0); - return J->slot[fins->op1]; - } -} - -/* Only fold for KKPTR. The pointer _and_ the contents must be const. */ -LJFOLD(XLOAD KKPTR any) -LJFOLDF(xload_kptr) -{ - TRef tr = kfold_xload(J, fins, ir_kptr(fleft)); - return tr ? tr : NEXTFOLD; -} - -LJFOLD(XLOAD any any) -LJFOLDX(lj_opt_fwd_xload) - -/* -- Write barriers ------------------------------------------------------ */ - -/* Write barriers are amenable to CSE, but not across any incremental -** GC steps. -** -** The same logic applies to open upvalue references, because a stack -** may be resized during a GC step (not the current stack, but maybe that -** of a coroutine). -*/ -LJFOLD(TBAR any) -LJFOLD(OBAR any any) -LJFOLD(UREFO any any) -LJFOLDF(barrier_tab) -{ - TRef tr = lj_opt_cse(J); - if (gcstep_barrier(J, tref_ref(tr))) /* CSE across GC step? */ - return EMITFOLD; /* Raw emit. Assumes fins is left intact by CSE. */ - return tr; -} - -LJFOLD(TBAR TNEW) -LJFOLD(TBAR TDUP) -LJFOLDF(barrier_tnew_tdup) -{ - /* New tables are always white and never need a barrier. */ - if (fins->op1 < J->chain[IR_LOOP]) /* Except across a GC step. */ - return NEXTFOLD; - return DROPFOLD; -} - -/* -- Stores and allocations ---------------------------------------------- */ - -/* Stores and allocations cannot be folded or passed on to CSE in general. -** But some stores can be eliminated with dead-store elimination (DSE). -** -** Caveat: *all* stores and allocs must be listed here or they end up at CSE! -*/ - -LJFOLD(ASTORE any any) -LJFOLD(HSTORE any any) -LJFOLDX(lj_opt_dse_ahstore) - -LJFOLD(USTORE any any) -LJFOLDX(lj_opt_dse_ustore) - -LJFOLD(FSTORE any any) -LJFOLDX(lj_opt_dse_fstore) - -LJFOLD(XSTORE any any) -LJFOLDX(lj_opt_dse_xstore) - -LJFOLD(NEWREF any any) /* Treated like a store. */ -LJFOLD(CALLS any any) -LJFOLD(CALLL any any) /* Safeguard fallback. */ -LJFOLD(CALLXS any any) -LJFOLD(XBAR) -LJFOLD(RETF any any) /* Modifies BASE. */ -LJFOLD(TNEW any any) -LJFOLD(TDUP any) -LJFOLD(CNEW any any) -LJFOLD(XSNEW any any) -LJFOLDX(lj_ir_emit) - -/* ------------------------------------------------------------------------ */ - -/* Every entry in the generated hash table is a 32 bit pattern: -** -** xxxxxxxx iiiiiii lllllll rrrrrrrrrr -** -** xxxxxxxx = 8 bit index into fold function table -** iiiiiii = 7 bit folded instruction opcode -** lllllll = 7 bit left instruction opcode -** rrrrrrrrrr = 8 bit right instruction opcode or 10 bits from literal field -*/ - -#include "lj_folddef.h" - -/* ------------------------------------------------------------------------ */ - -/* Fold IR instruction. */ -TRef LJ_FASTCALL lj_opt_fold(jit_State *J) -{ - uint32_t key, any; - IRRef ref; - - if (LJ_UNLIKELY((J->flags & JIT_F_OPT_MASK) != JIT_F_OPT_DEFAULT)) { - lua_assert(((JIT_F_OPT_FOLD|JIT_F_OPT_FWD|JIT_F_OPT_CSE|JIT_F_OPT_DSE) | - JIT_F_OPT_DEFAULT) == JIT_F_OPT_DEFAULT); - /* Folding disabled? Chain to CSE, but not for loads/stores/allocs. */ - if (!(J->flags & JIT_F_OPT_FOLD) && irm_kind(lj_ir_mode[fins->o]) == IRM_N) - return lj_opt_cse(J); - - /* No FOLD, forwarding or CSE? Emit raw IR for loads, except for SLOAD. */ - if ((J->flags & (JIT_F_OPT_FOLD|JIT_F_OPT_FWD|JIT_F_OPT_CSE)) != - (JIT_F_OPT_FOLD|JIT_F_OPT_FWD|JIT_F_OPT_CSE) && - irm_kind(lj_ir_mode[fins->o]) == IRM_L && fins->o != IR_SLOAD) - return lj_ir_emit(J); - - /* No FOLD or DSE? Emit raw IR for stores. */ - if ((J->flags & (JIT_F_OPT_FOLD|JIT_F_OPT_DSE)) != - (JIT_F_OPT_FOLD|JIT_F_OPT_DSE) && - irm_kind(lj_ir_mode[fins->o]) == IRM_S) - return lj_ir_emit(J); - } - - /* Fold engine start/retry point. */ -retry: - /* Construct key from opcode and operand opcodes (unless literal/none). */ - key = ((uint32_t)fins->o << 17); - if (fins->op1 >= J->cur.nk) { - key += (uint32_t)IR(fins->op1)->o << 10; - *fleft = *IR(fins->op1); - } - if (fins->op2 >= J->cur.nk) { - key += (uint32_t)IR(fins->op2)->o; - *fright = *IR(fins->op2); - } else { - key += (fins->op2 & 0x3ffu); /* Literal mask. Must include IRCONV_*MASK. */ - } - - /* Check for a match in order from most specific to least specific. */ - any = 0; - for (;;) { - uint32_t k = key | (any & 0x1ffff); - uint32_t h = fold_hashkey(k); - uint32_t fh = fold_hash[h]; /* Lookup key in semi-perfect hash table. */ - if ((fh & 0xffffff) == k || (fh = fold_hash[h+1], (fh & 0xffffff) == k)) { - ref = (IRRef)tref_ref(fold_func[fh >> 24](J)); - if (ref != NEXTFOLD) - break; - } - if (any == 0xfffff) /* Exhausted folding. Pass on to CSE. */ - return lj_opt_cse(J); - any = (any | (any >> 10)) ^ 0xffc00; - } - - /* Return value processing, ordered by frequency. */ - if (LJ_LIKELY(ref >= MAX_FOLD)) - return TREF(ref, irt_t(IR(ref)->t)); - if (ref == RETRYFOLD) - goto retry; - if (ref == KINTFOLD) - return lj_ir_kint(J, fins->i); - if (ref == FAILFOLD) - lj_trace_err(J, LJ_TRERR_GFAIL); - lua_assert(ref == DROPFOLD); - return REF_DROP; -} - -/* -- Common-Subexpression Elimination ------------------------------------ */ - -/* CSE an IR instruction. This is very fast due to the skip-list chains. */ -TRef LJ_FASTCALL lj_opt_cse(jit_State *J) -{ - /* Avoid narrow to wide store-to-load forwarding stall */ - IRRef2 op12 = (IRRef2)fins->op1 + ((IRRef2)fins->op2 << 16); - IROp op = fins->o; - if (LJ_LIKELY(J->flags & JIT_F_OPT_CSE)) { - /* Limited search for same operands in per-opcode chain. */ - IRRef ref = J->chain[op]; - IRRef lim = fins->op1; - if (fins->op2 > lim) lim = fins->op2; /* Relies on lit < REF_BIAS. */ - while (ref > lim) { - if (IR(ref)->op12 == op12) - return TREF(ref, irt_t(IR(ref)->t)); /* Common subexpression found. */ - ref = IR(ref)->prev; - } - } - /* Otherwise emit IR (inlined for speed). */ - { - IRRef ref = lj_ir_nextins(J); - IRIns *ir = IR(ref); - ir->prev = J->chain[op]; - ir->op12 = op12; - J->chain[op] = (IRRef1)ref; - ir->o = fins->o; - J->guardemit.irt |= fins->t.irt; - return TREF(ref, irt_t((ir->t = fins->t))); - } -} - -/* CSE with explicit search limit. */ -TRef LJ_FASTCALL lj_opt_cselim(jit_State *J, IRRef lim) -{ - IRRef ref = J->chain[fins->o]; - IRRef2 op12 = (IRRef2)fins->op1 + ((IRRef2)fins->op2 << 16); - while (ref > lim) { - if (IR(ref)->op12 == op12) - return ref; - ref = IR(ref)->prev; - } - return lj_ir_emit(J); -} - -/* ------------------------------------------------------------------------ */ - -#undef IR -#undef fins -#undef fleft -#undef fright -#undef knumleft -#undef knumright -#undef emitir - -#endif diff --git a/deps/luajit/src/lj_opt_loop.c b/deps/luajit/src/lj_opt_loop.c deleted file mode 100644 index b7d1923..0000000 --- a/deps/luajit/src/lj_opt_loop.c +++ /dev/null @@ -1,436 +0,0 @@ -/* -** LOOP: Loop Optimizations. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_loop_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_err.h" -#include "lj_str.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_snap.h" -#include "lj_vm.h" - -/* Loop optimization: -** -** Traditional Loop-Invariant Code Motion (LICM) splits the instructions -** of a loop into invariant and variant instructions. The invariant -** instructions are hoisted out of the loop and only the variant -** instructions remain inside the loop body. -** -** Unfortunately LICM is mostly useless for compiling dynamic languages. -** The IR has many guards and most of the subsequent instructions are -** control-dependent on them. The first non-hoistable guard would -** effectively prevent hoisting of all subsequent instructions. -** -** That's why we use a special form of unrolling using copy-substitution, -** combined with redundancy elimination: -** -** The recorded instruction stream is re-emitted to the compiler pipeline -** with substituted operands. The substitution table is filled with the -** refs returned by re-emitting each instruction. This can be done -** on-the-fly, because the IR is in strict SSA form, where every ref is -** defined before its use. -** -** This aproach generates two code sections, separated by the LOOP -** instruction: -** -** 1. The recorded instructions form a kind of pre-roll for the loop. It -** contains a mix of invariant and variant instructions and performs -** exactly one loop iteration (but not necessarily the 1st iteration). -** -** 2. The loop body contains only the variant instructions and performs -** all remaining loop iterations. -** -** On first sight that looks like a waste of space, because the variant -** instructions are present twice. But the key insight is that the -** pre-roll honors the control-dependencies for *both* the pre-roll itself -** *and* the loop body! -** -** It also means one doesn't have to explicitly model control-dependencies -** (which, BTW, wouldn't help LICM much). And it's much easier to -** integrate sparse snapshotting with this approach. -** -** One of the nicest aspects of this approach is that all of the -** optimizations of the compiler pipeline (FOLD, CSE, FWD, etc.) can be -** reused with only minor restrictions (e.g. one should not fold -** instructions across loop-carried dependencies). -** -** But in general all optimizations can be applied which only need to look -** backwards into the generated instruction stream. At any point in time -** during the copy-substitution process this contains both a static loop -** iteration (the pre-roll) and a dynamic one (from the to-be-copied -** instruction up to the end of the partial loop body). -** -** Since control-dependencies are implicitly kept, CSE also applies to all -** kinds of guards. The major advantage is that all invariant guards can -** be hoisted, too. -** -** Load/store forwarding works across loop iterations, too. This is -** important if loop-carried dependencies are kept in upvalues or tables. -** E.g. 'self.idx = self.idx + 1' deep down in some OO-style method may -** become a forwarded loop-recurrence after inlining. -** -** Since the IR is in SSA form, loop-carried dependencies have to be -** modeled with PHI instructions. The potential candidates for PHIs are -** collected on-the-fly during copy-substitution. After eliminating the -** redundant ones, PHI instructions are emitted *below* the loop body. -** -** Note that this departure from traditional SSA form doesn't change the -** semantics of the PHI instructions themselves. But it greatly simplifies -** on-the-fly generation of the IR and the machine code. -*/ - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -/* Emit raw IR without passing through optimizations. */ -#define emitir_raw(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J)) - -/* -- PHI elimination ----------------------------------------------------- */ - -/* Emit or eliminate collected PHIs. */ -static void loop_emit_phi(jit_State *J, IRRef1 *subst, IRRef1 *phi, IRRef nphi, - SnapNo onsnap) -{ - int passx = 0; - IRRef i, j, nslots; - IRRef invar = J->chain[IR_LOOP]; - /* Pass #1: mark redundant and potentially redundant PHIs. */ - for (i = 0, j = 0; i < nphi; i++) { - IRRef lref = phi[i]; - IRRef rref = subst[lref]; - if (lref == rref || rref == REF_DROP) { /* Invariants are redundant. */ - irt_clearphi(IR(lref)->t); - } else { - phi[j++] = (IRRef1)lref; - if (!(IR(rref)->op1 == lref || IR(rref)->op2 == lref)) { - /* Quick check for simple recurrences failed, need pass2. */ - irt_setmark(IR(lref)->t); - passx = 1; - } - } - } - nphi = j; - /* Pass #2: traverse variant part and clear marks of non-redundant PHIs. */ - if (passx) { - SnapNo s; - for (i = J->cur.nins-1; i > invar; i--) { - IRIns *ir = IR(i); - if (!irref_isk(ir->op2)) irt_clearmark(IR(ir->op2)->t); - if (!irref_isk(ir->op1)) { - irt_clearmark(IR(ir->op1)->t); - if (ir->op1 < invar && - ir->o >= IR_CALLN && ir->o <= IR_CARG) { /* ORDER IR */ - ir = IR(ir->op1); - while (ir->o == IR_CARG) { - if (!irref_isk(ir->op2)) irt_clearmark(IR(ir->op2)->t); - if (irref_isk(ir->op1)) break; - ir = IR(ir->op1); - irt_clearmark(ir->t); - } - } - } - } - for (s = J->cur.nsnap-1; s >= onsnap; s--) { - SnapShot *snap = &J->cur.snap[s]; - SnapEntry *map = &J->cur.snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - IRRef ref = snap_ref(map[n]); - if (!irref_isk(ref)) irt_clearmark(IR(ref)->t); - } - } - } - /* Pass #3: add PHIs for variant slots without a corresponding SLOAD. */ - nslots = J->baseslot+J->maxslot; - for (i = 1; i < nslots; i++) { - IRRef ref = tref_ref(J->slot[i]); - while (!irref_isk(ref) && ref != subst[ref]) { - IRIns *ir = IR(ref); - irt_clearmark(ir->t); /* Unmark potential uses, too. */ - if (irt_isphi(ir->t) || irt_ispri(ir->t)) - break; - irt_setphi(ir->t); - if (nphi >= LJ_MAX_PHI) - lj_trace_err(J, LJ_TRERR_PHIOV); - phi[nphi++] = (IRRef1)ref; - ref = subst[ref]; - if (ref > invar) - break; - } - } - /* Pass #4: propagate non-redundant PHIs. */ - while (passx) { - passx = 0; - for (i = 0; i < nphi; i++) { - IRRef lref = phi[i]; - IRIns *ir = IR(lref); - if (!irt_ismarked(ir->t)) { /* Propagate only from unmarked PHIs. */ - IRIns *irr = IR(subst[lref]); - if (irt_ismarked(irr->t)) { /* Right ref points to other PHI? */ - irt_clearmark(irr->t); /* Mark that PHI as non-redundant. */ - passx = 1; /* Retry. */ - } - } - } - } - /* Pass #5: emit PHI instructions or eliminate PHIs. */ - for (i = 0; i < nphi; i++) { - IRRef lref = phi[i]; - IRIns *ir = IR(lref); - if (!irt_ismarked(ir->t)) { /* Emit PHI if not marked. */ - IRRef rref = subst[lref]; - if (rref > invar) - irt_setphi(IR(rref)->t); - emitir_raw(IRT(IR_PHI, irt_type(ir->t)), lref, rref); - } else { /* Otherwise eliminate PHI. */ - irt_clearmark(ir->t); - irt_clearphi(ir->t); - } - } -} - -/* -- Loop unrolling using copy-substitution ------------------------------ */ - -/* Copy-substitute snapshot. */ -static void loop_subst_snap(jit_State *J, SnapShot *osnap, - SnapEntry *loopmap, IRRef1 *subst) -{ - SnapEntry *nmap, *omap = &J->cur.snapmap[osnap->mapofs]; - SnapEntry *nextmap = &J->cur.snapmap[snap_nextofs(&J->cur, osnap)]; - MSize nmapofs; - MSize on, ln, nn, onent = osnap->nent; - BCReg nslots = osnap->nslots; - SnapShot *snap = &J->cur.snap[J->cur.nsnap]; - if (irt_isguard(J->guardemit)) { /* Guard inbetween? */ - nmapofs = J->cur.nsnapmap; - J->cur.nsnap++; /* Add new snapshot. */ - } else { /* Otherwise overwrite previous snapshot. */ - snap--; - nmapofs = snap->mapofs; - } - J->guardemit.irt = 0; - /* Setup new snapshot. */ - snap->mapofs = (uint16_t)nmapofs; - snap->ref = (IRRef1)J->cur.nins; - snap->nslots = nslots; - snap->topslot = osnap->topslot; - snap->count = 0; - nmap = &J->cur.snapmap[nmapofs]; - /* Substitute snapshot slots. */ - on = ln = nn = 0; - while (on < onent) { - SnapEntry osn = omap[on], lsn = loopmap[ln]; - if (snap_slot(lsn) < snap_slot(osn)) { /* Copy slot from loop map. */ - nmap[nn++] = lsn; - ln++; - } else { /* Copy substituted slot from snapshot map. */ - if (snap_slot(lsn) == snap_slot(osn)) ln++; /* Shadowed loop slot. */ - if (!irref_isk(snap_ref(osn))) - osn = snap_setref(osn, subst[snap_ref(osn)]); - nmap[nn++] = osn; - on++; - } - } - while (snap_slot(loopmap[ln]) < nslots) /* Copy remaining loop slots. */ - nmap[nn++] = loopmap[ln++]; - snap->nent = (uint8_t)nn; - omap += onent; - nmap += nn; - while (omap < nextmap) /* Copy PC + frame links. */ - *nmap++ = *omap++; - J->cur.nsnapmap = (uint16_t)(nmap - J->cur.snapmap); -} - -/* Unroll loop. */ -static void loop_unroll(jit_State *J) -{ - IRRef1 phi[LJ_MAX_PHI]; - uint32_t nphi = 0; - IRRef1 *subst; - SnapNo onsnap; - SnapShot *osnap, *loopsnap; - SnapEntry *loopmap, *psentinel; - IRRef ins, invar; - - /* Use temp buffer for substitution table. - ** Only non-constant refs in [REF_BIAS,invar) are valid indexes. - ** Caveat: don't call into the VM or run the GC or the buffer may be gone. - */ - invar = J->cur.nins; - subst = (IRRef1 *)lj_str_needbuf(J->L, &G(J->L)->tmpbuf, - (invar-REF_BIAS)*sizeof(IRRef1)) - REF_BIAS; - subst[REF_BASE] = REF_BASE; - - /* LOOP separates the pre-roll from the loop body. */ - emitir_raw(IRTG(IR_LOOP, IRT_NIL), 0, 0); - - /* Grow snapshot buffer and map for copy-substituted snapshots. - ** Need up to twice the number of snapshots minus #0 and loop snapshot. - ** Need up to twice the number of entries plus fallback substitutions - ** from the loop snapshot entries for each new snapshot. - ** Caveat: both calls may reallocate J->cur.snap and J->cur.snapmap! - */ - onsnap = J->cur.nsnap; - lj_snap_grow_buf(J, 2*onsnap-2); - lj_snap_grow_map(J, J->cur.nsnapmap*2+(onsnap-2)*J->cur.snap[onsnap-1].nent); - - /* The loop snapshot is used for fallback substitutions. */ - loopsnap = &J->cur.snap[onsnap-1]; - loopmap = &J->cur.snapmap[loopsnap->mapofs]; - /* The PC of snapshot #0 and the loop snapshot must match. */ - psentinel = &loopmap[loopsnap->nent]; - lua_assert(*psentinel == J->cur.snapmap[J->cur.snap[0].nent]); - *psentinel = SNAP(255, 0, 0); /* Replace PC with temporary sentinel. */ - - /* Start substitution with snapshot #1 (#0 is empty for root traces). */ - osnap = &J->cur.snap[1]; - - /* Copy and substitute all recorded instructions and snapshots. */ - for (ins = REF_FIRST; ins < invar; ins++) { - IRIns *ir; - IRRef op1, op2; - - if (ins >= osnap->ref) /* Instruction belongs to next snapshot? */ - loop_subst_snap(J, osnap++, loopmap, subst); /* Copy-substitute it. */ - - /* Substitute instruction operands. */ - ir = IR(ins); - op1 = ir->op1; - if (!irref_isk(op1)) op1 = subst[op1]; - op2 = ir->op2; - if (!irref_isk(op2)) op2 = subst[op2]; - if (irm_kind(lj_ir_mode[ir->o]) == IRM_N && - op1 == ir->op1 && op2 == ir->op2) { /* Regular invariant ins? */ - subst[ins] = (IRRef1)ins; /* Shortcut. */ - } else { - /* Re-emit substituted instruction to the FOLD/CSE/etc. pipeline. */ - IRType1 t = ir->t; /* Get this first, since emitir may invalidate ir. */ - IRRef ref = tref_ref(emitir(ir->ot & ~IRT_ISPHI, op1, op2)); - subst[ins] = (IRRef1)ref; - if (ref != ins) { - IRIns *irr = IR(ref); - if (ref < invar) { /* Loop-carried dependency? */ - /* Potential PHI? */ - if (!irref_isk(ref) && !irt_isphi(irr->t) && !irt_ispri(irr->t)) { - irt_setphi(irr->t); - if (nphi >= LJ_MAX_PHI) - lj_trace_err(J, LJ_TRERR_PHIOV); - phi[nphi++] = (IRRef1)ref; - } - /* Check all loop-carried dependencies for type instability. */ - if (!irt_sametype(t, irr->t)) { - if (irt_isinteger(t) && irt_isinteger(irr->t)) - continue; - else if (irt_isnum(t) && irt_isinteger(irr->t)) /* Fix int->num. */ - ref = tref_ref(emitir(IRTN(IR_CONV), ref, IRCONV_NUM_INT)); - else if (irt_isnum(irr->t) && irt_isinteger(t)) /* Fix num->int. */ - ref = tref_ref(emitir(IRTGI(IR_CONV), ref, - IRCONV_INT_NUM|IRCONV_CHECK)); - else - lj_trace_err(J, LJ_TRERR_TYPEINS); - subst[ins] = (IRRef1)ref; - irr = IR(ref); - goto phiconv; - } - } else if (ref != REF_DROP && irr->o == IR_CONV && - ref > invar && irr->op1 < invar) { - /* May need an extra PHI for a CONV. */ - ref = irr->op1; - irr = IR(ref); - phiconv: - if (ref < invar && !irref_isk(ref) && !irt_isphi(irr->t)) { - irt_setphi(irr->t); - if (nphi >= LJ_MAX_PHI) - lj_trace_err(J, LJ_TRERR_PHIOV); - phi[nphi++] = (IRRef1)ref; - } - } - } - } - } - if (!irt_isguard(J->guardemit)) /* Drop redundant snapshot. */ - J->cur.nsnapmap = (uint16_t)J->cur.snap[--J->cur.nsnap].mapofs; - lua_assert(J->cur.nsnapmap <= J->sizesnapmap); - *psentinel = J->cur.snapmap[J->cur.snap[0].nent]; /* Restore PC. */ - - loop_emit_phi(J, subst, phi, nphi, onsnap); -} - -/* Undo any partial changes made by the loop optimization. */ -static void loop_undo(jit_State *J, IRRef ins, SnapNo nsnap, MSize nsnapmap) -{ - ptrdiff_t i; - SnapShot *snap = &J->cur.snap[nsnap-1]; - SnapEntry *map = J->cur.snapmap; - map[snap->mapofs + snap->nent] = map[J->cur.snap[0].nent]; /* Restore PC. */ - J->cur.nsnapmap = (uint16_t)nsnapmap; - J->cur.nsnap = nsnap; - J->guardemit.irt = 0; - lj_ir_rollback(J, ins); - for (i = 0; i < BPROP_SLOTS; i++) { /* Remove backprop. cache entries. */ - BPropEntry *bp = &J->bpropcache[i]; - if (bp->val >= ins) - bp->key = 0; - } - for (ins--; ins >= REF_FIRST; ins--) { /* Remove flags. */ - IRIns *ir = IR(ins); - irt_clearphi(ir->t); - irt_clearmark(ir->t); - } -} - -/* Protected callback for loop optimization. */ -static TValue *cploop_opt(lua_State *L, lua_CFunction dummy, void *ud) -{ - UNUSED(L); UNUSED(dummy); - loop_unroll((jit_State *)ud); - return NULL; -} - -/* Loop optimization. */ -int lj_opt_loop(jit_State *J) -{ - IRRef nins = J->cur.nins; - SnapNo nsnap = J->cur.nsnap; - MSize nsnapmap = J->cur.nsnapmap; - int errcode = lj_vm_cpcall(J->L, NULL, J, cploop_opt); - if (LJ_UNLIKELY(errcode)) { - lua_State *L = J->L; - if (errcode == LUA_ERRRUN && tvisnumber(L->top-1)) { /* Trace error? */ - int32_t e = numberVint(L->top-1); - switch ((TraceError)e) { - case LJ_TRERR_TYPEINS: /* Type instability. */ - case LJ_TRERR_GFAIL: /* Guard would always fail. */ - /* Unrolling via recording fixes many cases, e.g. a flipped boolean. */ - if (--J->instunroll < 0) /* But do not unroll forever. */ - break; - L->top--; /* Remove error object. */ - loop_undo(J, nins, nsnap, nsnapmap); - return 1; /* Loop optimization failed, continue recording. */ - default: - break; - } - } - lj_err_throw(L, errcode); /* Propagate all other errors. */ - } - return 0; /* Loop optimization is ok. */ -} - -#undef IR -#undef emitir -#undef emitir_raw - -#endif diff --git a/deps/luajit/src/lj_opt_mem.c b/deps/luajit/src/lj_opt_mem.c deleted file mode 100644 index a4d96fc..0000000 --- a/deps/luajit/src/lj_opt_mem.c +++ /dev/null @@ -1,916 +0,0 @@ -/* -** Memory access optimizations. -** AA: Alias Analysis using high-level semantic disambiguation. -** FWD: Load Forwarding (L2L) + Store Forwarding (S2L). -** DSE: Dead-Store Elimination. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_mem_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_tab.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) -#define fins (&J->fold.ins) -#define fleft (&J->fold.left) -#define fright (&J->fold.right) - -/* -** Caveat #1: return value is not always a TRef -- only use with tref_ref(). -** Caveat #2: FWD relies on active CSE for xREF operands -- see lj_opt_fold(). -*/ - -/* Return values from alias analysis. */ -typedef enum { - ALIAS_NO, /* The two refs CANNOT alias (exact). */ - ALIAS_MAY, /* The two refs MAY alias (inexact). */ - ALIAS_MUST /* The two refs MUST alias (exact). */ -} AliasRet; - -/* -- ALOAD/HLOAD forwarding and ASTORE/HSTORE elimination ---------------- */ - -/* Simplified escape analysis: check for intervening stores. */ -static AliasRet aa_escape(jit_State *J, IRIns *ir, IRIns *stop) -{ - IRRef ref = (IRRef)(ir - J->cur.ir); /* The ref that might be stored. */ - for (ir++; ir < stop; ir++) - if (ir->op2 == ref && - (ir->o == IR_ASTORE || ir->o == IR_HSTORE || - ir->o == IR_USTORE || ir->o == IR_FSTORE)) - return ALIAS_MAY; /* Reference was stored and might alias. */ - return ALIAS_NO; /* Reference was not stored. */ -} - -/* Alias analysis for two different table references. */ -static AliasRet aa_table(jit_State *J, IRRef ta, IRRef tb) -{ - IRIns *taba = IR(ta), *tabb = IR(tb); - int newa, newb; - lua_assert(ta != tb); - lua_assert(irt_istab(taba->t) && irt_istab(tabb->t)); - /* Disambiguate new allocations. */ - newa = (taba->o == IR_TNEW || taba->o == IR_TDUP); - newb = (tabb->o == IR_TNEW || tabb->o == IR_TDUP); - if (newa && newb) - return ALIAS_NO; /* Two different allocations never alias. */ - if (newb) { /* At least one allocation? */ - IRIns *tmp = taba; taba = tabb; tabb = tmp; - } else if (!newa) { - return ALIAS_MAY; /* Anything else: we just don't know. */ - } - return aa_escape(J, taba, tabb); -} - -/* Alias analysis for array and hash access using key-based disambiguation. */ -static AliasRet aa_ahref(jit_State *J, IRIns *refa, IRIns *refb) -{ - IRRef ka = refa->op2; - IRRef kb = refb->op2; - IRIns *keya, *keyb; - IRRef ta, tb; - if (refa == refb) - return ALIAS_MUST; /* Shortcut for same refs. */ - keya = IR(ka); - if (keya->o == IR_KSLOT) { ka = keya->op1; keya = IR(ka); } - keyb = IR(kb); - if (keyb->o == IR_KSLOT) { kb = keyb->op1; keyb = IR(kb); } - ta = (refa->o==IR_HREFK || refa->o==IR_AREF) ? IR(refa->op1)->op1 : refa->op1; - tb = (refb->o==IR_HREFK || refb->o==IR_AREF) ? IR(refb->op1)->op1 : refb->op1; - if (ka == kb) { - /* Same key. Check for same table with different ref (NEWREF vs. HREF). */ - if (ta == tb) - return ALIAS_MUST; /* Same key, same table. */ - else - return aa_table(J, ta, tb); /* Same key, possibly different table. */ - } - if (irref_isk(ka) && irref_isk(kb)) - return ALIAS_NO; /* Different constant keys. */ - if (refa->o == IR_AREF) { - /* Disambiguate array references based on index arithmetic. */ - int32_t ofsa = 0, ofsb = 0; - IRRef basea = ka, baseb = kb; - lua_assert(refb->o == IR_AREF); - /* Gather base and offset from t[base] or t[base+-ofs]. */ - if (keya->o == IR_ADD && irref_isk(keya->op2)) { - basea = keya->op1; - ofsa = IR(keya->op2)->i; - if (basea == kb && ofsa != 0) - return ALIAS_NO; /* t[base+-ofs] vs. t[base]. */ - } - if (keyb->o == IR_ADD && irref_isk(keyb->op2)) { - baseb = keyb->op1; - ofsb = IR(keyb->op2)->i; - if (ka == baseb && ofsb != 0) - return ALIAS_NO; /* t[base] vs. t[base+-ofs]. */ - } - if (basea == baseb && ofsa != ofsb) - return ALIAS_NO; /* t[base+-o1] vs. t[base+-o2] and o1 != o2. */ - } else { - /* Disambiguate hash references based on the type of their keys. */ - lua_assert((refa->o==IR_HREF || refa->o==IR_HREFK || refa->o==IR_NEWREF) && - (refb->o==IR_HREF || refb->o==IR_HREFK || refb->o==IR_NEWREF)); - if (!irt_sametype(keya->t, keyb->t)) - return ALIAS_NO; /* Different key types. */ - } - if (ta == tb) - return ALIAS_MAY; /* Same table, cannot disambiguate keys. */ - else - return aa_table(J, ta, tb); /* Try to disambiguate tables. */ -} - -/* Array and hash load forwarding. */ -static TRef fwd_ahload(jit_State *J, IRRef xref) -{ - IRIns *xr = IR(xref); - IRRef lim = xref; /* Search limit. */ - IRRef ref; - - /* Search for conflicting stores. */ - ref = J->chain[fins->o+IRDELTA_L2S]; - while (ref > xref) { - IRIns *store = IR(ref); - switch (aa_ahref(J, xr, IR(store->op1))) { - case ALIAS_NO: break; /* Continue searching. */ - case ALIAS_MAY: lim = ref; goto cselim; /* Limit search for load. */ - case ALIAS_MUST: return store->op2; /* Store forwarding. */ - } - ref = store->prev; - } - - /* No conflicting store (yet): const-fold loads from allocations. */ - { - IRIns *ir = (xr->o == IR_HREFK || xr->o == IR_AREF) ? IR(xr->op1) : xr; - IRRef tab = ir->op1; - ir = IR(tab); - if (ir->o == IR_TNEW || (ir->o == IR_TDUP && irref_isk(xr->op2))) { - /* A NEWREF with a number key may end up pointing to the array part. - ** But it's referenced from HSTORE and not found in the ASTORE chain. - ** For now simply consider this a conflict without forwarding anything. - */ - if (xr->o == IR_AREF) { - IRRef ref2 = J->chain[IR_NEWREF]; - while (ref2 > tab) { - IRIns *newref = IR(ref2); - if (irt_isnum(IR(newref->op2)->t)) - goto cselim; - ref2 = newref->prev; - } - } - /* NEWREF inhibits CSE for HREF, and dependent FLOADs from HREFK/AREF. - ** But the above search for conflicting stores was limited by xref. - ** So continue searching, limited by the TNEW/TDUP. Store forwarding - ** is ok, too. A conflict does NOT limit the search for a matching load. - */ - while (ref > tab) { - IRIns *store = IR(ref); - switch (aa_ahref(J, xr, IR(store->op1))) { - case ALIAS_NO: break; /* Continue searching. */ - case ALIAS_MAY: goto cselim; /* Conflicting store. */ - case ALIAS_MUST: return store->op2; /* Store forwarding. */ - } - ref = store->prev; - } - lua_assert(ir->o != IR_TNEW || irt_isnil(fins->t)); - if (irt_ispri(fins->t)) { - return TREF_PRI(irt_type(fins->t)); - } else if (irt_isnum(fins->t) || (LJ_DUALNUM && irt_isint(fins->t)) || - irt_isstr(fins->t)) { - TValue keyv; - cTValue *tv; - IRIns *key = IR(xr->op2); - if (key->o == IR_KSLOT) key = IR(key->op1); - lj_ir_kvalue(J->L, &keyv, key); - tv = lj_tab_get(J->L, ir_ktab(IR(ir->op1)), &keyv); - lua_assert(itype2irt(tv) == irt_type(fins->t)); - if (irt_isnum(fins->t)) - return lj_ir_knum_u64(J, tv->u64); - else if (LJ_DUALNUM && irt_isint(fins->t)) - return lj_ir_kint(J, intV(tv)); - else - return lj_ir_kstr(J, strV(tv)); - } - /* Othwerwise: don't intern as a constant. */ - } - } - -cselim: - /* Try to find a matching load. Below the conflicting store, if any. */ - ref = J->chain[fins->o]; - while (ref > lim) { - IRIns *load = IR(ref); - if (load->op1 == xref) - return ref; /* Load forwarding. */ - ref = load->prev; - } - return 0; /* Conflict or no match. */ -} - -/* Reassociate ALOAD across PHIs to handle t[i-1] forwarding case. */ -static TRef fwd_aload_reassoc(jit_State *J) -{ - IRIns *irx = IR(fins->op1); - IRIns *key = IR(irx->op2); - if (key->o == IR_ADD && irref_isk(key->op2)) { - IRIns *add2 = IR(key->op1); - if (add2->o == IR_ADD && irref_isk(add2->op2) && - IR(key->op2)->i == -IR(add2->op2)->i) { - IRRef ref = J->chain[IR_AREF]; - IRRef lim = add2->op1; - if (irx->op1 > lim) lim = irx->op1; - while (ref > lim) { - IRIns *ir = IR(ref); - if (ir->op1 == irx->op1 && ir->op2 == add2->op1) - return fwd_ahload(J, ref); - ref = ir->prev; - } - } - } - return 0; -} - -/* ALOAD forwarding. */ -TRef LJ_FASTCALL lj_opt_fwd_aload(jit_State *J) -{ - IRRef ref; - if ((ref = fwd_ahload(J, fins->op1)) || - (ref = fwd_aload_reassoc(J))) - return ref; - return EMITFOLD; -} - -/* HLOAD forwarding. */ -TRef LJ_FASTCALL lj_opt_fwd_hload(jit_State *J) -{ - IRRef ref = fwd_ahload(J, fins->op1); - if (ref) - return ref; - return EMITFOLD; -} - -/* HREFK forwarding. */ -TRef LJ_FASTCALL lj_opt_fwd_hrefk(jit_State *J) -{ - IRRef tab = fleft->op1; - IRRef ref = J->chain[IR_NEWREF]; - while (ref > tab) { - IRIns *newref = IR(ref); - if (tab == newref->op1) { - if (fright->op1 == newref->op2) - return ref; /* Forward from NEWREF. */ - else - goto docse; - } else if (aa_table(J, tab, newref->op1) != ALIAS_NO) { - goto docse; - } - ref = newref->prev; - } - /* No conflicting NEWREF: key location unchanged for HREFK of TDUP. */ - if (IR(tab)->o == IR_TDUP) - fins->t.irt &= ~IRT_GUARD; /* Drop HREFK guard. */ -docse: - return CSEFOLD; -} - -/* Check whether HREF of TNEW/TDUP can be folded to niltv. */ -int LJ_FASTCALL lj_opt_fwd_href_nokey(jit_State *J) -{ - IRRef lim = fins->op1; /* Search limit. */ - IRRef ref; - - /* The key for an ASTORE may end up in the hash part after a NEWREF. */ - if (irt_isnum(fright->t) && J->chain[IR_NEWREF] > lim) { - ref = J->chain[IR_ASTORE]; - while (ref > lim) { - if (ref < J->chain[IR_NEWREF]) - return 0; /* Conflict. */ - ref = IR(ref)->prev; - } - } - - /* Search for conflicting stores. */ - ref = J->chain[IR_HSTORE]; - while (ref > lim) { - IRIns *store = IR(ref); - if (aa_ahref(J, fins, IR(store->op1)) != ALIAS_NO) - return 0; /* Conflict. */ - ref = store->prev; - } - - return 1; /* No conflict. Can fold to niltv. */ -} - -/* Check whether there's no aliasing NEWREF for the left operand. */ -int LJ_FASTCALL lj_opt_fwd_tptr(jit_State *J, IRRef lim) -{ - IRRef ta = fins->op1; - IRRef ref = J->chain[IR_NEWREF]; - while (ref > lim) { - IRIns *newref = IR(ref); - if (ta == newref->op1 || aa_table(J, ta, newref->op1) != ALIAS_NO) - return 0; /* Conflict. */ - ref = newref->prev; - } - return 1; /* No conflict. Can safely FOLD/CSE. */ -} - -/* ASTORE/HSTORE elimination. */ -TRef LJ_FASTCALL lj_opt_dse_ahstore(jit_State *J) -{ - IRRef xref = fins->op1; /* xREF reference. */ - IRRef val = fins->op2; /* Stored value reference. */ - IRIns *xr = IR(xref); - IRRef1 *refp = &J->chain[fins->o]; - IRRef ref = *refp; - while (ref > xref) { /* Search for redundant or conflicting stores. */ - IRIns *store = IR(ref); - switch (aa_ahref(J, xr, IR(store->op1))) { - case ALIAS_NO: - break; /* Continue searching. */ - case ALIAS_MAY: /* Store to MAYBE the same location. */ - if (store->op2 != val) /* Conflict if the value is different. */ - goto doemit; - break; /* Otherwise continue searching. */ - case ALIAS_MUST: /* Store to the same location. */ - if (store->op2 == val) /* Same value: drop the new store. */ - return DROPFOLD; - /* Different value: try to eliminate the redundant store. */ - if (ref > J->chain[IR_LOOP]) { /* Quick check to avoid crossing LOOP. */ - IRIns *ir; - /* Check for any intervening guards (includes conflicting loads). */ - for (ir = IR(J->cur.nins-1); ir > store; ir--) - if (irt_isguard(ir->t) || ir->o == IR_CALLL) - goto doemit; /* No elimination possible. */ - /* Remove redundant store from chain and replace with NOP. */ - *refp = store->prev; - store->o = IR_NOP; - store->t.irt = IRT_NIL; - store->op1 = store->op2 = 0; - store->prev = 0; - /* Now emit the new store instead. */ - } - goto doemit; - } - ref = *(refp = &store->prev); - } -doemit: - return EMITFOLD; /* Otherwise we have a conflict or simply no match. */ -} - -/* -- ULOAD forwarding ---------------------------------------------------- */ - -/* The current alias analysis for upvalues is very simplistic. It only -** disambiguates between the unique upvalues of the same function. -** This is good enough for now, since most upvalues are read-only. -** -** A more precise analysis would be feasible with the help of the parser: -** generate a unique key for every upvalue, even across all prototypes. -** Lacking a realistic use-case, it's unclear whether this is beneficial. -*/ -static AliasRet aa_uref(IRIns *refa, IRIns *refb) -{ - if (refa->o != refb->o) - return ALIAS_NO; /* Different UREFx type. */ - if (refa->op1 == refb->op1) { /* Same function. */ - if (refa->op2 == refb->op2) - return ALIAS_MUST; /* Same function, same upvalue idx. */ - else - return ALIAS_NO; /* Same function, different upvalue idx. */ - } else { /* Different functions, check disambiguation hash values. */ - if (((refa->op2 ^ refb->op2) & 0xff)) - return ALIAS_NO; /* Upvalues with different hash values cannot alias. */ - else - return ALIAS_MAY; /* No conclusion can be drawn for same hash value. */ - } -} - -/* ULOAD forwarding. */ -TRef LJ_FASTCALL lj_opt_fwd_uload(jit_State *J) -{ - IRRef uref = fins->op1; - IRRef lim = REF_BASE; /* Search limit. */ - IRIns *xr = IR(uref); - IRRef ref; - - /* Search for conflicting stores. */ - ref = J->chain[IR_USTORE]; - while (ref > lim) { - IRIns *store = IR(ref); - switch (aa_uref(xr, IR(store->op1))) { - case ALIAS_NO: break; /* Continue searching. */ - case ALIAS_MAY: lim = ref; goto cselim; /* Limit search for load. */ - case ALIAS_MUST: return store->op2; /* Store forwarding. */ - } - ref = store->prev; - } - -cselim: - /* Try to find a matching load. Below the conflicting store, if any. */ - - ref = J->chain[IR_ULOAD]; - while (ref > lim) { - IRIns *ir = IR(ref); - if (ir->op1 == uref || - (IR(ir->op1)->op12 == IR(uref)->op12 && IR(ir->op1)->o == IR(uref)->o)) - return ref; /* Match for identical or equal UREFx (non-CSEable UREFO). */ - ref = ir->prev; - } - return lj_ir_emit(J); -} - -/* USTORE elimination. */ -TRef LJ_FASTCALL lj_opt_dse_ustore(jit_State *J) -{ - IRRef xref = fins->op1; /* xREF reference. */ - IRRef val = fins->op2; /* Stored value reference. */ - IRIns *xr = IR(xref); - IRRef1 *refp = &J->chain[IR_USTORE]; - IRRef ref = *refp; - while (ref > xref) { /* Search for redundant or conflicting stores. */ - IRIns *store = IR(ref); - switch (aa_uref(xr, IR(store->op1))) { - case ALIAS_NO: - break; /* Continue searching. */ - case ALIAS_MAY: /* Store to MAYBE the same location. */ - if (store->op2 != val) /* Conflict if the value is different. */ - goto doemit; - break; /* Otherwise continue searching. */ - case ALIAS_MUST: /* Store to the same location. */ - if (store->op2 == val) /* Same value: drop the new store. */ - return DROPFOLD; - /* Different value: try to eliminate the redundant store. */ - if (ref > J->chain[IR_LOOP]) { /* Quick check to avoid crossing LOOP. */ - IRIns *ir; - /* Check for any intervening guards (includes conflicting loads). */ - for (ir = IR(J->cur.nins-1); ir > store; ir--) - if (irt_isguard(ir->t)) - goto doemit; /* No elimination possible. */ - /* Remove redundant store from chain and replace with NOP. */ - *refp = store->prev; - store->o = IR_NOP; - store->t.irt = IRT_NIL; - store->op1 = store->op2 = 0; - store->prev = 0; - if (ref+1 < J->cur.nins && - store[1].o == IR_OBAR && store[1].op1 == xref) { - IRRef1 *bp = &J->chain[IR_OBAR]; - IRIns *obar; - for (obar = IR(*bp); *bp > ref+1; obar = IR(*bp)) - bp = &obar->prev; - /* Remove OBAR, too. */ - *bp = obar->prev; - obar->o = IR_NOP; - obar->t.irt = IRT_NIL; - obar->op1 = obar->op2 = 0; - obar->prev = 0; - } - /* Now emit the new store instead. */ - } - goto doemit; - } - ref = *(refp = &store->prev); - } -doemit: - return EMITFOLD; /* Otherwise we have a conflict or simply no match. */ -} - -/* -- FLOAD forwarding and FSTORE elimination ----------------------------- */ - -/* Alias analysis for field access. -** Field loads are cheap and field stores are rare. -** Simple disambiguation based on field types is good enough. -*/ -static AliasRet aa_fref(jit_State *J, IRIns *refa, IRIns *refb) -{ - if (refa->op2 != refb->op2) - return ALIAS_NO; /* Different fields. */ - if (refa->op1 == refb->op1) - return ALIAS_MUST; /* Same field, same object. */ - else if (refa->op2 >= IRFL_TAB_META && refa->op2 <= IRFL_TAB_NOMM) - return aa_table(J, refa->op1, refb->op1); /* Disambiguate tables. */ - else - return ALIAS_MAY; /* Same field, possibly different object. */ -} - -/* Only the loads for mutable fields end up here (see FOLD). */ -TRef LJ_FASTCALL lj_opt_fwd_fload(jit_State *J) -{ - IRRef oref = fins->op1; /* Object reference. */ - IRRef fid = fins->op2; /* Field ID. */ - IRRef lim = oref; /* Search limit. */ - IRRef ref; - - /* Search for conflicting stores. */ - ref = J->chain[IR_FSTORE]; - while (ref > oref) { - IRIns *store = IR(ref); - switch (aa_fref(J, fins, IR(store->op1))) { - case ALIAS_NO: break; /* Continue searching. */ - case ALIAS_MAY: lim = ref; goto cselim; /* Limit search for load. */ - case ALIAS_MUST: return store->op2; /* Store forwarding. */ - } - ref = store->prev; - } - - /* No conflicting store: const-fold field loads from allocations. */ - if (fid == IRFL_TAB_META) { - IRIns *ir = IR(oref); - if (ir->o == IR_TNEW || ir->o == IR_TDUP) - return lj_ir_knull(J, IRT_TAB); - } - -cselim: - /* Try to find a matching load. Below the conflicting store, if any. */ - return lj_opt_cselim(J, lim); -} - -/* FSTORE elimination. */ -TRef LJ_FASTCALL lj_opt_dse_fstore(jit_State *J) -{ - IRRef fref = fins->op1; /* FREF reference. */ - IRRef val = fins->op2; /* Stored value reference. */ - IRIns *xr = IR(fref); - IRRef1 *refp = &J->chain[IR_FSTORE]; - IRRef ref = *refp; - while (ref > fref) { /* Search for redundant or conflicting stores. */ - IRIns *store = IR(ref); - switch (aa_fref(J, xr, IR(store->op1))) { - case ALIAS_NO: - break; /* Continue searching. */ - case ALIAS_MAY: - if (store->op2 != val) /* Conflict if the value is different. */ - goto doemit; - break; /* Otherwise continue searching. */ - case ALIAS_MUST: - if (store->op2 == val) /* Same value: drop the new store. */ - return DROPFOLD; - /* Different value: try to eliminate the redundant store. */ - if (ref > J->chain[IR_LOOP]) { /* Quick check to avoid crossing LOOP. */ - IRIns *ir; - /* Check for any intervening guards or conflicting loads. */ - for (ir = IR(J->cur.nins-1); ir > store; ir--) - if (irt_isguard(ir->t) || (ir->o == IR_FLOAD && ir->op2 == xr->op2)) - goto doemit; /* No elimination possible. */ - /* Remove redundant store from chain and replace with NOP. */ - *refp = store->prev; - store->o = IR_NOP; - store->t.irt = IRT_NIL; - store->op1 = store->op2 = 0; - store->prev = 0; - /* Now emit the new store instead. */ - } - goto doemit; - } - ref = *(refp = &store->prev); - } -doemit: - return EMITFOLD; /* Otherwise we have a conflict or simply no match. */ -} - -/* -- XLOAD forwarding and XSTORE elimination ----------------------------- */ - -/* Find cdata allocation for a reference (if any). */ -static IRIns *aa_findcnew(jit_State *J, IRIns *ir) -{ - while (ir->o == IR_ADD) { - if (!irref_isk(ir->op1)) { - IRIns *ir1 = aa_findcnew(J, IR(ir->op1)); /* Left-recursion. */ - if (ir1) return ir1; - } - if (irref_isk(ir->op2)) return NULL; - ir = IR(ir->op2); /* Flatten right-recursion. */ - } - return ir->o == IR_CNEW ? ir : NULL; -} - -/* Alias analysis for two cdata allocations. */ -static AliasRet aa_cnew(jit_State *J, IRIns *refa, IRIns *refb) -{ - IRIns *cnewa = aa_findcnew(J, refa); - IRIns *cnewb = aa_findcnew(J, refb); - if (cnewa == cnewb) - return ALIAS_MAY; /* Same allocation or neither is an allocation. */ - if (cnewa && cnewb) - return ALIAS_NO; /* Two different allocations never alias. */ - if (cnewb) { cnewa = cnewb; refb = refa; } - return aa_escape(J, cnewa, refb); -} - -/* Alias analysis for XLOAD/XSTORE. */ -static AliasRet aa_xref(jit_State *J, IRIns *refa, IRIns *xa, IRIns *xb) -{ - ptrdiff_t ofsa = 0, ofsb = 0; - IRIns *refb = IR(xb->op1); - IRIns *basea = refa, *baseb = refb; - if (refa == refb && irt_sametype(xa->t, xb->t)) - return ALIAS_MUST; /* Shortcut for same refs with identical type. */ - /* Offset-based disambiguation. */ - if (refa->o == IR_ADD && irref_isk(refa->op2)) { - IRIns *irk = IR(refa->op2); - basea = IR(refa->op1); - ofsa = (LJ_64 && irk->o == IR_KINT64) ? (ptrdiff_t)ir_k64(irk)->u64 : - (ptrdiff_t)irk->i; - } - if (refb->o == IR_ADD && irref_isk(refb->op2)) { - IRIns *irk = IR(refb->op2); - baseb = IR(refb->op1); - ofsb = (LJ_64 && irk->o == IR_KINT64) ? (ptrdiff_t)ir_k64(irk)->u64 : - (ptrdiff_t)irk->i; - } - /* Treat constified pointers like base vs. base+offset. */ - if (basea->o == IR_KPTR && baseb->o == IR_KPTR) { - ofsb += (char *)ir_kptr(baseb) - (char *)ir_kptr(basea); - baseb = basea; - } - /* This implements (very) strict aliasing rules. - ** Different types do NOT alias, except for differences in signedness. - ** Type punning through unions is allowed (but forces a reload). - */ - if (basea == baseb) { - ptrdiff_t sza = irt_size(xa->t), szb = irt_size(xb->t); - if (ofsa == ofsb) { - if (sza == szb && irt_isfp(xa->t) == irt_isfp(xb->t)) - return ALIAS_MUST; /* Same-sized, same-kind. May need to convert. */ - } else if (ofsa + sza <= ofsb || ofsb + szb <= ofsa) { - return ALIAS_NO; /* Non-overlapping base+-o1 vs. base+-o2. */ - } - /* NYI: extract, extend or reinterpret bits (int <-> fp). */ - return ALIAS_MAY; /* Overlapping or type punning: force reload. */ - } - if (!irt_sametype(xa->t, xb->t) && - !(irt_typerange(xa->t, IRT_I8, IRT_U64) && - ((xa->t.irt - IRT_I8) ^ (xb->t.irt - IRT_I8)) == 1)) - return ALIAS_NO; - /* NYI: structural disambiguation. */ - return aa_cnew(J, basea, baseb); /* Try to disambiguate allocations. */ -} - -/* Return CSEd reference or 0. Caveat: swaps lower ref to the right! */ -static IRRef reassoc_trycse(jit_State *J, IROp op, IRRef op1, IRRef op2) -{ - IRRef ref = J->chain[op]; - IRRef lim = op1; - if (op2 > lim) { lim = op2; op2 = op1; op1 = lim; } - while (ref > lim) { - IRIns *ir = IR(ref); - if (ir->op1 == op1 && ir->op2 == op2) - return ref; - ref = ir->prev; - } - return 0; -} - -/* Reassociate index references. */ -static IRRef reassoc_xref(jit_State *J, IRIns *ir) -{ - ptrdiff_t ofs = 0; - if (ir->o == IR_ADD && irref_isk(ir->op2)) { /* Get constant offset. */ - IRIns *irk = IR(ir->op2); - ofs = (LJ_64 && irk->o == IR_KINT64) ? (ptrdiff_t)ir_k64(irk)->u64 : - (ptrdiff_t)irk->i; - ir = IR(ir->op1); - } - if (ir->o == IR_ADD) { /* Add of base + index. */ - /* Index ref > base ref for loop-carried dependences. Only check op1. */ - IRIns *ir2, *ir1 = IR(ir->op1); - int32_t shift = 0; - IRRef idxref; - /* Determine index shifts. Don't bother with IR_MUL here. */ - if (ir1->o == IR_BSHL && irref_isk(ir1->op2)) - shift = IR(ir1->op2)->i; - else if (ir1->o == IR_ADD && ir1->op1 == ir1->op2) - shift = 1; - else - ir1 = ir; - ir2 = IR(ir1->op1); - /* A non-reassociated add. Must be a loop-carried dependence. */ - if (ir2->o == IR_ADD && irt_isint(ir2->t) && irref_isk(ir2->op2)) - ofs += (ptrdiff_t)IR(ir2->op2)->i << shift; - else - return 0; - idxref = ir2->op1; - /* Try to CSE the reassociated chain. Give up if not found. */ - if (ir1 != ir && - !(idxref = reassoc_trycse(J, ir1->o, idxref, - ir1->o == IR_BSHL ? ir1->op2 : idxref))) - return 0; - if (!(idxref = reassoc_trycse(J, IR_ADD, idxref, ir->op2))) - return 0; - if (ofs != 0) { - IRRef refk = tref_ref(lj_ir_kintp(J, ofs)); - if (!(idxref = reassoc_trycse(J, IR_ADD, idxref, refk))) - return 0; - } - return idxref; /* Success, found a reassociated index reference. Phew. */ - } - return 0; /* Failure. */ -} - -/* XLOAD forwarding. */ -TRef LJ_FASTCALL lj_opt_fwd_xload(jit_State *J) -{ - IRRef xref = fins->op1; - IRIns *xr = IR(xref); - IRRef lim = xref; /* Search limit. */ - IRRef ref; - - if ((fins->op2 & IRXLOAD_READONLY)) - goto cselim; - if ((fins->op2 & IRXLOAD_VOLATILE)) - goto doemit; - - /* Search for conflicting stores. */ - ref = J->chain[IR_XSTORE]; -retry: - if (J->chain[IR_CALLXS] > lim) lim = J->chain[IR_CALLXS]; - if (J->chain[IR_XBAR] > lim) lim = J->chain[IR_XBAR]; - while (ref > lim) { - IRIns *store = IR(ref); - switch (aa_xref(J, xr, fins, store)) { - case ALIAS_NO: break; /* Continue searching. */ - case ALIAS_MAY: lim = ref; goto cselim; /* Limit search for load. */ - case ALIAS_MUST: - /* Emit conversion if the loaded type doesn't match the forwarded type. */ - if (!irt_sametype(fins->t, IR(store->op2)->t)) { - IRType dt = irt_type(fins->t), st = irt_type(IR(store->op2)->t); - if (dt == IRT_I8 || dt == IRT_I16) { /* Trunc + sign-extend. */ - st = dt | IRCONV_SEXT; - dt = IRT_INT; - } else if (dt == IRT_U8 || dt == IRT_U16) { /* Trunc + zero-extend. */ - st = dt; - dt = IRT_INT; - } - fins->ot = IRT(IR_CONV, dt); - fins->op1 = store->op2; - fins->op2 = (dt<<5)|st; - return RETRYFOLD; - } - return store->op2; /* Store forwarding. */ - } - ref = store->prev; - } - -cselim: - /* Try to find a matching load. Below the conflicting store, if any. */ - ref = J->chain[IR_XLOAD]; - while (ref > lim) { - /* CSE for XLOAD depends on the type, but not on the IRXLOAD_* flags. */ - if (IR(ref)->op1 == xref && irt_sametype(IR(ref)->t, fins->t)) - return ref; - ref = IR(ref)->prev; - } - - /* Reassociate XLOAD across PHIs to handle a[i-1] forwarding case. */ - if (!(fins->op2 & IRXLOAD_READONLY) && J->chain[IR_LOOP] && - xref == fins->op1 && (xref = reassoc_xref(J, xr)) != 0) { - ref = J->chain[IR_XSTORE]; - while (ref > lim) /* Skip stores that have already been checked. */ - ref = IR(ref)->prev; - lim = xref; - xr = IR(xref); - goto retry; /* Retry with the reassociated reference. */ - } -doemit: - return EMITFOLD; -} - -/* XSTORE elimination. */ -TRef LJ_FASTCALL lj_opt_dse_xstore(jit_State *J) -{ - IRRef xref = fins->op1; - IRIns *xr = IR(xref); - IRRef lim = xref; /* Search limit. */ - IRRef val = fins->op2; /* Stored value reference. */ - IRRef1 *refp = &J->chain[IR_XSTORE]; - IRRef ref = *refp; - if (J->chain[IR_CALLXS] > lim) lim = J->chain[IR_CALLXS]; - if (J->chain[IR_XBAR] > lim) lim = J->chain[IR_XBAR]; - if (J->chain[IR_XSNEW] > lim) lim = J->chain[IR_XSNEW]; - while (ref > lim) { /* Search for redundant or conflicting stores. */ - IRIns *store = IR(ref); - switch (aa_xref(J, xr, fins, store)) { - case ALIAS_NO: - break; /* Continue searching. */ - case ALIAS_MAY: - if (store->op2 != val) /* Conflict if the value is different. */ - goto doemit; - break; /* Otherwise continue searching. */ - case ALIAS_MUST: - if (store->op2 == val) /* Same value: drop the new store. */ - return DROPFOLD; - /* Different value: try to eliminate the redundant store. */ - if (ref > J->chain[IR_LOOP]) { /* Quick check to avoid crossing LOOP. */ - IRIns *ir; - /* Check for any intervening guards or any XLOADs (no AA performed). */ - for (ir = IR(J->cur.nins-1); ir > store; ir--) - if (irt_isguard(ir->t) || ir->o == IR_XLOAD) - goto doemit; /* No elimination possible. */ - /* Remove redundant store from chain and replace with NOP. */ - *refp = store->prev; - store->o = IR_NOP; - store->t.irt = IRT_NIL; - store->op1 = store->op2 = 0; - store->prev = 0; - /* Now emit the new store instead. */ - } - goto doemit; - } - ref = *(refp = &store->prev); - } -doemit: - return EMITFOLD; /* Otherwise we have a conflict or simply no match. */ -} - -/* -- Forwarding of lj_tab_len -------------------------------------------- */ - -/* This is rather simplistic right now, but better than nothing. */ -TRef LJ_FASTCALL lj_opt_fwd_tab_len(jit_State *J) -{ - IRRef tab = fins->op1; /* Table reference. */ - IRRef lim = tab; /* Search limit. */ - IRRef ref; - - /* Any ASTORE is a conflict and limits the search. */ - if (J->chain[IR_ASTORE] > lim) lim = J->chain[IR_ASTORE]; - - /* Search for conflicting HSTORE with numeric key. */ - ref = J->chain[IR_HSTORE]; - while (ref > lim) { - IRIns *store = IR(ref); - IRIns *href = IR(store->op1); - IRIns *key = IR(href->op2); - if (irt_isnum(key->o == IR_KSLOT ? IR(key->op1)->t : key->t)) { - lim = ref; /* Conflicting store found, limits search for TLEN. */ - break; - } - ref = store->prev; - } - - /* Try to find a matching load. Below the conflicting store, if any. */ - return lj_opt_cselim(J, lim); -} - -/* -- ASTORE/HSTORE previous type analysis -------------------------------- */ - -/* Check whether the previous value for a table store is non-nil. -** This can be derived either from a previous store or from a previous -** load (because all loads from tables perform a type check). -** -** The result of the analysis can be used to avoid the metatable check -** and the guard against HREF returning niltv. Both of these are cheap, -** so let's not spend too much effort on the analysis. -** -** A result of 1 is exact: previous value CANNOT be nil. -** A result of 0 is inexact: previous value MAY be nil. -*/ -int lj_opt_fwd_wasnonnil(jit_State *J, IROpT loadop, IRRef xref) -{ - /* First check stores. */ - IRRef ref = J->chain[loadop+IRDELTA_L2S]; - while (ref > xref) { - IRIns *store = IR(ref); - if (store->op1 == xref) { /* Same xREF. */ - /* A nil store MAY alias, but a non-nil store MUST alias. */ - return !irt_isnil(store->t); - } else if (irt_isnil(store->t)) { /* Must check any nil store. */ - IRRef skref = IR(store->op1)->op2; - IRRef xkref = IR(xref)->op2; - /* Same key type MAY alias. Need ALOAD check due to multiple int types. */ - if (loadop == IR_ALOAD || irt_sametype(IR(skref)->t, IR(xkref)->t)) { - if (skref == xkref || !irref_isk(skref) || !irref_isk(xkref)) - return 0; /* A nil store with same const key or var key MAY alias. */ - /* Different const keys CANNOT alias. */ - } /* Different key types CANNOT alias. */ - } /* Other non-nil stores MAY alias. */ - ref = store->prev; - } - - /* Check loads since nothing could be derived from stores. */ - ref = J->chain[loadop]; - while (ref > xref) { - IRIns *load = IR(ref); - if (load->op1 == xref) { /* Same xREF. */ - /* A nil load MAY alias, but a non-nil load MUST alias. */ - return !irt_isnil(load->t); - } /* Other non-nil loads MAY alias. */ - ref = load->prev; - } - return 0; /* Nothing derived at all, previous value MAY be nil. */ -} - -/* ------------------------------------------------------------------------ */ - -#undef IR -#undef fins -#undef fleft -#undef fright - -#endif diff --git a/deps/luajit/src/lj_opt_narrow.c b/deps/luajit/src/lj_opt_narrow.c deleted file mode 100644 index 58b3763..0000000 --- a/deps/luajit/src/lj_opt_narrow.c +++ /dev/null @@ -1,656 +0,0 @@ -/* -** NARROW: Narrowing of numbers to integers (double to int32_t). -** STRIPOV: Stripping of overflow checks. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_narrow_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_bc.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_vm.h" -#include "lj_strscan.h" - -/* Rationale for narrowing optimizations: -** -** Lua has only a single number type and this is a FP double by default. -** Narrowing doubles to integers does not pay off for the interpreter on a -** current-generation x86/x64 machine. Most FP operations need the same -** amount of execution resources as their integer counterparts, except -** with slightly longer latencies. Longer latencies are a non-issue for -** the interpreter, since they are usually hidden by other overhead. -** -** The total CPU execution bandwidth is the sum of the bandwidth of the FP -** and the integer units, because they execute in parallel. The FP units -** have an equal or higher bandwidth than the integer units. Not using -** them means losing execution bandwidth. Moving work away from them to -** the already quite busy integer units is a losing proposition. -** -** The situation for JIT-compiled code is a bit different: the higher code -** density makes the extra latencies much more visible. Tight loops expose -** the latencies for updating the induction variables. Array indexing -** requires narrowing conversions with high latencies and additional -** guards (to check that the index is really an integer). And many common -** optimizations only work on integers. -** -** One solution would be speculative, eager narrowing of all number loads. -** This causes many problems, like losing -0 or the need to resolve type -** mismatches between traces. It also effectively forces the integer type -** to have overflow-checking semantics. This impedes many basic -** optimizations and requires adding overflow checks to all integer -** arithmetic operations (whereas FP arithmetics can do without). -** -** Always replacing an FP op with an integer op plus an overflow check is -** counter-productive on a current-generation super-scalar CPU. Although -** the overflow check branches are highly predictable, they will clog the -** execution port for the branch unit and tie up reorder buffers. This is -** turning a pure data-flow dependency into a different data-flow -** dependency (with slightly lower latency) *plus* a control dependency. -** In general, you don't want to do this since latencies due to data-flow -** dependencies can be well hidden by out-of-order execution. -** -** A better solution is to keep all numbers as FP values and only narrow -** when it's beneficial to do so. LuaJIT uses predictive narrowing for -** induction variables and demand-driven narrowing for index expressions, -** integer arguments and bit operations. Additionally it can eliminate or -** hoist most of the resulting overflow checks. Regular arithmetic -** computations are never narrowed to integers. -** -** The integer type in the IR has convenient wrap-around semantics and -** ignores overflow. Extra operations have been added for -** overflow-checking arithmetic (ADDOV/SUBOV) instead of an extra type. -** Apart from reducing overall complexity of the compiler, this also -** nicely solves the problem where you want to apply algebraic -** simplifications to ADD, but not to ADDOV. And the x86/x64 assembler can -** use lea instead of an add for integer ADD, but not for ADDOV (lea does -** not affect the flags, but it helps to avoid register moves). -** -** -** All of the above has to be reconsidered for architectures with slow FP -** operations or without a hardware FPU. The dual-number mode of LuaJIT -** addresses this issue. Arithmetic operations are performed on integers -** as far as possible and overflow checks are added as needed. -** -** This implies that narrowing for integer arguments and bit operations -** should also strip overflow checks, e.g. replace ADDOV with ADD. The -** original overflow guards are weak and can be eliminated by DCE, if -** there's no other use. -** -** A slight twist is that it's usually beneficial to use overflow-checked -** integer arithmetics if all inputs are already integers. This is the only -** change that affects the single-number mode, too. -*/ - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) -#define fins (&J->fold.ins) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -#define emitir_raw(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J)) - -/* -- Elimination of narrowing type conversions --------------------------- */ - -/* Narrowing of index expressions and bit operations is demand-driven. The -** trace recorder emits a narrowing type conversion (CONV.int.num or TOBIT) -** in all of these cases (e.g. array indexing or string indexing). FOLD -** already takes care of eliminating simple redundant conversions like -** CONV.int.num(CONV.num.int(x)) ==> x. -** -** But the surrounding code is FP-heavy and arithmetic operations are -** performed on FP numbers (for the single-number mode). Consider a common -** example such as 'x=t[i+1]', with 'i' already an integer (due to induction -** variable narrowing). The index expression would be recorded as -** CONV.int.num(ADD(CONV.num.int(i), 1)) -** which is clearly suboptimal. -** -** One can do better by recursively backpropagating the narrowing type -** conversion across FP arithmetic operations. This turns FP ops into -** their corresponding integer counterparts. Depending on the semantics of -** the conversion they also need to check for overflow. Currently only ADD -** and SUB are supported. -** -** The above example can be rewritten as -** ADDOV(CONV.int.num(CONV.num.int(i)), 1) -** and then into ADDOV(i, 1) after folding of the conversions. The original -** FP ops remain in the IR and are eliminated by DCE since all references to -** them are gone. -** -** [In dual-number mode the trace recorder already emits ADDOV etc., but -** this can be further reduced. See below.] -** -** Special care has to be taken to avoid narrowing across an operation -** which is potentially operating on non-integral operands. One obvious -** case is when an expression contains a non-integral constant, but ends -** up as an integer index at runtime (like t[x+1.5] with x=0.5). -** -** Operations with two non-constant operands illustrate a similar problem -** (like t[a+b] with a=1.5 and b=2.5). Backpropagation has to stop there, -** unless it can be proven that either operand is integral (e.g. by CSEing -** a previous conversion). As a not-so-obvious corollary this logic also -** applies for a whole expression tree (e.g. t[(a+1)+(b+1)]). -** -** Correctness of the transformation is guaranteed by avoiding to expand -** the tree by adding more conversions than the one we would need to emit -** if not backpropagating. TOBIT employs a more optimistic rule, because -** the conversion has special semantics, designed to make the life of the -** compiler writer easier. ;-) -** -** Using on-the-fly backpropagation of an expression tree doesn't work -** because it's unknown whether the transform is correct until the end. -** This either requires IR rollback and cache invalidation for every -** subtree or a two-pass algorithm. The former didn't work out too well, -** so the code now combines a recursive collector with a stack-based -** emitter. -** -** [A recursive backpropagation algorithm with backtracking, employing -** skip-list lookup and round-robin caching, emitting stack operations -** on-the-fly for a stack-based interpreter -- and all of that in a meager -** kilobyte? Yep, compilers are a great treasure chest. Throw away your -** textbooks and read the codebase of a compiler today!] -** -** There's another optimization opportunity for array indexing: it's -** always accompanied by an array bounds-check. The outermost overflow -** check may be delegated to the ABC operation. This works because ABC is -** an unsigned comparison and wrap-around due to overflow creates negative -** numbers. -** -** But this optimization is only valid for constants that cannot overflow -** an int32_t into the range of valid array indexes [0..2^27+1). A check -** for +-2^30 is safe since -2^31 - 2^30 wraps to 2^30 and 2^31-1 + 2^30 -** wraps to -2^30-1. -** -** It's also good enough in practice, since e.g. t[i+1] or t[i-10] are -** quite common. So the above example finally ends up as ADD(i, 1)! -** -** Later on, the assembler is able to fuse the whole array reference and -** the ADD into the memory operands of loads and other instructions. This -** is why LuaJIT is able to generate very pretty (and fast) machine code -** for array indexing. And that, my dear, concludes another story about -** one of the hidden secrets of LuaJIT ... -*/ - -/* Maximum backpropagation depth and maximum stack size. */ -#define NARROW_MAX_BACKPROP 100 -#define NARROW_MAX_STACK 256 - -/* The stack machine has a 32 bit instruction format: [IROpT | IRRef1] -** The lower 16 bits hold a reference (or 0). The upper 16 bits hold -** the IR opcode + type or one of the following special opcodes: -*/ -enum { - NARROW_REF, /* Push ref. */ - NARROW_CONV, /* Push conversion of ref. */ - NARROW_SEXT, /* Push sign-extension of ref. */ - NARROW_INT /* Push KINT ref. The next code holds an int32_t. */ -}; - -typedef uint32_t NarrowIns; - -#define NARROWINS(op, ref) (((op) << 16) + (ref)) -#define narrow_op(ins) ((IROpT)((ins) >> 16)) -#define narrow_ref(ins) ((IRRef1)(ins)) - -/* Context used for narrowing of type conversions. */ -typedef struct NarrowConv { - jit_State *J; /* JIT compiler state. */ - NarrowIns *sp; /* Current stack pointer. */ - NarrowIns *maxsp; /* Maximum stack pointer minus redzone. */ - int lim; /* Limit on the number of emitted conversions. */ - IRRef mode; /* Conversion mode (IRCONV_*). */ - IRType t; /* Destination type: IRT_INT or IRT_I64. */ - NarrowIns stack[NARROW_MAX_STACK]; /* Stack holding stack-machine code. */ -} NarrowConv; - -/* Lookup a reference in the backpropagation cache. */ -static BPropEntry *narrow_bpc_get(jit_State *J, IRRef1 key, IRRef mode) -{ - ptrdiff_t i; - for (i = 0; i < BPROP_SLOTS; i++) { - BPropEntry *bp = &J->bpropcache[i]; - /* Stronger checks are ok, too. */ - if (bp->key == key && bp->mode >= mode && - ((bp->mode ^ mode) & IRCONV_MODEMASK) == 0) - return bp; - } - return NULL; -} - -/* Add an entry to the backpropagation cache. */ -static void narrow_bpc_set(jit_State *J, IRRef1 key, IRRef1 val, IRRef mode) -{ - uint32_t slot = J->bpropslot; - BPropEntry *bp = &J->bpropcache[slot]; - J->bpropslot = (slot + 1) & (BPROP_SLOTS-1); - bp->key = key; - bp->val = val; - bp->mode = mode; -} - -/* Backpropagate overflow stripping. */ -static void narrow_stripov_backprop(NarrowConv *nc, IRRef ref, int depth) -{ - jit_State *J = nc->J; - IRIns *ir = IR(ref); - if (ir->o == IR_ADDOV || ir->o == IR_SUBOV || - (ir->o == IR_MULOV && (nc->mode & IRCONV_CONVMASK) == IRCONV_ANY)) { - BPropEntry *bp = narrow_bpc_get(nc->J, ref, IRCONV_TOBIT); - if (bp) { - ref = bp->val; - } else if (++depth < NARROW_MAX_BACKPROP && nc->sp < nc->maxsp) { - NarrowIns *savesp = nc->sp; - narrow_stripov_backprop(nc, ir->op1, depth); - if (nc->sp < nc->maxsp) { - narrow_stripov_backprop(nc, ir->op2, depth); - if (nc->sp < nc->maxsp) { - *nc->sp++ = NARROWINS(IRT(ir->o - IR_ADDOV + IR_ADD, IRT_INT), ref); - return; - } - } - nc->sp = savesp; /* Path too deep, need to backtrack. */ - } - } - *nc->sp++ = NARROWINS(NARROW_REF, ref); -} - -/* Backpropagate narrowing conversion. Return number of needed conversions. */ -static int narrow_conv_backprop(NarrowConv *nc, IRRef ref, int depth) -{ - jit_State *J = nc->J; - IRIns *ir = IR(ref); - IRRef cref; - - if (nc->sp >= nc->maxsp) return 10; /* Path too deep. */ - - /* Check the easy cases first. */ - if (ir->o == IR_CONV && (ir->op2 & IRCONV_SRCMASK) == IRT_INT) { - if ((nc->mode & IRCONV_CONVMASK) <= IRCONV_ANY) - narrow_stripov_backprop(nc, ir->op1, depth+1); - else - *nc->sp++ = NARROWINS(NARROW_REF, ir->op1); /* Undo conversion. */ - if (nc->t == IRT_I64) - *nc->sp++ = NARROWINS(NARROW_SEXT, 0); /* Sign-extend integer. */ - return 0; - } else if (ir->o == IR_KNUM) { /* Narrow FP constant. */ - lua_Number n = ir_knum(ir)->n; - if ((nc->mode & IRCONV_CONVMASK) == IRCONV_TOBIT) { - /* Allows a wider range of constants. */ - int64_t k64 = (int64_t)n; - if (n == (lua_Number)k64) { /* Only if const doesn't lose precision. */ - *nc->sp++ = NARROWINS(NARROW_INT, 0); - *nc->sp++ = (NarrowIns)k64; /* But always truncate to 32 bits. */ - return 0; - } - } else { - int32_t k = lj_num2int(n); - /* Only if constant is a small integer. */ - if (checki16(k) && n == (lua_Number)k) { - *nc->sp++ = NARROWINS(NARROW_INT, 0); - *nc->sp++ = (NarrowIns)k; - return 0; - } - } - return 10; /* Never narrow other FP constants (this is rare). */ - } - - /* Try to CSE the conversion. Stronger checks are ok, too. */ - cref = J->chain[fins->o]; - while (cref > ref) { - IRIns *cr = IR(cref); - if (cr->op1 == ref && - (fins->o == IR_TOBIT || - ((cr->op2 & IRCONV_MODEMASK) == (nc->mode & IRCONV_MODEMASK) && - irt_isguard(cr->t) >= irt_isguard(fins->t)))) { - *nc->sp++ = NARROWINS(NARROW_REF, cref); - return 0; /* Already there, no additional conversion needed. */ - } - cref = cr->prev; - } - - /* Backpropagate across ADD/SUB. */ - if (ir->o == IR_ADD || ir->o == IR_SUB) { - /* Try cache lookup first. */ - IRRef mode = nc->mode; - BPropEntry *bp; - /* Inner conversions need a stronger check. */ - if ((mode & IRCONV_CONVMASK) == IRCONV_INDEX && depth > 0) - mode += IRCONV_CHECK-IRCONV_INDEX; - bp = narrow_bpc_get(nc->J, (IRRef1)ref, mode); - if (bp) { - *nc->sp++ = NARROWINS(NARROW_REF, bp->val); - return 0; - } else if (nc->t == IRT_I64) { - /* Try sign-extending from an existing (checked) conversion to int. */ - mode = (IRT_INT<<5)|IRT_NUM|IRCONV_INDEX; - bp = narrow_bpc_get(nc->J, (IRRef1)ref, mode); - if (bp) { - *nc->sp++ = NARROWINS(NARROW_REF, bp->val); - *nc->sp++ = NARROWINS(NARROW_SEXT, 0); - return 0; - } - } - if (++depth < NARROW_MAX_BACKPROP && nc->sp < nc->maxsp) { - NarrowIns *savesp = nc->sp; - int count = narrow_conv_backprop(nc, ir->op1, depth); - count += narrow_conv_backprop(nc, ir->op2, depth); - if (count <= nc->lim) { /* Limit total number of conversions. */ - *nc->sp++ = NARROWINS(IRT(ir->o, nc->t), ref); - return count; - } - nc->sp = savesp; /* Too many conversions, need to backtrack. */ - } - } - - /* Otherwise add a conversion. */ - *nc->sp++ = NARROWINS(NARROW_CONV, ref); - return 1; -} - -/* Emit the conversions collected during backpropagation. */ -static IRRef narrow_conv_emit(jit_State *J, NarrowConv *nc) -{ - /* The fins fields must be saved now -- emitir() overwrites them. */ - IROpT guardot = irt_isguard(fins->t) ? IRTG(IR_ADDOV-IR_ADD, 0) : 0; - IROpT convot = fins->ot; - IRRef1 convop2 = fins->op2; - NarrowIns *next = nc->stack; /* List of instructions from backpropagation. */ - NarrowIns *last = nc->sp; - NarrowIns *sp = nc->stack; /* Recycle the stack to store operands. */ - while (next < last) { /* Simple stack machine to process the ins. list. */ - NarrowIns ref = *next++; - IROpT op = narrow_op(ref); - if (op == NARROW_REF) { - *sp++ = ref; - } else if (op == NARROW_CONV) { - *sp++ = emitir_raw(convot, ref, convop2); /* Raw emit avoids a loop. */ - } else if (op == NARROW_SEXT) { - lua_assert(sp >= nc->stack+1); - sp[-1] = emitir(IRT(IR_CONV, IRT_I64), sp[-1], - (IRT_I64<<5)|IRT_INT|IRCONV_SEXT); - } else if (op == NARROW_INT) { - lua_assert(next < last); - *sp++ = nc->t == IRT_I64 ? - lj_ir_kint64(J, (int64_t)(int32_t)*next++) : - lj_ir_kint(J, *next++); - } else { /* Regular IROpT. Pops two operands and pushes one result. */ - IRRef mode = nc->mode; - lua_assert(sp >= nc->stack+2); - sp--; - /* Omit some overflow checks for array indexing. See comments above. */ - if ((mode & IRCONV_CONVMASK) == IRCONV_INDEX) { - if (next == last && irref_isk(narrow_ref(sp[0])) && - (uint32_t)IR(narrow_ref(sp[0]))->i + 0x40000000u < 0x80000000u) - guardot = 0; - else /* Otherwise cache a stronger check. */ - mode += IRCONV_CHECK-IRCONV_INDEX; - } - sp[-1] = emitir(op+guardot, sp[-1], sp[0]); - /* Add to cache. */ - if (narrow_ref(ref)) - narrow_bpc_set(J, narrow_ref(ref), narrow_ref(sp[-1]), mode); - } - } - lua_assert(sp == nc->stack+1); - return nc->stack[0]; -} - -/* Narrow a type conversion of an arithmetic operation. */ -TRef LJ_FASTCALL lj_opt_narrow_convert(jit_State *J) -{ - if ((J->flags & JIT_F_OPT_NARROW)) { - NarrowConv nc; - nc.J = J; - nc.sp = nc.stack; - nc.maxsp = &nc.stack[NARROW_MAX_STACK-4]; - nc.t = irt_type(fins->t); - if (fins->o == IR_TOBIT) { - nc.mode = IRCONV_TOBIT; /* Used only in the backpropagation cache. */ - nc.lim = 2; /* TOBIT can use a more optimistic rule. */ - } else { - nc.mode = fins->op2; - nc.lim = 1; - } - if (narrow_conv_backprop(&nc, fins->op1, 0) <= nc.lim) - return narrow_conv_emit(J, &nc); - } - return NEXTFOLD; -} - -/* -- Narrowing of implicit conversions ----------------------------------- */ - -/* Recursively strip overflow checks. */ -static TRef narrow_stripov(jit_State *J, TRef tr, int lastop, IRRef mode) -{ - IRRef ref = tref_ref(tr); - IRIns *ir = IR(ref); - int op = ir->o; - if (op >= IR_ADDOV && op <= lastop) { - BPropEntry *bp = narrow_bpc_get(J, ref, mode); - if (bp) { - return TREF(bp->val, irt_t(IR(bp->val)->t)); - } else { - IRRef op1 = ir->op1, op2 = ir->op2; /* The IR may be reallocated. */ - op1 = narrow_stripov(J, op1, lastop, mode); - op2 = narrow_stripov(J, op2, lastop, mode); - tr = emitir(IRT(op - IR_ADDOV + IR_ADD, - ((mode & IRCONV_DSTMASK) >> IRCONV_DSH)), op1, op2); - narrow_bpc_set(J, ref, tref_ref(tr), mode); - } - } else if (LJ_64 && (mode & IRCONV_SEXT) && !irt_is64(ir->t)) { - tr = emitir(IRT(IR_CONV, IRT_INTP), tr, mode); - } - return tr; -} - -/* Narrow array index. */ -TRef LJ_FASTCALL lj_opt_narrow_index(jit_State *J, TRef tr) -{ - IRIns *ir; - lua_assert(tref_isnumber(tr)); - if (tref_isnum(tr)) /* Conversion may be narrowed, too. See above. */ - return emitir(IRTGI(IR_CONV), tr, IRCONV_INT_NUM|IRCONV_INDEX); - /* Omit some overflow checks for array indexing. See comments above. */ - ir = IR(tref_ref(tr)); - if ((ir->o == IR_ADDOV || ir->o == IR_SUBOV) && irref_isk(ir->op2) && - (uint32_t)IR(ir->op2)->i + 0x40000000u < 0x80000000u) - return emitir(IRTI(ir->o - IR_ADDOV + IR_ADD), ir->op1, ir->op2); - return tr; -} - -/* Narrow conversion to integer operand (overflow undefined). */ -TRef LJ_FASTCALL lj_opt_narrow_toint(jit_State *J, TRef tr) -{ - if (tref_isstr(tr)) - tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0); - if (tref_isnum(tr)) /* Conversion may be narrowed, too. See above. */ - return emitir(IRTI(IR_CONV), tr, IRCONV_INT_NUM|IRCONV_ANY); - if (!tref_isinteger(tr)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - /* - ** Undefined overflow semantics allow stripping of ADDOV, SUBOV and MULOV. - ** Use IRCONV_TOBIT for the cache entries, since the semantics are the same. - */ - return narrow_stripov(J, tr, IR_MULOV, (IRT_INT<<5)|IRT_INT|IRCONV_TOBIT); -} - -/* Narrow conversion to bitop operand (overflow wrapped). */ -TRef LJ_FASTCALL lj_opt_narrow_tobit(jit_State *J, TRef tr) -{ - if (tref_isstr(tr)) - tr = emitir(IRTG(IR_STRTO, IRT_NUM), tr, 0); - if (tref_isnum(tr)) /* Conversion may be narrowed, too. See above. */ - return emitir(IRTI(IR_TOBIT), tr, lj_ir_knum_tobit(J)); - if (!tref_isinteger(tr)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - /* - ** Wrapped overflow semantics allow stripping of ADDOV and SUBOV. - ** MULOV cannot be stripped due to precision widening. - */ - return narrow_stripov(J, tr, IR_SUBOV, (IRT_INT<<5)|IRT_INT|IRCONV_TOBIT); -} - -#if LJ_HASFFI -/* Narrow C array index (overflow undefined). */ -TRef LJ_FASTCALL lj_opt_narrow_cindex(jit_State *J, TRef tr) -{ - lua_assert(tref_isnumber(tr)); - if (tref_isnum(tr)) - return emitir(IRT(IR_CONV, IRT_INTP), tr, - (IRT_INTP<<5)|IRT_NUM|IRCONV_TRUNC|IRCONV_ANY); - /* Undefined overflow semantics allow stripping of ADDOV, SUBOV and MULOV. */ - return narrow_stripov(J, tr, IR_MULOV, - LJ_64 ? ((IRT_INTP<<5)|IRT_INT|IRCONV_SEXT) : - ((IRT_INTP<<5)|IRT_INT|IRCONV_TOBIT)); -} -#endif - -/* -- Narrowing of arithmetic operators ----------------------------------- */ - -/* Check whether a number fits into an int32_t (-0 is ok, too). */ -static int numisint(lua_Number n) -{ - return (n == (lua_Number)lj_num2int(n)); -} - -/* Narrowing of arithmetic operations. */ -TRef lj_opt_narrow_arith(jit_State *J, TRef rb, TRef rc, - TValue *vb, TValue *vc, IROp op) -{ - if (tref_isstr(rb)) { - rb = emitir(IRTG(IR_STRTO, IRT_NUM), rb, 0); - lj_strscan_num(strV(vb), vb); - } - if (tref_isstr(rc)) { - rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0); - lj_strscan_num(strV(vc), vc); - } - /* Must not narrow MUL in non-DUALNUM variant, because it loses -0. */ - if ((op >= IR_ADD && op <= (LJ_DUALNUM ? IR_MUL : IR_SUB)) && - tref_isinteger(rb) && tref_isinteger(rc) && - numisint(lj_vm_foldarith(numberVnum(vb), numberVnum(vc), - (int)op - (int)IR_ADD))) - return emitir(IRTGI((int)op - (int)IR_ADD + (int)IR_ADDOV), rb, rc); - if (!tref_isnum(rb)) rb = emitir(IRTN(IR_CONV), rb, IRCONV_NUM_INT); - if (!tref_isnum(rc)) rc = emitir(IRTN(IR_CONV), rc, IRCONV_NUM_INT); - return emitir(IRTN(op), rb, rc); -} - -/* Narrowing of unary minus operator. */ -TRef lj_opt_narrow_unm(jit_State *J, TRef rc, TValue *vc) -{ - if (tref_isstr(rc)) { - rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0); - lj_strscan_num(strV(vc), vc); - } - if (tref_isinteger(rc)) { - if ((uint32_t)numberVint(vc) != 0x80000000u) - return emitir(IRTGI(IR_SUBOV), lj_ir_kint(J, 0), rc); - rc = emitir(IRTN(IR_CONV), rc, IRCONV_NUM_INT); - } - return emitir(IRTN(IR_NEG), rc, lj_ir_knum_neg(J)); -} - -/* Narrowing of modulo operator. */ -TRef lj_opt_narrow_mod(jit_State *J, TRef rb, TRef rc, TValue *vc) -{ - TRef tmp; - if (tvisstr(vc) && !lj_strscan_num(strV(vc), vc)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - if ((LJ_DUALNUM || (J->flags & JIT_F_OPT_NARROW)) && - tref_isinteger(rb) && tref_isinteger(rc) && - (tvisint(vc) ? intV(vc) != 0 : !tviszero(vc))) { - emitir(IRTGI(IR_NE), rc, lj_ir_kint(J, 0)); - return emitir(IRTI(IR_MOD), rb, rc); - } - /* b % c ==> b - floor(b/c)*c */ - rb = lj_ir_tonum(J, rb); - rc = lj_ir_tonum(J, rc); - tmp = emitir(IRTN(IR_DIV), rb, rc); - tmp = emitir(IRTN(IR_FPMATH), tmp, IRFPM_FLOOR); - tmp = emitir(IRTN(IR_MUL), tmp, rc); - return emitir(IRTN(IR_SUB), rb, tmp); -} - -/* Narrowing of power operator or math.pow. */ -TRef lj_opt_narrow_pow(jit_State *J, TRef rb, TRef rc, TValue *vc) -{ - if (tvisstr(vc) && !lj_strscan_num(strV(vc), vc)) - lj_trace_err(J, LJ_TRERR_BADTYPE); - /* Narrowing must be unconditional to preserve (-x)^i semantics. */ - if (tvisint(vc) || numisint(numV(vc))) { - int checkrange = 0; - /* Split pow is faster for bigger exponents. But do this only for (+k)^i. */ - if (tref_isk(rb) && (int32_t)ir_knum(IR(tref_ref(rb)))->u32.hi >= 0) { - int32_t k = numberVint(vc); - if (!(k >= -65536 && k <= 65536)) goto split_pow; - checkrange = 1; - } - if (!tref_isinteger(rc)) { - if (tref_isstr(rc)) - rc = emitir(IRTG(IR_STRTO, IRT_NUM), rc, 0); - /* Guarded conversion to integer! */ - rc = emitir(IRTGI(IR_CONV), rc, IRCONV_INT_NUM|IRCONV_CHECK); - } - if (checkrange && !tref_isk(rc)) { /* Range guard: -65536 <= i <= 65536 */ - TRef tmp = emitir(IRTI(IR_ADD), rc, lj_ir_kint(J, 65536)); - emitir(IRTGI(IR_ULE), tmp, lj_ir_kint(J, 2*65536)); - } - return emitir(IRTN(IR_POW), rb, rc); - } -split_pow: - /* FOLD covers most cases, but some are easier to do here. */ - if (tref_isk(rb) && tvispone(ir_knum(IR(tref_ref(rb))))) - return rb; /* 1 ^ x ==> 1 */ - rc = lj_ir_tonum(J, rc); - if (tref_isk(rc) && ir_knum(IR(tref_ref(rc)))->n == 0.5) - return emitir(IRTN(IR_FPMATH), rb, IRFPM_SQRT); /* x ^ 0.5 ==> sqrt(x) */ - /* Split up b^c into exp2(c*log2(b)). Assembler may rejoin later. */ - rb = emitir(IRTN(IR_FPMATH), rb, IRFPM_LOG2); - rc = emitir(IRTN(IR_MUL), rb, rc); - return emitir(IRTN(IR_FPMATH), rc, IRFPM_EXP2); -} - -/* -- Predictive narrowing of induction variables ------------------------- */ - -/* Narrow a single runtime value. */ -static int narrow_forl(jit_State *J, cTValue *o) -{ - if (tvisint(o)) return 1; - if (LJ_DUALNUM || (J->flags & JIT_F_OPT_NARROW)) return numisint(numV(o)); - return 0; -} - -/* Narrow the FORL index type by looking at the runtime values. */ -IRType lj_opt_narrow_forl(jit_State *J, cTValue *tv) -{ - lua_assert(tvisnumber(&tv[FORL_IDX]) && - tvisnumber(&tv[FORL_STOP]) && - tvisnumber(&tv[FORL_STEP])); - /* Narrow only if the runtime values of start/stop/step are all integers. */ - if (narrow_forl(J, &tv[FORL_IDX]) && - narrow_forl(J, &tv[FORL_STOP]) && - narrow_forl(J, &tv[FORL_STEP])) { - /* And if the loop index can't possibly overflow. */ - lua_Number step = numberVnum(&tv[FORL_STEP]); - lua_Number sum = numberVnum(&tv[FORL_STOP]) + step; - if (0 <= step ? (sum <= 2147483647.0) : (sum >= -2147483648.0)) - return IRT_INT; - } - return IRT_NUM; -} - -#undef IR -#undef fins -#undef emitir -#undef emitir_raw - -#endif diff --git a/deps/luajit/src/lj_opt_sink.c b/deps/luajit/src/lj_opt_sink.c deleted file mode 100644 index a98e9df..0000000 --- a/deps/luajit/src/lj_opt_sink.c +++ /dev/null @@ -1,245 +0,0 @@ -/* -** SINK: Allocation Sinking and Store Sinking. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_sink_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" -#include "lj_target.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Check whether the store ref points to an eligible allocation. */ -static IRIns *sink_checkalloc(jit_State *J, IRIns *irs) -{ - IRIns *ir = IR(irs->op1); - if (!irref_isk(ir->op2)) - return NULL; /* Non-constant key. */ - if (ir->o == IR_HREFK || ir->o == IR_AREF) - ir = IR(ir->op1); - else if (!(ir->o == IR_HREF || ir->o == IR_NEWREF || - ir->o == IR_FREF || ir->o == IR_ADD)) - return NULL; /* Unhandled reference type (for XSTORE). */ - ir = IR(ir->op1); - if (!(ir->o == IR_TNEW || ir->o == IR_TDUP || ir->o == IR_CNEW)) - return NULL; /* Not an allocation. */ - return ir; /* Return allocation. */ -} - -/* Recursively check whether a value depends on a PHI. */ -static int sink_phidep(jit_State *J, IRRef ref) -{ - IRIns *ir = IR(ref); - if (irt_isphi(ir->t)) return 1; - if (ir->op1 >= REF_FIRST && sink_phidep(J, ir->op1)) return 1; - if (ir->op2 >= REF_FIRST && sink_phidep(J, ir->op2)) return 1; - return 0; -} - -/* Check whether a value is a sinkable PHI or loop-invariant. */ -static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref) -{ - if (ref >= REF_FIRST) { - IRIns *ir = IR(ref); - if (irt_isphi(ir->t) || (ir->o == IR_CONV && ir->op2 == IRCONV_NUM_INT && - irt_isphi(IR(ir->op1)->t))) { - ira->prev++; - return 1; /* Sinkable PHI. */ - } - /* Otherwise the value must be loop-invariant. */ - return ref < J->loopref && !sink_phidep(J, ref); - } - return 1; /* Constant (non-PHI). */ -} - -/* Mark non-sinkable allocations using single-pass backward propagation. -** -** Roots for the marking process are: -** - Some PHIs or snapshots (see below). -** - Non-PHI, non-constant values stored to PHI allocations. -** - All guards. -** - Any remaining loads not eliminated by store-to-load forwarding. -** - Stores with non-constant keys. -** - All stored values. -*/ -static void sink_mark_ins(jit_State *J) -{ - IRIns *ir, *irlast = IR(J->cur.nins-1); - for (ir = irlast ; ; ir--) { - switch (ir->o) { - case IR_BASE: - return; /* Finished. */ - case IR_CALLL: /* IRCALL_lj_tab_len */ - case IR_ALOAD: case IR_HLOAD: case IR_XLOAD: case IR_TBAR: - irt_setmark(IR(ir->op1)->t); /* Mark ref for remaining loads. */ - break; - case IR_FLOAD: - if (irt_ismarked(ir->t) || ir->op2 == IRFL_TAB_META) - irt_setmark(IR(ir->op1)->t); /* Mark table for remaining loads. */ - break; - case IR_ASTORE: case IR_HSTORE: case IR_FSTORE: case IR_XSTORE: { - IRIns *ira = sink_checkalloc(J, ir); - if (!ira || (irt_isphi(ira->t) && !sink_checkphi(J, ira, ir->op2))) - irt_setmark(IR(ir->op1)->t); /* Mark ineligible ref. */ - irt_setmark(IR(ir->op2)->t); /* Mark stored value. */ - break; - } -#if LJ_HASFFI - case IR_CNEWI: - if (irt_isphi(ir->t) && - (!sink_checkphi(J, ir, ir->op2) || - (LJ_32 && ir+1 < irlast && (ir+1)->o == IR_HIOP && - !sink_checkphi(J, ir, (ir+1)->op2)))) - irt_setmark(ir->t); /* Mark ineligible allocation. */ - /* fallthrough */ -#endif - case IR_USTORE: - irt_setmark(IR(ir->op2)->t); /* Mark stored value. */ - break; -#if LJ_HASFFI - case IR_CALLXS: -#endif - case IR_CALLS: - irt_setmark(IR(ir->op1)->t); /* Mark (potentially) stored values. */ - break; - case IR_PHI: { - IRIns *irl = IR(ir->op1), *irr = IR(ir->op2); - irl->prev = irr->prev = 0; /* Clear PHI value counts. */ - if (irl->o == irr->o && - (irl->o == IR_TNEW || irl->o == IR_TDUP || - (LJ_HASFFI && (irl->o == IR_CNEW || irl->o == IR_CNEWI)))) - break; - irt_setmark(irl->t); - irt_setmark(irr->t); - break; - } - default: - if (irt_ismarked(ir->t) || irt_isguard(ir->t)) { /* Propagate mark. */ - if (ir->op1 >= REF_FIRST) irt_setmark(IR(ir->op1)->t); - if (ir->op2 >= REF_FIRST) irt_setmark(IR(ir->op2)->t); - } - break; - } - } -} - -/* Mark all instructions referenced by a snapshot. */ -static void sink_mark_snap(jit_State *J, SnapShot *snap) -{ - SnapEntry *map = &J->cur.snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - IRRef ref = snap_ref(map[n]); - if (!irref_isk(ref)) - irt_setmark(IR(ref)->t); - } -} - -/* Iteratively remark PHI refs with differing marks or PHI value counts. */ -static void sink_remark_phi(jit_State *J) -{ - IRIns *ir; - int remark; - do { - remark = 0; - for (ir = IR(J->cur.nins-1); ir->o == IR_PHI; ir--) { - IRIns *irl = IR(ir->op1), *irr = IR(ir->op2); - if (((irl->t.irt ^ irr->t.irt) & IRT_MARK)) - remark = 1; - else if (irl->prev == irr->prev) - continue; - irt_setmark(IR(ir->op1)->t); - irt_setmark(IR(ir->op2)->t); - } - } while (remark); -} - -/* Sweep instructions and tag sunken allocations and stores. */ -static void sink_sweep_ins(jit_State *J) -{ - IRIns *ir, *irfirst = IR(J->cur.nk); - for (ir = IR(J->cur.nins-1) ; ir >= irfirst; ir--) { - switch (ir->o) { - case IR_ASTORE: case IR_HSTORE: case IR_FSTORE: case IR_XSTORE: { - IRIns *ira = sink_checkalloc(J, ir); - if (ira && !irt_ismarked(ira->t)) { - int delta = (int)(ir - ira); - ir->prev = REGSP(RID_SINK, delta > 255 ? 255 : delta); - } else { - ir->prev = REGSP_INIT; - } - break; - } - case IR_NEWREF: - if (!irt_ismarked(IR(ir->op1)->t)) { - ir->prev = REGSP(RID_SINK, 0); - } else { - irt_clearmark(ir->t); - ir->prev = REGSP_INIT; - } - break; -#if LJ_HASFFI - case IR_CNEW: case IR_CNEWI: -#endif - case IR_TNEW: case IR_TDUP: - if (!irt_ismarked(ir->t)) { - ir->t.irt &= ~IRT_GUARD; - ir->prev = REGSP(RID_SINK, 0); - J->cur.sinktags = 1; /* Signal present SINK tags to assembler. */ - } else { - irt_clearmark(ir->t); - ir->prev = REGSP_INIT; - } - break; - case IR_PHI: { - IRIns *ira = IR(ir->op2); - if (!irt_ismarked(ira->t) && - (ira->o == IR_TNEW || ira->o == IR_TDUP || - (LJ_HASFFI && (ira->o == IR_CNEW || ira->o == IR_CNEWI)))) { - ir->prev = REGSP(RID_SINK, 0); - } else { - ir->prev = REGSP_INIT; - } - break; - } - default: - irt_clearmark(ir->t); - ir->prev = REGSP_INIT; - break; - } - } -} - -/* Allocation sinking and store sinking. -** -** 1. Mark all non-sinkable allocations. -** 2. Then sink all remaining allocations and the related stores. -*/ -void lj_opt_sink(jit_State *J) -{ - const uint32_t need = (JIT_F_OPT_SINK|JIT_F_OPT_FWD| - JIT_F_OPT_DCE|JIT_F_OPT_CSE|JIT_F_OPT_FOLD); - if ((J->flags & need) == need && - (J->chain[IR_TNEW] || J->chain[IR_TDUP] || - (LJ_HASFFI && (J->chain[IR_CNEW] || J->chain[IR_CNEWI])))) { - if (!J->loopref) - sink_mark_snap(J, &J->cur.snap[J->cur.nsnap-1]); - sink_mark_ins(J); - if (J->loopref) - sink_remark_phi(J); - sink_sweep_ins(J); - } -} - -#undef IR - -#endif diff --git a/deps/luajit/src/lj_opt_split.c b/deps/luajit/src/lj_opt_split.c deleted file mode 100644 index 1cee509..0000000 --- a/deps/luajit/src/lj_opt_split.c +++ /dev/null @@ -1,731 +0,0 @@ -/* -** SPLIT: Split 64 bit IR instructions into 32 bit IR instructions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_opt_split_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT && (LJ_SOFTFP || (LJ_32 && LJ_HASFFI)) - -#include "lj_err.h" -#include "lj_str.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_vm.h" - -/* SPLIT pass: -** -** This pass splits up 64 bit IR instructions into multiple 32 bit IR -** instructions. It's only active for soft-float targets or for 32 bit CPUs -** which lack native 64 bit integer operations (the FFI is currently the -** only emitter for 64 bit integer instructions). -** -** Splitting the IR in a separate pass keeps each 32 bit IR assembler -** backend simple. Only a small amount of extra functionality needs to be -** implemented. This is much easier than adding support for allocating -** register pairs to each backend (believe me, I tried). A few simple, but -** important optimizations can be performed by the SPLIT pass, which would -** be tedious to do in the backend. -** -** The basic idea is to replace each 64 bit IR instruction with its 32 bit -** equivalent plus an extra HIOP instruction. The splitted IR is not passed -** through FOLD or any other optimizations, so each HIOP is guaranteed to -** immediately follow it's counterpart. The actual functionality of HIOP is -** inferred from the previous instruction. -** -** The operands of HIOP hold the hiword input references. The output of HIOP -** is the hiword output reference, which is also used to hold the hiword -** register or spill slot information. The register allocator treats this -** instruction independently of any other instruction, which improves code -** quality compared to using fixed register pairs. -** -** It's easier to split up some instructions into two regular 32 bit -** instructions. E.g. XLOAD is split up into two XLOADs with two different -** addresses. Obviously 64 bit constants need to be split up into two 32 bit -** constants, too. Some hiword instructions can be entirely omitted, e.g. -** when zero-extending a 32 bit value to 64 bits. 64 bit arguments for calls -** are split up into two 32 bit arguments each. -** -** On soft-float targets, floating-point instructions are directly converted -** to soft-float calls by the SPLIT pass (except for comparisons and MIN/MAX). -** HIOP for number results has the type IRT_SOFTFP ("sfp" in -jdump). -** -** Here's the IR and x64 machine code for 'x.b = x.a + 1' for a struct with -** two int64_t fields: -** -** 0100 p32 ADD base +8 -** 0101 i64 XLOAD 0100 -** 0102 i64 ADD 0101 +1 -** 0103 p32 ADD base +16 -** 0104 i64 XSTORE 0103 0102 -** -** mov rax, [esi+0x8] -** add rax, +0x01 -** mov [esi+0x10], rax -** -** Here's the transformed IR and the x86 machine code after the SPLIT pass: -** -** 0100 p32 ADD base +8 -** 0101 int XLOAD 0100 -** 0102 p32 ADD base +12 -** 0103 int XLOAD 0102 -** 0104 int ADD 0101 +1 -** 0105 int HIOP 0103 +0 -** 0106 p32 ADD base +16 -** 0107 int XSTORE 0106 0104 -** 0108 int HIOP 0106 0105 -** -** mov eax, [esi+0x8] -** mov ecx, [esi+0xc] -** add eax, +0x01 -** adc ecx, +0x00 -** mov [esi+0x10], eax -** mov [esi+0x14], ecx -** -** You may notice the reassociated hiword address computation, which is -** later fused into the mov operands by the assembler. -*/ - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Directly emit the transformed IR without updating chains etc. */ -static IRRef split_emit(jit_State *J, uint16_t ot, IRRef1 op1, IRRef1 op2) -{ - IRRef nref = lj_ir_nextins(J); - IRIns *ir = IR(nref); - ir->ot = ot; - ir->op1 = op1; - ir->op2 = op2; - return nref; -} - -#if LJ_SOFTFP -/* Emit a (checked) number to integer conversion. */ -static IRRef split_num2int(jit_State *J, IRRef lo, IRRef hi, int check) -{ - IRRef tmp, res; -#if LJ_LE - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), lo, hi); -#else - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hi, lo); -#endif - res = split_emit(J, IRTI(IR_CALLN), tmp, IRCALL_softfp_d2i); - if (check) { - tmp = split_emit(J, IRTI(IR_CALLN), res, IRCALL_softfp_i2d); - split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp); - split_emit(J, IRTGI(IR_EQ), tmp, lo); - split_emit(J, IRTG(IR_HIOP, IRT_SOFTFP), tmp+1, hi); - } - return res; -} - -/* Emit a CALLN with one split 64 bit argument. */ -static IRRef split_call_l(jit_State *J, IRRef1 *hisubst, IRIns *oir, - IRIns *ir, IRCallID id) -{ - IRRef tmp, op1 = ir->op1; - J->cur.nins--; -#if LJ_LE - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), oir[op1].prev, hisubst[op1]); -#else - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hisubst[op1], oir[op1].prev); -#endif - ir->prev = tmp = split_emit(J, IRTI(IR_CALLN), tmp, id); - return split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp); -} - -/* Emit a CALLN with one split 64 bit argument and a 32 bit argument. */ -static IRRef split_call_li(jit_State *J, IRRef1 *hisubst, IRIns *oir, - IRIns *ir, IRCallID id) -{ - IRRef tmp, op1 = ir->op1, op2 = ir->op2; - J->cur.nins--; -#if LJ_LE - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), oir[op1].prev, hisubst[op1]); -#else - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hisubst[op1], oir[op1].prev); -#endif - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, oir[op2].prev); - ir->prev = tmp = split_emit(J, IRTI(IR_CALLN), tmp, id); - return split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp); -} -#endif - -/* Emit a CALLN with two split 64 bit arguments. */ -static IRRef split_call_ll(jit_State *J, IRRef1 *hisubst, IRIns *oir, - IRIns *ir, IRCallID id) -{ - IRRef tmp, op1 = ir->op1, op2 = ir->op2; - J->cur.nins--; -#if LJ_LE - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), oir[op1].prev, hisubst[op1]); - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, oir[op2].prev); - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, hisubst[op2]); -#else - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hisubst[op1], oir[op1].prev); - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, hisubst[op2]); - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, oir[op2].prev); -#endif - ir->prev = tmp = split_emit(J, IRTI(IR_CALLN), tmp, id); - return split_emit(J, - IRT(IR_HIOP, (LJ_SOFTFP && irt_isnum(ir->t)) ? IRT_SOFTFP : IRT_INT), - tmp, tmp); -} - -/* Get a pointer to the other 32 bit word (LE: hiword, BE: loword). */ -static IRRef split_ptr(jit_State *J, IRIns *oir, IRRef ref) -{ - IRRef nref = oir[ref].prev; - IRIns *ir = IR(nref); - int32_t ofs = 4; - if (ir->o == IR_KPTR) - return lj_ir_kptr(J, (char *)ir_kptr(ir) + ofs); - if (ir->o == IR_ADD && irref_isk(ir->op2) && !irt_isphi(oir[ref].t)) { - /* Reassociate address. */ - ofs += IR(ir->op2)->i; - nref = ir->op1; - if (ofs == 0) return nref; - } - return split_emit(J, IRTI(IR_ADD), nref, lj_ir_kint(J, ofs)); -} - -/* Substitute references of a snapshot. */ -static void split_subst_snap(jit_State *J, SnapShot *snap, IRIns *oir) -{ - SnapEntry *map = &J->cur.snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - IRIns *ir = &oir[snap_ref(sn)]; - if (!(LJ_SOFTFP && (sn & SNAP_SOFTFPNUM) && irref_isk(snap_ref(sn)))) - map[n] = ((sn & 0xffff0000) | ir->prev); - } -} - -/* Transform the old IR to the new IR. */ -static void split_ir(jit_State *J) -{ - IRRef nins = J->cur.nins, nk = J->cur.nk; - MSize irlen = nins - nk; - MSize need = (irlen+1)*(sizeof(IRIns) + sizeof(IRRef1)); - IRIns *oir = (IRIns *)lj_str_needbuf(J->L, &G(J->L)->tmpbuf, need); - IRRef1 *hisubst; - IRRef ref, snref; - SnapShot *snap; - - /* Copy old IR to buffer. */ - memcpy(oir, IR(nk), irlen*sizeof(IRIns)); - /* Bias hiword substitution table and old IR. Loword kept in field prev. */ - hisubst = (IRRef1 *)&oir[irlen] - nk; - oir -= nk; - - /* Remove all IR instructions, but retain IR constants. */ - J->cur.nins = REF_FIRST; - J->loopref = 0; - - /* Process constants and fixed references. */ - for (ref = nk; ref <= REF_BASE; ref++) { - IRIns *ir = &oir[ref]; - if ((LJ_SOFTFP && ir->o == IR_KNUM) || ir->o == IR_KINT64) { - /* Split up 64 bit constant. */ - TValue tv = *ir_k64(ir); - ir->prev = lj_ir_kint(J, (int32_t)tv.u32.lo); - hisubst[ref] = lj_ir_kint(J, (int32_t)tv.u32.hi); - } else { - ir->prev = ref; /* Identity substitution for loword. */ - hisubst[ref] = 0; - } - } - - /* Process old IR instructions. */ - snap = J->cur.snap; - snref = snap->ref; - for (ref = REF_FIRST; ref < nins; ref++) { - IRIns *ir = &oir[ref]; - IRRef nref = lj_ir_nextins(J); - IRIns *nir = IR(nref); - IRRef hi = 0; - - if (ref >= snref) { - snap->ref = nref; - split_subst_snap(J, snap++, oir); - snref = snap < &J->cur.snap[J->cur.nsnap] ? snap->ref : ~(IRRef)0; - } - - /* Copy-substitute old instruction to new instruction. */ - nir->op1 = ir->op1 < nk ? ir->op1 : oir[ir->op1].prev; - nir->op2 = ir->op2 < nk ? ir->op2 : oir[ir->op2].prev; - ir->prev = nref; /* Loword substitution. */ - nir->o = ir->o; - nir->t.irt = ir->t.irt & ~(IRT_MARK|IRT_ISPHI); - hisubst[ref] = 0; - - /* Split 64 bit instructions. */ -#if LJ_SOFTFP - if (irt_isnum(ir->t)) { - nir->t.irt = IRT_INT | (nir->t.irt & IRT_GUARD); /* Turn into INT op. */ - /* Note: hi ref = lo ref + 1! Required for SNAP_SOFTFPNUM logic. */ - switch (ir->o) { - case IR_ADD: - hi = split_call_ll(J, hisubst, oir, ir, IRCALL_softfp_add); - break; - case IR_SUB: - hi = split_call_ll(J, hisubst, oir, ir, IRCALL_softfp_sub); - break; - case IR_MUL: - hi = split_call_ll(J, hisubst, oir, ir, IRCALL_softfp_mul); - break; - case IR_DIV: - hi = split_call_ll(J, hisubst, oir, ir, IRCALL_softfp_div); - break; - case IR_POW: - hi = split_call_li(J, hisubst, oir, ir, IRCALL_lj_vm_powi); - break; - case IR_FPMATH: - /* Try to rejoin pow from EXP2, MUL and LOG2. */ - if (nir->op2 == IRFPM_EXP2 && nir->op1 > J->loopref) { - IRIns *irp = IR(nir->op1); - if (irp->o == IR_CALLN && irp->op2 == IRCALL_softfp_mul) { - IRIns *irm4 = IR(irp->op1); - IRIns *irm3 = IR(irm4->op1); - IRIns *irm12 = IR(irm3->op1); - IRIns *irl1 = IR(irm12->op1); - if (irm12->op1 > J->loopref && irl1->o == IR_CALLN && - irl1->op2 == IRCALL_lj_vm_log2) { - IRRef tmp = irl1->op1; /* Recycle first two args from LOG2. */ - IRRef arg3 = irm3->op2, arg4 = irm4->op2; - J->cur.nins--; - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, arg3); - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), tmp, arg4); - ir->prev = tmp = split_emit(J, IRTI(IR_CALLN), tmp, IRCALL_pow); - hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp); - break; - } - } - } - hi = split_call_l(J, hisubst, oir, ir, IRCALL_lj_vm_floor + ir->op2); - break; - case IR_ATAN2: - hi = split_call_ll(J, hisubst, oir, ir, IRCALL_atan2); - break; - case IR_LDEXP: - hi = split_call_li(J, hisubst, oir, ir, IRCALL_ldexp); - break; - case IR_NEG: case IR_ABS: - nir->o = IR_CONV; /* Pass through loword. */ - nir->op2 = (IRT_INT << 5) | IRT_INT; - hi = split_emit(J, IRT(ir->o == IR_NEG ? IR_BXOR : IR_BAND, IRT_SOFTFP), - hisubst[ir->op1], hisubst[ir->op2]); - break; - case IR_SLOAD: - if ((nir->op2 & IRSLOAD_CONVERT)) { /* Convert from int to number. */ - nir->op2 &= ~IRSLOAD_CONVERT; - ir->prev = nref = split_emit(J, IRTI(IR_CALLN), nref, - IRCALL_softfp_i2d); - hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nref, nref); - break; - } - /* fallthrough */ - case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: - case IR_STRTO: - hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nref, nref); - break; - case IR_XLOAD: { - IRIns inslo = *nir; /* Save/undo the emit of the lo XLOAD. */ - J->cur.nins--; - hi = split_ptr(J, oir, ir->op1); /* Insert the hiref ADD. */ - nref = lj_ir_nextins(J); - nir = IR(nref); - *nir = inslo; /* Re-emit lo XLOAD immediately before hi XLOAD. */ - hi = split_emit(J, IRT(IR_XLOAD, IRT_SOFTFP), hi, ir->op2); -#if LJ_LE - ir->prev = nref; -#else - ir->prev = hi; hi = nref; -#endif - break; - } - case IR_ASTORE: case IR_HSTORE: case IR_USTORE: case IR_XSTORE: - split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nir->op1, hisubst[ir->op2]); - break; - case IR_CONV: { /* Conversion to number. Others handled below. */ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); - UNUSED(st); -#if LJ_32 && LJ_HASFFI - if (st == IRT_I64 || st == IRT_U64) { - hi = split_call_l(J, hisubst, oir, ir, - st == IRT_I64 ? IRCALL_fp64_l2d : IRCALL_fp64_ul2d); - break; - } -#endif - lua_assert(st == IRT_INT || - (LJ_32 && LJ_HASFFI && (st == IRT_U32 || st == IRT_FLOAT))); - nir->o = IR_CALLN; -#if LJ_32 && LJ_HASFFI - nir->op2 = st == IRT_INT ? IRCALL_softfp_i2d : - st == IRT_FLOAT ? IRCALL_softfp_f2d : - IRCALL_softfp_ui2d; -#else - nir->op2 = IRCALL_softfp_i2d; -#endif - hi = split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nref, nref); - break; - } - case IR_CALLN: - case IR_CALLL: - case IR_CALLS: - case IR_CALLXS: - goto split_call; - case IR_PHI: - if (nir->op1 == nir->op2) - J->cur.nins--; /* Drop useless PHIs. */ - if (hisubst[ir->op1] != hisubst[ir->op2]) - split_emit(J, IRT(IR_PHI, IRT_SOFTFP), - hisubst[ir->op1], hisubst[ir->op2]); - break; - case IR_HIOP: - J->cur.nins--; /* Drop joining HIOP. */ - ir->prev = nir->op1; - hi = nir->op2; - break; - default: - lua_assert(ir->o <= IR_NE || ir->o == IR_MIN || ir->o == IR_MAX); - hi = split_emit(J, IRTG(IR_HIOP, IRT_SOFTFP), - hisubst[ir->op1], hisubst[ir->op2]); - break; - } - } else -#endif -#if LJ_32 && LJ_HASFFI - if (irt_isint64(ir->t)) { - IRRef hiref = hisubst[ir->op1]; - nir->t.irt = IRT_INT | (nir->t.irt & IRT_GUARD); /* Turn into INT op. */ - switch (ir->o) { - case IR_ADD: - case IR_SUB: - /* Use plain op for hiword if loword cannot produce a carry/borrow. */ - if (irref_isk(nir->op2) && IR(nir->op2)->i == 0) { - ir->prev = nir->op1; /* Pass through loword. */ - nir->op1 = hiref; nir->op2 = hisubst[ir->op2]; - hi = nref; - break; - } - /* fallthrough */ - case IR_NEG: - hi = split_emit(J, IRTI(IR_HIOP), hiref, hisubst[ir->op2]); - break; - case IR_MUL: - hi = split_call_ll(J, hisubst, oir, ir, IRCALL_lj_carith_mul64); - break; - case IR_DIV: - hi = split_call_ll(J, hisubst, oir, ir, - irt_isi64(ir->t) ? IRCALL_lj_carith_divi64 : - IRCALL_lj_carith_divu64); - break; - case IR_MOD: - hi = split_call_ll(J, hisubst, oir, ir, - irt_isi64(ir->t) ? IRCALL_lj_carith_modi64 : - IRCALL_lj_carith_modu64); - break; - case IR_POW: - hi = split_call_ll(J, hisubst, oir, ir, - irt_isi64(ir->t) ? IRCALL_lj_carith_powi64 : - IRCALL_lj_carith_powu64); - break; - case IR_FLOAD: - lua_assert(ir->op2 == IRFL_CDATA_INT64); - hi = split_emit(J, IRTI(IR_FLOAD), nir->op1, IRFL_CDATA_INT64_4); -#if LJ_BE - ir->prev = hi; hi = nref; -#endif - break; - case IR_XLOAD: - hi = split_emit(J, IRTI(IR_XLOAD), split_ptr(J, oir, ir->op1), ir->op2); -#if LJ_BE - ir->prev = hi; hi = nref; -#endif - break; - case IR_XSTORE: - split_emit(J, IRTI(IR_HIOP), nir->op1, hisubst[ir->op2]); - break; - case IR_CONV: { /* Conversion to 64 bit integer. Others handled below. */ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); -#if LJ_SOFTFP - if (st == IRT_NUM) { /* NUM to 64 bit int conv. */ - hi = split_call_l(J, hisubst, oir, ir, - irt_isi64(ir->t) ? IRCALL_fp64_d2l : IRCALL_fp64_d2ul); - } else if (st == IRT_FLOAT) { /* FLOAT to 64 bit int conv. */ - nir->o = IR_CALLN; - nir->op2 = irt_isi64(ir->t) ? IRCALL_fp64_f2l : IRCALL_fp64_f2ul; - hi = split_emit(J, IRTI(IR_HIOP), nref, nref); - } -#else - if (st == IRT_NUM || st == IRT_FLOAT) { /* FP to 64 bit int conv. */ - hi = split_emit(J, IRTI(IR_HIOP), nir->op1, nref); - } -#endif - else if (st == IRT_I64 || st == IRT_U64) { /* 64/64 bit cast. */ - /* Drop cast, since assembler doesn't care. */ - goto fwdlo; - } else if ((ir->op2 & IRCONV_SEXT)) { /* Sign-extend to 64 bit. */ - IRRef k31 = lj_ir_kint(J, 31); - nir = IR(nref); /* May have been reallocated. */ - ir->prev = nir->op1; /* Pass through loword. */ - nir->o = IR_BSAR; /* hi = bsar(lo, 31). */ - nir->op2 = k31; - hi = nref; - } else { /* Zero-extend to 64 bit. */ - hi = lj_ir_kint(J, 0); - goto fwdlo; - } - break; - } - case IR_CALLXS: - goto split_call; - case IR_PHI: { - IRRef hiref2; - if ((irref_isk(nir->op1) && irref_isk(nir->op2)) || - nir->op1 == nir->op2) - J->cur.nins--; /* Drop useless PHIs. */ - hiref2 = hisubst[ir->op2]; - if (!((irref_isk(hiref) && irref_isk(hiref2)) || hiref == hiref2)) - split_emit(J, IRTI(IR_PHI), hiref, hiref2); - break; - } - case IR_HIOP: - J->cur.nins--; /* Drop joining HIOP. */ - ir->prev = nir->op1; - hi = nir->op2; - break; - default: - lua_assert(ir->o <= IR_NE); /* Comparisons. */ - split_emit(J, IRTGI(IR_HIOP), hiref, hisubst[ir->op2]); - break; - } - } else -#endif -#if LJ_SOFTFP - if (ir->o == IR_SLOAD) { - if ((nir->op2 & IRSLOAD_CONVERT)) { /* Convert from number to int. */ - nir->op2 &= ~IRSLOAD_CONVERT; - if (!(nir->op2 & IRSLOAD_TYPECHECK)) - nir->t.irt = IRT_INT; /* Drop guard. */ - split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), nref, nref); - ir->prev = split_num2int(J, nref, nref+1, irt_isguard(ir->t)); - } - } else if (ir->o == IR_TOBIT) { - IRRef tmp, op1 = ir->op1; - J->cur.nins--; -#if LJ_LE - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), oir[op1].prev, hisubst[op1]); -#else - tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hisubst[op1], oir[op1].prev); -#endif - ir->prev = split_emit(J, IRTI(IR_CALLN), tmp, IRCALL_lj_vm_tobit); - } else if (ir->o == IR_TOSTR) { - if (hisubst[ir->op1]) { - if (irref_isk(ir->op1)) - nir->op1 = ir->op1; - else - split_emit(J, IRT(IR_HIOP, IRT_NIL), hisubst[ir->op1], nref); - } - } else if (ir->o == IR_HREF || ir->o == IR_NEWREF) { - if (irref_isk(ir->op2) && hisubst[ir->op2]) - nir->op2 = ir->op2; - } else -#endif - if (ir->o == IR_CONV) { /* See above, too. */ - IRType st = (IRType)(ir->op2 & IRCONV_SRCMASK); -#if LJ_32 && LJ_HASFFI - if (st == IRT_I64 || st == IRT_U64) { /* Conversion from 64 bit int. */ -#if LJ_SOFTFP - if (irt_isfloat(ir->t)) { - split_call_l(J, hisubst, oir, ir, - st == IRT_I64 ? IRCALL_fp64_l2f : IRCALL_fp64_ul2f); - J->cur.nins--; /* Drop unused HIOP. */ - } -#else - if (irt_isfp(ir->t)) { /* 64 bit integer to FP conversion. */ - ir->prev = split_emit(J, IRT(IR_HIOP, irt_type(ir->t)), - hisubst[ir->op1], nref); - } -#endif - else { /* Truncate to lower 32 bits. */ - fwdlo: - ir->prev = nir->op1; /* Forward loword. */ - /* Replace with NOP to avoid messing up the snapshot logic. */ - nir->ot = IRT(IR_NOP, IRT_NIL); - nir->op1 = nir->op2 = 0; - } - } -#endif -#if LJ_SOFTFP && LJ_32 && LJ_HASFFI - else if (irt_isfloat(ir->t)) { - if (st == IRT_NUM) { - split_call_l(J, hisubst, oir, ir, IRCALL_softfp_d2f); - J->cur.nins--; /* Drop unused HIOP. */ - } else { - nir->o = IR_CALLN; - nir->op2 = st == IRT_INT ? IRCALL_softfp_i2f : IRCALL_softfp_ui2f; - } - } else if (st == IRT_FLOAT) { - nir->o = IR_CALLN; - nir->op2 = irt_isint(ir->t) ? IRCALL_softfp_f2i : IRCALL_softfp_f2ui; - } else -#endif -#if LJ_SOFTFP - if (st == IRT_NUM || (LJ_32 && LJ_HASFFI && st == IRT_FLOAT)) { - if (irt_isguard(ir->t)) { - lua_assert(st == IRT_NUM && irt_isint(ir->t)); - J->cur.nins--; - ir->prev = split_num2int(J, nir->op1, hisubst[ir->op1], 1); - } else { - split_call_l(J, hisubst, oir, ir, -#if LJ_32 && LJ_HASFFI - st == IRT_NUM ? - (irt_isint(ir->t) ? IRCALL_softfp_d2i : IRCALL_softfp_d2ui) : - (irt_isint(ir->t) ? IRCALL_softfp_f2i : IRCALL_softfp_f2ui) -#else - IRCALL_softfp_d2i -#endif - ); - J->cur.nins--; /* Drop unused HIOP. */ - } - } -#endif - } else if (ir->o == IR_CALLXS) { - IRRef hiref; - split_call: - hiref = hisubst[ir->op1]; - if (hiref) { - IROpT ot = nir->ot; - IRRef op2 = nir->op2; - nir->ot = IRT(IR_CARG, IRT_NIL); -#if LJ_LE - nir->op2 = hiref; -#else - nir->op2 = nir->op1; nir->op1 = hiref; -#endif - ir->prev = nref = split_emit(J, ot, nref, op2); - } - if (LJ_SOFTFP ? irt_is64(ir->t) : irt_isint64(ir->t)) - hi = split_emit(J, - IRT(IR_HIOP, (LJ_SOFTFP && irt_isnum(ir->t)) ? IRT_SOFTFP : IRT_INT), - nref, nref); - } else if (ir->o == IR_CARG) { - IRRef hiref = hisubst[ir->op1]; - if (hiref) { - IRRef op2 = nir->op2; -#if LJ_LE - nir->op2 = hiref; -#else - nir->op2 = nir->op1; nir->op1 = hiref; -#endif - ir->prev = nref = split_emit(J, IRT(IR_CARG, IRT_NIL), nref, op2); - nir = IR(nref); - } - hiref = hisubst[ir->op2]; - if (hiref) { -#if !LJ_TARGET_X86 - int carg = 0; - IRIns *cir; - for (cir = IR(nir->op1); cir->o == IR_CARG; cir = IR(cir->op1)) - carg++; - if ((carg & 1) == 0) { /* Align 64 bit arguments. */ - IRRef op2 = nir->op2; - nir->op2 = REF_NIL; - nref = split_emit(J, IRT(IR_CARG, IRT_NIL), nref, op2); - nir = IR(nref); - } -#endif -#if LJ_BE - { IRRef tmp = nir->op2; nir->op2 = hiref; hiref = tmp; } -#endif - ir->prev = split_emit(J, IRT(IR_CARG, IRT_NIL), nref, hiref); - } - } else if (ir->o == IR_CNEWI) { - if (hisubst[ir->op2]) - split_emit(J, IRT(IR_HIOP, IRT_NIL), nref, hisubst[ir->op2]); - } else if (ir->o == IR_LOOP) { - J->loopref = nref; /* Needed by assembler. */ - } - hisubst[ref] = hi; /* Store hiword substitution. */ - } - if (snref == nins) { /* Substitution for last snapshot. */ - snap->ref = J->cur.nins; - split_subst_snap(J, snap, oir); - } - - /* Add PHI marks. */ - for (ref = J->cur.nins-1; ref >= REF_FIRST; ref--) { - IRIns *ir = IR(ref); - if (ir->o != IR_PHI) break; - if (!irref_isk(ir->op1)) irt_setphi(IR(ir->op1)->t); - if (ir->op2 > J->loopref) irt_setphi(IR(ir->op2)->t); - } -} - -/* Protected callback for split pass. */ -static TValue *cpsplit(lua_State *L, lua_CFunction dummy, void *ud) -{ - jit_State *J = (jit_State *)ud; - split_ir(J); - UNUSED(L); UNUSED(dummy); - return NULL; -} - -#if defined(LUA_USE_ASSERT) || LJ_SOFTFP -/* Slow, but sure way to check whether a SPLIT pass is needed. */ -static int split_needsplit(jit_State *J) -{ - IRIns *ir, *irend; - IRRef ref; - for (ir = IR(REF_FIRST), irend = IR(J->cur.nins); ir < irend; ir++) - if (LJ_SOFTFP ? irt_is64orfp(ir->t) : irt_isint64(ir->t)) - return 1; - if (LJ_SOFTFP) { - for (ref = J->chain[IR_SLOAD]; ref; ref = IR(ref)->prev) - if ((IR(ref)->op2 & IRSLOAD_CONVERT)) - return 1; - if (J->chain[IR_TOBIT]) - return 1; - } - for (ref = J->chain[IR_CONV]; ref; ref = IR(ref)->prev) { - IRType st = (IR(ref)->op2 & IRCONV_SRCMASK); - if ((LJ_SOFTFP && (st == IRT_NUM || st == IRT_FLOAT)) || - st == IRT_I64 || st == IRT_U64) - return 1; - } - return 0; /* Nope. */ -} -#endif - -/* SPLIT pass. */ -void lj_opt_split(jit_State *J) -{ -#if LJ_SOFTFP - if (!J->needsplit) - J->needsplit = split_needsplit(J); -#else - lua_assert(J->needsplit >= split_needsplit(J)); /* Verify flag. */ -#endif - if (J->needsplit) { - int errcode = lj_vm_cpcall(J->L, NULL, J, cpsplit); - if (errcode) { - /* Completely reset the trace to avoid inconsistent dump on abort. */ - J->cur.nins = J->cur.nk = REF_BASE; - J->cur.nsnap = 0; - lj_err_throw(J->L, errcode); /* Propagate errors. */ - } - } -} - -#undef IR - -#endif diff --git a/deps/luajit/src/lj_parse.c b/deps/luajit/src/lj_parse.c deleted file mode 100644 index abfac3c..0000000 --- a/deps/luajit/src/lj_parse.c +++ /dev/null @@ -1,2754 +0,0 @@ -/* -** Lua parser (source code -> bytecode). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_parse_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_func.h" -#include "lj_state.h" -#include "lj_bc.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#endif -#include "lj_lex.h" -#include "lj_parse.h" -#include "lj_vm.h" -#include "lj_vmevent.h" - -/* -- Parser structures and definitions ----------------------------------- */ - -/* Expression kinds. */ -typedef enum { - /* Constant expressions must be first and in this order: */ - VKNIL, - VKFALSE, - VKTRUE, - VKSTR, /* sval = string value */ - VKNUM, /* nval = number value */ - VKLAST = VKNUM, - VKCDATA, /* nval = cdata value, not treated as a constant expression */ - /* Non-constant expressions follow: */ - VLOCAL, /* info = local register, aux = vstack index */ - VUPVAL, /* info = upvalue index, aux = vstack index */ - VGLOBAL, /* sval = string value */ - VINDEXED, /* info = table register, aux = index reg/byte/string const */ - VJMP, /* info = instruction PC */ - VRELOCABLE, /* info = instruction PC */ - VNONRELOC, /* info = result register */ - VCALL, /* info = instruction PC, aux = base */ - VVOID -} ExpKind; - -/* Expression descriptor. */ -typedef struct ExpDesc { - union { - struct { - uint32_t info; /* Primary info. */ - uint32_t aux; /* Secondary info. */ - } s; - TValue nval; /* Number value. */ - GCstr *sval; /* String value. */ - } u; - ExpKind k; - BCPos t; /* True condition jump list. */ - BCPos f; /* False condition jump list. */ -} ExpDesc; - -/* Macros for expressions. */ -#define expr_hasjump(e) ((e)->t != (e)->f) - -#define expr_isk(e) ((e)->k <= VKLAST) -#define expr_isk_nojump(e) (expr_isk(e) && !expr_hasjump(e)) -#define expr_isnumk(e) ((e)->k == VKNUM) -#define expr_isnumk_nojump(e) (expr_isnumk(e) && !expr_hasjump(e)) -#define expr_isstrk(e) ((e)->k == VKSTR) - -#define expr_numtv(e) check_exp(expr_isnumk((e)), &(e)->u.nval) -#define expr_numberV(e) numberVnum(expr_numtv((e))) - -/* Initialize expression. */ -static LJ_AINLINE void expr_init(ExpDesc *e, ExpKind k, uint32_t info) -{ - e->k = k; - e->u.s.info = info; - e->f = e->t = NO_JMP; -} - -/* Check number constant for +-0. */ -static int expr_numiszero(ExpDesc *e) -{ - TValue *o = expr_numtv(e); - return tvisint(o) ? (intV(o) == 0) : tviszero(o); -} - -/* Per-function linked list of scope blocks. */ -typedef struct FuncScope { - struct FuncScope *prev; /* Link to outer scope. */ - MSize vstart; /* Start of block-local variables. */ - uint8_t nactvar; /* Number of active vars outside the scope. */ - uint8_t flags; /* Scope flags. */ -} FuncScope; - -#define FSCOPE_LOOP 0x01 /* Scope is a (breakable) loop. */ -#define FSCOPE_BREAK 0x02 /* Break used in scope. */ -#define FSCOPE_GOLA 0x04 /* Goto or label used in scope. */ -#define FSCOPE_UPVAL 0x08 /* Upvalue in scope. */ -#define FSCOPE_NOCLOSE 0x10 /* Do not close upvalues. */ - -#define NAME_BREAK ((GCstr *)(uintptr_t)1) - -/* Index into variable stack. */ -typedef uint16_t VarIndex; -#define LJ_MAX_VSTACK (65536 - LJ_MAX_UPVAL) - -/* Variable/goto/label info. */ -#define VSTACK_VAR_RW 0x01 /* R/W variable. */ -#define VSTACK_GOTO 0x02 /* Pending goto. */ -#define VSTACK_LABEL 0x04 /* Label. */ - -/* Per-function state. */ -typedef struct FuncState { - GCtab *kt; /* Hash table for constants. */ - LexState *ls; /* Lexer state. */ - lua_State *L; /* Lua state. */ - FuncScope *bl; /* Current scope. */ - struct FuncState *prev; /* Enclosing function. */ - BCPos pc; /* Next bytecode position. */ - BCPos lasttarget; /* Bytecode position of last jump target. */ - BCPos jpc; /* Pending jump list to next bytecode. */ - BCReg freereg; /* First free register. */ - BCReg nactvar; /* Number of active local variables. */ - BCReg nkn, nkgc; /* Number of lua_Number/GCobj constants */ - BCLine linedefined; /* First line of the function definition. */ - BCInsLine *bcbase; /* Base of bytecode stack. */ - BCPos bclim; /* Limit of bytecode stack. */ - MSize vbase; /* Base of variable stack for this function. */ - uint8_t flags; /* Prototype flags. */ - uint8_t numparams; /* Number of parameters. */ - uint8_t framesize; /* Fixed frame size. */ - uint8_t nuv; /* Number of upvalues */ - VarIndex varmap[LJ_MAX_LOCVAR]; /* Map from register to variable idx. */ - VarIndex uvmap[LJ_MAX_UPVAL]; /* Map from upvalue to variable idx. */ - VarIndex uvtmp[LJ_MAX_UPVAL]; /* Temporary upvalue map. */ -} FuncState; - -/* Binary and unary operators. ORDER OPR */ -typedef enum BinOpr { - OPR_ADD, OPR_SUB, OPR_MUL, OPR_DIV, OPR_MOD, OPR_POW, /* ORDER ARITH */ - OPR_CONCAT, - OPR_NE, OPR_EQ, - OPR_LT, OPR_GE, OPR_LE, OPR_GT, - OPR_AND, OPR_OR, - OPR_NOBINOPR -} BinOpr; - -LJ_STATIC_ASSERT((int)BC_ISGE-(int)BC_ISLT == (int)OPR_GE-(int)OPR_LT); -LJ_STATIC_ASSERT((int)BC_ISLE-(int)BC_ISLT == (int)OPR_LE-(int)OPR_LT); -LJ_STATIC_ASSERT((int)BC_ISGT-(int)BC_ISLT == (int)OPR_GT-(int)OPR_LT); -LJ_STATIC_ASSERT((int)BC_SUBVV-(int)BC_ADDVV == (int)OPR_SUB-(int)OPR_ADD); -LJ_STATIC_ASSERT((int)BC_MULVV-(int)BC_ADDVV == (int)OPR_MUL-(int)OPR_ADD); -LJ_STATIC_ASSERT((int)BC_DIVVV-(int)BC_ADDVV == (int)OPR_DIV-(int)OPR_ADD); -LJ_STATIC_ASSERT((int)BC_MODVV-(int)BC_ADDVV == (int)OPR_MOD-(int)OPR_ADD); - -/* -- Error handling ------------------------------------------------------ */ - -LJ_NORET LJ_NOINLINE static void err_syntax(LexState *ls, ErrMsg em) -{ - lj_lex_error(ls, ls->token, em); -} - -LJ_NORET LJ_NOINLINE static void err_token(LexState *ls, LexToken token) -{ - lj_lex_error(ls, ls->token, LJ_ERR_XTOKEN, lj_lex_token2str(ls, token)); -} - -LJ_NORET static void err_limit(FuncState *fs, uint32_t limit, const char *what) -{ - if (fs->linedefined == 0) - lj_lex_error(fs->ls, 0, LJ_ERR_XLIMM, limit, what); - else - lj_lex_error(fs->ls, 0, LJ_ERR_XLIMF, fs->linedefined, limit, what); -} - -#define checklimit(fs, v, l, m) if ((v) >= (l)) err_limit(fs, l, m) -#define checklimitgt(fs, v, l, m) if ((v) > (l)) err_limit(fs, l, m) -#define checkcond(ls, c, em) { if (!(c)) err_syntax(ls, em); } - -/* -- Management of constants --------------------------------------------- */ - -/* Return bytecode encoding for primitive constant. */ -#define const_pri(e) check_exp((e)->k <= VKTRUE, (e)->k) - -#define tvhaskslot(o) ((o)->u32.hi == 0) -#define tvkslot(o) ((o)->u32.lo) - -/* Add a number constant. */ -static BCReg const_num(FuncState *fs, ExpDesc *e) -{ - lua_State *L = fs->L; - TValue *o; - lua_assert(expr_isnumk(e)); - o = lj_tab_set(L, fs->kt, &e->u.nval); - if (tvhaskslot(o)) - return tvkslot(o); - o->u64 = fs->nkn; - return fs->nkn++; -} - -/* Add a GC object constant. */ -static BCReg const_gc(FuncState *fs, GCobj *gc, uint32_t itype) -{ - lua_State *L = fs->L; - TValue key, *o; - setgcV(L, &key, gc, itype); - /* NOBARRIER: the key is new or kept alive. */ - o = lj_tab_set(L, fs->kt, &key); - if (tvhaskslot(o)) - return tvkslot(o); - o->u64 = fs->nkgc; - return fs->nkgc++; -} - -/* Add a string constant. */ -static BCReg const_str(FuncState *fs, ExpDesc *e) -{ - lua_assert(expr_isstrk(e) || e->k == VGLOBAL); - return const_gc(fs, obj2gco(e->u.sval), LJ_TSTR); -} - -/* Anchor string constant to avoid GC. */ -GCstr *lj_parse_keepstr(LexState *ls, const char *str, size_t len) -{ - /* NOBARRIER: the key is new or kept alive. */ - lua_State *L = ls->L; - GCstr *s = lj_str_new(L, str, len); - TValue *tv = lj_tab_setstr(L, ls->fs->kt, s); - if (tvisnil(tv)) setboolV(tv, 1); - lj_gc_check(L); - return s; -} - -#if LJ_HASFFI -/* Anchor cdata to avoid GC. */ -void lj_parse_keepcdata(LexState *ls, TValue *tv, GCcdata *cd) -{ - /* NOBARRIER: the key is new or kept alive. */ - lua_State *L = ls->L; - setcdataV(L, tv, cd); - setboolV(lj_tab_set(L, ls->fs->kt, tv), 1); -} -#endif - -/* -- Jump list handling -------------------------------------------------- */ - -/* Get next element in jump list. */ -static BCPos jmp_next(FuncState *fs, BCPos pc) -{ - ptrdiff_t delta = bc_j(fs->bcbase[pc].ins); - if ((BCPos)delta == NO_JMP) - return NO_JMP; - else - return (BCPos)(((ptrdiff_t)pc+1)+delta); -} - -/* Check if any of the instructions on the jump list produce no value. */ -static int jmp_novalue(FuncState *fs, BCPos list) -{ - for (; list != NO_JMP; list = jmp_next(fs, list)) { - BCIns p = fs->bcbase[list >= 1 ? list-1 : list].ins; - if (!(bc_op(p) == BC_ISTC || bc_op(p) == BC_ISFC || bc_a(p) == NO_REG)) - return 1; - } - return 0; -} - -/* Patch register of test instructions. */ -static int jmp_patchtestreg(FuncState *fs, BCPos pc, BCReg reg) -{ - BCInsLine *ilp = &fs->bcbase[pc >= 1 ? pc-1 : pc]; - BCOp op = bc_op(ilp->ins); - if (op == BC_ISTC || op == BC_ISFC) { - if (reg != NO_REG && reg != bc_d(ilp->ins)) { - setbc_a(&ilp->ins, reg); - } else { /* Nothing to store or already in the right register. */ - setbc_op(&ilp->ins, op+(BC_IST-BC_ISTC)); - setbc_a(&ilp->ins, 0); - } - } else if (bc_a(ilp->ins) == NO_REG) { - if (reg == NO_REG) { - ilp->ins = BCINS_AJ(BC_JMP, bc_a(fs->bcbase[pc].ins), 0); - } else { - setbc_a(&ilp->ins, reg); - if (reg >= bc_a(ilp[1].ins)) - setbc_a(&ilp[1].ins, reg+1); - } - } else { - return 0; /* Cannot patch other instructions. */ - } - return 1; -} - -/* Drop values for all instructions on jump list. */ -static void jmp_dropval(FuncState *fs, BCPos list) -{ - for (; list != NO_JMP; list = jmp_next(fs, list)) - jmp_patchtestreg(fs, list, NO_REG); -} - -/* Patch jump instruction to target. */ -static void jmp_patchins(FuncState *fs, BCPos pc, BCPos dest) -{ - BCIns *jmp = &fs->bcbase[pc].ins; - BCPos offset = dest-(pc+1)+BCBIAS_J; - lua_assert(dest != NO_JMP); - if (offset > BCMAX_D) - err_syntax(fs->ls, LJ_ERR_XJUMP); - setbc_d(jmp, offset); -} - -/* Append to jump list. */ -static void jmp_append(FuncState *fs, BCPos *l1, BCPos l2) -{ - if (l2 == NO_JMP) { - return; - } else if (*l1 == NO_JMP) { - *l1 = l2; - } else { - BCPos list = *l1; - BCPos next; - while ((next = jmp_next(fs, list)) != NO_JMP) /* Find last element. */ - list = next; - jmp_patchins(fs, list, l2); - } -} - -/* Patch jump list and preserve produced values. */ -static void jmp_patchval(FuncState *fs, BCPos list, BCPos vtarget, - BCReg reg, BCPos dtarget) -{ - while (list != NO_JMP) { - BCPos next = jmp_next(fs, list); - if (jmp_patchtestreg(fs, list, reg)) - jmp_patchins(fs, list, vtarget); /* Jump to target with value. */ - else - jmp_patchins(fs, list, dtarget); /* Jump to default target. */ - list = next; - } -} - -/* Jump to following instruction. Append to list of pending jumps. */ -static void jmp_tohere(FuncState *fs, BCPos list) -{ - fs->lasttarget = fs->pc; - jmp_append(fs, &fs->jpc, list); -} - -/* Patch jump list to target. */ -static void jmp_patch(FuncState *fs, BCPos list, BCPos target) -{ - if (target == fs->pc) { - jmp_tohere(fs, list); - } else { - lua_assert(target < fs->pc); - jmp_patchval(fs, list, target, NO_REG, target); - } -} - -/* -- Bytecode register allocator ----------------------------------------- */ - -/* Bump frame size. */ -static void bcreg_bump(FuncState *fs, BCReg n) -{ - BCReg sz = fs->freereg + n; - if (sz > fs->framesize) { - if (sz >= LJ_MAX_SLOTS) - err_syntax(fs->ls, LJ_ERR_XSLOTS); - fs->framesize = (uint8_t)sz; - } -} - -/* Reserve registers. */ -static void bcreg_reserve(FuncState *fs, BCReg n) -{ - bcreg_bump(fs, n); - fs->freereg += n; -} - -/* Free register. */ -static void bcreg_free(FuncState *fs, BCReg reg) -{ - if (reg >= fs->nactvar) { - fs->freereg--; - lua_assert(reg == fs->freereg); - } -} - -/* Free register for expression. */ -static void expr_free(FuncState *fs, ExpDesc *e) -{ - if (e->k == VNONRELOC) - bcreg_free(fs, e->u.s.info); -} - -/* -- Bytecode emitter ---------------------------------------------------- */ - -/* Emit bytecode instruction. */ -static BCPos bcemit_INS(FuncState *fs, BCIns ins) -{ - BCPos pc = fs->pc; - LexState *ls = fs->ls; - jmp_patchval(fs, fs->jpc, pc, NO_REG, pc); - fs->jpc = NO_JMP; - if (LJ_UNLIKELY(pc >= fs->bclim)) { - ptrdiff_t base = fs->bcbase - ls->bcstack; - checklimit(fs, ls->sizebcstack, LJ_MAX_BCINS, "bytecode instructions"); - lj_mem_growvec(fs->L, ls->bcstack, ls->sizebcstack, LJ_MAX_BCINS,BCInsLine); - fs->bclim = (BCPos)(ls->sizebcstack - base); - fs->bcbase = ls->bcstack + base; - } - fs->bcbase[pc].ins = ins; - fs->bcbase[pc].line = ls->lastline; - fs->pc = pc+1; - return pc; -} - -#define bcemit_ABC(fs, o, a, b, c) bcemit_INS(fs, BCINS_ABC(o, a, b, c)) -#define bcemit_AD(fs, o, a, d) bcemit_INS(fs, BCINS_AD(o, a, d)) -#define bcemit_AJ(fs, o, a, j) bcemit_INS(fs, BCINS_AJ(o, a, j)) - -#define bcptr(fs, e) (&(fs)->bcbase[(e)->u.s.info].ins) - -/* -- Bytecode emitter for expressions ------------------------------------ */ - -/* Discharge non-constant expression to any register. */ -static void expr_discharge(FuncState *fs, ExpDesc *e) -{ - BCIns ins; - if (e->k == VUPVAL) { - ins = BCINS_AD(BC_UGET, 0, e->u.s.info); - } else if (e->k == VGLOBAL) { - ins = BCINS_AD(BC_GGET, 0, const_str(fs, e)); - } else if (e->k == VINDEXED) { - BCReg rc = e->u.s.aux; - if ((int32_t)rc < 0) { - ins = BCINS_ABC(BC_TGETS, 0, e->u.s.info, ~rc); - } else if (rc > BCMAX_C) { - ins = BCINS_ABC(BC_TGETB, 0, e->u.s.info, rc-(BCMAX_C+1)); - } else { - bcreg_free(fs, rc); - ins = BCINS_ABC(BC_TGETV, 0, e->u.s.info, rc); - } - bcreg_free(fs, e->u.s.info); - } else if (e->k == VCALL) { - e->u.s.info = e->u.s.aux; - e->k = VNONRELOC; - return; - } else if (e->k == VLOCAL) { - e->k = VNONRELOC; - return; - } else { - return; - } - e->u.s.info = bcemit_INS(fs, ins); - e->k = VRELOCABLE; -} - -/* Emit bytecode to set a range of registers to nil. */ -static void bcemit_nil(FuncState *fs, BCReg from, BCReg n) -{ - if (fs->pc > fs->lasttarget) { /* No jumps to current position? */ - BCIns *ip = &fs->bcbase[fs->pc-1].ins; - BCReg pto, pfrom = bc_a(*ip); - switch (bc_op(*ip)) { /* Try to merge with the previous instruction. */ - case BC_KPRI: - if (bc_d(*ip) != ~LJ_TNIL) break; - if (from == pfrom) { - if (n == 1) return; - } else if (from == pfrom+1) { - from = pfrom; - n++; - } else { - break; - } - *ip = BCINS_AD(BC_KNIL, from, from+n-1); /* Replace KPRI. */ - return; - case BC_KNIL: - pto = bc_d(*ip); - if (pfrom <= from && from <= pto+1) { /* Can we connect both ranges? */ - if (from+n-1 > pto) - setbc_d(ip, from+n-1); /* Patch previous instruction range. */ - return; - } - break; - default: - break; - } - } - /* Emit new instruction or replace old instruction. */ - bcemit_INS(fs, n == 1 ? BCINS_AD(BC_KPRI, from, VKNIL) : - BCINS_AD(BC_KNIL, from, from+n-1)); -} - -/* Discharge an expression to a specific register. Ignore branches. */ -static void expr_toreg_nobranch(FuncState *fs, ExpDesc *e, BCReg reg) -{ - BCIns ins; - expr_discharge(fs, e); - if (e->k == VKSTR) { - ins = BCINS_AD(BC_KSTR, reg, const_str(fs, e)); - } else if (e->k == VKNUM) { -#if LJ_DUALNUM - cTValue *tv = expr_numtv(e); - if (tvisint(tv) && checki16(intV(tv))) - ins = BCINS_AD(BC_KSHORT, reg, (BCReg)(uint16_t)intV(tv)); - else -#else - lua_Number n = expr_numberV(e); - int32_t k = lj_num2int(n); - if (checki16(k) && n == (lua_Number)k) - ins = BCINS_AD(BC_KSHORT, reg, (BCReg)(uint16_t)k); - else -#endif - ins = BCINS_AD(BC_KNUM, reg, const_num(fs, e)); -#if LJ_HASFFI - } else if (e->k == VKCDATA) { - fs->flags |= PROTO_FFI; - ins = BCINS_AD(BC_KCDATA, reg, - const_gc(fs, obj2gco(cdataV(&e->u.nval)), LJ_TCDATA)); -#endif - } else if (e->k == VRELOCABLE) { - setbc_a(bcptr(fs, e), reg); - goto noins; - } else if (e->k == VNONRELOC) { - if (reg == e->u.s.info) - goto noins; - ins = BCINS_AD(BC_MOV, reg, e->u.s.info); - } else if (e->k == VKNIL) { - bcemit_nil(fs, reg, 1); - goto noins; - } else if (e->k <= VKTRUE) { - ins = BCINS_AD(BC_KPRI, reg, const_pri(e)); - } else { - lua_assert(e->k == VVOID || e->k == VJMP); - return; - } - bcemit_INS(fs, ins); -noins: - e->u.s.info = reg; - e->k = VNONRELOC; -} - -/* Forward declaration. */ -static BCPos bcemit_jmp(FuncState *fs); - -/* Discharge an expression to a specific register. */ -static void expr_toreg(FuncState *fs, ExpDesc *e, BCReg reg) -{ - expr_toreg_nobranch(fs, e, reg); - if (e->k == VJMP) - jmp_append(fs, &e->t, e->u.s.info); /* Add it to the true jump list. */ - if (expr_hasjump(e)) { /* Discharge expression with branches. */ - BCPos jend, jfalse = NO_JMP, jtrue = NO_JMP; - if (jmp_novalue(fs, e->t) || jmp_novalue(fs, e->f)) { - BCPos jval = (e->k == VJMP) ? NO_JMP : bcemit_jmp(fs); - jfalse = bcemit_AD(fs, BC_KPRI, reg, VKFALSE); - bcemit_AJ(fs, BC_JMP, fs->freereg, 1); - jtrue = bcemit_AD(fs, BC_KPRI, reg, VKTRUE); - jmp_tohere(fs, jval); - } - jend = fs->pc; - fs->lasttarget = jend; - jmp_patchval(fs, e->f, jend, reg, jfalse); - jmp_patchval(fs, e->t, jend, reg, jtrue); - } - e->f = e->t = NO_JMP; - e->u.s.info = reg; - e->k = VNONRELOC; -} - -/* Discharge an expression to the next free register. */ -static void expr_tonextreg(FuncState *fs, ExpDesc *e) -{ - expr_discharge(fs, e); - expr_free(fs, e); - bcreg_reserve(fs, 1); - expr_toreg(fs, e, fs->freereg - 1); -} - -/* Discharge an expression to any register. */ -static BCReg expr_toanyreg(FuncState *fs, ExpDesc *e) -{ - expr_discharge(fs, e); - if (e->k == VNONRELOC) { - if (!expr_hasjump(e)) return e->u.s.info; /* Already in a register. */ - if (e->u.s.info >= fs->nactvar) { - expr_toreg(fs, e, e->u.s.info); /* Discharge to temp. register. */ - return e->u.s.info; - } - } - expr_tonextreg(fs, e); /* Discharge to next register. */ - return e->u.s.info; -} - -/* Partially discharge expression to a value. */ -static void expr_toval(FuncState *fs, ExpDesc *e) -{ - if (expr_hasjump(e)) - expr_toanyreg(fs, e); - else - expr_discharge(fs, e); -} - -/* Emit store for LHS expression. */ -static void bcemit_store(FuncState *fs, ExpDesc *var, ExpDesc *e) -{ - BCIns ins; - if (var->k == VLOCAL) { - fs->ls->vstack[var->u.s.aux].info |= VSTACK_VAR_RW; - expr_free(fs, e); - expr_toreg(fs, e, var->u.s.info); - return; - } else if (var->k == VUPVAL) { - fs->ls->vstack[var->u.s.aux].info |= VSTACK_VAR_RW; - expr_toval(fs, e); - if (e->k <= VKTRUE) - ins = BCINS_AD(BC_USETP, var->u.s.info, const_pri(e)); - else if (e->k == VKSTR) - ins = BCINS_AD(BC_USETS, var->u.s.info, const_str(fs, e)); - else if (e->k == VKNUM) - ins = BCINS_AD(BC_USETN, var->u.s.info, const_num(fs, e)); - else - ins = BCINS_AD(BC_USETV, var->u.s.info, expr_toanyreg(fs, e)); - } else if (var->k == VGLOBAL) { - BCReg ra = expr_toanyreg(fs, e); - ins = BCINS_AD(BC_GSET, ra, const_str(fs, var)); - } else { - BCReg ra, rc; - lua_assert(var->k == VINDEXED); - ra = expr_toanyreg(fs, e); - rc = var->u.s.aux; - if ((int32_t)rc < 0) { - ins = BCINS_ABC(BC_TSETS, ra, var->u.s.info, ~rc); - } else if (rc > BCMAX_C) { - ins = BCINS_ABC(BC_TSETB, ra, var->u.s.info, rc-(BCMAX_C+1)); - } else { - /* Free late alloced key reg to avoid assert on free of value reg. */ - /* This can only happen when called from expr_table(). */ - lua_assert(e->k != VNONRELOC || ra < fs->nactvar || - rc < ra || (bcreg_free(fs, rc),1)); - ins = BCINS_ABC(BC_TSETV, ra, var->u.s.info, rc); - } - } - bcemit_INS(fs, ins); - expr_free(fs, e); -} - -/* Emit method lookup expression. */ -static void bcemit_method(FuncState *fs, ExpDesc *e, ExpDesc *key) -{ - BCReg idx, func, obj = expr_toanyreg(fs, e); - expr_free(fs, e); - func = fs->freereg; - bcemit_AD(fs, BC_MOV, func+1, obj); /* Copy object to first argument. */ - lua_assert(expr_isstrk(key)); - idx = const_str(fs, key); - if (idx <= BCMAX_C) { - bcreg_reserve(fs, 2); - bcemit_ABC(fs, BC_TGETS, func, obj, idx); - } else { - bcreg_reserve(fs, 3); - bcemit_AD(fs, BC_KSTR, func+2, idx); - bcemit_ABC(fs, BC_TGETV, func, obj, func+2); - fs->freereg--; - } - e->u.s.info = func; - e->k = VNONRELOC; -} - -/* -- Bytecode emitter for branches --------------------------------------- */ - -/* Emit unconditional branch. */ -static BCPos bcemit_jmp(FuncState *fs) -{ - BCPos jpc = fs->jpc; - BCPos j = fs->pc - 1; - BCIns *ip = &fs->bcbase[j].ins; - fs->jpc = NO_JMP; - if ((int32_t)j >= (int32_t)fs->lasttarget && bc_op(*ip) == BC_UCLO) { - setbc_j(ip, NO_JMP); - fs->lasttarget = j+1; - } else { - j = bcemit_AJ(fs, BC_JMP, fs->freereg, NO_JMP); - } - jmp_append(fs, &j, jpc); - return j; -} - -/* Invert branch condition of bytecode instruction. */ -static void invertcond(FuncState *fs, ExpDesc *e) -{ - BCIns *ip = &fs->bcbase[e->u.s.info - 1].ins; - setbc_op(ip, bc_op(*ip)^1); -} - -/* Emit conditional branch. */ -static BCPos bcemit_branch(FuncState *fs, ExpDesc *e, int cond) -{ - BCPos pc; - if (e->k == VRELOCABLE) { - BCIns *ip = bcptr(fs, e); - if (bc_op(*ip) == BC_NOT) { - *ip = BCINS_AD(cond ? BC_ISF : BC_IST, 0, bc_d(*ip)); - return bcemit_jmp(fs); - } - } - if (e->k != VNONRELOC) { - bcreg_reserve(fs, 1); - expr_toreg_nobranch(fs, e, fs->freereg-1); - } - bcemit_AD(fs, cond ? BC_ISTC : BC_ISFC, NO_REG, e->u.s.info); - pc = bcemit_jmp(fs); - expr_free(fs, e); - return pc; -} - -/* Emit branch on true condition. */ -static void bcemit_branch_t(FuncState *fs, ExpDesc *e) -{ - BCPos pc; - expr_discharge(fs, e); - if (e->k == VKSTR || e->k == VKNUM || e->k == VKTRUE) - pc = NO_JMP; /* Never jump. */ - else if (e->k == VJMP) - invertcond(fs, e), pc = e->u.s.info; - else if (e->k == VKFALSE || e->k == VKNIL) - expr_toreg_nobranch(fs, e, NO_REG), pc = bcemit_jmp(fs); - else - pc = bcemit_branch(fs, e, 0); - jmp_append(fs, &e->f, pc); - jmp_tohere(fs, e->t); - e->t = NO_JMP; -} - -/* Emit branch on false condition. */ -static void bcemit_branch_f(FuncState *fs, ExpDesc *e) -{ - BCPos pc; - expr_discharge(fs, e); - if (e->k == VKNIL || e->k == VKFALSE) - pc = NO_JMP; /* Never jump. */ - else if (e->k == VJMP) - pc = e->u.s.info; - else if (e->k == VKSTR || e->k == VKNUM || e->k == VKTRUE) - expr_toreg_nobranch(fs, e, NO_REG), pc = bcemit_jmp(fs); - else - pc = bcemit_branch(fs, e, 1); - jmp_append(fs, &e->t, pc); - jmp_tohere(fs, e->f); - e->f = NO_JMP; -} - -/* -- Bytecode emitter for operators -------------------------------------- */ - -/* Try constant-folding of arithmetic operators. */ -static int foldarith(BinOpr opr, ExpDesc *e1, ExpDesc *e2) -{ - TValue o; - lua_Number n; - if (!expr_isnumk_nojump(e1) || !expr_isnumk_nojump(e2)) return 0; - n = lj_vm_foldarith(expr_numberV(e1), expr_numberV(e2), (int)opr-OPR_ADD); - setnumV(&o, n); - if (tvisnan(&o) || tvismzero(&o)) return 0; /* Avoid NaN and -0 as consts. */ - if (LJ_DUALNUM) { - int32_t k = lj_num2int(n); - if ((lua_Number)k == n) { - setintV(&e1->u.nval, k); - return 1; - } - } - setnumV(&e1->u.nval, n); - return 1; -} - -/* Emit arithmetic operator. */ -static void bcemit_arith(FuncState *fs, BinOpr opr, ExpDesc *e1, ExpDesc *e2) -{ - BCReg rb, rc, t; - uint32_t op; - if (foldarith(opr, e1, e2)) - return; - if (opr == OPR_POW) { - op = BC_POW; - rc = expr_toanyreg(fs, e2); - rb = expr_toanyreg(fs, e1); - } else { - op = opr-OPR_ADD+BC_ADDVV; - /* Must discharge 2nd operand first since VINDEXED might free regs. */ - expr_toval(fs, e2); - if (expr_isnumk(e2) && (rc = const_num(fs, e2)) <= BCMAX_C) - op -= BC_ADDVV-BC_ADDVN; - else - rc = expr_toanyreg(fs, e2); - /* 1st operand discharged by bcemit_binop_left, but need KNUM/KSHORT. */ - lua_assert(expr_isnumk(e1) || e1->k == VNONRELOC); - expr_toval(fs, e1); - /* Avoid two consts to satisfy bytecode constraints. */ - if (expr_isnumk(e1) && !expr_isnumk(e2) && - (t = const_num(fs, e1)) <= BCMAX_B) { - rb = rc; rc = t; op -= BC_ADDVV-BC_ADDNV; - } else { - rb = expr_toanyreg(fs, e1); - } - } - /* Using expr_free might cause asserts if the order is wrong. */ - if (e1->k == VNONRELOC && e1->u.s.info >= fs->nactvar) fs->freereg--; - if (e2->k == VNONRELOC && e2->u.s.info >= fs->nactvar) fs->freereg--; - e1->u.s.info = bcemit_ABC(fs, op, 0, rb, rc); - e1->k = VRELOCABLE; -} - -/* Emit comparison operator. */ -static void bcemit_comp(FuncState *fs, BinOpr opr, ExpDesc *e1, ExpDesc *e2) -{ - ExpDesc *eret = e1; - BCIns ins; - expr_toval(fs, e1); - if (opr == OPR_EQ || opr == OPR_NE) { - BCOp op = opr == OPR_EQ ? BC_ISEQV : BC_ISNEV; - BCReg ra; - if (expr_isk(e1)) { e1 = e2; e2 = eret; } /* Need constant in 2nd arg. */ - ra = expr_toanyreg(fs, e1); /* First arg must be in a reg. */ - expr_toval(fs, e2); - switch (e2->k) { - case VKNIL: case VKFALSE: case VKTRUE: - ins = BCINS_AD(op+(BC_ISEQP-BC_ISEQV), ra, const_pri(e2)); - break; - case VKSTR: - ins = BCINS_AD(op+(BC_ISEQS-BC_ISEQV), ra, const_str(fs, e2)); - break; - case VKNUM: - ins = BCINS_AD(op+(BC_ISEQN-BC_ISEQV), ra, const_num(fs, e2)); - break; - default: - ins = BCINS_AD(op, ra, expr_toanyreg(fs, e2)); - break; - } - } else { - uint32_t op = opr-OPR_LT+BC_ISLT; - BCReg ra, rd; - if ((op-BC_ISLT) & 1) { /* GT -> LT, GE -> LE */ - e1 = e2; e2 = eret; /* Swap operands. */ - op = ((op-BC_ISLT)^3)+BC_ISLT; - expr_toval(fs, e1); - } - rd = expr_toanyreg(fs, e2); - ra = expr_toanyreg(fs, e1); - ins = BCINS_AD(op, ra, rd); - } - /* Using expr_free might cause asserts if the order is wrong. */ - if (e1->k == VNONRELOC && e1->u.s.info >= fs->nactvar) fs->freereg--; - if (e2->k == VNONRELOC && e2->u.s.info >= fs->nactvar) fs->freereg--; - bcemit_INS(fs, ins); - eret->u.s.info = bcemit_jmp(fs); - eret->k = VJMP; -} - -/* Fixup left side of binary operator. */ -static void bcemit_binop_left(FuncState *fs, BinOpr op, ExpDesc *e) -{ - if (op == OPR_AND) { - bcemit_branch_t(fs, e); - } else if (op == OPR_OR) { - bcemit_branch_f(fs, e); - } else if (op == OPR_CONCAT) { - expr_tonextreg(fs, e); - } else if (op == OPR_EQ || op == OPR_NE) { - if (!expr_isk_nojump(e)) expr_toanyreg(fs, e); - } else { - if (!expr_isnumk_nojump(e)) expr_toanyreg(fs, e); - } -} - -/* Emit binary operator. */ -static void bcemit_binop(FuncState *fs, BinOpr op, ExpDesc *e1, ExpDesc *e2) -{ - if (op <= OPR_POW) { - bcemit_arith(fs, op, e1, e2); - } else if (op == OPR_AND) { - lua_assert(e1->t == NO_JMP); /* List must be closed. */ - expr_discharge(fs, e2); - jmp_append(fs, &e2->f, e1->f); - *e1 = *e2; - } else if (op == OPR_OR) { - lua_assert(e1->f == NO_JMP); /* List must be closed. */ - expr_discharge(fs, e2); - jmp_append(fs, &e2->t, e1->t); - *e1 = *e2; - } else if (op == OPR_CONCAT) { - expr_toval(fs, e2); - if (e2->k == VRELOCABLE && bc_op(*bcptr(fs, e2)) == BC_CAT) { - lua_assert(e1->u.s.info == bc_b(*bcptr(fs, e2))-1); - expr_free(fs, e1); - setbc_b(bcptr(fs, e2), e1->u.s.info); - e1->u.s.info = e2->u.s.info; - } else { - expr_tonextreg(fs, e2); - expr_free(fs, e2); - expr_free(fs, e1); - e1->u.s.info = bcemit_ABC(fs, BC_CAT, 0, e1->u.s.info, e2->u.s.info); - } - e1->k = VRELOCABLE; - } else { - lua_assert(op == OPR_NE || op == OPR_EQ || - op == OPR_LT || op == OPR_GE || op == OPR_LE || op == OPR_GT); - bcemit_comp(fs, op, e1, e2); - } -} - -/* Emit unary operator. */ -static void bcemit_unop(FuncState *fs, BCOp op, ExpDesc *e) -{ - if (op == BC_NOT) { - /* Swap true and false lists. */ - { BCPos temp = e->f; e->f = e->t; e->t = temp; } - jmp_dropval(fs, e->f); - jmp_dropval(fs, e->t); - expr_discharge(fs, e); - if (e->k == VKNIL || e->k == VKFALSE) { - e->k = VKTRUE; - return; - } else if (expr_isk(e) || (LJ_HASFFI && e->k == VKCDATA)) { - e->k = VKFALSE; - return; - } else if (e->k == VJMP) { - invertcond(fs, e); - return; - } else if (e->k == VRELOCABLE) { - bcreg_reserve(fs, 1); - setbc_a(bcptr(fs, e), fs->freereg-1); - e->u.s.info = fs->freereg-1; - e->k = VNONRELOC; - } else { - lua_assert(e->k == VNONRELOC); - } - } else { - lua_assert(op == BC_UNM || op == BC_LEN); - if (op == BC_UNM && !expr_hasjump(e)) { /* Constant-fold negations. */ -#if LJ_HASFFI - if (e->k == VKCDATA) { /* Fold in-place since cdata is not interned. */ - GCcdata *cd = cdataV(&e->u.nval); - int64_t *p = (int64_t *)cdataptr(cd); - if (cd->ctypeid == CTID_COMPLEX_DOUBLE) - p[1] ^= (int64_t)U64x(80000000,00000000); - else - *p = -*p; - return; - } else -#endif - if (expr_isnumk(e) && !expr_numiszero(e)) { /* Avoid folding to -0. */ - TValue *o = expr_numtv(e); - if (tvisint(o)) { - int32_t k = intV(o); - if (k == -k) - setnumV(o, -(lua_Number)k); - else - setintV(o, -k); - return; - } else { - o->u64 ^= U64x(80000000,00000000); - return; - } - } - } - expr_toanyreg(fs, e); - } - expr_free(fs, e); - e->u.s.info = bcemit_AD(fs, op, 0, e->u.s.info); - e->k = VRELOCABLE; -} - -/* -- Lexer support ------------------------------------------------------- */ - -/* Check and consume optional token. */ -static int lex_opt(LexState *ls, LexToken tok) -{ - if (ls->token == tok) { - lj_lex_next(ls); - return 1; - } - return 0; -} - -/* Check and consume token. */ -static void lex_check(LexState *ls, LexToken tok) -{ - if (ls->token != tok) - err_token(ls, tok); - lj_lex_next(ls); -} - -/* Check for matching token. */ -static void lex_match(LexState *ls, LexToken what, LexToken who, BCLine line) -{ - if (!lex_opt(ls, what)) { - if (line == ls->linenumber) { - err_token(ls, what); - } else { - const char *swhat = lj_lex_token2str(ls, what); - const char *swho = lj_lex_token2str(ls, who); - lj_lex_error(ls, ls->token, LJ_ERR_XMATCH, swhat, swho, line); - } - } -} - -/* Check for string token. */ -static GCstr *lex_str(LexState *ls) -{ - GCstr *s; - if (ls->token != TK_name && (LJ_52 || ls->token != TK_goto)) - err_token(ls, TK_name); - s = strV(&ls->tokenval); - lj_lex_next(ls); - return s; -} - -/* -- Variable handling --------------------------------------------------- */ - -#define var_get(ls, fs, i) ((ls)->vstack[(fs)->varmap[(i)]]) - -/* Define a new local variable. */ -static void var_new(LexState *ls, BCReg n, GCstr *name) -{ - FuncState *fs = ls->fs; - MSize vtop = ls->vtop; - checklimit(fs, fs->nactvar+n, LJ_MAX_LOCVAR, "local variables"); - if (LJ_UNLIKELY(vtop >= ls->sizevstack)) { - if (ls->sizevstack >= LJ_MAX_VSTACK) - lj_lex_error(ls, 0, LJ_ERR_XLIMC, LJ_MAX_VSTACK); - lj_mem_growvec(ls->L, ls->vstack, ls->sizevstack, LJ_MAX_VSTACK, VarInfo); - } - lua_assert((uintptr_t)name < VARNAME__MAX || - lj_tab_getstr(fs->kt, name) != NULL); - /* NOBARRIER: name is anchored in fs->kt and ls->vstack is not a GCobj. */ - setgcref(ls->vstack[vtop].name, obj2gco(name)); - fs->varmap[fs->nactvar+n] = (uint16_t)vtop; - ls->vtop = vtop+1; -} - -#define var_new_lit(ls, n, v) \ - var_new(ls, (n), lj_parse_keepstr(ls, "" v, sizeof(v)-1)) - -#define var_new_fixed(ls, n, vn) \ - var_new(ls, (n), (GCstr *)(uintptr_t)(vn)) - -/* Add local variables. */ -static void var_add(LexState *ls, BCReg nvars) -{ - FuncState *fs = ls->fs; - BCReg nactvar = fs->nactvar; - while (nvars--) { - VarInfo *v = &var_get(ls, fs, nactvar); - v->startpc = fs->pc; - v->slot = nactvar++; - v->info = 0; - } - fs->nactvar = nactvar; -} - -/* Remove local variables. */ -static void var_remove(LexState *ls, BCReg tolevel) -{ - FuncState *fs = ls->fs; - while (fs->nactvar > tolevel) - var_get(ls, fs, --fs->nactvar).endpc = fs->pc; -} - -/* Lookup local variable name. */ -static BCReg var_lookup_local(FuncState *fs, GCstr *n) -{ - int i; - for (i = fs->nactvar-1; i >= 0; i--) { - if (n == strref(var_get(fs->ls, fs, i).name)) - return (BCReg)i; - } - return (BCReg)-1; /* Not found. */ -} - -/* Lookup or add upvalue index. */ -static MSize var_lookup_uv(FuncState *fs, MSize vidx, ExpDesc *e) -{ - MSize i, n = fs->nuv; - for (i = 0; i < n; i++) - if (fs->uvmap[i] == vidx) - return i; /* Already exists. */ - /* Otherwise create a new one. */ - checklimit(fs, fs->nuv, LJ_MAX_UPVAL, "upvalues"); - lua_assert(e->k == VLOCAL || e->k == VUPVAL); - fs->uvmap[n] = (uint16_t)vidx; - fs->uvtmp[n] = (uint16_t)(e->k == VLOCAL ? vidx : LJ_MAX_VSTACK+e->u.s.info); - fs->nuv = n+1; - return n; -} - -/* Forward declaration. */ -static void fscope_uvmark(FuncState *fs, BCReg level); - -/* Recursively lookup variables in enclosing functions. */ -static MSize var_lookup_(FuncState *fs, GCstr *name, ExpDesc *e, int first) -{ - if (fs) { - BCReg reg = var_lookup_local(fs, name); - if ((int32_t)reg >= 0) { /* Local in this function? */ - expr_init(e, VLOCAL, reg); - if (!first) - fscope_uvmark(fs, reg); /* Scope now has an upvalue. */ - return (MSize)(e->u.s.aux = (uint32_t)fs->varmap[reg]); - } else { - MSize vidx = var_lookup_(fs->prev, name, e, 0); /* Var in outer func? */ - if ((int32_t)vidx >= 0) { /* Yes, make it an upvalue here. */ - e->u.s.info = (uint8_t)var_lookup_uv(fs, vidx, e); - e->k = VUPVAL; - return vidx; - } - } - } else { /* Not found in any function, must be a global. */ - expr_init(e, VGLOBAL, 0); - e->u.sval = name; - } - return (MSize)-1; /* Global. */ -} - -/* Lookup variable name. */ -#define var_lookup(ls, e) \ - var_lookup_((ls)->fs, lex_str(ls), (e), 1) - -/* -- Goto an label handling ---------------------------------------------- */ - -/* Add a new goto or label. */ -static MSize gola_new(LexState *ls, GCstr *name, uint8_t info, BCPos pc) -{ - FuncState *fs = ls->fs; - MSize vtop = ls->vtop; - if (LJ_UNLIKELY(vtop >= ls->sizevstack)) { - if (ls->sizevstack >= LJ_MAX_VSTACK) - lj_lex_error(ls, 0, LJ_ERR_XLIMC, LJ_MAX_VSTACK); - lj_mem_growvec(ls->L, ls->vstack, ls->sizevstack, LJ_MAX_VSTACK, VarInfo); - } - lua_assert(name == NAME_BREAK || lj_tab_getstr(fs->kt, name) != NULL); - /* NOBARRIER: name is anchored in fs->kt and ls->vstack is not a GCobj. */ - setgcref(ls->vstack[vtop].name, obj2gco(name)); - ls->vstack[vtop].startpc = pc; - ls->vstack[vtop].slot = (uint8_t)fs->nactvar; - ls->vstack[vtop].info = info; - ls->vtop = vtop+1; - return vtop; -} - -#define gola_isgoto(v) ((v)->info & VSTACK_GOTO) -#define gola_islabel(v) ((v)->info & VSTACK_LABEL) -#define gola_isgotolabel(v) ((v)->info & (VSTACK_GOTO|VSTACK_LABEL)) - -/* Patch goto to jump to label. */ -static void gola_patch(LexState *ls, VarInfo *vg, VarInfo *vl) -{ - FuncState *fs = ls->fs; - BCPos pc = vg->startpc; - setgcrefnull(vg->name); /* Invalidate pending goto. */ - setbc_a(&fs->bcbase[pc].ins, vl->slot); - jmp_patch(fs, pc, vl->startpc); -} - -/* Patch goto to close upvalues. */ -static void gola_close(LexState *ls, VarInfo *vg) -{ - FuncState *fs = ls->fs; - BCPos pc = vg->startpc; - BCIns *ip = &fs->bcbase[pc].ins; - lua_assert(gola_isgoto(vg)); - lua_assert(bc_op(*ip) == BC_JMP || bc_op(*ip) == BC_UCLO); - setbc_a(ip, vg->slot); - if (bc_op(*ip) == BC_JMP) { - BCPos next = jmp_next(fs, pc); - if (next != NO_JMP) jmp_patch(fs, next, pc); /* Jump to UCLO. */ - setbc_op(ip, BC_UCLO); /* Turn into UCLO. */ - setbc_j(ip, NO_JMP); - } -} - -/* Resolve pending forward gotos for label. */ -static void gola_resolve(LexState *ls, FuncScope *bl, MSize idx) -{ - VarInfo *vg = ls->vstack + bl->vstart; - VarInfo *vl = ls->vstack + idx; - for (; vg < vl; vg++) - if (gcrefeq(vg->name, vl->name) && gola_isgoto(vg)) { - if (vg->slot < vl->slot) { - GCstr *name = strref(var_get(ls, ls->fs, vg->slot).name); - lua_assert((uintptr_t)name >= VARNAME__MAX); - ls->linenumber = ls->fs->bcbase[vg->startpc].line; - lua_assert(strref(vg->name) != NAME_BREAK); - lj_lex_error(ls, 0, LJ_ERR_XGSCOPE, - strdata(strref(vg->name)), strdata(name)); - } - gola_patch(ls, vg, vl); - } -} - -/* Fixup remaining gotos and labels for scope. */ -static void gola_fixup(LexState *ls, FuncScope *bl) -{ - VarInfo *v = ls->vstack + bl->vstart; - VarInfo *ve = ls->vstack + ls->vtop; - for (; v < ve; v++) { - GCstr *name = strref(v->name); - if (name != NULL) { /* Only consider remaining valid gotos/labels. */ - if (gola_islabel(v)) { - VarInfo *vg; - setgcrefnull(v->name); /* Invalidate label that goes out of scope. */ - for (vg = v+1; vg < ve; vg++) /* Resolve pending backward gotos. */ - if (strref(vg->name) == name && gola_isgoto(vg)) { - if ((bl->flags&FSCOPE_UPVAL) && vg->slot > v->slot) - gola_close(ls, vg); - gola_patch(ls, vg, v); - } - } else if (gola_isgoto(v)) { - if (bl->prev) { /* Propagate goto or break to outer scope. */ - bl->prev->flags |= name == NAME_BREAK ? FSCOPE_BREAK : FSCOPE_GOLA; - v->slot = bl->nactvar; - if ((bl->flags & FSCOPE_UPVAL)) - gola_close(ls, v); - } else { /* No outer scope: undefined goto label or no loop. */ - ls->linenumber = ls->fs->bcbase[v->startpc].line; - if (name == NAME_BREAK) - lj_lex_error(ls, 0, LJ_ERR_XBREAK); - else - lj_lex_error(ls, 0, LJ_ERR_XLUNDEF, strdata(name)); - } - } - } - } -} - -/* Find existing label. */ -static VarInfo *gola_findlabel(LexState *ls, GCstr *name) -{ - VarInfo *v = ls->vstack + ls->fs->bl->vstart; - VarInfo *ve = ls->vstack + ls->vtop; - for (; v < ve; v++) - if (strref(v->name) == name && gola_islabel(v)) - return v; - return NULL; -} - -/* -- Scope handling ------------------------------------------------------ */ - -/* Begin a scope. */ -static void fscope_begin(FuncState *fs, FuncScope *bl, int flags) -{ - bl->nactvar = (uint8_t)fs->nactvar; - bl->flags = flags; - bl->vstart = fs->ls->vtop; - bl->prev = fs->bl; - fs->bl = bl; - lua_assert(fs->freereg == fs->nactvar); -} - -/* End a scope. */ -static void fscope_end(FuncState *fs) -{ - FuncScope *bl = fs->bl; - LexState *ls = fs->ls; - fs->bl = bl->prev; - var_remove(ls, bl->nactvar); - fs->freereg = fs->nactvar; - lua_assert(bl->nactvar == fs->nactvar); - if ((bl->flags & (FSCOPE_UPVAL|FSCOPE_NOCLOSE)) == FSCOPE_UPVAL) - bcemit_AJ(fs, BC_UCLO, bl->nactvar, 0); - if ((bl->flags & FSCOPE_BREAK)) { - if ((bl->flags & FSCOPE_LOOP)) { - MSize idx = gola_new(ls, NAME_BREAK, VSTACK_LABEL, fs->pc); - ls->vtop = idx; /* Drop break label immediately. */ - gola_resolve(ls, bl, idx); - return; - } /* else: need the fixup step to propagate the breaks. */ - } else if (!(bl->flags & FSCOPE_GOLA)) { - return; - } - gola_fixup(ls, bl); -} - -/* Mark scope as having an upvalue. */ -static void fscope_uvmark(FuncState *fs, BCReg level) -{ - FuncScope *bl; - for (bl = fs->bl; bl && bl->nactvar > level; bl = bl->prev) - ; - if (bl) - bl->flags |= FSCOPE_UPVAL; -} - -/* -- Function state management ------------------------------------------- */ - -/* Fixup bytecode for prototype. */ -static void fs_fixup_bc(FuncState *fs, GCproto *pt, BCIns *bc, MSize n) -{ - BCInsLine *base = fs->bcbase; - MSize i; - pt->sizebc = n; - bc[0] = BCINS_AD((fs->flags & PROTO_VARARG) ? BC_FUNCV : BC_FUNCF, - fs->framesize, 0); - for (i = 1; i < n; i++) - bc[i] = base[i].ins; -} - -/* Fixup upvalues for child prototype, step #2. */ -static void fs_fixup_uv2(FuncState *fs, GCproto *pt) -{ - VarInfo *vstack = fs->ls->vstack; - uint16_t *uv = proto_uv(pt); - MSize i, n = pt->sizeuv; - for (i = 0; i < n; i++) { - VarIndex vidx = uv[i]; - if (vidx >= LJ_MAX_VSTACK) - uv[i] = vidx - LJ_MAX_VSTACK; - else if ((vstack[vidx].info & VSTACK_VAR_RW)) - uv[i] = vstack[vidx].slot | PROTO_UV_LOCAL; - else - uv[i] = vstack[vidx].slot | PROTO_UV_LOCAL | PROTO_UV_IMMUTABLE; - } -} - -/* Fixup constants for prototype. */ -static void fs_fixup_k(FuncState *fs, GCproto *pt, void *kptr) -{ - GCtab *kt; - TValue *array; - Node *node; - MSize i, hmask; - checklimitgt(fs, fs->nkn, BCMAX_D+1, "constants"); - checklimitgt(fs, fs->nkgc, BCMAX_D+1, "constants"); - setmref(pt->k, kptr); - pt->sizekn = fs->nkn; - pt->sizekgc = fs->nkgc; - kt = fs->kt; - array = tvref(kt->array); - for (i = 0; i < kt->asize; i++) - if (tvhaskslot(&array[i])) { - TValue *tv = &((TValue *)kptr)[tvkslot(&array[i])]; - if (LJ_DUALNUM) - setintV(tv, (int32_t)i); - else - setnumV(tv, (lua_Number)i); - } - node = noderef(kt->node); - hmask = kt->hmask; - for (i = 0; i <= hmask; i++) { - Node *n = &node[i]; - if (tvhaskslot(&n->val)) { - ptrdiff_t kidx = (ptrdiff_t)tvkslot(&n->val); - lua_assert(!tvisint(&n->key)); - if (tvisnum(&n->key)) { - TValue *tv = &((TValue *)kptr)[kidx]; - if (LJ_DUALNUM) { - lua_Number nn = numV(&n->key); - int32_t k = lj_num2int(nn); - lua_assert(!tvismzero(&n->key)); - if ((lua_Number)k == nn) - setintV(tv, k); - else - *tv = n->key; - } else { - *tv = n->key; - } - } else { - GCobj *o = gcV(&n->key); - setgcref(((GCRef *)kptr)[~kidx], o); - lj_gc_objbarrier(fs->L, pt, o); - if (tvisproto(&n->key)) - fs_fixup_uv2(fs, gco2pt(o)); - } - } - } -} - -/* Fixup upvalues for prototype, step #1. */ -static void fs_fixup_uv1(FuncState *fs, GCproto *pt, uint16_t *uv) -{ - setmref(pt->uv, uv); - pt->sizeuv = fs->nuv; - memcpy(uv, fs->uvtmp, fs->nuv*sizeof(VarIndex)); -} - -#ifndef LUAJIT_DISABLE_DEBUGINFO -/* Prepare lineinfo for prototype. */ -static size_t fs_prep_line(FuncState *fs, BCLine numline) -{ - return (fs->pc-1) << (numline < 256 ? 0 : numline < 65536 ? 1 : 2); -} - -/* Fixup lineinfo for prototype. */ -static void fs_fixup_line(FuncState *fs, GCproto *pt, - void *lineinfo, BCLine numline) -{ - BCInsLine *base = fs->bcbase + 1; - BCLine first = fs->linedefined; - MSize i = 0, n = fs->pc-1; - pt->firstline = fs->linedefined; - pt->numline = numline; - setmref(pt->lineinfo, lineinfo); - if (LJ_LIKELY(numline < 256)) { - uint8_t *li = (uint8_t *)lineinfo; - do { - BCLine delta = base[i].line - first; - lua_assert(delta >= 0 && delta < 256); - li[i] = (uint8_t)delta; - } while (++i < n); - } else if (LJ_LIKELY(numline < 65536)) { - uint16_t *li = (uint16_t *)lineinfo; - do { - BCLine delta = base[i].line - first; - lua_assert(delta >= 0 && delta < 65536); - li[i] = (uint16_t)delta; - } while (++i < n); - } else { - uint32_t *li = (uint32_t *)lineinfo; - do { - BCLine delta = base[i].line - first; - lua_assert(delta >= 0); - li[i] = (uint32_t)delta; - } while (++i < n); - } -} - -/* Resize buffer if needed. */ -static LJ_NOINLINE void fs_buf_resize(LexState *ls, MSize len) -{ - MSize sz = ls->sb.sz * 2; - while (ls->sb.n + len > sz) sz = sz * 2; - lj_str_resizebuf(ls->L, &ls->sb, sz); -} - -static LJ_AINLINE void fs_buf_need(LexState *ls, MSize len) -{ - if (LJ_UNLIKELY(ls->sb.n + len > ls->sb.sz)) - fs_buf_resize(ls, len); -} - -/* Add string to buffer. */ -static void fs_buf_str(LexState *ls, const char *str, MSize len) -{ - char *p = ls->sb.buf + ls->sb.n; - MSize i; - ls->sb.n += len; - for (i = 0; i < len; i++) p[i] = str[i]; -} - -/* Add ULEB128 value to buffer. */ -static void fs_buf_uleb128(LexState *ls, uint32_t v) -{ - MSize n = ls->sb.n; - uint8_t *p = (uint8_t *)ls->sb.buf; - for (; v >= 0x80; v >>= 7) - p[n++] = (uint8_t)((v & 0x7f) | 0x80); - p[n++] = (uint8_t)v; - ls->sb.n = n; -} - -/* Prepare variable info for prototype. */ -static size_t fs_prep_var(LexState *ls, FuncState *fs, size_t *ofsvar) -{ - VarInfo *vs =ls->vstack, *ve; - MSize i, n; - BCPos lastpc; - lj_str_resetbuf(&ls->sb); /* Copy to temp. string buffer. */ - /* Store upvalue names. */ - for (i = 0, n = fs->nuv; i < n; i++) { - GCstr *s = strref(vs[fs->uvmap[i]].name); - MSize len = s->len+1; - fs_buf_need(ls, len); - fs_buf_str(ls, strdata(s), len); - } - *ofsvar = ls->sb.n; - lastpc = 0; - /* Store local variable names and compressed ranges. */ - for (ve = vs + ls->vtop, vs += fs->vbase; vs < ve; vs++) { - if (!gola_isgotolabel(vs)) { - GCstr *s = strref(vs->name); - BCPos startpc; - if ((uintptr_t)s < VARNAME__MAX) { - fs_buf_need(ls, 1 + 2*5); - ls->sb.buf[ls->sb.n++] = (uint8_t)(uintptr_t)s; - } else { - MSize len = s->len+1; - fs_buf_need(ls, len + 2*5); - fs_buf_str(ls, strdata(s), len); - } - startpc = vs->startpc; - fs_buf_uleb128(ls, startpc-lastpc); - fs_buf_uleb128(ls, vs->endpc-startpc); - lastpc = startpc; - } - } - fs_buf_need(ls, 1); - ls->sb.buf[ls->sb.n++] = '\0'; /* Terminator for varinfo. */ - return ls->sb.n; -} - -/* Fixup variable info for prototype. */ -static void fs_fixup_var(LexState *ls, GCproto *pt, uint8_t *p, size_t ofsvar) -{ - setmref(pt->uvinfo, p); - setmref(pt->varinfo, (char *)p + ofsvar); - memcpy(p, ls->sb.buf, ls->sb.n); /* Copy from temp. string buffer. */ -} -#else - -/* Initialize with empty debug info, if disabled. */ -#define fs_prep_line(fs, numline) (UNUSED(numline), 0) -#define fs_fixup_line(fs, pt, li, numline) \ - pt->firstline = pt->numline = 0, setmref((pt)->lineinfo, NULL) -#define fs_prep_var(ls, fs, ofsvar) (UNUSED(ofsvar), 0) -#define fs_fixup_var(ls, pt, p, ofsvar) \ - setmref((pt)->uvinfo, NULL), setmref((pt)->varinfo, NULL) - -#endif - -/* Check if bytecode op returns. */ -static int bcopisret(BCOp op) -{ - switch (op) { - case BC_CALLMT: case BC_CALLT: - case BC_RETM: case BC_RET: case BC_RET0: case BC_RET1: - return 1; - default: - return 0; - } -} - -/* Fixup return instruction for prototype. */ -static void fs_fixup_ret(FuncState *fs) -{ - BCPos lastpc = fs->pc; - if (lastpc <= fs->lasttarget || !bcopisret(bc_op(fs->bcbase[lastpc-1].ins))) { - if ((fs->bl->flags & FSCOPE_UPVAL)) - bcemit_AJ(fs, BC_UCLO, 0, 0); - bcemit_AD(fs, BC_RET0, 0, 1); /* Need final return. */ - } - fs->bl->flags |= FSCOPE_NOCLOSE; /* Handled above. */ - fscope_end(fs); - lua_assert(fs->bl == NULL); - /* May need to fixup returns encoded before first function was created. */ - if (fs->flags & PROTO_FIXUP_RETURN) { - BCPos pc; - for (pc = 1; pc < lastpc; pc++) { - BCIns ins = fs->bcbase[pc].ins; - BCPos offset; - switch (bc_op(ins)) { - case BC_CALLMT: case BC_CALLT: - case BC_RETM: case BC_RET: case BC_RET0: case BC_RET1: - offset = bcemit_INS(fs, ins); /* Copy original instruction. */ - fs->bcbase[offset].line = fs->bcbase[pc].line; - offset = offset-(pc+1)+BCBIAS_J; - if (offset > BCMAX_D) - err_syntax(fs->ls, LJ_ERR_XFIXUP); - /* Replace with UCLO plus branch. */ - fs->bcbase[pc].ins = BCINS_AD(BC_UCLO, 0, offset); - break; - case BC_UCLO: - return; /* We're done. */ - default: - break; - } - } - } -} - -/* Finish a FuncState and return the new prototype. */ -static GCproto *fs_finish(LexState *ls, BCLine line) -{ - lua_State *L = ls->L; - FuncState *fs = ls->fs; - BCLine numline = line - fs->linedefined; - size_t sizept, ofsk, ofsuv, ofsli, ofsdbg, ofsvar; - GCproto *pt; - - /* Apply final fixups. */ - fs_fixup_ret(fs); - - /* Calculate total size of prototype including all colocated arrays. */ - sizept = sizeof(GCproto) + fs->pc*sizeof(BCIns) + fs->nkgc*sizeof(GCRef); - sizept = (sizept + sizeof(TValue)-1) & ~(sizeof(TValue)-1); - ofsk = sizept; sizept += fs->nkn*sizeof(TValue); - ofsuv = sizept; sizept += ((fs->nuv+1)&~1)*2; - ofsli = sizept; sizept += fs_prep_line(fs, numline); - ofsdbg = sizept; sizept += fs_prep_var(ls, fs, &ofsvar); - - /* Allocate prototype and initialize its fields. */ - pt = (GCproto *)lj_mem_newgco(L, (MSize)sizept); - pt->gct = ~LJ_TPROTO; - pt->sizept = (MSize)sizept; - pt->trace = 0; - pt->flags = (uint8_t)(fs->flags & ~(PROTO_HAS_RETURN|PROTO_FIXUP_RETURN)); - pt->numparams = fs->numparams; - pt->framesize = fs->framesize; - setgcref(pt->chunkname, obj2gco(ls->chunkname)); - - /* Close potentially uninitialized gap between bc and kgc. */ - *(uint32_t *)((char *)pt + ofsk - sizeof(GCRef)*(fs->nkgc+1)) = 0; - fs_fixup_bc(fs, pt, (BCIns *)((char *)pt + sizeof(GCproto)), fs->pc); - fs_fixup_k(fs, pt, (void *)((char *)pt + ofsk)); - fs_fixup_uv1(fs, pt, (uint16_t *)((char *)pt + ofsuv)); - fs_fixup_line(fs, pt, (void *)((char *)pt + ofsli), numline); - fs_fixup_var(ls, pt, (uint8_t *)((char *)pt + ofsdbg), ofsvar); - - lj_vmevent_send(L, BC, - setprotoV(L, L->top++, pt); - ); - - L->top--; /* Pop table of constants. */ - ls->vtop = fs->vbase; /* Reset variable stack. */ - ls->fs = fs->prev; - lua_assert(ls->fs != NULL || ls->token == TK_eof); - return pt; -} - -/* Initialize a new FuncState. */ -static void fs_init(LexState *ls, FuncState *fs) -{ - lua_State *L = ls->L; - fs->prev = ls->fs; ls->fs = fs; /* Append to list. */ - fs->ls = ls; - fs->vbase = ls->vtop; - fs->L = L; - fs->pc = 0; - fs->lasttarget = 0; - fs->jpc = NO_JMP; - fs->freereg = 0; - fs->nkgc = 0; - fs->nkn = 0; - fs->nactvar = 0; - fs->nuv = 0; - fs->bl = NULL; - fs->flags = 0; - fs->framesize = 1; /* Minimum frame size. */ - fs->kt = lj_tab_new(L, 0, 0); - /* Anchor table of constants in stack to avoid being collected. */ - settabV(L, L->top, fs->kt); - incr_top(L); -} - -/* -- Expressions --------------------------------------------------------- */ - -/* Forward declaration. */ -static void expr(LexState *ls, ExpDesc *v); - -/* Return string expression. */ -static void expr_str(LexState *ls, ExpDesc *e) -{ - expr_init(e, VKSTR, 0); - e->u.sval = lex_str(ls); -} - -/* Return index expression. */ -static void expr_index(FuncState *fs, ExpDesc *t, ExpDesc *e) -{ - /* Already called: expr_toval(fs, e). */ - t->k = VINDEXED; - if (expr_isnumk(e)) { -#if LJ_DUALNUM - if (tvisint(expr_numtv(e))) { - int32_t k = intV(expr_numtv(e)); - if (checku8(k)) { - t->u.s.aux = BCMAX_C+1+(uint32_t)k; /* 256..511: const byte key */ - return; - } - } -#else - lua_Number n = expr_numberV(e); - int32_t k = lj_num2int(n); - if (checku8(k) && n == (lua_Number)k) { - t->u.s.aux = BCMAX_C+1+(uint32_t)k; /* 256..511: const byte key */ - return; - } -#endif - } else if (expr_isstrk(e)) { - BCReg idx = const_str(fs, e); - if (idx <= BCMAX_C) { - t->u.s.aux = ~idx; /* -256..-1: const string key */ - return; - } - } - t->u.s.aux = expr_toanyreg(fs, e); /* 0..255: register */ -} - -/* Parse index expression with named field. */ -static void expr_field(LexState *ls, ExpDesc *v) -{ - FuncState *fs = ls->fs; - ExpDesc key; - expr_toanyreg(fs, v); - lj_lex_next(ls); /* Skip dot or colon. */ - expr_str(ls, &key); - expr_index(fs, v, &key); -} - -/* Parse index expression with brackets. */ -static void expr_bracket(LexState *ls, ExpDesc *v) -{ - lj_lex_next(ls); /* Skip '['. */ - expr(ls, v); - expr_toval(ls->fs, v); - lex_check(ls, ']'); -} - -/* Get value of constant expression. */ -static void expr_kvalue(TValue *v, ExpDesc *e) -{ - if (e->k <= VKTRUE) { - setitype(v, ~(uint32_t)e->k); - } else if (e->k == VKSTR) { - setgcref(v->gcr, obj2gco(e->u.sval)); - setitype(v, LJ_TSTR); - } else { - lua_assert(tvisnumber(expr_numtv(e))); - *v = *expr_numtv(e); - } -} - -/* Parse table constructor expression. */ -static void expr_table(LexState *ls, ExpDesc *e) -{ - FuncState *fs = ls->fs; - BCLine line = ls->linenumber; - GCtab *t = NULL; - int vcall = 0, needarr = 0, fixt = 0; - uint32_t narr = 1; /* First array index. */ - uint32_t nhash = 0; /* Number of hash entries. */ - BCReg freg = fs->freereg; - BCPos pc = bcemit_AD(fs, BC_TNEW, freg, 0); - expr_init(e, VNONRELOC, freg); - bcreg_reserve(fs, 1); - freg++; - lex_check(ls, '{'); - while (ls->token != '}') { - ExpDesc key, val; - vcall = 0; - if (ls->token == '[') { - expr_bracket(ls, &key); /* Already calls expr_toval. */ - if (!expr_isk(&key)) expr_index(fs, e, &key); - if (expr_isnumk(&key) && expr_numiszero(&key)) needarr = 1; else nhash++; - lex_check(ls, '='); - } else if ((ls->token == TK_name || (!LJ_52 && ls->token == TK_goto)) && - lj_lex_lookahead(ls) == '=') { - expr_str(ls, &key); - lex_check(ls, '='); - nhash++; - } else { - expr_init(&key, VKNUM, 0); - setintV(&key.u.nval, (int)narr); - narr++; - needarr = vcall = 1; - } - expr(ls, &val); - if (expr_isk(&key) && key.k != VKNIL && - (key.k == VKSTR || expr_isk_nojump(&val))) { - TValue k, *v; - if (!t) { /* Create template table on demand. */ - BCReg kidx; - t = lj_tab_new(fs->L, needarr ? narr : 0, hsize2hbits(nhash)); - kidx = const_gc(fs, obj2gco(t), LJ_TTAB); - fs->bcbase[pc].ins = BCINS_AD(BC_TDUP, freg-1, kidx); - } - vcall = 0; - expr_kvalue(&k, &key); - v = lj_tab_set(fs->L, t, &k); - lj_gc_anybarriert(fs->L, t); - if (expr_isk_nojump(&val)) { /* Add const key/value to template table. */ - expr_kvalue(v, &val); - } else { /* Otherwise create dummy string key (avoids lj_tab_newkey). */ - settabV(fs->L, v, t); /* Preserve key with table itself as value. */ - fixt = 1; /* Fix this later, after all resizes. */ - goto nonconst; - } - } else { - nonconst: - if (val.k != VCALL) { expr_toanyreg(fs, &val); vcall = 0; } - if (expr_isk(&key)) expr_index(fs, e, &key); - bcemit_store(fs, e, &val); - } - fs->freereg = freg; - if (!lex_opt(ls, ',') && !lex_opt(ls, ';')) break; - } - lex_match(ls, '}', '{', line); - if (vcall) { - BCInsLine *ilp = &fs->bcbase[fs->pc-1]; - ExpDesc en; - lua_assert(bc_a(ilp->ins) == freg && - bc_op(ilp->ins) == (narr > 256 ? BC_TSETV : BC_TSETB)); - expr_init(&en, VKNUM, 0); - en.u.nval.u32.lo = narr-1; - en.u.nval.u32.hi = 0x43300000; /* Biased integer to avoid denormals. */ - if (narr > 256) { fs->pc--; ilp--; } - ilp->ins = BCINS_AD(BC_TSETM, freg, const_num(fs, &en)); - setbc_b(&ilp[-1].ins, 0); - } - if (pc == fs->pc-1) { /* Make expr relocable if possible. */ - e->u.s.info = pc; - fs->freereg--; - e->k = VRELOCABLE; - } else { - e->k = VNONRELOC; /* May have been changed by expr_index. */ - } - if (!t) { /* Construct TNEW RD: hhhhhaaaaaaaaaaa. */ - BCIns *ip = &fs->bcbase[pc].ins; - if (!needarr) narr = 0; - else if (narr < 3) narr = 3; - else if (narr > 0x7ff) narr = 0x7ff; - setbc_d(ip, narr|(hsize2hbits(nhash)<<11)); - } else { - if (needarr && t->asize < narr) - lj_tab_reasize(fs->L, t, narr-1); - if (fixt) { /* Fix value for dummy keys in template table. */ - Node *node = noderef(t->node); - uint32_t i, hmask = t->hmask; - for (i = 0; i <= hmask; i++) { - Node *n = &node[i]; - if (tvistab(&n->val)) { - lua_assert(tabV(&n->val) == t); - setnilV(&n->val); /* Turn value into nil. */ - } - } - } - lj_gc_check(fs->L); - } -} - -/* Parse function parameters. */ -static BCReg parse_params(LexState *ls, int needself) -{ - FuncState *fs = ls->fs; - BCReg nparams = 0; - lex_check(ls, '('); - if (needself) - var_new_lit(ls, nparams++, "self"); - if (ls->token != ')') { - do { - if (ls->token == TK_name || (!LJ_52 && ls->token == TK_goto)) { - var_new(ls, nparams++, lex_str(ls)); - } else if (ls->token == TK_dots) { - lj_lex_next(ls); - fs->flags |= PROTO_VARARG; - break; - } else { - err_syntax(ls, LJ_ERR_XPARAM); - } - } while (lex_opt(ls, ',')); - } - var_add(ls, nparams); - lua_assert(fs->nactvar == nparams); - bcreg_reserve(fs, nparams); - lex_check(ls, ')'); - return nparams; -} - -/* Forward declaration. */ -static void parse_chunk(LexState *ls); - -/* Parse body of a function. */ -static void parse_body(LexState *ls, ExpDesc *e, int needself, BCLine line) -{ - FuncState fs, *pfs = ls->fs; - FuncScope bl; - GCproto *pt; - ptrdiff_t oldbase = pfs->bcbase - ls->bcstack; - fs_init(ls, &fs); - fscope_begin(&fs, &bl, 0); - fs.linedefined = line; - fs.numparams = (uint8_t)parse_params(ls, needself); - fs.bcbase = pfs->bcbase + pfs->pc; - fs.bclim = pfs->bclim - pfs->pc; - bcemit_AD(&fs, BC_FUNCF, 0, 0); /* Placeholder. */ - parse_chunk(ls); - if (ls->token != TK_end) lex_match(ls, TK_end, TK_function, line); - pt = fs_finish(ls, (ls->lastline = ls->linenumber)); - pfs->bcbase = ls->bcstack + oldbase; /* May have been reallocated. */ - pfs->bclim = (BCPos)(ls->sizebcstack - oldbase); - /* Store new prototype in the constant array of the parent. */ - expr_init(e, VRELOCABLE, - bcemit_AD(pfs, BC_FNEW, 0, const_gc(pfs, obj2gco(pt), LJ_TPROTO))); -#if LJ_HASFFI - pfs->flags |= (fs.flags & PROTO_FFI); -#endif - if (!(pfs->flags & PROTO_CHILD)) { - if (pfs->flags & PROTO_HAS_RETURN) - pfs->flags |= PROTO_FIXUP_RETURN; - pfs->flags |= PROTO_CHILD; - } - lj_lex_next(ls); -} - -/* Parse expression list. Last expression is left open. */ -static BCReg expr_list(LexState *ls, ExpDesc *v) -{ - BCReg n = 1; - expr(ls, v); - while (lex_opt(ls, ',')) { - expr_tonextreg(ls->fs, v); - expr(ls, v); - n++; - } - return n; -} - -/* Parse function argument list. */ -static void parse_args(LexState *ls, ExpDesc *e) -{ - FuncState *fs = ls->fs; - ExpDesc args; - BCIns ins; - BCReg base; - BCLine line = ls->linenumber; - if (ls->token == '(') { -#if !LJ_52 - if (line != ls->lastline) - err_syntax(ls, LJ_ERR_XAMBIG); -#endif - lj_lex_next(ls); - if (ls->token == ')') { /* f(). */ - args.k = VVOID; - } else { - expr_list(ls, &args); - if (args.k == VCALL) /* f(a, b, g()) or f(a, b, ...). */ - setbc_b(bcptr(fs, &args), 0); /* Pass on multiple results. */ - } - lex_match(ls, ')', '(', line); - } else if (ls->token == '{') { - expr_table(ls, &args); - } else if (ls->token == TK_string) { - expr_init(&args, VKSTR, 0); - args.u.sval = strV(&ls->tokenval); - lj_lex_next(ls); - } else { - err_syntax(ls, LJ_ERR_XFUNARG); - return; /* Silence compiler. */ - } - lua_assert(e->k == VNONRELOC); - base = e->u.s.info; /* Base register for call. */ - if (args.k == VCALL) { - ins = BCINS_ABC(BC_CALLM, base, 2, args.u.s.aux - base - 1); - } else { - if (args.k != VVOID) - expr_tonextreg(fs, &args); - ins = BCINS_ABC(BC_CALL, base, 2, fs->freereg - base); - } - expr_init(e, VCALL, bcemit_INS(fs, ins)); - e->u.s.aux = base; - fs->bcbase[fs->pc - 1].line = line; - fs->freereg = base+1; /* Leave one result by default. */ -} - -/* Parse primary expression. */ -static void expr_primary(LexState *ls, ExpDesc *v) -{ - FuncState *fs = ls->fs; - /* Parse prefix expression. */ - if (ls->token == '(') { - BCLine line = ls->linenumber; - lj_lex_next(ls); - expr(ls, v); - lex_match(ls, ')', '(', line); - expr_discharge(ls->fs, v); - } else if (ls->token == TK_name || (!LJ_52 && ls->token == TK_goto)) { - var_lookup(ls, v); - } else { - err_syntax(ls, LJ_ERR_XSYMBOL); - } - for (;;) { /* Parse multiple expression suffixes. */ - if (ls->token == '.') { - expr_field(ls, v); - } else if (ls->token == '[') { - ExpDesc key; - expr_toanyreg(fs, v); - expr_bracket(ls, &key); - expr_index(fs, v, &key); - } else if (ls->token == ':') { - ExpDesc key; - lj_lex_next(ls); - expr_str(ls, &key); - bcemit_method(fs, v, &key); - parse_args(ls, v); - } else if (ls->token == '(' || ls->token == TK_string || ls->token == '{') { - expr_tonextreg(fs, v); - parse_args(ls, v); - } else { - break; - } - } -} - -/* Parse simple expression. */ -static void expr_simple(LexState *ls, ExpDesc *v) -{ - switch (ls->token) { - case TK_number: - expr_init(v, (LJ_HASFFI && tviscdata(&ls->tokenval)) ? VKCDATA : VKNUM, 0); - copyTV(ls->L, &v->u.nval, &ls->tokenval); - break; - case TK_string: - expr_init(v, VKSTR, 0); - v->u.sval = strV(&ls->tokenval); - break; - case TK_nil: - expr_init(v, VKNIL, 0); - break; - case TK_true: - expr_init(v, VKTRUE, 0); - break; - case TK_false: - expr_init(v, VKFALSE, 0); - break; - case TK_dots: { /* Vararg. */ - FuncState *fs = ls->fs; - BCReg base; - checkcond(ls, fs->flags & PROTO_VARARG, LJ_ERR_XDOTS); - bcreg_reserve(fs, 1); - base = fs->freereg-1; - expr_init(v, VCALL, bcemit_ABC(fs, BC_VARG, base, 2, fs->numparams)); - v->u.s.aux = base; - break; - } - case '{': /* Table constructor. */ - expr_table(ls, v); - return; - case TK_function: - lj_lex_next(ls); - parse_body(ls, v, 0, ls->linenumber); - return; - default: - expr_primary(ls, v); - return; - } - lj_lex_next(ls); -} - -/* Manage syntactic levels to avoid blowing up the stack. */ -static void synlevel_begin(LexState *ls) -{ - if (++ls->level >= LJ_MAX_XLEVEL) - lj_lex_error(ls, 0, LJ_ERR_XLEVELS); -} - -#define synlevel_end(ls) ((ls)->level--) - -/* Convert token to binary operator. */ -static BinOpr token2binop(LexToken tok) -{ - switch (tok) { - case '+': return OPR_ADD; - case '-': return OPR_SUB; - case '*': return OPR_MUL; - case '/': return OPR_DIV; - case '%': return OPR_MOD; - case '^': return OPR_POW; - case TK_concat: return OPR_CONCAT; - case TK_ne: return OPR_NE; - case TK_eq: return OPR_EQ; - case '<': return OPR_LT; - case TK_le: return OPR_LE; - case '>': return OPR_GT; - case TK_ge: return OPR_GE; - case TK_and: return OPR_AND; - case TK_or: return OPR_OR; - default: return OPR_NOBINOPR; - } -} - -/* Priorities for each binary operator. ORDER OPR. */ -static const struct { - uint8_t left; /* Left priority. */ - uint8_t right; /* Right priority. */ -} priority[] = { - {6,6}, {6,6}, {7,7}, {7,7}, {7,7}, /* ADD SUB MUL DIV MOD */ - {10,9}, {5,4}, /* POW CONCAT (right associative) */ - {3,3}, {3,3}, /* EQ NE */ - {3,3}, {3,3}, {3,3}, {3,3}, /* LT GE GT LE */ - {2,2}, {1,1} /* AND OR */ -}; - -#define UNARY_PRIORITY 8 /* Priority for unary operators. */ - -/* Forward declaration. */ -static BinOpr expr_binop(LexState *ls, ExpDesc *v, uint32_t limit); - -/* Parse unary expression. */ -static void expr_unop(LexState *ls, ExpDesc *v) -{ - BCOp op; - if (ls->token == TK_not) { - op = BC_NOT; - } else if (ls->token == '-') { - op = BC_UNM; - } else if (ls->token == '#') { - op = BC_LEN; - } else { - expr_simple(ls, v); - return; - } - lj_lex_next(ls); - expr_binop(ls, v, UNARY_PRIORITY); - bcemit_unop(ls->fs, op, v); -} - -/* Parse binary expressions with priority higher than the limit. */ -static BinOpr expr_binop(LexState *ls, ExpDesc *v, uint32_t limit) -{ - BinOpr op; - synlevel_begin(ls); - expr_unop(ls, v); - op = token2binop(ls->token); - while (op != OPR_NOBINOPR && priority[op].left > limit) { - ExpDesc v2; - BinOpr nextop; - lj_lex_next(ls); - bcemit_binop_left(ls->fs, op, v); - /* Parse binary expression with higher priority. */ - nextop = expr_binop(ls, &v2, priority[op].right); - bcemit_binop(ls->fs, op, v, &v2); - op = nextop; - } - synlevel_end(ls); - return op; /* Return unconsumed binary operator (if any). */ -} - -/* Parse expression. */ -static void expr(LexState *ls, ExpDesc *v) -{ - expr_binop(ls, v, 0); /* Priority 0: parse whole expression. */ -} - -/* Assign expression to the next register. */ -static void expr_next(LexState *ls) -{ - ExpDesc e; - expr(ls, &e); - expr_tonextreg(ls->fs, &e); -} - -/* Parse conditional expression. */ -static BCPos expr_cond(LexState *ls) -{ - ExpDesc v; - expr(ls, &v); - if (v.k == VKNIL) v.k = VKFALSE; - bcemit_branch_t(ls->fs, &v); - return v.f; -} - -/* -- Assignments --------------------------------------------------------- */ - -/* List of LHS variables. */ -typedef struct LHSVarList { - ExpDesc v; /* LHS variable. */ - struct LHSVarList *prev; /* Link to previous LHS variable. */ -} LHSVarList; - -/* Eliminate write-after-read hazards for local variable assignment. */ -static void assign_hazard(LexState *ls, LHSVarList *lh, const ExpDesc *v) -{ - FuncState *fs = ls->fs; - BCReg reg = v->u.s.info; /* Check against this variable. */ - BCReg tmp = fs->freereg; /* Rename to this temp. register (if needed). */ - int hazard = 0; - for (; lh; lh = lh->prev) { - if (lh->v.k == VINDEXED) { - if (lh->v.u.s.info == reg) { /* t[i], t = 1, 2 */ - hazard = 1; - lh->v.u.s.info = tmp; - } - if (lh->v.u.s.aux == reg) { /* t[i], i = 1, 2 */ - hazard = 1; - lh->v.u.s.aux = tmp; - } - } - } - if (hazard) { - bcemit_AD(fs, BC_MOV, tmp, reg); /* Rename conflicting variable. */ - bcreg_reserve(fs, 1); - } -} - -/* Adjust LHS/RHS of an assignment. */ -static void assign_adjust(LexState *ls, BCReg nvars, BCReg nexps, ExpDesc *e) -{ - FuncState *fs = ls->fs; - int32_t extra = (int32_t)nvars - (int32_t)nexps; - if (e->k == VCALL) { - extra++; /* Compensate for the VCALL itself. */ - if (extra < 0) extra = 0; - setbc_b(bcptr(fs, e), extra+1); /* Fixup call results. */ - if (extra > 1) bcreg_reserve(fs, (BCReg)extra-1); - } else { - if (e->k != VVOID) - expr_tonextreg(fs, e); /* Close last expression. */ - if (extra > 0) { /* Leftover LHS are set to nil. */ - BCReg reg = fs->freereg; - bcreg_reserve(fs, (BCReg)extra); - bcemit_nil(fs, reg, (BCReg)extra); - } - } -} - -/* Recursively parse assignment statement. */ -static void parse_assignment(LexState *ls, LHSVarList *lh, BCReg nvars) -{ - ExpDesc e; - checkcond(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED, LJ_ERR_XSYNTAX); - if (lex_opt(ls, ',')) { /* Collect LHS list and recurse upwards. */ - LHSVarList vl; - vl.prev = lh; - expr_primary(ls, &vl.v); - if (vl.v.k == VLOCAL) - assign_hazard(ls, lh, &vl.v); - checklimit(ls->fs, ls->level + nvars, LJ_MAX_XLEVEL, "variable names"); - parse_assignment(ls, &vl, nvars+1); - } else { /* Parse RHS. */ - BCReg nexps; - lex_check(ls, '='); - nexps = expr_list(ls, &e); - if (nexps == nvars) { - if (e.k == VCALL) { - if (bc_op(*bcptr(ls->fs, &e)) == BC_VARG) { /* Vararg assignment. */ - ls->fs->freereg--; - e.k = VRELOCABLE; - } else { /* Multiple call results. */ - e.u.s.info = e.u.s.aux; /* Base of call is not relocatable. */ - e.k = VNONRELOC; - } - } - bcemit_store(ls->fs, &lh->v, &e); - return; - } - assign_adjust(ls, nvars, nexps, &e); - if (nexps > nvars) - ls->fs->freereg -= nexps - nvars; /* Drop leftover regs. */ - } - /* Assign RHS to LHS and recurse downwards. */ - expr_init(&e, VNONRELOC, ls->fs->freereg-1); - bcemit_store(ls->fs, &lh->v, &e); -} - -/* Parse call statement or assignment. */ -static void parse_call_assign(LexState *ls) -{ - FuncState *fs = ls->fs; - LHSVarList vl; - expr_primary(ls, &vl.v); - if (vl.v.k == VCALL) { /* Function call statement. */ - setbc_b(bcptr(fs, &vl.v), 1); /* No results. */ - } else { /* Start of an assignment. */ - vl.prev = NULL; - parse_assignment(ls, &vl, 1); - } -} - -/* Parse 'local' statement. */ -static void parse_local(LexState *ls) -{ - if (lex_opt(ls, TK_function)) { /* Local function declaration. */ - ExpDesc v, b; - FuncState *fs = ls->fs; - var_new(ls, 0, lex_str(ls)); - expr_init(&v, VLOCAL, fs->freereg); - v.u.s.aux = fs->varmap[fs->freereg]; - bcreg_reserve(fs, 1); - var_add(ls, 1); - parse_body(ls, &b, 0, ls->linenumber); - /* bcemit_store(fs, &v, &b) without setting VSTACK_VAR_RW. */ - expr_free(fs, &b); - expr_toreg(fs, &b, v.u.s.info); - /* The upvalue is in scope, but the local is only valid after the store. */ - var_get(ls, fs, fs->nactvar - 1).startpc = fs->pc; - } else { /* Local variable declaration. */ - ExpDesc e; - BCReg nexps, nvars = 0; - do { /* Collect LHS. */ - var_new(ls, nvars++, lex_str(ls)); - } while (lex_opt(ls, ',')); - if (lex_opt(ls, '=')) { /* Optional RHS. */ - nexps = expr_list(ls, &e); - } else { /* Or implicitly set to nil. */ - e.k = VVOID; - nexps = 0; - } - assign_adjust(ls, nvars, nexps, &e); - var_add(ls, nvars); - } -} - -/* Parse 'function' statement. */ -static void parse_func(LexState *ls, BCLine line) -{ - FuncState *fs; - ExpDesc v, b; - int needself = 0; - lj_lex_next(ls); /* Skip 'function'. */ - /* Parse function name. */ - var_lookup(ls, &v); - while (ls->token == '.') /* Multiple dot-separated fields. */ - expr_field(ls, &v); - if (ls->token == ':') { /* Optional colon to signify method call. */ - needself = 1; - expr_field(ls, &v); - } - parse_body(ls, &b, needself, line); - fs = ls->fs; - bcemit_store(fs, &v, &b); - fs->bcbase[fs->pc - 1].line = line; /* Set line for the store. */ -} - -/* -- Control transfer statements ----------------------------------------- */ - -/* Check for end of block. */ -static int endofblock(LexToken token) -{ - switch (token) { - case TK_else: case TK_elseif: case TK_end: case TK_until: case TK_eof: - return 1; - default: - return 0; - } -} - -/* Parse 'return' statement. */ -static void parse_return(LexState *ls) -{ - BCIns ins; - FuncState *fs = ls->fs; - lj_lex_next(ls); /* Skip 'return'. */ - fs->flags |= PROTO_HAS_RETURN; - if (endofblock(ls->token) || ls->token == ';') { /* Bare return. */ - ins = BCINS_AD(BC_RET0, 0, 1); - } else { /* Return with one or more values. */ - ExpDesc e; /* Receives the _last_ expression in the list. */ - BCReg nret = expr_list(ls, &e); - if (nret == 1) { /* Return one result. */ - if (e.k == VCALL) { /* Check for tail call. */ - BCIns *ip = bcptr(fs, &e); - /* It doesn't pay off to add BC_VARGT just for 'return ...'. */ - if (bc_op(*ip) == BC_VARG) goto notailcall; - fs->pc--; - ins = BCINS_AD(bc_op(*ip)-BC_CALL+BC_CALLT, bc_a(*ip), bc_c(*ip)); - } else { /* Can return the result from any register. */ - ins = BCINS_AD(BC_RET1, expr_toanyreg(fs, &e), 2); - } - } else { - if (e.k == VCALL) { /* Append all results from a call. */ - notailcall: - setbc_b(bcptr(fs, &e), 0); - ins = BCINS_AD(BC_RETM, fs->nactvar, e.u.s.aux - fs->nactvar); - } else { - expr_tonextreg(fs, &e); /* Force contiguous registers. */ - ins = BCINS_AD(BC_RET, fs->nactvar, nret+1); - } - } - } - if (fs->flags & PROTO_CHILD) - bcemit_AJ(fs, BC_UCLO, 0, 0); /* May need to close upvalues first. */ - bcemit_INS(fs, ins); -} - -/* Parse 'break' statement. */ -static void parse_break(LexState *ls) -{ - ls->fs->bl->flags |= FSCOPE_BREAK; - gola_new(ls, NAME_BREAK, VSTACK_GOTO, bcemit_jmp(ls->fs)); -} - -/* Parse 'goto' statement. */ -static void parse_goto(LexState *ls) -{ - FuncState *fs = ls->fs; - GCstr *name = lex_str(ls); - VarInfo *vl = gola_findlabel(ls, name); - if (vl) /* Treat backwards goto within same scope like a loop. */ - bcemit_AJ(fs, BC_LOOP, vl->slot, -1); /* No BC range check. */ - fs->bl->flags |= FSCOPE_GOLA; - gola_new(ls, name, VSTACK_GOTO, bcemit_jmp(fs)); -} - -/* Parse label. */ -static void parse_label(LexState *ls) -{ - FuncState *fs = ls->fs; - GCstr *name; - MSize idx; - fs->lasttarget = fs->pc; - fs->bl->flags |= FSCOPE_GOLA; - lj_lex_next(ls); /* Skip '::'. */ - name = lex_str(ls); - if (gola_findlabel(ls, name)) - lj_lex_error(ls, 0, LJ_ERR_XLDUP, strdata(name)); - idx = gola_new(ls, name, VSTACK_LABEL, fs->pc); - lex_check(ls, TK_label); - /* Recursively parse trailing statements: labels and ';' (Lua 5.2 only). */ - for (;;) { - if (ls->token == TK_label) { - synlevel_begin(ls); - parse_label(ls); - synlevel_end(ls); - } else if (LJ_52 && ls->token == ';') { - lj_lex_next(ls); - } else { - break; - } - } - /* Trailing label is considered to be outside of scope. */ - if (endofblock(ls->token) && ls->token != TK_until) - ls->vstack[idx].slot = fs->bl->nactvar; - gola_resolve(ls, fs->bl, idx); -} - -/* -- Blocks, loops and conditional statements ---------------------------- */ - -/* Parse a block. */ -static void parse_block(LexState *ls) -{ - FuncState *fs = ls->fs; - FuncScope bl; - fscope_begin(fs, &bl, 0); - parse_chunk(ls); - fscope_end(fs); -} - -/* Parse 'while' statement. */ -static void parse_while(LexState *ls, BCLine line) -{ - FuncState *fs = ls->fs; - BCPos start, loop, condexit; - FuncScope bl; - lj_lex_next(ls); /* Skip 'while'. */ - start = fs->lasttarget = fs->pc; - condexit = expr_cond(ls); - fscope_begin(fs, &bl, FSCOPE_LOOP); - lex_check(ls, TK_do); - loop = bcemit_AD(fs, BC_LOOP, fs->nactvar, 0); - parse_block(ls); - jmp_patch(fs, bcemit_jmp(fs), start); - lex_match(ls, TK_end, TK_while, line); - fscope_end(fs); - jmp_tohere(fs, condexit); - jmp_patchins(fs, loop, fs->pc); -} - -/* Parse 'repeat' statement. */ -static void parse_repeat(LexState *ls, BCLine line) -{ - FuncState *fs = ls->fs; - BCPos loop = fs->lasttarget = fs->pc; - BCPos condexit; - FuncScope bl1, bl2; - fscope_begin(fs, &bl1, FSCOPE_LOOP); /* Breakable loop scope. */ - fscope_begin(fs, &bl2, 0); /* Inner scope. */ - lj_lex_next(ls); /* Skip 'repeat'. */ - bcemit_AD(fs, BC_LOOP, fs->nactvar, 0); - parse_chunk(ls); - lex_match(ls, TK_until, TK_repeat, line); - condexit = expr_cond(ls); /* Parse condition (still inside inner scope). */ - if (!(bl2.flags & FSCOPE_UPVAL)) { /* No upvalues? Just end inner scope. */ - fscope_end(fs); - } else { /* Otherwise generate: cond: UCLO+JMP out, !cond: UCLO+JMP loop. */ - parse_break(ls); /* Break from loop and close upvalues. */ - jmp_tohere(fs, condexit); - fscope_end(fs); /* End inner scope and close upvalues. */ - condexit = bcemit_jmp(fs); - } - jmp_patch(fs, condexit, loop); /* Jump backwards if !cond. */ - jmp_patchins(fs, loop, fs->pc); - fscope_end(fs); /* End loop scope. */ -} - -/* Parse numeric 'for'. */ -static void parse_for_num(LexState *ls, GCstr *varname, BCLine line) -{ - FuncState *fs = ls->fs; - BCReg base = fs->freereg; - FuncScope bl; - BCPos loop, loopend; - /* Hidden control variables. */ - var_new_fixed(ls, FORL_IDX, VARNAME_FOR_IDX); - var_new_fixed(ls, FORL_STOP, VARNAME_FOR_STOP); - var_new_fixed(ls, FORL_STEP, VARNAME_FOR_STEP); - /* Visible copy of index variable. */ - var_new(ls, FORL_EXT, varname); - lex_check(ls, '='); - expr_next(ls); - lex_check(ls, ','); - expr_next(ls); - if (lex_opt(ls, ',')) { - expr_next(ls); - } else { - bcemit_AD(fs, BC_KSHORT, fs->freereg, 1); /* Default step is 1. */ - bcreg_reserve(fs, 1); - } - var_add(ls, 3); /* Hidden control variables. */ - lex_check(ls, TK_do); - loop = bcemit_AJ(fs, BC_FORI, base, NO_JMP); - fscope_begin(fs, &bl, 0); /* Scope for visible variables. */ - var_add(ls, 1); - bcreg_reserve(fs, 1); - parse_block(ls); - fscope_end(fs); - /* Perform loop inversion. Loop control instructions are at the end. */ - loopend = bcemit_AJ(fs, BC_FORL, base, NO_JMP); - fs->bcbase[loopend].line = line; /* Fix line for control ins. */ - jmp_patchins(fs, loopend, loop+1); - jmp_patchins(fs, loop, fs->pc); -} - -/* Try to predict whether the iterator is next() and specialize the bytecode. -** Detecting next() and pairs() by name is simplistic, but quite effective. -** The interpreter backs off if the check for the closure fails at runtime. -*/ -static int predict_next(LexState *ls, FuncState *fs, BCPos pc) -{ - BCIns ins = fs->bcbase[pc].ins; - GCstr *name; - cTValue *o; - switch (bc_op(ins)) { - case BC_MOV: - name = gco2str(gcref(var_get(ls, fs, bc_d(ins)).name)); - break; - case BC_UGET: - name = gco2str(gcref(ls->vstack[fs->uvmap[bc_d(ins)]].name)); - break; - case BC_GGET: - /* There's no inverse index (yet), so lookup the strings. */ - o = lj_tab_getstr(fs->kt, lj_str_newlit(ls->L, "pairs")); - if (o && tvhaskslot(o) && tvkslot(o) == bc_d(ins)) - return 1; - o = lj_tab_getstr(fs->kt, lj_str_newlit(ls->L, "next")); - if (o && tvhaskslot(o) && tvkslot(o) == bc_d(ins)) - return 1; - return 0; - default: - return 0; - } - return (name->len == 5 && !strcmp(strdata(name), "pairs")) || - (name->len == 4 && !strcmp(strdata(name), "next")); -} - -/* Parse 'for' iterator. */ -static void parse_for_iter(LexState *ls, GCstr *indexname) -{ - FuncState *fs = ls->fs; - ExpDesc e; - BCReg nvars = 0; - BCLine line; - BCReg base = fs->freereg + 3; - BCPos loop, loopend, exprpc = fs->pc; - FuncScope bl; - int isnext; - /* Hidden control variables. */ - var_new_fixed(ls, nvars++, VARNAME_FOR_GEN); - var_new_fixed(ls, nvars++, VARNAME_FOR_STATE); - var_new_fixed(ls, nvars++, VARNAME_FOR_CTL); - /* Visible variables returned from iterator. */ - var_new(ls, nvars++, indexname); - while (lex_opt(ls, ',')) - var_new(ls, nvars++, lex_str(ls)); - lex_check(ls, TK_in); - line = ls->linenumber; - assign_adjust(ls, 3, expr_list(ls, &e), &e); - bcreg_bump(fs, 3); /* The iterator needs another 3 slots (func + 2 args). */ - isnext = (nvars <= 5 && predict_next(ls, fs, exprpc)); - var_add(ls, 3); /* Hidden control variables. */ - lex_check(ls, TK_do); - loop = bcemit_AJ(fs, isnext ? BC_ISNEXT : BC_JMP, base, NO_JMP); - fscope_begin(fs, &bl, 0); /* Scope for visible variables. */ - var_add(ls, nvars-3); - bcreg_reserve(fs, nvars-3); - parse_block(ls); - fscope_end(fs); - /* Perform loop inversion. Loop control instructions are at the end. */ - jmp_patchins(fs, loop, fs->pc); - bcemit_ABC(fs, isnext ? BC_ITERN : BC_ITERC, base, nvars-3+1, 2+1); - loopend = bcemit_AJ(fs, BC_ITERL, base, NO_JMP); - fs->bcbase[loopend-1].line = line; /* Fix line for control ins. */ - fs->bcbase[loopend].line = line; - jmp_patchins(fs, loopend, loop+1); -} - -/* Parse 'for' statement. */ -static void parse_for(LexState *ls, BCLine line) -{ - FuncState *fs = ls->fs; - GCstr *varname; - FuncScope bl; - fscope_begin(fs, &bl, FSCOPE_LOOP); - lj_lex_next(ls); /* Skip 'for'. */ - varname = lex_str(ls); /* Get first variable name. */ - if (ls->token == '=') - parse_for_num(ls, varname, line); - else if (ls->token == ',' || ls->token == TK_in) - parse_for_iter(ls, varname); - else - err_syntax(ls, LJ_ERR_XFOR); - lex_match(ls, TK_end, TK_for, line); - fscope_end(fs); /* Resolve break list. */ -} - -/* Parse condition and 'then' block. */ -static BCPos parse_then(LexState *ls) -{ - BCPos condexit; - lj_lex_next(ls); /* Skip 'if' or 'elseif'. */ - condexit = expr_cond(ls); - lex_check(ls, TK_then); - parse_block(ls); - return condexit; -} - -/* Parse 'if' statement. */ -static void parse_if(LexState *ls, BCLine line) -{ - FuncState *fs = ls->fs; - BCPos flist; - BCPos escapelist = NO_JMP; - flist = parse_then(ls); - while (ls->token == TK_elseif) { /* Parse multiple 'elseif' blocks. */ - jmp_append(fs, &escapelist, bcemit_jmp(fs)); - jmp_tohere(fs, flist); - flist = parse_then(ls); - } - if (ls->token == TK_else) { /* Parse optional 'else' block. */ - jmp_append(fs, &escapelist, bcemit_jmp(fs)); - jmp_tohere(fs, flist); - lj_lex_next(ls); /* Skip 'else'. */ - parse_block(ls); - } else { - jmp_append(fs, &escapelist, flist); - } - jmp_tohere(fs, escapelist); - lex_match(ls, TK_end, TK_if, line); -} - -/* -- Parse statements ---------------------------------------------------- */ - -/* Parse a statement. Returns 1 if it must be the last one in a chunk. */ -static int parse_stmt(LexState *ls) -{ - BCLine line = ls->linenumber; - switch (ls->token) { - case TK_if: - parse_if(ls, line); - break; - case TK_while: - parse_while(ls, line); - break; - case TK_do: - lj_lex_next(ls); - parse_block(ls); - lex_match(ls, TK_end, TK_do, line); - break; - case TK_for: - parse_for(ls, line); - break; - case TK_repeat: - parse_repeat(ls, line); - break; - case TK_function: - parse_func(ls, line); - break; - case TK_local: - lj_lex_next(ls); - parse_local(ls); - break; - case TK_return: - parse_return(ls); - return 1; /* Must be last. */ - case TK_break: - lj_lex_next(ls); - parse_break(ls); - return !LJ_52; /* Must be last in Lua 5.1. */ -#if LJ_52 - case ';': - lj_lex_next(ls); - break; -#endif - case TK_label: - parse_label(ls); - break; - case TK_goto: - if (LJ_52 || lj_lex_lookahead(ls) == TK_name) { - lj_lex_next(ls); - parse_goto(ls); - break; - } /* else: fallthrough */ - default: - parse_call_assign(ls); - break; - } - return 0; -} - -/* A chunk is a list of statements optionally separated by semicolons. */ -static void parse_chunk(LexState *ls) -{ - int islast = 0; - synlevel_begin(ls); - while (!islast && !endofblock(ls->token)) { - islast = parse_stmt(ls); - lex_opt(ls, ';'); - lua_assert(ls->fs->framesize >= ls->fs->freereg && - ls->fs->freereg >= ls->fs->nactvar); - ls->fs->freereg = ls->fs->nactvar; /* Free registers after each stmt. */ - } - synlevel_end(ls); -} - -/* Entry point of bytecode parser. */ -GCproto *lj_parse(LexState *ls) -{ - FuncState fs; - FuncScope bl; - GCproto *pt; - lua_State *L = ls->L; -#ifdef LUAJIT_DISABLE_DEBUGINFO - ls->chunkname = lj_str_newlit(L, "="); -#else - ls->chunkname = lj_str_newz(L, ls->chunkarg); -#endif - setstrV(L, L->top, ls->chunkname); /* Anchor chunkname string. */ - incr_top(L); - ls->level = 0; - fs_init(ls, &fs); - fs.linedefined = 0; - fs.numparams = 0; - fs.bcbase = NULL; - fs.bclim = 0; - fs.flags |= PROTO_VARARG; /* Main chunk is always a vararg func. */ - fscope_begin(&fs, &bl, 0); - bcemit_AD(&fs, BC_FUNCV, 0, 0); /* Placeholder. */ - lj_lex_next(ls); /* Read-ahead first token. */ - parse_chunk(ls); - if (ls->token != TK_eof) - err_token(ls, TK_eof); - pt = fs_finish(ls, ls->linenumber); - L->top--; /* Drop chunkname. */ - lua_assert(fs.prev == NULL); - lua_assert(ls->fs == NULL); - lua_assert(pt->sizeuv == 0); - return pt; -} - diff --git a/deps/luajit/src/lj_parse.h b/deps/luajit/src/lj_parse.h deleted file mode 100644 index dc4fd40..0000000 --- a/deps/luajit/src/lj_parse.h +++ /dev/null @@ -1,18 +0,0 @@ -/* -** Lua parser (source code -> bytecode). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_PARSE_H -#define _LJ_PARSE_H - -#include "lj_obj.h" -#include "lj_lex.h" - -LJ_FUNC GCproto *lj_parse(LexState *ls); -LJ_FUNC GCstr *lj_parse_keepstr(LexState *ls, const char *str, size_t l); -#if LJ_HASFFI -LJ_FUNC void lj_parse_keepcdata(LexState *ls, TValue *tv, GCcdata *cd); -#endif - -#endif diff --git a/deps/luajit/src/lj_record.c b/deps/luajit/src/lj_record.c deleted file mode 100644 index 843108c..0000000 --- a/deps/luajit/src/lj_record.c +++ /dev/null @@ -1,2252 +0,0 @@ -/* -** Trace recorder (bytecode -> SSA IR). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_record_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_meta.h" -#include "lj_frame.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#endif -#include "lj_bc.h" -#include "lj_ff.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_ircall.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_record.h" -#include "lj_ffrecord.h" -#include "lj_snap.h" -#include "lj_dispatch.h" -#include "lj_vm.h" - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -/* Emit raw IR without passing through optimizations. */ -#define emitir_raw(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J)) - -/* -- Sanity checks ------------------------------------------------------- */ - -#ifdef LUA_USE_ASSERT -/* Sanity check the whole IR -- sloooow. */ -static void rec_check_ir(jit_State *J) -{ - IRRef i, nins = J->cur.nins, nk = J->cur.nk; - lua_assert(nk <= REF_BIAS && nins >= REF_BIAS && nins < 65536); - for (i = nins-1; i >= nk; i--) { - IRIns *ir = IR(i); - uint32_t mode = lj_ir_mode[ir->o]; - IRRef op1 = ir->op1; - IRRef op2 = ir->op2; - switch (irm_op1(mode)) { - case IRMnone: lua_assert(op1 == 0); break; - case IRMref: lua_assert(op1 >= nk); - lua_assert(i >= REF_BIAS ? op1 < i : op1 > i); break; - case IRMlit: break; - case IRMcst: lua_assert(i < REF_BIAS); continue; - } - switch (irm_op2(mode)) { - case IRMnone: lua_assert(op2 == 0); break; - case IRMref: lua_assert(op2 >= nk); - lua_assert(i >= REF_BIAS ? op2 < i : op2 > i); break; - case IRMlit: break; - case IRMcst: lua_assert(0); break; - } - if (ir->prev) { - lua_assert(ir->prev >= nk); - lua_assert(i >= REF_BIAS ? ir->prev < i : ir->prev > i); - lua_assert(ir->o == IR_NOP || IR(ir->prev)->o == ir->o); - } - } -} - -/* Compare stack slots and frames of the recorder and the VM. */ -static void rec_check_slots(jit_State *J) -{ - BCReg s, nslots = J->baseslot + J->maxslot; - int32_t depth = 0; - cTValue *base = J->L->base - J->baseslot; - lua_assert(J->baseslot >= 1 && J->baseslot < LJ_MAX_JSLOTS); - lua_assert(J->baseslot == 1 || (J->slot[J->baseslot-1] & TREF_FRAME)); - lua_assert(nslots < LJ_MAX_JSLOTS); - for (s = 0; s < nslots; s++) { - TRef tr = J->slot[s]; - if (tr) { - cTValue *tv = &base[s]; - IRRef ref = tref_ref(tr); - IRIns *ir; - lua_assert(ref >= J->cur.nk && ref < J->cur.nins); - ir = IR(ref); - lua_assert(irt_t(ir->t) == tref_t(tr)); - if (s == 0) { - lua_assert(tref_isfunc(tr)); - } else if ((tr & TREF_FRAME)) { - GCfunc *fn = gco2func(frame_gc(tv)); - BCReg delta = (BCReg)(tv - frame_prev(tv)); - lua_assert(tref_isfunc(tr)); - if (tref_isk(tr)) lua_assert(fn == ir_kfunc(ir)); - lua_assert(s > delta ? (J->slot[s-delta] & TREF_FRAME) : (s == delta)); - depth++; - } else if ((tr & TREF_CONT)) { - lua_assert(ir_kptr(ir) == gcrefp(tv->gcr, void)); - lua_assert((J->slot[s+1] & TREF_FRAME)); - depth++; - } else { - if (tvisnumber(tv)) - lua_assert(tref_isnumber(tr)); /* Could be IRT_INT etc., too. */ - else - lua_assert(itype2irt(tv) == tref_type(tr)); - if (tref_isk(tr)) { /* Compare constants. */ - TValue tvk; - lj_ir_kvalue(J->L, &tvk, ir); - if (!(tvisnum(&tvk) && tvisnan(&tvk))) - lua_assert(lj_obj_equal(tv, &tvk)); - else - lua_assert(tvisnum(tv) && tvisnan(tv)); - } - } - } - } - lua_assert(J->framedepth == depth); -} -#endif - -/* -- Type handling and specialization ------------------------------------ */ - -/* Note: these functions return tagged references (TRef). */ - -/* Specialize a slot to a specific type. Note: slot can be negative! */ -static TRef sloadt(jit_State *J, int32_t slot, IRType t, int mode) -{ - /* Caller may set IRT_GUARD in t. */ - TRef ref = emitir_raw(IRT(IR_SLOAD, t), (int32_t)J->baseslot+slot, mode); - J->base[slot] = ref; - return ref; -} - -/* Specialize a slot to the runtime type. Note: slot can be negative! */ -static TRef sload(jit_State *J, int32_t slot) -{ - IRType t = itype2irt(&J->L->base[slot]); - TRef ref = emitir_raw(IRTG(IR_SLOAD, t), (int32_t)J->baseslot+slot, - IRSLOAD_TYPECHECK); - if (irtype_ispri(t)) ref = TREF_PRI(t); /* Canonicalize primitive refs. */ - J->base[slot] = ref; - return ref; -} - -/* Get TRef from slot. Load slot and specialize if not done already. */ -#define getslot(J, s) (J->base[(s)] ? J->base[(s)] : sload(J, (int32_t)(s))) - -/* Get TRef for current function. */ -static TRef getcurrf(jit_State *J) -{ - if (J->base[-1]) - return J->base[-1]; - lua_assert(J->baseslot == 1); - return sloadt(J, -1, IRT_FUNC, IRSLOAD_READONLY); -} - -/* Compare for raw object equality. -** Returns 0 if the objects are the same. -** Returns 1 if they are different, but the same type. -** Returns 2 for two different types. -** Comparisons between primitives always return 1 -- no caller cares about it. -*/ -int lj_record_objcmp(jit_State *J, TRef a, TRef b, cTValue *av, cTValue *bv) -{ - int diff = !lj_obj_equal(av, bv); - if (!tref_isk2(a, b)) { /* Shortcut, also handles primitives. */ - IRType ta = tref_isinteger(a) ? IRT_INT : tref_type(a); - IRType tb = tref_isinteger(b) ? IRT_INT : tref_type(b); - if (ta != tb) { - /* Widen mixed number/int comparisons to number/number comparison. */ - if (ta == IRT_INT && tb == IRT_NUM) { - a = emitir(IRTN(IR_CONV), a, IRCONV_NUM_INT); - ta = IRT_NUM; - } else if (ta == IRT_NUM && tb == IRT_INT) { - b = emitir(IRTN(IR_CONV), b, IRCONV_NUM_INT); - } else { - return 2; /* Two different types are never equal. */ - } - } - emitir(IRTG(diff ? IR_NE : IR_EQ, ta), a, b); - } - return diff; -} - -/* Constify a value. Returns 0 for non-representable object types. */ -TRef lj_record_constify(jit_State *J, cTValue *o) -{ - if (tvisgcv(o)) - return lj_ir_kgc(J, gcV(o), itype2irt(o)); - else if (tvisint(o)) - return lj_ir_kint(J, intV(o)); - else if (tvisnum(o)) - return lj_ir_knumint(J, numV(o)); - else if (tvisbool(o)) - return TREF_PRI(itype2irt(o)); - else - return 0; /* Can't represent lightuserdata (pointless). */ -} - -/* -- Record loop ops ----------------------------------------------------- */ - -/* Loop event. */ -typedef enum { - LOOPEV_LEAVE, /* Loop is left or not entered. */ - LOOPEV_ENTERLO, /* Loop is entered with a low iteration count left. */ - LOOPEV_ENTER /* Loop is entered. */ -} LoopEvent; - -/* Canonicalize slots: convert integers to numbers. */ -static void canonicalize_slots(jit_State *J) -{ - BCReg s; - if (LJ_DUALNUM) return; - for (s = J->baseslot+J->maxslot-1; s >= 1; s--) { - TRef tr = J->slot[s]; - if (tref_isinteger(tr)) { - IRIns *ir = IR(tref_ref(tr)); - if (!(ir->o == IR_SLOAD && (ir->op2 & IRSLOAD_READONLY))) - J->slot[s] = emitir(IRTN(IR_CONV), tr, IRCONV_NUM_INT); - } - } -} - -/* Stop recording. */ -static void rec_stop(jit_State *J, TraceLink linktype, TraceNo lnk) -{ - lj_trace_end(J); - J->cur.linktype = (uint8_t)linktype; - J->cur.link = (uint16_t)lnk; - /* Looping back at the same stack level? */ - if (lnk == J->cur.traceno && J->framedepth + J->retdepth == 0) { - if ((J->flags & JIT_F_OPT_LOOP)) /* Shall we try to create a loop? */ - goto nocanon; /* Do not canonicalize or we lose the narrowing. */ - if (J->cur.root) /* Otherwise ensure we always link to the root trace. */ - J->cur.link = J->cur.root; - } - canonicalize_slots(J); -nocanon: - /* Note: all loop ops must set J->pc to the following instruction! */ - lj_snap_add(J); /* Add loop snapshot. */ - J->needsnap = 0; - J->mergesnap = 1; /* In case recording continues. */ -} - -/* Search bytecode backwards for a int/num constant slot initializer. */ -static TRef find_kinit(jit_State *J, const BCIns *endpc, BCReg slot, IRType t) -{ - /* This algorithm is rather simplistic and assumes quite a bit about - ** how the bytecode is generated. It works fine for FORI initializers, - ** but it won't necessarily work in other cases (e.g. iterator arguments). - ** It doesn't do anything fancy, either (like backpropagating MOVs). - */ - const BCIns *pc, *startpc = proto_bc(J->pt); - for (pc = endpc-1; pc > startpc; pc--) { - BCIns ins = *pc; - BCOp op = bc_op(ins); - /* First try to find the last instruction that stores to this slot. */ - if (bcmode_a(op) == BCMbase && bc_a(ins) <= slot) { - return 0; /* Multiple results, e.g. from a CALL or KNIL. */ - } else if (bcmode_a(op) == BCMdst && bc_a(ins) == slot) { - if (op == BC_KSHORT || op == BC_KNUM) { /* Found const. initializer. */ - /* Now try to verify there's no forward jump across it. */ - const BCIns *kpc = pc; - for (; pc > startpc; pc--) - if (bc_op(*pc) == BC_JMP) { - const BCIns *target = pc+bc_j(*pc)+1; - if (target > kpc && target <= endpc) - return 0; /* Conditional assignment. */ - } - if (op == BC_KSHORT) { - int32_t k = (int32_t)(int16_t)bc_d(ins); - return t == IRT_INT ? lj_ir_kint(J, k) : lj_ir_knum(J, (lua_Number)k); - } else { - cTValue *tv = proto_knumtv(J->pt, bc_d(ins)); - if (t == IRT_INT) { - int32_t k = numberVint(tv); - if (tvisint(tv) || numV(tv) == (lua_Number)k) /* -0 is ok here. */ - return lj_ir_kint(J, k); - return 0; /* Type mismatch. */ - } else { - return lj_ir_knum(J, numberVnum(tv)); - } - } - } - return 0; /* Non-constant initializer. */ - } - } - return 0; /* No assignment to this slot found? */ -} - -/* Load and optionally convert a FORI argument from a slot. */ -static TRef fori_load(jit_State *J, BCReg slot, IRType t, int mode) -{ - int conv = (tvisint(&J->L->base[slot]) != (t==IRT_INT)) ? IRSLOAD_CONVERT : 0; - return sloadt(J, (int32_t)slot, - t + (((mode & IRSLOAD_TYPECHECK) || - (conv && t == IRT_INT && !(mode >> 16))) ? - IRT_GUARD : 0), - mode + conv); -} - -/* Peek before FORI to find a const initializer. Otherwise load from slot. */ -static TRef fori_arg(jit_State *J, const BCIns *fori, BCReg slot, - IRType t, int mode) -{ - TRef tr = J->base[slot]; - if (!tr) { - tr = find_kinit(J, fori, slot, t); - if (!tr) - tr = fori_load(J, slot, t, mode); - } - return tr; -} - -/* Return the direction of the FOR loop iterator. -** It's important to exactly reproduce the semantics of the interpreter. -*/ -static int rec_for_direction(cTValue *o) -{ - return (tvisint(o) ? intV(o) : (int32_t)o->u32.hi) >= 0; -} - -/* Simulate the runtime behavior of the FOR loop iterator. */ -static LoopEvent rec_for_iter(IROp *op, cTValue *o, int isforl) -{ - lua_Number stopv = numberVnum(&o[FORL_STOP]); - lua_Number idxv = numberVnum(&o[FORL_IDX]); - lua_Number stepv = numberVnum(&o[FORL_STEP]); - if (isforl) - idxv += stepv; - if (rec_for_direction(&o[FORL_STEP])) { - if (idxv <= stopv) { - *op = IR_LE; - return idxv + 2*stepv > stopv ? LOOPEV_ENTERLO : LOOPEV_ENTER; - } - *op = IR_GT; return LOOPEV_LEAVE; - } else { - if (stopv <= idxv) { - *op = IR_GE; - return idxv + 2*stepv < stopv ? LOOPEV_ENTERLO : LOOPEV_ENTER; - } - *op = IR_LT; return LOOPEV_LEAVE; - } -} - -/* Record checks for FOR loop overflow and step direction. */ -static void rec_for_check(jit_State *J, IRType t, int dir, - TRef stop, TRef step, int init) -{ - if (!tref_isk(step)) { - /* Non-constant step: need a guard for the direction. */ - TRef zero = (t == IRT_INT) ? lj_ir_kint(J, 0) : lj_ir_knum_zero(J); - emitir(IRTG(dir ? IR_GE : IR_LT, t), step, zero); - /* Add hoistable overflow checks for a narrowed FORL index. */ - if (init && t == IRT_INT) { - if (tref_isk(stop)) { - /* Constant stop: optimize check away or to a range check for step. */ - int32_t k = IR(tref_ref(stop))->i; - if (dir) { - if (k > 0) - emitir(IRTGI(IR_LE), step, lj_ir_kint(J, (int32_t)0x7fffffff-k)); - } else { - if (k < 0) - emitir(IRTGI(IR_GE), step, lj_ir_kint(J, (int32_t)0x80000000-k)); - } - } else { - /* Stop+step variable: need full overflow check. */ - TRef tr = emitir(IRTGI(IR_ADDOV), step, stop); - emitir(IRTI(IR_USE), tr, 0); /* ADDOV is weak. Avoid dead result. */ - } - } - } else if (init && t == IRT_INT && !tref_isk(stop)) { - /* Constant step: optimize overflow check to a range check for stop. */ - int32_t k = IR(tref_ref(step))->i; - k = (int32_t)(dir ? 0x7fffffff : 0x80000000) - k; - emitir(IRTGI(dir ? IR_LE : IR_GE), stop, lj_ir_kint(J, k)); - } -} - -/* Record a FORL instruction. */ -static void rec_for_loop(jit_State *J, const BCIns *fori, ScEvEntry *scev, - int init) -{ - BCReg ra = bc_a(*fori); - cTValue *tv = &J->L->base[ra]; - TRef idx = J->base[ra+FORL_IDX]; - IRType t = idx ? tref_type(idx) : - (init || LJ_DUALNUM) ? lj_opt_narrow_forl(J, tv) : IRT_NUM; - int mode = IRSLOAD_INHERIT + - ((!LJ_DUALNUM || tvisint(tv) == (t == IRT_INT)) ? IRSLOAD_READONLY : 0); - TRef stop = fori_arg(J, fori, ra+FORL_STOP, t, mode); - TRef step = fori_arg(J, fori, ra+FORL_STEP, t, mode); - int tc, dir = rec_for_direction(&tv[FORL_STEP]); - lua_assert(bc_op(*fori) == BC_FORI || bc_op(*fori) == BC_JFORI); - scev->t.irt = t; - scev->dir = dir; - scev->stop = tref_ref(stop); - scev->step = tref_ref(step); - rec_for_check(J, t, dir, stop, step, init); - scev->start = tref_ref(find_kinit(J, fori, ra+FORL_IDX, IRT_INT)); - tc = (LJ_DUALNUM && - !(scev->start && irref_isk(scev->stop) && irref_isk(scev->step) && - tvisint(&tv[FORL_IDX]) == (t == IRT_INT))) ? - IRSLOAD_TYPECHECK : 0; - if (tc) { - J->base[ra+FORL_STOP] = stop; - J->base[ra+FORL_STEP] = step; - } - if (!idx) - idx = fori_load(J, ra+FORL_IDX, t, - IRSLOAD_INHERIT + tc + (J->scev.start << 16)); - if (!init) - J->base[ra+FORL_IDX] = idx = emitir(IRT(IR_ADD, t), idx, step); - J->base[ra+FORL_EXT] = idx; - scev->idx = tref_ref(idx); - setmref(scev->pc, fori); - J->maxslot = ra+FORL_EXT+1; -} - -/* Record FORL/JFORL or FORI/JFORI. */ -static LoopEvent rec_for(jit_State *J, const BCIns *fori, int isforl) -{ - BCReg ra = bc_a(*fori); - TValue *tv = &J->L->base[ra]; - TRef *tr = &J->base[ra]; - IROp op; - LoopEvent ev; - TRef stop; - IRType t; - if (isforl) { /* Handle FORL/JFORL opcodes. */ - TRef idx = tr[FORL_IDX]; - if (mref(J->scev.pc, const BCIns) == fori && tref_ref(idx) == J->scev.idx) { - t = J->scev.t.irt; - stop = J->scev.stop; - idx = emitir(IRT(IR_ADD, t), idx, J->scev.step); - tr[FORL_EXT] = tr[FORL_IDX] = idx; - } else { - ScEvEntry scev; - rec_for_loop(J, fori, &scev, 0); - t = scev.t.irt; - stop = scev.stop; - } - } else { /* Handle FORI/JFORI opcodes. */ - BCReg i; - lj_meta_for(J->L, tv); - t = (LJ_DUALNUM || tref_isint(tr[FORL_IDX])) ? lj_opt_narrow_forl(J, tv) : - IRT_NUM; - for (i = FORL_IDX; i <= FORL_STEP; i++) { - if (!tr[i]) sload(J, ra+i); - lua_assert(tref_isnumber_str(tr[i])); - if (tref_isstr(tr[i])) - tr[i] = emitir(IRTG(IR_STRTO, IRT_NUM), tr[i], 0); - if (t == IRT_INT) { - if (!tref_isinteger(tr[i])) - tr[i] = emitir(IRTGI(IR_CONV), tr[i], IRCONV_INT_NUM|IRCONV_CHECK); - } else { - if (!tref_isnum(tr[i])) - tr[i] = emitir(IRTN(IR_CONV), tr[i], IRCONV_NUM_INT); - } - } - tr[FORL_EXT] = tr[FORL_IDX]; - stop = tr[FORL_STOP]; - rec_for_check(J, t, rec_for_direction(&tv[FORL_STEP]), - stop, tr[FORL_STEP], 1); - } - - ev = rec_for_iter(&op, tv, isforl); - if (ev == LOOPEV_LEAVE) { - J->maxslot = ra+FORL_EXT+1; - J->pc = fori+1; - } else { - J->maxslot = ra; - J->pc = fori+bc_j(*fori)+1; - } - lj_snap_add(J); - - emitir(IRTG(op, t), tr[FORL_IDX], stop); - - if (ev == LOOPEV_LEAVE) { - J->maxslot = ra; - J->pc = fori+bc_j(*fori)+1; - } else { - J->maxslot = ra+FORL_EXT+1; - J->pc = fori+1; - } - J->needsnap = 1; - return ev; -} - -/* Record ITERL/JITERL. */ -static LoopEvent rec_iterl(jit_State *J, const BCIns iterins) -{ - BCReg ra = bc_a(iterins); - lua_assert(J->base[ra] != 0); - if (!tref_isnil(J->base[ra])) { /* Looping back? */ - J->base[ra-1] = J->base[ra]; /* Copy result of ITERC to control var. */ - J->maxslot = ra-1+bc_b(J->pc[-1]); - J->pc += bc_j(iterins)+1; - return LOOPEV_ENTER; - } else { - J->maxslot = ra-3; - J->pc++; - return LOOPEV_LEAVE; - } -} - -/* Record LOOP/JLOOP. Now, that was easy. */ -static LoopEvent rec_loop(jit_State *J, BCReg ra) -{ - if (ra < J->maxslot) J->maxslot = ra; - J->pc++; - return LOOPEV_ENTER; -} - -/* Check if a loop repeatedly failed to trace because it didn't loop back. */ -static int innerloopleft(jit_State *J, const BCIns *pc) -{ - ptrdiff_t i; - for (i = 0; i < PENALTY_SLOTS; i++) - if (mref(J->penalty[i].pc, const BCIns) == pc) { - if ((J->penalty[i].reason == LJ_TRERR_LLEAVE || - J->penalty[i].reason == LJ_TRERR_LINNER) && - J->penalty[i].val >= 2*PENALTY_MIN) - return 1; - break; - } - return 0; -} - -/* Handle the case when an interpreted loop op is hit. */ -static void rec_loop_interp(jit_State *J, const BCIns *pc, LoopEvent ev) -{ - if (J->parent == 0) { - if (pc == J->startpc && J->framedepth + J->retdepth == 0) { - /* Same loop? */ - if (ev == LOOPEV_LEAVE) /* Must loop back to form a root trace. */ - lj_trace_err(J, LJ_TRERR_LLEAVE); - rec_stop(J, LJ_TRLINK_LOOP, J->cur.traceno); /* Looping root trace. */ - } else if (ev != LOOPEV_LEAVE) { /* Entering inner loop? */ - /* It's usually better to abort here and wait until the inner loop - ** is traced. But if the inner loop repeatedly didn't loop back, - ** this indicates a low trip count. In this case try unrolling - ** an inner loop even in a root trace. But it's better to be a bit - ** more conservative here and only do it for very short loops. - */ - if (bc_j(*pc) != -1 && !innerloopleft(J, pc)) - lj_trace_err(J, LJ_TRERR_LINNER); /* Root trace hit an inner loop. */ - if ((ev != LOOPEV_ENTERLO && - J->loopref && J->cur.nins - J->loopref > 24) || --J->loopunroll < 0) - lj_trace_err(J, LJ_TRERR_LUNROLL); /* Limit loop unrolling. */ - J->loopref = J->cur.nins; - } - } else if (ev != LOOPEV_LEAVE) { /* Side trace enters an inner loop. */ - J->loopref = J->cur.nins; - if (--J->loopunroll < 0) - lj_trace_err(J, LJ_TRERR_LUNROLL); /* Limit loop unrolling. */ - } /* Side trace continues across a loop that's left or not entered. */ -} - -/* Handle the case when an already compiled loop op is hit. */ -static void rec_loop_jit(jit_State *J, TraceNo lnk, LoopEvent ev) -{ - if (J->parent == 0) { /* Root trace hit an inner loop. */ - /* Better let the inner loop spawn a side trace back here. */ - lj_trace_err(J, LJ_TRERR_LINNER); - } else if (ev != LOOPEV_LEAVE) { /* Side trace enters a compiled loop. */ - J->instunroll = 0; /* Cannot continue across a compiled loop op. */ - if (J->pc == J->startpc && J->framedepth + J->retdepth == 0) - rec_stop(J, LJ_TRLINK_LOOP, J->cur.traceno); /* Form an extra loop. */ - else - rec_stop(J, LJ_TRLINK_ROOT, lnk); /* Link to the loop. */ - } /* Side trace continues across a loop that's left or not entered. */ -} - -/* -- Record calls and returns -------------------------------------------- */ - -/* Specialize to the runtime value of the called function or its prototype. */ -static TRef rec_call_specialize(jit_State *J, GCfunc *fn, TRef tr) -{ - TRef kfunc; - if (isluafunc(fn)) { - GCproto *pt = funcproto(fn); - /* Too many closures created? Probably not a monomorphic function. */ - if (pt->flags >= PROTO_CLC_POLY) { /* Specialize to prototype instead. */ - TRef trpt = emitir(IRT(IR_FLOAD, IRT_P32), tr, IRFL_FUNC_PC); - emitir(IRTG(IR_EQ, IRT_P32), trpt, lj_ir_kptr(J, proto_bc(pt))); - (void)lj_ir_kgc(J, obj2gco(pt), IRT_PROTO); /* Prevent GC of proto. */ - return tr; - } - } - /* Otherwise specialize to the function (closure) value itself. */ - kfunc = lj_ir_kfunc(J, fn); - emitir(IRTG(IR_EQ, IRT_FUNC), tr, kfunc); - return kfunc; -} - -/* Record call setup. */ -static void rec_call_setup(jit_State *J, BCReg func, ptrdiff_t nargs) -{ - RecordIndex ix; - TValue *functv = &J->L->base[func]; - TRef *fbase = &J->base[func]; - ptrdiff_t i; - for (i = 0; i <= nargs; i++) - (void)getslot(J, func+i); /* Ensure func and all args have a reference. */ - if (!tref_isfunc(fbase[0])) { /* Resolve __call metamethod. */ - ix.tab = fbase[0]; - copyTV(J->L, &ix.tabv, functv); - if (!lj_record_mm_lookup(J, &ix, MM_call) || !tref_isfunc(ix.mobj)) - lj_trace_err(J, LJ_TRERR_NOMM); - for (i = ++nargs; i > 0; i--) /* Shift arguments up. */ - fbase[i] = fbase[i-1]; - fbase[0] = ix.mobj; /* Replace function. */ - functv = &ix.mobjv; - } - fbase[0] = TREF_FRAME | rec_call_specialize(J, funcV(functv), fbase[0]); - J->maxslot = (BCReg)nargs; -} - -/* Record call. */ -void lj_record_call(jit_State *J, BCReg func, ptrdiff_t nargs) -{ - rec_call_setup(J, func, nargs); - /* Bump frame. */ - J->framedepth++; - J->base += func+1; - J->baseslot += func+1; -} - -/* Record tail call. */ -void lj_record_tailcall(jit_State *J, BCReg func, ptrdiff_t nargs) -{ - rec_call_setup(J, func, nargs); - if (frame_isvarg(J->L->base - 1)) { - BCReg cbase = (BCReg)frame_delta(J->L->base - 1); - if (--J->framedepth < 0) - lj_trace_err(J, LJ_TRERR_NYIRETL); - J->baseslot -= (BCReg)cbase; - J->base -= cbase; - func += cbase; - } - /* Move func + args down. */ - memmove(&J->base[-1], &J->base[func], sizeof(TRef)*(J->maxslot+1)); - /* Note: the new TREF_FRAME is now at J->base[-1] (even for slot #0). */ - /* Tailcalls can form a loop, so count towards the loop unroll limit. */ - if (++J->tailcalled > J->loopunroll) - lj_trace_err(J, LJ_TRERR_LUNROLL); -} - -/* Check unroll limits for down-recursion. */ -static int check_downrec_unroll(jit_State *J, GCproto *pt) -{ - IRRef ptref; - for (ptref = J->chain[IR_KGC]; ptref; ptref = IR(ptref)->prev) - if (ir_kgc(IR(ptref)) == obj2gco(pt)) { - int count = 0; - IRRef ref; - for (ref = J->chain[IR_RETF]; ref; ref = IR(ref)->prev) - if (IR(ref)->op1 == ptref) - count++; - if (count) { - if (J->pc == J->startpc) { - if (count + J->tailcalled > J->param[JIT_P_recunroll]) - return 1; - } else { - lj_trace_err(J, LJ_TRERR_DOWNREC); - } - } - } - return 0; -} - -/* Record return. */ -void lj_record_ret(jit_State *J, BCReg rbase, ptrdiff_t gotresults) -{ - TValue *frame = J->L->base - 1; - ptrdiff_t i; - for (i = 0; i < gotresults; i++) - (void)getslot(J, rbase+i); /* Ensure all results have a reference. */ - while (frame_ispcall(frame)) { /* Immediately resolve pcall() returns. */ - BCReg cbase = (BCReg)frame_delta(frame); - if (--J->framedepth < 0) - lj_trace_err(J, LJ_TRERR_NYIRETL); - lua_assert(J->baseslot > 1); - gotresults++; - rbase += cbase; - J->baseslot -= (BCReg)cbase; - J->base -= cbase; - J->base[--rbase] = TREF_TRUE; /* Prepend true to results. */ - frame = frame_prevd(frame); - } - /* Return to lower frame via interpreter for unhandled cases. */ - if (J->framedepth == 0 && J->pt && bc_isret(bc_op(*J->pc)) && - (!frame_islua(frame) || - (J->parent == 0 && !bc_isret(bc_op(J->cur.startins))))) { - /* NYI: specialize to frame type and return directly, not via RET*. */ - for (i = 0; i < (ptrdiff_t)rbase; i++) - J->base[i] = 0; /* Purge dead slots. */ - J->maxslot = rbase + (BCReg)gotresults; - rec_stop(J, LJ_TRLINK_RETURN, 0); /* Return to interpreter. */ - return; - } - if (frame_isvarg(frame)) { - BCReg cbase = (BCReg)frame_delta(frame); - if (--J->framedepth < 0) /* NYI: return of vararg func to lower frame. */ - lj_trace_err(J, LJ_TRERR_NYIRETL); - lua_assert(J->baseslot > 1); - rbase += cbase; - J->baseslot -= (BCReg)cbase; - J->base -= cbase; - frame = frame_prevd(frame); - } - if (frame_islua(frame)) { /* Return to Lua frame. */ - BCIns callins = *(frame_pc(frame)-1); - ptrdiff_t nresults = bc_b(callins) ? (ptrdiff_t)bc_b(callins)-1 :gotresults; - BCReg cbase = bc_a(callins); - GCproto *pt = funcproto(frame_func(frame - (cbase+1))); - if ((pt->flags & PROTO_NOJIT)) - lj_trace_err(J, LJ_TRERR_CJITOFF); - if (J->framedepth == 0 && J->pt && frame == J->L->base - 1) { - if (check_downrec_unroll(J, pt)) { - J->maxslot = (BCReg)(rbase + gotresults); - lj_snap_purge(J); - rec_stop(J, LJ_TRLINK_DOWNREC, J->cur.traceno); /* Down-recursion. */ - return; - } - lj_snap_add(J); - } - for (i = 0; i < nresults; i++) /* Adjust results. */ - J->base[i-1] = i < gotresults ? J->base[rbase+i] : TREF_NIL; - J->maxslot = cbase+(BCReg)nresults; - if (J->framedepth > 0) { /* Return to a frame that is part of the trace. */ - J->framedepth--; - lua_assert(J->baseslot > cbase+1); - J->baseslot -= cbase+1; - J->base -= cbase+1; - } else if (J->parent == 0 && !bc_isret(bc_op(J->cur.startins))) { - /* Return to lower frame would leave the loop in a root trace. */ - lj_trace_err(J, LJ_TRERR_LLEAVE); - } else if (J->needsnap) { /* Tailcalled to ff with side-effects. */ - lj_trace_err(J, LJ_TRERR_NYIRETL); /* No way to insert snapshot here. */ - } else { /* Return to lower frame. Guard for the target we return to. */ - TRef trpt = lj_ir_kgc(J, obj2gco(pt), IRT_PROTO); - TRef trpc = lj_ir_kptr(J, (void *)frame_pc(frame)); - emitir(IRTG(IR_RETF, IRT_P32), trpt, trpc); - J->retdepth++; - J->needsnap = 1; - lua_assert(J->baseslot == 1); - /* Shift result slots up and clear the slots of the new frame below. */ - memmove(J->base + cbase, J->base-1, sizeof(TRef)*nresults); - memset(J->base-1, 0, sizeof(TRef)*(cbase+1)); - } - } else if (frame_iscont(frame)) { /* Return to continuation frame. */ - ASMFunction cont = frame_contf(frame); - BCReg cbase = (BCReg)frame_delta(frame); - if ((J->framedepth -= 2) < 0) - lj_trace_err(J, LJ_TRERR_NYIRETL); - J->baseslot -= (BCReg)cbase; - J->base -= cbase; - J->maxslot = cbase-2; - if (cont == lj_cont_ra) { - /* Copy result to destination slot. */ - BCReg dst = bc_a(*(frame_contpc(frame)-1)); - J->base[dst] = gotresults ? J->base[cbase+rbase] : TREF_NIL; - if (dst >= J->maxslot) J->maxslot = dst+1; - } else if (cont == lj_cont_nop) { - /* Nothing to do here. */ - } else if (cont == lj_cont_cat) { - lua_assert(0); - } else { - /* Result type already specialized. */ - lua_assert(cont == lj_cont_condf || cont == lj_cont_condt); - } - } else { - lj_trace_err(J, LJ_TRERR_NYIRETL); /* NYI: handle return to C frame. */ - } - lua_assert(J->baseslot >= 1); -} - -/* -- Metamethod handling ------------------------------------------------- */ - -/* Prepare to record call to metamethod. */ -static BCReg rec_mm_prep(jit_State *J, ASMFunction cont) -{ - BCReg s, top = curr_proto(J->L)->framesize; - TRef trcont; - setcont(&J->L->base[top], cont); -#if LJ_64 - trcont = lj_ir_kptr(J, (void *)((int64_t)cont - (int64_t)lj_vm_asm_begin)); -#else - trcont = lj_ir_kptr(J, (void *)cont); -#endif - J->base[top] = trcont | TREF_CONT; - J->framedepth++; - for (s = J->maxslot; s < top; s++) - J->base[s] = 0; /* Clear frame gap to avoid resurrecting previous refs. */ - return top+1; -} - -/* Record metamethod lookup. */ -int lj_record_mm_lookup(jit_State *J, RecordIndex *ix, MMS mm) -{ - RecordIndex mix; - GCtab *mt; - if (tref_istab(ix->tab)) { - mt = tabref(tabV(&ix->tabv)->metatable); - mix.tab = emitir(IRT(IR_FLOAD, IRT_TAB), ix->tab, IRFL_TAB_META); - } else if (tref_isudata(ix->tab)) { - int udtype = udataV(&ix->tabv)->udtype; - mt = tabref(udataV(&ix->tabv)->metatable); - /* The metatables of special userdata objects are treated as immutable. */ - if (udtype != UDTYPE_USERDATA) { - cTValue *mo; - if (LJ_HASFFI && udtype == UDTYPE_FFI_CLIB) { - /* Specialize to the C library namespace object. */ - emitir(IRTG(IR_EQ, IRT_P32), ix->tab, lj_ir_kptr(J, udataV(&ix->tabv))); - } else { - /* Specialize to the type of userdata. */ - TRef tr = emitir(IRT(IR_FLOAD, IRT_U8), ix->tab, IRFL_UDATA_UDTYPE); - emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, udtype)); - } - immutable_mt: - mo = lj_tab_getstr(mt, mmname_str(J2G(J), mm)); - if (!mo || tvisnil(mo)) - return 0; /* No metamethod. */ - /* Treat metamethod or index table as immutable, too. */ - if (!(tvisfunc(mo) || tvistab(mo))) - lj_trace_err(J, LJ_TRERR_BADTYPE); - copyTV(J->L, &ix->mobjv, mo); - ix->mobj = lj_ir_kgc(J, gcV(mo), tvisfunc(mo) ? IRT_FUNC : IRT_TAB); - ix->mtv = mt; - ix->mt = TREF_NIL; /* Dummy value for comparison semantics. */ - return 1; /* Got metamethod or index table. */ - } - mix.tab = emitir(IRT(IR_FLOAD, IRT_TAB), ix->tab, IRFL_UDATA_META); - } else { - /* Specialize to base metatable. Must flush mcode in lua_setmetatable(). */ - mt = tabref(basemt_obj(J2G(J), &ix->tabv)); - if (mt == NULL) { - ix->mt = TREF_NIL; - return 0; /* No metamethod. */ - } - /* The cdata metatable is treated as immutable. */ - if (LJ_HASFFI && tref_iscdata(ix->tab)) goto immutable_mt; - ix->mt = mix.tab = lj_ir_ktab(J, mt); - goto nocheck; - } - ix->mt = mt ? mix.tab : TREF_NIL; - emitir(IRTG(mt ? IR_NE : IR_EQ, IRT_TAB), mix.tab, lj_ir_knull(J, IRT_TAB)); -nocheck: - if (mt) { - GCstr *mmstr = mmname_str(J2G(J), mm); - cTValue *mo = lj_tab_getstr(mt, mmstr); - if (mo && !tvisnil(mo)) - copyTV(J->L, &ix->mobjv, mo); - ix->mtv = mt; - settabV(J->L, &mix.tabv, mt); - setstrV(J->L, &mix.keyv, mmstr); - mix.key = lj_ir_kstr(J, mmstr); - mix.val = 0; - mix.idxchain = 0; - ix->mobj = lj_record_idx(J, &mix); - return !tref_isnil(ix->mobj); /* 1 if metamethod found, 0 if not. */ - } - return 0; /* No metamethod. */ -} - -/* Record call to arithmetic metamethod. */ -static TRef rec_mm_arith(jit_State *J, RecordIndex *ix, MMS mm) -{ - /* Set up metamethod call first to save ix->tab and ix->tabv. */ - BCReg func = rec_mm_prep(J, lj_cont_ra); - TRef *base = J->base + func; - TValue *basev = J->L->base + func; - base[1] = ix->tab; base[2] = ix->key; - copyTV(J->L, basev+1, &ix->tabv); - copyTV(J->L, basev+2, &ix->keyv); - if (!lj_record_mm_lookup(J, ix, mm)) { /* Lookup mm on 1st operand. */ - if (mm != MM_unm) { - ix->tab = ix->key; - copyTV(J->L, &ix->tabv, &ix->keyv); - if (lj_record_mm_lookup(J, ix, mm)) /* Lookup mm on 2nd operand. */ - goto ok; - } - lj_trace_err(J, LJ_TRERR_NOMM); - } -ok: - base[0] = ix->mobj; - copyTV(J->L, basev+0, &ix->mobjv); - lj_record_call(J, func, 2); - return 0; /* No result yet. */ -} - -/* Record call to __len metamethod. */ -static TRef rec_mm_len(jit_State *J, TRef tr, TValue *tv) -{ - RecordIndex ix; - ix.tab = tr; - copyTV(J->L, &ix.tabv, tv); - if (lj_record_mm_lookup(J, &ix, MM_len)) { - BCReg func = rec_mm_prep(J, lj_cont_ra); - TRef *base = J->base + func; - TValue *basev = J->L->base + func; - base[0] = ix.mobj; copyTV(J->L, basev+0, &ix.mobjv); - base[1] = tr; copyTV(J->L, basev+1, tv); -#if LJ_52 - base[2] = tr; copyTV(J->L, basev+2, tv); -#else - base[2] = TREF_NIL; setnilV(basev+2); -#endif - lj_record_call(J, func, 2); - } else { - if (LJ_52 && tref_istab(tr)) - return lj_ir_call(J, IRCALL_lj_tab_len, tr); - lj_trace_err(J, LJ_TRERR_NOMM); - } - return 0; /* No result yet. */ -} - -/* Call a comparison metamethod. */ -static void rec_mm_callcomp(jit_State *J, RecordIndex *ix, int op) -{ - BCReg func = rec_mm_prep(J, (op&1) ? lj_cont_condf : lj_cont_condt); - TRef *base = J->base + func; - TValue *tv = J->L->base + func; - base[0] = ix->mobj; base[1] = ix->val; base[2] = ix->key; - copyTV(J->L, tv+0, &ix->mobjv); - copyTV(J->L, tv+1, &ix->valv); - copyTV(J->L, tv+2, &ix->keyv); - lj_record_call(J, func, 2); -} - -/* Record call to equality comparison metamethod (for tab and udata only). */ -static void rec_mm_equal(jit_State *J, RecordIndex *ix, int op) -{ - ix->tab = ix->val; - copyTV(J->L, &ix->tabv, &ix->valv); - if (lj_record_mm_lookup(J, ix, MM_eq)) { /* Lookup mm on 1st operand. */ - cTValue *bv; - TRef mo1 = ix->mobj; - TValue mo1v; - copyTV(J->L, &mo1v, &ix->mobjv); - /* Avoid the 2nd lookup and the objcmp if the metatables are equal. */ - bv = &ix->keyv; - if (tvistab(bv) && tabref(tabV(bv)->metatable) == ix->mtv) { - TRef mt2 = emitir(IRT(IR_FLOAD, IRT_TAB), ix->key, IRFL_TAB_META); - emitir(IRTG(IR_EQ, IRT_TAB), mt2, ix->mt); - } else if (tvisudata(bv) && tabref(udataV(bv)->metatable) == ix->mtv) { - TRef mt2 = emitir(IRT(IR_FLOAD, IRT_TAB), ix->key, IRFL_UDATA_META); - emitir(IRTG(IR_EQ, IRT_TAB), mt2, ix->mt); - } else { /* Lookup metamethod on 2nd operand and compare both. */ - ix->tab = ix->key; - copyTV(J->L, &ix->tabv, bv); - if (!lj_record_mm_lookup(J, ix, MM_eq) || - lj_record_objcmp(J, mo1, ix->mobj, &mo1v, &ix->mobjv)) - return; - } - rec_mm_callcomp(J, ix, op); - } -} - -/* Record call to ordered comparison metamethods (for arbitrary objects). */ -static void rec_mm_comp(jit_State *J, RecordIndex *ix, int op) -{ - ix->tab = ix->val; - copyTV(J->L, &ix->tabv, &ix->valv); - while (1) { - MMS mm = (op & 2) ? MM_le : MM_lt; /* Try __le + __lt or only __lt. */ -#if LJ_52 - if (!lj_record_mm_lookup(J, ix, mm)) { /* Lookup mm on 1st operand. */ - ix->tab = ix->key; - copyTV(J->L, &ix->tabv, &ix->keyv); - if (!lj_record_mm_lookup(J, ix, mm)) /* Lookup mm on 2nd operand. */ - goto nomatch; - } - rec_mm_callcomp(J, ix, op); - return; -#else - if (lj_record_mm_lookup(J, ix, mm)) { /* Lookup mm on 1st operand. */ - cTValue *bv; - TRef mo1 = ix->mobj; - TValue mo1v; - copyTV(J->L, &mo1v, &ix->mobjv); - /* Avoid the 2nd lookup and the objcmp if the metatables are equal. */ - bv = &ix->keyv; - if (tvistab(bv) && tabref(tabV(bv)->metatable) == ix->mtv) { - TRef mt2 = emitir(IRT(IR_FLOAD, IRT_TAB), ix->key, IRFL_TAB_META); - emitir(IRTG(IR_EQ, IRT_TAB), mt2, ix->mt); - } else if (tvisudata(bv) && tabref(udataV(bv)->metatable) == ix->mtv) { - TRef mt2 = emitir(IRT(IR_FLOAD, IRT_TAB), ix->key, IRFL_UDATA_META); - emitir(IRTG(IR_EQ, IRT_TAB), mt2, ix->mt); - } else { /* Lookup metamethod on 2nd operand and compare both. */ - ix->tab = ix->key; - copyTV(J->L, &ix->tabv, bv); - if (!lj_record_mm_lookup(J, ix, mm) || - lj_record_objcmp(J, mo1, ix->mobj, &mo1v, &ix->mobjv)) - goto nomatch; - } - rec_mm_callcomp(J, ix, op); - return; - } -#endif - nomatch: - /* Lookup failed. Retry with __lt and swapped operands. */ - if (!(op & 2)) break; /* Already at __lt. Interpreter will throw. */ - ix->tab = ix->key; ix->key = ix->val; ix->val = ix->tab; - copyTV(J->L, &ix->tabv, &ix->keyv); - copyTV(J->L, &ix->keyv, &ix->valv); - copyTV(J->L, &ix->valv, &ix->tabv); - op ^= 3; - } -} - -#if LJ_HASFFI -/* Setup call to cdata comparison metamethod. */ -static void rec_mm_comp_cdata(jit_State *J, RecordIndex *ix, int op, MMS mm) -{ - lj_snap_add(J); - if (tref_iscdata(ix->val)) { - ix->tab = ix->val; - copyTV(J->L, &ix->tabv, &ix->valv); - } else { - lua_assert(tref_iscdata(ix->key)); - ix->tab = ix->key; - copyTV(J->L, &ix->tabv, &ix->keyv); - } - lj_record_mm_lookup(J, ix, mm); - rec_mm_callcomp(J, ix, op); -} -#endif - -/* -- Indexed access ------------------------------------------------------ */ - -/* Record bounds-check. */ -static void rec_idx_abc(jit_State *J, TRef asizeref, TRef ikey, uint32_t asize) -{ - /* Try to emit invariant bounds checks. */ - if ((J->flags & (JIT_F_OPT_LOOP|JIT_F_OPT_ABC)) == - (JIT_F_OPT_LOOP|JIT_F_OPT_ABC)) { - IRRef ref = tref_ref(ikey); - IRIns *ir = IR(ref); - int32_t ofs = 0; - IRRef ofsref = 0; - /* Handle constant offsets. */ - if (ir->o == IR_ADD && irref_isk(ir->op2)) { - ofsref = ir->op2; - ofs = IR(ofsref)->i; - ref = ir->op1; - ir = IR(ref); - } - /* Got scalar evolution analysis results for this reference? */ - if (ref == J->scev.idx) { - int32_t stop; - lua_assert(irt_isint(J->scev.t) && ir->o == IR_SLOAD); - stop = numberVint(&(J->L->base - J->baseslot)[ir->op1 + FORL_STOP]); - /* Runtime value for stop of loop is within bounds? */ - if ((uint64_t)stop + ofs < (uint64_t)asize) { - /* Emit invariant bounds check for stop. */ - emitir(IRTG(IR_ABC, IRT_P32), asizeref, ofs == 0 ? J->scev.stop : - emitir(IRTI(IR_ADD), J->scev.stop, ofsref)); - /* Emit invariant bounds check for start, if not const or negative. */ - if (!(J->scev.dir && J->scev.start && - (int64_t)IR(J->scev.start)->i + ofs >= 0)) - emitir(IRTG(IR_ABC, IRT_P32), asizeref, ikey); - return; - } - } - } - emitir(IRTGI(IR_ABC), asizeref, ikey); /* Emit regular bounds check. */ -} - -/* Record indexed key lookup. */ -static TRef rec_idx_key(jit_State *J, RecordIndex *ix) -{ - TRef key; - GCtab *t = tabV(&ix->tabv); - ix->oldv = lj_tab_get(J->L, t, &ix->keyv); /* Lookup previous value. */ - - /* Integer keys are looked up in the array part first. */ - key = ix->key; - if (tref_isnumber(key)) { - int32_t k = numberVint(&ix->keyv); - if (!tvisint(&ix->keyv) && numV(&ix->keyv) != (lua_Number)k) - k = LJ_MAX_ASIZE; - if ((MSize)k < LJ_MAX_ASIZE) { /* Potential array key? */ - TRef ikey = lj_opt_narrow_index(J, key); - TRef asizeref = emitir(IRTI(IR_FLOAD), ix->tab, IRFL_TAB_ASIZE); - if ((MSize)k < t->asize) { /* Currently an array key? */ - TRef arrayref; - rec_idx_abc(J, asizeref, ikey, t->asize); - arrayref = emitir(IRT(IR_FLOAD, IRT_P32), ix->tab, IRFL_TAB_ARRAY); - return emitir(IRT(IR_AREF, IRT_P32), arrayref, ikey); - } else { /* Currently not in array (may be an array extension)? */ - emitir(IRTGI(IR_ULE), asizeref, ikey); /* Inv. bounds check. */ - if (k == 0 && tref_isk(key)) - key = lj_ir_knum_zero(J); /* Canonicalize 0 or +-0.0 to +0.0. */ - /* And continue with the hash lookup. */ - } - } else if (!tref_isk(key)) { - /* We can rule out const numbers which failed the integerness test - ** above. But all other numbers are potential array keys. - */ - if (t->asize == 0) { /* True sparse tables have an empty array part. */ - /* Guard that the array part stays empty. */ - TRef tmp = emitir(IRTI(IR_FLOAD), ix->tab, IRFL_TAB_ASIZE); - emitir(IRTGI(IR_EQ), tmp, lj_ir_kint(J, 0)); - } else { - lj_trace_err(J, LJ_TRERR_NYITMIX); - } - } - } - - /* Otherwise the key is located in the hash part. */ - if (t->hmask == 0) { /* Shortcut for empty hash part. */ - /* Guard that the hash part stays empty. */ - TRef tmp = emitir(IRTI(IR_FLOAD), ix->tab, IRFL_TAB_HMASK); - emitir(IRTGI(IR_EQ), tmp, lj_ir_kint(J, 0)); - return lj_ir_kkptr(J, niltvg(J2G(J))); - } - if (tref_isinteger(key)) /* Hash keys are based on numbers, not ints. */ - key = emitir(IRTN(IR_CONV), key, IRCONV_NUM_INT); - if (tref_isk(key)) { - /* Optimize lookup of constant hash keys. */ - MSize hslot = (MSize)((char *)ix->oldv - (char *)&noderef(t->node)[0].val); - if (t->hmask > 0 && hslot <= t->hmask*(MSize)sizeof(Node) && - hslot <= 65535*(MSize)sizeof(Node)) { - TRef node, kslot; - TRef hm = emitir(IRTI(IR_FLOAD), ix->tab, IRFL_TAB_HMASK); - emitir(IRTGI(IR_EQ), hm, lj_ir_kint(J, (int32_t)t->hmask)); - node = emitir(IRT(IR_FLOAD, IRT_P32), ix->tab, IRFL_TAB_NODE); - kslot = lj_ir_kslot(J, key, hslot / sizeof(Node)); - return emitir(IRTG(IR_HREFK, IRT_P32), node, kslot); - } - } - /* Fall back to a regular hash lookup. */ - return emitir(IRT(IR_HREF, IRT_P32), ix->tab, key); -} - -/* Determine whether a key is NOT one of the fast metamethod names. */ -static int nommstr(jit_State *J, TRef key) -{ - if (tref_isstr(key)) { - if (tref_isk(key)) { - GCstr *str = ir_kstr(IR(tref_ref(key))); - uint32_t mm; - for (mm = 0; mm <= MM_FAST; mm++) - if (mmname_str(J2G(J), mm) == str) - return 0; /* MUST be one the fast metamethod names. */ - } else { - return 0; /* Variable string key MAY be a metamethod name. */ - } - } - return 1; /* CANNOT be a metamethod name. */ -} - -/* Record indexed load/store. */ -TRef lj_record_idx(jit_State *J, RecordIndex *ix) -{ - TRef xref; - IROp xrefop, loadop; - cTValue *oldv; - - while (!tref_istab(ix->tab)) { /* Handle non-table lookup. */ - /* Never call raw lj_record_idx() on non-table. */ - lua_assert(ix->idxchain != 0); - if (!lj_record_mm_lookup(J, ix, ix->val ? MM_newindex : MM_index)) - lj_trace_err(J, LJ_TRERR_NOMM); - handlemm: - if (tref_isfunc(ix->mobj)) { /* Handle metamethod call. */ - BCReg func = rec_mm_prep(J, ix->val ? lj_cont_nop : lj_cont_ra); - TRef *base = J->base + func; - TValue *tv = J->L->base + func; - base[0] = ix->mobj; base[1] = ix->tab; base[2] = ix->key; - setfuncV(J->L, tv+0, funcV(&ix->mobjv)); - copyTV(J->L, tv+1, &ix->tabv); - copyTV(J->L, tv+2, &ix->keyv); - if (ix->val) { - base[3] = ix->val; - copyTV(J->L, tv+3, &ix->valv); - lj_record_call(J, func, 3); /* mobj(tab, key, val) */ - return 0; - } else { - lj_record_call(J, func, 2); /* res = mobj(tab, key) */ - return 0; /* No result yet. */ - } - } - /* Otherwise retry lookup with metaobject. */ - ix->tab = ix->mobj; - copyTV(J->L, &ix->tabv, &ix->mobjv); - if (--ix->idxchain == 0) - lj_trace_err(J, LJ_TRERR_IDXLOOP); - } - - /* First catch nil and NaN keys for tables. */ - if (tvisnil(&ix->keyv) || (tvisnum(&ix->keyv) && tvisnan(&ix->keyv))) { - if (ix->val) /* Better fail early. */ - lj_trace_err(J, LJ_TRERR_STORENN); - if (tref_isk(ix->key)) { - if (ix->idxchain && lj_record_mm_lookup(J, ix, MM_index)) - goto handlemm; - return TREF_NIL; - } - } - - /* Record the key lookup. */ - xref = rec_idx_key(J, ix); - xrefop = IR(tref_ref(xref))->o; - loadop = xrefop == IR_AREF ? IR_ALOAD : IR_HLOAD; - /* The lj_meta_tset() inconsistency is gone, but better play safe. */ - oldv = xrefop == IR_KKPTR ? (cTValue *)ir_kptr(IR(tref_ref(xref))) : ix->oldv; - - if (ix->val == 0) { /* Indexed load */ - IRType t = itype2irt(oldv); - TRef res; - if (oldv == niltvg(J2G(J))) { - emitir(IRTG(IR_EQ, IRT_P32), xref, lj_ir_kkptr(J, niltvg(J2G(J)))); - res = TREF_NIL; - } else { - res = emitir(IRTG(loadop, t), xref, 0); - } - if (t == IRT_NIL && ix->idxchain && lj_record_mm_lookup(J, ix, MM_index)) - goto handlemm; - if (irtype_ispri(t)) res = TREF_PRI(t); /* Canonicalize primitives. */ - return res; - } else { /* Indexed store. */ - GCtab *mt = tabref(tabV(&ix->tabv)->metatable); - int keybarrier = tref_isgcv(ix->key) && !tref_isnil(ix->val); - if (tvisnil(oldv)) { /* Previous value was nil? */ - /* Need to duplicate the hasmm check for the early guards. */ - int hasmm = 0; - if (ix->idxchain && mt) { - cTValue *mo = lj_tab_getstr(mt, mmname_str(J2G(J), MM_newindex)); - hasmm = mo && !tvisnil(mo); - } - if (hasmm) - emitir(IRTG(loadop, IRT_NIL), xref, 0); /* Guard for nil value. */ - else if (xrefop == IR_HREF) - emitir(IRTG(oldv == niltvg(J2G(J)) ? IR_EQ : IR_NE, IRT_P32), - xref, lj_ir_kkptr(J, niltvg(J2G(J)))); - if (ix->idxchain && lj_record_mm_lookup(J, ix, MM_newindex)) { - lua_assert(hasmm); - goto handlemm; - } - lua_assert(!hasmm); - if (oldv == niltvg(J2G(J))) { /* Need to insert a new key. */ - TRef key = ix->key; - if (tref_isinteger(key)) /* NEWREF needs a TValue as a key. */ - key = emitir(IRTN(IR_CONV), key, IRCONV_NUM_INT); - xref = emitir(IRT(IR_NEWREF, IRT_P32), ix->tab, key); - keybarrier = 0; /* NEWREF already takes care of the key barrier. */ - } - } else if (!lj_opt_fwd_wasnonnil(J, loadop, tref_ref(xref))) { - /* Cannot derive that the previous value was non-nil, must do checks. */ - if (xrefop == IR_HREF) /* Guard against store to niltv. */ - emitir(IRTG(IR_NE, IRT_P32), xref, lj_ir_kkptr(J, niltvg(J2G(J)))); - if (ix->idxchain) { /* Metamethod lookup required? */ - /* A check for NULL metatable is cheaper (hoistable) than a load. */ - if (!mt) { - TRef mtref = emitir(IRT(IR_FLOAD, IRT_TAB), ix->tab, IRFL_TAB_META); - emitir(IRTG(IR_EQ, IRT_TAB), mtref, lj_ir_knull(J, IRT_TAB)); - } else { - IRType t = itype2irt(oldv); - emitir(IRTG(loadop, t), xref, 0); /* Guard for non-nil value. */ - } - } - } else { - keybarrier = 0; /* Previous non-nil value kept the key alive. */ - } - /* Convert int to number before storing. */ - if (!LJ_DUALNUM && tref_isinteger(ix->val)) - ix->val = emitir(IRTN(IR_CONV), ix->val, IRCONV_NUM_INT); - emitir(IRT(loadop+IRDELTA_L2S, tref_type(ix->val)), xref, ix->val); - if (keybarrier || tref_isgcv(ix->val)) - emitir(IRT(IR_TBAR, IRT_NIL), ix->tab, 0); - /* Invalidate neg. metamethod cache for stores with certain string keys. */ - if (!nommstr(J, ix->key)) { - TRef fref = emitir(IRT(IR_FREF, IRT_P32), ix->tab, IRFL_TAB_NOMM); - emitir(IRT(IR_FSTORE, IRT_U8), fref, lj_ir_kint(J, 0)); - } - J->needsnap = 1; - return 0; - } -} - -/* -- Upvalue access ------------------------------------------------------ */ - -/* Check whether upvalue is immutable and ok to constify. */ -static int rec_upvalue_constify(jit_State *J, GCupval *uvp) -{ - if (uvp->immutable) { - cTValue *o = uvval(uvp); - /* Don't constify objects that may retain large amounts of memory. */ -#if LJ_HASFFI - if (tviscdata(o)) { - GCcdata *cd = cdataV(o); - if (!cdataisv(cd) && !(cd->marked & LJ_GC_CDATA_FIN)) { - CType *ct = ctype_raw(ctype_ctsG(J2G(J)), cd->ctypeid); - if (!ctype_hassize(ct->info) || ct->size <= 16) - return 1; - } - return 0; - } -#else - UNUSED(J); -#endif - if (!(tvistab(o) || tvisudata(o) || tvisthread(o))) - return 1; - } - return 0; -} - -/* Record upvalue load/store. */ -static TRef rec_upvalue(jit_State *J, uint32_t uv, TRef val) -{ - GCupval *uvp = &gcref(J->fn->l.uvptr[uv])->uv; - TRef fn = getcurrf(J); - IRRef uref; - int needbarrier = 0; - if (rec_upvalue_constify(J, uvp)) { /* Try to constify immutable upvalue. */ - TRef tr, kfunc; - lua_assert(val == 0); - if (!tref_isk(fn)) { /* Late specialization of current function. */ - if (J->pt->flags >= PROTO_CLC_POLY) - goto noconstify; - kfunc = lj_ir_kfunc(J, J->fn); - emitir(IRTG(IR_EQ, IRT_FUNC), fn, kfunc); - J->base[-1] = TREF_FRAME | kfunc; - fn = kfunc; - } - tr = lj_record_constify(J, uvval(uvp)); - if (tr) - return tr; - } -noconstify: - /* Note: this effectively limits LJ_MAX_UPVAL to 127. */ - uv = (uv << 8) | (hashrot(uvp->dhash, uvp->dhash + HASH_BIAS) & 0xff); - if (!uvp->closed) { - /* In current stack? */ - if (uvval(uvp) >= tvref(J->L->stack) && - uvval(uvp) < tvref(J->L->maxstack)) { - int32_t slot = (int32_t)(uvval(uvp) - (J->L->base - J->baseslot)); - if (slot >= 0) { /* Aliases an SSA slot? */ - slot -= (int32_t)J->baseslot; /* Note: slot number may be negative! */ - /* NYI: add IR to guard that it's still aliasing the same slot. */ - if (val == 0) { - return getslot(J, slot); - } else { - J->base[slot] = val; - if (slot >= (int32_t)J->maxslot) J->maxslot = (BCReg)(slot+1); - return 0; - } - } - } - uref = tref_ref(emitir(IRTG(IR_UREFO, IRT_P32), fn, uv)); - } else { - needbarrier = 1; - uref = tref_ref(emitir(IRTG(IR_UREFC, IRT_P32), fn, uv)); - } - if (val == 0) { /* Upvalue load */ - IRType t = itype2irt(uvval(uvp)); - TRef res = emitir(IRTG(IR_ULOAD, t), uref, 0); - if (irtype_ispri(t)) res = TREF_PRI(t); /* Canonicalize primitive refs. */ - return res; - } else { /* Upvalue store. */ - /* Convert int to number before storing. */ - if (!LJ_DUALNUM && tref_isinteger(val)) - val = emitir(IRTN(IR_CONV), val, IRCONV_NUM_INT); - emitir(IRT(IR_USTORE, tref_type(val)), uref, val); - if (needbarrier && tref_isgcv(val)) - emitir(IRT(IR_OBAR, IRT_NIL), uref, val); - J->needsnap = 1; - return 0; - } -} - -/* -- Record calls to Lua functions --------------------------------------- */ - -/* Check unroll limits for calls. */ -static void check_call_unroll(jit_State *J, TraceNo lnk) -{ - cTValue *frame = J->L->base - 1; - void *pc = mref(frame_func(frame)->l.pc, void); - int32_t depth = J->framedepth; - int32_t count = 0; - if ((J->pt->flags & PROTO_VARARG)) depth--; /* Vararg frame still missing. */ - for (; depth > 0; depth--) { /* Count frames with same prototype. */ - if (frame_iscont(frame)) depth--; - frame = frame_prev(frame); - if (mref(frame_func(frame)->l.pc, void) == pc) - count++; - } - if (J->pc == J->startpc) { - if (count + J->tailcalled > J->param[JIT_P_recunroll]) { - J->pc++; - if (J->framedepth + J->retdepth == 0) - rec_stop(J, LJ_TRLINK_TAILREC, J->cur.traceno); /* Tail-recursion. */ - else - rec_stop(J, LJ_TRLINK_UPREC, J->cur.traceno); /* Up-recursion. */ - } - } else { - if (count > J->param[JIT_P_callunroll]) { - if (lnk) { /* Possible tail- or up-recursion. */ - lj_trace_flush(J, lnk); /* Flush trace that only returns. */ - /* Set a small, pseudo-random hotcount for a quick retry of JFUNC*. */ - hotcount_set(J2GG(J), J->pc+1, LJ_PRNG_BITS(J, 4)); - } - lj_trace_err(J, LJ_TRERR_CUNROLL); - } - } -} - -/* Record Lua function setup. */ -static void rec_func_setup(jit_State *J) -{ - GCproto *pt = J->pt; - BCReg s, numparams = pt->numparams; - if ((pt->flags & PROTO_NOJIT)) - lj_trace_err(J, LJ_TRERR_CJITOFF); - if (J->baseslot + pt->framesize >= LJ_MAX_JSLOTS) - lj_trace_err(J, LJ_TRERR_STACKOV); - /* Fill up missing parameters with nil. */ - for (s = J->maxslot; s < numparams; s++) - J->base[s] = TREF_NIL; - /* The remaining slots should never be read before they are written. */ - J->maxslot = numparams; -} - -/* Record Lua vararg function setup. */ -static void rec_func_vararg(jit_State *J) -{ - GCproto *pt = J->pt; - BCReg s, fixargs, vframe = J->maxslot+1; - lua_assert((pt->flags & PROTO_VARARG)); - if (J->baseslot + vframe + pt->framesize >= LJ_MAX_JSLOTS) - lj_trace_err(J, LJ_TRERR_STACKOV); - J->base[vframe-1] = J->base[-1]; /* Copy function up. */ - /* Copy fixarg slots up and set their original slots to nil. */ - fixargs = pt->numparams < J->maxslot ? pt->numparams : J->maxslot; - for (s = 0; s < fixargs; s++) { - J->base[vframe+s] = J->base[s]; - J->base[s] = TREF_NIL; - } - J->maxslot = fixargs; - J->framedepth++; - J->base += vframe; - J->baseslot += vframe; -} - -/* Record entry to a Lua function. */ -static void rec_func_lua(jit_State *J) -{ - rec_func_setup(J); - check_call_unroll(J, 0); -} - -/* Record entry to an already compiled function. */ -static void rec_func_jit(jit_State *J, TraceNo lnk) -{ - GCtrace *T; - rec_func_setup(J); - T = traceref(J, lnk); - if (T->linktype == LJ_TRLINK_RETURN) { /* Trace returns to interpreter? */ - check_call_unroll(J, lnk); - /* Temporarily unpatch JFUNC* to continue recording across function. */ - J->patchins = *J->pc; - J->patchpc = (BCIns *)J->pc; - *J->patchpc = T->startins; - return; - } - J->instunroll = 0; /* Cannot continue across a compiled function. */ - if (J->pc == J->startpc && J->framedepth + J->retdepth == 0) - rec_stop(J, LJ_TRLINK_TAILREC, J->cur.traceno); /* Extra tail-recursion. */ - else - rec_stop(J, LJ_TRLINK_ROOT, lnk); /* Link to the function. */ -} - -/* -- Vararg handling ----------------------------------------------------- */ - -/* Detect y = select(x, ...) idiom. */ -static int select_detect(jit_State *J) -{ - BCIns ins = J->pc[1]; - if (bc_op(ins) == BC_CALLM && bc_b(ins) == 2 && bc_c(ins) == 1) { - cTValue *func = &J->L->base[bc_a(ins)]; - if (tvisfunc(func) && funcV(func)->c.ffid == FF_select) - return 1; - } - return 0; -} - -/* Record vararg instruction. */ -static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults) -{ - int32_t numparams = J->pt->numparams; - ptrdiff_t nvararg = frame_delta(J->L->base-1) - numparams - 1; - lua_assert(frame_isvarg(J->L->base-1)); - if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */ - ptrdiff_t i; - if (nvararg < 0) nvararg = 0; - if (nresults == -1) { - nresults = nvararg; - J->maxslot = dst + (BCReg)nvararg; - } else if (dst + nresults > J->maxslot) { - J->maxslot = dst + (BCReg)nresults; - } - for (i = 0; i < nresults; i++) - J->base[dst+i] = i < nvararg ? getslot(J, i - nvararg - 1) : TREF_NIL; - } else { /* Unknown number of varargs passed to trace. */ - TRef fr = emitir(IRTI(IR_SLOAD), 0, IRSLOAD_READONLY|IRSLOAD_FRAME); - int32_t frofs = 8*(1+numparams)+FRAME_VARG; - if (nresults >= 0) { /* Known fixed number of results. */ - ptrdiff_t i; - if (nvararg > 0) { - ptrdiff_t nload = nvararg >= nresults ? nresults : nvararg; - TRef vbase; - if (nvararg >= nresults) - emitir(IRTGI(IR_GE), fr, lj_ir_kint(J, frofs+8*(int32_t)nresults)); - else - emitir(IRTGI(IR_EQ), fr, lj_ir_kint(J, frame_ftsz(J->L->base-1))); - vbase = emitir(IRTI(IR_SUB), REF_BASE, fr); - vbase = emitir(IRT(IR_ADD, IRT_P32), vbase, lj_ir_kint(J, frofs-8)); - for (i = 0; i < nload; i++) { - IRType t = itype2irt(&J->L->base[i-1-nvararg]); - TRef aref = emitir(IRT(IR_AREF, IRT_P32), - vbase, lj_ir_kint(J, (int32_t)i)); - TRef tr = emitir(IRTG(IR_VLOAD, t), aref, 0); - if (irtype_ispri(t)) tr = TREF_PRI(t); /* Canonicalize primitives. */ - J->base[dst+i] = tr; - } - } else { - emitir(IRTGI(IR_LE), fr, lj_ir_kint(J, frofs)); - nvararg = 0; - } - for (i = nvararg; i < nresults; i++) - J->base[dst+i] = TREF_NIL; - if (dst + (BCReg)nresults > J->maxslot) - J->maxslot = dst + (BCReg)nresults; - } else if (select_detect(J)) { /* y = select(x, ...) */ - TRef tridx = J->base[dst-1]; - TRef tr = TREF_NIL; - ptrdiff_t idx = lj_ffrecord_select_mode(J, tridx, &J->L->base[dst-1]); - if (idx < 0) goto nyivarg; - if (idx != 0 && !tref_isinteger(tridx)) - tridx = emitir(IRTGI(IR_CONV), tridx, IRCONV_INT_NUM|IRCONV_INDEX); - if (idx != 0 && tref_isk(tridx)) { - emitir(IRTGI(idx <= nvararg ? IR_GE : IR_LT), - fr, lj_ir_kint(J, frofs+8*(int32_t)idx)); - frofs -= 8; /* Bias for 1-based index. */ - } else if (idx <= nvararg) { /* Compute size. */ - TRef tmp = emitir(IRTI(IR_ADD), fr, lj_ir_kint(J, -frofs)); - if (numparams) - emitir(IRTGI(IR_GE), tmp, lj_ir_kint(J, 0)); - tr = emitir(IRTI(IR_BSHR), tmp, lj_ir_kint(J, 3)); - if (idx != 0) { - tridx = emitir(IRTI(IR_ADD), tridx, lj_ir_kint(J, -1)); - rec_idx_abc(J, tr, tridx, (uint32_t)nvararg); - } - } else { - TRef tmp = lj_ir_kint(J, frofs); - if (idx != 0) { - TRef tmp2 = emitir(IRTI(IR_BSHL), tridx, lj_ir_kint(J, 3)); - tmp = emitir(IRTI(IR_ADD), tmp2, tmp); - } else { - tr = lj_ir_kint(J, 0); - } - emitir(IRTGI(IR_LT), fr, tmp); - } - if (idx != 0 && idx <= nvararg) { - IRType t; - TRef aref, vbase = emitir(IRTI(IR_SUB), REF_BASE, fr); - vbase = emitir(IRT(IR_ADD, IRT_P32), vbase, lj_ir_kint(J, frofs-8)); - t = itype2irt(&J->L->base[idx-2-nvararg]); - aref = emitir(IRT(IR_AREF, IRT_P32), vbase, tridx); - tr = emitir(IRTG(IR_VLOAD, t), aref, 0); - if (irtype_ispri(t)) tr = TREF_PRI(t); /* Canonicalize primitives. */ - } - J->base[dst-2] = tr; - J->maxslot = dst-1; - J->bcskip = 2; /* Skip CALLM + select. */ - } else { - nyivarg: - setintV(&J->errinfo, BC_VARG); - lj_trace_err_info(J, LJ_TRERR_NYIBC); - } - } -} - -/* -- Record allocations -------------------------------------------------- */ - -static TRef rec_tnew(jit_State *J, uint32_t ah) -{ - uint32_t asize = ah & 0x7ff; - uint32_t hbits = ah >> 11; - if (asize == 0x7ff) asize = 0x801; - return emitir(IRTG(IR_TNEW, IRT_TAB), asize, hbits); -} - -/* -- Record bytecode ops ------------------------------------------------- */ - -/* Prepare for comparison. */ -static void rec_comp_prep(jit_State *J) -{ - /* Prevent merging with snapshot #0 (GC exit) since we fixup the PC. */ - if (J->cur.nsnap == 1 && J->cur.snap[0].ref == J->cur.nins) - emitir_raw(IRT(IR_NOP, IRT_NIL), 0, 0); - lj_snap_add(J); -} - -/* Fixup comparison. */ -static void rec_comp_fixup(jit_State *J, const BCIns *pc, int cond) -{ - BCIns jmpins = pc[1]; - const BCIns *npc = pc + 2 + (cond ? bc_j(jmpins) : 0); - SnapShot *snap = &J->cur.snap[J->cur.nsnap-1]; - /* Set PC to opposite target to avoid re-recording the comp. in side trace. */ - J->cur.snapmap[snap->mapofs + snap->nent] = SNAP_MKPC(npc); - J->needsnap = 1; - if (bc_a(jmpins) < J->maxslot) J->maxslot = bc_a(jmpins); - lj_snap_shrink(J); /* Shrink last snapshot if possible. */ -} - -/* Record the next bytecode instruction (_before_ it's executed). */ -void lj_record_ins(jit_State *J) -{ - cTValue *lbase; - RecordIndex ix; - const BCIns *pc; - BCIns ins; - BCOp op; - TRef ra, rb, rc; - - /* Perform post-processing action before recording the next instruction. */ - if (LJ_UNLIKELY(J->postproc != LJ_POST_NONE)) { - switch (J->postproc) { - case LJ_POST_FIXCOMP: /* Fixup comparison. */ - pc = frame_pc(&J2G(J)->tmptv); - rec_comp_fixup(J, pc, (!tvistruecond(&J2G(J)->tmptv2) ^ (bc_op(*pc)&1))); - /* fallthrough */ - case LJ_POST_FIXGUARD: /* Fixup and emit pending guard. */ - case LJ_POST_FIXGUARDSNAP: /* Fixup and emit pending guard and snapshot. */ - if (!tvistruecond(&J2G(J)->tmptv2)) { - J->fold.ins.o ^= 1; /* Flip guard to opposite. */ - if (J->postproc == LJ_POST_FIXGUARDSNAP) { - SnapShot *snap = &J->cur.snap[J->cur.nsnap-1]; - J->cur.snapmap[snap->mapofs+snap->nent-1]--; /* False -> true. */ - } - } - lj_opt_fold(J); /* Emit pending guard. */ - /* fallthrough */ - case LJ_POST_FIXBOOL: - if (!tvistruecond(&J2G(J)->tmptv2)) { - BCReg s; - TValue *tv = J->L->base; - for (s = 0; s < J->maxslot; s++) /* Fixup stack slot (if any). */ - if (J->base[s] == TREF_TRUE && tvisfalse(&tv[s])) { - J->base[s] = TREF_FALSE; - break; - } - } - break; - case LJ_POST_FIXCONST: - { - BCReg s; - TValue *tv = J->L->base; - for (s = 0; s < J->maxslot; s++) /* Constify stack slots (if any). */ - if (J->base[s] == TREF_NIL && !tvisnil(&tv[s])) - J->base[s] = lj_record_constify(J, &tv[s]); - } - break; - case LJ_POST_FFRETRY: /* Suppress recording of retried fast function. */ - if (bc_op(*J->pc) >= BC__MAX) - return; - break; - default: lua_assert(0); break; - } - J->postproc = LJ_POST_NONE; - } - - /* Need snapshot before recording next bytecode (e.g. after a store). */ - if (J->needsnap) { - J->needsnap = 0; - lj_snap_purge(J); - lj_snap_add(J); - J->mergesnap = 1; - } - - /* Skip some bytecodes. */ - if (LJ_UNLIKELY(J->bcskip > 0)) { - J->bcskip--; - return; - } - - /* Record only closed loops for root traces. */ - pc = J->pc; - if (J->framedepth == 0 && - (MSize)((char *)pc - (char *)J->bc_min) >= J->bc_extent) - lj_trace_err(J, LJ_TRERR_LLEAVE); - -#ifdef LUA_USE_ASSERT - rec_check_slots(J); - rec_check_ir(J); -#endif - - /* Keep a copy of the runtime values of var/num/str operands. */ -#define rav (&ix.valv) -#define rbv (&ix.tabv) -#define rcv (&ix.keyv) - - lbase = J->L->base; - ins = *pc; - op = bc_op(ins); - ra = bc_a(ins); - ix.val = 0; - switch (bcmode_a(op)) { - case BCMvar: - copyTV(J->L, rav, &lbase[ra]); ix.val = ra = getslot(J, ra); break; - default: break; /* Handled later. */ - } - rb = bc_b(ins); - rc = bc_c(ins); - switch (bcmode_b(op)) { - case BCMnone: rb = 0; rc = bc_d(ins); break; /* Upgrade rc to 'rd'. */ - case BCMvar: - copyTV(J->L, rbv, &lbase[rb]); ix.tab = rb = getslot(J, rb); break; - default: break; /* Handled later. */ - } - switch (bcmode_c(op)) { - case BCMvar: - copyTV(J->L, rcv, &lbase[rc]); ix.key = rc = getslot(J, rc); break; - case BCMpri: setitype(rcv, ~rc); ix.key = rc = TREF_PRI(IRT_NIL+rc); break; - case BCMnum: { cTValue *tv = proto_knumtv(J->pt, rc); - copyTV(J->L, rcv, tv); ix.key = rc = tvisint(tv) ? lj_ir_kint(J, intV(tv)) : - lj_ir_knumint(J, numV(tv)); } break; - case BCMstr: { GCstr *s = gco2str(proto_kgc(J->pt, ~(ptrdiff_t)rc)); - setstrV(J->L, rcv, s); ix.key = rc = lj_ir_kstr(J, s); } break; - default: break; /* Handled later. */ - } - - switch (op) { - - /* -- Comparison ops ---------------------------------------------------- */ - - case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: -#if LJ_HASFFI - if (tref_iscdata(ra) || tref_iscdata(rc)) { - rec_mm_comp_cdata(J, &ix, op, ((int)op & 2) ? MM_le : MM_lt); - break; - } -#endif - /* Emit nothing for two numeric or string consts. */ - if (!(tref_isk2(ra,rc) && tref_isnumber_str(ra) && tref_isnumber_str(rc))) { - IRType ta = tref_isinteger(ra) ? IRT_INT : tref_type(ra); - IRType tc = tref_isinteger(rc) ? IRT_INT : tref_type(rc); - int irop; - if (ta != tc) { - /* Widen mixed number/int comparisons to number/number comparison. */ - if (ta == IRT_INT && tc == IRT_NUM) { - ra = emitir(IRTN(IR_CONV), ra, IRCONV_NUM_INT); - ta = IRT_NUM; - } else if (ta == IRT_NUM && tc == IRT_INT) { - rc = emitir(IRTN(IR_CONV), rc, IRCONV_NUM_INT); - } else if (LJ_52) { - ta = IRT_NIL; /* Force metamethod for different types. */ - } else if (!((ta == IRT_FALSE || ta == IRT_TRUE) && - (tc == IRT_FALSE || tc == IRT_TRUE))) { - break; /* Interpreter will throw for two different types. */ - } - } - rec_comp_prep(J); - irop = (int)op - (int)BC_ISLT + (int)IR_LT; - if (ta == IRT_NUM) { - if ((irop & 1)) irop ^= 4; /* ISGE/ISGT are unordered. */ - if (!lj_ir_numcmp(numberVnum(rav), numberVnum(rcv), (IROp)irop)) - irop ^= 5; - } else if (ta == IRT_INT) { - if (!lj_ir_numcmp(numberVnum(rav), numberVnum(rcv), (IROp)irop)) - irop ^= 1; - } else if (ta == IRT_STR) { - if (!lj_ir_strcmp(strV(rav), strV(rcv), (IROp)irop)) irop ^= 1; - ra = lj_ir_call(J, IRCALL_lj_str_cmp, ra, rc); - rc = lj_ir_kint(J, 0); - ta = IRT_INT; - } else { - rec_mm_comp(J, &ix, (int)op); - break; - } - emitir(IRTG(irop, ta), ra, rc); - rec_comp_fixup(J, J->pc, ((int)op ^ irop) & 1); - } - break; - - case BC_ISEQV: case BC_ISNEV: - case BC_ISEQS: case BC_ISNES: - case BC_ISEQN: case BC_ISNEN: - case BC_ISEQP: case BC_ISNEP: -#if LJ_HASFFI - if (tref_iscdata(ra) || tref_iscdata(rc)) { - rec_mm_comp_cdata(J, &ix, op, MM_eq); - break; - } -#endif - /* Emit nothing for two non-table, non-udata consts. */ - if (!(tref_isk2(ra, rc) && !(tref_istab(ra) || tref_isudata(ra)))) { - int diff; - rec_comp_prep(J); - diff = lj_record_objcmp(J, ra, rc, rav, rcv); - if (diff == 2 || !(tref_istab(ra) || tref_isudata(ra))) - rec_comp_fixup(J, J->pc, ((int)op & 1) == !diff); - else if (diff == 1) /* Only check __eq if different, but same type. */ - rec_mm_equal(J, &ix, (int)op); - } - break; - - /* -- Unary test and copy ops ------------------------------------------- */ - - case BC_ISTC: case BC_ISFC: - if ((op & 1) == tref_istruecond(rc)) - rc = 0; /* Don't store if condition is not true. */ - /* fallthrough */ - case BC_IST: case BC_ISF: /* Type specialization suffices. */ - if (bc_a(pc[1]) < J->maxslot) - J->maxslot = bc_a(pc[1]); /* Shrink used slots. */ - break; - - /* -- Unary ops --------------------------------------------------------- */ - - case BC_NOT: - /* Type specialization already forces const result. */ - rc = tref_istruecond(rc) ? TREF_FALSE : TREF_TRUE; - break; - - case BC_LEN: - if (tref_isstr(rc)) - rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN); - else if (!LJ_52 && tref_istab(rc)) - rc = lj_ir_call(J, IRCALL_lj_tab_len, rc); - else - rc = rec_mm_len(J, rc, rcv); - break; - - /* -- Arithmetic ops ---------------------------------------------------- */ - - case BC_UNM: - if (tref_isnumber_str(rc)) { - rc = lj_opt_narrow_unm(J, rc, rcv); - } else { - ix.tab = rc; - copyTV(J->L, &ix.tabv, rcv); - rc = rec_mm_arith(J, &ix, MM_unm); - } - break; - - case BC_ADDNV: case BC_SUBNV: case BC_MULNV: case BC_DIVNV: case BC_MODNV: - /* Swap rb/rc and rbv/rcv. rav is temp. */ - ix.tab = rc; ix.key = rc = rb; rb = ix.tab; - copyTV(J->L, rav, rbv); - copyTV(J->L, rbv, rcv); - copyTV(J->L, rcv, rav); - if (op == BC_MODNV) - goto recmod; - /* fallthrough */ - case BC_ADDVN: case BC_SUBVN: case BC_MULVN: case BC_DIVVN: - case BC_ADDVV: case BC_SUBVV: case BC_MULVV: case BC_DIVVV: { - MMS mm = bcmode_mm(op); - if (tref_isnumber_str(rb) && tref_isnumber_str(rc)) - rc = lj_opt_narrow_arith(J, rb, rc, rbv, rcv, - (int)mm - (int)MM_add + (int)IR_ADD); - else - rc = rec_mm_arith(J, &ix, mm); - break; - } - - case BC_MODVN: case BC_MODVV: - recmod: - if (tref_isnumber_str(rb) && tref_isnumber_str(rc)) - rc = lj_opt_narrow_mod(J, rb, rc, rcv); - else - rc = rec_mm_arith(J, &ix, MM_mod); - break; - - case BC_POW: - if (tref_isnumber_str(rb) && tref_isnumber_str(rc)) - rc = lj_opt_narrow_pow(J, lj_ir_tonum(J, rb), rc, rcv); - else - rc = rec_mm_arith(J, &ix, MM_pow); - break; - - /* -- Constant and move ops --------------------------------------------- */ - - case BC_MOV: - /* Clear gap of method call to avoid resurrecting previous refs. */ - if (ra > J->maxslot) J->base[ra-1] = 0; - break; - case BC_KSTR: case BC_KNUM: case BC_KPRI: - break; - case BC_KSHORT: - rc = lj_ir_kint(J, (int32_t)(int16_t)rc); - break; - case BC_KNIL: - while (ra <= rc) - J->base[ra++] = TREF_NIL; - if (rc >= J->maxslot) J->maxslot = rc+1; - break; -#if LJ_HASFFI - case BC_KCDATA: - rc = lj_ir_kgc(J, proto_kgc(J->pt, ~(ptrdiff_t)rc), IRT_CDATA); - break; -#endif - - /* -- Upvalue and function ops ------------------------------------------ */ - - case BC_UGET: - rc = rec_upvalue(J, rc, 0); - break; - case BC_USETV: case BC_USETS: case BC_USETN: case BC_USETP: - rec_upvalue(J, ra, rc); - break; - - /* -- Table ops --------------------------------------------------------- */ - - case BC_GGET: case BC_GSET: - settabV(J->L, &ix.tabv, tabref(J->fn->l.env)); - ix.tab = emitir(IRT(IR_FLOAD, IRT_TAB), getcurrf(J), IRFL_FUNC_ENV); - ix.idxchain = LJ_MAX_IDXCHAIN; - rc = lj_record_idx(J, &ix); - break; - - case BC_TGETB: case BC_TSETB: - setintV(&ix.keyv, (int32_t)rc); - ix.key = lj_ir_kint(J, (int32_t)rc); - /* fallthrough */ - case BC_TGETV: case BC_TGETS: case BC_TSETV: case BC_TSETS: - ix.idxchain = LJ_MAX_IDXCHAIN; - rc = lj_record_idx(J, &ix); - break; - - case BC_TNEW: - rc = rec_tnew(J, rc); - break; - case BC_TDUP: - rc = emitir(IRTG(IR_TDUP, IRT_TAB), - lj_ir_ktab(J, gco2tab(proto_kgc(J->pt, ~(ptrdiff_t)rc))), 0); - break; - - /* -- Calls and vararg handling ----------------------------------------- */ - - case BC_ITERC: - J->base[ra] = getslot(J, ra-3); - J->base[ra+1] = getslot(J, ra-2); - J->base[ra+2] = getslot(J, ra-1); - { /* Do the actual copy now because lj_record_call needs the values. */ - TValue *b = &J->L->base[ra]; - copyTV(J->L, b, b-3); - copyTV(J->L, b+1, b-2); - copyTV(J->L, b+2, b-1); - } - lj_record_call(J, ra, (ptrdiff_t)rc-1); - break; - - /* L->top is set to L->base+ra+rc+NARGS-1+1. See lj_dispatch_ins(). */ - case BC_CALLM: - rc = (BCReg)(J->L->top - J->L->base) - ra; - /* fallthrough */ - case BC_CALL: - lj_record_call(J, ra, (ptrdiff_t)rc-1); - break; - - case BC_CALLMT: - rc = (BCReg)(J->L->top - J->L->base) - ra; - /* fallthrough */ - case BC_CALLT: - lj_record_tailcall(J, ra, (ptrdiff_t)rc-1); - break; - - case BC_VARG: - rec_varg(J, ra, (ptrdiff_t)rb-1); - break; - - /* -- Returns ----------------------------------------------------------- */ - - case BC_RETM: - /* L->top is set to L->base+ra+rc+NRESULTS-1, see lj_dispatch_ins(). */ - rc = (BCReg)(J->L->top - J->L->base) - ra + 1; - /* fallthrough */ - case BC_RET: case BC_RET0: case BC_RET1: - lj_record_ret(J, ra, (ptrdiff_t)rc-1); - break; - - /* -- Loops and branches ------------------------------------------------ */ - - case BC_FORI: - if (rec_for(J, pc, 0) != LOOPEV_LEAVE) - J->loopref = J->cur.nins; - break; - case BC_JFORI: - lua_assert(bc_op(pc[(ptrdiff_t)rc-BCBIAS_J]) == BC_JFORL); - if (rec_for(J, pc, 0) != LOOPEV_LEAVE) /* Link to existing loop. */ - rec_stop(J, LJ_TRLINK_ROOT, bc_d(pc[(ptrdiff_t)rc-BCBIAS_J])); - /* Continue tracing if the loop is not entered. */ - break; - - case BC_FORL: - rec_loop_interp(J, pc, rec_for(J, pc+((ptrdiff_t)rc-BCBIAS_J), 1)); - break; - case BC_ITERL: - rec_loop_interp(J, pc, rec_iterl(J, *pc)); - break; - case BC_LOOP: - rec_loop_interp(J, pc, rec_loop(J, ra)); - break; - - case BC_JFORL: - rec_loop_jit(J, rc, rec_for(J, pc+bc_j(traceref(J, rc)->startins), 1)); - break; - case BC_JITERL: - rec_loop_jit(J, rc, rec_iterl(J, traceref(J, rc)->startins)); - break; - case BC_JLOOP: - rec_loop_jit(J, rc, rec_loop(J, ra)); - break; - - case BC_IFORL: - case BC_IITERL: - case BC_ILOOP: - case BC_IFUNCF: - case BC_IFUNCV: - lj_trace_err(J, LJ_TRERR_BLACKL); - break; - - case BC_JMP: - if (ra < J->maxslot) - J->maxslot = ra; /* Shrink used slots. */ - break; - - /* -- Function headers -------------------------------------------------- */ - - case BC_FUNCF: - rec_func_lua(J); - break; - case BC_JFUNCF: - rec_func_jit(J, rc); - break; - - case BC_FUNCV: - rec_func_vararg(J); - rec_func_lua(J); - break; - case BC_JFUNCV: - lua_assert(0); /* Cannot happen. No hotcall counting for varag funcs. */ - break; - - case BC_FUNCC: - case BC_FUNCCW: - lj_ffrecord_func(J); - break; - - default: - if (op >= BC__MAX) { - lj_ffrecord_func(J); - break; - } - /* fallthrough */ - case BC_ITERN: - case BC_ISNEXT: - case BC_CAT: - case BC_UCLO: - case BC_FNEW: - case BC_TSETM: - setintV(&J->errinfo, (int32_t)op); - lj_trace_err_info(J, LJ_TRERR_NYIBC); - break; - } - - /* rc == 0 if we have no result yet, e.g. pending __index metamethod call. */ - if (bcmode_a(op) == BCMdst && rc) { - J->base[ra] = rc; - if (ra >= J->maxslot) J->maxslot = ra+1; - } - -#undef rav -#undef rbv -#undef rcv - - /* Limit the number of recorded IR instructions. */ - if (J->cur.nins > REF_FIRST+(IRRef)J->param[JIT_P_maxrecord]) - lj_trace_err(J, LJ_TRERR_TRACEOV); -} - -/* -- Recording setup ----------------------------------------------------- */ - -/* Setup recording for a root trace started by a hot loop. */ -static const BCIns *rec_setup_root(jit_State *J) -{ - /* Determine the next PC and the bytecode range for the loop. */ - const BCIns *pcj, *pc = J->pc; - BCIns ins = *pc; - BCReg ra = bc_a(ins); - switch (bc_op(ins)) { - case BC_FORL: - J->bc_extent = (MSize)(-bc_j(ins))*sizeof(BCIns); - pc += 1+bc_j(ins); - J->bc_min = pc; - break; - case BC_ITERL: - lua_assert(bc_op(pc[-1]) == BC_ITERC); - J->maxslot = ra + bc_b(pc[-1]) - 1; - J->bc_extent = (MSize)(-bc_j(ins))*sizeof(BCIns); - pc += 1+bc_j(ins); - lua_assert(bc_op(pc[-1]) == BC_JMP); - J->bc_min = pc; - break; - case BC_LOOP: - /* Only check BC range for real loops, but not for "repeat until true". */ - pcj = pc + bc_j(ins); - ins = *pcj; - if (bc_op(ins) == BC_JMP && bc_j(ins) < 0) { - J->bc_min = pcj+1 + bc_j(ins); - J->bc_extent = (MSize)(-bc_j(ins))*sizeof(BCIns); - } - J->maxslot = ra; - pc++; - break; - case BC_RET: - case BC_RET0: - case BC_RET1: - /* No bytecode range check for down-recursive root traces. */ - J->maxslot = ra + bc_d(ins) - 1; - break; - case BC_FUNCF: - /* No bytecode range check for root traces started by a hot call. */ - J->maxslot = J->pt->numparams; - pc++; - break; - default: - lua_assert(0); - break; - } - return pc; -} - -/* Setup for recording a new trace. */ -void lj_record_setup(jit_State *J) -{ - uint32_t i; - - /* Initialize state related to current trace. */ - memset(J->slot, 0, sizeof(J->slot)); - memset(J->chain, 0, sizeof(J->chain)); - memset(J->bpropcache, 0, sizeof(J->bpropcache)); - J->scev.idx = REF_NIL; - setmref(J->scev.pc, NULL); - - J->baseslot = 1; /* Invoking function is at base[-1]. */ - J->base = J->slot + J->baseslot; - J->maxslot = 0; - J->framedepth = 0; - J->retdepth = 0; - - J->instunroll = J->param[JIT_P_instunroll]; - J->loopunroll = J->param[JIT_P_loopunroll]; - J->tailcalled = 0; - J->loopref = 0; - - J->bc_min = NULL; /* Means no limit. */ - J->bc_extent = ~(MSize)0; - - /* Emit instructions for fixed references. Also triggers initial IR alloc. */ - emitir_raw(IRT(IR_BASE, IRT_P32), J->parent, J->exitno); - for (i = 0; i <= 2; i++) { - IRIns *ir = IR(REF_NIL-i); - ir->i = 0; - ir->t.irt = (uint8_t)(IRT_NIL+i); - ir->o = IR_KPRI; - ir->prev = 0; - } - J->cur.nk = REF_TRUE; - - J->startpc = J->pc; - setmref(J->cur.startpc, J->pc); - if (J->parent) { /* Side trace. */ - GCtrace *T = traceref(J, J->parent); - TraceNo root = T->root ? T->root : J->parent; - J->cur.root = (uint16_t)root; - J->cur.startins = BCINS_AD(BC_JMP, 0, 0); - /* Check whether we could at least potentially form an extra loop. */ - if (J->exitno == 0 && T->snap[0].nent == 0) { - /* We can narrow a FORL for some side traces, too. */ - if (J->pc > proto_bc(J->pt) && bc_op(J->pc[-1]) == BC_JFORI && - bc_d(J->pc[bc_j(J->pc[-1])-1]) == root) { - lj_snap_add(J); - rec_for_loop(J, J->pc-1, &J->scev, 1); - goto sidecheck; - } - } else { - J->startpc = NULL; /* Prevent forming an extra loop. */ - } - lj_snap_replay(J, T); - sidecheck: - if (traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] || - T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + - J->param[JIT_P_tryside]) { - rec_stop(J, LJ_TRLINK_INTERP, 0); - } - } else { /* Root trace. */ - J->cur.root = 0; - J->cur.startins = *J->pc; - J->pc = rec_setup_root(J); - /* Note: the loop instruction itself is recorded at the end and not - ** at the start! So snapshot #0 needs to point to the *next* instruction. - */ - lj_snap_add(J); - if (bc_op(J->cur.startins) == BC_FORL) - rec_for_loop(J, J->pc-1, &J->scev, 1); - if (1 + J->pt->framesize >= LJ_MAX_JSLOTS) - lj_trace_err(J, LJ_TRERR_STACKOV); - } -#ifdef LUAJIT_ENABLE_CHECKHOOK - /* Regularly check for instruction/line hooks from compiled code and - ** exit to the interpreter if the hooks are set. - ** - ** This is a compile-time option and disabled by default, since the - ** hook checks may be quite expensive in tight loops. - ** - ** Note this is only useful if hooks are *not* set most of the time. - ** Use this only if you want to *asynchronously* interrupt the execution. - ** - ** You can set the instruction hook via lua_sethook() with a count of 1 - ** from a signal handler or another native thread. Please have a look - ** at the first few functions in luajit.c for an example (Ctrl-C handler). - */ - { - TRef tr = emitir(IRT(IR_XLOAD, IRT_U8), - lj_ir_kptr(J, &J2G(J)->hookmask), IRXLOAD_VOLATILE); - tr = emitir(IRTI(IR_BAND), tr, lj_ir_kint(J, (LUA_MASKLINE|LUA_MASKCOUNT))); - emitir(IRTGI(IR_EQ), tr, lj_ir_kint(J, 0)); - } -#endif -} - -#undef IR -#undef emitir_raw -#undef emitir - -#endif diff --git a/deps/luajit/src/lj_record.h b/deps/luajit/src/lj_record.h deleted file mode 100644 index c9f4882..0000000 --- a/deps/luajit/src/lj_record.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -** Trace recorder (bytecode -> SSA IR). -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_RECORD_H -#define _LJ_RECORD_H - -#include "lj_obj.h" -#include "lj_jit.h" - -#if LJ_HASJIT -/* Context for recording an indexed load/store. */ -typedef struct RecordIndex { - TValue tabv; /* Runtime value of table (or indexed object). */ - TValue keyv; /* Runtime value of key. */ - TValue valv; /* Runtime value of stored value. */ - TValue mobjv; /* Runtime value of metamethod object. */ - GCtab *mtv; /* Runtime value of metatable object. */ - cTValue *oldv; /* Runtime value of previously stored value. */ - TRef tab; /* Table (or indexed object) reference. */ - TRef key; /* Key reference. */ - TRef val; /* Value reference for a store or 0 for a load. */ - TRef mt; /* Metatable reference. */ - TRef mobj; /* Metamethod object reference. */ - int idxchain; /* Index indirections left or 0 for raw lookup. */ -} RecordIndex; - -LJ_FUNC int lj_record_objcmp(jit_State *J, TRef a, TRef b, - cTValue *av, cTValue *bv); -LJ_FUNC TRef lj_record_constify(jit_State *J, cTValue *o); - -LJ_FUNC void lj_record_call(jit_State *J, BCReg func, ptrdiff_t nargs); -LJ_FUNC void lj_record_tailcall(jit_State *J, BCReg func, ptrdiff_t nargs); -LJ_FUNC void lj_record_ret(jit_State *J, BCReg rbase, ptrdiff_t gotresults); - -LJ_FUNC int lj_record_mm_lookup(jit_State *J, RecordIndex *ix, MMS mm); -LJ_FUNC TRef lj_record_idx(jit_State *J, RecordIndex *ix); - -LJ_FUNC void lj_record_ins(jit_State *J); -LJ_FUNC void lj_record_setup(jit_State *J); -#endif - -#endif diff --git a/deps/luajit/src/lj_snap.c b/deps/luajit/src/lj_snap.c deleted file mode 100644 index 5c870ba..0000000 --- a/deps/luajit/src/lj_snap.c +++ /dev/null @@ -1,866 +0,0 @@ -/* -** Snapshot handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_snap_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_gc.h" -#include "lj_tab.h" -#include "lj_state.h" -#include "lj_frame.h" -#include "lj_bc.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" -#include "lj_trace.h" -#include "lj_snap.h" -#include "lj_target.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#include "lj_cdata.h" -#endif - -/* Some local macros to save typing. Undef'd at the end. */ -#define IR(ref) (&J->cur.ir[(ref)]) - -/* Pass IR on to next optimization in chain (FOLD). */ -#define emitir(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J)) - -/* Emit raw IR without passing through optimizations. */ -#define emitir_raw(ot, a, b) (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J)) - -/* -- Snapshot buffer allocation ------------------------------------------ */ - -/* Grow snapshot buffer. */ -void lj_snap_grow_buf_(jit_State *J, MSize need) -{ - MSize maxsnap = (MSize)J->param[JIT_P_maxsnap]; - if (need > maxsnap) - lj_trace_err(J, LJ_TRERR_SNAPOV); - lj_mem_growvec(J->L, J->snapbuf, J->sizesnap, maxsnap, SnapShot); - J->cur.snap = J->snapbuf; -} - -/* Grow snapshot map buffer. */ -void lj_snap_grow_map_(jit_State *J, MSize need) -{ - if (need < 2*J->sizesnapmap) - need = 2*J->sizesnapmap; - else if (need < 64) - need = 64; - J->snapmapbuf = (SnapEntry *)lj_mem_realloc(J->L, J->snapmapbuf, - J->sizesnapmap*sizeof(SnapEntry), need*sizeof(SnapEntry)); - J->cur.snapmap = J->snapmapbuf; - J->sizesnapmap = need; -} - -/* -- Snapshot generation ------------------------------------------------- */ - -/* Add all modified slots to the snapshot. */ -static MSize snapshot_slots(jit_State *J, SnapEntry *map, BCReg nslots) -{ - IRRef retf = J->chain[IR_RETF]; /* Limits SLOAD restore elimination. */ - BCReg s; - MSize n = 0; - for (s = 0; s < nslots; s++) { - TRef tr = J->slot[s]; - IRRef ref = tref_ref(tr); - if (ref) { - SnapEntry sn = SNAP_TR(s, tr); - IRIns *ir = IR(ref); - if (!(sn & (SNAP_CONT|SNAP_FRAME)) && - ir->o == IR_SLOAD && ir->op1 == s && ref > retf) { - /* No need to snapshot unmodified non-inherited slots. */ - if (!(ir->op2 & IRSLOAD_INHERIT)) - continue; - /* No need to restore readonly slots and unmodified non-parent slots. */ - if (!(LJ_DUALNUM && (ir->op2 & IRSLOAD_CONVERT)) && - (ir->op2 & (IRSLOAD_READONLY|IRSLOAD_PARENT)) != IRSLOAD_PARENT) - sn |= SNAP_NORESTORE; - } - if (LJ_SOFTFP && irt_isnum(ir->t)) - sn |= SNAP_SOFTFPNUM; - map[n++] = sn; - } - } - return n; -} - -/* Add frame links at the end of the snapshot. */ -static BCReg snapshot_framelinks(jit_State *J, SnapEntry *map) -{ - cTValue *frame = J->L->base - 1; - cTValue *lim = J->L->base - J->baseslot; - cTValue *ftop = frame + funcproto(frame_func(frame))->framesize; - MSize f = 0; - map[f++] = SNAP_MKPC(J->pc); /* The current PC is always the first entry. */ - while (frame > lim) { /* Backwards traversal of all frames above base. */ - if (frame_islua(frame)) { - map[f++] = SNAP_MKPC(frame_pc(frame)); - frame = frame_prevl(frame); - } else if (frame_iscont(frame)) { - map[f++] = SNAP_MKFTSZ(frame_ftsz(frame)); - map[f++] = SNAP_MKPC(frame_contpc(frame)); - frame = frame_prevd(frame); - } else { - lua_assert(!frame_isc(frame)); - map[f++] = SNAP_MKFTSZ(frame_ftsz(frame)); - frame = frame_prevd(frame); - continue; - } - if (frame + funcproto(frame_func(frame))->framesize > ftop) - ftop = frame + funcproto(frame_func(frame))->framesize; - } - lua_assert(f == (MSize)(1 + J->framedepth)); - return (BCReg)(ftop - lim); -} - -/* Take a snapshot of the current stack. */ -static void snapshot_stack(jit_State *J, SnapShot *snap, MSize nsnapmap) -{ - BCReg nslots = J->baseslot + J->maxslot; - MSize nent; - SnapEntry *p; - /* Conservative estimate. */ - lj_snap_grow_map(J, nsnapmap + nslots + (MSize)J->framedepth+1); - p = &J->cur.snapmap[nsnapmap]; - nent = snapshot_slots(J, p, nslots); - snap->topslot = (uint8_t)snapshot_framelinks(J, p + nent); - snap->mapofs = (uint16_t)nsnapmap; - snap->ref = (IRRef1)J->cur.nins; - snap->nent = (uint8_t)nent; - snap->nslots = (uint8_t)nslots; - snap->count = 0; - J->cur.nsnapmap = (uint16_t)(nsnapmap + nent + 1 + J->framedepth); -} - -/* Add or merge a snapshot. */ -void lj_snap_add(jit_State *J) -{ - MSize nsnap = J->cur.nsnap; - MSize nsnapmap = J->cur.nsnapmap; - /* Merge if no ins. inbetween or if requested and no guard inbetween. */ - if (J->mergesnap ? !irt_isguard(J->guardemit) : - (nsnap > 0 && J->cur.snap[nsnap-1].ref == J->cur.nins)) { - if (nsnap == 1) { /* But preserve snap #0 PC. */ - emitir_raw(IRT(IR_NOP, IRT_NIL), 0, 0); - goto nomerge; - } - nsnapmap = J->cur.snap[--nsnap].mapofs; - } else { - nomerge: - lj_snap_grow_buf(J, nsnap+1); - J->cur.nsnap = (uint16_t)(nsnap+1); - } - J->mergesnap = 0; - J->guardemit.irt = 0; - snapshot_stack(J, &J->cur.snap[nsnap], nsnapmap); -} - -/* -- Snapshot modification ----------------------------------------------- */ - -#define SNAP_USEDEF_SLOTS (LJ_MAX_JSLOTS+LJ_STACK_EXTRA) - -/* Find unused slots with reaching-definitions bytecode data-flow analysis. */ -static BCReg snap_usedef(jit_State *J, uint8_t *udf, - const BCIns *pc, BCReg maxslot) -{ - BCReg s; - GCobj *o; - - if (maxslot == 0) return 0; -#ifdef LUAJIT_USE_VALGRIND - /* Avoid errors for harmless reads beyond maxslot. */ - memset(udf, 1, SNAP_USEDEF_SLOTS); -#else - memset(udf, 1, maxslot); -#endif - - /* Treat open upvalues as used. */ - o = gcref(J->L->openupval); - while (o) { - if (uvval(gco2uv(o)) < J->L->base) break; - udf[uvval(gco2uv(o)) - J->L->base] = 0; - o = gcref(o->gch.nextgc); - } - -#define USE_SLOT(s) udf[(s)] &= ~1 -#define DEF_SLOT(s) udf[(s)] *= 3 - - /* Scan through following bytecode and check for uses/defs. */ - lua_assert(pc >= proto_bc(J->pt) && pc < proto_bc(J->pt) + J->pt->sizebc); - for (;;) { - BCIns ins = *pc++; - BCOp op = bc_op(ins); - switch (bcmode_b(op)) { - case BCMvar: USE_SLOT(bc_b(ins)); break; - default: break; - } - switch (bcmode_c(op)) { - case BCMvar: USE_SLOT(bc_c(ins)); break; - case BCMrbase: - lua_assert(op == BC_CAT); - for (s = bc_b(ins); s <= bc_c(ins); s++) USE_SLOT(s); - for (; s < maxslot; s++) DEF_SLOT(s); - break; - case BCMjump: - handle_jump: { - BCReg minslot = bc_a(ins); - if (op >= BC_FORI && op <= BC_JFORL) minslot += FORL_EXT; - else if (op >= BC_ITERL && op <= BC_JITERL) minslot += bc_b(pc[-2])-1; - else if (op == BC_UCLO) { pc += bc_j(ins); break; } - for (s = minslot; s < maxslot; s++) DEF_SLOT(s); - return minslot < maxslot ? minslot : maxslot; - } - case BCMlit: - if (op == BC_JFORL || op == BC_JITERL || op == BC_JLOOP) { - goto handle_jump; - } else if (bc_isret(op)) { - BCReg top = op == BC_RETM ? maxslot : (bc_a(ins) + bc_d(ins)-1); - for (s = 0; s < bc_a(ins); s++) DEF_SLOT(s); - for (; s < top; s++) USE_SLOT(s); - for (; s < maxslot; s++) DEF_SLOT(s); - return 0; - } - break; - case BCMfunc: return maxslot; /* NYI: will abort, anyway. */ - default: break; - } - switch (bcmode_a(op)) { - case BCMvar: USE_SLOT(bc_a(ins)); break; - case BCMdst: - if (!(op == BC_ISTC || op == BC_ISFC)) DEF_SLOT(bc_a(ins)); - break; - case BCMbase: - if (op >= BC_CALLM && op <= BC_VARG) { - BCReg top = (op == BC_CALLM || op == BC_CALLMT || bc_c(ins) == 0) ? - maxslot : (bc_a(ins) + bc_c(ins)); - s = bc_a(ins) - ((op == BC_ITERC || op == BC_ITERN) ? 3 : 0); - for (; s < top; s++) USE_SLOT(s); - for (; s < maxslot; s++) DEF_SLOT(s); - if (op == BC_CALLT || op == BC_CALLMT) { - for (s = 0; s < bc_a(ins); s++) DEF_SLOT(s); - return 0; - } - } else if (op == BC_KNIL) { - for (s = bc_a(ins); s <= bc_d(ins); s++) DEF_SLOT(s); - } else if (op == BC_TSETM) { - for (s = bc_a(ins)-1; s < maxslot; s++) USE_SLOT(s); - } - break; - default: break; - } - lua_assert(pc >= proto_bc(J->pt) && pc < proto_bc(J->pt) + J->pt->sizebc); - } - -#undef USE_SLOT -#undef DEF_SLOT - - return 0; /* unreachable */ -} - -/* Purge dead slots before the next snapshot. */ -void lj_snap_purge(jit_State *J) -{ - uint8_t udf[SNAP_USEDEF_SLOTS]; - BCReg maxslot = J->maxslot; - BCReg s = snap_usedef(J, udf, J->pc, maxslot); - for (; s < maxslot; s++) - if (udf[s] != 0) - J->base[s] = 0; /* Purge dead slots. */ -} - -/* Shrink last snapshot. */ -void lj_snap_shrink(jit_State *J) -{ - SnapShot *snap = &J->cur.snap[J->cur.nsnap-1]; - SnapEntry *map = &J->cur.snapmap[snap->mapofs]; - MSize n, m, nlim, nent = snap->nent; - uint8_t udf[SNAP_USEDEF_SLOTS]; - BCReg maxslot = J->maxslot; - BCReg minslot = snap_usedef(J, udf, snap_pc(map[nent]), maxslot); - BCReg baseslot = J->baseslot; - maxslot += baseslot; - minslot += baseslot; - snap->nslots = (uint8_t)maxslot; - for (n = m = 0; n < nent; n++) { /* Remove unused slots from snapshot. */ - BCReg s = snap_slot(map[n]); - if (s < minslot || (s < maxslot && udf[s-baseslot] == 0)) - map[m++] = map[n]; /* Only copy used slots. */ - } - snap->nent = (uint8_t)m; - nlim = J->cur.nsnapmap - snap->mapofs - 1; - while (n <= nlim) map[m++] = map[n++]; /* Move PC + frame links down. */ - J->cur.nsnapmap = (uint16_t)(snap->mapofs + m); /* Free up space in map. */ -} - -/* -- Snapshot access ----------------------------------------------------- */ - -/* Initialize a Bloom Filter with all renamed refs. -** There are very few renames (often none), so the filter has -** very few bits set. This makes it suitable for negative filtering. -*/ -static BloomFilter snap_renamefilter(GCtrace *T, SnapNo lim) -{ - BloomFilter rfilt = 0; - IRIns *ir; - for (ir = &T->ir[T->nins-1]; ir->o == IR_RENAME; ir--) - if (ir->op2 <= lim) - bloomset(rfilt, ir->op1); - return rfilt; -} - -/* Process matching renames to find the original RegSP. */ -static RegSP snap_renameref(GCtrace *T, SnapNo lim, IRRef ref, RegSP rs) -{ - IRIns *ir; - for (ir = &T->ir[T->nins-1]; ir->o == IR_RENAME; ir--) - if (ir->op1 == ref && ir->op2 <= lim) - rs = ir->prev; - return rs; -} - -/* Copy RegSP from parent snapshot to the parent links of the IR. */ -IRIns *lj_snap_regspmap(GCtrace *T, SnapNo snapno, IRIns *ir) -{ - SnapShot *snap = &T->snap[snapno]; - SnapEntry *map = &T->snapmap[snap->mapofs]; - BloomFilter rfilt = snap_renamefilter(T, snapno); - MSize n = 0; - IRRef ref = 0; - for ( ; ; ir++) { - uint32_t rs; - if (ir->o == IR_SLOAD) { - if (!(ir->op2 & IRSLOAD_PARENT)) break; - for ( ; ; n++) { - lua_assert(n < snap->nent); - if (snap_slot(map[n]) == ir->op1) { - ref = snap_ref(map[n++]); - break; - } - } - } else if (LJ_SOFTFP && ir->o == IR_HIOP) { - ref++; - } else if (ir->o == IR_PVAL) { - ref = ir->op1 + REF_BIAS; - } else { - break; - } - rs = T->ir[ref].prev; - if (bloomtest(rfilt, ref)) - rs = snap_renameref(T, snapno, ref, rs); - ir->prev = (uint16_t)rs; - lua_assert(regsp_used(rs)); - } - return ir; -} - -/* -- Snapshot replay ----------------------------------------------------- */ - -/* Replay constant from parent trace. */ -static TRef snap_replay_const(jit_State *J, IRIns *ir) -{ - /* Only have to deal with constants that can occur in stack slots. */ - switch ((IROp)ir->o) { - case IR_KPRI: return TREF_PRI(irt_type(ir->t)); - case IR_KINT: return lj_ir_kint(J, ir->i); - case IR_KGC: return lj_ir_kgc(J, ir_kgc(ir), irt_t(ir->t)); - case IR_KNUM: return lj_ir_k64(J, IR_KNUM, ir_knum(ir)); - case IR_KINT64: return lj_ir_k64(J, IR_KINT64, ir_kint64(ir)); - case IR_KPTR: return lj_ir_kptr(J, ir_kptr(ir)); /* Continuation. */ - default: lua_assert(0); return TREF_NIL; break; - } -} - -/* De-duplicate parent reference. */ -static TRef snap_dedup(jit_State *J, SnapEntry *map, MSize nmax, IRRef ref) -{ - MSize j; - for (j = 0; j < nmax; j++) - if (snap_ref(map[j]) == ref) - return J->slot[snap_slot(map[j])] & ~(SNAP_CONT|SNAP_FRAME); - return 0; -} - -/* Emit parent reference with de-duplication. */ -static TRef snap_pref(jit_State *J, GCtrace *T, SnapEntry *map, MSize nmax, - BloomFilter seen, IRRef ref) -{ - IRIns *ir = &T->ir[ref]; - TRef tr; - if (irref_isk(ref)) - tr = snap_replay_const(J, ir); - else if (!regsp_used(ir->prev)) - tr = 0; - else if (!bloomtest(seen, ref) || (tr = snap_dedup(J, map, nmax, ref)) == 0) - tr = emitir(IRT(IR_PVAL, irt_type(ir->t)), ref - REF_BIAS, 0); - return tr; -} - -/* Check whether a sunk store corresponds to an allocation. Slow path. */ -static int snap_sunk_store2(jit_State *J, IRIns *ira, IRIns *irs) -{ - if (irs->o == IR_ASTORE || irs->o == IR_HSTORE || - irs->o == IR_FSTORE || irs->o == IR_XSTORE) { - IRIns *irk = IR(irs->op1); - if (irk->o == IR_AREF || irk->o == IR_HREFK) - irk = IR(irk->op1); - return (IR(irk->op1) == ira); - } - return 0; -} - -/* Check whether a sunk store corresponds to an allocation. Fast path. */ -static LJ_AINLINE int snap_sunk_store(jit_State *J, IRIns *ira, IRIns *irs) -{ - if (irs->s != 255) - return (ira + irs->s == irs); /* Fast check. */ - return snap_sunk_store2(J, ira, irs); -} - -/* Replay snapshot state to setup side trace. */ -void lj_snap_replay(jit_State *J, GCtrace *T) -{ - SnapShot *snap = &T->snap[J->exitno]; - SnapEntry *map = &T->snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - BloomFilter seen = 0; - int pass23 = 0; - J->framedepth = 0; - /* Emit IR for slots inherited from parent snapshot. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - BCReg s = snap_slot(sn); - IRRef ref = snap_ref(sn); - IRIns *ir = &T->ir[ref]; - TRef tr; - /* The bloom filter avoids O(nent^2) overhead for de-duping slots. */ - if (bloomtest(seen, ref) && (tr = snap_dedup(J, map, n, ref)) != 0) - goto setslot; - bloomset(seen, ref); - if (irref_isk(ref)) { - tr = snap_replay_const(J, ir); - } else if (!regsp_used(ir->prev)) { - pass23 = 1; - lua_assert(s != 0); - tr = s; - } else { - IRType t = irt_type(ir->t); - uint32_t mode = IRSLOAD_INHERIT|IRSLOAD_PARENT; - if (LJ_SOFTFP && (sn & SNAP_SOFTFPNUM)) t = IRT_NUM; - if (ir->o == IR_SLOAD) mode |= (ir->op2 & IRSLOAD_READONLY); - tr = emitir_raw(IRT(IR_SLOAD, t), s, mode); - } - setslot: - J->slot[s] = tr | (sn&(SNAP_CONT|SNAP_FRAME)); /* Same as TREF_* flags. */ - J->framedepth += ((sn & (SNAP_CONT|SNAP_FRAME)) && s); - if ((sn & SNAP_FRAME)) - J->baseslot = s+1; - } - if (pass23) { - IRIns *irlast = &T->ir[snap->ref]; - pass23 = 0; - /* Emit dependent PVALs. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - IRRef refp = snap_ref(sn); - IRIns *ir = &T->ir[refp]; - if (regsp_reg(ir->r) == RID_SUNK) { - if (J->slot[snap_slot(sn)] != snap_slot(sn)) continue; - pass23 = 1; - lua_assert(ir->o == IR_TNEW || ir->o == IR_TDUP || - ir->o == IR_CNEW || ir->o == IR_CNEWI); - if (ir->op1 >= T->nk) snap_pref(J, T, map, nent, seen, ir->op1); - if (ir->op2 >= T->nk) snap_pref(J, T, map, nent, seen, ir->op2); - if (LJ_HASFFI && ir->o == IR_CNEWI) { - if (LJ_32 && refp+1 < T->nins && (ir+1)->o == IR_HIOP) - snap_pref(J, T, map, nent, seen, (ir+1)->op2); - } else { - IRIns *irs; - for (irs = ir+1; irs < irlast; irs++) - if (irs->r == RID_SINK && snap_sunk_store(J, ir, irs)) { - if (snap_pref(J, T, map, nent, seen, irs->op2) == 0) - snap_pref(J, T, map, nent, seen, T->ir[irs->op2].op1); - else if ((LJ_SOFTFP || (LJ_32 && LJ_HASFFI)) && - irs+1 < irlast && (irs+1)->o == IR_HIOP) - snap_pref(J, T, map, nent, seen, (irs+1)->op2); - } - } - } else if (!irref_isk(refp) && !regsp_used(ir->prev)) { - lua_assert(ir->o == IR_CONV && ir->op2 == IRCONV_NUM_INT); - J->slot[snap_slot(sn)] = snap_pref(J, T, map, nent, seen, ir->op1); - } - } - /* Replay sunk instructions. */ - for (n = 0; pass23 && n < nent; n++) { - SnapEntry sn = map[n]; - IRRef refp = snap_ref(sn); - IRIns *ir = &T->ir[refp]; - if (regsp_reg(ir->r) == RID_SUNK) { - TRef op1, op2; - if (J->slot[snap_slot(sn)] != snap_slot(sn)) { /* De-dup allocs. */ - J->slot[snap_slot(sn)] = J->slot[J->slot[snap_slot(sn)]]; - continue; - } - op1 = ir->op1; - if (op1 >= T->nk) op1 = snap_pref(J, T, map, nent, seen, op1); - op2 = ir->op2; - if (op2 >= T->nk) op2 = snap_pref(J, T, map, nent, seen, op2); - if (LJ_HASFFI && ir->o == IR_CNEWI) { - if (LJ_32 && refp+1 < T->nins && (ir+1)->o == IR_HIOP) { - lj_needsplit(J); /* Emit joining HIOP. */ - op2 = emitir_raw(IRT(IR_HIOP, IRT_I64), op2, - snap_pref(J, T, map, nent, seen, (ir+1)->op2)); - } - J->slot[snap_slot(sn)] = emitir(ir->ot, op1, op2); - } else { - IRIns *irs; - TRef tr = emitir(ir->ot, op1, op2); - J->slot[snap_slot(sn)] = tr; - for (irs = ir+1; irs < irlast; irs++) - if (irs->r == RID_SINK && snap_sunk_store(J, ir, irs)) { - IRIns *irr = &T->ir[irs->op1]; - TRef val, key = irr->op2, tmp = tr; - if (irr->o != IR_FREF) { - IRIns *irk = &T->ir[key]; - if (irr->o == IR_HREFK) - key = lj_ir_kslot(J, snap_replay_const(J, &T->ir[irk->op1]), - irk->op2); - else - key = snap_replay_const(J, irk); - if (irr->o == IR_HREFK || irr->o == IR_AREF) { - IRIns *irf = &T->ir[irr->op1]; - tmp = emitir(irf->ot, tmp, irf->op2); - } - } - tmp = emitir(irr->ot, tmp, key); - val = snap_pref(J, T, map, nent, seen, irs->op2); - if (val == 0) { - IRIns *irc = &T->ir[irs->op2]; - lua_assert(irc->o == IR_CONV && irc->op2 == IRCONV_NUM_INT); - val = snap_pref(J, T, map, nent, seen, irc->op1); - val = emitir(IRTN(IR_CONV), val, IRCONV_NUM_INT); - } else if ((LJ_SOFTFP || (LJ_32 && LJ_HASFFI)) && - irs+1 < irlast && (irs+1)->o == IR_HIOP) { - IRType t = IRT_I64; - if (LJ_SOFTFP && irt_type((irs+1)->t) == IRT_SOFTFP) - t = IRT_NUM; - lj_needsplit(J); - if (irref_isk(irs->op2) && irref_isk((irs+1)->op2)) { - uint64_t k = (uint32_t)T->ir[irs->op2].i + - ((uint64_t)T->ir[(irs+1)->op2].i << 32); - val = lj_ir_k64(J, t == IRT_I64 ? IR_KINT64 : IR_KNUM, - lj_ir_k64_find(J, k)); - } else { - val = emitir_raw(IRT(IR_HIOP, t), val, - snap_pref(J, T, map, nent, seen, (irs+1)->op2)); - } - tmp = emitir(IRT(irs->o, t), tmp, val); - continue; - } - tmp = emitir(irs->ot, tmp, val); - } else if (LJ_HASFFI && irs->o == IR_XBAR && ir->o == IR_CNEW) { - emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); - } - } - } - } - } - J->base = J->slot + J->baseslot; - J->maxslot = snap->nslots - J->baseslot; - lj_snap_add(J); - if (pass23) /* Need explicit GC step _after_ initial snapshot. */ - emitir_raw(IRTG(IR_GCSTEP, IRT_NIL), 0, 0); -} - -/* -- Snapshot restore ---------------------------------------------------- */ - -static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex, - SnapNo snapno, BloomFilter rfilt, - IRIns *ir, TValue *o); - -/* Restore a value from the trace exit state. */ -static void snap_restoreval(jit_State *J, GCtrace *T, ExitState *ex, - SnapNo snapno, BloomFilter rfilt, - IRRef ref, TValue *o) -{ - IRIns *ir = &T->ir[ref]; - IRType1 t = ir->t; - RegSP rs = ir->prev; - if (irref_isk(ref)) { /* Restore constant slot. */ - lj_ir_kvalue(J->L, o, ir); - return; - } - if (LJ_UNLIKELY(bloomtest(rfilt, ref))) - rs = snap_renameref(T, snapno, ref, rs); - if (ra_hasspill(regsp_spill(rs))) { /* Restore from spill slot. */ - int32_t *sps = &ex->spill[regsp_spill(rs)]; - if (irt_isinteger(t)) { - setintV(o, *sps); -#if !LJ_SOFTFP - } else if (irt_isnum(t)) { - o->u64 = *(uint64_t *)sps; -#endif - } else if (LJ_64 && irt_islightud(t)) { - /* 64 bit lightuserdata which may escape already has the tag bits. */ - o->u64 = *(uint64_t *)sps; - } else { - lua_assert(!irt_ispri(t)); /* PRI refs never have a spill slot. */ - setgcrefi(o->gcr, *sps); - setitype(o, irt_toitype(t)); - } - } else { /* Restore from register. */ - Reg r = regsp_reg(rs); - if (ra_noreg(r)) { - lua_assert(ir->o == IR_CONV && ir->op2 == IRCONV_NUM_INT); - snap_restoreval(J, T, ex, snapno, rfilt, ir->op1, o); - if (LJ_DUALNUM) setnumV(o, (lua_Number)intV(o)); - return; - } else if (irt_isinteger(t)) { - setintV(o, (int32_t)ex->gpr[r-RID_MIN_GPR]); -#if !LJ_SOFTFP - } else if (irt_isnum(t)) { - setnumV(o, ex->fpr[r-RID_MIN_FPR]); -#endif - } else if (LJ_64 && irt_islightud(t)) { - /* 64 bit lightuserdata which may escape already has the tag bits. */ - o->u64 = ex->gpr[r-RID_MIN_GPR]; - } else { - if (!irt_ispri(t)) - setgcrefi(o->gcr, ex->gpr[r-RID_MIN_GPR]); - setitype(o, irt_toitype(t)); - } - } -} - -#if LJ_HASFFI -/* Restore raw data from the trace exit state. */ -static void snap_restoredata(GCtrace *T, ExitState *ex, - SnapNo snapno, BloomFilter rfilt, - IRRef ref, void *dst, CTSize sz) -{ - IRIns *ir = &T->ir[ref]; - RegSP rs = ir->prev; - int32_t *src; - uint64_t tmp; - if (irref_isk(ref)) { - if (ir->o == IR_KNUM || ir->o == IR_KINT64) { - src = mref(ir->ptr, int32_t); - } else if (sz == 8) { - tmp = (uint64_t)(uint32_t)ir->i; - src = (int32_t *)&tmp; - } else { - src = &ir->i; - } - } else { - if (LJ_UNLIKELY(bloomtest(rfilt, ref))) - rs = snap_renameref(T, snapno, ref, rs); - if (ra_hasspill(regsp_spill(rs))) { - src = &ex->spill[regsp_spill(rs)]; - if (sz == 8 && !irt_is64(ir->t)) { - tmp = (uint64_t)(uint32_t)*src; - src = (int32_t *)&tmp; - } - } else { - Reg r = regsp_reg(rs); - if (ra_noreg(r)) { - /* Note: this assumes CNEWI is never used for SOFTFP split numbers. */ - lua_assert(sz == 8 && ir->o == IR_CONV && ir->op2 == IRCONV_NUM_INT); - snap_restoredata(T, ex, snapno, rfilt, ir->op1, dst, 4); - *(lua_Number *)dst = (lua_Number)*(int32_t *)dst; - return; - } - src = (int32_t *)&ex->gpr[r-RID_MIN_GPR]; -#if !LJ_SOFTFP - if (r >= RID_MAX_GPR) { - src = (int32_t *)&ex->fpr[r-RID_MIN_FPR]; -#if LJ_TARGET_PPC - if (sz == 4) { /* PPC FPRs are always doubles. */ - *(float *)dst = (float)*(double *)src; - return; - } -#else - if (LJ_BE && sz == 4) src++; -#endif - } -#endif - } - } - lua_assert(sz == 1 || sz == 2 || sz == 4 || sz == 8); - if (sz == 4) *(int32_t *)dst = *src; - else if (sz == 8) *(int64_t *)dst = *(int64_t *)src; - else if (sz == 1) *(int8_t *)dst = (int8_t)*src; - else *(int16_t *)dst = (int16_t)*src; -} -#endif - -/* Unsink allocation from the trace exit state. Unsink sunk stores. */ -static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex, - SnapNo snapno, BloomFilter rfilt, - IRIns *ir, TValue *o) -{ - lua_assert(ir->o == IR_TNEW || ir->o == IR_TDUP || - ir->o == IR_CNEW || ir->o == IR_CNEWI); -#if LJ_HASFFI - if (ir->o == IR_CNEW || ir->o == IR_CNEWI) { - CTState *cts = ctype_cts(J->L); - CTypeID id = (CTypeID)T->ir[ir->op1].i; - CTSize sz = lj_ctype_size(cts, id); - GCcdata *cd = lj_cdata_new(cts, id, sz); - setcdataV(J->L, o, cd); - if (ir->o == IR_CNEWI) { - uint8_t *p = (uint8_t *)cdataptr(cd); - lua_assert(sz == 4 || sz == 8); - if (LJ_32 && sz == 8 && ir+1 < T->ir + T->nins && (ir+1)->o == IR_HIOP) { - snap_restoredata(T, ex, snapno, rfilt, (ir+1)->op2, LJ_LE?p+4:p, 4); - if (LJ_BE) p += 4; - sz = 4; - } - snap_restoredata(T, ex, snapno, rfilt, ir->op2, p, sz); - } else { - IRIns *irs, *irlast = &T->ir[T->snap[snapno].ref]; - for (irs = ir+1; irs < irlast; irs++) - if (irs->r == RID_SINK && snap_sunk_store(J, ir, irs)) { - IRIns *iro = &T->ir[T->ir[irs->op1].op2]; - uint8_t *p = (uint8_t *)cd; - CTSize szs; - lua_assert(irs->o == IR_XSTORE && T->ir[irs->op1].o == IR_ADD); - lua_assert(iro->o == IR_KINT || iro->o == IR_KINT64); - if (irt_is64(irs->t)) szs = 8; - else if (irt_isi8(irs->t) || irt_isu8(irs->t)) szs = 1; - else if (irt_isi16(irs->t) || irt_isu16(irs->t)) szs = 2; - else szs = 4; - if (LJ_64 && iro->o == IR_KINT64) - p += (int64_t)ir_k64(iro)->u64; - else - p += iro->i; - lua_assert(p >= (uint8_t *)cdataptr(cd) && - p + szs <= (uint8_t *)cdataptr(cd) + sz); - if (LJ_32 && irs+1 < T->ir + T->nins && (irs+1)->o == IR_HIOP) { - lua_assert(szs == 4); - snap_restoredata(T, ex, snapno, rfilt, (irs+1)->op2, LJ_LE?p+4:p,4); - if (LJ_BE) p += 4; - } - snap_restoredata(T, ex, snapno, rfilt, irs->op2, p, szs); - } - } - } else -#endif - { - IRIns *irs, *irlast; - GCtab *t = ir->o == IR_TNEW ? lj_tab_new(J->L, ir->op1, ir->op2) : - lj_tab_dup(J->L, ir_ktab(&T->ir[ir->op1])); - settabV(J->L, o, t); - irlast = &T->ir[T->snap[snapno].ref]; - for (irs = ir+1; irs < irlast; irs++) - if (irs->r == RID_SINK && snap_sunk_store(J, ir, irs)) { - IRIns *irk = &T->ir[irs->op1]; - TValue tmp, *val; - lua_assert(irs->o == IR_ASTORE || irs->o == IR_HSTORE || - irs->o == IR_FSTORE); - if (irk->o == IR_FREF) { - lua_assert(irk->op2 == IRFL_TAB_META); - snap_restoreval(J, T, ex, snapno, rfilt, irs->op2, &tmp); - /* NOBARRIER: The table is new (marked white). */ - setgcref(t->metatable, obj2gco(tabV(&tmp))); - } else { - irk = &T->ir[irk->op2]; - if (irk->o == IR_KSLOT) irk = &T->ir[irk->op1]; - lj_ir_kvalue(J->L, &tmp, irk); - val = lj_tab_set(J->L, t, &tmp); - /* NOBARRIER: The table is new (marked white). */ - snap_restoreval(J, T, ex, snapno, rfilt, irs->op2, val); - if (LJ_SOFTFP && irs+1 < T->ir + T->nins && (irs+1)->o == IR_HIOP) { - snap_restoreval(J, T, ex, snapno, rfilt, (irs+1)->op2, &tmp); - val->u32.hi = tmp.u32.lo; - } - } - } - } -} - -/* Restore interpreter state from exit state with the help of a snapshot. */ -const BCIns *lj_snap_restore(jit_State *J, void *exptr) -{ - ExitState *ex = (ExitState *)exptr; - SnapNo snapno = J->exitno; /* For now, snapno == exitno. */ - GCtrace *T = traceref(J, J->parent); - SnapShot *snap = &T->snap[snapno]; - MSize n, nent = snap->nent; - SnapEntry *map = &T->snapmap[snap->mapofs]; - SnapEntry *flinks = &T->snapmap[snap_nextofs(T, snap)-1]; - int32_t ftsz0; - TValue *frame; - BloomFilter rfilt = snap_renamefilter(T, snapno); - const BCIns *pc = snap_pc(map[nent]); - lua_State *L = J->L; - - /* Set interpreter PC to the next PC to get correct error messages. */ - setcframe_pc(cframe_raw(L->cframe), pc+1); - - /* Make sure the stack is big enough for the slots from the snapshot. */ - if (LJ_UNLIKELY(L->base + snap->topslot >= tvref(L->maxstack))) { - L->top = curr_topL(L); - lj_state_growstack(L, snap->topslot - curr_proto(L)->framesize); - } - - /* Fill stack slots with data from the registers and spill slots. */ - frame = L->base-1; - ftsz0 = frame_ftsz(frame); /* Preserve link to previous frame in slot #0. */ - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - if (!(sn & SNAP_NORESTORE)) { - TValue *o = &frame[snap_slot(sn)]; - IRRef ref = snap_ref(sn); - IRIns *ir = &T->ir[ref]; - if (ir->r == RID_SUNK) { - MSize j; - for (j = 0; j < n; j++) - if (snap_ref(map[j]) == ref) { /* De-duplicate sunk allocations. */ - copyTV(L, o, &frame[snap_slot(map[j])]); - goto dupslot; - } - snap_unsink(J, T, ex, snapno, rfilt, ir, o); - dupslot: - continue; - } - snap_restoreval(J, T, ex, snapno, rfilt, ref, o); - if (LJ_SOFTFP && (sn & SNAP_SOFTFPNUM) && tvisint(o)) { - TValue tmp; - snap_restoreval(J, T, ex, snapno, rfilt, ref+1, &tmp); - o->u32.hi = tmp.u32.lo; - } else if ((sn & (SNAP_CONT|SNAP_FRAME))) { - /* Overwrite tag with frame link. */ - o->fr.tp.ftsz = snap_slot(sn) != 0 ? (int32_t)*flinks-- : ftsz0; - L->base = o+1; - } - } - } - lua_assert(map + nent == flinks); - - /* Compute current stack top. */ - switch (bc_op(*pc)) { - default: - if (bc_op(*pc) < BC_FUNCF) { - L->top = curr_topL(L); - break; - } - /* fallthrough */ - case BC_CALLM: case BC_CALLMT: case BC_RETM: case BC_TSETM: - L->top = frame + snap->nslots; - break; - } - return pc; -} - -#undef IR -#undef emitir_raw -#undef emitir - -#endif diff --git a/deps/luajit/src/lj_snap.h b/deps/luajit/src/lj_snap.h deleted file mode 100644 index 9a125be..0000000 --- a/deps/luajit/src/lj_snap.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -** Snapshot handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_SNAP_H -#define _LJ_SNAP_H - -#include "lj_obj.h" -#include "lj_jit.h" - -#if LJ_HASJIT -LJ_FUNC void lj_snap_add(jit_State *J); -LJ_FUNC void lj_snap_purge(jit_State *J); -LJ_FUNC void lj_snap_shrink(jit_State *J); -LJ_FUNC IRIns *lj_snap_regspmap(GCtrace *T, SnapNo snapno, IRIns *ir); -LJ_FUNC void lj_snap_replay(jit_State *J, GCtrace *T); -LJ_FUNC const BCIns *lj_snap_restore(jit_State *J, void *exptr); -LJ_FUNC void lj_snap_grow_buf_(jit_State *J, MSize need); -LJ_FUNC void lj_snap_grow_map_(jit_State *J, MSize need); - -static LJ_AINLINE void lj_snap_grow_buf(jit_State *J, MSize need) -{ - if (LJ_UNLIKELY(need > J->sizesnap)) lj_snap_grow_buf_(J, need); -} - -static LJ_AINLINE void lj_snap_grow_map(jit_State *J, MSize need) -{ - if (LJ_UNLIKELY(need > J->sizesnapmap)) lj_snap_grow_map_(J, need); -} - -#endif - -#endif diff --git a/deps/luajit/src/lj_state.c b/deps/luajit/src/lj_state.c deleted file mode 100644 index e654afa..0000000 --- a/deps/luajit/src/lj_state.c +++ /dev/null @@ -1,287 +0,0 @@ -/* -** State and stack handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_state_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_func.h" -#include "lj_meta.h" -#include "lj_state.h" -#include "lj_frame.h" -#if LJ_HASFFI -#include "lj_ctype.h" -#endif -#include "lj_trace.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_lex.h" -#include "lj_alloc.h" - -/* -- Stack handling ------------------------------------------------------ */ - -/* Stack sizes. */ -#define LJ_STACK_MIN LUA_MINSTACK /* Min. stack size. */ -#define LJ_STACK_MAX LUAI_MAXSTACK /* Max. stack size. */ -#define LJ_STACK_START (2*LJ_STACK_MIN) /* Starting stack size. */ -#define LJ_STACK_MAXEX (LJ_STACK_MAX + 1 + LJ_STACK_EXTRA) - -/* Explanation of LJ_STACK_EXTRA: -** -** Calls to metamethods store their arguments beyond the current top -** without checking for the stack limit. This avoids stack resizes which -** would invalidate passed TValue pointers. The stack check is performed -** later by the function header. This can safely resize the stack or raise -** an error. Thus we need some extra slots beyond the current stack limit. -** -** Most metamethods need 4 slots above top (cont, mobj, arg1, arg2) plus -** one extra slot if mobj is not a function. Only lj_meta_tset needs 5 -** slots above top, but then mobj is always a function. So we can get by -** with 5 extra slots. -*/ - -/* Resize stack slots and adjust pointers in state. */ -static void resizestack(lua_State *L, MSize n) -{ - TValue *st, *oldst = tvref(L->stack); - ptrdiff_t delta; - MSize oldsize = L->stacksize; - MSize realsize = n + 1 + LJ_STACK_EXTRA; - GCobj *up; - lua_assert((MSize)(tvref(L->maxstack)-oldst)==L->stacksize-LJ_STACK_EXTRA-1); - st = (TValue *)lj_mem_realloc(L, tvref(L->stack), - (MSize)(L->stacksize*sizeof(TValue)), - (MSize)(realsize*sizeof(TValue))); - setmref(L->stack, st); - delta = (char *)st - (char *)oldst; - setmref(L->maxstack, st + n); - while (oldsize < realsize) /* Clear new slots. */ - setnilV(st + oldsize++); - L->stacksize = realsize; - L->base = (TValue *)((char *)L->base + delta); - L->top = (TValue *)((char *)L->top + delta); - for (up = gcref(L->openupval); up != NULL; up = gcnext(up)) - setmref(gco2uv(up)->v, (TValue *)((char *)uvval(gco2uv(up)) + delta)); - if (obj2gco(L) == gcref(G(L)->jit_L)) - setmref(G(L)->jit_base, mref(G(L)->jit_base, char) + delta); -} - -/* Relimit stack after error, in case the limit was overdrawn. */ -void lj_state_relimitstack(lua_State *L) -{ - if (L->stacksize > LJ_STACK_MAXEX && L->top-tvref(L->stack) < LJ_STACK_MAX-1) - resizestack(L, LJ_STACK_MAX); -} - -/* Try to shrink the stack (called from GC). */ -void lj_state_shrinkstack(lua_State *L, MSize used) -{ - if (L->stacksize > LJ_STACK_MAXEX) - return; /* Avoid stack shrinking while handling stack overflow. */ - if (4*used < L->stacksize && - 2*(LJ_STACK_START+LJ_STACK_EXTRA) < L->stacksize && - obj2gco(L) != gcref(G(L)->jit_L)) /* Don't shrink stack of live trace. */ - resizestack(L, L->stacksize >> 1); -} - -/* Try to grow stack. */ -void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need) -{ - MSize n; - if (L->stacksize > LJ_STACK_MAXEX) /* Overflow while handling overflow? */ - lj_err_throw(L, LUA_ERRERR); - n = L->stacksize + need; - if (n > LJ_STACK_MAX) { - n += 2*LUA_MINSTACK; - } else if (n < 2*L->stacksize) { - n = 2*L->stacksize; - if (n >= LJ_STACK_MAX) - n = LJ_STACK_MAX; - } - resizestack(L, n); - if (L->stacksize > LJ_STACK_MAXEX) - lj_err_msg(L, LJ_ERR_STKOV); -} - -void LJ_FASTCALL lj_state_growstack1(lua_State *L) -{ - lj_state_growstack(L, 1); -} - -/* Allocate basic stack for new state. */ -static void stack_init(lua_State *L1, lua_State *L) -{ - TValue *stend, *st = lj_mem_newvec(L, LJ_STACK_START+LJ_STACK_EXTRA, TValue); - setmref(L1->stack, st); - L1->stacksize = LJ_STACK_START + LJ_STACK_EXTRA; - stend = st + L1->stacksize; - setmref(L1->maxstack, stend - LJ_STACK_EXTRA - 1); - L1->base = L1->top = st+1; - setthreadV(L1, st, L1); /* Needed for curr_funcisL() on empty stack. */ - while (st < stend) /* Clear new slots. */ - setnilV(st++); -} - -/* -- State handling ------------------------------------------------------ */ - -/* Open parts that may cause memory-allocation errors. */ -static TValue *cpluaopen(lua_State *L, lua_CFunction dummy, void *ud) -{ - global_State *g = G(L); - UNUSED(dummy); - UNUSED(ud); - stack_init(L, L); - /* NOBARRIER: State initialization, all objects are white. */ - setgcref(L->env, obj2gco(lj_tab_new(L, 0, LJ_MIN_GLOBAL))); - settabV(L, registry(L), lj_tab_new(L, 0, LJ_MIN_REGISTRY)); - lj_str_resize(L, LJ_MIN_STRTAB-1); - lj_meta_init(L); - lj_lex_init(L); - fixstring(lj_err_str(L, LJ_ERR_ERRMEM)); /* Preallocate memory error msg. */ - g->gc.threshold = 4*g->gc.total; - lj_trace_initstate(g); - return NULL; -} - -static void close_state(lua_State *L) -{ - global_State *g = G(L); - lj_func_closeuv(L, tvref(L->stack)); - lj_gc_freeall(g); - lua_assert(gcref(g->gc.root) == obj2gco(L)); - lua_assert(g->strnum == 0); - lj_trace_freestate(g); -#if LJ_HASFFI - lj_ctype_freestate(g); -#endif - lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef); - lj_str_freebuf(g, &g->tmpbuf); - lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue); - lua_assert(g->gc.total == sizeof(GG_State)); -#ifndef LUAJIT_USE_SYSMALLOC - if (g->allocf == lj_alloc_f) - lj_alloc_destroy(g->allocd); - else -#endif - g->allocf(g->allocd, G2GG(g), sizeof(GG_State), 0); -} - -#if LJ_64 && !(defined(LUAJIT_USE_VALGRIND) && defined(LUAJIT_USE_SYSMALLOC)) -lua_State *lj_state_newstate(lua_Alloc f, void *ud) -#else -LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud) -#endif -{ - GG_State *GG = (GG_State *)f(ud, NULL, 0, sizeof(GG_State)); - lua_State *L = &GG->L; - global_State *g = &GG->g; - if (GG == NULL || !checkptr32(GG)) return NULL; - memset(GG, 0, sizeof(GG_State)); - L->gct = ~LJ_TTHREAD; - L->marked = LJ_GC_WHITE0 | LJ_GC_FIXED | LJ_GC_SFIXED; /* Prevent free. */ - L->dummy_ffid = FF_C; - setmref(L->glref, g); - g->gc.currentwhite = LJ_GC_WHITE0 | LJ_GC_FIXED; - g->strempty.marked = LJ_GC_WHITE0; - g->strempty.gct = ~LJ_TSTR; - g->allocf = f; - g->allocd = ud; - setgcref(g->mainthref, obj2gco(L)); - setgcref(g->uvhead.prev, obj2gco(&g->uvhead)); - setgcref(g->uvhead.next, obj2gco(&g->uvhead)); - g->strmask = ~(MSize)0; - setnilV(registry(L)); - setnilV(&g->nilnode.val); - setnilV(&g->nilnode.key); - setmref(g->nilnode.freetop, &g->nilnode); - lj_str_initbuf(&g->tmpbuf); - g->gc.state = GCSpause; - setgcref(g->gc.root, obj2gco(L)); - setmref(g->gc.sweep, &g->gc.root); - g->gc.total = sizeof(GG_State); - g->gc.pause = LUAI_GCPAUSE; - g->gc.stepmul = LUAI_GCMUL; - lj_dispatch_init((GG_State *)L); - L->status = LUA_ERRERR+1; /* Avoid touching the stack upon memory error. */ - if (lj_vm_cpcall(L, NULL, NULL, cpluaopen) != 0) { - /* Memory allocation error: free partial state. */ - close_state(L); - return NULL; - } - L->status = 0; - return L; -} - -static TValue *cpfinalize(lua_State *L, lua_CFunction dummy, void *ud) -{ - UNUSED(dummy); - UNUSED(ud); - lj_gc_finalize_cdata(L); - lj_gc_finalize_udata(L); - /* Frame pop omitted. */ - return NULL; -} - -LUA_API void lua_close(lua_State *L) -{ - global_State *g = G(L); - int i; - L = mainthread(g); /* Only the main thread can be closed. */ - lj_func_closeuv(L, tvref(L->stack)); - lj_gc_separateudata(g, 1); /* Separate udata which have GC metamethods. */ -#if LJ_HASJIT - G2J(g)->flags &= ~JIT_F_ON; - G2J(g)->state = LJ_TRACE_IDLE; - lj_dispatch_update(g); -#endif - for (i = 0;;) { - hook_enter(g); - L->status = 0; - L->cframe = NULL; - L->base = L->top = tvref(L->stack) + 1; - if (lj_vm_cpcall(L, NULL, NULL, cpfinalize) == 0) { - if (++i >= 10) break; - lj_gc_separateudata(g, 1); /* Separate udata again. */ - if (gcref(g->gc.mmudata) == NULL) /* Until nothing is left to do. */ - break; - } - } - close_state(L); -} - -lua_State *lj_state_new(lua_State *L) -{ - lua_State *L1 = lj_mem_newobj(L, lua_State); - L1->gct = ~LJ_TTHREAD; - L1->dummy_ffid = FF_C; - L1->status = 0; - L1->stacksize = 0; - setmref(L1->stack, NULL); - L1->cframe = NULL; - /* NOBARRIER: The lua_State is new (marked white). */ - setgcrefnull(L1->openupval); - setmrefr(L1->glref, L->glref); - setgcrefr(L1->env, L->env); - stack_init(L1, L); /* init stack */ - lua_assert(iswhite(obj2gco(L1))); - return L1; -} - -void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L) -{ - lua_assert(L != mainthread(g)); - lj_func_closeuv(L, tvref(L->stack)); - lua_assert(gcref(L->openupval) == NULL); - lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue); - lj_mem_freet(g, L); -} - diff --git a/deps/luajit/src/lj_state.h b/deps/luajit/src/lj_state.h deleted file mode 100644 index 687889a..0000000 --- a/deps/luajit/src/lj_state.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -** State and stack handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_STATE_H -#define _LJ_STATE_H - -#include "lj_obj.h" - -#define incr_top(L) \ - (++L->top >= tvref(L->maxstack) && (lj_state_growstack1(L), 0)) - -#define savestack(L, p) ((char *)(p) - mref(L->stack, char)) -#define restorestack(L, n) ((TValue *)(mref(L->stack, char) + (n))) - -LJ_FUNC void lj_state_relimitstack(lua_State *L); -LJ_FUNC void lj_state_shrinkstack(lua_State *L, MSize used); -LJ_FUNCA void LJ_FASTCALL lj_state_growstack(lua_State *L, MSize need); -LJ_FUNC void LJ_FASTCALL lj_state_growstack1(lua_State *L); - -static LJ_AINLINE void lj_state_checkstack(lua_State *L, MSize need) -{ - if ((mref(L->maxstack, char) - (char *)L->top) <= - (ptrdiff_t)need*(ptrdiff_t)sizeof(TValue)) - lj_state_growstack(L, need); -} - -LJ_FUNC lua_State *lj_state_new(lua_State *L); -LJ_FUNC void LJ_FASTCALL lj_state_free(global_State *g, lua_State *L); -#if LJ_64 -LJ_FUNC lua_State *lj_state_newstate(lua_Alloc f, void *ud); -#endif - -#endif diff --git a/deps/luajit/src/lj_str.c b/deps/luajit/src/lj_str.c deleted file mode 100644 index ca60bcc..0000000 --- a/deps/luajit/src/lj_str.c +++ /dev/null @@ -1,339 +0,0 @@ -/* -** String handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include - -#define lj_str_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_str.h" -#include "lj_state.h" -#include "lj_char.h" - -/* -- String interning ---------------------------------------------------- */ - -/* Ordered compare of strings. Assumes string data is 4-byte aligned. */ -int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b) -{ - MSize i, n = a->len > b->len ? b->len : a->len; - for (i = 0; i < n; i += 4) { - /* Note: innocuous access up to end of string + 3. */ - uint32_t va = *(const uint32_t *)(strdata(a)+i); - uint32_t vb = *(const uint32_t *)(strdata(b)+i); - if (va != vb) { -#if LJ_LE - va = lj_bswap(va); vb = lj_bswap(vb); -#endif - i -= n; - if ((int32_t)i >= -3) { - va >>= 32+(i<<3); vb >>= 32+(i<<3); - if (va == vb) break; - } - return va < vb ? -1 : 1; - } - } - return (int32_t)(a->len - b->len); -} - -/* Fast string data comparison. Caveat: unaligned access to 1st string! */ -static LJ_AINLINE int str_fastcmp(const char *a, const char *b, MSize len) -{ - MSize i = 0; - lua_assert(len > 0); - lua_assert((((uintptr_t)a+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4); - do { /* Note: innocuous access up to end of string + 3. */ - uint32_t v = lj_getu32(a+i) ^ *(const uint32_t *)(b+i); - if (v) { - i -= len; -#if LJ_LE - return (int32_t)i >= -3 ? (v << (32+(i<<3))) : 1; -#else - return (int32_t)i >= -3 ? (v >> (32+(i<<3))) : 1; -#endif - } - i += 4; - } while (i < len); - return 0; -} - -/* Resize the string hash table (grow and shrink). */ -void lj_str_resize(lua_State *L, MSize newmask) -{ - global_State *g = G(L); - GCRef *newhash; - MSize i; - if (g->gc.state == GCSsweepstring || newmask >= LJ_MAX_STRTAB-1) - return; /* No resizing during GC traversal or if already too big. */ - newhash = lj_mem_newvec(L, newmask+1, GCRef); - memset(newhash, 0, (newmask+1)*sizeof(GCRef)); - for (i = g->strmask; i != ~(MSize)0; i--) { /* Rehash old table. */ - GCobj *p = gcref(g->strhash[i]); - while (p) { /* Follow each hash chain and reinsert all strings. */ - MSize h = gco2str(p)->hash & newmask; - GCobj *next = gcnext(p); - /* NOBARRIER: The string table is a GC root. */ - setgcrefr(p->gch.nextgc, newhash[h]); - setgcref(newhash[h], p); - p = next; - } - } - lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef); - g->strmask = newmask; - g->strhash = newhash; -} - -/* Intern a string and return string object. */ -GCstr *lj_str_new(lua_State *L, const char *str, size_t lenx) -{ - global_State *g; - GCstr *s; - GCobj *o; - MSize len = (MSize)lenx; - MSize a, b, h = len; - if (lenx >= LJ_MAX_STR) - lj_err_msg(L, LJ_ERR_STROV); - g = G(L); - /* Compute string hash. Constants taken from lookup3 hash by Bob Jenkins. */ - if (len >= 4) { /* Caveat: unaligned access! */ - a = lj_getu32(str); - h ^= lj_getu32(str+len-4); - b = lj_getu32(str+(len>>1)-2); - h ^= b; h -= lj_rol(b, 14); - b += lj_getu32(str+(len>>2)-1); - } else if (len > 0) { - a = *(const uint8_t *)str; - h ^= *(const uint8_t *)(str+len-1); - b = *(const uint8_t *)(str+(len>>1)); - h ^= b; h -= lj_rol(b, 14); - } else { - return &g->strempty; - } - a ^= h; a -= lj_rol(h, 11); - b ^= a; b -= lj_rol(a, 25); - h ^= b; h -= lj_rol(b, 16); - /* Check if the string has already been interned. */ - o = gcref(g->strhash[h & g->strmask]); - if (LJ_LIKELY((((uintptr_t)str+len-1) & (LJ_PAGESIZE-1)) <= LJ_PAGESIZE-4)) { - while (o != NULL) { - GCstr *sx = gco2str(o); - if (sx->len == len && str_fastcmp(str, strdata(sx), len) == 0) { - /* Resurrect if dead. Can only happen with fixstring() (keywords). */ - if (isdead(g, o)) flipwhite(o); - return sx; /* Return existing string. */ - } - o = gcnext(o); - } - } else { /* Slow path: end of string is too close to a page boundary. */ - while (o != NULL) { - GCstr *sx = gco2str(o); - if (sx->len == len && memcmp(str, strdata(sx), len) == 0) { - /* Resurrect if dead. Can only happen with fixstring() (keywords). */ - if (isdead(g, o)) flipwhite(o); - return sx; /* Return existing string. */ - } - o = gcnext(o); - } - } - /* Nope, create a new string. */ - s = lj_mem_newt(L, sizeof(GCstr)+len+1, GCstr); - newwhite(g, s); - s->gct = ~LJ_TSTR; - s->len = len; - s->hash = h; - s->reserved = 0; - memcpy(strdatawr(s), str, len); - strdatawr(s)[len] = '\0'; /* Zero-terminate string. */ - /* Add it to string hash table. */ - h &= g->strmask; - s->nextgc = g->strhash[h]; - /* NOBARRIER: The string table is a GC root. */ - setgcref(g->strhash[h], obj2gco(s)); - if (g->strnum++ > g->strmask) /* Allow a 100% load factor. */ - lj_str_resize(L, (g->strmask<<1)+1); /* Grow string table. */ - return s; /* Return newly interned string. */ -} - -void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s) -{ - g->strnum--; - lj_mem_free(g, s, sizestring(s)); -} - -/* -- Type conversions ---------------------------------------------------- */ - -/* Print number to buffer. Canonicalizes non-finite values. */ -size_t LJ_FASTCALL lj_str_bufnum(char *s, cTValue *o) -{ - if (LJ_LIKELY((o->u32.hi << 1) < 0xffe00000)) { /* Finite? */ - lua_Number n = o->n; -#if __BIONIC__ - if (tvismzero(o)) { s[0] = '-'; s[1] = '0'; return 2; } -#endif - return (size_t)lua_number2str(s, n); - } else if (((o->u32.hi & 0x000fffff) | o->u32.lo) != 0) { - s[0] = 'n'; s[1] = 'a'; s[2] = 'n'; return 3; - } else if ((o->u32.hi & 0x80000000) == 0) { - s[0] = 'i'; s[1] = 'n'; s[2] = 'f'; return 3; - } else { - s[0] = '-'; s[1] = 'i'; s[2] = 'n'; s[3] = 'f'; return 4; - } -} - -/* Print integer to buffer. Returns pointer to start. */ -char * LJ_FASTCALL lj_str_bufint(char *p, int32_t k) -{ - uint32_t u = (uint32_t)(k < 0 ? -k : k); - p += 1+10; - do { *--p = (char)('0' + u % 10); } while (u /= 10); - if (k < 0) *--p = '-'; - return p; -} - -/* Convert number to string. */ -GCstr * LJ_FASTCALL lj_str_fromnum(lua_State *L, const lua_Number *np) -{ - char buf[LJ_STR_NUMBUF]; - size_t len = lj_str_bufnum(buf, (TValue *)np); - return lj_str_new(L, buf, len); -} - -/* Convert integer to string. */ -GCstr * LJ_FASTCALL lj_str_fromint(lua_State *L, int32_t k) -{ - char s[1+10]; - char *p = lj_str_bufint(s, k); - return lj_str_new(L, p, (size_t)(s+sizeof(s)-p)); -} - -GCstr * LJ_FASTCALL lj_str_fromnumber(lua_State *L, cTValue *o) -{ - return tvisint(o) ? lj_str_fromint(L, intV(o)) : lj_str_fromnum(L, &o->n); -} - -/* -- String formatting --------------------------------------------------- */ - -static void addstr(lua_State *L, SBuf *sb, const char *str, MSize len) -{ - char *p; - MSize i; - if (sb->n + len > sb->sz) { - MSize sz = sb->sz * 2; - while (sb->n + len > sz) sz = sz * 2; - lj_str_resizebuf(L, sb, sz); - } - p = sb->buf + sb->n; - sb->n += len; - for (i = 0; i < len; i++) p[i] = str[i]; -} - -static void addchar(lua_State *L, SBuf *sb, int c) -{ - if (sb->n + 1 > sb->sz) { - MSize sz = sb->sz * 2; - lj_str_resizebuf(L, sb, sz); - } - sb->buf[sb->n++] = (char)c; -} - -/* Push formatted message as a string object to Lua stack. va_list variant. */ -const char *lj_str_pushvf(lua_State *L, const char *fmt, va_list argp) -{ - SBuf *sb = &G(L)->tmpbuf; - lj_str_needbuf(L, sb, (MSize)strlen(fmt)); - lj_str_resetbuf(sb); - for (;;) { - const char *e = strchr(fmt, '%'); - if (e == NULL) break; - addstr(L, sb, fmt, (MSize)(e-fmt)); - /* This function only handles %s, %c, %d, %f and %p formats. */ - switch (e[1]) { - case 's': { - const char *s = va_arg(argp, char *); - if (s == NULL) s = "(null)"; - addstr(L, sb, s, (MSize)strlen(s)); - break; - } - case 'c': - addchar(L, sb, va_arg(argp, int)); - break; - case 'd': { - char buf[LJ_STR_INTBUF]; - char *p = lj_str_bufint(buf, va_arg(argp, int32_t)); - addstr(L, sb, p, (MSize)(buf+LJ_STR_INTBUF-p)); - break; - } - case 'f': { - char buf[LJ_STR_NUMBUF]; - TValue tv; - MSize len; - tv.n = (lua_Number)(va_arg(argp, LUAI_UACNUMBER)); - len = (MSize)lj_str_bufnum(buf, &tv); - addstr(L, sb, buf, len); - break; - } - case 'p': { -#define FMTP_CHARS (2*sizeof(ptrdiff_t)) - char buf[2+FMTP_CHARS]; - ptrdiff_t p = (ptrdiff_t)(va_arg(argp, void *)); - ptrdiff_t i, lasti = 2+FMTP_CHARS; - if (p == 0) { - addstr(L, sb, "NULL", 4); - break; - } -#if LJ_64 - /* Shorten output for 64 bit pointers. */ - lasti = 2+2*4+((p >> 32) ? 2+2*(lj_fls((uint32_t)(p >> 32))>>3) : 0); -#endif - buf[0] = '0'; - buf[1] = 'x'; - for (i = lasti-1; i >= 2; i--, p >>= 4) - buf[i] = "0123456789abcdef"[(p & 15)]; - addstr(L, sb, buf, (MSize)lasti); - break; - } - case '%': - addchar(L, sb, '%'); - break; - default: - addchar(L, sb, '%'); - addchar(L, sb, e[1]); - break; - } - fmt = e+2; - } - addstr(L, sb, fmt, (MSize)strlen(fmt)); - setstrV(L, L->top, lj_str_new(L, sb->buf, sb->n)); - incr_top(L); - return strVdata(L->top - 1); -} - -/* Push formatted message as a string object to Lua stack. Vararg variant. */ -const char *lj_str_pushf(lua_State *L, const char *fmt, ...) -{ - const char *msg; - va_list argp; - va_start(argp, fmt); - msg = lj_str_pushvf(L, fmt, argp); - va_end(argp); - return msg; -} - -/* -- Buffer handling ----------------------------------------------------- */ - -char *lj_str_needbuf(lua_State *L, SBuf *sb, MSize sz) -{ - if (sz > sb->sz) { - if (sz < LJ_MIN_SBUF) sz = LJ_MIN_SBUF; - lj_str_resizebuf(L, sb, sz); - } - return sb->buf; -} - diff --git a/deps/luajit/src/lj_str.h b/deps/luajit/src/lj_str.h deleted file mode 100644 index 9969705..0000000 --- a/deps/luajit/src/lj_str.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -** String handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_STR_H -#define _LJ_STR_H - -#include - -#include "lj_obj.h" - -/* String interning. */ -LJ_FUNC int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b); -LJ_FUNC void lj_str_resize(lua_State *L, MSize newmask); -LJ_FUNCA GCstr *lj_str_new(lua_State *L, const char *str, size_t len); -LJ_FUNC void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s); - -#define lj_str_newz(L, s) (lj_str_new(L, s, strlen(s))) -#define lj_str_newlit(L, s) (lj_str_new(L, "" s, sizeof(s)-1)) - -/* Type conversions. */ -LJ_FUNC size_t LJ_FASTCALL lj_str_bufnum(char *s, cTValue *o); -LJ_FUNC char * LJ_FASTCALL lj_str_bufint(char *p, int32_t k); -LJ_FUNCA GCstr * LJ_FASTCALL lj_str_fromnum(lua_State *L, const lua_Number *np); -LJ_FUNC GCstr * LJ_FASTCALL lj_str_fromint(lua_State *L, int32_t k); -LJ_FUNCA GCstr * LJ_FASTCALL lj_str_fromnumber(lua_State *L, cTValue *o); - -#define LJ_STR_INTBUF (1+10) -#define LJ_STR_NUMBUF LUAI_MAXNUMBER2STR - -/* String formatting. */ -LJ_FUNC const char *lj_str_pushvf(lua_State *L, const char *fmt, va_list argp); -LJ_FUNC const char *lj_str_pushf(lua_State *L, const char *fmt, ...) -#if defined(__GNUC__) - __attribute__ ((format (printf, 2, 3))) -#endif - ; - -/* Resizable string buffers. Struct definition in lj_obj.h. */ -LJ_FUNC char *lj_str_needbuf(lua_State *L, SBuf *sb, MSize sz); - -#define lj_str_initbuf(sb) ((sb)->buf = NULL, (sb)->sz = 0) -#define lj_str_resetbuf(sb) ((sb)->n = 0) -#define lj_str_resizebuf(L, sb, size) \ - ((sb)->buf = (char *)lj_mem_realloc(L, (sb)->buf, (sb)->sz, (size)), \ - (sb)->sz = (size)) -#define lj_str_freebuf(g, sb) lj_mem_free(g, (void *)(sb)->buf, (sb)->sz) - -#endif diff --git a/deps/luajit/src/lj_strscan.c b/deps/luajit/src/lj_strscan.c deleted file mode 100644 index 568f647..0000000 --- a/deps/luajit/src/lj_strscan.c +++ /dev/null @@ -1,498 +0,0 @@ -/* -** String scanning. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include - -#define lj_strscan_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_char.h" -#include "lj_strscan.h" - -/* -- Scanning numbers ---------------------------------------------------- */ - -/* -** Rationale for the builtin string to number conversion library: -** -** It removes a dependency on libc's strtod(), which is a true portability -** nightmare. Mainly due to the plethora of supported OS and toolchain -** combinations. Sadly, the various implementations -** a) are often buggy, incomplete (no hex floats) and/or imprecise, -** b) sometimes crash or hang on certain inputs, -** c) return non-standard NaNs that need to be filtered out, and -** d) fail if the locale-specific decimal separator is not a dot, -** which can only be fixed with atrocious workarounds. -** -** Also, most of the strtod() implementations are hopelessly bloated, -** which is not just an I-cache hog, but a problem for static linkage -** on embedded systems, too. -** -** OTOH the builtin conversion function is very compact. Even though it -** does a lot more, like parsing long longs, octal or imaginary numbers -** and returning the result in different formats: -** a) It needs less than 3 KB (!) of machine code (on x64 with -Os), -** b) it doesn't perform any dynamic allocation and, -** c) it needs only around 600 bytes of stack space. -** -** The builtin function is faster than strtod() for typical inputs, e.g. -** "123", "1.5" or "1e6". Arguably, it's slower for very large exponents, -** which are not very common (this could be fixed, if needed). -** -** And most importantly, the builtin function is equally precise on all -** platforms. It correctly converts and rounds any input to a double. -** If this is not the case, please send a bug report -- but PLEASE verify -** that the implementation you're comparing to is not the culprit! -** -** The implementation quickly pre-scans the entire string first and -** handles simple integers on-the-fly. Otherwise, it dispatches to the -** base-specific parser. Hex and octal is straightforward. -** -** Decimal to binary conversion uses a fixed-length circular buffer in -** base 100. Some simple cases are handled directly. For other cases, the -** number in the buffer is up-scaled or down-scaled until the integer part -** is in the proper range. Then the integer part is rounded and converted -** to a double which is finally rescaled to the result. Denormals need -** special treatment to prevent incorrect 'double rounding'. -*/ - -/* Definitions for circular decimal digit buffer (base 100 = 2 digits/byte). */ -#define STRSCAN_DIG 1024 -#define STRSCAN_MAXDIG 800 /* 772 + extra are sufficient. */ -#define STRSCAN_DDIG (STRSCAN_DIG/2) -#define STRSCAN_DMASK (STRSCAN_DDIG-1) - -/* Helpers for circular buffer. */ -#define DNEXT(a) (((a)+1) & STRSCAN_DMASK) -#define DPREV(a) (((a)-1) & STRSCAN_DMASK) -#define DLEN(lo, hi) ((int32_t)(((lo)-(hi)) & STRSCAN_DMASK)) - -#define casecmp(c, k) (((c) | 0x20) == k) - -/* Final conversion to double. */ -static void strscan_double(uint64_t x, TValue *o, int32_t ex2, int32_t neg) -{ - double n; - - /* Avoid double rounding for denormals. */ - if (LJ_UNLIKELY(ex2 <= -1075 && x != 0)) { - /* NYI: all of this generates way too much code on 32 bit CPUs. */ -#if defined(__GNUC__) && LJ_64 - int32_t b = (int32_t)(__builtin_clzll(x)^63); -#else - int32_t b = (x>>32) ? 32+(int32_t)lj_fls((uint32_t)(x>>32)) : - (int32_t)lj_fls((uint32_t)x); -#endif - if ((int32_t)b + ex2 <= -1023 && (int32_t)b + ex2 >= -1075) { - uint64_t rb = (uint64_t)1 << (-1075-ex2); - if ((x & rb) && ((x & (rb+rb+rb-1)))) x += rb+rb; - x = (x & ~(rb+rb-1)); - } - } - - /* Convert to double using a signed int64_t conversion, then rescale. */ - lua_assert((int64_t)x >= 0); - n = (double)(int64_t)x; - if (neg) n = -n; - if (ex2) n = ldexp(n, ex2); - o->n = n; -} - -/* Parse hexadecimal number. */ -static StrScanFmt strscan_hex(const uint8_t *p, TValue *o, - StrScanFmt fmt, uint32_t opt, - int32_t ex2, int32_t neg, uint32_t dig) -{ - uint64_t x = 0; - uint32_t i; - - /* Scan hex digits. */ - for (i = dig > 16 ? 16 : dig ; i; i--, p++) { - uint32_t d = (*p != '.' ? *p : *++p); if (d > '9') d += 9; - x = (x << 4) + (d & 15); - } - - /* Summarize rounding-effect of excess digits. */ - for (i = 16; i < dig; i++, p++) - x |= ((*p != '.' ? *p : *++p) != '0'), ex2 += 4; - - /* Format-specific handling. */ - switch (fmt) { - case STRSCAN_INT: - if (!(opt & STRSCAN_OPT_TONUM) && x < 0x80000000u+neg) { - o->i = neg ? -(int32_t)x : (int32_t)x; - return STRSCAN_INT; /* Fast path for 32 bit integers. */ - } - if (!(opt & STRSCAN_OPT_C)) { fmt = STRSCAN_NUM; break; } - /* fallthrough */ - case STRSCAN_U32: - if (dig > 8) return STRSCAN_ERROR; - o->i = neg ? -(int32_t)x : (int32_t)x; - return STRSCAN_U32; - case STRSCAN_I64: - case STRSCAN_U64: - if (dig > 16) return STRSCAN_ERROR; - o->u64 = neg ? (uint64_t)-(int64_t)x : x; - return fmt; - default: - break; - } - - /* Reduce range then convert to double. */ - if ((x & U64x(c0000000,0000000))) { x = (x >> 2) | (x & 3); ex2 += 2; } - strscan_double(x, o, ex2, neg); - return fmt; -} - -/* Parse octal number. */ -static StrScanFmt strscan_oct(const uint8_t *p, TValue *o, - StrScanFmt fmt, int32_t neg, uint32_t dig) -{ - uint64_t x = 0; - - /* Scan octal digits. */ - if (dig > 22 || (dig == 22 && *p > '1')) return STRSCAN_ERROR; - while (dig-- > 0) { - if (!(*p >= '0' && *p <= '7')) return STRSCAN_ERROR; - x = (x << 3) + (*p++ & 7); - } - - /* Format-specific handling. */ - switch (fmt) { - case STRSCAN_INT: - if (x >= 0x80000000u+neg) fmt = STRSCAN_U32; - /* fallthrough */ - case STRSCAN_U32: - if ((x >> 32)) return STRSCAN_ERROR; - o->i = neg ? -(int32_t)x : (int32_t)x; - break; - default: - case STRSCAN_I64: - case STRSCAN_U64: - o->u64 = neg ? (uint64_t)-(int64_t)x : x; - break; - } - return fmt; -} - -/* Parse decimal number. */ -static StrScanFmt strscan_dec(const uint8_t *p, TValue *o, - StrScanFmt fmt, uint32_t opt, - int32_t ex10, int32_t neg, uint32_t dig) -{ - uint8_t xi[STRSCAN_DDIG], *xip = xi; - - if (dig) { - uint32_t i = dig; - if (i > STRSCAN_MAXDIG) { - ex10 += (int32_t)(i - STRSCAN_MAXDIG); - i = STRSCAN_MAXDIG; - } - /* Scan unaligned leading digit. */ - if (((ex10^i) & 1)) - *xip++ = ((*p != '.' ? *p : *++p) & 15), i--, p++; - /* Scan aligned double-digits. */ - for ( ; i > 1; i -= 2) { - uint32_t d = 10 * ((*p != '.' ? *p : *++p) & 15); p++; - *xip++ = d + ((*p != '.' ? *p : *++p) & 15); p++; - } - /* Scan and realign trailing digit. */ - if (i) *xip++ = 10 * ((*p != '.' ? *p : *++p) & 15), ex10--, dig++, p++; - - /* Summarize rounding-effect of excess digits. */ - if (dig > STRSCAN_MAXDIG) { - do { - if ((*p != '.' ? *p : *++p) != '0') { xip[-1] |= 1; break; } - p++; - } while (--dig > STRSCAN_MAXDIG); - dig = STRSCAN_MAXDIG; - } else { /* Simplify exponent. */ - while (ex10 > 0 && dig <= 18) *xip++ = 0, ex10 -= 2, dig += 2; - } - } else { /* Only got zeros. */ - ex10 = 0; - xi[0] = 0; - } - - /* Fast path for numbers in integer format (but handles e.g. 1e6, too). */ - if (dig <= 20 && ex10 == 0) { - uint8_t *xis; - uint64_t x = xi[0]; - double n; - for (xis = xi+1; xis < xip; xis++) x = x * 100 + *xis; - if (!(dig == 20 && (xi[0] > 18 || (int64_t)x >= 0))) { /* No overflow? */ - /* Format-specific handling. */ - switch (fmt) { - case STRSCAN_INT: - if (!(opt & STRSCAN_OPT_TONUM) && x < 0x80000000u+neg) { - o->i = neg ? -(int32_t)x : (int32_t)x; - return STRSCAN_INT; /* Fast path for 32 bit integers. */ - } - if (!(opt & STRSCAN_OPT_C)) { fmt = STRSCAN_NUM; goto plainnumber; } - /* fallthrough */ - case STRSCAN_U32: - if ((x >> 32) != 0) return STRSCAN_ERROR; - o->i = neg ? -(int32_t)x : (int32_t)x; - return STRSCAN_U32; - case STRSCAN_I64: - case STRSCAN_U64: - o->u64 = neg ? (uint64_t)-(int64_t)x : x; - return fmt; - default: - plainnumber: /* Fast path for plain numbers < 2^63. */ - if ((int64_t)x < 0) break; - n = (double)(int64_t)x; - if (neg) n = -n; - o->n = n; - return fmt; - } - } - } - - /* Slow non-integer path. */ - if (fmt == STRSCAN_INT) { - if ((opt & STRSCAN_OPT_C)) return STRSCAN_ERROR; - fmt = STRSCAN_NUM; - } else if (fmt > STRSCAN_INT) { - return STRSCAN_ERROR; - } - { - uint32_t hi = 0, lo = (uint32_t)(xip-xi); - int32_t ex2 = 0, idig = (int32_t)lo + (ex10 >> 1); - - lua_assert(lo > 0 && (ex10 & 1) == 0); - - /* Handle simple overflow/underflow. */ - if (idig > 310/2) { if (neg) setminfV(o); else setpinfV(o); return fmt; } - else if (idig < -326/2) { o->n = neg ? -0.0 : 0.0; return fmt; } - - /* Scale up until we have at least 17 or 18 integer part digits. */ - while (idig < 9 && idig < DLEN(lo, hi)) { - uint32_t i, cy = 0; - ex2 -= 6; - for (i = DPREV(lo); ; i = DPREV(i)) { - uint32_t d = (xi[i] << 6) + cy; - cy = (((d >> 2) * 5243) >> 17); d = d - cy * 100; /* Div/mod 100. */ - xi[i] = (uint8_t)d; - if (i == hi) break; - if (d == 0 && i == DPREV(lo)) lo = i; - } - if (cy) { - hi = DPREV(hi); - if (xi[DPREV(lo)] == 0) lo = DPREV(lo); - else if (hi == lo) { lo = DPREV(lo); xi[DPREV(lo)] |= xi[lo]; } - xi[hi] = (uint8_t)cy; idig++; - } - } - - /* Scale down until no more than 17 or 18 integer part digits remain. */ - while (idig > 9) { - uint32_t i = hi, cy = 0; - ex2 += 6; - do { - cy += xi[i]; - xi[i] = (cy >> 6); - cy = 100 * (cy & 0x3f); - if (xi[i] == 0 && i == hi) hi = DNEXT(hi), idig--; - i = DNEXT(i); - } while (i != lo); - while (cy) { - if (hi == lo) { xi[DPREV(lo)] |= 1; break; } - xi[lo] = (cy >> 6); lo = DNEXT(lo); - cy = 100 * (cy & 0x3f); - } - } - - /* Collect integer part digits and convert to rescaled double. */ - { - uint64_t x = xi[hi]; - uint32_t i; - for (i = DNEXT(hi); --idig > 0 && i != lo; i = DNEXT(i)) - x = x * 100 + xi[i]; - if (i == lo) { - while (--idig >= 0) x = x * 100; - } else { /* Gather round bit from remaining digits. */ - x <<= 1; ex2--; - do { - if (xi[i]) { x |= 1; break; } - i = DNEXT(i); - } while (i != lo); - } - strscan_double(x, o, ex2, neg); - } - } - return fmt; -} - -/* Scan string containing a number. Returns format. Returns value in o. */ -StrScanFmt lj_strscan_scan(const uint8_t *p, TValue *o, uint32_t opt) -{ - int32_t neg = 0; - - /* Remove leading space, parse sign and non-numbers. */ - if (LJ_UNLIKELY(!lj_char_isdigit(*p))) { - while (lj_char_isspace(*p)) p++; - if (*p == '+' || *p == '-') neg = (*p++ == '-'); - if (LJ_UNLIKELY(*p >= 'A')) { /* Parse "inf", "infinity" or "nan". */ - TValue tmp; - setnanV(&tmp); - if (casecmp(p[0],'i') && casecmp(p[1],'n') && casecmp(p[2],'f')) { - if (neg) setminfV(&tmp); else setpinfV(&tmp); - p += 3; - if (casecmp(p[0],'i') && casecmp(p[1],'n') && casecmp(p[2],'i') && - casecmp(p[3],'t') && casecmp(p[4],'y')) p += 5; - } else if (casecmp(p[0],'n') && casecmp(p[1],'a') && casecmp(p[2],'n')) { - p += 3; - } - while (lj_char_isspace(*p)) p++; - if (*p) return STRSCAN_ERROR; - o->u64 = tmp.u64; - return STRSCAN_NUM; - } - } - - /* Parse regular number. */ - { - StrScanFmt fmt = STRSCAN_INT; - int cmask = LJ_CHAR_DIGIT; - int base = (opt & STRSCAN_OPT_C) && *p == '0' ? 0 : 10; - const uint8_t *sp, *dp = NULL; - uint32_t dig = 0, hasdig = 0, x = 0; - int32_t ex = 0; - - /* Determine base and skip leading zeros. */ - if (LJ_UNLIKELY(*p <= '0')) { - if (*p == '0' && casecmp(p[1], 'x')) - base = 16, cmask = LJ_CHAR_XDIGIT, p += 2; - for ( ; ; p++) { - if (*p == '0') { - hasdig = 1; - } else if (*p == '.') { - if (dp) return STRSCAN_ERROR; - dp = p; - } else { - break; - } - } - } - - /* Preliminary digit and decimal point scan. */ - for (sp = p; ; p++) { - if (LJ_LIKELY(lj_char_isa(*p, cmask))) { - x = x * 10 + (*p & 15); /* For fast path below. */ - dig++; - } else if (*p == '.') { - if (dp) return STRSCAN_ERROR; - dp = p; - } else { - break; - } - } - if (!(hasdig | dig)) return STRSCAN_ERROR; - - /* Handle decimal point. */ - if (dp) { - fmt = STRSCAN_NUM; - if (dig) { - ex = (int32_t)(dp-(p-1)); dp = p-1; - while (ex < 0 && *dp-- == '0') ex++, dig--; /* Skip trailing zeros. */ - if (base == 16) ex *= 4; - } - } - - /* Parse exponent. */ - if (casecmp(*p, (uint32_t)(base == 16 ? 'p' : 'e'))) { - uint32_t xx; - int negx = 0; - fmt = STRSCAN_NUM; p++; - if (*p == '+' || *p == '-') negx = (*p++ == '-'); - if (!lj_char_isdigit(*p)) return STRSCAN_ERROR; - xx = (*p++ & 15); - while (lj_char_isdigit(*p)) { - if (xx < 65536) xx = xx * 10 + (*p & 15); - p++; - } - ex += negx ? -(int32_t)xx : (int32_t)xx; - } - - /* Parse suffix. */ - if (*p) { - /* I (IMAG), U (U32), LL (I64), ULL/LLU (U64), L (long), UL/LU (ulong). */ - /* NYI: f (float). Not needed until cp_number() handles non-integers. */ - if (casecmp(*p, 'i')) { - if (!(opt & STRSCAN_OPT_IMAG)) return STRSCAN_ERROR; - p++; fmt = STRSCAN_IMAG; - } else if (fmt == STRSCAN_INT) { - if (casecmp(*p, 'u')) p++, fmt = STRSCAN_U32; - if (casecmp(*p, 'l')) { - p++; - if (casecmp(*p, 'l')) p++, fmt += STRSCAN_I64 - STRSCAN_INT; - else if (!(opt & STRSCAN_OPT_C)) return STRSCAN_ERROR; - else if (sizeof(long) == 8) fmt += STRSCAN_I64 - STRSCAN_INT; - } - if (casecmp(*p, 'u') && (fmt == STRSCAN_INT || fmt == STRSCAN_I64)) - p++, fmt += STRSCAN_U32 - STRSCAN_INT; - if ((fmt == STRSCAN_U32 && !(opt & STRSCAN_OPT_C)) || - (fmt >= STRSCAN_I64 && !(opt & STRSCAN_OPT_LL))) - return STRSCAN_ERROR; - } - while (lj_char_isspace(*p)) p++; - if (*p) return STRSCAN_ERROR; - } - - /* Fast path for decimal 32 bit integers. */ - if (fmt == STRSCAN_INT && base == 10 && - (dig < 10 || (dig == 10 && *sp <= '2' && x < 0x80000000u+neg))) { - int32_t y = neg ? -(int32_t)x : (int32_t)x; - if ((opt & STRSCAN_OPT_TONUM)) { - o->n = (double)y; - return STRSCAN_NUM; - } else { - o->i = y; - return STRSCAN_INT; - } - } - - /* Dispatch to base-specific parser. */ - if (base == 0 && !(fmt == STRSCAN_NUM || fmt == STRSCAN_IMAG)) - return strscan_oct(sp, o, fmt, neg, dig); - if (base == 16) - fmt = strscan_hex(sp, o, fmt, opt, ex, neg, dig); - else - fmt = strscan_dec(sp, o, fmt, opt, ex, neg, dig); - - /* Try to convert number to integer, if requested. */ - if (fmt == STRSCAN_NUM && (opt & STRSCAN_OPT_TOINT)) { - double n = o->n; - int32_t i = lj_num2int(n); - if (n == (lua_Number)i) { o->i = i; return STRSCAN_INT; } - } - return fmt; - } -} - -int LJ_FASTCALL lj_strscan_num(GCstr *str, TValue *o) -{ - StrScanFmt fmt = lj_strscan_scan((const uint8_t *)strdata(str), o, - STRSCAN_OPT_TONUM); - lua_assert(fmt == STRSCAN_ERROR || fmt == STRSCAN_NUM); - return (fmt != STRSCAN_ERROR); -} - -#if LJ_DUALNUM -int LJ_FASTCALL lj_strscan_number(GCstr *str, TValue *o) -{ - StrScanFmt fmt = lj_strscan_scan((const uint8_t *)strdata(str), o, - STRSCAN_OPT_TOINT); - lua_assert(fmt == STRSCAN_ERROR || fmt == STRSCAN_NUM || fmt == STRSCAN_INT); - if (fmt == STRSCAN_INT) setitype(o, LJ_TISNUM); - return (fmt != STRSCAN_ERROR); -} -#endif - -#undef DNEXT -#undef DPREV -#undef DLEN - diff --git a/deps/luajit/src/lj_strscan.h b/deps/luajit/src/lj_strscan.h deleted file mode 100644 index 7760689..0000000 --- a/deps/luajit/src/lj_strscan.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -** String scanning. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_STRSCAN_H -#define _LJ_STRSCAN_H - -#include "lj_obj.h" - -/* Options for accepted/returned formats. */ -#define STRSCAN_OPT_TOINT 0x01 /* Convert to int32_t, if possible. */ -#define STRSCAN_OPT_TONUM 0x02 /* Always convert to double. */ -#define STRSCAN_OPT_IMAG 0x04 -#define STRSCAN_OPT_LL 0x08 -#define STRSCAN_OPT_C 0x10 - -/* Returned format. */ -typedef enum { - STRSCAN_ERROR, - STRSCAN_NUM, STRSCAN_IMAG, - STRSCAN_INT, STRSCAN_U32, STRSCAN_I64, STRSCAN_U64, -} StrScanFmt; - -LJ_FUNC StrScanFmt lj_strscan_scan(const uint8_t *p, TValue *o, uint32_t opt); -LJ_FUNC int LJ_FASTCALL lj_strscan_num(GCstr *str, TValue *o); -#if LJ_DUALNUM -LJ_FUNC int LJ_FASTCALL lj_strscan_number(GCstr *str, TValue *o); -#else -#define lj_strscan_number(s, o) lj_strscan_num((s), (o)) -#endif - -/* Check for number or convert string to number/int in-place (!). */ -static LJ_AINLINE int lj_strscan_numberobj(TValue *o) -{ - return tvisnumber(o) || (tvisstr(o) && lj_strscan_number(strV(o), o)); -} - -#endif diff --git a/deps/luajit/src/lj_tab.c b/deps/luajit/src/lj_tab.c deleted file mode 100644 index a8062db..0000000 --- a/deps/luajit/src/lj_tab.c +++ /dev/null @@ -1,631 +0,0 @@ -/* -** Table handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#define lj_tab_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_tab.h" - -/* -- Object hashing ------------------------------------------------------ */ - -/* Hash values are masked with the table hash mask and used as an index. */ -static LJ_AINLINE Node *hashmask(const GCtab *t, uint32_t hash) -{ - Node *n = noderef(t->node); - return &n[hash & t->hmask]; -} - -/* String hashes are precomputed when they are interned. */ -#define hashstr(t, s) hashmask(t, (s)->hash) - -#define hashlohi(t, lo, hi) hashmask((t), hashrot((lo), (hi))) -#define hashnum(t, o) hashlohi((t), (o)->u32.lo, ((o)->u32.hi << 1)) -#define hashptr(t, p) hashlohi((t), u32ptr(p), u32ptr(p) + HASH_BIAS) -#define hashgcref(t, r) hashlohi((t), gcrefu(r), gcrefu(r) + HASH_BIAS) - -/* Hash an arbitrary key and return its anchor position in the hash table. */ -static Node *hashkey(const GCtab *t, cTValue *key) -{ - lua_assert(!tvisint(key)); - if (tvisstr(key)) - return hashstr(t, strV(key)); - else if (tvisnum(key)) - return hashnum(t, key); - else if (tvisbool(key)) - return hashmask(t, boolV(key)); - else - return hashgcref(t, key->gcr); - /* Only hash 32 bits of lightuserdata on a 64 bit CPU. Good enough? */ -} - -/* -- Table creation and destruction -------------------------------------- */ - -/* Create new hash part for table. */ -static LJ_AINLINE void newhpart(lua_State *L, GCtab *t, uint32_t hbits) -{ - uint32_t hsize; - Node *node; - lua_assert(hbits != 0); - if (hbits > LJ_MAX_HBITS) - lj_err_msg(L, LJ_ERR_TABOV); - hsize = 1u << hbits; - node = lj_mem_newvec(L, hsize, Node); - setmref(node->freetop, &node[hsize]); - setmref(t->node, node); - t->hmask = hsize-1; -} - -/* -** Q: Why all of these copies of t->hmask, t->node etc. to local variables? -** A: Because alias analysis for C is _really_ tough. -** Even state-of-the-art C compilers won't produce good code without this. -*/ - -/* Clear hash part of table. */ -static LJ_AINLINE void clearhpart(GCtab *t) -{ - uint32_t i, hmask = t->hmask; - Node *node = noderef(t->node); - lua_assert(t->hmask != 0); - for (i = 0; i <= hmask; i++) { - Node *n = &node[i]; - setmref(n->next, NULL); - setnilV(&n->key); - setnilV(&n->val); - } -} - -/* Clear array part of table. */ -static LJ_AINLINE void clearapart(GCtab *t) -{ - uint32_t i, asize = t->asize; - TValue *array = tvref(t->array); - for (i = 0; i < asize; i++) - setnilV(&array[i]); -} - -/* Create a new table. Note: the slots are not initialized (yet). */ -static GCtab *newtab(lua_State *L, uint32_t asize, uint32_t hbits) -{ - GCtab *t; - /* First try to colocate the array part. */ - if (LJ_MAX_COLOSIZE != 0 && asize > 0 && asize <= LJ_MAX_COLOSIZE) { - lua_assert((sizeof(GCtab) & 7) == 0); - t = (GCtab *)lj_mem_newgco(L, sizetabcolo(asize)); - t->gct = ~LJ_TTAB; - t->nomm = (uint8_t)~0; - t->colo = (int8_t)asize; - setmref(t->array, (TValue *)((char *)t + sizeof(GCtab))); - setgcrefnull(t->metatable); - t->asize = asize; - t->hmask = 0; - setmref(t->node, &G(L)->nilnode); - } else { /* Otherwise separately allocate the array part. */ - t = lj_mem_newobj(L, GCtab); - t->gct = ~LJ_TTAB; - t->nomm = (uint8_t)~0; - t->colo = 0; - setmref(t->array, NULL); - setgcrefnull(t->metatable); - t->asize = 0; /* In case the array allocation fails. */ - t->hmask = 0; - setmref(t->node, &G(L)->nilnode); - if (asize > 0) { - if (asize > LJ_MAX_ASIZE) - lj_err_msg(L, LJ_ERR_TABOV); - setmref(t->array, lj_mem_newvec(L, asize, TValue)); - t->asize = asize; - } - } - if (hbits) - newhpart(L, t, hbits); - return t; -} - -/* Create a new table. -** -** IMPORTANT NOTE: The API differs from lua_createtable()! -** -** The array size is non-inclusive. E.g. asize=128 creates array slots -** for 0..127, but not for 128. If you need slots 1..128, pass asize=129 -** (slot 0 is wasted in this case). -** -** The hash size is given in hash bits. hbits=0 means no hash part. -** hbits=1 creates 2 hash slots, hbits=2 creates 4 hash slots and so on. -*/ -GCtab *lj_tab_new(lua_State *L, uint32_t asize, uint32_t hbits) -{ - GCtab *t = newtab(L, asize, hbits); - clearapart(t); - if (t->hmask > 0) clearhpart(t); - return t; -} - -#if LJ_HASJIT -GCtab * LJ_FASTCALL lj_tab_new1(lua_State *L, uint32_t ahsize) -{ - GCtab *t = newtab(L, ahsize & 0xffffff, ahsize >> 24); - clearapart(t); - if (t->hmask > 0) clearhpart(t); - return t; -} -#endif - -/* Duplicate a table. */ -GCtab * LJ_FASTCALL lj_tab_dup(lua_State *L, const GCtab *kt) -{ - GCtab *t; - uint32_t asize, hmask; - t = newtab(L, kt->asize, kt->hmask > 0 ? lj_fls(kt->hmask)+1 : 0); - lua_assert(kt->asize == t->asize && kt->hmask == t->hmask); - t->nomm = 0; /* Keys with metamethod names may be present. */ - asize = kt->asize; - if (asize > 0) { - TValue *array = tvref(t->array); - TValue *karray = tvref(kt->array); - if (asize < 64) { /* An inlined loop beats memcpy for < 512 bytes. */ - uint32_t i; - for (i = 0; i < asize; i++) - copyTV(L, &array[i], &karray[i]); - } else { - memcpy(array, karray, asize*sizeof(TValue)); - } - } - hmask = kt->hmask; - if (hmask > 0) { - uint32_t i; - Node *node = noderef(t->node); - Node *knode = noderef(kt->node); - ptrdiff_t d = (char *)node - (char *)knode; - setmref(node->freetop, (Node *)((char *)noderef(knode->freetop) + d)); - for (i = 0; i <= hmask; i++) { - Node *kn = &knode[i]; - Node *n = &node[i]; - Node *next = nextnode(kn); - /* Don't use copyTV here, since it asserts on a copy of a dead key. */ - n->val = kn->val; n->key = kn->key; - setmref(n->next, next == NULL? next : (Node *)((char *)next + d)); - } - } - return t; -} - -/* Free a table. */ -void LJ_FASTCALL lj_tab_free(global_State *g, GCtab *t) -{ - if (t->hmask > 0) - lj_mem_freevec(g, noderef(t->node), t->hmask+1, Node); - if (t->asize > 0 && LJ_MAX_COLOSIZE != 0 && t->colo <= 0) - lj_mem_freevec(g, tvref(t->array), t->asize, TValue); - if (LJ_MAX_COLOSIZE != 0 && t->colo) - lj_mem_free(g, t, sizetabcolo((uint32_t)t->colo & 0x7f)); - else - lj_mem_freet(g, t); -} - -/* -- Table resizing ------------------------------------------------------ */ - -/* Resize a table to fit the new array/hash part sizes. */ -static void resizetab(lua_State *L, GCtab *t, uint32_t asize, uint32_t hbits) -{ - Node *oldnode = noderef(t->node); - uint32_t oldasize = t->asize; - uint32_t oldhmask = t->hmask; - if (asize > oldasize) { /* Array part grows? */ - TValue *array; - uint32_t i; - if (asize > LJ_MAX_ASIZE) - lj_err_msg(L, LJ_ERR_TABOV); - if (LJ_MAX_COLOSIZE != 0 && t->colo > 0) { - /* A colocated array must be separated and copied. */ - TValue *oarray = tvref(t->array); - array = lj_mem_newvec(L, asize, TValue); - t->colo = (int8_t)(t->colo | 0x80); /* Mark as separated (colo < 0). */ - for (i = 0; i < oldasize; i++) - copyTV(L, &array[i], &oarray[i]); - } else { - array = (TValue *)lj_mem_realloc(L, tvref(t->array), - oldasize*sizeof(TValue), asize*sizeof(TValue)); - } - setmref(t->array, array); - t->asize = asize; - for (i = oldasize; i < asize; i++) /* Clear newly allocated slots. */ - setnilV(&array[i]); - } - /* Create new (empty) hash part. */ - if (hbits) { - newhpart(L, t, hbits); - clearhpart(t); - } else { - global_State *g = G(L); - setmref(t->node, &g->nilnode); - t->hmask = 0; - } - if (asize < oldasize) { /* Array part shrinks? */ - TValue *array = tvref(t->array); - uint32_t i; - t->asize = asize; /* Note: This 'shrinks' even colocated arrays. */ - for (i = asize; i < oldasize; i++) /* Reinsert old array values. */ - if (!tvisnil(&array[i])) - copyTV(L, lj_tab_setinth(L, t, (int32_t)i), &array[i]); - /* Physically shrink only separated arrays. */ - if (LJ_MAX_COLOSIZE != 0 && t->colo <= 0) - setmref(t->array, lj_mem_realloc(L, array, - oldasize*sizeof(TValue), asize*sizeof(TValue))); - } - if (oldhmask > 0) { /* Reinsert pairs from old hash part. */ - global_State *g; - uint32_t i; - for (i = 0; i <= oldhmask; i++) { - Node *n = &oldnode[i]; - if (!tvisnil(&n->val)) - copyTV(L, lj_tab_set(L, t, &n->key), &n->val); - } - g = G(L); - lj_mem_freevec(g, oldnode, oldhmask+1, Node); - } -} - -static uint32_t countint(cTValue *key, uint32_t *bins) -{ - lua_assert(!tvisint(key)); - if (tvisnum(key)) { - lua_Number nk = numV(key); - int32_t k = lj_num2int(nk); - if ((uint32_t)k < LJ_MAX_ASIZE && nk == (lua_Number)k) { - bins[(k > 2 ? lj_fls((uint32_t)(k-1)) : 0)]++; - return 1; - } - } - return 0; -} - -static uint32_t countarray(const GCtab *t, uint32_t *bins) -{ - uint32_t na, b, i; - if (t->asize == 0) return 0; - for (na = i = b = 0; b < LJ_MAX_ABITS; b++) { - uint32_t n, top = 2u << b; - TValue *array; - if (top >= t->asize) { - top = t->asize-1; - if (i > top) - break; - } - array = tvref(t->array); - for (n = 0; i <= top; i++) - if (!tvisnil(&array[i])) - n++; - bins[b] += n; - na += n; - } - return na; -} - -static uint32_t counthash(const GCtab *t, uint32_t *bins, uint32_t *narray) -{ - uint32_t total, na, i, hmask = t->hmask; - Node *node = noderef(t->node); - for (total = na = 0, i = 0; i <= hmask; i++) { - Node *n = &node[i]; - if (!tvisnil(&n->val)) { - na += countint(&n->key, bins); - total++; - } - } - *narray += na; - return total; -} - -static uint32_t bestasize(uint32_t bins[], uint32_t *narray) -{ - uint32_t b, sum, na = 0, sz = 0, nn = *narray; - for (b = 0, sum = 0; 2*nn > (1u< 0 && 2*(sum += bins[b]) > (1u<hmask > 0 ? lj_fls(t->hmask)+1 : 0); -} - -/* -- Table getters ------------------------------------------------------- */ - -cTValue * LJ_FASTCALL lj_tab_getinth(GCtab *t, int32_t key) -{ - TValue k; - Node *n; - k.n = (lua_Number)key; - n = hashnum(t, &k); - do { - if (tvisnum(&n->key) && n->key.n == k.n) - return &n->val; - } while ((n = nextnode(n))); - return NULL; -} - -cTValue *lj_tab_getstr(GCtab *t, GCstr *key) -{ - Node *n = hashstr(t, key); - do { - if (tvisstr(&n->key) && strV(&n->key) == key) - return &n->val; - } while ((n = nextnode(n))); - return NULL; -} - -cTValue *lj_tab_get(lua_State *L, GCtab *t, cTValue *key) -{ - if (tvisstr(key)) { - cTValue *tv = lj_tab_getstr(t, strV(key)); - if (tv) - return tv; - } else if (tvisint(key)) { - cTValue *tv = lj_tab_getint(t, intV(key)); - if (tv) - return tv; - } else if (tvisnum(key)) { - lua_Number nk = numV(key); - int32_t k = lj_num2int(nk); - if (nk == (lua_Number)k) { - cTValue *tv = lj_tab_getint(t, k); - if (tv) - return tv; - } else { - goto genlookup; /* Else use the generic lookup. */ - } - } else if (!tvisnil(key)) { - Node *n; - genlookup: - n = hashkey(t, key); - do { - if (lj_obj_equal(&n->key, key)) - return &n->val; - } while ((n = nextnode(n))); - } - return niltv(L); -} - -/* -- Table setters ------------------------------------------------------- */ - -/* Insert new key. Use Brent's variation to optimize the chain length. */ -TValue *lj_tab_newkey(lua_State *L, GCtab *t, cTValue *key) -{ - Node *n = hashkey(t, key); - if (!tvisnil(&n->val) || t->hmask == 0) { - Node *nodebase = noderef(t->node); - Node *collide, *freenode = noderef(nodebase->freetop); - lua_assert(freenode >= nodebase && freenode <= nodebase+t->hmask+1); - do { - if (freenode == nodebase) { /* No free node found? */ - rehashtab(L, t, key); /* Rehash table. */ - return lj_tab_set(L, t, key); /* Retry key insertion. */ - } - } while (!tvisnil(&(--freenode)->key)); - setmref(nodebase->freetop, freenode); - lua_assert(freenode != &G(L)->nilnode); - collide = hashkey(t, &n->key); - if (collide != n) { /* Colliding node not the main node? */ - while (noderef(collide->next) != n) /* Find predecessor. */ - collide = nextnode(collide); - setmref(collide->next, freenode); /* Relink chain. */ - /* Copy colliding node into free node and free main node. */ - freenode->val = n->val; - freenode->key = n->key; - freenode->next = n->next; - setmref(n->next, NULL); - setnilV(&n->val); - /* Rechain pseudo-resurrected string keys with colliding hashes. */ - while (nextnode(freenode)) { - Node *nn = nextnode(freenode); - if (tvisstr(&nn->key) && !tvisnil(&nn->val) && - hashstr(t, strV(&nn->key)) == n) { - freenode->next = nn->next; - nn->next = n->next; - setmref(n->next, nn); - } else { - freenode = nn; - } - } - } else { /* Otherwise use free node. */ - setmrefr(freenode->next, n->next); /* Insert into chain. */ - setmref(n->next, freenode); - n = freenode; - } - } - n->key.u64 = key->u64; - if (LJ_UNLIKELY(tvismzero(&n->key))) - n->key.u64 = 0; - lj_gc_anybarriert(L, t); - lua_assert(tvisnil(&n->val)); - return &n->val; -} - -TValue *lj_tab_setinth(lua_State *L, GCtab *t, int32_t key) -{ - TValue k; - Node *n; - k.n = (lua_Number)key; - n = hashnum(t, &k); - do { - if (tvisnum(&n->key) && n->key.n == k.n) - return &n->val; - } while ((n = nextnode(n))); - return lj_tab_newkey(L, t, &k); -} - -TValue *lj_tab_setstr(lua_State *L, GCtab *t, GCstr *key) -{ - TValue k; - Node *n = hashstr(t, key); - do { - if (tvisstr(&n->key) && strV(&n->key) == key) - return &n->val; - } while ((n = nextnode(n))); - setstrV(L, &k, key); - return lj_tab_newkey(L, t, &k); -} - -TValue *lj_tab_set(lua_State *L, GCtab *t, cTValue *key) -{ - Node *n; - t->nomm = 0; /* Invalidate negative metamethod cache. */ - if (tvisstr(key)) { - return lj_tab_setstr(L, t, strV(key)); - } else if (tvisint(key)) { - return lj_tab_setint(L, t, intV(key)); - } else if (tvisnum(key)) { - lua_Number nk = numV(key); - int32_t k = lj_num2int(nk); - if (nk == (lua_Number)k) - return lj_tab_setint(L, t, k); - if (tvisnan(key)) - lj_err_msg(L, LJ_ERR_NANIDX); - /* Else use the generic lookup. */ - } else if (tvisnil(key)) { - lj_err_msg(L, LJ_ERR_NILIDX); - } - n = hashkey(t, key); - do { - if (lj_obj_equal(&n->key, key)) - return &n->val; - } while ((n = nextnode(n))); - return lj_tab_newkey(L, t, key); -} - -/* -- Table traversal ----------------------------------------------------- */ - -/* Get the traversal index of a key. */ -static uint32_t keyindex(lua_State *L, GCtab *t, cTValue *key) -{ - TValue tmp; - if (tvisint(key)) { - int32_t k = intV(key); - if ((uint32_t)k < t->asize) - return (uint32_t)k; /* Array key indexes: [0..t->asize-1] */ - setnumV(&tmp, (lua_Number)k); - key = &tmp; - } else if (tvisnum(key)) { - lua_Number nk = numV(key); - int32_t k = lj_num2int(nk); - if ((uint32_t)k < t->asize && nk == (lua_Number)k) - return (uint32_t)k; /* Array key indexes: [0..t->asize-1] */ - } - if (!tvisnil(key)) { - Node *n = hashkey(t, key); - do { - if (lj_obj_equal(&n->key, key)) - return t->asize + (uint32_t)(n - noderef(t->node)); - /* Hash key indexes: [t->asize..t->asize+t->nmask] */ - } while ((n = nextnode(n))); - if (key->u32.hi == 0xfffe7fff) /* ITERN was despecialized while running. */ - return key->u32.lo - 1; - lj_err_msg(L, LJ_ERR_NEXTIDX); - return 0; /* unreachable */ - } - return ~0u; /* A nil key starts the traversal. */ -} - -/* Advance to the next step in a table traversal. */ -int lj_tab_next(lua_State *L, GCtab *t, TValue *key) -{ - uint32_t i = keyindex(L, t, key); /* Find predecessor key index. */ - for (i++; i < t->asize; i++) /* First traverse the array keys. */ - if (!tvisnil(arrayslot(t, i))) { - setintV(key, i); - copyTV(L, key+1, arrayslot(t, i)); - return 1; - } - for (i -= t->asize; i <= t->hmask; i++) { /* Then traverse the hash keys. */ - Node *n = &noderef(t->node)[i]; - if (!tvisnil(&n->val)) { - copyTV(L, key, &n->key); - copyTV(L, key+1, &n->val); - return 1; - } - } - return 0; /* End of traversal. */ -} - -/* -- Table length calculation -------------------------------------------- */ - -static MSize unbound_search(GCtab *t, MSize j) -{ - cTValue *tv; - MSize i = j; /* i is zero or a present index */ - j++; - /* find `i' and `j' such that i is present and j is not */ - while ((tv = lj_tab_getint(t, (int32_t)j)) && !tvisnil(tv)) { - i = j; - j *= 2; - if (j > (MSize)(INT_MAX-2)) { /* overflow? */ - /* table was built with bad purposes: resort to linear search */ - i = 1; - while ((tv = lj_tab_getint(t, (int32_t)i)) && !tvisnil(tv)) i++; - return i - 1; - } - } - /* now do a binary search between them */ - while (j - i > 1) { - MSize m = (i+j)/2; - cTValue *tvb = lj_tab_getint(t, (int32_t)m); - if (tvb && !tvisnil(tvb)) i = m; else j = m; - } - return i; -} - -/* -** Try to find a boundary in table `t'. A `boundary' is an integer index -** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). -*/ -MSize LJ_FASTCALL lj_tab_len(GCtab *t) -{ - MSize j = (MSize)t->asize; - if (j > 1 && tvisnil(arrayslot(t, j-1))) { - MSize i = 1; - while (j - i > 1) { - MSize m = (i+j)/2; - if (tvisnil(arrayslot(t, m-1))) j = m; else i = m; - } - return i-1; - } - if (j) j--; - if (t->hmask <= 0) - return j; - return unbound_search(t, j); -} - diff --git a/deps/luajit/src/lj_tab.h b/deps/luajit/src/lj_tab.h deleted file mode 100644 index f0d228e..0000000 --- a/deps/luajit/src/lj_tab.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -** Table handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TAB_H -#define _LJ_TAB_H - -#include "lj_obj.h" - -/* Hash constants. Tuned using a brute force search. */ -#define HASH_BIAS (-0x04c11db7) -#define HASH_ROT1 14 -#define HASH_ROT2 5 -#define HASH_ROT3 13 - -/* Scramble the bits of numbers and pointers. */ -static LJ_AINLINE uint32_t hashrot(uint32_t lo, uint32_t hi) -{ -#if LJ_TARGET_X86ORX64 - /* Prefer variant that compiles well for a 2-operand CPU. */ - lo ^= hi; hi = lj_rol(hi, HASH_ROT1); - lo -= hi; hi = lj_rol(hi, HASH_ROT2); - hi ^= lo; hi -= lj_rol(lo, HASH_ROT3); -#else - lo ^= hi; - lo = lo - lj_rol(hi, HASH_ROT1); - hi = lo ^ lj_rol(hi, HASH_ROT1 + HASH_ROT2); - hi = hi - lj_rol(lo, HASH_ROT3); -#endif - return hi; -} - -#define hsize2hbits(s) ((s) ? ((s)==1 ? 1 : 1+lj_fls((uint32_t)((s)-1))) : 0) - -LJ_FUNCA GCtab *lj_tab_new(lua_State *L, uint32_t asize, uint32_t hbits); -#if LJ_HASJIT -LJ_FUNC GCtab * LJ_FASTCALL lj_tab_new1(lua_State *L, uint32_t ahsize); -#endif -LJ_FUNCA GCtab * LJ_FASTCALL lj_tab_dup(lua_State *L, const GCtab *kt); -LJ_FUNC void LJ_FASTCALL lj_tab_free(global_State *g, GCtab *t); -#if LJ_HASFFI -LJ_FUNC void lj_tab_rehash(lua_State *L, GCtab *t); -#endif -LJ_FUNCA void lj_tab_reasize(lua_State *L, GCtab *t, uint32_t nasize); - -/* Caveat: all getters except lj_tab_get() can return NULL! */ - -LJ_FUNCA cTValue * LJ_FASTCALL lj_tab_getinth(GCtab *t, int32_t key); -LJ_FUNC cTValue *lj_tab_getstr(GCtab *t, GCstr *key); -LJ_FUNCA cTValue *lj_tab_get(lua_State *L, GCtab *t, cTValue *key); - -/* Caveat: all setters require a write barrier for the stored value. */ - -LJ_FUNCA TValue *lj_tab_newkey(lua_State *L, GCtab *t, cTValue *key); -LJ_FUNC TValue *lj_tab_setinth(lua_State *L, GCtab *t, int32_t key); -LJ_FUNC TValue *lj_tab_setstr(lua_State *L, GCtab *t, GCstr *key); -LJ_FUNC TValue *lj_tab_set(lua_State *L, GCtab *t, cTValue *key); - -#define inarray(t, key) ((MSize)(key) < (MSize)(t)->asize) -#define arrayslot(t, i) (&tvref((t)->array)[(i)]) -#define lj_tab_getint(t, key) \ - (inarray((t), (key)) ? arrayslot((t), (key)) : lj_tab_getinth((t), (key))) -#define lj_tab_setint(L, t, key) \ - (inarray((t), (key)) ? arrayslot((t), (key)) : lj_tab_setinth(L, (t), (key))) - -LJ_FUNCA int lj_tab_next(lua_State *L, GCtab *t, TValue *key); -LJ_FUNCA MSize LJ_FASTCALL lj_tab_len(GCtab *t); - -#endif diff --git a/deps/luajit/src/lj_target.h b/deps/luajit/src/lj_target.h deleted file mode 100644 index 1a24232..0000000 --- a/deps/luajit/src/lj_target.h +++ /dev/null @@ -1,162 +0,0 @@ -/* -** Definitions for target CPU. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TARGET_H -#define _LJ_TARGET_H - -#include "lj_def.h" -#include "lj_arch.h" - -/* -- Registers and spill slots ------------------------------------------- */ - -/* Register type (uint8_t in ir->r). */ -typedef uint32_t Reg; - -/* The hi-bit is NOT set for an allocated register. This means the value -** can be directly used without masking. The hi-bit is set for a register -** allocation hint or for RID_INIT, RID_SINK or RID_SUNK. -*/ -#define RID_NONE 0x80 -#define RID_MASK 0x7f -#define RID_INIT (RID_NONE|RID_MASK) -#define RID_SINK (RID_INIT-1) -#define RID_SUNK (RID_INIT-2) - -#define ra_noreg(r) ((r) & RID_NONE) -#define ra_hasreg(r) (!((r) & RID_NONE)) - -/* The ra_hashint() macro assumes a previous test for ra_noreg(). */ -#define ra_hashint(r) ((r) < RID_SUNK) -#define ra_gethint(r) ((Reg)((r) & RID_MASK)) -#define ra_sethint(rr, r) rr = (uint8_t)((r)|RID_NONE) -#define ra_samehint(r1, r2) (ra_gethint((r1)^(r2)) == 0) - -/* Spill slot 0 means no spill slot has been allocated. */ -#define SPS_NONE 0 - -#define ra_hasspill(s) ((s) != SPS_NONE) - -/* Combined register and spill slot (uint16_t in ir->prev). */ -typedef uint32_t RegSP; - -#define REGSP(r, s) ((r) + ((s) << 8)) -#define REGSP_HINT(r) ((r)|RID_NONE) -#define REGSP_INIT REGSP(RID_INIT, 0) - -#define regsp_reg(rs) ((rs) & 255) -#define regsp_spill(rs) ((rs) >> 8) -#define regsp_used(rs) \ - (((rs) & ~REGSP(RID_MASK, 0)) != REGSP(RID_NONE, 0)) - -/* -- Register sets ------------------------------------------------------- */ - -/* Bitset for registers. 32 registers suffice for most architectures. -** Note that one set holds bits for both GPRs and FPRs. -*/ -#if LJ_TARGET_PPC || LJ_TARGET_MIPS -typedef uint64_t RegSet; -#else -typedef uint32_t RegSet; -#endif - -#define RID2RSET(r) (((RegSet)1) << (r)) -#define RSET_EMPTY ((RegSet)0) -#define RSET_RANGE(lo, hi) ((RID2RSET((hi)-(lo))-1) << (lo)) - -#define rset_test(rs, r) ((int)((rs) >> (r)) & 1) -#define rset_set(rs, r) (rs |= RID2RSET(r)) -#define rset_clear(rs, r) (rs &= ~RID2RSET(r)) -#define rset_exclude(rs, r) (rs & ~RID2RSET(r)) -#if LJ_TARGET_PPC || LJ_TARGET_MIPS -#define rset_picktop(rs) ((Reg)(__builtin_clzll(rs)^63)) -#define rset_pickbot(rs) ((Reg)__builtin_ctzll(rs)) -#else -#define rset_picktop(rs) ((Reg)lj_fls(rs)) -#define rset_pickbot(rs) ((Reg)lj_ffs(rs)) -#endif - -/* -- Register allocation cost -------------------------------------------- */ - -/* The register allocation heuristic keeps track of the cost for allocating -** a specific register: -** -** A free register (obviously) has a cost of 0 and a 1-bit in the free mask. -** -** An already allocated register has the (non-zero) IR reference in the lowest -** bits and the result of a blended cost-model in the higher bits. -** -** The allocator first checks the free mask for a hit. Otherwise an (unrolled) -** linear search for the minimum cost is used. The search doesn't need to -** keep track of the position of the minimum, which makes it very fast. -** The lowest bits of the minimum cost show the desired IR reference whose -** register is the one to evict. -** -** Without the cost-model this degenerates to the standard heuristics for -** (reverse) linear-scan register allocation. Since code generation is done -** in reverse, a live interval extends from the last use to the first def. -** For an SSA IR the IR reference is the first (and only) def and thus -** trivially marks the end of the interval. The LSRA heuristics says to pick -** the register whose live interval has the furthest extent, i.e. the lowest -** IR reference in our case. -** -** A cost-model should take into account other factors, like spill-cost and -** restore- or rematerialization-cost, which depend on the kind of instruction. -** E.g. constants have zero spill costs, variant instructions have higher -** costs than invariants and PHIs should preferably never be spilled. -** -** Here's a first cut at simple, but effective blended cost-model for R-LSRA: -** - Due to careful design of the IR, constants already have lower IR -** references than invariants and invariants have lower IR references -** than variants. -** - The cost in the upper 16 bits is the sum of the IR reference and a -** weighted score. The score currently only takes into account whether -** the IRT_ISPHI bit is set in the instruction type. -** - The PHI weight is the minimum distance (in IR instructions) a PHI -** reference has to be further apart from a non-PHI reference to be spilled. -** - It should be a power of two (for speed) and must be between 2 and 32768. -** Good values for the PHI weight seem to be between 40 and 150. -** - Further study is required. -*/ -#define REGCOST_PHI_WEIGHT 64 - -/* Cost for allocating a specific register. */ -typedef uint32_t RegCost; - -/* Note: assumes 16 bit IRRef1. */ -#define REGCOST(cost, ref) ((RegCost)(ref) + ((RegCost)(cost) << 16)) -#define regcost_ref(rc) ((IRRef1)(rc)) - -#define REGCOST_T(t) \ - ((RegCost)((t)&IRT_ISPHI) * (((RegCost)(REGCOST_PHI_WEIGHT)<<16)/IRT_ISPHI)) -#define REGCOST_REF_T(ref, t) (REGCOST((ref), (ref)) + REGCOST_T((t))) - -/* -- Target-specific definitions ----------------------------------------- */ - -#if LJ_TARGET_X86ORX64 -#include "lj_target_x86.h" -#elif LJ_TARGET_ARM -#include "lj_target_arm.h" -#elif LJ_TARGET_PPC -#include "lj_target_ppc.h" -#elif LJ_TARGET_MIPS -#include "lj_target_mips.h" -#else -#error "Missing include for target CPU" -#endif - -#ifdef EXITSTUBS_PER_GROUP -/* Return the address of an exit stub. */ -static LJ_AINLINE char *exitstub_addr_(char **group, uint32_t exitno) -{ - lua_assert(group[exitno / EXITSTUBS_PER_GROUP] != NULL); - return (char *)group[exitno / EXITSTUBS_PER_GROUP] + - EXITSTUB_SPACING*(exitno % EXITSTUBS_PER_GROUP); -} -/* Avoid dependence on lj_jit.h if only including lj_target.h. */ -#define exitstub_addr(J, exitno) \ - ((MCode *)exitstub_addr_((char **)((J)->exitstubgroup), (exitno))) -#endif - -#endif diff --git a/deps/luajit/src/lj_target_arm.h b/deps/luajit/src/lj_target_arm.h deleted file mode 100644 index 6d4d0ae..0000000 --- a/deps/luajit/src/lj_target_arm.h +++ /dev/null @@ -1,274 +0,0 @@ -/* -** Definitions for ARM CPUs. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TARGET_ARM_H -#define _LJ_TARGET_ARM_H - -/* -- Registers IDs ------------------------------------------------------- */ - -#define GPRDEF(_) \ - _(R0) _(R1) _(R2) _(R3) _(R4) _(R5) _(R6) _(R7) \ - _(R8) _(R9) _(R10) _(R11) _(R12) _(SP) _(LR) _(PC) -#if LJ_SOFTFP -#define FPRDEF(_) -#else -#define FPRDEF(_) \ - _(D0) _(D1) _(D2) _(D3) _(D4) _(D5) _(D6) _(D7) \ - _(D8) _(D9) _(D10) _(D11) _(D12) _(D13) _(D14) _(D15) -#endif -#define VRIDDEF(_) - -#define RIDENUM(name) RID_##name, - -enum { - GPRDEF(RIDENUM) /* General-purpose registers (GPRs). */ - FPRDEF(RIDENUM) /* Floating-point registers (FPRs). */ - RID_MAX, - RID_TMP = RID_LR, - - /* Calling conventions. */ - RID_RET = RID_R0, - RID_RETLO = RID_R0, - RID_RETHI = RID_R1, -#if LJ_SOFTFP - RID_FPRET = RID_R0, -#else - RID_FPRET = RID_D0, -#endif - - /* These definitions must match with the *.dasc file(s): */ - RID_BASE = RID_R9, /* Interpreter BASE. */ - RID_LPC = RID_R6, /* Interpreter PC. */ - RID_DISPATCH = RID_R7, /* Interpreter DISPATCH table. */ - RID_LREG = RID_R8, /* Interpreter L. */ - - /* Register ranges [min, max) and number of registers. */ - RID_MIN_GPR = RID_R0, - RID_MAX_GPR = RID_PC+1, - RID_MIN_FPR = RID_MAX_GPR, -#if LJ_SOFTFP - RID_MAX_FPR = RID_MIN_FPR, -#else - RID_MAX_FPR = RID_D15+1, -#endif - RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR, - RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR -}; - -#define RID_NUM_KREF RID_NUM_GPR -#define RID_MIN_KREF RID_R0 - -/* -- Register sets ------------------------------------------------------- */ - -/* Make use of all registers, except sp, lr and pc. */ -#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_R12+1)) -#define RSET_GPREVEN \ - (RID2RSET(RID_R0)|RID2RSET(RID_R2)|RID2RSET(RID_R4)|RID2RSET(RID_R6)| \ - RID2RSET(RID_R8)|RID2RSET(RID_R10)) -#define RSET_GPRODD \ - (RID2RSET(RID_R1)|RID2RSET(RID_R3)|RID2RSET(RID_R5)|RID2RSET(RID_R7)| \ - RID2RSET(RID_R9)|RID2RSET(RID_R11)) -#if LJ_SOFTFP -#define RSET_FPR 0 -#else -#define RSET_FPR (RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR)) -#endif -#define RSET_ALL (RSET_GPR|RSET_FPR) -#define RSET_INIT RSET_ALL - -/* ABI-specific register sets. lr is an implicit scratch register. */ -#define RSET_SCRATCH_GPR_ (RSET_RANGE(RID_R0, RID_R3+1)|RID2RSET(RID_R12)) -#ifdef __APPLE__ -#define RSET_SCRATCH_GPR (RSET_SCRATCH_GPR_|RID2RSET(RID_R9)) -#else -#define RSET_SCRATCH_GPR RSET_SCRATCH_GPR_ -#endif -#if LJ_SOFTFP -#define RSET_SCRATCH_FPR 0 -#else -#define RSET_SCRATCH_FPR (RSET_RANGE(RID_D0, RID_D7+1)) -#endif -#define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR) -#define REGARG_FIRSTGPR RID_R0 -#define REGARG_LASTGPR RID_R3 -#define REGARG_NUMGPR 4 -#if LJ_ABI_SOFTFP -#define REGARG_FIRSTFPR 0 -#define REGARG_LASTFPR 0 -#define REGARG_NUMFPR 0 -#else -#define REGARG_FIRSTFPR RID_D0 -#define REGARG_LASTFPR RID_D7 -#define REGARG_NUMFPR 8 -#endif - -/* -- Spill slots --------------------------------------------------------- */ - -/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs. -** -** SPS_FIXED: Available fixed spill slots in interpreter frame. -** This definition must match with the *.dasc file(s). -** -** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots. -*/ -#define SPS_FIXED 2 -#define SPS_FIRST 2 - -#define SPOFS_TMP 0 - -#define sps_scale(slot) (4 * (int32_t)(slot)) -#define sps_align(slot) (((slot) - SPS_FIXED + 1) & ~1) - -/* -- Exit state ---------------------------------------------------------- */ - -/* This definition must match with the *.dasc file(s). */ -typedef struct { -#if !LJ_SOFTFP - lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */ -#endif - int32_t gpr[RID_NUM_GPR]; /* General-purpose registers. */ - int32_t spill[256]; /* Spill slots. */ -} ExitState; - -/* PC after instruction that caused an exit. Used to find the trace number. */ -#define EXITSTATE_PCREG RID_PC -/* Highest exit + 1 indicates stack check. */ -#define EXITSTATE_CHECKEXIT 1 - -#define EXITSTUB_SPACING 4 -#define EXITSTUBS_PER_GROUP 32 - -/* -- Instructions -------------------------------------------------------- */ - -/* Instruction fields. */ -#define ARMF_CC(ai, cc) (((ai) ^ ARMI_CCAL) | ((cc) << 28)) -#define ARMF_N(r) ((r) << 16) -#define ARMF_D(r) ((r) << 12) -#define ARMF_S(r) ((r) << 8) -#define ARMF_M(r) (r) -#define ARMF_SH(sh, n) (((sh) << 5) | ((n) << 7)) -#define ARMF_RSH(sh, r) (0x10 | ((sh) << 5) | ARMF_S(r)) - -typedef enum ARMIns { - ARMI_CCAL = 0xe0000000, - ARMI_S = 0x000100000, - ARMI_K12 = 0x02000000, - ARMI_KNEG = 0x00200000, - ARMI_LS_W = 0x00200000, - ARMI_LS_U = 0x00800000, - ARMI_LS_P = 0x01000000, - ARMI_LS_R = 0x02000000, - ARMI_LSX_I = 0x00400000, - - ARMI_AND = 0xe0000000, - ARMI_EOR = 0xe0200000, - ARMI_SUB = 0xe0400000, - ARMI_RSB = 0xe0600000, - ARMI_ADD = 0xe0800000, - ARMI_ADC = 0xe0a00000, - ARMI_SBC = 0xe0c00000, - ARMI_RSC = 0xe0e00000, - ARMI_TST = 0xe1100000, - ARMI_TEQ = 0xe1300000, - ARMI_CMP = 0xe1500000, - ARMI_CMN = 0xe1700000, - ARMI_ORR = 0xe1800000, - ARMI_MOV = 0xe1a00000, - ARMI_BIC = 0xe1c00000, - ARMI_MVN = 0xe1e00000, - - ARMI_NOP = 0xe1a00000, - - ARMI_MUL = 0xe0000090, - ARMI_SMULL = 0xe0c00090, - - ARMI_LDR = 0xe4100000, - ARMI_LDRB = 0xe4500000, - ARMI_LDRH = 0xe01000b0, - ARMI_LDRSB = 0xe01000d0, - ARMI_LDRSH = 0xe01000f0, - ARMI_LDRD = 0xe00000d0, - ARMI_STR = 0xe4000000, - ARMI_STRB = 0xe4400000, - ARMI_STRH = 0xe00000b0, - ARMI_STRD = 0xe00000f0, - ARMI_PUSH = 0xe92d0000, - - ARMI_B = 0xea000000, - ARMI_BL = 0xeb000000, - ARMI_BLX = 0xfa000000, - ARMI_BLXr = 0xe12fff30, - - /* ARMv6 */ - ARMI_REV = 0xe6bf0f30, - ARMI_SXTB = 0xe6af0070, - ARMI_SXTH = 0xe6bf0070, - ARMI_UXTB = 0xe6ef0070, - ARMI_UXTH = 0xe6ff0070, - - /* ARMv6T2 */ - ARMI_MOVW = 0xe3000000, - ARMI_MOVT = 0xe3400000, - - /* VFP */ - ARMI_VMOV_D = 0xeeb00b40, - ARMI_VMOV_S = 0xeeb00a40, - ARMI_VMOVI_D = 0xeeb00b00, - - ARMI_VMOV_R_S = 0xee100a10, - ARMI_VMOV_S_R = 0xee000a10, - ARMI_VMOV_RR_D = 0xec500b10, - ARMI_VMOV_D_RR = 0xec400b10, - - ARMI_VADD_D = 0xee300b00, - ARMI_VSUB_D = 0xee300b40, - ARMI_VMUL_D = 0xee200b00, - ARMI_VMLA_D = 0xee000b00, - ARMI_VMLS_D = 0xee000b40, - ARMI_VNMLS_D = 0xee100b00, - ARMI_VDIV_D = 0xee800b00, - - ARMI_VABS_D = 0xeeb00bc0, - ARMI_VNEG_D = 0xeeb10b40, - ARMI_VSQRT_D = 0xeeb10bc0, - - ARMI_VCMP_D = 0xeeb40b40, - ARMI_VCMPZ_D = 0xeeb50b40, - - ARMI_VMRS = 0xeef1fa10, - - ARMI_VCVT_S32_F32 = 0xeebd0ac0, - ARMI_VCVT_S32_F64 = 0xeebd0bc0, - ARMI_VCVT_U32_F32 = 0xeebc0ac0, - ARMI_VCVT_U32_F64 = 0xeebc0bc0, - ARMI_VCVTR_S32_F32 = 0xeebd0a40, - ARMI_VCVTR_S32_F64 = 0xeebd0b40, - ARMI_VCVTR_U32_F32 = 0xeebc0a40, - ARMI_VCVTR_U32_F64 = 0xeebc0b40, - ARMI_VCVT_F32_S32 = 0xeeb80ac0, - ARMI_VCVT_F64_S32 = 0xeeb80bc0, - ARMI_VCVT_F32_U32 = 0xeeb80a40, - ARMI_VCVT_F64_U32 = 0xeeb80b40, - ARMI_VCVT_F32_F64 = 0xeeb70bc0, - ARMI_VCVT_F64_F32 = 0xeeb70ac0, - - ARMI_VLDR_S = 0xed100a00, - ARMI_VLDR_D = 0xed100b00, - ARMI_VSTR_S = 0xed000a00, - ARMI_VSTR_D = 0xed000b00, -} ARMIns; - -typedef enum ARMShift { - ARMSH_LSL, ARMSH_LSR, ARMSH_ASR, ARMSH_ROR -} ARMShift; - -/* ARM condition codes. */ -typedef enum ARMCC { - CC_EQ, CC_NE, CC_CS, CC_CC, CC_MI, CC_PL, CC_VS, CC_VC, - CC_HI, CC_LS, CC_GE, CC_LT, CC_GT, CC_LE, CC_AL, - CC_HS = CC_CS, CC_LO = CC_CC -} ARMCC; - -#endif diff --git a/deps/luajit/src/lj_target_mips.h b/deps/luajit/src/lj_target_mips.h deleted file mode 100644 index 0ab140b..0000000 --- a/deps/luajit/src/lj_target_mips.h +++ /dev/null @@ -1,257 +0,0 @@ -/* -** Definitions for MIPS CPUs. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TARGET_MIPS_H -#define _LJ_TARGET_MIPS_H - -/* -- Registers IDs ------------------------------------------------------- */ - -#define GPRDEF(_) \ - _(R0) _(R1) _(R2) _(R3) _(R4) _(R5) _(R6) _(R7) \ - _(R8) _(R9) _(R10) _(R11) _(R12) _(R13) _(R14) _(R15) \ - _(R16) _(R17) _(R18) _(R19) _(R20) _(R21) _(R22) _(R23) \ - _(R24) _(R25) _(SYS1) _(SYS2) _(R28) _(SP) _(R30) _(RA) -#define FPRDEF(_) \ - _(F0) _(F1) _(F2) _(F3) _(F4) _(F5) _(F6) _(F7) \ - _(F8) _(F9) _(F10) _(F11) _(F12) _(F13) _(F14) _(F15) \ - _(F16) _(F17) _(F18) _(F19) _(F20) _(F21) _(F22) _(F23) \ - _(F24) _(F25) _(F26) _(F27) _(F28) _(F29) _(F30) _(F31) -#define VRIDDEF(_) - -#define RIDENUM(name) RID_##name, - -enum { - GPRDEF(RIDENUM) /* General-purpose registers (GPRs). */ - FPRDEF(RIDENUM) /* Floating-point registers (FPRs). */ - RID_MAX, - RID_ZERO = RID_R0, - RID_TMP = RID_RA, - - /* Calling conventions. */ - RID_RET = RID_R2, -#if LJ_LE - RID_RETHI = RID_R3, - RID_RETLO = RID_R2, -#else - RID_RETHI = RID_R2, - RID_RETLO = RID_R3, -#endif - RID_FPRET = RID_F0, - RID_CFUNCADDR = RID_R25, - - /* These definitions must match with the *.dasc file(s): */ - RID_BASE = RID_R16, /* Interpreter BASE. */ - RID_LPC = RID_R18, /* Interpreter PC. */ - RID_DISPATCH = RID_R19, /* Interpreter DISPATCH table. */ - RID_LREG = RID_R20, /* Interpreter L. */ - RID_JGL = RID_R30, /* On-trace: global_State + 32768. */ - - /* Register ranges [min, max) and number of registers. */ - RID_MIN_GPR = RID_R0, - RID_MAX_GPR = RID_RA+1, - RID_MIN_FPR = RID_F0, - RID_MAX_FPR = RID_F31+1, - RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR, - RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR /* Only even regs are used. */ -}; - -#define RID_NUM_KREF RID_NUM_GPR -#define RID_MIN_KREF RID_R0 - -/* -- Register sets ------------------------------------------------------- */ - -/* Make use of all registers, except ZERO, TMP, SP, SYS1, SYS2 and JGL. */ -#define RSET_FIXED \ - (RID2RSET(RID_ZERO)|RID2RSET(RID_TMP)|RID2RSET(RID_SP)|\ - RID2RSET(RID_SYS1)|RID2RSET(RID_SYS2)|RID2RSET(RID_JGL)) -#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR) - RSET_FIXED) -#define RSET_FPR \ - (RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\ - RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\ - RID2RSET(RID_F16)|RID2RSET(RID_F18)|RID2RSET(RID_F20)|RID2RSET(RID_F22)|\ - RID2RSET(RID_F24)|RID2RSET(RID_F26)|RID2RSET(RID_F28)|RID2RSET(RID_F30)) -#define RSET_ALL (RSET_GPR|RSET_FPR) -#define RSET_INIT RSET_ALL - -#define RSET_SCRATCH_GPR \ - (RSET_RANGE(RID_R1, RID_R15+1)|\ - RID2RSET(RID_R24)|RID2RSET(RID_R25)|RID2RSET(RID_R28)) -#define RSET_SCRATCH_FPR \ - (RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\ - RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\ - RID2RSET(RID_F16)|RID2RSET(RID_F18)) -#define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR) -#define REGARG_FIRSTGPR RID_R4 -#define REGARG_LASTGPR RID_R7 -#define REGARG_NUMGPR 4 -#define REGARG_FIRSTFPR RID_F12 -#define REGARG_LASTFPR RID_F14 -#define REGARG_NUMFPR 2 - -/* -- Spill slots --------------------------------------------------------- */ - -/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs. -** -** SPS_FIXED: Available fixed spill slots in interpreter frame. -** This definition must match with the *.dasc file(s). -** -** SPS_FIRST: First spill slot for general use. -*/ -#define SPS_FIXED 5 -#define SPS_FIRST 4 - -#define SPOFS_TMP 0 - -#define sps_scale(slot) (4 * (int32_t)(slot)) -#define sps_align(slot) (((slot) - SPS_FIXED + 1) & ~1) - -/* -- Exit state ---------------------------------------------------------- */ - -/* This definition must match with the *.dasc file(s). */ -typedef struct { - lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */ - int32_t gpr[RID_NUM_GPR]; /* General-purpose registers. */ - int32_t spill[256]; /* Spill slots. */ -} ExitState; - -/* Highest exit + 1 indicates stack check. */ -#define EXITSTATE_CHECKEXIT 1 - -/* Return the address of a per-trace exit stub. */ -static LJ_AINLINE uint32_t *exitstub_trace_addr_(uint32_t *p) -{ - while (*p == 0x00000000) p++; /* Skip MIPSI_NOP. */ - return p; -} -/* Avoid dependence on lj_jit.h if only including lj_target.h. */ -#define exitstub_trace_addr(T, exitno) \ - exitstub_trace_addr_((MCode *)((char *)(T)->mcode + (T)->szmcode)) - -/* -- Instructions -------------------------------------------------------- */ - -/* Instruction fields. */ -#define MIPSF_S(r) ((r) << 21) -#define MIPSF_T(r) ((r) << 16) -#define MIPSF_D(r) ((r) << 11) -#define MIPSF_R(r) ((r) << 21) -#define MIPSF_H(r) ((r) << 16) -#define MIPSF_G(r) ((r) << 11) -#define MIPSF_F(r) ((r) << 6) -#define MIPSF_A(n) ((n) << 6) -#define MIPSF_M(n) ((n) << 11) - -typedef enum MIPSIns { - /* Integer instructions. */ - MIPSI_MOVE = 0x00000021, - MIPSI_NOP = 0x00000000, - - MIPSI_LI = 0x24000000, - MIPSI_LU = 0x34000000, - MIPSI_LUI = 0x3c000000, - - MIPSI_ADDIU = 0x24000000, - MIPSI_ANDI = 0x30000000, - MIPSI_ORI = 0x34000000, - MIPSI_XORI = 0x38000000, - MIPSI_SLTI = 0x28000000, - MIPSI_SLTIU = 0x2c000000, - - MIPSI_ADDU = 0x00000021, - MIPSI_SUBU = 0x00000023, - MIPSI_MUL = 0x70000002, - MIPSI_AND = 0x00000024, - MIPSI_OR = 0x00000025, - MIPSI_XOR = 0x00000026, - MIPSI_NOR = 0x00000027, - MIPSI_SLT = 0x0000002a, - MIPSI_SLTU = 0x0000002b, - MIPSI_MOVZ = 0x0000000a, - MIPSI_MOVN = 0x0000000b, - - MIPSI_SLL = 0x00000000, - MIPSI_SRL = 0x00000002, - MIPSI_SRA = 0x00000003, - MIPSI_ROTR = 0x00200002, /* MIPS32R2 */ - MIPSI_SLLV = 0x00000004, - MIPSI_SRLV = 0x00000006, - MIPSI_SRAV = 0x00000007, - MIPSI_ROTRV = 0x00000046, /* MIPS32R2 */ - - MIPSI_SEB = 0x7c000420, /* MIPS32R2 */ - MIPSI_SEH = 0x7c000620, /* MIPS32R2 */ - MIPSI_WSBH = 0x7c0000a0, /* MIPS32R2 */ - - MIPSI_B = 0x10000000, - MIPSI_J = 0x08000000, - MIPSI_JAL = 0x0c000000, - MIPSI_JR = 0x00000008, - MIPSI_JALR = 0x0000f809, - - MIPSI_BEQ = 0x10000000, - MIPSI_BNE = 0x14000000, - MIPSI_BLEZ = 0x18000000, - MIPSI_BGTZ = 0x1c000000, - MIPSI_BLTZ = 0x04000000, - MIPSI_BGEZ = 0x04010000, - - /* Load/store instructions. */ - MIPSI_LW = 0x8c000000, - MIPSI_SW = 0xac000000, - MIPSI_LB = 0x80000000, - MIPSI_SB = 0xa0000000, - MIPSI_LH = 0x84000000, - MIPSI_SH = 0xa4000000, - MIPSI_LBU = 0x90000000, - MIPSI_LHU = 0x94000000, - MIPSI_LWC1 = 0xc4000000, - MIPSI_SWC1 = 0xe4000000, - MIPSI_LDC1 = 0xd4000000, - MIPSI_SDC1 = 0xf4000000, - - /* FP instructions. */ - MIPSI_MOV_S = 0x46000006, - MIPSI_MOV_D = 0x46200006, - MIPSI_MOVT_D = 0x46210011, - MIPSI_MOVF_D = 0x46200011, - - MIPSI_ABS_D = 0x46200005, - MIPSI_NEG_D = 0x46200007, - - MIPSI_ADD_D = 0x46200000, - MIPSI_SUB_D = 0x46200001, - MIPSI_MUL_D = 0x46200002, - MIPSI_DIV_D = 0x46200003, - MIPSI_SQRT_D = 0x46200004, - - MIPSI_ADD_S = 0x46000000, - MIPSI_SUB_S = 0x46000001, - - MIPSI_CVT_D_S = 0x46000021, - MIPSI_CVT_W_S = 0x46000024, - MIPSI_CVT_S_D = 0x46200020, - MIPSI_CVT_W_D = 0x46200024, - MIPSI_CVT_S_W = 0x46800020, - MIPSI_CVT_D_W = 0x46800021, - - MIPSI_TRUNC_W_S = 0x4600000d, - MIPSI_TRUNC_W_D = 0x4620000d, - MIPSI_FLOOR_W_S = 0x4600000f, - MIPSI_FLOOR_W_D = 0x4620000f, - - MIPSI_MFC1 = 0x44000000, - MIPSI_MTC1 = 0x44800000, - - MIPSI_BC1F = 0x45000000, - MIPSI_BC1T = 0x45010000, - - MIPSI_C_EQ_D = 0x46200032, - MIPSI_C_OLT_D = 0x46200034, - MIPSI_C_ULT_D = 0x46200035, - MIPSI_C_OLE_D = 0x46200036, - MIPSI_C_ULE_D = 0x46200037, - -} MIPSIns; - -#endif diff --git a/deps/luajit/src/lj_target_ppc.h b/deps/luajit/src/lj_target_ppc.h deleted file mode 100644 index 2caeeb0..0000000 --- a/deps/luajit/src/lj_target_ppc.h +++ /dev/null @@ -1,280 +0,0 @@ -/* -** Definitions for PPC CPUs. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TARGET_PPC_H -#define _LJ_TARGET_PPC_H - -/* -- Registers IDs ------------------------------------------------------- */ - -#define GPRDEF(_) \ - _(R0) _(SP) _(SYS1) _(R3) _(R4) _(R5) _(R6) _(R7) \ - _(R8) _(R9) _(R10) _(R11) _(R12) _(SYS2) _(R14) _(R15) \ - _(R16) _(R17) _(R18) _(R19) _(R20) _(R21) _(R22) _(R23) \ - _(R24) _(R25) _(R26) _(R27) _(R28) _(R29) _(R30) _(R31) -#define FPRDEF(_) \ - _(F0) _(F1) _(F2) _(F3) _(F4) _(F5) _(F6) _(F7) \ - _(F8) _(F9) _(F10) _(F11) _(F12) _(F13) _(F14) _(F15) \ - _(F16) _(F17) _(F18) _(F19) _(F20) _(F21) _(F22) _(F23) \ - _(F24) _(F25) _(F26) _(F27) _(F28) _(F29) _(F30) _(F31) -#define VRIDDEF(_) - -#define RIDENUM(name) RID_##name, - -enum { - GPRDEF(RIDENUM) /* General-purpose registers (GPRs). */ - FPRDEF(RIDENUM) /* Floating-point registers (FPRs). */ - RID_MAX, - RID_TMP = RID_R0, - - /* Calling conventions. */ - RID_RET = RID_R3, - RID_RETHI = RID_R3, - RID_RETLO = RID_R4, - RID_FPRET = RID_F1, - - /* These definitions must match with the *.dasc file(s): */ - RID_BASE = RID_R14, /* Interpreter BASE. */ - RID_LPC = RID_R16, /* Interpreter PC. */ - RID_DISPATCH = RID_R17, /* Interpreter DISPATCH table. */ - RID_LREG = RID_R18, /* Interpreter L. */ - RID_JGL = RID_R31, /* On-trace: global_State + 32768. */ - - /* Register ranges [min, max) and number of registers. */ - RID_MIN_GPR = RID_R0, - RID_MAX_GPR = RID_R31+1, - RID_MIN_FPR = RID_F0, - RID_MAX_FPR = RID_F31+1, - RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR, - RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR -}; - -#define RID_NUM_KREF RID_NUM_GPR -#define RID_MIN_KREF RID_R0 - -/* -- Register sets ------------------------------------------------------- */ - -/* Make use of all registers, except TMP, SP, SYS1, SYS2 and JGL. */ -#define RSET_FIXED \ - (RID2RSET(RID_TMP)|RID2RSET(RID_SP)|RID2RSET(RID_SYS1)|\ - RID2RSET(RID_SYS2)|RID2RSET(RID_JGL)) -#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR) - RSET_FIXED) -#define RSET_FPR RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR) -#define RSET_ALL (RSET_GPR|RSET_FPR) -#define RSET_INIT RSET_ALL - -#define RSET_SCRATCH_GPR (RSET_RANGE(RID_R3, RID_R12+1)) -#define RSET_SCRATCH_FPR (RSET_RANGE(RID_F0, RID_F13+1)) -#define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR) -#define REGARG_FIRSTGPR RID_R3 -#define REGARG_LASTGPR RID_R10 -#define REGARG_NUMGPR 8 -#define REGARG_FIRSTFPR RID_F1 -#define REGARG_LASTFPR RID_F8 -#define REGARG_NUMFPR 8 - -/* -- Spill slots --------------------------------------------------------- */ - -/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs. -** -** SPS_FIXED: Available fixed spill slots in interpreter frame. -** This definition must match with the *.dasc file(s). -** -** SPS_FIRST: First spill slot for general use. -** [sp+12] tmplo word \ -** [sp+ 8] tmphi word / tmp dword, parameter area for callee -** [sp+ 4] tmpw, LR of callee -** [sp+ 0] stack chain -*/ -#define SPS_FIXED 7 -#define SPS_FIRST 4 - -/* Stack offsets for temporary slots. Used for FP<->int conversions etc. */ -#define SPOFS_TMPW 4 -#define SPOFS_TMP 8 -#define SPOFS_TMPHI 8 -#define SPOFS_TMPLO 12 - -#define sps_scale(slot) (4 * (int32_t)(slot)) -#define sps_align(slot) (((slot) - SPS_FIXED + 3) & ~3) - -/* -- Exit state ---------------------------------------------------------- */ - -/* This definition must match with the *.dasc file(s). */ -typedef struct { - lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */ - int32_t gpr[RID_NUM_GPR]; /* General-purpose registers. */ - int32_t spill[256]; /* Spill slots. */ -} ExitState; - -/* Highest exit + 1 indicates stack check. */ -#define EXITSTATE_CHECKEXIT 1 - -/* Return the address of a per-trace exit stub. */ -static LJ_AINLINE uint32_t *exitstub_trace_addr_(uint32_t *p, uint32_t exitno) -{ - while (*p == 0x60000000) p++; /* Skip PPCI_NOP. */ - return p + 3 + exitno; -} -/* Avoid dependence on lj_jit.h if only including lj_target.h. */ -#define exitstub_trace_addr(T, exitno) \ - exitstub_trace_addr_((MCode *)((char *)(T)->mcode + (T)->szmcode), (exitno)) - -/* -- Instructions -------------------------------------------------------- */ - -/* Instruction fields. */ -#define PPCF_CC(cc) ((((cc) & 3) << 16) | (((cc) & 4) << 22)) -#define PPCF_T(r) ((r) << 21) -#define PPCF_A(r) ((r) << 16) -#define PPCF_B(r) ((r) << 11) -#define PPCF_C(r) ((r) << 6) -#define PPCF_MB(n) ((n) << 6) -#define PPCF_ME(n) ((n) << 1) -#define PPCF_Y 0x00200000 -#define PPCF_DOT 0x00000001 - -typedef enum PPCIns { - /* Integer instructions. */ - PPCI_MR = 0x7c000378, - PPCI_NOP = 0x60000000, - - PPCI_LI = 0x38000000, - PPCI_LIS = 0x3c000000, - - PPCI_ADD = 0x7c000214, - PPCI_ADDC = 0x7c000014, - PPCI_ADDO = 0x7c000614, - PPCI_ADDE = 0x7c000114, - PPCI_ADDZE = 0x7c000194, - PPCI_ADDME = 0x7c0001d4, - PPCI_ADDI = 0x38000000, - PPCI_ADDIS = 0x3c000000, - PPCI_ADDIC = 0x30000000, - PPCI_ADDICDOT = 0x34000000, - - PPCI_SUBF = 0x7c000050, - PPCI_SUBFC = 0x7c000010, - PPCI_SUBFO = 0x7c000450, - PPCI_SUBFE = 0x7c000110, - PPCI_SUBFZE = 0x7c000190, - PPCI_SUBFME = 0x7c0001d0, - PPCI_SUBFIC = 0x20000000, - - PPCI_NEG = 0x7c0000d0, - - PPCI_AND = 0x7c000038, - PPCI_ANDC = 0x7c000078, - PPCI_NAND = 0x7c0003b8, - PPCI_ANDIDOT = 0x70000000, - PPCI_ANDISDOT = 0x74000000, - - PPCI_OR = 0x7c000378, - PPCI_NOR = 0x7c0000f8, - PPCI_ORI = 0x60000000, - PPCI_ORIS = 0x64000000, - - PPCI_XOR = 0x7c000278, - PPCI_EQV = 0x7c000238, - PPCI_XORI = 0x68000000, - PPCI_XORIS = 0x6c000000, - - PPCI_CMPW = 0x7c000000, - PPCI_CMPLW = 0x7c000040, - PPCI_CMPWI = 0x2c000000, - PPCI_CMPLWI = 0x28000000, - - PPCI_MULLW = 0x7c0001d6, - PPCI_MULLI = 0x1c000000, - PPCI_MULLWO = 0x7c0005d6, - - PPCI_EXTSB = 0x7c000774, - PPCI_EXTSH = 0x7c000734, - - PPCI_SLW = 0x7c000030, - PPCI_SRW = 0x7c000430, - PPCI_SRAW = 0x7c000630, - PPCI_SRAWI = 0x7c000670, - - PPCI_RLWNM = 0x5c000000, - PPCI_RLWINM = 0x54000000, - PPCI_RLWIMI = 0x50000000, - - PPCI_B = 0x48000000, - PPCI_BL = 0x48000001, - PPCI_BC = 0x40800000, - PPCI_BCL = 0x40800001, - PPCI_BCTR = 0x4e800420, - PPCI_BCTRL = 0x4e800421, - - PPCI_CRANDC = 0x4c000102, - PPCI_CRXOR = 0x4c000182, - PPCI_CRAND = 0x4c000202, - PPCI_CREQV = 0x4c000242, - PPCI_CRORC = 0x4c000342, - PPCI_CROR = 0x4c000382, - - PPCI_MFLR = 0x7c0802a6, - PPCI_MTCTR = 0x7c0903a6, - - PPCI_MCRXR = 0x7c000400, - - /* Load/store instructions. */ - PPCI_LWZ = 0x80000000, - PPCI_LBZ = 0x88000000, - PPCI_STW = 0x90000000, - PPCI_STB = 0x98000000, - PPCI_LHZ = 0xa0000000, - PPCI_LHA = 0xa8000000, - PPCI_STH = 0xb0000000, - - PPCI_STWU = 0x94000000, - - PPCI_LFS = 0xc0000000, - PPCI_LFD = 0xc8000000, - PPCI_STFS = 0xd0000000, - PPCI_STFD = 0xd8000000, - - PPCI_LWZX = 0x7c00002e, - PPCI_LBZX = 0x7c0000ae, - PPCI_STWX = 0x7c00012e, - PPCI_STBX = 0x7c0001ae, - PPCI_LHZX = 0x7c00022e, - PPCI_LHAX = 0x7c0002ae, - PPCI_STHX = 0x7c00032e, - - PPCI_LWBRX = 0x7c00042c, - PPCI_STWBRX = 0x7c00052c, - - PPCI_LFSX = 0x7c00042e, - PPCI_LFDX = 0x7c0004ae, - PPCI_STFSX = 0x7c00052e, - PPCI_STFDX = 0x7c0005ae, - - /* FP instructions. */ - PPCI_FMR = 0xfc000090, - PPCI_FNEG = 0xfc000050, - PPCI_FABS = 0xfc000210, - - PPCI_FRSP = 0xfc000018, - PPCI_FCTIWZ = 0xfc00001e, - - PPCI_FADD = 0xfc00002a, - PPCI_FSUB = 0xfc000028, - PPCI_FMUL = 0xfc000032, - PPCI_FDIV = 0xfc000024, - PPCI_FSQRT = 0xfc00002c, - - PPCI_FMADD = 0xfc00003a, - PPCI_FMSUB = 0xfc000038, - PPCI_FNMSUB = 0xfc00003c, - - PPCI_FCMPU = 0xfc000000, - PPCI_FSEL = 0xfc00002e, -} PPCIns; - -typedef enum PPCCC { - CC_GE, CC_LE, CC_NE, CC_NS, CC_LT, CC_GT, CC_EQ, CC_SO -} PPCCC; - -#endif diff --git a/deps/luajit/src/lj_target_x86.h b/deps/luajit/src/lj_target_x86.h deleted file mode 100644 index d12a1b8..0000000 --- a/deps/luajit/src/lj_target_x86.h +++ /dev/null @@ -1,342 +0,0 @@ -/* -** Definitions for x86 and x64 CPUs. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TARGET_X86_H -#define _LJ_TARGET_X86_H - -/* -- Registers IDs ------------------------------------------------------- */ - -#if LJ_64 -#define GPRDEF(_) \ - _(EAX) _(ECX) _(EDX) _(EBX) _(ESP) _(EBP) _(ESI) _(EDI) \ - _(R8D) _(R9D) _(R10D) _(R11D) _(R12D) _(R13D) _(R14D) _(R15D) -#define FPRDEF(_) \ - _(XMM0) _(XMM1) _(XMM2) _(XMM3) _(XMM4) _(XMM5) _(XMM6) _(XMM7) \ - _(XMM8) _(XMM9) _(XMM10) _(XMM11) _(XMM12) _(XMM13) _(XMM14) _(XMM15) -#else -#define GPRDEF(_) \ - _(EAX) _(ECX) _(EDX) _(EBX) _(ESP) _(EBP) _(ESI) _(EDI) -#define FPRDEF(_) \ - _(XMM0) _(XMM1) _(XMM2) _(XMM3) _(XMM4) _(XMM5) _(XMM6) _(XMM7) -#endif -#define VRIDDEF(_) \ - _(MRM) - -#define RIDENUM(name) RID_##name, - -enum { - GPRDEF(RIDENUM) /* General-purpose registers (GPRs). */ - FPRDEF(RIDENUM) /* Floating-point registers (FPRs). */ - RID_MAX, - RID_MRM = RID_MAX, /* Pseudo-id for ModRM operand. */ - - /* Calling conventions. */ - RID_RET = RID_EAX, -#if LJ_64 - RID_FPRET = RID_XMM0, -#else - RID_RETLO = RID_EAX, - RID_RETHI = RID_EDX, -#endif - - /* These definitions must match with the *.dasc file(s): */ - RID_BASE = RID_EDX, /* Interpreter BASE. */ -#if LJ_64 && !LJ_ABI_WIN - RID_LPC = RID_EBX, /* Interpreter PC. */ - RID_DISPATCH = RID_R14D, /* Interpreter DISPATCH table. */ -#else - RID_LPC = RID_ESI, /* Interpreter PC. */ - RID_DISPATCH = RID_EBX, /* Interpreter DISPATCH table. */ -#endif - - /* Register ranges [min, max) and number of registers. */ - RID_MIN_GPR = RID_EAX, - RID_MIN_FPR = RID_XMM0, - RID_MAX_GPR = RID_MIN_FPR, - RID_MAX_FPR = RID_MAX, - RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR, - RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR, -}; - -/* -- Register sets ------------------------------------------------------- */ - -/* Make use of all registers, except the stack pointer. */ -#define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR)-RID2RSET(RID_ESP)) -#define RSET_FPR (RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR)) -#define RSET_ALL (RSET_GPR|RSET_FPR) -#define RSET_INIT RSET_ALL - -#if LJ_64 -/* Note: this requires the use of FORCE_REX! */ -#define RSET_GPR8 RSET_GPR -#else -#define RSET_GPR8 (RSET_RANGE(RID_EAX, RID_EBX+1)) -#endif - -/* ABI-specific register sets. */ -#define RSET_ACD (RID2RSET(RID_EAX)|RID2RSET(RID_ECX)|RID2RSET(RID_EDX)) -#if LJ_64 -#if LJ_ABI_WIN -/* Windows x64 ABI. */ -#define RSET_SCRATCH \ - (RSET_ACD|RSET_RANGE(RID_R8D, RID_R11D+1)|RSET_RANGE(RID_XMM0, RID_XMM5+1)) -#define REGARG_GPRS \ - (RID_ECX|((RID_EDX|((RID_R8D|(RID_R9D<<5))<<5))<<5)) -#define REGARG_NUMGPR 4 -#define REGARG_NUMFPR 4 -#define REGARG_FIRSTFPR RID_XMM0 -#define REGARG_LASTFPR RID_XMM3 -#define STACKARG_OFS (4*8) -#else -/* The rest of the civilized x64 world has a common ABI. */ -#define RSET_SCRATCH \ - (RSET_ACD|RSET_RANGE(RID_ESI, RID_R11D+1)|RSET_FPR) -#define REGARG_GPRS \ - (RID_EDI|((RID_ESI|((RID_EDX|((RID_ECX|((RID_R8D|(RID_R9D \ - <<5))<<5))<<5))<<5))<<5)) -#define REGARG_NUMGPR 6 -#define REGARG_NUMFPR 8 -#define REGARG_FIRSTFPR RID_XMM0 -#define REGARG_LASTFPR RID_XMM7 -#define STACKARG_OFS 0 -#endif -#else -/* Common x86 ABI. */ -#define RSET_SCRATCH (RSET_ACD|RSET_FPR) -#define REGARG_GPRS (RID_ECX|(RID_EDX<<5)) /* Fastcall only. */ -#define REGARG_NUMGPR 2 /* Fastcall only. */ -#define REGARG_NUMFPR 0 -#define STACKARG_OFS 0 -#endif - -#if LJ_64 -/* Prefer the low 8 regs of each type to reduce REX prefixes. */ -#undef rset_picktop -#define rset_picktop(rs) (lj_fls(lj_bswap(rs)) ^ 0x18) -#endif - -/* -- Spill slots --------------------------------------------------------- */ - -/* Spill slots are 32 bit wide. An even/odd pair is used for FPRs. -** -** SPS_FIXED: Available fixed spill slots in interpreter frame. -** This definition must match with the *.dasc file(s). -** -** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots. -*/ -#if LJ_64 -#if LJ_ABI_WIN -#define SPS_FIXED (4*2) -#define SPS_FIRST (4*2) /* Don't use callee register save area. */ -#else -#define SPS_FIXED 4 -#define SPS_FIRST 2 -#endif -#else -#define SPS_FIXED 6 -#define SPS_FIRST 2 -#endif - -#define SPOFS_TMP 0 - -#define sps_scale(slot) (4 * (int32_t)(slot)) -#define sps_align(slot) (((slot) - SPS_FIXED + 3) & ~3) - -/* -- Exit state ---------------------------------------------------------- */ - -/* This definition must match with the *.dasc file(s). */ -typedef struct { - lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */ - intptr_t gpr[RID_NUM_GPR]; /* General-purpose registers. */ - int32_t spill[256]; /* Spill slots. */ -} ExitState; - -/* Limited by the range of a short fwd jump (127): (2+2)*(32-1)-2 = 122. */ -#define EXITSTUB_SPACING (2+2) -#define EXITSTUBS_PER_GROUP 32 - -/* -- x86 ModRM operand encoding ------------------------------------------ */ - -typedef enum { - XM_OFS0 = 0x00, XM_OFS8 = 0x40, XM_OFS32 = 0x80, XM_REG = 0xc0, - XM_SCALE1 = 0x00, XM_SCALE2 = 0x40, XM_SCALE4 = 0x80, XM_SCALE8 = 0xc0, - XM_MASK = 0xc0 -} x86Mode; - -/* Structure to hold variable ModRM operand. */ -typedef struct { - int32_t ofs; /* Offset. */ - uint8_t base; /* Base register or RID_NONE. */ - uint8_t idx; /* Index register or RID_NONE. */ - uint8_t scale; /* Index scale (XM_SCALE1 .. XM_SCALE8). */ -} x86ModRM; - -/* -- Opcodes ------------------------------------------------------------- */ - -/* Macros to construct variable-length x86 opcodes. -(len+1) is in LSB. */ -#define XO_(o) ((uint32_t)(0x0000fe + (0x##o<<24))) -#define XO_FPU(a,b) ((uint32_t)(0x00fd + (0x##a<<16)+(0x##b<<24))) -#define XO_0f(o) ((uint32_t)(0x0f00fd + (0x##o<<24))) -#define XO_66(o) ((uint32_t)(0x6600fd + (0x##o<<24))) -#define XO_660f(o) ((uint32_t)(0x0f66fc + (0x##o<<24))) -#define XO_f20f(o) ((uint32_t)(0x0ff2fc + (0x##o<<24))) -#define XO_f30f(o) ((uint32_t)(0x0ff3fc + (0x##o<<24))) - -/* This list of x86 opcodes is not intended to be complete. Opcodes are only -** included when needed. Take a look at DynASM or jit.dis_x86 to see the -** whole mess. -*/ -typedef enum { - /* Fixed length opcodes. XI_* prefix. */ - XI_NOP = 0x90, - XI_XCHGa = 0x90, - XI_CALL = 0xe8, - XI_JMP = 0xe9, - XI_JMPs = 0xeb, - XI_PUSH = 0x50, /* Really 50+r. */ - XI_JCCs = 0x70, /* Really 7x. */ - XI_JCCn = 0x80, /* Really 0f8x. */ - XI_LEA = 0x8d, - XI_MOVrib = 0xb0, /* Really b0+r. */ - XI_MOVri = 0xb8, /* Really b8+r. */ - XI_ARITHib = 0x80, - XI_ARITHi = 0x81, - XI_ARITHi8 = 0x83, - XI_PUSHi8 = 0x6a, - XI_TESTb = 0x84, - XI_TEST = 0x85, - XI_MOVmi = 0xc7, - XI_GROUP5 = 0xff, - - /* Note: little-endian byte-order! */ - XI_FLDZ = 0xeed9, - XI_FLD1 = 0xe8d9, - XI_FLDLG2 = 0xecd9, - XI_FLDLN2 = 0xedd9, - XI_FDUP = 0xc0d9, /* Really fld st0. */ - XI_FPOP = 0xd8dd, /* Really fstp st0. */ - XI_FPOP1 = 0xd9dd, /* Really fstp st1. */ - XI_FRNDINT = 0xfcd9, - XI_FSIN = 0xfed9, - XI_FCOS = 0xffd9, - XI_FPTAN = 0xf2d9, - XI_FPATAN = 0xf3d9, - XI_FSCALE = 0xfdd9, - XI_FYL2X = 0xf1d9, - - /* Variable-length opcodes. XO_* prefix. */ - XO_MOV = XO_(8b), - XO_MOVto = XO_(89), - XO_MOVtow = XO_66(89), - XO_MOVtob = XO_(88), - XO_MOVmi = XO_(c7), - XO_MOVmib = XO_(c6), - XO_LEA = XO_(8d), - XO_ARITHib = XO_(80), - XO_ARITHi = XO_(81), - XO_ARITHi8 = XO_(83), - XO_ARITHiw8 = XO_66(83), - XO_SHIFTi = XO_(c1), - XO_SHIFT1 = XO_(d1), - XO_SHIFTcl = XO_(d3), - XO_IMUL = XO_0f(af), - XO_IMULi = XO_(69), - XO_IMULi8 = XO_(6b), - XO_CMP = XO_(3b), - XO_TESTb = XO_(84), - XO_TEST = XO_(85), - XO_GROUP3b = XO_(f6), - XO_GROUP3 = XO_(f7), - XO_GROUP5b = XO_(fe), - XO_GROUP5 = XO_(ff), - XO_MOVZXb = XO_0f(b6), - XO_MOVZXw = XO_0f(b7), - XO_MOVSXb = XO_0f(be), - XO_MOVSXw = XO_0f(bf), - XO_MOVSXd = XO_(63), - XO_BSWAP = XO_0f(c8), - XO_CMOV = XO_0f(40), - - XO_MOVSD = XO_f20f(10), - XO_MOVSDto = XO_f20f(11), - XO_MOVSS = XO_f30f(10), - XO_MOVSSto = XO_f30f(11), - XO_MOVLPD = XO_660f(12), - XO_MOVAPS = XO_0f(28), - XO_XORPS = XO_0f(57), - XO_ANDPS = XO_0f(54), - XO_ADDSD = XO_f20f(58), - XO_SUBSD = XO_f20f(5c), - XO_MULSD = XO_f20f(59), - XO_DIVSD = XO_f20f(5e), - XO_SQRTSD = XO_f20f(51), - XO_MINSD = XO_f20f(5d), - XO_MAXSD = XO_f20f(5f), - XO_ROUNDSD = 0x0b3a0ffc, /* Really 66 0f 3a 0b. See asm_fpmath. */ - XO_UCOMISD = XO_660f(2e), - XO_CVTSI2SD = XO_f20f(2a), - XO_CVTSD2SI = XO_f20f(2d), - XO_CVTTSD2SI= XO_f20f(2c), - XO_CVTSI2SS = XO_f30f(2a), - XO_CVTSS2SI = XO_f30f(2d), - XO_CVTTSS2SI= XO_f30f(2c), - XO_CVTSS2SD = XO_f30f(5a), - XO_CVTSD2SS = XO_f20f(5a), - XO_ADDSS = XO_f30f(58), - XO_MOVD = XO_660f(6e), - XO_MOVDto = XO_660f(7e), - - XO_FLDd = XO_(d9), XOg_FLDd = 0, - XO_FLDq = XO_(dd), XOg_FLDq = 0, - XO_FILDd = XO_(db), XOg_FILDd = 0, - XO_FILDq = XO_(df), XOg_FILDq = 5, - XO_FSTPd = XO_(d9), XOg_FSTPd = 3, - XO_FSTPq = XO_(dd), XOg_FSTPq = 3, - XO_FISTPq = XO_(df), XOg_FISTPq = 7, - XO_FISTTPq = XO_(dd), XOg_FISTTPq = 1, - XO_FADDq = XO_(dc), XOg_FADDq = 0, - XO_FLDCW = XO_(d9), XOg_FLDCW = 5, - XO_FNSTCW = XO_(d9), XOg_FNSTCW = 7 -} x86Op; - -/* x86 opcode groups. */ -typedef uint32_t x86Group; - -#define XG_(i8, i, g) ((x86Group)(((i8) << 16) + ((i) << 8) + (g))) -#define XG_ARITHi(g) XG_(XI_ARITHi8, XI_ARITHi, g) -#define XG_TOXOi(xg) ((x86Op)(0x000000fe + (((xg)<<16) & 0xff000000))) -#define XG_TOXOi8(xg) ((x86Op)(0x000000fe + (((xg)<<8) & 0xff000000))) - -#define XO_ARITH(a) ((x86Op)(0x030000fe + ((a)<<27))) -#define XO_ARITHw(a) ((x86Op)(0x036600fd + ((a)<<27))) - -typedef enum { - XOg_ADD, XOg_OR, XOg_ADC, XOg_SBB, XOg_AND, XOg_SUB, XOg_XOR, XOg_CMP, - XOg_X_IMUL -} x86Arith; - -typedef enum { - XOg_ROL, XOg_ROR, XOg_RCL, XOg_RCR, XOg_SHL, XOg_SHR, XOg_SAL, XOg_SAR -} x86Shift; - -typedef enum { - XOg_TEST, XOg_TEST_, XOg_NOT, XOg_NEG, XOg_MUL, XOg_IMUL, XOg_DIV, XOg_IDIV -} x86Group3; - -typedef enum { - XOg_INC, XOg_DEC, XOg_CALL, XOg_CALLfar, XOg_JMP, XOg_JMPfar, XOg_PUSH -} x86Group5; - -/* x86 condition codes. */ -typedef enum { - CC_O, CC_NO, CC_B, CC_NB, CC_E, CC_NE, CC_BE, CC_NBE, - CC_S, CC_NS, CC_P, CC_NP, CC_L, CC_NL, CC_LE, CC_NLE, - CC_C = CC_B, CC_NAE = CC_C, CC_NC = CC_NB, CC_AE = CC_NB, - CC_Z = CC_E, CC_NZ = CC_NE, CC_NA = CC_BE, CC_A = CC_NBE, - CC_PE = CC_P, CC_PO = CC_NP, CC_NGE = CC_L, CC_GE = CC_NL, - CC_NG = CC_LE, CC_G = CC_NLE -} x86CC; - -#endif diff --git a/deps/luajit/src/lj_trace.c b/deps/luajit/src/lj_trace.c deleted file mode 100644 index e51ec54..0000000 --- a/deps/luajit/src/lj_trace.c +++ /dev/null @@ -1,816 +0,0 @@ -/* -** Trace management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_trace_c -#define LUA_CORE - -#include "lj_obj.h" - -#if LJ_HASJIT - -#include "lj_gc.h" -#include "lj_err.h" -#include "lj_debug.h" -#include "lj_str.h" -#include "lj_frame.h" -#include "lj_state.h" -#include "lj_bc.h" -#include "lj_ir.h" -#include "lj_jit.h" -#include "lj_iropt.h" -#include "lj_mcode.h" -#include "lj_trace.h" -#include "lj_snap.h" -#include "lj_gdbjit.h" -#include "lj_record.h" -#include "lj_asm.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_vmevent.h" -#include "lj_target.h" - -/* -- Error handling ------------------------------------------------------ */ - -/* Synchronous abort with error message. */ -void lj_trace_err(jit_State *J, TraceError e) -{ - setnilV(&J->errinfo); /* No error info. */ - setintV(J->L->top++, (int32_t)e); - lj_err_throw(J->L, LUA_ERRRUN); -} - -/* Synchronous abort with error message and error info. */ -void lj_trace_err_info(jit_State *J, TraceError e) -{ - setintV(J->L->top++, (int32_t)e); - lj_err_throw(J->L, LUA_ERRRUN); -} - -/* -- Trace management ---------------------------------------------------- */ - -/* The current trace is first assembled in J->cur. The variable length -** arrays point to shared, growable buffers (J->irbuf etc.). When trace -** recording ends successfully, the current trace and its data structures -** are copied to a new (compact) GCtrace object. -*/ - -/* Find a free trace number. */ -static TraceNo trace_findfree(jit_State *J) -{ - MSize osz, lim; - if (J->freetrace == 0) - J->freetrace = 1; - for (; J->freetrace < J->sizetrace; J->freetrace++) - if (traceref(J, J->freetrace) == NULL) - return J->freetrace++; - /* Need to grow trace array. */ - lim = (MSize)J->param[JIT_P_maxtrace] + 1; - if (lim < 2) lim = 2; else if (lim > 65535) lim = 65535; - osz = J->sizetrace; - if (osz >= lim) - return 0; /* Too many traces. */ - lj_mem_growvec(J->L, J->trace, J->sizetrace, lim, GCRef); - for (; osz < J->sizetrace; osz++) - setgcrefnull(J->trace[osz]); - return J->freetrace; -} - -#define TRACE_APPENDVEC(field, szfield, tp) \ - T->field = (tp *)p; \ - memcpy(p, J->cur.field, J->cur.szfield*sizeof(tp)); \ - p += J->cur.szfield*sizeof(tp); - -#ifdef LUAJIT_USE_PERFTOOLS -/* -** Create symbol table of JIT-compiled code. For use with Linux perf tools. -** Example usage: -** perf record -f -e cycles luajit test.lua -** perf report -s symbol -** rm perf.data /tmp/perf-*.map -*/ -#include -#include - -static void perftools_addtrace(GCtrace *T) -{ - static FILE *fp; - GCproto *pt = &gcref(T->startpt)->pt; - const BCIns *startpc = mref(T->startpc, const BCIns); - const char *name = proto_chunknamestr(pt); - BCLine lineno; - if (name[0] == '@' || name[0] == '=') - name++; - else - name = "(string)"; - lua_assert(startpc >= proto_bc(pt) && startpc < proto_bc(pt) + pt->sizebc); - lineno = lj_debug_line(pt, proto_bcpos(pt, startpc)); - if (!fp) { - char fname[40]; - sprintf(fname, "/tmp/perf-%d.map", getpid()); - if (!(fp = fopen(fname, "w"))) return; - setlinebuf(fp); - } - fprintf(fp, "%lx %x TRACE_%d::%s:%u\n", - (long)T->mcode, T->szmcode, T->traceno, name, lineno); -} -#endif - -/* Save current trace by copying and compacting it. */ -static void trace_save(jit_State *J) -{ - size_t sztr = ((sizeof(GCtrace)+7)&~7); - size_t szins = (J->cur.nins-J->cur.nk)*sizeof(IRIns); - size_t sz = sztr + szins + - J->cur.nsnap*sizeof(SnapShot) + - J->cur.nsnapmap*sizeof(SnapEntry); - GCtrace *T = lj_mem_newt(J->L, (MSize)sz, GCtrace); - char *p = (char *)T + sztr; - memcpy(T, &J->cur, sizeof(GCtrace)); - setgcrefr(T->nextgc, J2G(J)->gc.root); - setgcrefp(J2G(J)->gc.root, T); - newwhite(J2G(J), T); - T->gct = ~LJ_TTRACE; - T->ir = (IRIns *)p - J->cur.nk; - memcpy(p, J->cur.ir+J->cur.nk, szins); - p += szins; - TRACE_APPENDVEC(snap, nsnap, SnapShot) - TRACE_APPENDVEC(snapmap, nsnapmap, SnapEntry) - J->cur.traceno = 0; - setgcrefp(J->trace[T->traceno], T); - lj_gc_barriertrace(J2G(J), T->traceno); - lj_gdbjit_addtrace(J, T); -#ifdef LUAJIT_USE_PERFTOOLS - perftools_addtrace(T); -#endif -} - -void LJ_FASTCALL lj_trace_free(global_State *g, GCtrace *T) -{ - jit_State *J = G2J(g); - if (T->traceno) { - lj_gdbjit_deltrace(J, T); - if (T->traceno < J->freetrace) - J->freetrace = T->traceno; - setgcrefnull(J->trace[T->traceno]); - } - lj_mem_free(g, T, - ((sizeof(GCtrace)+7)&~7) + (T->nins-T->nk)*sizeof(IRIns) + - T->nsnap*sizeof(SnapShot) + T->nsnapmap*sizeof(SnapEntry)); -} - -/* Re-enable compiling a prototype by unpatching any modified bytecode. */ -void lj_trace_reenableproto(GCproto *pt) -{ - if ((pt->flags & PROTO_ILOOP)) { - BCIns *bc = proto_bc(pt); - BCPos i, sizebc = pt->sizebc;; - pt->flags &= ~PROTO_ILOOP; - if (bc_op(bc[0]) == BC_IFUNCF) - setbc_op(&bc[0], BC_FUNCF); - for (i = 1; i < sizebc; i++) { - BCOp op = bc_op(bc[i]); - if (op == BC_IFORL || op == BC_IITERL || op == BC_ILOOP) - setbc_op(&bc[i], (int)op+(int)BC_LOOP-(int)BC_ILOOP); - } - } -} - -/* Unpatch the bytecode modified by a root trace. */ -static void trace_unpatch(jit_State *J, GCtrace *T) -{ - BCOp op = bc_op(T->startins); - BCIns *pc = mref(T->startpc, BCIns); - UNUSED(J); - if (op == BC_JMP) - return; /* No need to unpatch branches in parent traces (yet). */ - switch (bc_op(*pc)) { - case BC_JFORL: - lua_assert(traceref(J, bc_d(*pc)) == T); - *pc = T->startins; - pc += bc_j(T->startins); - lua_assert(bc_op(*pc) == BC_JFORI); - setbc_op(pc, BC_FORI); - break; - case BC_JITERL: - case BC_JLOOP: - lua_assert(op == BC_ITERL || op == BC_LOOP || bc_isret(op)); - *pc = T->startins; - break; - case BC_JMP: - lua_assert(op == BC_ITERL); - pc += bc_j(*pc)+2; - if (bc_op(*pc) == BC_JITERL) { - lua_assert(traceref(J, bc_d(*pc)) == T); - *pc = T->startins; - } - break; - case BC_JFUNCF: - lua_assert(op == BC_FUNCF); - *pc = T->startins; - break; - default: /* Already unpatched. */ - break; - } -} - -/* Flush a root trace. */ -static void trace_flushroot(jit_State *J, GCtrace *T) -{ - GCproto *pt = &gcref(T->startpt)->pt; - lua_assert(T->root == 0 && pt != NULL); - /* First unpatch any modified bytecode. */ - trace_unpatch(J, T); - /* Unlink root trace from chain anchored in prototype. */ - if (pt->trace == T->traceno) { /* Trace is first in chain. Easy. */ - pt->trace = T->nextroot; - } else if (pt->trace) { /* Otherwise search in chain of root traces. */ - GCtrace *T2 = traceref(J, pt->trace); - if (T2) { - for (; T2->nextroot; T2 = traceref(J, T2->nextroot)) - if (T2->nextroot == T->traceno) { - T2->nextroot = T->nextroot; /* Unlink from chain. */ - break; - } - } - } -} - -/* Flush a trace. Only root traces are considered. */ -void lj_trace_flush(jit_State *J, TraceNo traceno) -{ - if (traceno > 0 && traceno < J->sizetrace) { - GCtrace *T = traceref(J, traceno); - if (T && T->root == 0) - trace_flushroot(J, T); - } -} - -/* Flush all traces associated with a prototype. */ -void lj_trace_flushproto(global_State *g, GCproto *pt) -{ - while (pt->trace != 0) - trace_flushroot(G2J(g), traceref(G2J(g), pt->trace)); -} - -/* Flush all traces. */ -int lj_trace_flushall(lua_State *L) -{ - jit_State *J = L2J(L); - ptrdiff_t i; - if ((J2G(J)->hookmask & HOOK_GC)) - return 1; - for (i = (ptrdiff_t)J->sizetrace-1; i > 0; i--) { - GCtrace *T = traceref(J, i); - if (T) { - if (T->root == 0) - trace_flushroot(J, T); - lj_gdbjit_deltrace(J, T); - T->traceno = 0; - setgcrefnull(J->trace[i]); - } - } - J->cur.traceno = 0; - J->freetrace = 0; - /* Clear penalty cache. */ - memset(J->penalty, 0, sizeof(J->penalty)); - /* Free the whole machine code and invalidate all exit stub groups. */ - lj_mcode_free(J); - memset(J->exitstubgroup, 0, sizeof(J->exitstubgroup)); - lj_vmevent_send(L, TRACE, - setstrV(L, L->top++, lj_str_newlit(L, "flush")); - ); - return 0; -} - -/* Initialize JIT compiler state. */ -void lj_trace_initstate(global_State *g) -{ - jit_State *J = G2J(g); - TValue *tv; - /* Initialize SIMD constants. */ - tv = LJ_KSIMD(J, LJ_KSIMD_ABS); - tv[0].u64 = U64x(7fffffff,ffffffff); - tv[1].u64 = U64x(7fffffff,ffffffff); - tv = LJ_KSIMD(J, LJ_KSIMD_NEG); - tv[0].u64 = U64x(80000000,00000000); - tv[1].u64 = U64x(80000000,00000000); -} - -/* Free everything associated with the JIT compiler state. */ -void lj_trace_freestate(global_State *g) -{ - jit_State *J = G2J(g); -#ifdef LUA_USE_ASSERT - { /* This assumes all traces have already been freed. */ - ptrdiff_t i; - for (i = 1; i < (ptrdiff_t)J->sizetrace; i++) - lua_assert(i == (ptrdiff_t)J->cur.traceno || traceref(J, i) == NULL); - } -#endif - lj_mcode_free(J); - lj_ir_k64_freeall(J); - lj_mem_freevec(g, J->snapmapbuf, J->sizesnapmap, SnapEntry); - lj_mem_freevec(g, J->snapbuf, J->sizesnap, SnapShot); - lj_mem_freevec(g, J->irbuf + J->irbotlim, J->irtoplim - J->irbotlim, IRIns); - lj_mem_freevec(g, J->trace, J->sizetrace, GCRef); -} - -/* -- Penalties and blacklisting ------------------------------------------ */ - -/* Blacklist a bytecode instruction. */ -static void blacklist_pc(GCproto *pt, BCIns *pc) -{ - setbc_op(pc, (int)bc_op(*pc)+(int)BC_ILOOP-(int)BC_LOOP); - pt->flags |= PROTO_ILOOP; -} - -/* Penalize a bytecode instruction. */ -static void penalty_pc(jit_State *J, GCproto *pt, BCIns *pc, TraceError e) -{ - uint32_t i, val = PENALTY_MIN; - for (i = 0; i < PENALTY_SLOTS; i++) - if (mref(J->penalty[i].pc, const BCIns) == pc) { /* Cache slot found? */ - /* First try to bump its hotcount several times. */ - val = ((uint32_t)J->penalty[i].val << 1) + - LJ_PRNG_BITS(J, PENALTY_RNDBITS); - if (val > PENALTY_MAX) { - blacklist_pc(pt, pc); /* Blacklist it, if that didn't help. */ - return; - } - goto setpenalty; - } - /* Assign a new penalty cache slot. */ - i = J->penaltyslot; - J->penaltyslot = (J->penaltyslot + 1) & (PENALTY_SLOTS-1); - setmref(J->penalty[i].pc, pc); -setpenalty: - J->penalty[i].val = (uint16_t)val; - J->penalty[i].reason = e; - hotcount_set(J2GG(J), pc+1, val); -} - -/* -- Trace compiler state machine ---------------------------------------- */ - -/* Start tracing. */ -static void trace_start(jit_State *J) -{ - lua_State *L; - TraceNo traceno; - - if ((J->pt->flags & PROTO_NOJIT)) { /* JIT disabled for this proto? */ - if (J->parent == 0) { - /* Lazy bytecode patching to disable hotcount events. */ - lua_assert(bc_op(*J->pc) == BC_FORL || bc_op(*J->pc) == BC_ITERL || - bc_op(*J->pc) == BC_LOOP || bc_op(*J->pc) == BC_FUNCF); - setbc_op(J->pc, (int)bc_op(*J->pc)+(int)BC_ILOOP-(int)BC_LOOP); - J->pt->flags |= PROTO_ILOOP; - } - J->state = LJ_TRACE_IDLE; /* Silently ignored. */ - return; - } - - /* Get a new trace number. */ - traceno = trace_findfree(J); - if (LJ_UNLIKELY(traceno == 0)) { /* No free trace? */ - lua_assert((J2G(J)->hookmask & HOOK_GC) == 0); - lj_trace_flushall(J->L); - J->state = LJ_TRACE_IDLE; /* Silently ignored. */ - return; - } - setgcrefp(J->trace[traceno], &J->cur); - - /* Setup enough of the current trace to be able to send the vmevent. */ - memset(&J->cur, 0, sizeof(GCtrace)); - J->cur.traceno = traceno; - J->cur.nins = J->cur.nk = REF_BASE; - J->cur.ir = J->irbuf; - J->cur.snap = J->snapbuf; - J->cur.snapmap = J->snapmapbuf; - J->mergesnap = 0; - J->needsnap = 0; - J->bcskip = 0; - J->guardemit.irt = 0; - J->postproc = LJ_POST_NONE; - lj_resetsplit(J); - setgcref(J->cur.startpt, obj2gco(J->pt)); - - L = J->L; - lj_vmevent_send(L, TRACE, - setstrV(L, L->top++, lj_str_newlit(L, "start")); - setintV(L->top++, traceno); - setfuncV(L, L->top++, J->fn); - setintV(L->top++, proto_bcpos(J->pt, J->pc)); - if (J->parent) { - setintV(L->top++, J->parent); - setintV(L->top++, J->exitno); - } - ); - lj_record_setup(J); -} - -/* Stop tracing. */ -static void trace_stop(jit_State *J) -{ - BCIns *pc = mref(J->cur.startpc, BCIns); - BCOp op = bc_op(J->cur.startins); - GCproto *pt = &gcref(J->cur.startpt)->pt; - TraceNo traceno = J->cur.traceno; - lua_State *L; - - switch (op) { - case BC_FORL: - setbc_op(pc+bc_j(J->cur.startins), BC_JFORI); /* Patch FORI, too. */ - /* fallthrough */ - case BC_LOOP: - case BC_ITERL: - case BC_FUNCF: - /* Patch bytecode of starting instruction in root trace. */ - setbc_op(pc, (int)op+(int)BC_JLOOP-(int)BC_LOOP); - setbc_d(pc, traceno); - addroot: - /* Add to root trace chain in prototype. */ - J->cur.nextroot = pt->trace; - pt->trace = (TraceNo1)traceno; - break; - case BC_RET: - case BC_RET0: - case BC_RET1: - *pc = BCINS_AD(BC_JLOOP, J->cur.snap[0].nslots, traceno); - goto addroot; - case BC_JMP: - /* Patch exit branch in parent to side trace entry. */ - lua_assert(J->parent != 0 && J->cur.root != 0); - lj_asm_patchexit(J, traceref(J, J->parent), J->exitno, J->cur.mcode); - /* Avoid compiling a side trace twice (stack resizing uses parent exit). */ - traceref(J, J->parent)->snap[J->exitno].count = SNAPCOUNT_DONE; - /* Add to side trace chain in root trace. */ - { - GCtrace *root = traceref(J, J->cur.root); - root->nchild++; - J->cur.nextside = root->nextside; - root->nextside = (TraceNo1)traceno; - } - break; - default: - lua_assert(0); - break; - } - - /* Commit new mcode only after all patching is done. */ - lj_mcode_commit(J, J->cur.mcode); - J->postproc = LJ_POST_NONE; - trace_save(J); - - L = J->L; - lj_vmevent_send(L, TRACE, - setstrV(L, L->top++, lj_str_newlit(L, "stop")); - setintV(L->top++, traceno); - ); -} - -/* Start a new root trace for down-recursion. */ -static int trace_downrec(jit_State *J) -{ - /* Restart recording at the return instruction. */ - lua_assert(J->pt != NULL); - lua_assert(bc_isret(bc_op(*J->pc))); - if (bc_op(*J->pc) == BC_RETM) - return 0; /* NYI: down-recursion with RETM. */ - J->parent = 0; - J->exitno = 0; - J->state = LJ_TRACE_RECORD; - trace_start(J); - return 1; -} - -/* Abort tracing. */ -static int trace_abort(jit_State *J) -{ - lua_State *L = J->L; - TraceError e = LJ_TRERR_RECERR; - TraceNo traceno; - - J->postproc = LJ_POST_NONE; - lj_mcode_abort(J); - if (tvisnumber(L->top-1)) - e = (TraceError)numberVint(L->top-1); - if (e == LJ_TRERR_MCODELM) { - L->top--; /* Remove error object */ - J->state = LJ_TRACE_ASM; - return 1; /* Retry ASM with new MCode area. */ - } - /* Penalize or blacklist starting bytecode instruction. */ - if (J->parent == 0 && !bc_isret(bc_op(J->cur.startins))) - penalty_pc(J, &gcref(J->cur.startpt)->pt, mref(J->cur.startpc, BCIns), e); - - /* Is there anything to abort? */ - traceno = J->cur.traceno; - if (traceno) { - ptrdiff_t errobj = savestack(L, L->top-1); /* Stack may be resized. */ - J->cur.link = 0; - J->cur.linktype = LJ_TRLINK_NONE; - lj_vmevent_send(L, TRACE, - TValue *frame; - const BCIns *pc; - GCfunc *fn; - setstrV(L, L->top++, lj_str_newlit(L, "abort")); - setintV(L->top++, traceno); - /* Find original Lua function call to generate a better error message. */ - frame = J->L->base-1; - pc = J->pc; - while (!isluafunc(frame_func(frame))) { - pc = (frame_iscont(frame) ? frame_contpc(frame) : frame_pc(frame)) - 1; - frame = frame_prev(frame); - } - fn = frame_func(frame); - setfuncV(L, L->top++, fn); - setintV(L->top++, proto_bcpos(funcproto(fn), pc)); - copyTV(L, L->top++, restorestack(L, errobj)); - copyTV(L, L->top++, &J->errinfo); - ); - /* Drop aborted trace after the vmevent (which may still access it). */ - setgcrefnull(J->trace[traceno]); - if (traceno < J->freetrace) - J->freetrace = traceno; - J->cur.traceno = 0; - } - L->top--; /* Remove error object */ - if (e == LJ_TRERR_DOWNREC) - return trace_downrec(J); - else if (e == LJ_TRERR_MCODEAL) - lj_trace_flushall(L); - return 0; -} - -/* Perform pending re-patch of a bytecode instruction. */ -static LJ_AINLINE void trace_pendpatch(jit_State *J, int force) -{ - if (LJ_UNLIKELY(J->patchpc)) { - if (force || J->bcskip == 0) { - *J->patchpc = J->patchins; - J->patchpc = NULL; - } else { - J->bcskip = 0; - } - } -} - -/* State machine for the trace compiler. Protected callback. */ -static TValue *trace_state(lua_State *L, lua_CFunction dummy, void *ud) -{ - jit_State *J = (jit_State *)ud; - UNUSED(dummy); - do { - retry: - switch (J->state) { - case LJ_TRACE_START: - J->state = LJ_TRACE_RECORD; /* trace_start() may change state. */ - trace_start(J); - lj_dispatch_update(J2G(J)); - break; - - case LJ_TRACE_RECORD: - trace_pendpatch(J, 0); - setvmstate(J2G(J), RECORD); - lj_vmevent_send_(L, RECORD, - /* Save/restore tmptv state for trace recorder. */ - TValue savetv = J2G(J)->tmptv; - TValue savetv2 = J2G(J)->tmptv2; - setintV(L->top++, J->cur.traceno); - setfuncV(L, L->top++, J->fn); - setintV(L->top++, J->pt ? (int32_t)proto_bcpos(J->pt, J->pc) : -1); - setintV(L->top++, J->framedepth); - , - J2G(J)->tmptv = savetv; - J2G(J)->tmptv2 = savetv2; - ); - lj_record_ins(J); - break; - - case LJ_TRACE_END: - trace_pendpatch(J, 1); - J->loopref = 0; - if ((J->flags & JIT_F_OPT_LOOP) && - J->cur.link == J->cur.traceno && J->framedepth + J->retdepth == 0) { - setvmstate(J2G(J), OPT); - lj_opt_dce(J); - if (lj_opt_loop(J)) { /* Loop optimization failed? */ - J->cur.link = 0; - J->cur.linktype = LJ_TRLINK_NONE; - J->loopref = J->cur.nins; - J->state = LJ_TRACE_RECORD; /* Try to continue recording. */ - break; - } - J->loopref = J->chain[IR_LOOP]; /* Needed by assembler. */ - } - lj_opt_split(J); - lj_opt_sink(J); - if (!J->loopref) J->cur.snap[J->cur.nsnap-1].count = SNAPCOUNT_DONE; - J->state = LJ_TRACE_ASM; - break; - - case LJ_TRACE_ASM: - setvmstate(J2G(J), ASM); - lj_asm_trace(J, &J->cur); - trace_stop(J); - setvmstate(J2G(J), INTERP); - J->state = LJ_TRACE_IDLE; - lj_dispatch_update(J2G(J)); - return NULL; - - default: /* Trace aborted asynchronously. */ - setintV(L->top++, (int32_t)LJ_TRERR_RECERR); - /* fallthrough */ - case LJ_TRACE_ERR: - trace_pendpatch(J, 1); - if (trace_abort(J)) - goto retry; - setvmstate(J2G(J), INTERP); - J->state = LJ_TRACE_IDLE; - lj_dispatch_update(J2G(J)); - return NULL; - } - } while (J->state > LJ_TRACE_RECORD); - return NULL; -} - -/* -- Event handling ------------------------------------------------------ */ - -/* A bytecode instruction is about to be executed. Record it. */ -void lj_trace_ins(jit_State *J, const BCIns *pc) -{ - /* Note: J->L must already be set. pc is the true bytecode PC here. */ - J->pc = pc; - J->fn = curr_func(J->L); - J->pt = isluafunc(J->fn) ? funcproto(J->fn) : NULL; - while (lj_vm_cpcall(J->L, NULL, (void *)J, trace_state) != 0) - J->state = LJ_TRACE_ERR; -} - -/* A hotcount triggered. Start recording a root trace. */ -void LJ_FASTCALL lj_trace_hot(jit_State *J, const BCIns *pc) -{ - /* Note: pc is the interpreter bytecode PC here. It's offset by 1. */ - ERRNO_SAVE - /* Reset hotcount. */ - hotcount_set(J2GG(J), pc, J->param[JIT_P_hotloop]*HOTCOUNT_LOOP); - /* Only start a new trace if not recording or inside __gc call or vmevent. */ - if (J->state == LJ_TRACE_IDLE && - !(J2G(J)->hookmask & (HOOK_GC|HOOK_VMEVENT))) { - J->parent = 0; /* Root trace. */ - J->exitno = 0; - J->state = LJ_TRACE_START; - lj_trace_ins(J, pc-1); - } - ERRNO_RESTORE -} - -/* Check for a hot side exit. If yes, start recording a side trace. */ -static void trace_hotside(jit_State *J, const BCIns *pc) -{ - SnapShot *snap = &traceref(J, J->parent)->snap[J->exitno]; - if (!(J2G(J)->hookmask & (HOOK_GC|HOOK_VMEVENT)) && - snap->count != SNAPCOUNT_DONE && - ++snap->count >= J->param[JIT_P_hotexit]) { - lua_assert(J->state == LJ_TRACE_IDLE); - /* J->parent is non-zero for a side trace. */ - J->state = LJ_TRACE_START; - lj_trace_ins(J, pc); - } -} - -/* Tiny struct to pass data to protected call. */ -typedef struct ExitDataCP { - jit_State *J; - void *exptr; /* Pointer to exit state. */ - const BCIns *pc; /* Restart interpreter at this PC. */ -} ExitDataCP; - -/* Need to protect lj_snap_restore because it may throw. */ -static TValue *trace_exit_cp(lua_State *L, lua_CFunction dummy, void *ud) -{ - ExitDataCP *exd = (ExitDataCP *)ud; - cframe_errfunc(L->cframe) = -1; /* Inherit error function. */ - exd->pc = lj_snap_restore(exd->J, exd->exptr); - UNUSED(dummy); - return NULL; -} - -#ifndef LUAJIT_DISABLE_VMEVENT -/* Push all registers from exit state. */ -static void trace_exit_regs(lua_State *L, ExitState *ex) -{ - int32_t i; - setintV(L->top++, RID_NUM_GPR); - setintV(L->top++, RID_NUM_FPR); - for (i = 0; i < RID_NUM_GPR; i++) { - if (sizeof(ex->gpr[i]) == sizeof(int32_t)) - setintV(L->top++, (int32_t)ex->gpr[i]); - else - setnumV(L->top++, (lua_Number)ex->gpr[i]); - } -#if !LJ_SOFTFP - for (i = 0; i < RID_NUM_FPR; i++) { - setnumV(L->top, ex->fpr[i]); - if (LJ_UNLIKELY(tvisnan(L->top))) - setnanV(L->top); - L->top++; - } -#endif -} -#endif - -#ifdef EXITSTATE_PCREG -/* Determine trace number from pc of exit instruction. */ -static TraceNo trace_exit_find(jit_State *J, MCode *pc) -{ - TraceNo traceno; - for (traceno = 1; traceno < J->sizetrace; traceno++) { - GCtrace *T = traceref(J, traceno); - if (T && pc >= T->mcode && pc < (MCode *)((char *)T->mcode + T->szmcode)) - return traceno; - } - lua_assert(0); - return 0; -} -#endif - -/* A trace exited. Restore interpreter state. */ -int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr) -{ - ERRNO_SAVE - lua_State *L = J->L; - ExitState *ex = (ExitState *)exptr; - ExitDataCP exd; - int errcode; - const BCIns *pc; - void *cf; - GCtrace *T; -#ifdef EXITSTATE_PCREG - J->parent = trace_exit_find(J, (MCode *)(intptr_t)ex->gpr[EXITSTATE_PCREG]); -#endif - T = traceref(J, J->parent); UNUSED(T); -#ifdef EXITSTATE_CHECKEXIT - if (J->exitno == T->nsnap) { /* Treat stack check like a parent exit. */ - lua_assert(T->root != 0); - J->exitno = T->ir[REF_BASE].op2; - J->parent = T->ir[REF_BASE].op1; - T = traceref(J, J->parent); - } -#endif - lua_assert(T != NULL && J->exitno < T->nsnap); - exd.J = J; - exd.exptr = exptr; - errcode = lj_vm_cpcall(L, NULL, &exd, trace_exit_cp); - if (errcode) - return -errcode; /* Return negated error code. */ - - lj_vmevent_send(L, TEXIT, - lj_state_checkstack(L, 4+RID_NUM_GPR+RID_NUM_FPR+LUA_MINSTACK); - setintV(L->top++, J->parent); - setintV(L->top++, J->exitno); - trace_exit_regs(L, ex); - ); - - pc = exd.pc; - cf = cframe_raw(L->cframe); - setcframe_pc(cf, pc); - if (G(L)->gc.state == GCSatomic || G(L)->gc.state == GCSfinalize) { - if (!(G(L)->hookmask & HOOK_GC)) - lj_gc_step(L); /* Exited because of GC: drive GC forward. */ - } else { - trace_hotside(J, pc); - } - if (bc_op(*pc) == BC_JLOOP) { - BCIns *retpc = &traceref(J, bc_d(*pc))->startins; - if (bc_isret(bc_op(*retpc))) { - if (J->state == LJ_TRACE_RECORD) { - J->patchins = *pc; - J->patchpc = (BCIns *)pc; - *J->patchpc = *retpc; - J->bcskip = 1; - } else { - pc = retpc; - setcframe_pc(cf, pc); - } - } - } - /* Return MULTRES or 0. */ - ERRNO_RESTORE - switch (bc_op(*pc)) { - case BC_CALLM: case BC_CALLMT: - return (int)((BCReg)(L->top - L->base) - bc_a(*pc) - bc_c(*pc)); - case BC_RETM: - return (int)((BCReg)(L->top - L->base) + 1 - bc_a(*pc) - bc_d(*pc)); - case BC_TSETM: - return (int)((BCReg)(L->top - L->base) + 1 - bc_a(*pc)); - default: - if (bc_op(*pc) >= BC_FUNCF) - return (int)((BCReg)(L->top - L->base) + 1); - return 0; - } -} - -#endif diff --git a/deps/luajit/src/lj_trace.h b/deps/luajit/src/lj_trace.h deleted file mode 100644 index 4fbe5cf..0000000 --- a/deps/luajit/src/lj_trace.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -** Trace management. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_TRACE_H -#define _LJ_TRACE_H - -#include "lj_obj.h" - -#if LJ_HASJIT -#include "lj_jit.h" -#include "lj_dispatch.h" - -/* Trace errors. */ -typedef enum { -#define TREDEF(name, msg) LJ_TRERR_##name, -#include "lj_traceerr.h" - LJ_TRERR__MAX -} TraceError; - -LJ_FUNC_NORET void lj_trace_err(jit_State *J, TraceError e); -LJ_FUNC_NORET void lj_trace_err_info(jit_State *J, TraceError e); - -/* Trace management. */ -LJ_FUNC void LJ_FASTCALL lj_trace_free(global_State *g, GCtrace *T); -LJ_FUNC void lj_trace_reenableproto(GCproto *pt); -LJ_FUNC void lj_trace_flushproto(global_State *g, GCproto *pt); -LJ_FUNC void lj_trace_flush(jit_State *J, TraceNo traceno); -LJ_FUNC int lj_trace_flushall(lua_State *L); -LJ_FUNC void lj_trace_initstate(global_State *g); -LJ_FUNC void lj_trace_freestate(global_State *g); - -/* Event handling. */ -LJ_FUNC void lj_trace_ins(jit_State *J, const BCIns *pc); -LJ_FUNCA void LJ_FASTCALL lj_trace_hot(jit_State *J, const BCIns *pc); -LJ_FUNCA int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr); - -/* Signal asynchronous abort of trace or end of trace. */ -#define lj_trace_abort(g) (G2J(g)->state &= ~LJ_TRACE_ACTIVE) -#define lj_trace_end(J) (J->state = LJ_TRACE_END) - -#else - -#define lj_trace_flushall(L) (UNUSED(L), 0) -#define lj_trace_initstate(g) UNUSED(g) -#define lj_trace_freestate(g) UNUSED(g) -#define lj_trace_abort(g) UNUSED(g) -#define lj_trace_end(J) UNUSED(J) - -#endif - -#endif diff --git a/deps/luajit/src/lj_traceerr.h b/deps/luajit/src/lj_traceerr.h deleted file mode 100644 index 9bef117..0000000 --- a/deps/luajit/src/lj_traceerr.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -** Trace compiler error messages. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* This file may be included multiple times with different TREDEF macros. */ - -/* Recording. */ -TREDEF(RECERR, "error thrown or hook called during recording") -TREDEF(TRACEOV, "trace too long") -TREDEF(STACKOV, "trace too deep") -TREDEF(SNAPOV, "too many snapshots") -TREDEF(BLACKL, "blacklisted") -TREDEF(NYIBC, "NYI: bytecode %d") - -/* Recording loop ops. */ -TREDEF(LLEAVE, "leaving loop in root trace") -TREDEF(LINNER, "inner loop in root trace") -TREDEF(LUNROLL, "loop unroll limit reached") - -/* Recording calls/returns. */ -TREDEF(BADTYPE, "bad argument type") -TREDEF(CJITOFF, "JIT compilation disabled for function") -TREDEF(CUNROLL, "call unroll limit reached") -TREDEF(DOWNREC, "down-recursion, restarting") -TREDEF(NYICF, "NYI: C function %p") -TREDEF(NYIFF, "NYI: FastFunc %s") -TREDEF(NYIFFU, "NYI: unsupported variant of FastFunc %s") -TREDEF(NYIRETL, "NYI: return to lower frame") - -/* Recording indexed load/store. */ -TREDEF(STORENN, "store with nil or NaN key") -TREDEF(NOMM, "missing metamethod") -TREDEF(IDXLOOP, "looping index lookup") -TREDEF(NYITMIX, "NYI: mixed sparse/dense table") - -/* Recording C data operations. */ -TREDEF(NOCACHE, "symbol not in cache") -TREDEF(NYICONV, "NYI: unsupported C type conversion") -TREDEF(NYICALL, "NYI: unsupported C function type") - -/* Optimizations. */ -TREDEF(GFAIL, "guard would always fail") -TREDEF(PHIOV, "too many PHIs") -TREDEF(TYPEINS, "persistent type instability") - -/* Assembler. */ -TREDEF(MCODEAL, "failed to allocate mcode memory") -TREDEF(MCODEOV, "machine code too long") -TREDEF(MCODELM, "hit mcode limit (retrying)") -TREDEF(SPILLOV, "too many spill slots") -TREDEF(BADRA, "inconsistent register allocation") -TREDEF(NYIIR, "NYI: cannot assemble IR instruction %d") -TREDEF(NYIPHI, "NYI: PHI shuffling too complex") -TREDEF(NYICOAL, "NYI: register coalescing too complex") - -#undef TREDEF - -/* Detecting unused error messages: - awk -F, '/^TREDEF/ { gsub(/TREDEF./, ""); printf "grep -q LJ_TRERR_%s *.[ch] || echo %s\n", $1, $1}' lj_traceerr.h | sh -*/ diff --git a/deps/luajit/src/lj_udata.c b/deps/luajit/src/lj_udata.c deleted file mode 100644 index d401a3d..0000000 --- a/deps/luajit/src/lj_udata.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -** Userdata handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_udata_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_gc.h" -#include "lj_udata.h" - -GCudata *lj_udata_new(lua_State *L, MSize sz, GCtab *env) -{ - GCudata *ud = lj_mem_newt(L, sizeof(GCudata) + sz, GCudata); - global_State *g = G(L); - newwhite(g, ud); /* Not finalized. */ - ud->gct = ~LJ_TUDATA; - ud->udtype = UDTYPE_USERDATA; - ud->len = sz; - /* NOBARRIER: The GCudata is new (marked white). */ - setgcrefnull(ud->metatable); - setgcref(ud->env, obj2gco(env)); - /* Chain to userdata list (after main thread). */ - setgcrefr(ud->nextgc, mainthread(g)->nextgc); - setgcref(mainthread(g)->nextgc, obj2gco(ud)); - return ud; -} - -void LJ_FASTCALL lj_udata_free(global_State *g, GCudata *ud) -{ - lj_mem_free(g, ud, sizeudata(ud)); -} - diff --git a/deps/luajit/src/lj_udata.h b/deps/luajit/src/lj_udata.h deleted file mode 100644 index 676e970..0000000 --- a/deps/luajit/src/lj_udata.h +++ /dev/null @@ -1,14 +0,0 @@ -/* -** Userdata handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_UDATA_H -#define _LJ_UDATA_H - -#include "lj_obj.h" - -LJ_FUNC GCudata *lj_udata_new(lua_State *L, MSize sz, GCtab *env); -LJ_FUNC void LJ_FASTCALL lj_udata_free(global_State *g, GCudata *ud); - -#endif diff --git a/deps/luajit/src/lj_vm.h b/deps/luajit/src/lj_vm.h deleted file mode 100644 index 036cabc..0000000 --- a/deps/luajit/src/lj_vm.h +++ /dev/null @@ -1,116 +0,0 @@ -/* -** Assembler VM interface definitions. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_VM_H -#define _LJ_VM_H - -#include "lj_obj.h" - -/* Entry points for ASM parts of VM. */ -LJ_ASMF void lj_vm_call(lua_State *L, TValue *base, int nres1); -LJ_ASMF int lj_vm_pcall(lua_State *L, TValue *base, int nres1, ptrdiff_t ef); -typedef TValue *(*lua_CPFunction)(lua_State *L, lua_CFunction func, void *ud); -LJ_ASMF int lj_vm_cpcall(lua_State *L, lua_CFunction func, void *ud, - lua_CPFunction cp); -LJ_ASMF int lj_vm_resume(lua_State *L, TValue *base, int nres1, ptrdiff_t ef); -LJ_ASMF_NORET void LJ_FASTCALL lj_vm_unwind_c(void *cframe, int errcode); -LJ_ASMF_NORET void LJ_FASTCALL lj_vm_unwind_ff(void *cframe); -LJ_ASMF void lj_vm_unwind_c_eh(void); -LJ_ASMF void lj_vm_unwind_ff_eh(void); -#if LJ_TARGET_X86ORX64 -LJ_ASMF void lj_vm_unwind_rethrow(void); -#endif - -/* Miscellaneous functions. */ -#if LJ_TARGET_X86ORX64 -LJ_ASMF int lj_vm_cpuid(uint32_t f, uint32_t res[4]); -#endif -#if LJ_TARGET_PPC -void lj_vm_cachesync(void *start, void *end); -#endif -LJ_ASMF double lj_vm_foldarith(double x, double y, int op); -#if LJ_HASJIT -LJ_ASMF double lj_vm_foldfpm(double x, int op); -#endif -#if !LJ_ARCH_HASFPU -/* Declared in lj_obj.h: LJ_ASMF int32_t lj_vm_tobit(double x); */ -#endif - -/* Dispatch targets for recording and hooks. */ -LJ_ASMF void lj_vm_record(void); -LJ_ASMF void lj_vm_inshook(void); -LJ_ASMF void lj_vm_rethook(void); -LJ_ASMF void lj_vm_callhook(void); - -/* Trace exit handling. */ -LJ_ASMF void lj_vm_exit_handler(void); -LJ_ASMF void lj_vm_exit_interp(void); - -/* Internal math helper functions. */ -#if LJ_TARGET_X86ORX64 || LJ_TARGET_PPC -#define lj_vm_floor floor -#define lj_vm_ceil ceil -#else -LJ_ASMF double lj_vm_floor(double); -LJ_ASMF double lj_vm_ceil(double); -#if LJ_TARGET_ARM -LJ_ASMF double lj_vm_floor_sf(double); -LJ_ASMF double lj_vm_ceil_sf(double); -#endif -#endif -#if defined(LUAJIT_NO_LOG2) || LJ_TARGET_X86ORX64 -LJ_ASMF double lj_vm_log2(double); -#else -#define lj_vm_log2 log2 -#endif - -#if LJ_HASJIT -#if LJ_TARGET_X86ORX64 -LJ_ASMF void lj_vm_floor_sse(void); -LJ_ASMF void lj_vm_ceil_sse(void); -LJ_ASMF void lj_vm_trunc_sse(void); -LJ_ASMF void lj_vm_exp_x87(void); -LJ_ASMF void lj_vm_exp2_x87(void); -LJ_ASMF void lj_vm_pow_sse(void); -LJ_ASMF void lj_vm_powi_sse(void); -#else -#if LJ_TARGET_PPC -#define lj_vm_trunc trunc -#else -LJ_ASMF double lj_vm_trunc(double); -#if LJ_TARGET_ARM -LJ_ASMF double lj_vm_trunc_sf(double); -#endif -#endif -LJ_ASMF double lj_vm_powi(double, int32_t); -#ifdef LUAJIT_NO_EXP2 -LJ_ASMF double lj_vm_exp2(double); -#else -#define lj_vm_exp2 exp2 -#endif -#endif -LJ_ASMF int32_t LJ_FASTCALL lj_vm_modi(int32_t, int32_t); -#if LJ_HASFFI -LJ_ASMF int lj_vm_errno(void); -#endif -#endif - -/* Continuations for metamethods. */ -LJ_ASMF void lj_cont_cat(void); /* Continue with concatenation. */ -LJ_ASMF void lj_cont_ra(void); /* Store result in RA from instruction. */ -LJ_ASMF void lj_cont_nop(void); /* Do nothing, just continue execution. */ -LJ_ASMF void lj_cont_condt(void); /* Branch if result is true. */ -LJ_ASMF void lj_cont_condf(void); /* Branch if result is false. */ -LJ_ASMF void lj_cont_hook(void); /* Continue from hook yield. */ - -enum { LJ_CONT_TAILCALL, LJ_CONT_FFI_CALLBACK }; /* Special continuations. */ - -/* Start of the ASM code. */ -LJ_ASMF char lj_vm_asm_begin[]; - -/* Bytecode offsets are relative to lj_vm_asm_begin. */ -#define makeasmfunc(ofs) ((ASMFunction)(lj_vm_asm_begin + (ofs))) - -#endif diff --git a/deps/luajit/src/lj_vmevent.c b/deps/luajit/src/lj_vmevent.c deleted file mode 100644 index 81fe47d..0000000 --- a/deps/luajit/src/lj_vmevent.c +++ /dev/null @@ -1,57 +0,0 @@ -/* -** VM event handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#include - -#define lj_vmevent_c -#define LUA_CORE - -#include "lj_obj.h" -#include "lj_str.h" -#include "lj_tab.h" -#include "lj_state.h" -#include "lj_dispatch.h" -#include "lj_vm.h" -#include "lj_vmevent.h" - -ptrdiff_t lj_vmevent_prepare(lua_State *L, VMEvent ev) -{ - global_State *g = G(L); - GCstr *s = lj_str_newlit(L, LJ_VMEVENTS_REGKEY); - cTValue *tv = lj_tab_getstr(tabV(registry(L)), s); - if (tvistab(tv)) { - int hash = VMEVENT_HASH(ev); - tv = lj_tab_getint(tabV(tv), hash); - if (tv && tvisfunc(tv)) { - lj_state_checkstack(L, LUA_MINSTACK); - setfuncV(L, L->top++, funcV(tv)); - return savestack(L, L->top); - } - } - g->vmevmask &= ~VMEVENT_MASK(ev); /* No handler: cache this fact. */ - return 0; -} - -void lj_vmevent_call(lua_State *L, ptrdiff_t argbase) -{ - global_State *g = G(L); - uint8_t oldmask = g->vmevmask; - uint8_t oldh = hook_save(g); - int status; - g->vmevmask = 0; /* Disable all events. */ - hook_vmevent(g); - status = lj_vm_pcall(L, restorestack(L, argbase), 0+1, 0); - if (LJ_UNLIKELY(status)) { - /* Really shouldn't use stderr here, but where else to complain? */ - L->top--; - fputs("VM handler failed: ", stderr); - fputs(tvisstr(L->top) ? strVdata(L->top) : "?", stderr); - fputc('\n', stderr); - } - hook_restore(g, oldh); - if (g->vmevmask != VMEVENT_NOCACHE) - g->vmevmask = oldmask; /* Restore event mask, but not if not modified. */ -} - diff --git a/deps/luajit/src/lj_vmevent.h b/deps/luajit/src/lj_vmevent.h deleted file mode 100644 index 231e00e..0000000 --- a/deps/luajit/src/lj_vmevent.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -** VM event handling. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LJ_VMEVENT_H -#define _LJ_VMEVENT_H - -#include "lj_obj.h" - -/* Registry key for VM event handler table. */ -#define LJ_VMEVENTS_REGKEY "_VMEVENTS" -#define LJ_VMEVENTS_HSIZE 4 - -#define VMEVENT_MASK(ev) ((uint8_t)1 << ((int)(ev) & 7)) -#define VMEVENT_HASH(ev) ((int)(ev) & ~7) -#define VMEVENT_HASHIDX(h) ((int)(h) << 3) -#define VMEVENT_NOCACHE 255 - -#define VMEVENT_DEF(name, hash) \ - LJ_VMEVENT_##name##_, \ - LJ_VMEVENT_##name = ((LJ_VMEVENT_##name##_) & 7)|((hash) << 3) - -/* VM event IDs. */ -typedef enum { - VMEVENT_DEF(BC, 0x00003883), - VMEVENT_DEF(TRACE, 0xb2d91467), - VMEVENT_DEF(RECORD, 0x9284bf4f), - VMEVENT_DEF(TEXIT, 0xb29df2b0), - LJ_VMEVENT__MAX -} VMEvent; - -#ifdef LUAJIT_DISABLE_VMEVENT -#define lj_vmevent_send(L, ev, args) UNUSED(L) -#define lj_vmevent_send_(L, ev, args, post) UNUSED(L) -#else -#define lj_vmevent_send(L, ev, args) \ - if (G(L)->vmevmask & VMEVENT_MASK(LJ_VMEVENT_##ev)) { \ - ptrdiff_t argbase = lj_vmevent_prepare(L, LJ_VMEVENT_##ev); \ - if (argbase) { \ - args \ - lj_vmevent_call(L, argbase); \ - } \ - } -#define lj_vmevent_send_(L, ev, args, post) \ - if (G(L)->vmevmask & VMEVENT_MASK(LJ_VMEVENT_##ev)) { \ - ptrdiff_t argbase = lj_vmevent_prepare(L, LJ_VMEVENT_##ev); \ - if (argbase) { \ - args \ - lj_vmevent_call(L, argbase); \ - post \ - } \ - } - -LJ_FUNC ptrdiff_t lj_vmevent_prepare(lua_State *L, VMEvent ev); -LJ_FUNC void lj_vmevent_call(lua_State *L, ptrdiff_t argbase); -#endif - -#endif diff --git a/deps/luajit/src/lj_vmmath.c b/deps/luajit/src/lj_vmmath.c deleted file mode 100644 index 31c6029..0000000 --- a/deps/luajit/src/lj_vmmath.c +++ /dev/null @@ -1,140 +0,0 @@ -/* -** Math helper functions for assembler VM. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#define lj_vmmath_c -#define LUA_CORE - -#include -#include - -#include "lj_obj.h" -#include "lj_ir.h" -#include "lj_vm.h" - -/* -- Helper functions for generated machine code ------------------------- */ - -#if LJ_TARGET_X86ORX64 -/* Wrapper functions to avoid linker issues on OSX. */ -LJ_FUNCA double lj_vm_sinh(double x) { return sinh(x); } -LJ_FUNCA double lj_vm_cosh(double x) { return cosh(x); } -LJ_FUNCA double lj_vm_tanh(double x) { return tanh(x); } -#endif - -#if !LJ_TARGET_X86ORX64 -double lj_vm_foldarith(double x, double y, int op) -{ - switch (op) { - case IR_ADD - IR_ADD: return x+y; break; - case IR_SUB - IR_ADD: return x-y; break; - case IR_MUL - IR_ADD: return x*y; break; - case IR_DIV - IR_ADD: return x/y; break; - case IR_MOD - IR_ADD: return x-lj_vm_floor(x/y)*y; break; - case IR_POW - IR_ADD: return pow(x, y); break; - case IR_NEG - IR_ADD: return -x; break; - case IR_ABS - IR_ADD: return fabs(x); break; -#if LJ_HASJIT - case IR_ATAN2 - IR_ADD: return atan2(x, y); break; - case IR_LDEXP - IR_ADD: return ldexp(x, (int)y); break; - case IR_MIN - IR_ADD: return x > y ? y : x; break; - case IR_MAX - IR_ADD: return x < y ? y : x; break; -#endif - default: return x; - } -} -#endif - -#if LJ_HASJIT - -#ifdef LUAJIT_NO_LOG2 -double lj_vm_log2(double a) -{ - return log(a) * 1.4426950408889634074; -} -#endif - -#ifdef LUAJIT_NO_EXP2 -double lj_vm_exp2(double a) -{ - return exp(a * 0.6931471805599453); -} -#endif - -#if !(LJ_TARGET_ARM || LJ_TARGET_PPC) -int32_t LJ_FASTCALL lj_vm_modi(int32_t a, int32_t b) -{ - uint32_t y, ua, ub; - lua_assert(b != 0); /* This must be checked before using this function. */ - ua = a < 0 ? (uint32_t)-a : (uint32_t)a; - ub = b < 0 ? (uint32_t)-b : (uint32_t)b; - y = ua % ub; - if (y != 0 && (a^b) < 0) y = y - ub; - if (((int32_t)y^b) < 0) y = (uint32_t)-(int32_t)y; - return (int32_t)y; -} -#endif - -#if !LJ_TARGET_X86ORX64 -/* Unsigned x^k. */ -static double lj_vm_powui(double x, uint32_t k) -{ - double y; - lua_assert(k != 0); - for (; (k & 1) == 0; k >>= 1) x *= x; - y = x; - if ((k >>= 1) != 0) { - for (;;) { - x *= x; - if (k == 1) break; - if (k & 1) y *= x; - k >>= 1; - } - y *= x; - } - return y; -} - -/* Signed x^k. */ -double lj_vm_powi(double x, int32_t k) -{ - if (k > 1) - return lj_vm_powui(x, (uint32_t)k); - else if (k == 1) - return x; - else if (k == 0) - return 1.0; - else - return 1.0 / lj_vm_powui(x, (uint32_t)-k); -} - -/* Computes fpm(x) for extended math functions. */ -double lj_vm_foldfpm(double x, int fpm) -{ - switch (fpm) { - case IRFPM_FLOOR: return lj_vm_floor(x); - case IRFPM_CEIL: return lj_vm_ceil(x); - case IRFPM_TRUNC: return lj_vm_trunc(x); - case IRFPM_SQRT: return sqrt(x); - case IRFPM_EXP: return exp(x); - case IRFPM_EXP2: return lj_vm_exp2(x); - case IRFPM_LOG: return log(x); - case IRFPM_LOG2: return lj_vm_log2(x); - case IRFPM_LOG10: return log10(x); - case IRFPM_SIN: return sin(x); - case IRFPM_COS: return cos(x); - case IRFPM_TAN: return tan(x); - default: lua_assert(0); - } - return 0; -} -#endif - -#if LJ_HASFFI -int lj_vm_errno(void) -{ - return errno; -} -#endif - -#endif diff --git a/deps/luajit/src/ljamalg.c b/deps/luajit/src/ljamalg.c deleted file mode 100644 index 9b237b7..0000000 --- a/deps/luajit/src/ljamalg.c +++ /dev/null @@ -1,93 +0,0 @@ -/* -** LuaJIT core and libraries amalgamation. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -/* -+--------------------------------------------------------------------------+ -| WARNING: Compiling the amalgamation needs a lot of virtual memory | -| (around 300 MB with GCC 4.x)! If you don't have enough physical memory | -| your machine will start swapping to disk and the compile will not finish | -| within a reasonable amount of time. | -| So either compile on a bigger machine or use the non-amalgamated build. | -+--------------------------------------------------------------------------+ -*/ - -#define ljamalg_c -#define LUA_CORE - -/* To get the mremap prototype. Must be defined before any system includes. */ -#if defined(__linux__) && !defined(_GNU_SOURCE) -#define _GNU_SOURCE -#endif - -#ifndef WINVER -#define WINVER 0x0501 -#endif - -#include "lua.h" -#include "lauxlib.h" - -#include "lj_gc.c" -#include "lj_err.c" -#include "lj_char.c" -#include "lj_bc.c" -#include "lj_obj.c" -#include "lj_str.c" -#include "lj_tab.c" -#include "lj_func.c" -#include "lj_udata.c" -#include "lj_meta.c" -#include "lj_debug.c" -#include "lj_state.c" -#include "lj_dispatch.c" -#include "lj_vmevent.c" -#include "lj_vmmath.c" -#include "lj_strscan.c" -#include "lj_api.c" -#include "lj_lex.c" -#include "lj_parse.c" -#include "lj_bcread.c" -#include "lj_bcwrite.c" -#include "lj_load.c" -#include "lj_ctype.c" -#include "lj_cdata.c" -#include "lj_cconv.c" -#include "lj_ccall.c" -#include "lj_ccallback.c" -#include "lj_carith.c" -#include "lj_clib.c" -#include "lj_cparse.c" -#include "lj_lib.c" -#include "lj_ir.c" -#include "lj_opt_mem.c" -#include "lj_opt_fold.c" -#include "lj_opt_narrow.c" -#include "lj_opt_dce.c" -#include "lj_opt_loop.c" -#include "lj_opt_split.c" -#include "lj_opt_sink.c" -#include "lj_mcode.c" -#include "lj_snap.c" -#include "lj_record.c" -#include "lj_crecord.c" -#include "lj_ffrecord.c" -#include "lj_asm.c" -#include "lj_trace.c" -#include "lj_gdbjit.c" -#include "lj_alloc.c" - -#include "lib_aux.c" -#include "lib_base.c" -#include "lib_math.c" -#include "lib_string.c" -#include "lib_table.c" -#include "lib_io.c" -#include "lib_os.c" -#include "lib_package.c" -#include "lib_debug.c" -#include "lib_bit.c" -#include "lib_jit.c" -#include "lib_ffi.c" -#include "lib_init.c" - diff --git a/deps/luajit/src/lua.h b/deps/luajit/src/lua.h deleted file mode 100644 index c83fd3b..0000000 --- a/deps/luajit/src/lua.h +++ /dev/null @@ -1,393 +0,0 @@ -/* -** $Id: lua.h,v 1.218.1.5 2008/08/06 13:30:12 roberto Exp $ -** Lua - An Extensible Extension Language -** Lua.org, PUC-Rio, Brazil (http://www.lua.org) -** See Copyright Notice at the end of this file -*/ - - -#ifndef lua_h -#define lua_h - -#include -#include - - -#include "luaconf.h" - - -#define LUA_VERSION "Lua 5.1" -#define LUA_RELEASE "Lua 5.1.4" -#define LUA_VERSION_NUM 501 -#define LUA_COPYRIGHT "Copyright (C) 1994-2008 Lua.org, PUC-Rio" -#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" - - -/* mark for precompiled code (`Lua') */ -#define LUA_SIGNATURE "\033Lua" - -/* option for multiple returns in `lua_pcall' and `lua_call' */ -#define LUA_MULTRET (-1) - - -/* -** pseudo-indices -*/ -#define LUA_REGISTRYINDEX (-10000) -#define LUA_ENVIRONINDEX (-10001) -#define LUA_GLOBALSINDEX (-10002) -#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) - - -/* thread status; 0 is OK */ -#define LUA_YIELD 1 -#define LUA_ERRRUN 2 -#define LUA_ERRSYNTAX 3 -#define LUA_ERRMEM 4 -#define LUA_ERRERR 5 - - -typedef struct lua_State lua_State; - -typedef int (*lua_CFunction) (lua_State *L); - - -/* -** functions that read/write blocks when loading/dumping Lua chunks -*/ -typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); - -typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); - - -/* -** prototype for memory-allocation functions -*/ -typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); - - -/* -** basic types -*/ -#define LUA_TNONE (-1) - -#define LUA_TNIL 0 -#define LUA_TBOOLEAN 1 -#define LUA_TLIGHTUSERDATA 2 -#define LUA_TNUMBER 3 -#define LUA_TSTRING 4 -#define LUA_TTABLE 5 -#define LUA_TFUNCTION 6 -#define LUA_TUSERDATA 7 -#define LUA_TTHREAD 8 - - - -/* minimum Lua stack available to a C function */ -#define LUA_MINSTACK 20 - - -/* -** generic extra include file -*/ -#if defined(LUA_USER_H) -#include LUA_USER_H -#endif - - -/* type of numbers in Lua */ -typedef LUA_NUMBER lua_Number; - - -/* type for integer functions */ -typedef LUA_INTEGER lua_Integer; - - - -/* -** state manipulation -*/ -LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); -LUA_API void (lua_close) (lua_State *L); -LUA_API lua_State *(lua_newthread) (lua_State *L); - -LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); - - -/* -** basic stack manipulation -*/ -LUA_API int (lua_gettop) (lua_State *L); -LUA_API void (lua_settop) (lua_State *L, int idx); -LUA_API void (lua_pushvalue) (lua_State *L, int idx); -LUA_API void (lua_remove) (lua_State *L, int idx); -LUA_API void (lua_insert) (lua_State *L, int idx); -LUA_API void (lua_replace) (lua_State *L, int idx); -LUA_API int (lua_checkstack) (lua_State *L, int sz); - -LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); - - -/* -** access functions (stack -> C) -*/ - -LUA_API int (lua_isnumber) (lua_State *L, int idx); -LUA_API int (lua_isstring) (lua_State *L, int idx); -LUA_API int (lua_iscfunction) (lua_State *L, int idx); -LUA_API int (lua_isuserdata) (lua_State *L, int idx); -LUA_API int (lua_type) (lua_State *L, int idx); -LUA_API const char *(lua_typename) (lua_State *L, int tp); - -LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); -LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); -LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); - -LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); -LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); -LUA_API int (lua_toboolean) (lua_State *L, int idx); -LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); -LUA_API size_t (lua_objlen) (lua_State *L, int idx); -LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); -LUA_API void *(lua_touserdata) (lua_State *L, int idx); -LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); -LUA_API const void *(lua_topointer) (lua_State *L, int idx); - - -/* -** push functions (C -> stack) -*/ -LUA_API void (lua_pushnil) (lua_State *L); -LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); -LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); -LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); -LUA_API void (lua_pushstring) (lua_State *L, const char *s); -LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, - va_list argp); -LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); -LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); -LUA_API void (lua_pushboolean) (lua_State *L, int b); -LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); -LUA_API int (lua_pushthread) (lua_State *L); - - -/* -** get functions (Lua -> stack) -*/ -LUA_API void (lua_gettable) (lua_State *L, int idx); -LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); -LUA_API void (lua_rawget) (lua_State *L, int idx); -LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); -LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); -LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); -LUA_API int (lua_getmetatable) (lua_State *L, int objindex); -LUA_API void (lua_getfenv) (lua_State *L, int idx); - - -/* -** set functions (stack -> Lua) -*/ -LUA_API void (lua_settable) (lua_State *L, int idx); -LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); -LUA_API void (lua_rawset) (lua_State *L, int idx); -LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); -LUA_API int (lua_setmetatable) (lua_State *L, int objindex); -LUA_API int (lua_setfenv) (lua_State *L, int idx); - - -/* -** `load' and `call' functions (load and run Lua code) -*/ -LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); -LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); -LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); -LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, - const char *chunkname); - -LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); - - -/* -** coroutine functions -*/ -LUA_API int (lua_yield) (lua_State *L, int nresults); -LUA_API int (lua_resume) (lua_State *L, int narg); -LUA_API int (lua_status) (lua_State *L); - -/* -** garbage-collection function and options -*/ - -#define LUA_GCSTOP 0 -#define LUA_GCRESTART 1 -#define LUA_GCCOLLECT 2 -#define LUA_GCCOUNT 3 -#define LUA_GCCOUNTB 4 -#define LUA_GCSTEP 5 -#define LUA_GCSETPAUSE 6 -#define LUA_GCSETSTEPMUL 7 - -LUA_API int (lua_gc) (lua_State *L, int what, int data); - - -/* -** miscellaneous functions -*/ - -LUA_API int (lua_error) (lua_State *L); - -LUA_API int (lua_next) (lua_State *L, int idx); - -LUA_API void (lua_concat) (lua_State *L, int n); - -LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); -LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); - - - -/* -** =============================================================== -** some useful macros -** =============================================================== -*/ - -#define lua_pop(L,n) lua_settop(L, -(n)-1) - -#define lua_newtable(L) lua_createtable(L, 0, 0) - -#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) - -#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) - -#define lua_strlen(L,i) lua_objlen(L, (i)) - -#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) -#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) -#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) -#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) -#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) -#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) -#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) -#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) - -#define lua_pushliteral(L, s) \ - lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) - -#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) -#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) - -#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) - - - -/* -** compatibility macros and functions -*/ - -#define lua_open() luaL_newstate() - -#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) - -#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) - -#define lua_Chunkreader lua_Reader -#define lua_Chunkwriter lua_Writer - - -/* hack */ -LUA_API void lua_setlevel (lua_State *from, lua_State *to); - - -/* -** {====================================================================== -** Debug API -** ======================================================================= -*/ - - -/* -** Event codes -*/ -#define LUA_HOOKCALL 0 -#define LUA_HOOKRET 1 -#define LUA_HOOKLINE 2 -#define LUA_HOOKCOUNT 3 -#define LUA_HOOKTAILRET 4 - - -/* -** Event masks -*/ -#define LUA_MASKCALL (1 << LUA_HOOKCALL) -#define LUA_MASKRET (1 << LUA_HOOKRET) -#define LUA_MASKLINE (1 << LUA_HOOKLINE) -#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) - -typedef struct lua_Debug lua_Debug; /* activation record */ - - -/* Functions to be called by the debuger in specific events */ -typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); - - -LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); -LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); -LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); -LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); -LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); -LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); -LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); -LUA_API lua_Hook lua_gethook (lua_State *L); -LUA_API int lua_gethookmask (lua_State *L); -LUA_API int lua_gethookcount (lua_State *L); - -/* From Lua 5.2. */ -LUA_API void *lua_upvalueid (lua_State *L, int idx, int n); -LUA_API void lua_upvaluejoin (lua_State *L, int idx1, int n1, int idx2, int n2); -LUA_API int lua_loadx (lua_State *L, lua_Reader reader, void *dt, - const char *chunkname, const char *mode); - - -struct lua_Debug { - int event; - const char *name; /* (n) */ - const char *namewhat; /* (n) `global', `local', `field', `method' */ - const char *what; /* (S) `Lua', `C', `main', `tail' */ - const char *source; /* (S) */ - int currentline; /* (l) */ - int nups; /* (u) number of upvalues */ - int linedefined; /* (S) */ - int lastlinedefined; /* (S) */ - char short_src[LUA_IDSIZE]; /* (S) */ - /* private part */ - int i_ci; /* active function */ -}; - -/* }====================================================================== */ - - -/****************************************************************************** -* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining -* a copy of this software and associated documentation files (the -* "Software"), to deal in the Software without restriction, including -* without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to -* permit persons to whom the Software is furnished to do so, subject to -* the following conditions: -* -* The above copyright notice and this permission notice shall be -* included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -******************************************************************************/ - - -#endif diff --git a/deps/luajit/src/lua.hpp b/deps/luajit/src/lua.hpp deleted file mode 100644 index 07e9002..0000000 --- a/deps/luajit/src/lua.hpp +++ /dev/null @@ -1,9 +0,0 @@ -// C++ wrapper for LuaJIT header files. - -extern "C" { -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" -#include "luajit.h" -} - diff --git a/deps/luajit/src/luaconf.h b/deps/luajit/src/luaconf.h deleted file mode 100644 index 84fa641..0000000 --- a/deps/luajit/src/luaconf.h +++ /dev/null @@ -1,156 +0,0 @@ -/* -** Configuration header. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef luaconf_h -#define luaconf_h - -#ifndef WINVER -#define WINVER 0x0501 -#endif -#include -#include - -/* Default path for loading Lua and C modules with require(). */ -#if defined(_WIN32) -/* -** In Windows, any exclamation mark ('!') in the path is replaced by the -** path of the directory of the executable file of the current process. -*/ -#define LUA_LDIR "!\\lua\\" -#define LUA_CDIR "!\\" -#define LUA_PATH_DEFAULT \ - ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" -#define LUA_CPATH_DEFAULT \ - ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" -#else -/* -** Note to distribution maintainers: do NOT patch the following lines! -** Please read ../doc/install.html#distro and pass PREFIX=/usr instead. -*/ -#ifndef LUA_MULTILIB -#define LUA_MULTILIB "lib" -#endif -#ifndef LUA_LMULTILIB -#define LUA_LMULTILIB "lib" -#endif -#define LUA_LROOT "/usr/local" -#define LUA_LUADIR "/lua/5.1/" -#define LUA_LJDIR "/luajit-2.0.4/" - -#ifdef LUA_ROOT -#define LUA_JROOT LUA_ROOT -#define LUA_RLDIR LUA_ROOT "/share" LUA_LUADIR -#define LUA_RCDIR LUA_ROOT "/" LUA_MULTILIB LUA_LUADIR -#define LUA_RLPATH ";" LUA_RLDIR "?.lua;" LUA_RLDIR "?/init.lua" -#define LUA_RCPATH ";" LUA_RCDIR "?.so" -#else -#define LUA_JROOT LUA_LROOT -#define LUA_RLPATH -#define LUA_RCPATH -#endif - -#define LUA_JPATH ";" LUA_JROOT "/share" LUA_LJDIR "?.lua" -#define LUA_LLDIR LUA_LROOT "/share" LUA_LUADIR -#define LUA_LCDIR LUA_LROOT "/" LUA_LMULTILIB LUA_LUADIR -#define LUA_LLPATH ";" LUA_LLDIR "?.lua;" LUA_LLDIR "?/init.lua" -#define LUA_LCPATH1 ";" LUA_LCDIR "?.so" -#define LUA_LCPATH2 ";" LUA_LCDIR "loadall.so" - -#define LUA_PATH_DEFAULT "./?.lua" LUA_JPATH LUA_LLPATH LUA_RLPATH -#define LUA_CPATH_DEFAULT "./?.so" LUA_LCPATH1 LUA_RCPATH LUA_LCPATH2 -#endif - -/* Environment variable names for path overrides and initialization code. */ -#define LUA_PATH "LUA_PATH" -#define LUA_CPATH "LUA_CPATH" -#define LUA_INIT "LUA_INIT" - -/* Special file system characters. */ -#if defined(_WIN32) -#define LUA_DIRSEP "\\" -#else -#define LUA_DIRSEP "/" -#endif -#define LUA_PATHSEP ";" -#define LUA_PATH_MARK "?" -#define LUA_EXECDIR "!" -#define LUA_IGMARK "-" -#define LUA_PATH_CONFIG \ - LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" \ - LUA_EXECDIR "\n" LUA_IGMARK - -/* Quoting in error messages. */ -#define LUA_QL(x) "'" x "'" -#define LUA_QS LUA_QL("%s") - -/* Various tunables. */ -#define LUAI_MAXSTACK 65500 /* Max. # of stack slots for a thread (<64K). */ -#define LUAI_MAXCSTACK 8000 /* Max. # of stack slots for a C func (<10K). */ -#define LUAI_GCPAUSE 200 /* Pause GC until memory is at 200%. */ -#define LUAI_GCMUL 200 /* Run GC at 200% of allocation speed. */ -#define LUA_MAXCAPTURES 32 /* Max. pattern captures. */ - -/* Compatibility with older library function names. */ -#define LUA_COMPAT_MOD /* OLD: math.mod, NEW: math.fmod */ -#define LUA_COMPAT_GFIND /* OLD: string.gfind, NEW: string.gmatch */ - -/* Configuration for the frontend (the luajit executable). */ -#if defined(luajit_c) -#define LUA_PROGNAME "luajit" /* Fallback frontend name. */ -#define LUA_PROMPT "> " /* Interactive prompt. */ -#define LUA_PROMPT2 ">> " /* Continuation prompt. */ -#define LUA_MAXINPUT 512 /* Max. input line length. */ -#endif - -/* Note: changing the following defines breaks the Lua 5.1 ABI. */ -#define LUA_INTEGER ptrdiff_t -#define LUA_IDSIZE 60 /* Size of lua_Debug.short_src. */ -/* -** Size of lauxlib and io.* on-stack buffers. Weird workaround to avoid using -** unreasonable amounts of stack space, but still retain ABI compatibility. -** Blame Lua for depending on BUFSIZ in the ABI, blame **** for wrecking it. -*/ -#define LUAL_BUFFERSIZE (BUFSIZ > 16384 ? 8192 : BUFSIZ) - -/* The following defines are here only for compatibility with luaconf.h -** from the standard Lua distribution. They must not be changed for LuaJIT. -*/ -#define LUA_NUMBER_DOUBLE -#define LUA_NUMBER double -#define LUAI_UACNUMBER double -#define LUA_NUMBER_SCAN "%lf" -#define LUA_NUMBER_FMT "%.14g" -#define lua_number2str(s, n) sprintf((s), LUA_NUMBER_FMT, (n)) -#define LUAI_MAXNUMBER2STR 32 -#define LUA_INTFRMLEN "l" -#define LUA_INTFRM_T long - -/* Linkage of public API functions. */ -#if defined(LUA_BUILD_AS_DLL) -#if defined(LUA_CORE) || defined(LUA_LIB) -#define LUA_API __declspec(dllexport) -#else -#define LUA_API __declspec(dllimport) -#endif -#else -#define LUA_API extern -#endif - -#define LUALIB_API LUA_API - -/* Support for internal assertions. */ -#if defined(LUA_USE_ASSERT) || defined(LUA_USE_APICHECK) -#include -#endif -#ifdef LUA_USE_ASSERT -#define lua_assert(x) assert(x) -#endif -#ifdef LUA_USE_APICHECK -#define luai_apicheck(L, o) { (void)L; assert(o); } -#else -#define luai_apicheck(L, o) { (void)L; } -#endif - -#endif diff --git a/deps/luajit/src/luajit.c b/deps/luajit/src/luajit.c deleted file mode 100644 index 85d713f..0000000 --- a/deps/luajit/src/luajit.c +++ /dev/null @@ -1,571 +0,0 @@ -/* -** LuaJIT frontend. Runs commands, scripts, read-eval-print (REPL) etc. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -** -** Major portions taken verbatim or adapted from the Lua interpreter. -** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h -*/ - -#include -#include -#include - -#define luajit_c - -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" -#include "luajit.h" - -#include "lj_arch.h" - -#if LJ_TARGET_POSIX -#include -#define lua_stdin_is_tty() isatty(0) -#elif LJ_TARGET_WINDOWS -#include -#ifdef __BORLANDC__ -#define lua_stdin_is_tty() isatty(_fileno(stdin)) -#else -#define lua_stdin_is_tty() _isatty(_fileno(stdin)) -#endif -#else -#define lua_stdin_is_tty() 1 -#endif - -#if !LJ_TARGET_CONSOLE -#include -#endif - -static lua_State *globalL = NULL; -static const char *progname = LUA_PROGNAME; - -#if !LJ_TARGET_CONSOLE -static void lstop(lua_State *L, lua_Debug *ar) -{ - (void)ar; /* unused arg. */ - lua_sethook(L, NULL, 0, 0); - /* Avoid luaL_error -- a C hook doesn't add an extra frame. */ - luaL_where(L, 0); - lua_pushfstring(L, "%sinterrupted!", lua_tostring(L, -1)); - lua_error(L); -} - -static void laction(int i) -{ - signal(i, SIG_DFL); /* if another SIGINT happens before lstop, - terminate process (default action) */ - lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); -} -#endif - -static void print_usage(void) -{ - fprintf(stderr, - "usage: %s [options]... [script [args]...].\n" - "Available options are:\n" - " -e chunk Execute string " LUA_QL("chunk") ".\n" - " -l name Require library " LUA_QL("name") ".\n" - " -b ... Save or list bytecode.\n" - " -j cmd Perform LuaJIT control command.\n" - " -O[opt] Control LuaJIT optimizations.\n" - " -i Enter interactive mode after executing " LUA_QL("script") ".\n" - " -v Show version information.\n" - " -E Ignore environment variables.\n" - " -- Stop handling options.\n" - " - Execute stdin and stop handling options.\n" - , - progname); - fflush(stderr); -} - -static void l_message(const char *pname, const char *msg) -{ - if (pname) fprintf(stderr, "%s: ", pname); - fprintf(stderr, "%s\n", msg); - fflush(stderr); -} - -static int report(lua_State *L, int status) -{ - if (status && !lua_isnil(L, -1)) { - const char *msg = lua_tostring(L, -1); - if (msg == NULL) msg = "(error object is not a string)"; - l_message(progname, msg); - lua_pop(L, 1); - } - return status; -} - -static int traceback(lua_State *L) -{ - if (!lua_isstring(L, 1)) { /* Non-string error object? Try metamethod. */ - if (lua_isnoneornil(L, 1) || - !luaL_callmeta(L, 1, "__tostring") || - !lua_isstring(L, -1)) - return 1; /* Return non-string error object. */ - lua_remove(L, 1); /* Replace object by result of __tostring metamethod. */ - } - luaL_traceback(L, L, lua_tostring(L, 1), 1); - return 1; -} - -static int docall(lua_State *L, int narg, int clear) -{ - int status; - int base = lua_gettop(L) - narg; /* function index */ - lua_pushcfunction(L, traceback); /* push traceback function */ - lua_insert(L, base); /* put it under chunk and args */ -#if !LJ_TARGET_CONSOLE - signal(SIGINT, laction); -#endif - status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); -#if !LJ_TARGET_CONSOLE - signal(SIGINT, SIG_DFL); -#endif - lua_remove(L, base); /* remove traceback function */ - /* force a complete garbage collection in case of errors */ - if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); - return status; -} - -static void print_version(void) -{ - fputs(LUAJIT_VERSION " -- " LUAJIT_COPYRIGHT ". " LUAJIT_URL "\n", stdout); -} - -static void print_jit_status(lua_State *L) -{ - int n; - const char *s; - lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); - lua_getfield(L, -1, "jit"); /* Get jit.* module table. */ - lua_remove(L, -2); - lua_getfield(L, -1, "status"); - lua_remove(L, -2); - n = lua_gettop(L); - lua_call(L, 0, LUA_MULTRET); - fputs(lua_toboolean(L, n) ? "JIT: ON" : "JIT: OFF", stdout); - for (n++; (s = lua_tostring(L, n)); n++) { - putc(' ', stdout); - fputs(s, stdout); - } - putc('\n', stdout); -} - -static int getargs(lua_State *L, char **argv, int n) -{ - int narg; - int i; - int argc = 0; - while (argv[argc]) argc++; /* count total number of arguments */ - narg = argc - (n + 1); /* number of arguments to the script */ - luaL_checkstack(L, narg + 3, "too many arguments to script"); - for (i = n+1; i < argc; i++) - lua_pushstring(L, argv[i]); - lua_createtable(L, narg, n + 1); - for (i = 0; i < argc; i++) { - lua_pushstring(L, argv[i]); - lua_rawseti(L, -2, i - n); - } - return narg; -} - -static int dofile(lua_State *L, const char *name) -{ - int status = luaL_loadfile(L, name) || docall(L, 0, 1); - return report(L, status); -} - -static int dostring(lua_State *L, const char *s, const char *name) -{ - int status = luaL_loadbuffer(L, s, strlen(s), name) || docall(L, 0, 1); - return report(L, status); -} - -static int dolibrary(lua_State *L, const char *name) -{ - lua_getglobal(L, "require"); - lua_pushstring(L, name); - return report(L, docall(L, 1, 1)); -} - -static void write_prompt(lua_State *L, int firstline) -{ - const char *p; - lua_getfield(L, LUA_GLOBALSINDEX, firstline ? "_PROMPT" : "_PROMPT2"); - p = lua_tostring(L, -1); - if (p == NULL) p = firstline ? LUA_PROMPT : LUA_PROMPT2; - fputs(p, stdout); - fflush(stdout); - lua_pop(L, 1); /* remove global */ -} - -static int incomplete(lua_State *L, int status) -{ - if (status == LUA_ERRSYNTAX) { - size_t lmsg; - const char *msg = lua_tolstring(L, -1, &lmsg); - const char *tp = msg + lmsg - (sizeof(LUA_QL("")) - 1); - if (strstr(msg, LUA_QL("")) == tp) { - lua_pop(L, 1); - return 1; - } - } - return 0; /* else... */ -} - -static int pushline(lua_State *L, int firstline) -{ - char buf[LUA_MAXINPUT]; - write_prompt(L, firstline); - if (fgets(buf, LUA_MAXINPUT, stdin)) { - size_t len = strlen(buf); - if (len > 0 && buf[len-1] == '\n') - buf[len-1] = '\0'; - if (firstline && buf[0] == '=') - lua_pushfstring(L, "return %s", buf+1); - else - lua_pushstring(L, buf); - return 1; - } - return 0; -} - -static int loadline(lua_State *L) -{ - int status; - lua_settop(L, 0); - if (!pushline(L, 1)) - return -1; /* no input */ - for (;;) { /* repeat until gets a complete line */ - status = luaL_loadbuffer(L, lua_tostring(L, 1), lua_strlen(L, 1), "=stdin"); - if (!incomplete(L, status)) break; /* cannot try to add lines? */ - if (!pushline(L, 0)) /* no more input? */ - return -1; - lua_pushliteral(L, "\n"); /* add a new line... */ - lua_insert(L, -2); /* ...between the two lines */ - lua_concat(L, 3); /* join them */ - } - lua_remove(L, 1); /* remove line */ - return status; -} - -static void dotty(lua_State *L) -{ - int status; - const char *oldprogname = progname; - progname = NULL; - while ((status = loadline(L)) != -1) { - if (status == 0) status = docall(L, 0, 0); - report(L, status); - if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ - lua_getglobal(L, "print"); - lua_insert(L, 1); - if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) - l_message(progname, - lua_pushfstring(L, "error calling " LUA_QL("print") " (%s)", - lua_tostring(L, -1))); - } - } - lua_settop(L, 0); /* clear stack */ - fputs("\n", stdout); - fflush(stdout); - progname = oldprogname; -} - -static int handle_script(lua_State *L, char **argv, int n) -{ - int status; - const char *fname; - int narg = getargs(L, argv, n); /* collect arguments */ - lua_setglobal(L, "arg"); - fname = argv[n]; - if (strcmp(fname, "-") == 0 && strcmp(argv[n-1], "--") != 0) - fname = NULL; /* stdin */ - status = luaL_loadfile(L, fname); - lua_insert(L, -(narg+1)); - if (status == 0) - status = docall(L, narg, 0); - else - lua_pop(L, narg); - return report(L, status); -} - -/* Load add-on module. */ -static int loadjitmodule(lua_State *L) -{ - lua_getglobal(L, "require"); - lua_pushliteral(L, "jit."); - lua_pushvalue(L, -3); - lua_concat(L, 2); - if (lua_pcall(L, 1, 1, 0)) { - const char *msg = lua_tostring(L, -1); - if (msg && !strncmp(msg, "module ", 7)) - goto nomodule; - return report(L, 1); - } - lua_getfield(L, -1, "start"); - if (lua_isnil(L, -1)) { - nomodule: - l_message(progname, - "unknown luaJIT command or jit.* modules not installed"); - return 1; - } - lua_remove(L, -2); /* Drop module table. */ - return 0; -} - -/* Run command with options. */ -static int runcmdopt(lua_State *L, const char *opt) -{ - int narg = 0; - if (opt && *opt) { - for (;;) { /* Split arguments. */ - const char *p = strchr(opt, ','); - narg++; - if (!p) break; - if (p == opt) - lua_pushnil(L); - else - lua_pushlstring(L, opt, (size_t)(p - opt)); - opt = p + 1; - } - if (*opt) - lua_pushstring(L, opt); - else - lua_pushnil(L); - } - return report(L, lua_pcall(L, narg, 0, 0)); -} - -/* JIT engine control command: try jit library first or load add-on module. */ -static int dojitcmd(lua_State *L, const char *cmd) -{ - const char *opt = strchr(cmd, '='); - lua_pushlstring(L, cmd, opt ? (size_t)(opt - cmd) : strlen(cmd)); - lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); - lua_getfield(L, -1, "jit"); /* Get jit.* module table. */ - lua_remove(L, -2); - lua_pushvalue(L, -2); - lua_gettable(L, -2); /* Lookup library function. */ - if (!lua_isfunction(L, -1)) { - lua_pop(L, 2); /* Drop non-function and jit.* table, keep module name. */ - if (loadjitmodule(L)) - return 1; - } else { - lua_remove(L, -2); /* Drop jit.* table. */ - } - lua_remove(L, -2); /* Drop module name. */ - return runcmdopt(L, opt ? opt+1 : opt); -} - -/* Optimization flags. */ -static int dojitopt(lua_State *L, const char *opt) -{ - lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); - lua_getfield(L, -1, "jit.opt"); /* Get jit.opt.* module table. */ - lua_remove(L, -2); - lua_getfield(L, -1, "start"); - lua_remove(L, -2); - return runcmdopt(L, opt); -} - -/* Save or list bytecode. */ -static int dobytecode(lua_State *L, char **argv) -{ - int narg = 0; - lua_pushliteral(L, "bcsave"); - if (loadjitmodule(L)) - return 1; - if (argv[0][2]) { - narg++; - argv[0][1] = '-'; - lua_pushstring(L, argv[0]+1); - } - for (argv++; *argv != NULL; narg++, argv++) - lua_pushstring(L, *argv); - return report(L, lua_pcall(L, narg, 0, 0)); -} - -/* check that argument has no extra characters at the end */ -#define notail(x) {if ((x)[2] != '\0') return -1;} - -#define FLAGS_INTERACTIVE 1 -#define FLAGS_VERSION 2 -#define FLAGS_EXEC 4 -#define FLAGS_OPTION 8 -#define FLAGS_NOENV 16 - -static int collectargs(char **argv, int *flags) -{ - int i; - for (i = 1; argv[i] != NULL; i++) { - if (argv[i][0] != '-') /* Not an option? */ - return i; - switch (argv[i][1]) { /* Check option. */ - case '-': - notail(argv[i]); - return (argv[i+1] != NULL ? i+1 : 0); - case '\0': - return i; - case 'i': - notail(argv[i]); - *flags |= FLAGS_INTERACTIVE; - /* fallthrough */ - case 'v': - notail(argv[i]); - *flags |= FLAGS_VERSION; - break; - case 'e': - *flags |= FLAGS_EXEC; - case 'j': /* LuaJIT extension */ - case 'l': - *flags |= FLAGS_OPTION; - if (argv[i][2] == '\0') { - i++; - if (argv[i] == NULL) return -1; - } - break; - case 'O': break; /* LuaJIT extension */ - case 'b': /* LuaJIT extension */ - if (*flags) return -1; - *flags |= FLAGS_EXEC; - return 0; - case 'E': - *flags |= FLAGS_NOENV; - break; - default: return -1; /* invalid option */ - } - } - return 0; -} - -static int runargs(lua_State *L, char **argv, int n) -{ - int i; - for (i = 1; i < n; i++) { - if (argv[i] == NULL) continue; - lua_assert(argv[i][0] == '-'); - switch (argv[i][1]) { /* option */ - case 'e': { - const char *chunk = argv[i] + 2; - if (*chunk == '\0') chunk = argv[++i]; - lua_assert(chunk != NULL); - if (dostring(L, chunk, "=(command line)") != 0) - return 1; - break; - } - case 'l': { - const char *filename = argv[i] + 2; - if (*filename == '\0') filename = argv[++i]; - lua_assert(filename != NULL); - if (dolibrary(L, filename)) - return 1; /* stop if file fails */ - break; - } - case 'j': { /* LuaJIT extension */ - const char *cmd = argv[i] + 2; - if (*cmd == '\0') cmd = argv[++i]; - lua_assert(cmd != NULL); - if (dojitcmd(L, cmd)) - return 1; - break; - } - case 'O': /* LuaJIT extension */ - if (dojitopt(L, argv[i] + 2)) - return 1; - break; - case 'b': /* LuaJIT extension */ - return dobytecode(L, argv+i); - default: break; - } - } - return 0; -} - -static int handle_luainit(lua_State *L) -{ -#if LJ_TARGET_CONSOLE - const char *init = NULL; -#else - const char *init = getenv(LUA_INIT); -#endif - if (init == NULL) - return 0; /* status OK */ - else if (init[0] == '@') - return dofile(L, init+1); - else - return dostring(L, init, "=" LUA_INIT); -} - -static struct Smain { - char **argv; - int argc; - int status; -} smain; - -static int pmain(lua_State *L) -{ - struct Smain *s = &smain; - char **argv = s->argv; - int script; - int flags = 0; - globalL = L; - if (argv[0] && argv[0][0]) progname = argv[0]; - LUAJIT_VERSION_SYM(); /* linker-enforced version check */ - script = collectargs(argv, &flags); - if (script < 0) { /* invalid args? */ - print_usage(); - s->status = 1; - return 0; - } - if ((flags & FLAGS_NOENV)) { - lua_pushboolean(L, 1); - lua_setfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); - } - lua_gc(L, LUA_GCSTOP, 0); /* stop collector during initialization */ - luaL_openlibs(L); /* open libraries */ - lua_gc(L, LUA_GCRESTART, -1); - if (!(flags & FLAGS_NOENV)) { - s->status = handle_luainit(L); - if (s->status != 0) return 0; - } - if ((flags & FLAGS_VERSION)) print_version(); - s->status = runargs(L, argv, (script > 0) ? script : s->argc); - if (s->status != 0) return 0; - if (script) { - s->status = handle_script(L, argv, script); - if (s->status != 0) return 0; - } - if ((flags & FLAGS_INTERACTIVE)) { - print_jit_status(L); - dotty(L); - } else if (script == 0 && !(flags & (FLAGS_EXEC|FLAGS_VERSION))) { - if (lua_stdin_is_tty()) { - print_version(); - print_jit_status(L); - dotty(L); - } else { - dofile(L, NULL); /* executes stdin as a file */ - } - } - return 0; -} - -int main(int argc, char **argv) -{ - int status; - lua_State *L = lua_open(); /* create state */ - if (L == NULL) { - l_message(argv[0], "cannot create state: not enough memory"); - return EXIT_FAILURE; - } - smain.argc = argc; - smain.argv = argv; - status = lua_cpcall(L, pmain, NULL); - report(L, status); - lua_close(L); - return (status || smain.status) ? EXIT_FAILURE : EXIT_SUCCESS; -} - diff --git a/deps/luajit/src/luajit.h b/deps/luajit/src/luajit.h deleted file mode 100644 index 9ced18e..0000000 --- a/deps/luajit/src/luajit.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -** LuaJIT -- a Just-In-Time Compiler for Lua. http://luajit.org/ -** -** Copyright (C) 2005-2015 Mike Pall. All rights reserved. -** -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -** -** [ MIT license: http://www.opensource.org/licenses/mit-license.php ] -*/ - -#ifndef _LUAJIT_H -#define _LUAJIT_H - -#include "lua.h" - -#define LUAJIT_VERSION "LuaJIT 2.0.4" -#define LUAJIT_VERSION_NUM 20004 /* Version 2.0.4 = 02.00.04. */ -#define LUAJIT_VERSION_SYM luaJIT_version_2_0_4 -#define LUAJIT_COPYRIGHT "Copyright (C) 2005-2015 Mike Pall" -#define LUAJIT_URL "http://luajit.org/" - -/* Modes for luaJIT_setmode. */ -#define LUAJIT_MODE_MASK 0x00ff - -enum { - LUAJIT_MODE_ENGINE, /* Set mode for whole JIT engine. */ - LUAJIT_MODE_DEBUG, /* Set debug mode (idx = level). */ - - LUAJIT_MODE_FUNC, /* Change mode for a function. */ - LUAJIT_MODE_ALLFUNC, /* Recurse into subroutine protos. */ - LUAJIT_MODE_ALLSUBFUNC, /* Change only the subroutines. */ - - LUAJIT_MODE_TRACE, /* Flush a compiled trace. */ - - LUAJIT_MODE_WRAPCFUNC = 0x10, /* Set wrapper mode for C function calls. */ - - LUAJIT_MODE_MAX -}; - -/* Flags or'ed in to the mode. */ -#define LUAJIT_MODE_OFF 0x0000 /* Turn feature off. */ -#define LUAJIT_MODE_ON 0x0100 /* Turn feature on. */ -#define LUAJIT_MODE_FLUSH 0x0200 /* Flush JIT-compiled code. */ - -/* LuaJIT public C API. */ - -/* Control the JIT engine. */ -LUA_API int luaJIT_setmode(lua_State *L, int idx, int mode); - -/* Enforce (dynamic) linker error for version mismatches. Call from main. */ -LUA_API void LUAJIT_VERSION_SYM(void); - -#endif diff --git a/deps/luajit/src/lualib.h b/deps/luajit/src/lualib.h deleted file mode 100644 index 96530e7..0000000 --- a/deps/luajit/src/lualib.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -** Standard library header. -** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -*/ - -#ifndef _LUALIB_H -#define _LUALIB_H - -#include "lua.h" - -#define LUA_FILEHANDLE "FILE*" - -#define LUA_COLIBNAME "coroutine" -#define LUA_MATHLIBNAME "math" -#define LUA_STRLIBNAME "string" -#define LUA_TABLIBNAME "table" -#define LUA_IOLIBNAME "io" -#define LUA_OSLIBNAME "os" -#define LUA_LOADLIBNAME "package" -#define LUA_DBLIBNAME "debug" -#define LUA_BITLIBNAME "bit" -#define LUA_JITLIBNAME "jit" -#define LUA_FFILIBNAME "ffi" - -LUALIB_API int luaopen_base(lua_State *L); -LUALIB_API int luaopen_math(lua_State *L); -LUALIB_API int luaopen_string(lua_State *L); -LUALIB_API int luaopen_table(lua_State *L); -LUALIB_API int luaopen_io(lua_State *L); -LUALIB_API int luaopen_os(lua_State *L); -LUALIB_API int luaopen_package(lua_State *L); -LUALIB_API int luaopen_debug(lua_State *L); -LUALIB_API int luaopen_bit(lua_State *L); -LUALIB_API int luaopen_jit(lua_State *L); -LUALIB_API int luaopen_ffi(lua_State *L); - -LUALIB_API void luaL_openlibs(lua_State *L); - -#ifndef lua_assert -#define lua_assert(x) ((void)0) -#endif - -#endif diff --git a/deps/luajit/src/msvcbuild.bat b/deps/luajit/src/msvcbuild.bat deleted file mode 100644 index 4b50185..0000000 --- a/deps/luajit/src/msvcbuild.bat +++ /dev/null @@ -1,113 +0,0 @@ -@rem Script to build LuaJIT with MSVC. -@rem Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -@rem -@rem Either open a "Visual Studio .NET Command Prompt" -@rem (Note that the Express Edition does not contain an x64 compiler) -@rem -or- -@rem Open a "Windows SDK Command Shell" and set the compiler environment: -@rem setenv /release /x86 -@rem -or- -@rem setenv /release /x64 -@rem -@rem Then cd to this directory and run this script. - -@if not defined INCLUDE goto :FAIL - -@setlocal -@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE -@set LJLINK=link /nologo -@set LJMT=mt /nologo -@set LJLIB=lib /nologo /nodefaultlib -@set DASMDIR=..\dynasm -@set DASM=%DASMDIR%\dynasm.lua -@set LJDLLNAME=lua51.dll -@set LJLIBNAME=lua51.lib -@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c - -%LJCOMPILE% host\minilua.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:minilua.exe minilua.obj -@if errorlevel 1 goto :BAD -if exist minilua.exe.manifest^ - %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe - -@set DASMFLAGS=-D WIN -D JIT -D FFI -D P64 -@set LJARCH=x64 -@minilua -@if errorlevel 8 goto :X64 -@set DASMFLAGS=-D WIN -D JIT -D FFI -@set LJARCH=x86 -:X64 -minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_x86.dasc -@if errorlevel 1 goto :BAD - -%LJCOMPILE% /I "." /I %DASMDIR% host\buildvm*.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:buildvm.exe buildvm*.obj -@if errorlevel 1 goto :BAD -if exist buildvm.exe.manifest^ - %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe - -buildvm -m peobj -o lj_vm.obj -@if errorlevel 1 goto :BAD -buildvm -m bcdef -o lj_bcdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m ffdef -o lj_ffdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m libdef -o lj_libdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m recdef -o lj_recdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m folddef -o lj_folddef.h lj_opt_fold.c -@if errorlevel 1 goto :BAD - -@if "%1" neq "debug" goto :NODEBUG -@shift -@set LJCOMPILE=%LJCOMPILE% /Zi -@set LJLINK=%LJLINK% /debug -:NODEBUG -@if "%1"=="amalg" goto :AMALGDLL -@if "%1"=="static" goto :STATIC -%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c -@if errorlevel 1 goto :BAD -%LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj -@if errorlevel 1 goto :BAD -@goto :MTDLL -:STATIC -%LJCOMPILE% lj_*.c lib_*.c -@if errorlevel 1 goto :BAD -%LJLIB% /OUT:%LJLIBNAME% lj_*.obj lib_*.obj -@if errorlevel 1 goto :BAD -@goto :MTDLL -:AMALGDLL -%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL ljamalg.c -@if errorlevel 1 goto :BAD -%LJLINK% /DLL /out:%LJDLLNAME% ljamalg.obj lj_vm.obj -@if errorlevel 1 goto :BAD -:MTDLL -if exist %LJDLLNAME%.manifest^ - %LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2 - -%LJCOMPILE% luajit.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:luajit.exe luajit.obj %LJLIBNAME% -@if errorlevel 1 goto :BAD -if exist luajit.exe.manifest^ - %LJMT% -manifest luajit.exe.manifest -outputresource:luajit.exe - -@del *.obj *.manifest minilua.exe buildvm.exe -@echo. -@echo === Successfully built LuaJIT for Windows/%LJARCH% === - -@goto :END -:BAD -@echo. -@echo ******************************************************* -@echo *** Build FAILED -- Please check the error messages *** -@echo ******************************************************* -@goto :END -:FAIL -@echo You must open a "Visual Studio .NET Command Prompt" to run this script -:END diff --git a/deps/luajit/src/ps4build.bat b/deps/luajit/src/ps4build.bat deleted file mode 100644 index 42fc9a6..0000000 --- a/deps/luajit/src/ps4build.bat +++ /dev/null @@ -1,103 +0,0 @@ -@rem Script to build LuaJIT with the PS4 SDK. -@rem Donated to the public domain. -@rem -@rem Open a "Visual Studio .NET Command Prompt" (64 bit host compiler) -@rem Then cd to this directory and run this script. - -@if not defined INCLUDE goto :FAIL -@if not defined SCE_ORBIS_SDK_DIR goto :FAIL - -@setlocal -@rem ---- Host compiler ---- -@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE -@set LJLINK=link /nologo -@set LJMT=mt /nologo -@set DASMDIR=..\dynasm -@set DASM=%DASMDIR%\dynasm.lua -@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c - -%LJCOMPILE% host\minilua.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:minilua.exe minilua.obj -@if errorlevel 1 goto :BAD -if exist minilua.exe.manifest^ - %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe - -@rem Check for 64 bit host compiler. -@minilua -@if not errorlevel 8 goto :FAIL - -@set DASMFLAGS=-D P64 -minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_x86.dasc -@if errorlevel 1 goto :BAD - -%LJCOMPILE% /I "." /I %DASMDIR% -DLUAJIT_TARGET=LUAJIT_ARCH_X64 -DLUAJIT_OS=LUAJIT_OS_OTHER -DLUAJIT_DISABLE_JIT -DLUAJIT_DISABLE_FFI host\buildvm*.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:buildvm.exe buildvm*.obj -@if errorlevel 1 goto :BAD -if exist buildvm.exe.manifest^ - %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe - -buildvm -m elfasm -o lj_vm.s -@if errorlevel 1 goto :BAD -buildvm -m bcdef -o lj_bcdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m ffdef -o lj_ffdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m libdef -o lj_libdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m recdef -o lj_recdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m folddef -o lj_folddef.h lj_opt_fold.c -@if errorlevel 1 goto :BAD - -@rem ---- Cross compiler ---- -@set LJCOMPILE="%SCE_ORBIS_SDK_DIR%\host_tools\bin\orbis-clang" -c -Wall -DLUAJIT_DISABLE_FFI -@set LJLIB="%SCE_ORBIS_SDK_DIR%\host_tools\bin\orbis-ar" rcus -@set INCLUDE="" - -orbis-as -o lj_vm.o lj_vm.s - -@if "%1" neq "debug" goto :NODEBUG -@shift -@set LJCOMPILE=%LJCOMPILE% -g -O0 -@set TARGETLIB=libluajitD.a -goto :BUILD -:NODEBUG -@set LJCOMPILE=%LJCOMPILE% -O2 -@set TARGETLIB=libluajit.a -:BUILD -del %TARGETLIB% -@if "%1"=="amalg" goto :AMALG -for %%f in (lj_*.c lib_*.c) do ( - %LJCOMPILE% %%f - @if errorlevel 1 goto :BAD -) - -%LJLIB% %TARGETLIB% lj_*.o lib_*.o -@if errorlevel 1 goto :BAD -@goto :NOAMALG -:AMALG -%LJCOMPILE% ljamalg.c -@if errorlevel 1 goto :BAD -%LJLIB% %TARGETLIB% ljamalg.o lj_vm.o -@if errorlevel 1 goto :BAD -:NOAMALG - -@del *.o *.obj *.manifest minilua.exe buildvm.exe -@echo. -@echo === Successfully built LuaJIT for PS4 === - -@goto :END -:BAD -@echo. -@echo ******************************************************* -@echo *** Build FAILED -- Please check the error messages *** -@echo ******************************************************* -@goto :END -:FAIL -@echo To run this script you must open a "Visual Studio .NET Command Prompt" -@echo (64 bit host compiler). The PS4 Orbis SDK must be installed, too. -:END diff --git a/deps/luajit/src/psvitabuild.bat b/deps/luajit/src/psvitabuild.bat deleted file mode 100644 index 3991dc6..0000000 --- a/deps/luajit/src/psvitabuild.bat +++ /dev/null @@ -1,93 +0,0 @@ -@rem Script to build LuaJIT with the PS Vita SDK. -@rem Donated to the public domain. -@rem -@rem Open a "Visual Studio .NET Command Prompt" (32 bit host compiler) -@rem Then cd to this directory and run this script. - -@if not defined INCLUDE goto :FAIL -@if not defined SCE_PSP2_SDK_DIR goto :FAIL - -@setlocal -@rem ---- Host compiler ---- -@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE -@set LJLINK=link /nologo -@set LJMT=mt /nologo -@set DASMDIR=..\dynasm -@set DASM=%DASMDIR%\dynasm.lua -@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c - -%LJCOMPILE% host\minilua.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:minilua.exe minilua.obj -@if errorlevel 1 goto :BAD -if exist minilua.exe.manifest^ - %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe - -@rem Check for 32 bit host compiler. -@minilua -@if errorlevel 8 goto :FAIL - -@set DASMFLAGS=-D FPU -D HFABI -minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_arm.dasc -@if errorlevel 1 goto :BAD - -%LJCOMPILE% /I "." /I %DASMDIR% -DLUAJIT_TARGET=LUAJIT_ARCH_ARM -DLUAJIT_OS=LUAJIT_OS_OTHER -DLUAJIT_DISABLE_JIT -DLUAJIT_DISABLE_FFI -DLJ_TARGET_PSVITA=1 host\buildvm*.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:buildvm.exe buildvm*.obj -@if errorlevel 1 goto :BAD -if exist buildvm.exe.manifest^ - %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe - -buildvm -m elfasm -o lj_vm.s -@if errorlevel 1 goto :BAD -buildvm -m bcdef -o lj_bcdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m ffdef -o lj_ffdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m libdef -o lj_libdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m recdef -o lj_recdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m folddef -o lj_folddef.h lj_opt_fold.c -@if errorlevel 1 goto :BAD - -@rem ---- Cross compiler ---- -@set LJCOMPILE="%SCE_PSP2_SDK_DIR%\host_tools\build\bin\psp2snc" -c -w -DLUAJIT_DISABLE_FFI -DLUAJIT_USE_SYSMALLOC -@set LJLIB="%SCE_PSP2_SDK_DIR%\host_tools\build\bin\psp2ld32" -r --output= -@set INCLUDE="" - -"%SCE_PSP2_SDK_DIR%\host_tools\build\bin\psp2as" -o lj_vm.o lj_vm.s - -@if "%1" neq "debug" goto :NODEBUG -@shift -@set LJCOMPILE=%LJCOMPILE% -g -O0 -@set TARGETLIB=libluajitD.a -goto :BUILD -:NODEBUG -@set LJCOMPILE=%LJCOMPILE% -O2 -@set TARGETLIB=libluajit.a -:BUILD -del %TARGETLIB% - -%LJCOMPILE% ljamalg.c -@if errorlevel 1 goto :BAD -%LJLIB%%TARGETLIB% ljamalg.o lj_vm.o -@if errorlevel 1 goto :BAD - -@del *.o *.obj *.manifest minilua.exe buildvm.exe -@echo. -@echo === Successfully built LuaJIT for PS Vita === - -@goto :END -:BAD -@echo. -@echo ******************************************************* -@echo *** Build FAILED -- Please check the error messages *** -@echo ******************************************************* -@goto :END -:FAIL -@echo To run this script you must open a "Visual Studio .NET Command Prompt" -@echo (32 bit host compiler). The PS Vita SDK must be installed, too. -:END diff --git a/deps/luajit/src/vm_arm.dasc b/deps/luajit/src/vm_arm.dasc deleted file mode 100644 index 457efa6..0000000 --- a/deps/luajit/src/vm_arm.dasc +++ /dev/null @@ -1,4486 +0,0 @@ -|// Low-level VM code for ARM CPUs. -|// Bytecode interpreter, fast functions and helper functions. -|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -| -|.arch arm -|.section code_op, code_sub -| -|.actionlist build_actionlist -|.globals GLOB_ -|.globalnames globnames -|.externnames extnames -| -|// Note: The ragged indentation of the instructions is intentional. -|// The starting columns indicate data dependencies. -| -|//----------------------------------------------------------------------- -| -|// Fixed register assignments for the interpreter. -| -|// The following must be C callee-save. -|.define MASKR8, r4 // 255*8 constant for fast bytecode decoding. -|.define KBASE, r5 // Constants of current Lua function. -|.define PC, r6 // Next PC. -|.define DISPATCH, r7 // Opcode dispatch table. -|.define LREG, r8 // Register holding lua_State (also in SAVE_L). -| -|// C callee-save in EABI, but often refetched. Temporary in iOS 3.0+. -|.define BASE, r9 // Base of current Lua stack frame. -| -|// The following temporaries are not saved across C calls, except for RA/RC. -|.define RA, r10 // Callee-save. -|.define RC, r11 // Callee-save. -|.define RB, r12 -|.define OP, r12 // Overlaps RB, must not be lr. -|.define INS, lr -| -|// Calling conventions. Also used as temporaries. -|.define CARG1, r0 -|.define CARG2, r1 -|.define CARG3, r2 -|.define CARG4, r3 -|.define CARG12, r0 // For 1st soft-fp double. -|.define CARG34, r2 // For 2nd soft-fp double. -| -|.define CRET1, r0 -|.define CRET2, r1 -| -|// Stack layout while in interpreter. Must match with lj_frame.h. -|.define SAVE_R4, [sp, #28] -|.define CFRAME_SPACE, #28 -|.define SAVE_ERRF, [sp, #24] -|.define SAVE_NRES, [sp, #20] -|.define SAVE_CFRAME, [sp, #16] -|.define SAVE_L, [sp, #12] -|.define SAVE_PC, [sp, #8] -|.define SAVE_MULTRES, [sp, #4] -|.define ARG5, [sp] -| -|.define TMPDhi, [sp, #4] -|.define TMPDlo, [sp] -|.define TMPD, [sp] -|.define TMPDp, sp -| -|.if FPU -|.macro saveregs -| push {r5, r6, r7, r8, r9, r10, r11, lr} -| vpush {d8-d15} -| sub sp, sp, CFRAME_SPACE+4 -| str r4, SAVE_R4 -|.endmacro -|.macro restoreregs_ret -| ldr r4, SAVE_R4 -| add sp, sp, CFRAME_SPACE+4 -| vpop {d8-d15} -| pop {r5, r6, r7, r8, r9, r10, r11, pc} -|.endmacro -|.else -|.macro saveregs -| push {r4, r5, r6, r7, r8, r9, r10, r11, lr} -| sub sp, sp, CFRAME_SPACE -|.endmacro -|.macro restoreregs_ret -| add sp, sp, CFRAME_SPACE -| pop {r4, r5, r6, r7, r8, r9, r10, r11, pc} -|.endmacro -|.endif -| -|// Type definitions. Some of these are only used for documentation. -|.type L, lua_State, LREG -|.type GL, global_State -|.type TVALUE, TValue -|.type GCOBJ, GCobj -|.type STR, GCstr -|.type TAB, GCtab -|.type LFUNC, GCfuncL -|.type CFUNC, GCfuncC -|.type PROTO, GCproto -|.type UPVAL, GCupval -|.type NODE, Node -|.type NARGS8, int -|.type TRACE, GCtrace -| -|//----------------------------------------------------------------------- -| -|// Trap for not-yet-implemented parts. -|.macro NYI; ud; .endmacro -| -|//----------------------------------------------------------------------- -| -|// Access to frame relative to BASE. -|.define FRAME_FUNC, #-8 -|.define FRAME_PC, #-4 -| -|.macro decode_RA8, dst, ins; and dst, MASKR8, ins, lsr #5; .endmacro -|.macro decode_RB8, dst, ins; and dst, MASKR8, ins, lsr #21; .endmacro -|.macro decode_RC8, dst, ins; and dst, MASKR8, ins, lsr #13; .endmacro -|.macro decode_RD, dst, ins; lsr dst, ins, #16; .endmacro -|.macro decode_OP, dst, ins; and dst, ins, #255; .endmacro -| -|// Instruction fetch. -|.macro ins_NEXT1 -| ldrb OP, [PC] -|.endmacro -|.macro ins_NEXT2 -| ldr INS, [PC], #4 -|.endmacro -|// Instruction decode+dispatch. -|.macro ins_NEXT3 -| ldr OP, [DISPATCH, OP, lsl #2] -| decode_RA8 RA, INS -| decode_RD RC, INS -| bx OP -|.endmacro -|.macro ins_NEXT -| ins_NEXT1 -| ins_NEXT2 -| ins_NEXT3 -|.endmacro -| -|// Instruction footer. -|.if 1 -| // Replicated dispatch. Less unpredictable branches, but higher I-Cache use. -| .define ins_next, ins_NEXT -| .define ins_next_, ins_NEXT -| .define ins_next1, ins_NEXT1 -| .define ins_next2, ins_NEXT2 -| .define ins_next3, ins_NEXT3 -|.else -| // Common dispatch. Lower I-Cache use, only one (very) unpredictable branch. -| // Affects only certain kinds of benchmarks (and only with -j off). -| .macro ins_next -| b ->ins_next -| .endmacro -| .macro ins_next1 -| .endmacro -| .macro ins_next2 -| .endmacro -| .macro ins_next3 -| b ->ins_next -| .endmacro -| .macro ins_next_ -| ->ins_next: -| ins_NEXT -| .endmacro -|.endif -| -|// Avoid register name substitution for field name. -#define field_pc pc -| -|// Call decode and dispatch. -|.macro ins_callt -| // BASE = new base, CARG3 = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC -| ldr PC, LFUNC:CARG3->field_pc -| ldrb OP, [PC] // STALL: load PC. early PC. -| ldr INS, [PC], #4 -| ldr OP, [DISPATCH, OP, lsl #2] // STALL: load OP. early OP. -| decode_RA8 RA, INS -| add RA, RA, BASE -| bx OP -|.endmacro -| -|.macro ins_call -| // BASE = new base, CARG3 = LFUNC/CFUNC, RC = nargs*8, PC = caller PC -| str PC, [BASE, FRAME_PC] -| ins_callt // STALL: locked PC. -|.endmacro -| -|//----------------------------------------------------------------------- -| -|// Macros to test operand types. -|.macro checktp, reg, tp; cmn reg, #-tp; .endmacro -|.macro checktpeq, reg, tp; cmneq reg, #-tp; .endmacro -|.macro checktpne, reg, tp; cmnne reg, #-tp; .endmacro -|.macro checkstr, reg, target; checktp reg, LJ_TSTR; bne target; .endmacro -|.macro checktab, reg, target; checktp reg, LJ_TTAB; bne target; .endmacro -|.macro checkfunc, reg, target; checktp reg, LJ_TFUNC; bne target; .endmacro -| -|// Assumes DISPATCH is relative to GL. -#define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) -#define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) -| -#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) -| -|.macro hotcheck, delta -| lsr CARG1, PC, #1 -| and CARG1, CARG1, #126 -| sub CARG1, CARG1, #-GG_DISP2HOT -| ldrh CARG2, [DISPATCH, CARG1] -| subs CARG2, CARG2, #delta -| strh CARG2, [DISPATCH, CARG1] -|.endmacro -| -|.macro hotloop -| hotcheck HOTCOUNT_LOOP -| blo ->vm_hotloop -|.endmacro -| -|.macro hotcall -| hotcheck HOTCOUNT_CALL -| blo ->vm_hotcall -|.endmacro -| -|// Set current VM state. -|.macro mv_vmstate, reg, st; mvn reg, #LJ_VMST_..st; .endmacro -|.macro st_vmstate, reg; str reg, [DISPATCH, #DISPATCH_GL(vmstate)]; .endmacro -| -|// Move table write barrier back. Overwrites mark and tmp. -|.macro barrierback, tab, mark, tmp -| ldr tmp, [DISPATCH, #DISPATCH_GL(gc.grayagain)] -| bic mark, mark, #LJ_GC_BLACK // black2gray(tab) -| str tab, [DISPATCH, #DISPATCH_GL(gc.grayagain)] -| strb mark, tab->marked -| str tmp, tab->gclist -|.endmacro -| -|.macro .IOS, a, b -|.if IOS -| a, b -|.endif -|.endmacro -| -|//----------------------------------------------------------------------- - -#if !LJ_DUALNUM -#error "Only dual-number mode supported for ARM target" -#endif - -/* Generate subroutines used by opcodes and other parts of the VM. */ -/* The .code_sub section should be last to help static branch prediction. */ -static void build_subroutines(BuildCtx *ctx) -{ - |.code_sub - | - |//----------------------------------------------------------------------- - |//-- Return handling ---------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_returnp: - | // See vm_return. Also: RB = previous base. - | tst PC, #FRAME_P - | beq ->cont_dispatch - | - | // Return from pcall or xpcall fast func. - | ldr PC, [RB, FRAME_PC] // Fetch PC of previous frame. - | mvn CARG2, #~LJ_TTRUE - | mov BASE, RB - | // Prepending may overwrite the pcall frame, so do it at the end. - | str CARG2, [RA, FRAME_PC] // Prepend true to results. - | sub RA, RA, #8 - | - |->vm_returnc: - | adds RC, RC, #8 // RC = (nresults+1)*8. - | mov CRET1, #LUA_YIELD - | beq ->vm_unwind_c_eh - | str RC, SAVE_MULTRES - | ands CARG1, PC, #FRAME_TYPE - | beq ->BC_RET_Z // Handle regular return to Lua. - | - |->vm_return: - | // BASE = base, RA = resultptr, RC/MULTRES = (nresults+1)*8, PC = return - | // CARG1 = PC & FRAME_TYPE - | bic RB, PC, #FRAME_TYPEP - | cmp CARG1, #FRAME_C - | sub RB, BASE, RB // RB = previous base. - | bne ->vm_returnp - | - | str RB, L->base - | ldr KBASE, SAVE_NRES - | mv_vmstate CARG4, C - | sub BASE, BASE, #8 - | subs CARG3, RC, #8 - | lsl KBASE, KBASE, #3 // KBASE = (nresults_wanted+1)*8 - | st_vmstate CARG4 - | beq >2 - |1: - | subs CARG3, CARG3, #8 - | ldrd CARG12, [RA], #8 - | strd CARG12, [BASE], #8 - | bne <1 - |2: - | cmp KBASE, RC // More/less results wanted? - | bne >6 - |3: - | str BASE, L->top // Store new top. - | - |->vm_leave_cp: - | ldr RC, SAVE_CFRAME // Restore previous C frame. - | mov CRET1, #0 // Ok return status for vm_pcall. - | str RC, L->cframe - | - |->vm_leave_unw: - | restoreregs_ret - | - |6: - | blt >7 // Less results wanted? - | // More results wanted. Check stack size and fill up results with nil. - | ldr CARG3, L->maxstack - | mvn CARG2, #~LJ_TNIL - | cmp BASE, CARG3 - | bhs >8 - | str CARG2, [BASE, #4] - | add RC, RC, #8 - | add BASE, BASE, #8 - | b <2 - | - |7: // Less results wanted. - | sub CARG1, RC, KBASE - | cmp KBASE, #0 // LUA_MULTRET+1 case? - | subne BASE, BASE, CARG1 // Either keep top or shrink it. - | b <3 - | - |8: // Corner case: need to grow stack for filling up results. - | // This can happen if: - | // - A C function grows the stack (a lot). - | // - The GC shrinks the stack in between. - | // - A return back from a lua_call() with (high) nresults adjustment. - | str BASE, L->top // Save current top held in BASE (yes). - | lsr CARG2, KBASE, #3 - | mov CARG1, L - | bl extern lj_state_growstack // (lua_State *L, int n) - | ldr BASE, L->top // Need the (realloced) L->top in BASE. - | b <2 - | - |->vm_unwind_c: // Unwind C stack, return from vm_pcall. - | // (void *cframe, int errcode) - | mov sp, CARG1 - | mov CRET1, CARG2 - |->vm_unwind_c_eh: // Landing pad for external unwinder. - | ldr L, SAVE_L - | mv_vmstate CARG4, C - | ldr GL:CARG3, L->glref - | str CARG4, GL:CARG3->vmstate - | b ->vm_leave_unw - | - |->vm_unwind_ff: // Unwind C stack, return from ff pcall. - | // (void *cframe) - | bic CARG1, CARG1, #~CFRAME_RAWMASK // Use two steps: bic sp is deprecated. - | mov sp, CARG1 - |->vm_unwind_ff_eh: // Landing pad for external unwinder. - | ldr L, SAVE_L - | mov MASKR8, #255 - | mov RC, #16 // 2 results: false + error message. - | lsl MASKR8, MASKR8, #3 // MASKR8 = 255*8. - | ldr BASE, L->base - | ldr DISPATCH, L->glref // Setup pointer to dispatch table. - | mvn CARG1, #~LJ_TFALSE - | sub RA, BASE, #8 // Results start at BASE-8. - | ldr PC, [BASE, FRAME_PC] // Fetch PC of previous frame. - | add DISPATCH, DISPATCH, #GG_G2DISP - | mv_vmstate CARG2, INTERP - | str CARG1, [BASE, #-4] // Prepend false to error message. - | st_vmstate CARG2 - | b ->vm_returnc - | - |//----------------------------------------------------------------------- - |//-- Grow stack for calls ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_growstack_c: // Grow stack for C function. - | // CARG1 = L - | mov CARG2, #LUA_MINSTACK - | b >2 - | - |->vm_growstack_l: // Grow stack for Lua function. - | // BASE = new base, RA = BASE+framesize*8, RC = nargs*8, PC = first PC - | add RC, BASE, RC - | sub RA, RA, BASE - | mov CARG1, L - | str BASE, L->base - | add PC, PC, #4 // Must point after first instruction. - | str RC, L->top - | lsr CARG2, RA, #3 - |2: - | // L->base = new base, L->top = top - | str PC, SAVE_PC - | bl extern lj_state_growstack // (lua_State *L, int n) - | ldr BASE, L->base - | ldr RC, L->top - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] - | sub NARGS8:RC, RC, BASE - | // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC - | ins_callt // Just retry the call. - | - |//----------------------------------------------------------------------- - |//-- Entry points into the assembler VM --------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_resume: // Setup C frame and resume thread. - | // (lua_State *L, TValue *base, int nres1 = 0, ptrdiff_t ef = 0) - | saveregs - | mov L, CARG1 - | ldr DISPATCH, L:CARG1->glref // Setup pointer to dispatch table. - | mov BASE, CARG2 - | add DISPATCH, DISPATCH, #GG_G2DISP - | str L, SAVE_L - | mov PC, #FRAME_CP - | str CARG3, SAVE_NRES - | add CARG2, sp, #CFRAME_RESUME - | ldrb CARG1, L->status - | str CARG3, SAVE_ERRF - | str CARG2, L->cframe - | str CARG3, SAVE_CFRAME - | cmp CARG1, #0 - | str L, SAVE_PC // Any value outside of bytecode is ok. - | beq >3 - | - | // Resume after yield (like a return). - | mov RA, BASE - | ldr BASE, L->base - | ldr CARG1, L->top - | mov MASKR8, #255 - | strb CARG3, L->status - | sub RC, CARG1, BASE - | ldr PC, [BASE, FRAME_PC] - | lsl MASKR8, MASKR8, #3 // MASKR8 = 255*8. - | mv_vmstate CARG2, INTERP - | add RC, RC, #8 - | ands CARG1, PC, #FRAME_TYPE - | st_vmstate CARG2 - | str RC, SAVE_MULTRES - | beq ->BC_RET_Z - | b ->vm_return - | - |->vm_pcall: // Setup protected C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) - | saveregs - | mov PC, #FRAME_CP - | str CARG4, SAVE_ERRF - | b >1 - | - |->vm_call: // Setup C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1) - | saveregs - | mov PC, #FRAME_C - | - |1: // Entry point for vm_pcall above (PC = ftype). - | ldr RC, L:CARG1->cframe - | str CARG3, SAVE_NRES - | mov L, CARG1 - | str CARG1, SAVE_L - | mov BASE, CARG2 - | str sp, L->cframe // Add our C frame to cframe chain. - | ldr DISPATCH, L->glref // Setup pointer to dispatch table. - | str CARG1, SAVE_PC // Any value outside of bytecode is ok. - | str RC, SAVE_CFRAME - | add DISPATCH, DISPATCH, #GG_G2DISP - | - |3: // Entry point for vm_cpcall/vm_resume (BASE = base, PC = ftype). - | ldr RB, L->base // RB = old base (for vmeta_call). - | ldr CARG1, L->top - | mov MASKR8, #255 - | add PC, PC, BASE - | lsl MASKR8, MASKR8, #3 // MASKR8 = 255*8. - | sub PC, PC, RB // PC = frame delta + frame type - | mv_vmstate CARG2, INTERP - | sub NARGS8:RC, CARG1, BASE - | st_vmstate CARG2 - | - |->vm_call_dispatch: - | // RB = old base, BASE = new base, RC = nargs*8, PC = caller PC - | ldrd CARG34, [BASE, FRAME_FUNC] - | checkfunc CARG4, ->vmeta_call - | - |->vm_call_dispatch_f: - | ins_call - | // BASE = new base, CARG3 = func, RC = nargs*8, PC = caller PC - | - |->vm_cpcall: // Setup protected C frame, call C. - | // (lua_State *L, lua_CFunction func, void *ud, lua_CPFunction cp) - | saveregs - | mov L, CARG1 - | ldr RA, L:CARG1->stack - | str CARG1, SAVE_L - | ldr RB, L->top - | str CARG1, SAVE_PC // Any value outside of bytecode is ok. - | ldr RC, L->cframe - | sub RA, RA, RB // Compute -savestack(L, L->top). - | str sp, L->cframe // Add our C frame to cframe chain. - | mov RB, #0 - | str RA, SAVE_NRES // Neg. delta means cframe w/o frame. - | str RB, SAVE_ERRF // No error function. - | str RC, SAVE_CFRAME - | blx CARG4 // (lua_State *L, lua_CFunction func, void *ud) - | ldr DISPATCH, L->glref // Setup pointer to dispatch table. - | movs BASE, CRET1 - | mov PC, #FRAME_CP - | add DISPATCH, DISPATCH, #GG_G2DISP - | bne <3 // Else continue with the call. - | b ->vm_leave_cp // No base? Just remove C frame. - | - |//----------------------------------------------------------------------- - |//-- Metamethod handling ------------------------------------------------ - |//----------------------------------------------------------------------- - | - |//-- Continuation dispatch ---------------------------------------------- - | - |->cont_dispatch: - | // BASE = meta base, RA = resultptr, RC = (nresults+1)*8 - | ldr LFUNC:CARG3, [RB, FRAME_FUNC] - | ldr CARG1, [BASE, #-16] // Get continuation. - | mov CARG4, BASE - | mov BASE, RB // Restore caller BASE. - |.if FFI - | cmp CARG1, #1 - |.endif - | ldr PC, [CARG4, #-12] // Restore PC from [cont|PC]. - | ldr CARG3, LFUNC:CARG3->field_pc - | mvn INS, #~LJ_TNIL - | add CARG2, RA, RC - | str INS, [CARG2, #-4] // Ensure one valid arg. - |.if FFI - | bls >1 - |.endif - | ldr KBASE, [CARG3, #PC2PROTO(k)] - | // BASE = base, RA = resultptr, CARG4 = meta base - | bx CARG1 - | - |.if FFI - |1: - | beq ->cont_ffi_callback // cont = 1: return from FFI callback. - | // cont = 0: tailcall from C function. - | sub CARG4, CARG4, #16 - | sub RC, CARG4, BASE - | b ->vm_call_tail - |.endif - | - |->cont_cat: // RA = resultptr, CARG4 = meta base - | ldr INS, [PC, #-4] - | sub CARG2, CARG4, #16 - | ldrd CARG34, [RA] - | str BASE, L->base - | decode_RB8 RC, INS - | decode_RA8 RA, INS - | add CARG1, BASE, RC - | subs CARG1, CARG2, CARG1 - | strdne CARG34, [CARG2] - | movne CARG3, CARG1 - | bne ->BC_CAT_Z - | strd CARG34, [BASE, RA] - | b ->cont_nop - | - |//-- Table indexing metamethods ----------------------------------------- - | - |->vmeta_tgets1: - | add CARG2, BASE, RB - | b >2 - | - |->vmeta_tgets: - | sub CARG2, DISPATCH, #-DISPATCH_GL(tmptv) - | mvn CARG4, #~LJ_TTAB - | str TAB:RB, [CARG2] - | str CARG4, [CARG2, #4] - |2: - | mvn CARG4, #~LJ_TSTR - | str STR:RC, TMPDlo - | str CARG4, TMPDhi - | mov CARG3, TMPDp - | b >1 - | - |->vmeta_tgetb: // RC = index - | decode_RB8 RB, INS - | str RC, TMPDlo - | mvn CARG4, #~LJ_TISNUM - | add CARG2, BASE, RB - | str CARG4, TMPDhi - | mov CARG3, TMPDp - | b >1 - | - |->vmeta_tgetv: - | add CARG2, BASE, RB - | add CARG3, BASE, RC - |1: - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | bl extern lj_meta_tget // (lua_State *L, TValue *o, TValue *k) - | // Returns TValue * (finished) or NULL (metamethod). - | .IOS ldr BASE, L->base - | cmp CRET1, #0 - | beq >3 - | ldrd CARG34, [CRET1] - | ins_next1 - | ins_next2 - | strd CARG34, [BASE, RA] - | ins_next3 - | - |3: // Call __index metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k - | rsb CARG1, BASE, #FRAME_CONT - | ldr BASE, L->top - | mov NARGS8:RC, #16 // 2 args for func(t, k). - | str PC, [BASE, #-12] // [cont|PC] - | add PC, CARG1, BASE - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] // Guaranteed to be a function here. - | b ->vm_call_dispatch_f - | - |//----------------------------------------------------------------------- - | - |->vmeta_tsets1: - | add CARG2, BASE, RB - | b >2 - | - |->vmeta_tsets: - | sub CARG2, DISPATCH, #-DISPATCH_GL(tmptv) - | mvn CARG4, #~LJ_TTAB - | str TAB:RB, [CARG2] - | str CARG4, [CARG2, #4] - |2: - | mvn CARG4, #~LJ_TSTR - | str STR:RC, TMPDlo - | str CARG4, TMPDhi - | mov CARG3, TMPDp - | b >1 - | - |->vmeta_tsetb: // RC = index - | decode_RB8 RB, INS - | str RC, TMPDlo - | mvn CARG4, #~LJ_TISNUM - | add CARG2, BASE, RB - | str CARG4, TMPDhi - | mov CARG3, TMPDp - | b >1 - | - |->vmeta_tsetv: - | add CARG2, BASE, RB - | add CARG3, BASE, RC - |1: - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | bl extern lj_meta_tset // (lua_State *L, TValue *o, TValue *k) - | // Returns TValue * (finished) or NULL (metamethod). - | .IOS ldr BASE, L->base - | cmp CRET1, #0 - | ldrd CARG34, [BASE, RA] - | beq >3 - | ins_next1 - | // NOBARRIER: lj_meta_tset ensures the table is not black. - | strd CARG34, [CRET1] - | ins_next2 - | ins_next3 - | - |3: // Call __newindex metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k/(v) - | rsb CARG1, BASE, #FRAME_CONT - | ldr BASE, L->top - | mov NARGS8:RC, #24 // 3 args for func(t, k, v). - | strd CARG34, [BASE, #16] // Copy value to third argument. - | str PC, [BASE, #-12] // [cont|PC] - | add PC, CARG1, BASE - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] // Guaranteed to be a function here. - | b ->vm_call_dispatch_f - | - |//-- Comparison metamethods --------------------------------------------- - | - |->vmeta_comp: - | mov CARG1, L - | sub PC, PC, #4 - | mov CARG2, RA - | str BASE, L->base - | mov CARG3, RC - | str PC, SAVE_PC - | decode_OP CARG4, INS - | bl extern lj_meta_comp // (lua_State *L, TValue *o1, *o2, int op) - | // Returns 0/1 or TValue * (metamethod). - |3: - | .IOS ldr BASE, L->base - | cmp CRET1, #1 - | bhi ->vmeta_binop - |4: - | ldrh RB, [PC, #2] - | add PC, PC, #4 - | add RB, PC, RB, lsl #2 - | subhs PC, RB, #0x20000 - |->cont_nop: - | ins_next - | - |->cont_ra: // RA = resultptr - | ldr INS, [PC, #-4] - | ldrd CARG12, [RA] - | decode_RA8 CARG3, INS - | strd CARG12, [BASE, CARG3] - | b ->cont_nop - | - |->cont_condt: // RA = resultptr - | ldr CARG2, [RA, #4] - | mvn CARG1, #~LJ_TTRUE - | cmp CARG1, CARG2 // Branch if result is true. - | b <4 - | - |->cont_condf: // RA = resultptr - | ldr CARG2, [RA, #4] - | checktp CARG2, LJ_TFALSE // Branch if result is false. - | b <4 - | - |->vmeta_equal: - | // CARG2, CARG3, CARG4 are already set by BC_ISEQV/BC_ISNEV. - | sub PC, PC, #4 - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | bl extern lj_meta_equal // (lua_State *L, GCobj *o1, *o2, int ne) - | // Returns 0/1 or TValue * (metamethod). - | b <3 - | - |->vmeta_equal_cd: - |.if FFI - | sub PC, PC, #4 - | str BASE, L->base - | mov CARG1, L - | mov CARG2, INS - | str PC, SAVE_PC - | bl extern lj_meta_equal_cd // (lua_State *L, BCIns op) - | // Returns 0/1 or TValue * (metamethod). - | b <3 - |.endif - | - |//-- Arithmetic metamethods --------------------------------------------- - | - |->vmeta_arith_vn: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG3, BASE, RB - | add CARG4, KBASE, RC - | b >1 - | - |->vmeta_arith_nv: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG4, BASE, RB - | add CARG3, KBASE, RC - | b >1 - | - |->vmeta_unm: - | ldr INS, [PC, #-8] - | sub PC, PC, #4 - | add CARG3, BASE, RC - | add CARG4, BASE, RC - | b >1 - | - |->vmeta_arith_vv: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG3, BASE, RB - | add CARG4, BASE, RC - |1: - | decode_OP OP, INS - | add CARG2, BASE, RA - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | str OP, ARG5 - | bl extern lj_meta_arith // (lua_State *L, TValue *ra,*rb,*rc, BCReg op) - | // Returns NULL (finished) or TValue * (metamethod). - | .IOS ldr BASE, L->base - | cmp CRET1, #0 - | beq ->cont_nop - | - | // Call metamethod for binary op. - |->vmeta_binop: - | // BASE = old base, CRET1 = new base, stack = cont/func/o1/o2 - | sub CARG2, CRET1, BASE - | str PC, [CRET1, #-12] // [cont|PC] - | add PC, CARG2, #FRAME_CONT - | mov BASE, CRET1 - | mov NARGS8:RC, #16 // 2 args for func(o1, o2). - | b ->vm_call_dispatch - | - |->vmeta_len: - | add CARG2, BASE, RC - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | bl extern lj_meta_len // (lua_State *L, TValue *o) - | // Returns NULL (retry) or TValue * (metamethod base). - | .IOS ldr BASE, L->base -#if LJ_52 - | cmp CRET1, #0 - | bne ->vmeta_binop // Binop call for compatibility. - | ldr TAB:CARG1, [BASE, RC] - | b ->BC_LEN_Z -#else - | b ->vmeta_binop // Binop call for compatibility. -#endif - | - |//-- Call metamethod ---------------------------------------------------- - | - |->vmeta_call: // Resolve and call __call metamethod. - | // RB = old base, BASE = new base, RC = nargs*8 - | mov CARG1, L - | str RB, L->base // This is the callers base! - | sub CARG2, BASE, #8 - | str PC, SAVE_PC - | add CARG3, BASE, NARGS8:RC - | .IOS mov RA, BASE - | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | .IOS mov BASE, RA - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] // Guaranteed to be a function here. - | add NARGS8:RC, NARGS8:RC, #8 // Got one more argument now. - | ins_call - | - |->vmeta_callt: // Resolve __call for BC_CALLT. - | // BASE = old base, RA = new base, RC = nargs*8 - | mov CARG1, L - | str BASE, L->base - | sub CARG2, RA, #8 - | str PC, SAVE_PC - | add CARG3, RA, NARGS8:RC - | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | .IOS ldr BASE, L->base - | ldr LFUNC:CARG3, [RA, FRAME_FUNC] // Guaranteed to be a function here. - | ldr PC, [BASE, FRAME_PC] - | add NARGS8:RC, NARGS8:RC, #8 // Got one more argument now. - | b ->BC_CALLT2_Z - | - |//-- Argument coercion for 'for' statement ------------------------------ - | - |->vmeta_for: - | mov CARG1, L - | str BASE, L->base - | mov CARG2, RA - | str PC, SAVE_PC - | bl extern lj_meta_for // (lua_State *L, TValue *base) - | .IOS ldr BASE, L->base - |.if JIT - | ldrb OP, [PC, #-4] - |.endif - | ldr INS, [PC, #-4] - |.if JIT - | cmp OP, #BC_JFORI - |.endif - | decode_RA8 RA, INS - | decode_RD RC, INS - |.if JIT - | beq =>BC_JFORI - |.endif - | b =>BC_FORI - | - |//----------------------------------------------------------------------- - |//-- Fast functions ----------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro .ffunc, name - |->ff_ .. name: - |.endmacro - | - |.macro .ffunc_1, name - |->ff_ .. name: - | ldrd CARG12, [BASE] - | cmp NARGS8:RC, #8 - | blo ->fff_fallback - |.endmacro - | - |.macro .ffunc_2, name - |->ff_ .. name: - | ldrd CARG12, [BASE] - | ldrd CARG34, [BASE, #8] - | cmp NARGS8:RC, #16 - | blo ->fff_fallback - |.endmacro - | - |.macro .ffunc_n, name - | .ffunc_1 name - | checktp CARG2, LJ_TISNUM - | bhs ->fff_fallback - |.endmacro - | - |.macro .ffunc_nn, name - | .ffunc_2 name - | checktp CARG2, LJ_TISNUM - | cmnlo CARG4, #-LJ_TISNUM - | bhs ->fff_fallback - |.endmacro - | - |.macro .ffunc_d, name - | .ffunc name - | ldr CARG2, [BASE, #4] - | cmp NARGS8:RC, #8 - | vldr d0, [BASE] - | blo ->fff_fallback - | checktp CARG2, LJ_TISNUM - | bhs ->fff_fallback - |.endmacro - | - |.macro .ffunc_dd, name - | .ffunc name - | ldr CARG2, [BASE, #4] - | ldr CARG4, [BASE, #12] - | cmp NARGS8:RC, #16 - | vldr d0, [BASE] - | vldr d1, [BASE, #8] - | blo ->fff_fallback - | checktp CARG2, LJ_TISNUM - | cmnlo CARG4, #-LJ_TISNUM - | bhs ->fff_fallback - |.endmacro - | - |// Inlined GC threshold check. Caveat: uses CARG1 and CARG2. - |.macro ffgccheck - | ldr CARG1, [DISPATCH, #DISPATCH_GL(gc.total)] - | ldr CARG2, [DISPATCH, #DISPATCH_GL(gc.threshold)] - | cmp CARG1, CARG2 - | blge ->fff_gcstep - |.endmacro - | - |//-- Base library: checks ----------------------------------------------- - | - |.ffunc_1 assert - | checktp CARG2, LJ_TTRUE - | bhi ->fff_fallback - | ldr PC, [BASE, FRAME_PC] - | strd CARG12, [BASE, #-8] - | mov RB, BASE - | subs RA, NARGS8:RC, #8 - | add RC, NARGS8:RC, #8 // Compute (nresults+1)*8. - | beq ->fff_res // Done if exactly 1 argument. - |1: - | ldrd CARG12, [RB, #8] - | subs RA, RA, #8 - | strd CARG12, [RB], #8 - | bne <1 - | b ->fff_res - | - |.ffunc type - | ldr CARG2, [BASE, #4] - | cmp NARGS8:RC, #8 - | blo ->fff_fallback - | checktp CARG2, LJ_TISNUM - | mvnlo CARG2, #~LJ_TISNUM - | rsb CARG4, CARG2, #(int)(offsetof(GCfuncC, upvalue)>>3)-1 - | lsl CARG4, CARG4, #3 - | ldrd CARG12, [CFUNC:CARG3, CARG4] - | b ->fff_restv - | - |//-- Base library: getters and setters --------------------------------- - | - |.ffunc_1 getmetatable - | checktp CARG2, LJ_TTAB - | cmnne CARG2, #-LJ_TUDATA - | bne >6 - |1: // Field metatable must be at same offset for GCtab and GCudata! - | ldr TAB:RB, TAB:CARG1->metatable - |2: - | mvn CARG2, #~LJ_TNIL - | ldr STR:RC, [DISPATCH, #DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable])] - | cmp TAB:RB, #0 - | beq ->fff_restv - | ldr CARG3, TAB:RB->hmask - | ldr CARG4, STR:RC->hash - | ldr NODE:INS, TAB:RB->node - | and CARG3, CARG3, CARG4 // idx = str->hash & tab->hmask - | add CARG3, CARG3, CARG3, lsl #1 - | add NODE:INS, NODE:INS, CARG3, lsl #3 // node = tab->node + idx*3*8 - |3: // Rearranged logic, because we expect _not_ to find the key. - | ldrd CARG34, NODE:INS->key // STALL: early NODE:INS. - | ldrd CARG12, NODE:INS->val - | ldr NODE:INS, NODE:INS->next - | checktp CARG4, LJ_TSTR - | cmpeq CARG3, STR:RC - | beq >5 - | cmp NODE:INS, #0 - | bne <3 - |4: - | mov CARG1, RB // Use metatable as default result. - | mvn CARG2, #~LJ_TTAB - | b ->fff_restv - |5: - | checktp CARG2, LJ_TNIL - | bne ->fff_restv - | b <4 - | - |6: - | checktp CARG2, LJ_TISNUM - | mvnhs CARG2, CARG2 - | movlo CARG2, #~LJ_TISNUM - | add CARG4, DISPATCH, CARG2, lsl #2 - | ldr TAB:RB, [CARG4, #DISPATCH_GL(gcroot[GCROOT_BASEMT])] - | b <2 - | - |.ffunc_2 setmetatable - | // Fast path: no mt for table yet and not clearing the mt. - | checktp CARG2, LJ_TTAB - | ldreq TAB:RB, TAB:CARG1->metatable - | checktpeq CARG4, LJ_TTAB - | ldrbeq CARG4, TAB:CARG1->marked - | cmpeq TAB:RB, #0 - | bne ->fff_fallback - | tst CARG4, #LJ_GC_BLACK // isblack(table) - | str TAB:CARG3, TAB:CARG1->metatable - | beq ->fff_restv - | barrierback TAB:CARG1, CARG4, CARG3 - | b ->fff_restv - | - |.ffunc rawget - | ldrd CARG34, [BASE] - | cmp NARGS8:RC, #16 - | blo ->fff_fallback - | mov CARG2, CARG3 - | checktab CARG4, ->fff_fallback - | mov CARG1, L - | add CARG3, BASE, #8 - | .IOS mov RA, BASE - | bl extern lj_tab_get // (lua_State *L, GCtab *t, cTValue *key) - | // Returns cTValue *. - | .IOS mov BASE, RA - | ldrd CARG12, [CRET1] - | b ->fff_restv - | - |//-- Base library: conversions ------------------------------------------ - | - |.ffunc tonumber - | // Only handles the number case inline (without a base argument). - | ldrd CARG12, [BASE] - | cmp NARGS8:RC, #8 - | bne ->fff_fallback - | checktp CARG2, LJ_TISNUM - | bls ->fff_restv - | b ->fff_fallback - | - |.ffunc_1 tostring - | // Only handles the string or number case inline. - | checktp CARG2, LJ_TSTR - | // A __tostring method in the string base metatable is ignored. - | beq ->fff_restv - | // Handle numbers inline, unless a number base metatable is present. - | ldr CARG4, [DISPATCH, #DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM])] - | str BASE, L->base - | checktp CARG2, LJ_TISNUM - | cmpls CARG4, #0 - | str PC, SAVE_PC // Redundant (but a defined value). - | bhi ->fff_fallback - | ffgccheck - | mov CARG1, L - | mov CARG2, BASE - | bl extern lj_str_fromnumber // (lua_State *L, cTValue *o) - | // Returns GCstr *. - | ldr BASE, L->base - | mvn CARG2, #~LJ_TSTR - | b ->fff_restv - | - |//-- Base library: iterators ------------------------------------------- - | - |.ffunc_1 next - | mvn CARG4, #~LJ_TNIL - | checktab CARG2, ->fff_fallback - | strd CARG34, [BASE, NARGS8:RC] // Set missing 2nd arg to nil. - | ldr PC, [BASE, FRAME_PC] - | mov CARG2, CARG1 - | str BASE, L->base // Add frame since C call can throw. - | mov CARG1, L - | str BASE, L->top // Dummy frame length is ok. - | add CARG3, BASE, #8 - | str PC, SAVE_PC - | bl extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) - | // Returns 0 at end of traversal. - | .IOS ldr BASE, L->base - | cmp CRET1, #0 - | mvneq CRET2, #~LJ_TNIL - | beq ->fff_restv // End of traversal: return nil. - | ldrd CARG12, [BASE, #8] // Copy key and value to results. - | ldrd CARG34, [BASE, #16] - | mov RC, #(2+1)*8 - | strd CARG12, [BASE, #-8] - | strd CARG34, [BASE] - | b ->fff_res - | - |.ffunc_1 pairs - | checktab CARG2, ->fff_fallback -#if LJ_52 - | ldr TAB:RB, TAB:CARG1->metatable -#endif - | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0] - | ldr PC, [BASE, FRAME_PC] -#if LJ_52 - | cmp TAB:RB, #0 - | bne ->fff_fallback -#endif - | mvn CARG2, #~LJ_TNIL - | mov RC, #(3+1)*8 - | strd CFUNC:CARG34, [BASE, #-8] - | str CARG2, [BASE, #12] - | b ->fff_res - | - |.ffunc_2 ipairs_aux - | checktp CARG2, LJ_TTAB - | checktpeq CARG4, LJ_TISNUM - | bne ->fff_fallback - | ldr RB, TAB:CARG1->asize - | ldr RC, TAB:CARG1->array - | add CARG3, CARG3, #1 - | ldr PC, [BASE, FRAME_PC] - | cmp CARG3, RB - | add RC, RC, CARG3, lsl #3 - | strd CARG34, [BASE, #-8] - | ldrdlo CARG12, [RC] - | mov RC, #(0+1)*8 - | bhs >2 // Not in array part? - |1: - | checktp CARG2, LJ_TNIL - | movne RC, #(2+1)*8 - | strdne CARG12, [BASE] - | b ->fff_res - |2: // Check for empty hash part first. Otherwise call C function. - | ldr RB, TAB:CARG1->hmask - | mov CARG2, CARG3 - | cmp RB, #0 - | beq ->fff_res - | .IOS mov RA, BASE - | bl extern lj_tab_getinth // (GCtab *t, int32_t key) - | // Returns cTValue * or NULL. - | .IOS mov BASE, RA - | cmp CRET1, #0 - | beq ->fff_res - | ldrd CARG12, [CRET1] - | b <1 - | - |.ffunc_1 ipairs - | checktab CARG2, ->fff_fallback -#if LJ_52 - | ldr TAB:RB, TAB:CARG1->metatable -#endif - | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0] - | ldr PC, [BASE, FRAME_PC] -#if LJ_52 - | cmp TAB:RB, #0 - | bne ->fff_fallback -#endif - | mov CARG1, #0 - | mvn CARG2, #~LJ_TISNUM - | mov RC, #(3+1)*8 - | strd CFUNC:CARG34, [BASE, #-8] - | strd CARG12, [BASE, #8] - | b ->fff_res - | - |//-- Base library: catch errors ---------------------------------------- - | - |.ffunc pcall - | ldrb RA, [DISPATCH, #DISPATCH_GL(hookmask)] - | cmp NARGS8:RC, #8 - | blo ->fff_fallback - | tst RA, #HOOK_ACTIVE // Remember active hook before pcall. - | mov RB, BASE - | add BASE, BASE, #8 - | moveq PC, #8+FRAME_PCALL - | movne PC, #8+FRAME_PCALLH - | sub NARGS8:RC, NARGS8:RC, #8 - | b ->vm_call_dispatch - | - |.ffunc_2 xpcall - | ldrb RA, [DISPATCH, #DISPATCH_GL(hookmask)] - | checkfunc CARG4, ->fff_fallback // Traceback must be a function. - | mov RB, BASE - | strd CARG12, [BASE, #8] // Swap function and traceback. - | strd CARG34, [BASE] - | tst RA, #HOOK_ACTIVE // Remember active hook before pcall. - | add BASE, BASE, #16 - | moveq PC, #16+FRAME_PCALL - | movne PC, #16+FRAME_PCALLH - | sub NARGS8:RC, NARGS8:RC, #16 - | b ->vm_call_dispatch - | - |//-- Coroutine library -------------------------------------------------- - | - |.macro coroutine_resume_wrap, resume - |.if resume - |.ffunc_1 coroutine_resume - | checktp CARG2, LJ_TTHREAD - | bne ->fff_fallback - |.else - |.ffunc coroutine_wrap_aux - | ldr L:CARG1, CFUNC:CARG3->upvalue[0].gcr - |.endif - | ldr PC, [BASE, FRAME_PC] - | str BASE, L->base - | ldr CARG2, L:CARG1->top - | ldrb RA, L:CARG1->status - | ldr RB, L:CARG1->base - | add CARG3, CARG2, NARGS8:RC - | add CARG4, CARG2, RA - | str PC, SAVE_PC - | cmp CARG4, RB - | beq ->fff_fallback - | ldr CARG4, L:CARG1->maxstack - | ldr RB, L:CARG1->cframe - | cmp RA, #LUA_YIELD - | cmpls CARG3, CARG4 - | cmpls RB, #0 - | bhi ->fff_fallback - |1: - |.if resume - | sub CARG3, CARG3, #8 // Keep resumed thread in stack for GC. - | add BASE, BASE, #8 - | sub NARGS8:RC, NARGS8:RC, #8 - |.endif - | str CARG3, L:CARG1->top - | str BASE, L->top - |2: // Move args to coroutine. - | ldrd CARG34, [BASE, RB] - | cmp RB, NARGS8:RC - | strdne CARG34, [CARG2, RB] - | add RB, RB, #8 - | bne <2 - | - | mov CARG3, #0 - | mov L:RA, L:CARG1 - | mov CARG4, #0 - | bl ->vm_resume // (lua_State *L, TValue *base, 0, 0) - | // Returns thread status. - |4: - | ldr CARG3, L:RA->base - | mv_vmstate CARG2, INTERP - | ldr CARG4, L:RA->top - | st_vmstate CARG2 - | cmp CRET1, #LUA_YIELD - | ldr BASE, L->base - | bhi >8 - | subs RC, CARG4, CARG3 - | ldr CARG1, L->maxstack - | add CARG2, BASE, RC - | beq >6 // No results? - | cmp CARG2, CARG1 - | mov RB, #0 - | bhi >9 // Need to grow stack? - | - | sub CARG4, RC, #8 - | str CARG3, L:RA->top // Clear coroutine stack. - |5: // Move results from coroutine. - | ldrd CARG12, [CARG3, RB] - | cmp RB, CARG4 - | strd CARG12, [BASE, RB] - | add RB, RB, #8 - | bne <5 - |6: - |.if resume - | mvn CARG3, #~LJ_TTRUE - | add RC, RC, #16 - |7: - | str CARG3, [BASE, #-4] // Prepend true/false to results. - | sub RA, BASE, #8 - |.else - | mov RA, BASE - | add RC, RC, #8 - |.endif - | ands CARG1, PC, #FRAME_TYPE - | str PC, SAVE_PC - | str RC, SAVE_MULTRES - | beq ->BC_RET_Z - | b ->vm_return - | - |8: // Coroutine returned with error (at co->top-1). - |.if resume - | ldrd CARG12, [CARG4, #-8]! - | mvn CARG3, #~LJ_TFALSE - | mov RC, #(2+1)*8 - | str CARG4, L:RA->top // Remove error from coroutine stack. - | strd CARG12, [BASE] // Copy error message. - | b <7 - |.else - | mov CARG1, L - | mov CARG2, L:RA - | bl extern lj_ffh_coroutine_wrap_err // (lua_State *L, lua_State *co) - | // Never returns. - |.endif - | - |9: // Handle stack expansion on return from yield. - | mov CARG1, L - | lsr CARG2, RC, #3 - | bl extern lj_state_growstack // (lua_State *L, int n) - | mov CRET1, #0 - | b <4 - |.endmacro - | - | coroutine_resume_wrap 1 // coroutine.resume - | coroutine_resume_wrap 0 // coroutine.wrap - | - |.ffunc coroutine_yield - | ldr CARG1, L->cframe - | add CARG2, BASE, NARGS8:RC - | str BASE, L->base - | tst CARG1, #CFRAME_RESUME - | str CARG2, L->top - | mov CRET1, #LUA_YIELD - | mov CARG3, #0 - | beq ->fff_fallback - | str CARG3, L->cframe - | strb CRET1, L->status - | b ->vm_leave_unw - | - |//-- Math library ------------------------------------------------------- - | - |.macro math_round, func - | .ffunc_1 math_ .. func - | checktp CARG2, LJ_TISNUM - | beq ->fff_restv - | bhi ->fff_fallback - | // Round FP value and normalize result. - | lsl CARG3, CARG2, #1 - | adds RB, CARG3, #0x00200000 - | bpl >2 // |x| < 1? - | mvn CARG4, #0x3e0 - | subs RB, CARG4, RB, asr #21 - | lsl CARG4, CARG2, #11 - | lsl CARG3, CARG1, #11 - | orr CARG4, CARG4, #0x80000000 - | rsb INS, RB, #32 - | orr CARG4, CARG4, CARG1, lsr #21 - | bls >3 // |x| >= 2^31? - | orr CARG3, CARG3, CARG4, lsl INS - | lsr CARG1, CARG4, RB - |.if "func" == "floor" - | tst CARG3, CARG2, asr #31 - | addne CARG1, CARG1, #1 - |.else - | bics CARG3, CARG3, CARG2, asr #31 - | addsne CARG1, CARG1, #1 - | ldrdvs CARG12, >9 - | bvs ->fff_restv - |.endif - | cmp CARG2, #0 - | rsblt CARG1, CARG1, #0 - |1: - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - | - |2: // |x| < 1 - | bcs ->fff_restv // |x| is not finite. - | orr CARG3, CARG3, CARG1 // ztest = abs(hi) | lo - |.if "func" == "floor" - | tst CARG3, CARG2, asr #31 // return (ztest & sign) == 0 ? 0 : -1 - | moveq CARG1, #0 - | mvnne CARG1, #0 - |.else - | bics CARG3, CARG3, CARG2, asr #31 // return (ztest & ~sign) == 0 ? 0 : 1 - | moveq CARG1, #0 - | movne CARG1, #1 - |.endif - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - | - |3: // |x| >= 2^31. Check for x == -(2^31). - | cmpeq CARG4, #0x80000000 - |.if "func" == "floor" - | cmpeq CARG3, #0 - |.endif - | bne >4 - | cmp CARG2, #0 - | movmi CARG1, #0x80000000 - | bmi <1 - |4: - | bl ->vm_..func.._sf - | b ->fff_restv - |.endmacro - | - | math_round floor - | math_round ceil - | - |.align 8 - |9: - | .long 0x00000000, 0x41e00000 // 2^31. - | - |.ffunc_1 math_abs - | checktp CARG2, LJ_TISNUM - | bhi ->fff_fallback - | bicne CARG2, CARG2, #0x80000000 - | bne ->fff_restv - | cmp CARG1, #0 - | rsbslt CARG1, CARG1, #0 - | ldrdvs CARG12, <9 - | // Fallthrough. - | - |->fff_restv: - | // CARG12 = TValue result. - | ldr PC, [BASE, FRAME_PC] - | strd CARG12, [BASE, #-8] - |->fff_res1: - | // PC = return. - | mov RC, #(1+1)*8 - |->fff_res: - | // RC = (nresults+1)*8, PC = return. - | ands CARG1, PC, #FRAME_TYPE - | ldreq INS, [PC, #-4] - | str RC, SAVE_MULTRES - | sub RA, BASE, #8 - | bne ->vm_return - | decode_RB8 RB, INS - |5: - | cmp RB, RC // More results expected? - | bhi >6 - | decode_RA8 CARG1, INS - | ins_next1 - | ins_next2 - | // Adjust BASE. KBASE is assumed to be set for the calling frame. - | sub BASE, RA, CARG1 - | ins_next3 - | - |6: // Fill up results with nil. - | add CARG2, RA, RC - | mvn CARG1, #~LJ_TNIL - | add RC, RC, #8 - | str CARG1, [CARG2, #-4] - | b <5 - | - |.macro math_extern, func - |.if HFABI - | .ffunc_d math_ .. func - |.else - | .ffunc_n math_ .. func - |.endif - | .IOS mov RA, BASE - | bl extern func - | .IOS mov BASE, RA - |.if HFABI - | b ->fff_resd - |.else - | b ->fff_restv - |.endif - |.endmacro - | - |.macro math_extern2, func - |.if HFABI - | .ffunc_dd math_ .. func - |.else - | .ffunc_nn math_ .. func - |.endif - | .IOS mov RA, BASE - | bl extern func - | .IOS mov BASE, RA - |.if HFABI - | b ->fff_resd - |.else - | b ->fff_restv - |.endif - |.endmacro - | - |.if FPU - | .ffunc_d math_sqrt - | vsqrt.f64 d0, d0 - |->fff_resd: - | ldr PC, [BASE, FRAME_PC] - | vstr d0, [BASE, #-8] - | b ->fff_res1 - |.else - | math_extern sqrt - |.endif - | - |.ffunc math_log - |.if HFABI - | ldr CARG2, [BASE, #4] - | cmp NARGS8:RC, #8 // Need exactly 1 argument. - | vldr d0, [BASE] - | bne ->fff_fallback - |.else - | ldrd CARG12, [BASE] - | cmp NARGS8:RC, #8 // Need exactly 1 argument. - | bne ->fff_fallback - |.endif - | checktp CARG2, LJ_TISNUM - | bhs ->fff_fallback - | .IOS mov RA, BASE - | bl extern log - | .IOS mov BASE, RA - |.if HFABI - | b ->fff_resd - |.else - | b ->fff_restv - |.endif - | - | math_extern log10 - | math_extern exp - | math_extern sin - | math_extern cos - | math_extern tan - | math_extern asin - | math_extern acos - | math_extern atan - | math_extern sinh - | math_extern cosh - | math_extern tanh - | math_extern2 pow - | math_extern2 atan2 - | math_extern2 fmod - | - |->ff_math_deg: - |.if FPU - | .ffunc_d math_rad - | vldr d1, CFUNC:CARG3->upvalue[0] - | vmul.f64 d0, d0, d1 - | b ->fff_resd - |.else - | .ffunc_n math_rad - | ldrd CARG34, CFUNC:CARG3->upvalue[0] - | bl extern __aeabi_dmul - | b ->fff_restv - |.endif - | - |.if HFABI - | .ffunc math_ldexp - | ldr CARG4, [BASE, #4] - | ldrd CARG12, [BASE, #8] - | cmp NARGS8:RC, #16 - | blo ->fff_fallback - | vldr d0, [BASE] - | checktp CARG4, LJ_TISNUM - | bhs ->fff_fallback - | checktp CARG2, LJ_TISNUM - | bne ->fff_fallback - | .IOS mov RA, BASE - | bl extern ldexp // (double x, int exp) - | .IOS mov BASE, RA - | b ->fff_resd - |.else - |.ffunc_2 math_ldexp - | checktp CARG2, LJ_TISNUM - | bhs ->fff_fallback - | checktp CARG4, LJ_TISNUM - | bne ->fff_fallback - | .IOS mov RA, BASE - | bl extern ldexp // (double x, int exp) - | .IOS mov BASE, RA - | b ->fff_restv - |.endif - | - |.if HFABI - |.ffunc_d math_frexp - | mov CARG1, sp - | .IOS mov RA, BASE - | bl extern frexp - | .IOS mov BASE, RA - | ldr CARG3, [sp] - | mvn CARG4, #~LJ_TISNUM - | ldr PC, [BASE, FRAME_PC] - | vstr d0, [BASE, #-8] - | mov RC, #(2+1)*8 - | strd CARG34, [BASE] - | b ->fff_res - |.else - |.ffunc_n math_frexp - | mov CARG3, sp - | .IOS mov RA, BASE - | bl extern frexp - | .IOS mov BASE, RA - | ldr CARG3, [sp] - | mvn CARG4, #~LJ_TISNUM - | ldr PC, [BASE, FRAME_PC] - | strd CARG12, [BASE, #-8] - | mov RC, #(2+1)*8 - | strd CARG34, [BASE] - | b ->fff_res - |.endif - | - |.if HFABI - |.ffunc_d math_modf - | sub CARG1, BASE, #8 - | ldr PC, [BASE, FRAME_PC] - | .IOS mov RA, BASE - | bl extern modf - | .IOS mov BASE, RA - | mov RC, #(2+1)*8 - | vstr d0, [BASE] - | b ->fff_res - |.else - |.ffunc_n math_modf - | sub CARG3, BASE, #8 - | ldr PC, [BASE, FRAME_PC] - | .IOS mov RA, BASE - | bl extern modf - | .IOS mov BASE, RA - | mov RC, #(2+1)*8 - | strd CARG12, [BASE] - | b ->fff_res - |.endif - | - |.macro math_minmax, name, cond, fcond - |.if FPU - | .ffunc_1 name - | add RB, BASE, RC - | checktp CARG2, LJ_TISNUM - | add RA, BASE, #8 - | bne >4 - |1: // Handle integers. - | ldrd CARG34, [RA] - | cmp RA, RB - | bhs ->fff_restv - | checktp CARG4, LJ_TISNUM - | bne >3 - | cmp CARG1, CARG3 - | add RA, RA, #8 - | mov..cond CARG1, CARG3 - | b <1 - |3: // Convert intermediate result to number and continue below. - | vmov s4, CARG1 - | bhi ->fff_fallback - | vldr d1, [RA] - | vcvt.f64.s32 d0, s4 - | b >6 - | - |4: - | vldr d0, [BASE] - | bhi ->fff_fallback - |5: // Handle numbers. - | ldrd CARG34, [RA] - | vldr d1, [RA] - | cmp RA, RB - | bhs ->fff_resd - | checktp CARG4, LJ_TISNUM - | bhs >7 - |6: - | vcmp.f64 d0, d1 - | vmrs - | add RA, RA, #8 - | vmov..fcond.f64 d0, d1 - | b <5 - |7: // Convert integer to number and continue above. - | vmov s4, CARG3 - | bhi ->fff_fallback - | vcvt.f64.s32 d1, s4 - | b <6 - | - |.else - | - | .ffunc_1 name - | checktp CARG2, LJ_TISNUM - | mov RA, #8 - | bne >4 - |1: // Handle integers. - | ldrd CARG34, [BASE, RA] - | cmp RA, RC - | bhs ->fff_restv - | checktp CARG4, LJ_TISNUM - | bne >3 - | cmp CARG1, CARG3 - | add RA, RA, #8 - | mov..cond CARG1, CARG3 - | b <1 - |3: // Convert intermediate result to number and continue below. - | bhi ->fff_fallback - | bl extern __aeabi_i2d - | ldrd CARG34, [BASE, RA] - | b >6 - | - |4: - | bhi ->fff_fallback - |5: // Handle numbers. - | ldrd CARG34, [BASE, RA] - | cmp RA, RC - | bhs ->fff_restv - | checktp CARG4, LJ_TISNUM - | bhs >7 - |6: - | bl extern __aeabi_cdcmple - | add RA, RA, #8 - | mov..fcond CARG1, CARG3 - | mov..fcond CARG2, CARG4 - | b <5 - |7: // Convert integer to number and continue above. - | bhi ->fff_fallback - | strd CARG12, TMPD - | mov CARG1, CARG3 - | bl extern __aeabi_i2d - | ldrd CARG34, TMPD - | b <6 - |.endif - |.endmacro - | - | math_minmax math_min, gt, hi - | math_minmax math_max, lt, lo - | - |//-- String library ----------------------------------------------------- - | - |.ffunc_1 string_len - | checkstr CARG2, ->fff_fallback - | ldr CARG1, STR:CARG1->len - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - | - |.ffunc string_byte // Only handle the 1-arg case here. - | ldrd CARG12, [BASE] - | ldr PC, [BASE, FRAME_PC] - | cmp NARGS8:RC, #8 - | checktpeq CARG2, LJ_TSTR // Need exactly 1 argument. - | bne ->fff_fallback - | ldr CARG3, STR:CARG1->len - | ldrb CARG1, STR:CARG1[1] // Access is always ok (NUL at end). - | mvn CARG2, #~LJ_TISNUM - | cmp CARG3, #0 - | moveq RC, #(0+1)*8 - | movne RC, #(1+1)*8 - | strd CARG12, [BASE, #-8] - | b ->fff_res - | - |.ffunc string_char // Only handle the 1-arg case here. - | ffgccheck - | ldrd CARG12, [BASE] - | ldr PC, [BASE, FRAME_PC] - | cmp NARGS8:RC, #8 // Need exactly 1 argument. - | checktpeq CARG2, LJ_TISNUM - | bicseq CARG4, CARG1, #255 - | mov CARG3, #1 - | bne ->fff_fallback - | str CARG1, TMPD - | mov CARG2, TMPDp // Points to stack. Little-endian. - |->fff_newstr: - | // CARG2 = str, CARG3 = len. - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | bl extern lj_str_new // (lua_State *L, char *str, size_t l) - | // Returns GCstr *. - | ldr BASE, L->base - | mvn CARG2, #~LJ_TSTR - | b ->fff_restv - | - |.ffunc string_sub - | ffgccheck - | ldrd CARG12, [BASE] - | ldrd CARG34, [BASE, #16] - | cmp NARGS8:RC, #16 - | mvn RB, #0 - | beq >1 - | blo ->fff_fallback - | checktp CARG4, LJ_TISNUM - | mov RB, CARG3 - | bne ->fff_fallback - |1: - | ldrd CARG34, [BASE, #8] - | checktp CARG2, LJ_TSTR - | ldreq CARG2, STR:CARG1->len - | checktpeq CARG4, LJ_TISNUM - | bne ->fff_fallback - | // CARG1 = str, CARG2 = str->len, CARG3 = start, RB = end - | add CARG4, CARG2, #1 - | cmp CARG3, #0 // if (start < 0) start += len+1 - | addlt CARG3, CARG3, CARG4 - | cmp CARG3, #1 // if (start < 1) start = 1 - | movlt CARG3, #1 - | cmp RB, #0 // if (end < 0) end += len+1 - | addlt RB, RB, CARG4 - | bic RB, RB, RB, asr #31 // if (end < 0) end = 0 - | cmp RB, CARG2 // if (end > len) end = len - | add CARG1, STR:CARG1, #sizeof(GCstr)-1 - | movgt RB, CARG2 - | add CARG2, CARG1, CARG3 - | subs CARG3, RB, CARG3 // len = end - start - | add CARG3, CARG3, #1 // len += 1 - | bge ->fff_newstr - |->fff_emptystr: - | sub STR:CARG1, DISPATCH, #-DISPATCH_GL(strempty) - | mvn CARG2, #~LJ_TSTR - | b ->fff_restv - | - |.ffunc string_rep // Only handle the 1-char case inline. - | ffgccheck - | ldrd CARG12, [BASE] - | ldrd CARG34, [BASE, #8] - | cmp NARGS8:RC, #16 - | bne ->fff_fallback // Exactly 2 arguments - | checktp CARG2, LJ_TSTR - | checktpeq CARG4, LJ_TISNUM - | bne ->fff_fallback - | subs CARG4, CARG3, #1 - | ldr CARG2, STR:CARG1->len - | blt ->fff_emptystr // Count <= 0? - | cmp CARG2, #1 - | blo ->fff_emptystr // Zero-length string? - | bne ->fff_fallback // Fallback for > 1-char strings. - | ldr RB, [DISPATCH, #DISPATCH_GL(tmpbuf.sz)] - | ldr CARG2, [DISPATCH, #DISPATCH_GL(tmpbuf.buf)] - | ldr CARG1, STR:CARG1[1] - | cmp RB, CARG3 - | blo ->fff_fallback - |1: // Fill buffer with char. - | strb CARG1, [CARG2, CARG4] - | subs CARG4, CARG4, #1 - | bge <1 - | b ->fff_newstr - | - |.ffunc string_reverse - | ffgccheck - | ldrd CARG12, [BASE] - | cmp NARGS8:RC, #8 - | blo ->fff_fallback - | checkstr CARG2, ->fff_fallback - | ldr CARG3, STR:CARG1->len - | ldr RB, [DISPATCH, #DISPATCH_GL(tmpbuf.sz)] - | ldr CARG2, [DISPATCH, #DISPATCH_GL(tmpbuf.buf)] - | mov CARG4, CARG3 - | add CARG1, STR:CARG1, #sizeof(GCstr) - | cmp RB, CARG3 - | blo ->fff_fallback - |1: // Reverse string copy. - | ldrb RB, [CARG1], #1 - | subs CARG4, CARG4, #1 - | blt ->fff_newstr - | strb RB, [CARG2, CARG4] - | b <1 - | - |.macro ffstring_case, name, lo - | .ffunc name - | ffgccheck - | ldrd CARG12, [BASE] - | cmp NARGS8:RC, #8 - | blo ->fff_fallback - | checkstr CARG2, ->fff_fallback - | ldr CARG3, STR:CARG1->len - | ldr RB, [DISPATCH, #DISPATCH_GL(tmpbuf.sz)] - | ldr CARG2, [DISPATCH, #DISPATCH_GL(tmpbuf.buf)] - | mov CARG4, #0 - | add CARG1, STR:CARG1, #sizeof(GCstr) - | cmp RB, CARG3 - | blo ->fff_fallback - |1: // ASCII case conversion. - | ldrb RB, [CARG1, CARG4] - | cmp CARG4, CARG3 - | bhs ->fff_newstr - | sub RC, RB, #lo - | cmp RC, #26 - | eorlo RB, RB, #0x20 - | strb RB, [CARG2, CARG4] - | add CARG4, CARG4, #1 - | b <1 - |.endmacro - | - |ffstring_case string_lower, 65 - |ffstring_case string_upper, 97 - | - |//-- Table library ------------------------------------------------------ - | - |.ffunc_1 table_getn - | checktab CARG2, ->fff_fallback - | .IOS mov RA, BASE - | bl extern lj_tab_len // (GCtab *t) - | // Returns uint32_t (but less than 2^31). - | .IOS mov BASE, RA - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - | - |//-- Bit library -------------------------------------------------------- - | - |// FP number to bit conversion for soft-float. Clobbers r0-r3. - |->vm_tobit_fb: - | bhi ->fff_fallback - |->vm_tobit: - | lsl RB, CARG2, #1 - | adds RB, RB, #0x00200000 - | movpl CARG1, #0 // |x| < 1? - | bxpl lr - | mvn CARG4, #0x3e0 - | subs RB, CARG4, RB, asr #21 - | bmi >1 // |x| >= 2^32? - | lsl CARG4, CARG2, #11 - | orr CARG4, CARG4, #0x80000000 - | orr CARG4, CARG4, CARG1, lsr #21 - | cmp CARG2, #0 - | lsr CARG1, CARG4, RB - | rsblt CARG1, CARG1, #0 - | bx lr - |1: - | add RB, RB, #21 - | lsr CARG4, CARG1, RB - | rsb RB, RB, #20 - | lsl CARG1, CARG2, #12 - | cmp CARG2, #0 - | orr CARG1, CARG4, CARG1, lsl RB - | rsblt CARG1, CARG1, #0 - | bx lr - | - |.macro .ffunc_bit, name - | .ffunc_1 bit_..name - | checktp CARG2, LJ_TISNUM - | blne ->vm_tobit_fb - |.endmacro - | - |.ffunc_bit tobit - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - | - |.macro .ffunc_bit_op, name, ins - | .ffunc_bit name - | mov CARG3, CARG1 - | mov RA, #8 - |1: - | ldrd CARG12, [BASE, RA] - | cmp RA, NARGS8:RC - | add RA, RA, #8 - | bge >2 - | checktp CARG2, LJ_TISNUM - | blne ->vm_tobit_fb - | ins CARG3, CARG3, CARG1 - | b <1 - |.endmacro - | - |.ffunc_bit_op band, and - |.ffunc_bit_op bor, orr - |.ffunc_bit_op bxor, eor - | - |2: - | mvn CARG4, #~LJ_TISNUM - | ldr PC, [BASE, FRAME_PC] - | strd CARG34, [BASE, #-8] - | b ->fff_res1 - | - |.ffunc_bit bswap - | eor CARG3, CARG1, CARG1, ror #16 - | bic CARG3, CARG3, #0x00ff0000 - | ror CARG1, CARG1, #8 - | mvn CARG2, #~LJ_TISNUM - | eor CARG1, CARG1, CARG3, lsr #8 - | b ->fff_restv - | - |.ffunc_bit bnot - | mvn CARG1, CARG1 - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - | - |.macro .ffunc_bit_sh, name, ins, shmod - | .ffunc bit_..name - | ldrd CARG12, [BASE, #8] - | cmp NARGS8:RC, #16 - | blo ->fff_fallback - | checktp CARG2, LJ_TISNUM - | blne ->vm_tobit_fb - |.if shmod == 0 - | and RA, CARG1, #31 - |.else - | rsb RA, CARG1, #0 - |.endif - | ldrd CARG12, [BASE] - | checktp CARG2, LJ_TISNUM - | blne ->vm_tobit_fb - | ins CARG1, CARG1, RA - | mvn CARG2, #~LJ_TISNUM - | b ->fff_restv - |.endmacro - | - |.ffunc_bit_sh lshift, lsl, 0 - |.ffunc_bit_sh rshift, lsr, 0 - |.ffunc_bit_sh arshift, asr, 0 - |.ffunc_bit_sh rol, ror, 1 - |.ffunc_bit_sh ror, ror, 0 - | - |//----------------------------------------------------------------------- - | - |->fff_fallback: // Call fast function fallback handler. - | // BASE = new base, RC = nargs*8 - | ldr CARG3, [BASE, FRAME_FUNC] - | ldr CARG2, L->maxstack - | add CARG1, BASE, NARGS8:RC - | ldr PC, [BASE, FRAME_PC] // Fallback may overwrite PC. - | str CARG1, L->top - | ldr CARG3, CFUNC:CARG3->f - | str BASE, L->base - | add CARG1, CARG1, #8*LUA_MINSTACK - | str PC, SAVE_PC // Redundant (but a defined value). - | cmp CARG1, CARG2 - | mov CARG1, L - | bhi >5 // Need to grow stack. - | blx CARG3 // (lua_State *L) - | // Either throws an error, or recovers and returns -1, 0 or nresults+1. - | ldr BASE, L->base - | cmp CRET1, #0 - | lsl RC, CRET1, #3 - | sub RA, BASE, #8 - | bgt ->fff_res // Returned nresults+1? - |1: // Returned 0 or -1: retry fast path. - | ldr CARG1, L->top - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] - | sub NARGS8:RC, CARG1, BASE - | bne ->vm_call_tail // Returned -1? - | ins_callt // Returned 0: retry fast path. - | - |// Reconstruct previous base for vmeta_call during tailcall. - |->vm_call_tail: - | ands CARG1, PC, #FRAME_TYPE - | bic CARG2, PC, #FRAME_TYPEP - | ldreq INS, [PC, #-4] - | andeq CARG2, MASKR8, INS, lsr #5 // Conditional decode_RA8. - | addeq CARG2, CARG2, #8 - | sub RB, BASE, CARG2 - | b ->vm_call_dispatch // Resolve again for tailcall. - | - |5: // Grow stack for fallback handler. - | mov CARG2, #LUA_MINSTACK - | bl extern lj_state_growstack // (lua_State *L, int n) - | ldr BASE, L->base - | cmp CARG1, CARG1 // Set zero-flag to force retry. - | b <1 - | - |->fff_gcstep: // Call GC step function. - | // BASE = new base, RC = nargs*8 - | mov RA, lr - | str BASE, L->base - | add CARG2, BASE, NARGS8:RC - | str PC, SAVE_PC // Redundant (but a defined value). - | str CARG2, L->top - | mov CARG1, L - | bl extern lj_gc_step // (lua_State *L) - | ldr BASE, L->base - | mov lr, RA // Help return address predictor. - | ldr CFUNC:CARG3, [BASE, FRAME_FUNC] - | bx lr - | - |//----------------------------------------------------------------------- - |//-- Special dispatch targets ------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_record: // Dispatch target for recording phase. - |.if JIT - | ldrb CARG1, [DISPATCH, #DISPATCH_GL(hookmask)] - | tst CARG1, #HOOK_VMEVENT // No recording while in vmevent. - | bne >5 - | // Decrement the hookcount for consistency, but always do the call. - | ldr CARG2, [DISPATCH, #DISPATCH_GL(hookcount)] - | tst CARG1, #HOOK_ACTIVE - | bne >1 - | sub CARG2, CARG2, #1 - | tst CARG1, #LUA_MASKLINE|LUA_MASKCOUNT - | strne CARG2, [DISPATCH, #DISPATCH_GL(hookcount)] - | b >1 - |.endif - | - |->vm_rethook: // Dispatch target for return hooks. - | ldrb CARG1, [DISPATCH, #DISPATCH_GL(hookmask)] - | tst CARG1, #HOOK_ACTIVE // Hook already active? - | beq >1 - |5: // Re-dispatch to static ins. - | decode_OP OP, INS - | add OP, DISPATCH, OP, lsl #2 - | ldr pc, [OP, #GG_DISP2STATIC] - | - |->vm_inshook: // Dispatch target for instr/line hooks. - | ldrb CARG1, [DISPATCH, #DISPATCH_GL(hookmask)] - | ldr CARG2, [DISPATCH, #DISPATCH_GL(hookcount)] - | tst CARG1, #HOOK_ACTIVE // Hook already active? - | bne <5 - | tst CARG1, #LUA_MASKLINE|LUA_MASKCOUNT - | beq <5 - | subs CARG2, CARG2, #1 - | str CARG2, [DISPATCH, #DISPATCH_GL(hookcount)] - | beq >1 - | tst CARG1, #LUA_MASKLINE - | beq <5 - |1: - | mov CARG1, L - | str BASE, L->base - | mov CARG2, PC - | // SAVE_PC must hold the _previous_ PC. The callee updates it with PC. - | bl extern lj_dispatch_ins // (lua_State *L, const BCIns *pc) - |3: - | ldr BASE, L->base - |4: // Re-dispatch to static ins. - | ldrb OP, [PC, #-4] - | ldr INS, [PC, #-4] - | add OP, DISPATCH, OP, lsl #2 - | ldr OP, [OP, #GG_DISP2STATIC] - | decode_RA8 RA, INS - | decode_RD RC, INS - | bx OP - | - |->cont_hook: // Continue from hook yield. - | ldr CARG1, [CARG4, #-24] - | add PC, PC, #4 - | str CARG1, SAVE_MULTRES // Restore MULTRES for *M ins. - | b <4 - | - |->vm_hotloop: // Hot loop counter underflow. - |.if JIT - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] // Same as curr_topL(L). - | sub CARG1, DISPATCH, #-GG_DISP2J - | str PC, SAVE_PC - | ldr CARG3, LFUNC:CARG3->field_pc - | mov CARG2, PC - | str L, [DISPATCH, #DISPATCH_J(L)] - | ldrb CARG3, [CARG3, #PC2PROTO(framesize)] - | str BASE, L->base - | add CARG3, BASE, CARG3, lsl #3 - | str CARG3, L->top - | bl extern lj_trace_hot // (jit_State *J, const BCIns *pc) - | b <3 - |.endif - | - |->vm_callhook: // Dispatch target for call hooks. - | mov CARG2, PC - |.if JIT - | b >1 - |.endif - | - |->vm_hotcall: // Hot call counter underflow. - |.if JIT - | orr CARG2, PC, #1 - |1: - |.endif - | add CARG4, BASE, RC - | str PC, SAVE_PC - | mov CARG1, L - | str BASE, L->base - | sub RA, RA, BASE - | str CARG4, L->top - | bl extern lj_dispatch_call // (lua_State *L, const BCIns *pc) - | // Returns ASMFunction. - | ldr BASE, L->base - | ldr CARG4, L->top - | mov CARG2, #0 - | add RA, BASE, RA - | sub NARGS8:RC, CARG4, BASE - | str CARG2, SAVE_PC // Invalidate for subsequent line hook. - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] - | ldr INS, [PC, #-4] - | bx CRET1 - | - |//----------------------------------------------------------------------- - |//-- Trace exit handler ------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_exit_handler: - |.if JIT - | sub sp, sp, #12 - | push {r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12} - | ldr CARG1, [sp, #64] // Load original value of lr. - | ldr DISPATCH, [lr] // Load DISPATCH. - | add CARG3, sp, #64 // Recompute original value of sp. - | mv_vmstate CARG4, EXIT - | str CARG3, [sp, #52] // Store sp in RID_SP - | st_vmstate CARG4 - | ldr CARG2, [CARG1, #-4]! // Get exit instruction. - | str CARG1, [sp, #56] // Store exit pc in RID_LR and RID_PC. - | str CARG1, [sp, #60] - |.if FPU - | vpush {d0-d15} - |.endif - | lsl CARG2, CARG2, #8 - | add CARG1, CARG1, CARG2, asr #6 - | ldr CARG2, [lr, #4] // Load exit stub group offset. - | sub CARG1, CARG1, lr - | ldr L, [DISPATCH, #DISPATCH_GL(jit_L)] - | add CARG1, CARG2, CARG1, lsr #2 // Compute exit number. - | ldr BASE, [DISPATCH, #DISPATCH_GL(jit_base)] - | str CARG1, [DISPATCH, #DISPATCH_J(exitno)] - | mov CARG4, #0 - | str L, [DISPATCH, #DISPATCH_J(L)] - | str BASE, L->base - | str CARG4, [DISPATCH, #DISPATCH_GL(jit_L)] - | sub CARG1, DISPATCH, #-GG_DISP2J - | mov CARG2, sp - | bl extern lj_trace_exit // (jit_State *J, ExitState *ex) - | // Returns MULTRES (unscaled) or negated error code. - | ldr CARG2, L->cframe - | ldr BASE, L->base - | bic CARG2, CARG2, #~CFRAME_RAWMASK // Use two steps: bic sp is deprecated. - | mov sp, CARG2 - | ldr PC, SAVE_PC // Get SAVE_PC. - | str L, SAVE_L // Set SAVE_L (on-trace resume/yield). - | b >1 - |.endif - |->vm_exit_interp: - | // CARG1 = MULTRES or negated error code, BASE, PC and DISPATCH set. - |.if JIT - | ldr L, SAVE_L - |1: - | cmp CARG1, #0 - | blt >3 // Check for error from exit. - | lsl RC, CARG1, #3 - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | str RC, SAVE_MULTRES - | mov CARG3, #0 - | ldr CARG2, LFUNC:CARG2->field_pc - | str CARG3, [DISPATCH, #DISPATCH_GL(jit_L)] - | mv_vmstate CARG4, INTERP - | ldr KBASE, [CARG2, #PC2PROTO(k)] - | // Modified copy of ins_next which handles function header dispatch, too. - | ldrb OP, [PC] - | mov MASKR8, #255 - | ldr INS, [PC], #4 - | lsl MASKR8, MASKR8, #3 // MASKR8 = 255*8. - | st_vmstate CARG4 - | cmp OP, #BC_FUNCF // Function header? - | ldr OP, [DISPATCH, OP, lsl #2] - | decode_RA8 RA, INS - | lsrlo RC, INS, #16 // No: Decode operands A*8 and D. - | subhs RC, RC, #8 - | addhs RA, RA, BASE // Yes: RA = BASE+framesize*8, RC = nargs*8 - | bx OP - | - |3: // Rethrow error from the right C frame. - | rsb CARG2, CARG1, #0 - | mov CARG1, L - | bl extern lj_err_throw // (lua_State *L, int errcode) - |.endif - | - |//----------------------------------------------------------------------- - |//-- Math helper functions ---------------------------------------------- - |//----------------------------------------------------------------------- - | - |// FP value rounding. Called from JIT code. - |// - |// double lj_vm_floor/ceil/trunc(double x); - |.macro vm_round, func, hf - |.if hf == 1 - | vmov CARG1, CARG2, d0 - |.endif - | lsl CARG3, CARG2, #1 - | adds RB, CARG3, #0x00200000 - | bpl >2 // |x| < 1? - | mvn CARG4, #0x3cc - | subs RB, CARG4, RB, asr #21 // 2^0: RB = 51, 2^51: RB = 0. - | bxlo lr // |x| >= 2^52: done. - | mvn CARG4, #1 - | bic CARG3, CARG1, CARG4, lsl RB // ztest = lo & ~lomask - | and CARG1, CARG1, CARG4, lsl RB // lo &= lomask - | subs RB, RB, #32 - | bicpl CARG4, CARG2, CARG4, lsl RB // |x| <= 2^20: ztest |= hi & ~himask - | orrpl CARG3, CARG3, CARG4 - | mvnpl CARG4, #1 - | andpl CARG2, CARG2, CARG4, lsl RB // |x| <= 2^20: hi &= himask - |.if "func" == "floor" - | tst CARG3, CARG2, asr #31 // iszero = ((ztest & signmask) == 0) - |.else - | bics CARG3, CARG3, CARG2, asr #31 // iszero = ((ztest & ~signmask) == 0) - |.endif - |.if hf == 1 - | vmoveq d0, CARG1, CARG2 - |.endif - | bxeq lr // iszero: done. - | mvn CARG4, #1 - | cmp RB, #0 - | lslpl CARG3, CARG4, RB - | mvnmi CARG3, #0 - | add RB, RB, #32 - | subs CARG1, CARG1, CARG4, lsl RB // lo = lo-lomask - | sbc CARG2, CARG2, CARG3 // hi = hi-himask+carry - |.if hf == 1 - | vmov d0, CARG1, CARG2 - |.endif - | bx lr - | - |2: // |x| < 1: - | bxcs lr // |x| is not finite. - | orr CARG3, CARG3, CARG1 // ztest = (2*hi) | lo - |.if "func" == "floor" - | tst CARG3, CARG2, asr #31 // iszero = ((ztest & signmask) == 0) - |.else - | bics CARG3, CARG3, CARG2, asr #31 // iszero = ((ztest & ~signmask) == 0) - |.endif - | mov CARG1, #0 // lo = 0 - | and CARG2, CARG2, #0x80000000 - | ldrne CARG4, <9 // hi = sign(x) | (iszero ? 0.0 : 1.0) - | orrne CARG2, CARG2, CARG4 - |.if hf == 1 - | vmov d0, CARG1, CARG2 - |.endif - | bx lr - |.endmacro - | - |9: - | .long 0x3ff00000 // hiword(+1.0) - | - |->vm_floor: - |.if HFABI - | vm_round floor, 1 - |.endif - |->vm_floor_sf: - | vm_round floor, 0 - | - |->vm_ceil: - |.if HFABI - | vm_round ceil, 1 - |.endif - |->vm_ceil_sf: - | vm_round ceil, 0 - | - |.macro vm_trunc, hf - |.if JIT - |.if hf == 1 - | vmov CARG1, CARG2, d0 - |.endif - | lsl CARG3, CARG2, #1 - | adds RB, CARG3, #0x00200000 - | andpl CARG2, CARG2, #0x80000000 // |x| < 1? hi = sign(x), lo = 0. - | movpl CARG1, #0 - |.if hf == 1 - | vmovpl d0, CARG1, CARG2 - |.endif - | bxpl lr - | mvn CARG4, #0x3cc - | subs RB, CARG4, RB, asr #21 // 2^0: RB = 51, 2^51: RB = 0. - | bxlo lr // |x| >= 2^52: already done. - | mvn CARG4, #1 - | and CARG1, CARG1, CARG4, lsl RB // lo &= lomask - | subs RB, RB, #32 - | andpl CARG2, CARG2, CARG4, lsl RB // |x| <= 2^20: hi &= himask - |.if hf == 1 - | vmov d0, CARG1, CARG2 - |.endif - | bx lr - |.endif - |.endmacro - | - |->vm_trunc: - |.if HFABI - | vm_trunc 1 - |.endif - |->vm_trunc_sf: - | vm_trunc 0 - | - | // double lj_vm_mod(double dividend, double divisor); - |->vm_mod: - |.if FPU - | // Special calling convention. Also, RC (r11) is not preserved. - | vdiv.f64 d0, d6, d7 - | mov RC, lr - | vmov CARG1, CARG2, d0 - | bl ->vm_floor_sf - | vmov d0, CARG1, CARG2 - | vmul.f64 d0, d0, d7 - | mov lr, RC - | vsub.f64 d6, d6, d0 - | bx lr - |.else - | push {r0, r1, r2, r3, r4, lr} - | bl extern __aeabi_ddiv - | bl ->vm_floor_sf - | ldrd CARG34, [sp, #8] - | bl extern __aeabi_dmul - | ldrd CARG34, [sp] - | eor CARG2, CARG2, #0x80000000 - | bl extern __aeabi_dadd - | add sp, sp, #20 - | pop {pc} - |.endif - | - | // int lj_vm_modi(int dividend, int divisor); - |->vm_modi: - | ands RB, CARG1, #0x80000000 - | rsbmi CARG1, CARG1, #0 // a = |dividend| - | eor RB, RB, CARG2, asr #1 // Keep signdiff and sign(divisor). - | cmp CARG2, #0 - | rsbmi CARG2, CARG2, #0 // b = |divisor| - | subs CARG4, CARG2, #1 - | cmpne CARG1, CARG2 - | moveq CARG1, #0 // if (b == 1 || a == b) a = 0 - | tsthi CARG2, CARG4 - | andeq CARG1, CARG1, CARG4 // else if ((b & (b-1)) == 0) a &= b-1 - | bls >1 - | // Use repeated subtraction to get the remainder. - | clz CARG3, CARG1 - | clz CARG4, CARG2 - | sub CARG4, CARG4, CARG3 - | rsbs CARG3, CARG4, #31 // entry = (31-(clz(b)-clz(a)))*8 - | addne pc, pc, CARG3, lsl #3 // Duff's device. - | nop - { - int i; - for (i = 31; i >= 0; i--) { - | cmp CARG1, CARG2, lsl #i - | subhs CARG1, CARG1, CARG2, lsl #i - } - } - |1: - | cmp CARG1, #0 - | cmpne RB, #0 - | submi CARG1, CARG1, CARG2 // if (y != 0 && signdiff) y = y - b - | eors CARG2, CARG1, RB, lsl #1 - | rsbmi CARG1, CARG1, #0 // if (sign(divisor) != sign(y)) y = -y - | bx lr - | - |//----------------------------------------------------------------------- - |//-- Miscellaneous functions -------------------------------------------- - |//----------------------------------------------------------------------- - | - |//----------------------------------------------------------------------- - |//-- FFI helper functions ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |// Handler for callback functions. - |// Saveregs already performed. Callback slot number in [sp], g in r12. - |->vm_ffi_callback: - |.if FFI - |.type CTSTATE, CTState, PC - | ldr CTSTATE, GL:r12->ctype_state - | add DISPATCH, r12, #GG_G2DISP - |.if FPU - | str r4, SAVE_R4 - | add r4, sp, CFRAME_SPACE+4+8*8 - | vstmdb r4!, {d8-d15} - |.endif - |.if HFABI - | add r12, CTSTATE, #offsetof(CTState, cb.fpr[8]) - |.endif - | strd CARG34, CTSTATE->cb.gpr[2] - | strd CARG12, CTSTATE->cb.gpr[0] - |.if HFABI - | vstmdb r12!, {d0-d7} - |.endif - | ldr CARG4, [sp] - | add CARG3, sp, #CFRAME_SIZE - | mov CARG1, CTSTATE - | lsr CARG4, CARG4, #3 - | str CARG3, CTSTATE->cb.stack - | mov CARG2, sp - | str CARG4, CTSTATE->cb.slot - | str CTSTATE, SAVE_PC // Any value outside of bytecode is ok. - | bl extern lj_ccallback_enter // (CTState *cts, void *cf) - | // Returns lua_State *. - | ldr BASE, L:CRET1->base - | mv_vmstate CARG2, INTERP - | ldr RC, L:CRET1->top - | mov MASKR8, #255 - | ldr LFUNC:CARG3, [BASE, FRAME_FUNC] - | mov L, CRET1 - | sub RC, RC, BASE - | lsl MASKR8, MASKR8, #3 // MASKR8 = 255*8. - | st_vmstate CARG2 - | ins_callt - |.endif - | - |->cont_ffi_callback: // Return from FFI callback. - |.if FFI - | ldr CTSTATE, [DISPATCH, #DISPATCH_GL(ctype_state)] - | str BASE, L->base - | str CARG4, L->top - | str L, CTSTATE->L - | mov CARG1, CTSTATE - | mov CARG2, RA - | bl extern lj_ccallback_leave // (CTState *cts, TValue *o) - | ldrd CARG12, CTSTATE->cb.gpr[0] - |.if HFABI - | vldr d0, CTSTATE->cb.fpr[0] - |.endif - | b ->vm_leave_unw - |.endif - | - |->vm_ffi_call: // Call C function via FFI. - | // Caveat: needs special frame unwinding, see below. - |.if FFI - | .type CCSTATE, CCallState, r4 - | push {CCSTATE, r5, r11, lr} - | mov CCSTATE, CARG1 - | ldr CARG1, CCSTATE:CARG1->spadj - | ldrb CARG2, CCSTATE->nsp - | add CARG3, CCSTATE, #offsetof(CCallState, stack) - |.if HFABI - | add RB, CCSTATE, #offsetof(CCallState, fpr[0]) - |.endif - | mov r11, sp - | sub sp, sp, CARG1 // Readjust stack. - | subs CARG2, CARG2, #1 - |.if HFABI - | vldm RB, {d0-d7} - |.endif - | ldr RB, CCSTATE->func - | bmi >2 - |1: // Copy stack slots. - | ldr CARG4, [CARG3, CARG2, lsl #2] - | str CARG4, [sp, CARG2, lsl #2] - | subs CARG2, CARG2, #1 - | bpl <1 - |2: - | ldrd CARG12, CCSTATE->gpr[0] - | ldrd CARG34, CCSTATE->gpr[2] - | blx RB - | mov sp, r11 - |.if HFABI - | add r12, CCSTATE, #offsetof(CCallState, fpr[4]) - |.endif - | strd CRET1, CCSTATE->gpr[0] - |.if HFABI - | vstmdb r12!, {d0-d3} - |.endif - | pop {CCSTATE, r5, r11, pc} - |.endif - |// Note: vm_ffi_call must be the last function in this object file! - | - |//----------------------------------------------------------------------- -} - -/* Generate the code for a single instruction. */ -static void build_ins(BuildCtx *ctx, BCOp op, int defop) -{ - int vk = 0; - |=>defop: - - switch (op) { - - /* -- Comparison ops ---------------------------------------------------- */ - - /* Remember: all ops branch for a true comparison, fall through otherwise. */ - - case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - | // RA = src1*8, RC = src2, JMP with RC = target - | lsl RC, RC, #3 - | ldrd CARG12, [RA, BASE]! - | ldrh RB, [PC, #2] - | ldrd CARG34, [RC, BASE]! - | add PC, PC, #4 - | add RB, PC, RB, lsl #2 - | checktp CARG2, LJ_TISNUM - | bne >3 - | checktp CARG4, LJ_TISNUM - | bne >4 - | cmp CARG1, CARG3 - if (op == BC_ISLT) { - | sublt PC, RB, #0x20000 - } else if (op == BC_ISGE) { - | subge PC, RB, #0x20000 - } else if (op == BC_ISLE) { - | suble PC, RB, #0x20000 - } else { - | subgt PC, RB, #0x20000 - } - |1: - | ins_next - | - |3: // CARG12 is not an integer. - |.if FPU - | vldr d0, [RA] - | bhi ->vmeta_comp - | // d0 is a number. - | checktp CARG4, LJ_TISNUM - | vldr d1, [RC] - | blo >5 - | bhi ->vmeta_comp - | // d0 is a number, CARG3 is an integer. - | vmov s4, CARG3 - | vcvt.f64.s32 d1, s4 - | b >5 - |4: // CARG1 is an integer, CARG34 is not an integer. - | vldr d1, [RC] - | bhi ->vmeta_comp - | // CARG1 is an integer, d1 is a number. - | vmov s4, CARG1 - | vcvt.f64.s32 d0, s4 - |5: // d0 and d1 are numbers. - | vcmp.f64 d0, d1 - | vmrs - | // To preserve NaN semantics GE/GT branch on unordered, but LT/LE don't. - if (op == BC_ISLT) { - | sublo PC, RB, #0x20000 - } else if (op == BC_ISGE) { - | subhs PC, RB, #0x20000 - } else if (op == BC_ISLE) { - | subls PC, RB, #0x20000 - } else { - | subhi PC, RB, #0x20000 - } - | b <1 - |.else - | bhi ->vmeta_comp - | // CARG12 is a number. - | checktp CARG4, LJ_TISNUM - | movlo RA, RB // Save RB. - | blo >5 - | bhi ->vmeta_comp - | // CARG12 is a number, CARG3 is an integer. - | mov CARG1, CARG3 - | mov RC, RA - | mov RA, RB // Save RB. - | bl extern __aeabi_i2d - | mov CARG3, CARG1 - | mov CARG4, CARG2 - | ldrd CARG12, [RC] // Restore first operand. - | b >5 - |4: // CARG1 is an integer, CARG34 is not an integer. - | bhi ->vmeta_comp - | // CARG1 is an integer, CARG34 is a number. - | mov RA, RB // Save RB. - | bl extern __aeabi_i2d - | ldrd CARG34, [RC] // Restore second operand. - |5: // CARG12 and CARG34 are numbers. - | bl extern __aeabi_cdcmple - | // To preserve NaN semantics GE/GT branch on unordered, but LT/LE don't. - if (op == BC_ISLT) { - | sublo PC, RA, #0x20000 - } else if (op == BC_ISGE) { - | subhs PC, RA, #0x20000 - } else if (op == BC_ISLE) { - | subls PC, RA, #0x20000 - } else { - | subhi PC, RA, #0x20000 - } - | b <1 - |.endif - break; - - case BC_ISEQV: case BC_ISNEV: - vk = op == BC_ISEQV; - | // RA = src1*8, RC = src2, JMP with RC = target - | lsl RC, RC, #3 - | ldrd CARG12, [RA, BASE]! - | ldrh RB, [PC, #2] - | ldrd CARG34, [RC, BASE]! - | add PC, PC, #4 - | add RB, PC, RB, lsl #2 - | checktp CARG2, LJ_TISNUM - | cmnls CARG4, #-LJ_TISNUM - if (vk) { - | bls ->BC_ISEQN_Z - } else { - | bls ->BC_ISNEN_Z - } - | // Either or both types are not numbers. - |.if FFI - | checktp CARG2, LJ_TCDATA - | checktpne CARG4, LJ_TCDATA - | beq ->vmeta_equal_cd - |.endif - | cmp CARG2, CARG4 // Compare types. - | bne >2 // Not the same type? - | checktp CARG2, LJ_TISPRI - | bhs >1 // Same type and primitive type? - | - | // Same types and not a primitive type. Compare GCobj or pvalue. - | cmp CARG1, CARG3 - if (vk) { - | bne >3 // Different GCobjs or pvalues? - |1: // Branch if same. - | sub PC, RB, #0x20000 - |2: // Different. - | ins_next - |3: - | checktp CARG2, LJ_TISTABUD - | bhi <2 // Different objects and not table/ud? - } else { - | beq >1 // Same GCobjs or pvalues? - | checktp CARG2, LJ_TISTABUD - | bhi >2 // Different objects and not table/ud? - } - | // Different tables or userdatas. Need to check __eq metamethod. - | // Field metatable must be at same offset for GCtab and GCudata! - | ldr TAB:RA, TAB:CARG1->metatable - | cmp TAB:RA, #0 - if (vk) { - | beq <2 // No metatable? - } else { - | beq >2 // No metatable? - } - | ldrb RA, TAB:RA->nomm - | mov CARG4, #1-vk // ne = 0 or 1. - | mov CARG2, CARG1 - | tst RA, #1<vmeta_equal // 'no __eq' flag not set? - if (vk) { - | b <2 - } else { - |2: // Branch if different. - | sub PC, RB, #0x20000 - |1: // Same. - | ins_next - } - break; - - case BC_ISEQS: case BC_ISNES: - vk = op == BC_ISEQS; - | // RA = src*8, RC = str_const (~), JMP with RC = target - | mvn RC, RC - | ldrd CARG12, [BASE, RA] - | ldrh RB, [PC, #2] - | ldr STR:CARG3, [KBASE, RC, lsl #2] - | add PC, PC, #4 - | add RB, PC, RB, lsl #2 - | checktp CARG2, LJ_TSTR - |.if FFI - | bne >7 - | cmp CARG1, CARG3 - |.else - | cmpeq CARG1, CARG3 - |.endif - if (vk) { - | subeq PC, RB, #0x20000 - |1: - } else { - |1: - | subne PC, RB, #0x20000 - } - | ins_next - | - |.if FFI - |7: - | checktp CARG2, LJ_TCDATA - | bne <1 - | b ->vmeta_equal_cd - |.endif - break; - - case BC_ISEQN: case BC_ISNEN: - vk = op == BC_ISEQN; - | // RA = src*8, RC = num_const (~), JMP with RC = target - | lsl RC, RC, #3 - | ldrd CARG12, [RA, BASE]! - | ldrh RB, [PC, #2] - | ldrd CARG34, [RC, KBASE]! - | add PC, PC, #4 - | add RB, PC, RB, lsl #2 - if (vk) { - |->BC_ISEQN_Z: - } else { - |->BC_ISNEN_Z: - } - | checktp CARG2, LJ_TISNUM - | bne >3 - | checktp CARG4, LJ_TISNUM - | bne >4 - | cmp CARG1, CARG3 - if (vk) { - | subeq PC, RB, #0x20000 - |1: - } else { - |1: - | subne PC, RB, #0x20000 - } - |2: - | ins_next - | - |3: // CARG12 is not an integer. - |.if FFI - | bhi >7 - |.else - if (!vk) { - | subhi PC, RB, #0x20000 - } - | bhi <2 - |.endif - |.if FPU - | checktp CARG4, LJ_TISNUM - | vmov s4, CARG3 - | vldr d0, [RA] - | vldrlo d1, [RC] - | vcvths.f64.s32 d1, s4 - | b >5 - |4: // CARG1 is an integer, d1 is a number. - | vmov s4, CARG1 - | vldr d1, [RC] - | vcvt.f64.s32 d0, s4 - |5: // d0 and d1 are numbers. - | vcmp.f64 d0, d1 - | vmrs - if (vk) { - | subeq PC, RB, #0x20000 - } else { - | subne PC, RB, #0x20000 - } - | b <2 - |.else - | // CARG12 is a number. - | checktp CARG4, LJ_TISNUM - | movlo RA, RB // Save RB. - | blo >5 - | // CARG12 is a number, CARG3 is an integer. - | mov CARG1, CARG3 - | mov RC, RA - |4: // CARG1 is an integer, CARG34 is a number. - | mov RA, RB // Save RB. - | bl extern __aeabi_i2d - | ldrd CARG34, [RC] // Restore other operand. - |5: // CARG12 and CARG34 are numbers. - | bl extern __aeabi_cdcmpeq - if (vk) { - | subeq PC, RA, #0x20000 - } else { - | subne PC, RA, #0x20000 - } - | b <2 - |.endif - | - |.if FFI - |7: - | checktp CARG2, LJ_TCDATA - | bne <1 - | b ->vmeta_equal_cd - |.endif - break; - - case BC_ISEQP: case BC_ISNEP: - vk = op == BC_ISEQP; - | // RA = src*8, RC = primitive_type (~), JMP with RC = target - | ldrd CARG12, [BASE, RA] - | ldrh RB, [PC, #2] - | add PC, PC, #4 - | mvn RC, RC - | add RB, PC, RB, lsl #2 - |.if FFI - | checktp CARG2, LJ_TCDATA - | beq ->vmeta_equal_cd - |.endif - | cmp CARG2, RC - if (vk) { - | subeq PC, RB, #0x20000 - } else { - | subne PC, RB, #0x20000 - } - | ins_next - break; - - /* -- Unary test and copy ops ------------------------------------------- */ - - case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - | // RA = dst*8 or unused, RC = src, JMP with RC = target - | add RC, BASE, RC, lsl #3 - | ldrh RB, [PC, #2] - | ldrd CARG12, [RC] - | add PC, PC, #4 - | add RB, PC, RB, lsl #2 - | checktp CARG2, LJ_TTRUE - if (op == BC_ISTC || op == BC_IST) { - | subls PC, RB, #0x20000 - if (op == BC_ISTC) { - | strdls CARG12, [BASE, RA] - } - } else { - | subhi PC, RB, #0x20000 - if (op == BC_ISFC) { - | strdhi CARG12, [BASE, RA] - } - } - | ins_next - break; - - /* -- Unary ops --------------------------------------------------------- */ - - case BC_MOV: - | // RA = dst*8, RC = src - | lsl RC, RC, #3 - | ins_next1 - | ldrd CARG12, [BASE, RC] - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - break; - case BC_NOT: - | // RA = dst*8, RC = src - | add RC, BASE, RC, lsl #3 - | ins_next1 - | ldr CARG1, [RC, #4] - | add RA, BASE, RA - | ins_next2 - | checktp CARG1, LJ_TTRUE - | mvnls CARG2, #~LJ_TFALSE - | mvnhi CARG2, #~LJ_TTRUE - | str CARG2, [RA, #4] - | ins_next3 - break; - case BC_UNM: - | // RA = dst*8, RC = src - | lsl RC, RC, #3 - | ldrd CARG12, [BASE, RC] - | ins_next1 - | ins_next2 - | checktp CARG2, LJ_TISNUM - | bhi ->vmeta_unm - | eorne CARG2, CARG2, #0x80000000 - | bne >5 - | rsbseq CARG1, CARG1, #0 - | ldrdvs CARG12, >9 - |5: - | strd CARG12, [BASE, RA] - | ins_next3 - | - |.align 8 - |9: - | .long 0x00000000, 0x41e00000 // 2^31. - break; - case BC_LEN: - | // RA = dst*8, RC = src - | lsl RC, RC, #3 - | ldrd CARG12, [BASE, RC] - | checkstr CARG2, >2 - | ldr CARG1, STR:CARG1->len - |1: - | mvn CARG2, #~LJ_TISNUM - | ins_next1 - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - |2: - | checktab CARG2, ->vmeta_len -#if LJ_52 - | ldr TAB:CARG3, TAB:CARG1->metatable - | cmp TAB:CARG3, #0 - | bne >9 - |3: -#endif - |->BC_LEN_Z: - | .IOS mov RC, BASE - | bl extern lj_tab_len // (GCtab *t) - | // Returns uint32_t (but less than 2^31). - | .IOS mov BASE, RC - | b <1 -#if LJ_52 - |9: - | ldrb CARG4, TAB:CARG3->nomm - | tst CARG4, #1<vmeta_len -#endif - break; - - /* -- Binary ops -------------------------------------------------------- */ - - |.macro ins_arithcheck, cond, ncond, target - ||if (vk == 1) { - | cmn CARG4, #-LJ_TISNUM - | cmn..cond CARG2, #-LJ_TISNUM - ||} else { - | cmn CARG2, #-LJ_TISNUM - | cmn..cond CARG4, #-LJ_TISNUM - ||} - | b..ncond target - |.endmacro - |.macro ins_arithcheck_int, target - | ins_arithcheck eq, ne, target - |.endmacro - |.macro ins_arithcheck_num, target - | ins_arithcheck lo, hs, target - |.endmacro - | - |.macro ins_arithpre - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8 - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - ||switch (vk) { - ||case 0: - | .if FPU - | ldrd CARG12, [RB, BASE]! - | ldrd CARG34, [RC, KBASE]! - | .else - | ldrd CARG12, [BASE, RB] - | ldrd CARG34, [KBASE, RC] - | .endif - || break; - ||case 1: - | .if FPU - | ldrd CARG34, [RB, BASE]! - | ldrd CARG12, [RC, KBASE]! - | .else - | ldrd CARG34, [BASE, RB] - | ldrd CARG12, [KBASE, RC] - | .endif - || break; - ||default: - | .if FPU - | ldrd CARG12, [RB, BASE]! - | ldrd CARG34, [RC, BASE]! - | .else - | ldrd CARG12, [BASE, RB] - | ldrd CARG34, [BASE, RC] - | .endif - || break; - ||} - |.endmacro - | - |.macro ins_arithpre_fpu, reg1, reg2 - |.if FPU - ||if (vk == 1) { - | vldr reg2, [RB] - | vldr reg1, [RC] - ||} else { - | vldr reg1, [RB] - | vldr reg2, [RC] - ||} - |.endif - |.endmacro - | - |.macro ins_arithpost_fpu, reg - | ins_next1 - | add RA, BASE, RA - | ins_next2 - | vstr reg, [RA] - | ins_next3 - |.endmacro - | - |.macro ins_arithfallback, ins - ||switch (vk) { - ||case 0: - | ins ->vmeta_arith_vn - || break; - ||case 1: - | ins ->vmeta_arith_nv - || break; - ||default: - | ins ->vmeta_arith_vv - || break; - ||} - |.endmacro - | - |.macro ins_arithdn, intins, fpins, fpcall - | ins_arithpre - |.if "intins" ~= "vm_modi" and not FPU - | ins_next1 - |.endif - | ins_arithcheck_int >5 - |.if "intins" == "smull" - | smull CARG1, RC, CARG3, CARG1 - | cmp RC, CARG1, asr #31 - | ins_arithfallback bne - |.elif "intins" == "vm_modi" - | movs CARG2, CARG3 - | ins_arithfallback beq - | bl ->vm_modi - | mvn CARG2, #~LJ_TISNUM - |.else - | intins CARG1, CARG1, CARG3 - | ins_arithfallback bvs - |.endif - |4: - |.if "intins" == "vm_modi" or FPU - | ins_next1 - |.endif - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - |5: // FP variant. - | ins_arithpre_fpu d6, d7 - | ins_arithfallback ins_arithcheck_num - |.if FPU - |.if "intins" == "vm_modi" - | bl fpcall - |.else - | fpins d6, d6, d7 - |.endif - | ins_arithpost_fpu d6 - |.else - | bl fpcall - |.if "intins" ~= "vm_modi" - | ins_next1 - |.endif - | b <4 - |.endif - |.endmacro - | - |.macro ins_arithfp, fpins, fpcall - | ins_arithpre - |.if "fpins" ~= "extern" or HFABI - | ins_arithpre_fpu d0, d1 - |.endif - | ins_arithfallback ins_arithcheck_num - |.if "fpins" == "extern" - | .IOS mov RC, BASE - | bl fpcall - | .IOS mov BASE, RC - |.elif FPU - | fpins d0, d0, d1 - |.else - | bl fpcall - |.endif - |.if ("fpins" ~= "extern" or HFABI) and FPU - | ins_arithpost_fpu d0 - |.else - | ins_next1 - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - |.endif - |.endmacro - - case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - | ins_arithdn adds, vadd.f64, extern __aeabi_dadd - break; - case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - | ins_arithdn subs, vsub.f64, extern __aeabi_dsub - break; - case BC_MULVN: case BC_MULNV: case BC_MULVV: - | ins_arithdn smull, vmul.f64, extern __aeabi_dmul - break; - case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - | ins_arithfp vdiv.f64, extern __aeabi_ddiv - break; - case BC_MODVN: case BC_MODNV: case BC_MODVV: - | ins_arithdn vm_modi, vm_mod, ->vm_mod - break; - case BC_POW: - | // NYI: (partial) integer arithmetic. - | ins_arithfp extern, extern pow - break; - - case BC_CAT: - | decode_RB8 RC, INS - | decode_RC8 RB, INS - | // RA = dst*8, RC = src_start*8, RB = src_end*8 (note: RB/RC swapped!) - | sub CARG3, RB, RC - | str BASE, L->base - | add CARG2, BASE, RB - |->BC_CAT_Z: - | // RA = dst*8, RC = src_start*8, CARG2 = top-1 - | mov CARG1, L - | str PC, SAVE_PC - | lsr CARG3, CARG3, #3 - | bl extern lj_meta_cat // (lua_State *L, TValue *top, int left) - | // Returns NULL (finished) or TValue * (metamethod). - | ldr BASE, L->base - | cmp CRET1, #0 - | bne ->vmeta_binop - | ldrd CARG34, [BASE, RC] - | ins_next1 - | ins_next2 - | strd CARG34, [BASE, RA] // Copy result to RA. - | ins_next3 - break; - - /* -- Constant ops ------------------------------------------------------ */ - - case BC_KSTR: - | // RA = dst*8, RC = str_const (~) - | mvn RC, RC - | ins_next1 - | ldr CARG1, [KBASE, RC, lsl #2] - | mvn CARG2, #~LJ_TSTR - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - break; - case BC_KCDATA: - |.if FFI - | // RA = dst*8, RC = cdata_const (~) - | mvn RC, RC - | ins_next1 - | ldr CARG1, [KBASE, RC, lsl #2] - | mvn CARG2, #~LJ_TCDATA - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - |.endif - break; - case BC_KSHORT: - | // RA = dst*8, (RC = int16_literal) - | mov CARG1, INS, asr #16 // Refetch sign-extended reg. - | mvn CARG2, #~LJ_TISNUM - | ins_next1 - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - break; - case BC_KNUM: - | // RA = dst*8, RC = num_const - | lsl RC, RC, #3 - | ins_next1 - | ldrd CARG12, [KBASE, RC] - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - break; - case BC_KPRI: - | // RA = dst*8, RC = primitive_type (~) - | add RA, BASE, RA - | mvn RC, RC - | ins_next1 - | ins_next2 - | str RC, [RA, #4] - | ins_next3 - break; - case BC_KNIL: - | // RA = base*8, RC = end - | add RA, BASE, RA - | add RC, BASE, RC, lsl #3 - | mvn CARG1, #~LJ_TNIL - | str CARG1, [RA, #4] - | add RA, RA, #8 - |1: - | str CARG1, [RA, #4] - | cmp RA, RC - | add RA, RA, #8 - | blt <1 - | ins_next_ - break; - - /* -- Upvalue and function ops ------------------------------------------ */ - - case BC_UGET: - | // RA = dst*8, RC = uvnum - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | lsl RC, RC, #2 - | add RC, RC, #offsetof(GCfuncL, uvptr) - | ldr UPVAL:CARG2, [LFUNC:CARG2, RC] - | ldr CARG2, UPVAL:CARG2->v - | ldrd CARG34, [CARG2] - | ins_next1 - | ins_next2 - | strd CARG34, [BASE, RA] - | ins_next3 - break; - case BC_USETV: - | // RA = uvnum*8, RC = src - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | lsr RA, RA, #1 - | add RA, RA, #offsetof(GCfuncL, uvptr) - | lsl RC, RC, #3 - | ldr UPVAL:CARG2, [LFUNC:CARG2, RA] - | ldrd CARG34, [BASE, RC] - | ldrb RB, UPVAL:CARG2->marked - | ldrb RC, UPVAL:CARG2->closed - | ldr CARG2, UPVAL:CARG2->v - | tst RB, #LJ_GC_BLACK // isblack(uv) - | add RB, CARG4, #-LJ_TISGCV - | cmpne RC, #0 - | strd CARG34, [CARG2] - | bne >2 // Upvalue is closed and black? - |1: - | ins_next - | - |2: // Check if new value is collectable. - | cmn RB, #-(LJ_TNUMX - LJ_TISGCV) - | ldrbhi RC, GCOBJ:CARG3->gch.marked - | bls <1 // tvisgcv(v) - | sub CARG1, DISPATCH, #-GG_DISP2G - | tst RC, #LJ_GC_WHITES - | // Crossed a write barrier. Move the barrier forward. - |.if IOS - | beq <1 - | mov RC, BASE - | bl extern lj_gc_barrieruv // (global_State *g, TValue *tv) - | mov BASE, RC - |.else - | blne extern lj_gc_barrieruv // (global_State *g, TValue *tv) - |.endif - | b <1 - break; - case BC_USETS: - | // RA = uvnum*8, RC = str_const (~) - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | lsr RA, RA, #1 - | add RA, RA, #offsetof(GCfuncL, uvptr) - | mvn RC, RC - | ldr UPVAL:CARG2, [LFUNC:CARG2, RA] - | ldr STR:CARG3, [KBASE, RC, lsl #2] - | ldrb RB, UPVAL:CARG2->marked - | ldrb RC, UPVAL:CARG2->closed - | ldr CARG2, UPVAL:CARG2->v - | mvn CARG4, #~LJ_TSTR - | tst RB, #LJ_GC_BLACK // isblack(uv) - | ldrb RB, STR:CARG3->marked - | strd CARG34, [CARG2] - | bne >2 - |1: - | ins_next - | - |2: // Check if string is white and ensure upvalue is closed. - | tst RB, #LJ_GC_WHITES // iswhite(str) - | cmpne RC, #0 - | sub CARG1, DISPATCH, #-GG_DISP2G - | // Crossed a write barrier. Move the barrier forward. - |.if IOS - | beq <1 - | mov RC, BASE - | bl extern lj_gc_barrieruv // (global_State *g, TValue *tv) - | mov BASE, RC - |.else - | blne extern lj_gc_barrieruv // (global_State *g, TValue *tv) - |.endif - | b <1 - break; - case BC_USETN: - | // RA = uvnum*8, RC = num_const - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | lsr RA, RA, #1 - | add RA, RA, #offsetof(GCfuncL, uvptr) - | lsl RC, RC, #3 - | ldr UPVAL:CARG2, [LFUNC:CARG2, RA] - | ldrd CARG34, [KBASE, RC] - | ldr CARG2, UPVAL:CARG2->v - | ins_next1 - | ins_next2 - | strd CARG34, [CARG2] - | ins_next3 - break; - case BC_USETP: - | // RA = uvnum*8, RC = primitive_type (~) - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | lsr RA, RA, #1 - | add RA, RA, #offsetof(GCfuncL, uvptr) - | ldr UPVAL:CARG2, [LFUNC:CARG2, RA] - | mvn RC, RC - | ldr CARG2, UPVAL:CARG2->v - | ins_next1 - | ins_next2 - | str RC, [CARG2, #4] - | ins_next3 - break; - - case BC_UCLO: - | // RA = level*8, RC = target - | ldr CARG3, L->openupval - | add RC, PC, RC, lsl #2 - | str BASE, L->base - | cmp CARG3, #0 - | sub PC, RC, #0x20000 - | beq >1 - | mov CARG1, L - | add CARG2, BASE, RA - | bl extern lj_func_closeuv // (lua_State *L, TValue *level) - | ldr BASE, L->base - |1: - | ins_next - break; - - case BC_FNEW: - | // RA = dst*8, RC = proto_const (~) (holding function prototype) - | mvn RC, RC - | str BASE, L->base - | ldr CARG2, [KBASE, RC, lsl #2] - | str PC, SAVE_PC - | ldr CARG3, [BASE, FRAME_FUNC] - | mov CARG1, L - | // (lua_State *L, GCproto *pt, GCfuncL *parent) - | bl extern lj_func_newL_gc - | // Returns GCfuncL *. - | ldr BASE, L->base - | mvn CARG2, #~LJ_TFUNC - | ins_next1 - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - break; - - /* -- Table ops --------------------------------------------------------- */ - - case BC_TNEW: - case BC_TDUP: - | // RA = dst*8, RC = (hbits|asize) | tab_const (~) - if (op == BC_TDUP) { - | mvn RC, RC - } - | ldr CARG3, [DISPATCH, #DISPATCH_GL(gc.total)] - | ldr CARG4, [DISPATCH, #DISPATCH_GL(gc.threshold)] - | str BASE, L->base - | str PC, SAVE_PC - | cmp CARG3, CARG4 - | mov CARG1, L - | bhs >5 - |1: - if (op == BC_TNEW) { - | lsl CARG2, RC, #21 - | lsr CARG3, RC, #11 - | asr RC, CARG2, #21 - | lsr CARG2, CARG2, #21 - | cmn RC, #1 - | addeq CARG2, CARG2, #2 - | bl extern lj_tab_new // (lua_State *L, int32_t asize, uint32_t hbits) - | // Returns GCtab *. - } else { - | ldr CARG2, [KBASE, RC, lsl #2] - | bl extern lj_tab_dup // (lua_State *L, Table *kt) - | // Returns GCtab *. - } - | ldr BASE, L->base - | mvn CARG2, #~LJ_TTAB - | ins_next1 - | ins_next2 - | strd CARG12, [BASE, RA] - | ins_next3 - |5: - | bl extern lj_gc_step_fixtop // (lua_State *L) - | mov CARG1, L - | b <1 - break; - - case BC_GGET: - | // RA = dst*8, RC = str_const (~) - case BC_GSET: - | // RA = dst*8, RC = str_const (~) - | ldr LFUNC:CARG2, [BASE, FRAME_FUNC] - | mvn RC, RC - | ldr TAB:CARG1, LFUNC:CARG2->env - | ldr STR:RC, [KBASE, RC, lsl #2] - if (op == BC_GGET) { - | b ->BC_TGETS_Z - } else { - | b ->BC_TSETS_Z - } - break; - - case BC_TGETV: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | // RA = dst*8, RB = table*8, RC = key*8 - | ldrd TAB:CARG12, [BASE, RB] - | ldrd CARG34, [BASE, RC] - | checktab CARG2, ->vmeta_tgetv // STALL: load CARG12. - | checktp CARG4, LJ_TISNUM // Integer key? - | ldreq CARG4, TAB:CARG1->array - | ldreq CARG2, TAB:CARG1->asize - | bne >9 - | - | add CARG4, CARG4, CARG3, lsl #3 - | cmp CARG3, CARG2 // In array part? - | ldrdlo CARG34, [CARG4] - | bhs ->vmeta_tgetv - | ins_next1 // Overwrites RB! - | checktp CARG4, LJ_TNIL - | beq >5 - |1: - | ins_next2 - | strd CARG34, [BASE, RA] - | ins_next3 - | - |5: // Check for __index if table value is nil. - | ldr TAB:CARG2, TAB:CARG1->metatable - | cmp TAB:CARG2, #0 - | beq <1 // No metatable: done. - | ldrb CARG2, TAB:CARG2->nomm - | tst CARG2, #1<vmeta_tgetv - | - |9: - | checktp CARG4, LJ_TSTR // String key? - | moveq STR:RC, CARG3 - | beq ->BC_TGETS_Z - | b ->vmeta_tgetv - break; - case BC_TGETS: - | decode_RB8 RB, INS - | and RC, RC, #255 - | // RA = dst*8, RB = table*8, RC = str_const (~) - | ldrd CARG12, [BASE, RB] - | mvn RC, RC - | ldr STR:RC, [KBASE, RC, lsl #2] // STALL: early RC. - | checktab CARG2, ->vmeta_tgets1 - |->BC_TGETS_Z: - | // (TAB:RB =) TAB:CARG1 = GCtab *, STR:RC = GCstr *, RA = dst*8 - | ldr CARG3, TAB:CARG1->hmask - | ldr CARG4, STR:RC->hash - | ldr NODE:INS, TAB:CARG1->node - | mov TAB:RB, TAB:CARG1 - | and CARG3, CARG3, CARG4 // idx = str->hash & tab->hmask - | add CARG3, CARG3, CARG3, lsl #1 - | add NODE:INS, NODE:INS, CARG3, lsl #3 // node = tab->node + idx*3*8 - |1: - | ldrd CARG12, NODE:INS->key // STALL: early NODE:INS. - | ldrd CARG34, NODE:INS->val - | ldr NODE:INS, NODE:INS->next - | checktp CARG2, LJ_TSTR - | cmpeq CARG1, STR:RC - | bne >4 - | checktp CARG4, LJ_TNIL - | beq >5 - |3: - | ins_next1 - | ins_next2 - | strd CARG34, [BASE, RA] - | ins_next3 - | - |4: // Follow hash chain. - | cmp NODE:INS, #0 - | bne <1 - | // End of hash chain: key not found, nil result. - | - |5: // Check for __index if table value is nil. - | ldr TAB:CARG1, TAB:RB->metatable - | mov CARG3, #0 // Optional clear of undef. value (during load stall). - | mvn CARG4, #~LJ_TNIL - | cmp TAB:CARG1, #0 - | beq <3 // No metatable: done. - | ldrb CARG2, TAB:CARG1->nomm - | tst CARG2, #1<vmeta_tgets - break; - case BC_TGETB: - | decode_RB8 RB, INS - | and RC, RC, #255 - | // RA = dst*8, RB = table*8, RC = index - | ldrd CARG12, [BASE, RB] - | checktab CARG2, ->vmeta_tgetb // STALL: load CARG12. - | ldr CARG3, TAB:CARG1->asize - | ldr CARG4, TAB:CARG1->array - | lsl CARG2, RC, #3 - | cmp RC, CARG3 - | ldrdlo CARG34, [CARG4, CARG2] - | bhs ->vmeta_tgetb - | ins_next1 // Overwrites RB! - | checktp CARG4, LJ_TNIL - | beq >5 - |1: - | ins_next2 - | strd CARG34, [BASE, RA] - | ins_next3 - | - |5: // Check for __index if table value is nil. - | ldr TAB:CARG2, TAB:CARG1->metatable - | cmp TAB:CARG2, #0 - | beq <1 // No metatable: done. - | ldrb CARG2, TAB:CARG2->nomm - | tst CARG2, #1<vmeta_tgetb - break; - - case BC_TSETV: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | // RA = src*8, RB = table*8, RC = key*8 - | ldrd TAB:CARG12, [BASE, RB] - | ldrd CARG34, [BASE, RC] - | checktab CARG2, ->vmeta_tsetv // STALL: load CARG12. - | checktp CARG4, LJ_TISNUM // Integer key? - | ldreq CARG2, TAB:CARG1->array - | ldreq CARG4, TAB:CARG1->asize - | bne >9 - | - | add CARG2, CARG2, CARG3, lsl #3 - | cmp CARG3, CARG4 // In array part? - | ldrlo INS, [CARG2, #4] - | bhs ->vmeta_tsetv - | ins_next1 // Overwrites RB! - | checktp INS, LJ_TNIL - | ldrb INS, TAB:CARG1->marked - | ldrd CARG34, [BASE, RA] - | beq >5 - |1: - | tst INS, #LJ_GC_BLACK // isblack(table) - | strd CARG34, [CARG2] - | bne >7 - |2: - | ins_next2 - | ins_next3 - | - |5: // Check for __newindex if previous value is nil. - | ldr TAB:RA, TAB:CARG1->metatable - | cmp TAB:RA, #0 - | beq <1 // No metatable: done. - | ldrb RA, TAB:RA->nomm - | tst RA, #1<vmeta_tsetv - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:CARG1, INS, CARG3 - | b <2 - | - |9: - | checktp CARG4, LJ_TSTR // String key? - | moveq STR:RC, CARG3 - | beq ->BC_TSETS_Z - | b ->vmeta_tsetv - break; - case BC_TSETS: - | decode_RB8 RB, INS - | and RC, RC, #255 - | // RA = src*8, RB = table*8, RC = str_const (~) - | ldrd CARG12, [BASE, RB] - | mvn RC, RC - | ldr STR:RC, [KBASE, RC, lsl #2] // STALL: early RC. - | checktab CARG2, ->vmeta_tsets1 - |->BC_TSETS_Z: - | // (TAB:RB =) TAB:CARG1 = GCtab *, STR:RC = GCstr *, RA = dst*8 - | ldr CARG3, TAB:CARG1->hmask - | ldr CARG4, STR:RC->hash - | ldr NODE:INS, TAB:CARG1->node - | mov TAB:RB, TAB:CARG1 - | and CARG3, CARG3, CARG4 // idx = str->hash & tab->hmask - | add CARG3, CARG3, CARG3, lsl #1 - | mov CARG4, #0 - | add NODE:INS, NODE:INS, CARG3, lsl #3 // node = tab->node + idx*3*8 - | strb CARG4, TAB:RB->nomm // Clear metamethod cache. - |1: - | ldrd CARG12, NODE:INS->key - | ldr CARG4, NODE:INS->val.it - | ldr NODE:CARG3, NODE:INS->next - | checktp CARG2, LJ_TSTR - | cmpeq CARG1, STR:RC - | bne >5 - | ldrb CARG2, TAB:RB->marked - | checktp CARG4, LJ_TNIL // Key found, but nil value? - | ldrd CARG34, [BASE, RA] - | beq >4 - |2: - | tst CARG2, #LJ_GC_BLACK // isblack(table) - | strd CARG34, NODE:INS->val - | bne >7 - |3: - | ins_next - | - |4: // Check for __newindex if previous value is nil. - | ldr TAB:CARG1, TAB:RB->metatable - | cmp TAB:CARG1, #0 - | beq <2 // No metatable: done. - | ldrb CARG1, TAB:CARG1->nomm - | tst CARG1, #1<vmeta_tsets - | - |5: // Follow hash chain. - | movs NODE:INS, NODE:CARG3 - | bne <1 - | // End of hash chain: key not found, add a new one. - | - | // But check for __newindex first. - | ldr TAB:CARG1, TAB:RB->metatable - | mov CARG3, TMPDp - | str PC, SAVE_PC - | cmp TAB:CARG1, #0 // No metatable: continue. - | str BASE, L->base - | ldrbne CARG2, TAB:CARG1->nomm - | mov CARG1, L - | beq >6 - | tst CARG2, #1<vmeta_tsets // 'no __newindex' flag NOT set: check. - |6: - | mvn CARG4, #~LJ_TSTR - | str STR:RC, TMPDlo - | mov CARG2, TAB:RB - | str CARG4, TMPDhi - | bl extern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k) - | // Returns TValue *. - | ldr BASE, L->base - | ldrd CARG34, [BASE, RA] - | strd CARG34, [CRET1] - | b <3 // No 2nd write barrier needed. - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, CARG2, CARG3 - | b <3 - break; - case BC_TSETB: - | decode_RB8 RB, INS - | and RC, RC, #255 - | // RA = src*8, RB = table*8, RC = index - | ldrd CARG12, [BASE, RB] - | checktab CARG2, ->vmeta_tsetb // STALL: load CARG12. - | ldr CARG3, TAB:CARG1->asize - | ldr RB, TAB:CARG1->array - | lsl CARG2, RC, #3 - | cmp RC, CARG3 - | ldrdlo CARG34, [CARG2, RB]! - | bhs ->vmeta_tsetb - | ins_next1 // Overwrites RB! - | checktp CARG4, LJ_TNIL - | ldrb INS, TAB:CARG1->marked - | ldrd CARG34, [BASE, RA] - | beq >5 - |1: - | tst INS, #LJ_GC_BLACK // isblack(table) - | strd CARG34, [CARG2] - | bne >7 - |2: - | ins_next2 - | ins_next3 - | - |5: // Check for __newindex if previous value is nil. - | ldr TAB:RA, TAB:CARG1->metatable - | cmp TAB:RA, #0 - | beq <1 // No metatable: done. - | ldrb RA, TAB:RA->nomm - | tst RA, #1<vmeta_tsetb - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:CARG1, INS, CARG3 - | b <2 - break; - - case BC_TSETM: - | // RA = base*8 (table at base-1), RC = num_const (start index) - | add RA, BASE, RA - |1: - | ldr RB, SAVE_MULTRES - | ldr TAB:CARG2, [RA, #-8] // Guaranteed to be a table. - | ldr CARG1, [KBASE, RC, lsl #3] // Integer constant is in lo-word. - | subs RB, RB, #8 - | ldr CARG4, TAB:CARG2->asize - | beq >4 // Nothing to copy? - | add CARG3, CARG1, RB, lsr #3 - | cmp CARG3, CARG4 - | ldr CARG4, TAB:CARG2->array - | add RB, RA, RB - | bhi >5 - | add INS, CARG4, CARG1, lsl #3 - | ldrb CARG1, TAB:CARG2->marked - |3: // Copy result slots to table. - | ldrd CARG34, [RA], #8 - | strd CARG34, [INS], #8 - | cmp RA, RB - | blo <3 - | tst CARG1, #LJ_GC_BLACK // isblack(table) - | bne >7 - |4: - | ins_next - | - |5: // Need to resize array part. - | str BASE, L->base - | mov CARG1, L - | str PC, SAVE_PC - | bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) - | // Must not reallocate the stack. - | .IOS ldr BASE, L->base - | b <1 - | - |7: // Possible table write barrier for any value. Skip valiswhite check. - | barrierback TAB:CARG2, CARG1, CARG3 - | b <4 - break; - - /* -- Calls and vararg handling ----------------------------------------- */ - - case BC_CALLM: - | // RA = base*8, (RB = nresults+1,) RC = extra_nargs - | ldr CARG1, SAVE_MULTRES - | decode_RC8 NARGS8:RC, INS - | add NARGS8:RC, NARGS8:RC, CARG1 - | b ->BC_CALL_Z - break; - case BC_CALL: - | decode_RC8 NARGS8:RC, INS - | // RA = base*8, (RB = nresults+1,) RC = (nargs+1)*8 - |->BC_CALL_Z: - | mov RB, BASE // Save old BASE for vmeta_call. - | ldrd CARG34, [BASE, RA]! - | sub NARGS8:RC, NARGS8:RC, #8 - | add BASE, BASE, #8 - | checkfunc CARG4, ->vmeta_call - | ins_call - break; - - case BC_CALLMT: - | // RA = base*8, (RB = 0,) RC = extra_nargs - | ldr CARG1, SAVE_MULTRES - | add NARGS8:RC, CARG1, RC, lsl #3 - | b ->BC_CALLT1_Z - break; - case BC_CALLT: - | lsl NARGS8:RC, RC, #3 - | // RA = base*8, (RB = 0,) RC = (nargs+1)*8 - |->BC_CALLT1_Z: - | ldrd LFUNC:CARG34, [RA, BASE]! - | sub NARGS8:RC, NARGS8:RC, #8 - | add RA, RA, #8 - | checkfunc CARG4, ->vmeta_callt - | ldr PC, [BASE, FRAME_PC] - |->BC_CALLT2_Z: - | mov RB, #0 - | ldrb CARG4, LFUNC:CARG3->ffid - | tst PC, #FRAME_TYPE - | bne >7 - |1: - | str LFUNC:CARG3, [BASE, FRAME_FUNC] // Copy function down, but keep PC. - | cmp NARGS8:RC, #0 - | beq >3 - |2: - | ldrd CARG12, [RA, RB] - | add INS, RB, #8 - | cmp INS, NARGS8:RC - | strd CARG12, [BASE, RB] - | mov RB, INS - | bne <2 - |3: - | cmp CARG4, #1 // (> FF_C) Calling a fast function? - | bhi >5 - |4: - | ins_callt - | - |5: // Tailcall to a fast function with a Lua frame below. - | ldr INS, [PC, #-4] - | decode_RA8 RA, INS - | sub CARG1, BASE, RA - | ldr LFUNC:CARG1, [CARG1, #-16] - | ldr CARG1, LFUNC:CARG1->field_pc - | ldr KBASE, [CARG1, #PC2PROTO(k)] - | b <4 - | - |7: // Tailcall from a vararg function. - | eor PC, PC, #FRAME_VARG - | tst PC, #FRAME_TYPEP // Vararg frame below? - | movne CARG4, #0 // Clear ffid if no Lua function below. - | bne <1 - | sub BASE, BASE, PC - | ldr PC, [BASE, FRAME_PC] - | tst PC, #FRAME_TYPE - | movne CARG4, #0 // Clear ffid if no Lua function below. - | b <1 - break; - - case BC_ITERC: - | // RA = base*8, (RB = nresults+1, RC = nargs+1 (2+1)) - | add RA, BASE, RA - | mov RB, BASE // Save old BASE for vmeta_call. - | ldrd CARG34, [RA, #-16] - | ldrd CARG12, [RA, #-8] - | add BASE, RA, #8 - | strd CARG34, [RA, #8] // Copy state. - | strd CARG12, [RA, #16] // Copy control var. - | // STALL: locked CARG34. - | ldrd LFUNC:CARG34, [RA, #-24] - | mov NARGS8:RC, #16 // Iterators get 2 arguments. - | // STALL: load CARG34. - | strd LFUNC:CARG34, [RA] // Copy callable. - | checkfunc CARG4, ->vmeta_call - | ins_call - break; - - case BC_ITERN: - | // RA = base*8, (RB = nresults+1, RC = nargs+1 (2+1)) - |.if JIT - | // NYI: add hotloop, record BC_ITERN. - |.endif - | add RA, BASE, RA - | ldr TAB:RB, [RA, #-16] - | ldr CARG1, [RA, #-8] // Get index from control var. - | ldr INS, TAB:RB->asize - | ldr CARG2, TAB:RB->array - | add PC, PC, #4 - |1: // Traverse array part. - | subs RC, CARG1, INS - | add CARG3, CARG2, CARG1, lsl #3 - | bhs >5 // Index points after array part? - | ldrd CARG34, [CARG3] - | checktp CARG4, LJ_TNIL - | addeq CARG1, CARG1, #1 // Skip holes in array part. - | beq <1 - | ldrh RC, [PC, #-2] - | mvn CARG2, #~LJ_TISNUM - | strd CARG34, [RA, #8] - | add RC, PC, RC, lsl #2 - | add RB, CARG1, #1 - | strd CARG12, [RA] - | sub PC, RC, #0x20000 - | str RB, [RA, #-8] // Update control var. - |3: - | ins_next - | - |5: // Traverse hash part. - | ldr CARG4, TAB:RB->hmask - | ldr NODE:RB, TAB:RB->node - |6: - | add CARG1, RC, RC, lsl #1 - | cmp RC, CARG4 // End of iteration? Branch to ITERL+1. - | add NODE:CARG3, NODE:RB, CARG1, lsl #3 // node = tab->node + idx*3*8 - | bhi <3 - | ldrd CARG12, NODE:CARG3->val - | checktp CARG2, LJ_TNIL - | add RC, RC, #1 - | beq <6 // Skip holes in hash part. - | ldrh RB, [PC, #-2] - | add RC, RC, INS - | ldrd CARG34, NODE:CARG3->key - | str RC, [RA, #-8] // Update control var. - | strd CARG12, [RA, #8] - | add RC, PC, RB, lsl #2 - | sub PC, RC, #0x20000 - | strd CARG34, [RA] - | b <3 - break; - - case BC_ISNEXT: - | // RA = base*8, RC = target (points to ITERN) - | add RA, BASE, RA - | add RC, PC, RC, lsl #2 - | ldrd CFUNC:CARG12, [RA, #-24] - | ldr CARG3, [RA, #-12] - | ldr CARG4, [RA, #-4] - | checktp CARG2, LJ_TFUNC - | ldrbeq CARG1, CFUNC:CARG1->ffid - | checktpeq CARG3, LJ_TTAB - | checktpeq CARG4, LJ_TNIL - | cmpeq CARG1, #FF_next_N - | subeq PC, RC, #0x20000 - | bne >5 - | ins_next1 - | ins_next2 - | mov CARG1, #0 - | mvn CARG2, #0x00018000 - | strd CARG1, [RA, #-8] // Initialize control var. - |1: - | ins_next3 - |5: // Despecialize bytecode if any of the checks fail. - | mov CARG1, #BC_JMP - | mov OP, #BC_ITERC - | strb CARG1, [PC, #-4] - | sub PC, RC, #0x20000 - | strb OP, [PC] // Subsumes ins_next1. - | ins_next2 - | b <1 - break; - - case BC_VARG: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | // RA = base*8, RB = (nresults+1)*8, RC = numparams*8 - | ldr CARG1, [BASE, FRAME_PC] - | add RC, BASE, RC - | add RA, BASE, RA - | add RC, RC, #FRAME_VARG - | add CARG4, RA, RB - | sub CARG3, BASE, #8 // CARG3 = vtop - | sub RC, RC, CARG1 // RC = vbase - | // Note: RC may now be even _above_ BASE if nargs was < numparams. - | cmp RB, #0 - | sub CARG1, CARG3, RC - | beq >5 // Copy all varargs? - | sub CARG4, CARG4, #16 - |1: // Copy vararg slots to destination slots. - | cmp RC, CARG3 - | ldrdlo CARG12, [RC], #8 - | mvnhs CARG2, #~LJ_TNIL - | cmp RA, CARG4 - | strd CARG12, [RA], #8 - | blo <1 - |2: - | ins_next - | - |5: // Copy all varargs. - | ldr CARG4, L->maxstack - | cmp CARG1, #0 - | movle RB, #8 // MULTRES = (0+1)*8 - | addgt RB, CARG1, #8 - | add CARG2, RA, CARG1 - | str RB, SAVE_MULTRES - | ble <2 - | cmp CARG2, CARG4 - | bhi >7 - |6: - | ldrd CARG12, [RC], #8 - | strd CARG12, [RA], #8 - | cmp RC, CARG3 - | blo <6 - | b <2 - | - |7: // Grow stack for varargs. - | lsr CARG2, CARG1, #3 - | str RA, L->top - | mov CARG1, L - | str BASE, L->base - | sub RC, RC, BASE // Need delta, because BASE may change. - | str PC, SAVE_PC - | sub RA, RA, BASE - | bl extern lj_state_growstack // (lua_State *L, int n) - | ldr BASE, L->base - | add RA, BASE, RA - | add RC, BASE, RC - | sub CARG3, BASE, #8 - | b <6 - break; - - /* -- Returns ----------------------------------------------------------- */ - - case BC_RETM: - | // RA = results*8, RC = extra results - | ldr CARG1, SAVE_MULTRES - | ldr PC, [BASE, FRAME_PC] - | add RA, BASE, RA - | add RC, CARG1, RC, lsl #3 - | b ->BC_RETM_Z - break; - - case BC_RET: - | // RA = results*8, RC = nresults+1 - | ldr PC, [BASE, FRAME_PC] - | lsl RC, RC, #3 - | add RA, BASE, RA - |->BC_RETM_Z: - | str RC, SAVE_MULTRES - |1: - | ands CARG1, PC, #FRAME_TYPE - | eor CARG2, PC, #FRAME_VARG - | bne ->BC_RETV2_Z - | - |->BC_RET_Z: - | // BASE = base, RA = resultptr, RC = (nresults+1)*8, PC = return - | ldr INS, [PC, #-4] - | subs CARG4, RC, #8 - | sub CARG3, BASE, #8 - | beq >3 - |2: - | ldrd CARG12, [RA], #8 - | add BASE, BASE, #8 - | subs CARG4, CARG4, #8 - | strd CARG12, [BASE, #-16] - | bne <2 - |3: - | decode_RA8 RA, INS - | sub CARG4, CARG3, RA - | decode_RB8 RB, INS - | ldr LFUNC:CARG1, [CARG4, FRAME_FUNC] - |5: - | cmp RB, RC // More results expected? - | bhi >6 - | mov BASE, CARG4 - | ldr CARG2, LFUNC:CARG1->field_pc - | ins_next1 - | ins_next2 - | ldr KBASE, [CARG2, #PC2PROTO(k)] - | ins_next3 - | - |6: // Fill up results with nil. - | mvn CARG2, #~LJ_TNIL - | add BASE, BASE, #8 - | add RC, RC, #8 - | str CARG2, [BASE, #-12] - | b <5 - | - |->BC_RETV1_Z: // Non-standard return case. - | add RA, BASE, RA - |->BC_RETV2_Z: - | tst CARG2, #FRAME_TYPEP - | bne ->vm_return - | // Return from vararg function: relocate BASE down. - | sub BASE, BASE, CARG2 - | ldr PC, [BASE, FRAME_PC] - | b <1 - break; - - case BC_RET0: case BC_RET1: - | // RA = results*8, RC = nresults+1 - | ldr PC, [BASE, FRAME_PC] - | lsl RC, RC, #3 - | str RC, SAVE_MULTRES - | ands CARG1, PC, #FRAME_TYPE - | eor CARG2, PC, #FRAME_VARG - | ldreq INS, [PC, #-4] - | bne ->BC_RETV1_Z - if (op == BC_RET1) { - | ldrd CARG12, [BASE, RA] - } - | sub CARG4, BASE, #8 - | decode_RA8 RA, INS - if (op == BC_RET1) { - | strd CARG12, [CARG4] - } - | sub BASE, CARG4, RA - | decode_RB8 RB, INS - | ldr LFUNC:CARG1, [BASE, FRAME_FUNC] - |5: - | cmp RB, RC - | bhi >6 - | ldr CARG2, LFUNC:CARG1->field_pc - | ins_next1 - | ins_next2 - | ldr KBASE, [CARG2, #PC2PROTO(k)] - | ins_next3 - | - |6: // Fill up results with nil. - | sub CARG2, CARG4, #4 - | mvn CARG3, #~LJ_TNIL - | str CARG3, [CARG2, RC] - | add RC, RC, #8 - | b <5 - break; - - /* -- Loops and branches ------------------------------------------------ */ - - |.define FOR_IDX, [RA]; .define FOR_TIDX, [RA, #4] - |.define FOR_STOP, [RA, #8]; .define FOR_TSTOP, [RA, #12] - |.define FOR_STEP, [RA, #16]; .define FOR_TSTEP, [RA, #20] - |.define FOR_EXT, [RA, #24]; .define FOR_TEXT, [RA, #28] - - case BC_FORL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IFORL follows. - break; - - case BC_JFORI: - case BC_JFORL: -#if !LJ_HASJIT - break; -#endif - case BC_FORI: - case BC_IFORL: - | // RA = base*8, RC = target (after end of loop or start of loop) - vk = (op == BC_IFORL || op == BC_JFORL); - | ldrd CARG12, [RA, BASE]! - if (op != BC_JFORL) { - | add RC, PC, RC, lsl #2 - } - if (!vk) { - | ldrd CARG34, FOR_STOP - | checktp CARG2, LJ_TISNUM - | ldr RB, FOR_TSTEP - | bne >5 - | checktp CARG4, LJ_TISNUM - | ldr CARG4, FOR_STEP - | checktpeq RB, LJ_TISNUM - | bne ->vmeta_for - | cmp CARG4, #0 - | blt >4 - | cmp CARG1, CARG3 - } else { - | ldrd CARG34, FOR_STEP - | checktp CARG2, LJ_TISNUM - | bne >5 - | adds CARG1, CARG1, CARG3 - | ldr CARG4, FOR_STOP - if (op == BC_IFORL) { - | addvs RC, PC, #0x20000 // Overflow: prevent branch. - } else { - | bvs >2 // Overflow: do not enter mcode. - } - | cmp CARG3, #0 - | blt >4 - | cmp CARG1, CARG4 - } - |1: - if (op == BC_FORI) { - | subgt PC, RC, #0x20000 - } else if (op == BC_JFORI) { - | sub PC, RC, #0x20000 - | ldrhle RC, [PC, #-2] - } else if (op == BC_IFORL) { - | suble PC, RC, #0x20000 - } - if (vk) { - | strd CARG12, FOR_IDX - } - |2: - | ins_next1 - | ins_next2 - | strd CARG12, FOR_EXT - if (op == BC_JFORI || op == BC_JFORL) { - | ble =>BC_JLOOP - } - |3: - | ins_next3 - | - |4: // Invert check for negative step. - if (!vk) { - | cmp CARG3, CARG1 - } else { - | cmp CARG4, CARG1 - } - | b <1 - | - |5: // FP loop. - if (!vk) { - | cmnlo CARG4, #-LJ_TISNUM - | cmnlo RB, #-LJ_TISNUM - | bhs ->vmeta_for - |.if FPU - | vldr d0, FOR_IDX - | vldr d1, FOR_STOP - | cmp RB, #0 - | vstr d0, FOR_EXT - |.else - | cmp RB, #0 - | strd CARG12, FOR_EXT - | blt >8 - |.endif - } else { - |.if FPU - | vldr d0, FOR_IDX - | vldr d2, FOR_STEP - | vldr d1, FOR_STOP - | cmp CARG4, #0 - | vadd.f64 d0, d0, d2 - |.else - | cmp CARG4, #0 - | blt >8 - | bl extern __aeabi_dadd - | strd CARG12, FOR_IDX - | ldrd CARG34, FOR_STOP - | strd CARG12, FOR_EXT - |.endif - } - |6: - |.if FPU - | vcmpge.f64 d0, d1 - | vcmplt.f64 d1, d0 - | vmrs - |.else - | bl extern __aeabi_cdcmple - |.endif - if (vk) { - |.if FPU - | vstr d0, FOR_IDX - | vstr d0, FOR_EXT - |.endif - } - if (op == BC_FORI) { - | subhi PC, RC, #0x20000 - } else if (op == BC_JFORI) { - | sub PC, RC, #0x20000 - | ldrhls RC, [PC, #-2] - | bls =>BC_JLOOP - } else if (op == BC_IFORL) { - | subls PC, RC, #0x20000 - } else { - | bls =>BC_JLOOP - } - | ins_next1 - | ins_next2 - | b <3 - | - |.if not FPU - |8: // Invert check for negative step. - if (vk) { - | bl extern __aeabi_dadd - | strd CARG12, FOR_IDX - | strd CARG12, FOR_EXT - } - | mov CARG3, CARG1 - | mov CARG4, CARG2 - | ldrd CARG12, FOR_STOP - | b <6 - |.endif - break; - - case BC_ITERL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IITERL follows. - break; - - case BC_JITERL: -#if !LJ_HASJIT - break; -#endif - case BC_IITERL: - | // RA = base*8, RC = target - | ldrd CARG12, [RA, BASE]! - if (op == BC_JITERL) { - | cmn CARG2, #-LJ_TNIL // Stop if iterator returned nil. - | strdne CARG12, [RA, #-8] - | bne =>BC_JLOOP - } else { - | add RC, PC, RC, lsl #2 - | // STALL: load CARG12. - | cmn CARG2, #-LJ_TNIL // Stop if iterator returned nil. - | subne PC, RC, #0x20000 // Otherwise save control var + branch. - | strdne CARG12, [RA, #-8] - } - | ins_next - break; - - case BC_LOOP: - | // RA = base*8, RC = target (loop extent) - | // Note: RA/RC is only used by trace recorder to determine scope/extent - | // This opcode does NOT jump, it's only purpose is to detect a hot loop. - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_ILOOP follows. - break; - - case BC_ILOOP: - | // RA = base*8, RC = target (loop extent) - | ins_next - break; - - case BC_JLOOP: - |.if JIT - | // RA = base (ignored), RC = traceno - | ldr CARG1, [DISPATCH, #DISPATCH_J(trace)] - | mov CARG2, #0 // Traces on ARM don't store the trace number, so use 0. - | ldr TRACE:RC, [CARG1, RC, lsl #2] - | st_vmstate CARG2 - | ldr RA, TRACE:RC->mcode - | str BASE, [DISPATCH, #DISPATCH_GL(jit_base)] - | str L, [DISPATCH, #DISPATCH_GL(jit_L)] - | bx RA - |.endif - break; - - case BC_JMP: - | // RA = base*8 (only used by trace recorder), RC = target - | add RC, PC, RC, lsl #2 - | sub PC, RC, #0x20000 - | ins_next - break; - - /* -- Function headers -------------------------------------------------- */ - - case BC_FUNCF: - |.if JIT - | hotcall - |.endif - case BC_FUNCV: /* NYI: compiled vararg functions. */ - | // Fall through. Assumes BC_IFUNCF/BC_IFUNCV follow. - break; - - case BC_JFUNCF: -#if !LJ_HASJIT - break; -#endif - case BC_IFUNCF: - | // BASE = new base, RA = BASE+framesize*8, CARG3 = LFUNC, RC = nargs*8 - | ldr CARG1, L->maxstack - | ldrb CARG2, [PC, #-4+PC2PROTO(numparams)] - | ldr KBASE, [PC, #-4+PC2PROTO(k)] - | cmp RA, CARG1 - | bhi ->vm_growstack_l - if (op != BC_JFUNCF) { - | ins_next1 - | ins_next2 - } - |2: - | cmp NARGS8:RC, CARG2, lsl #3 // Check for missing parameters. - | mvn CARG4, #~LJ_TNIL - | blo >3 - if (op == BC_JFUNCF) { - | decode_RD RC, INS - | b =>BC_JLOOP - } else { - | ins_next3 - } - | - |3: // Clear missing parameters. - | strd CARG34, [BASE, NARGS8:RC] - | add NARGS8:RC, NARGS8:RC, #8 - | b <2 - break; - - case BC_JFUNCV: -#if !LJ_HASJIT - break; -#endif - | NYI // NYI: compiled vararg functions - break; /* NYI: compiled vararg functions. */ - - case BC_IFUNCV: - | // BASE = new base, RA = BASE+framesize*8, CARG3 = LFUNC, RC = nargs*8 - | ldr CARG1, L->maxstack - | add CARG4, BASE, RC - | add RA, RA, RC - | str LFUNC:CARG3, [CARG4] // Store copy of LFUNC. - | add CARG2, RC, #8+FRAME_VARG - | ldr KBASE, [PC, #-4+PC2PROTO(k)] - | cmp RA, CARG1 - | str CARG2, [CARG4, #4] // Store delta + FRAME_VARG. - | bhs ->vm_growstack_l - | ldrb RB, [PC, #-4+PC2PROTO(numparams)] - | mov RA, BASE - | mov RC, CARG4 - | cmp RB, #0 - | add BASE, CARG4, #8 - | beq >3 - | mvn CARG3, #~LJ_TNIL - |1: - | cmp RA, RC // Less args than parameters? - | ldrdlo CARG12, [RA], #8 - | movhs CARG2, CARG3 - | strlo CARG3, [RA, #-4] // Clear old fixarg slot (help the GC). - |2: - | subs RB, RB, #1 - | strd CARG12, [CARG4, #8]! - | bne <1 - |3: - | ins_next - break; - - case BC_FUNCC: - case BC_FUNCCW: - | // BASE = new base, RA = BASE+framesize*8, CARG3 = CFUNC, RC = nargs*8 - if (op == BC_FUNCC) { - | ldr CARG4, CFUNC:CARG3->f - } else { - | ldr CARG4, [DISPATCH, #DISPATCH_GL(wrapf)] - } - | add CARG2, RA, NARGS8:RC - | ldr CARG1, L->maxstack - | add RC, BASE, NARGS8:RC - | str BASE, L->base - | cmp CARG2, CARG1 - | str RC, L->top - if (op == BC_FUNCCW) { - | ldr CARG2, CFUNC:CARG3->f - } - | mv_vmstate CARG3, C - | mov CARG1, L - | bhi ->vm_growstack_c // Need to grow stack. - | st_vmstate CARG3 - | blx CARG4 // (lua_State *L [, lua_CFunction f]) - | // Returns nresults. - | ldr BASE, L->base - | mv_vmstate CARG3, INTERP - | ldr CRET2, L->top - | lsl RC, CRET1, #3 - | st_vmstate CARG3 - | ldr PC, [BASE, FRAME_PC] - | sub RA, CRET2, RC // RA = L->top - nresults*8 - | b ->vm_returnc - break; - - /* ---------------------------------------------------------------------- */ - - default: - fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]); - exit(2); - break; - } -} - -static int build_backend(BuildCtx *ctx) -{ - int op; - - dasm_growpc(Dst, BC__MAX); - - build_subroutines(ctx); - - |.code_op - for (op = 0; op < BC__MAX; op++) - build_ins(ctx, (BCOp)op, op); - - return BC__MAX; -} - -/* Emit pseudo frame-info for all assembler functions. */ -static void emit_asm_debug(BuildCtx *ctx) -{ - int fcofs = (int)((uint8_t *)ctx->glob[GLOB_vm_ffi_call] - ctx->code); - int i; - switch (ctx->mode) { - case BUILD_elfasm: - fprintf(ctx->fp, "\t.section .debug_frame,\"\",%%progbits\n"); - fprintf(ctx->fp, - ".Lframe0:\n" - "\t.long .LECIE0-.LSCIE0\n" - ".LSCIE0:\n" - "\t.long 0xffffffff\n" - "\t.byte 0x1\n" - "\t.string \"\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 0xe\n" /* Return address is in lr. */ - "\t.byte 0xc\n\t.uleb128 0xd\n\t.uleb128 0\n" /* def_cfa sp */ - "\t.align 2\n" - ".LECIE0:\n\n"); - fprintf(ctx->fp, - ".LSFDE0:\n" - "\t.long .LEFDE0-.LASFDE0\n" - ".LASFDE0:\n" - "\t.long .Lframe0\n" - "\t.long .Lbegin\n" - "\t.long %d\n" - "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */ - "\t.byte 0x8e\n\t.uleb128 1\n", /* offset lr */ - fcofs, CFRAME_SIZE); - for (i = 11; i >= (LJ_ARCH_HASFPU ? 5 : 4); i--) /* offset r4-r11 */ - fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 2+(11-i)); -#if LJ_ARCH_HASFPU - for (i = 15; i >= 8; i--) /* offset d8-d15 */ - fprintf(ctx->fp, "\t.byte 5\n\t.uleb128 %d, %d\n", - 64+2*i, 10+2*(15-i)); - fprintf(ctx->fp, "\t.byte 0x84\n\t.uleb128 %d\n", 25); /* offset r4 */ -#endif - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE0:\n\n"); -#if LJ_HASFFI - fprintf(ctx->fp, - ".LSFDE1:\n" - "\t.long .LEFDE1-.LASFDE1\n" - ".LASFDE1:\n" - "\t.long .Lframe0\n" - "\t.long lj_vm_ffi_call\n" - "\t.long %d\n" - "\t.byte 0xe\n\t.uleb128 16\n" /* def_cfa_offset */ - "\t.byte 0x8e\n\t.uleb128 1\n" /* offset lr */ - "\t.byte 0x8b\n\t.uleb128 2\n" /* offset r11 */ - "\t.byte 0x85\n\t.uleb128 3\n" /* offset r5 */ - "\t.byte 0x84\n\t.uleb128 4\n" /* offset r4 */ - "\t.byte 0xd\n\t.uleb128 0xb\n" /* def_cfa_register r11 */ - "\t.align 2\n" - ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); -#endif - break; - default: - break; - } -} - diff --git a/deps/luajit/src/vm_mips.dasc b/deps/luajit/src/vm_mips.dasc deleted file mode 100644 index ac8346b..0000000 --- a/deps/luajit/src/vm_mips.dasc +++ /dev/null @@ -1,4241 +0,0 @@ -|// Low-level VM code for MIPS CPUs. -|// Bytecode interpreter, fast functions and helper functions. -|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -| -|.arch mips -|.section code_op, code_sub -| -|.actionlist build_actionlist -|.globals GLOB_ -|.globalnames globnames -|.externnames extnames -| -|// Note: The ragged indentation of the instructions is intentional. -|// The starting columns indicate data dependencies. -| -|//----------------------------------------------------------------------- -| -|// Fixed register assignments for the interpreter. -|// Don't use: r0 = 0, r26/r27 = reserved, r28 = gp, r29 = sp, r31 = ra -| -|// The following must be C callee-save (but BASE is often refetched). -|.define BASE, r16 // Base of current Lua stack frame. -|.define KBASE, r17 // Constants of current Lua function. -|.define PC, r18 // Next PC. -|.define DISPATCH, r19 // Opcode dispatch table. -|.define LREG, r20 // Register holding lua_State (also in SAVE_L). -|.define MULTRES, r21 // Size of multi-result: (nresults+1)*8. -|// NYI: r22 currently unused. -| -|.define JGL, r30 // On-trace: global_State + 32768. -| -|// Constants for type-comparisons, stores and conversions. C callee-save. -|.define TISNIL, r30 -|.define TOBIT, f30 // 2^52 + 2^51. -| -|// The following temporaries are not saved across C calls, except for RA. -|.define RA, r23 // Callee-save. -|.define RB, r8 -|.define RC, r9 -|.define RD, r10 -|.define INS, r11 -| -|.define AT, r1 // Assembler temporary. -|.define TMP0, r12 -|.define TMP1, r13 -|.define TMP2, r14 -|.define TMP3, r15 -| -|// Calling conventions. -|.define CFUNCADDR, r25 -|.define CARG1, r4 -|.define CARG2, r5 -|.define CARG3, r6 -|.define CARG4, r7 -| -|.define CRET1, r2 -|.define CRET2, r3 -| -|.define FARG1, f12 -|.define FARG2, f14 -| -|.define FRET1, f0 -|.define FRET2, f2 -| -|// Stack layout while in interpreter. Must match with lj_frame.h. -|.define CFRAME_SPACE, 112 // Delta for sp. -| -|.define SAVE_ERRF, 124(sp) // 32 bit C frame info. -|.define SAVE_NRES, 120(sp) -|.define SAVE_CFRAME, 116(sp) -|.define SAVE_L, 112(sp) -|//----- 8 byte aligned, ^^^^ 16 byte register save area, owned by interpreter. -|.define SAVE_GPR_, 72 // .. 72+10*4: 32 bit GPR saves. -|.define SAVE_FPR_, 24 // .. 24+6*8: 64 bit FPR saves. -|.define SAVE_PC, 20(sp) -|.define ARG5, 16(sp) -|.define CSAVE_4, 12(sp) -|.define CSAVE_3, 8(sp) -|.define CSAVE_2, 4(sp) -|.define CSAVE_1, 0(sp) -|//----- 8 byte aligned, ^^^^ 16 byte register save area, owned by callee. -| -|.define ARG5_OFS, 16 -|.define SAVE_MULTRES, ARG5 -| -|.macro saveregs -| addiu sp, sp, -CFRAME_SPACE -| sw ra, SAVE_GPR_+9*4(sp) -| sw r30, SAVE_GPR_+8*4(sp) -| sdc1 f30, SAVE_FPR_+5*8(sp) -| sw r23, SAVE_GPR_+7*4(sp) -| sw r22, SAVE_GPR_+6*4(sp) -| sdc1 f28, SAVE_FPR_+4*8(sp) -| sw r21, SAVE_GPR_+5*4(sp) -| sw r20, SAVE_GPR_+4*4(sp) -| sdc1 f26, SAVE_FPR_+3*8(sp) -| sw r19, SAVE_GPR_+3*4(sp) -| sw r18, SAVE_GPR_+2*4(sp) -| sdc1 f24, SAVE_FPR_+2*8(sp) -| sw r17, SAVE_GPR_+1*4(sp) -| sw r16, SAVE_GPR_+0*4(sp) -| sdc1 f22, SAVE_FPR_+1*8(sp) -| sdc1 f20, SAVE_FPR_+0*8(sp) -|.endmacro -| -|.macro restoreregs_ret -| lw ra, SAVE_GPR_+9*4(sp) -| lw r30, SAVE_GPR_+8*4(sp) -| ldc1 f30, SAVE_FPR_+5*8(sp) -| lw r23, SAVE_GPR_+7*4(sp) -| lw r22, SAVE_GPR_+6*4(sp) -| ldc1 f28, SAVE_FPR_+4*8(sp) -| lw r21, SAVE_GPR_+5*4(sp) -| lw r20, SAVE_GPR_+4*4(sp) -| ldc1 f26, SAVE_FPR_+3*8(sp) -| lw r19, SAVE_GPR_+3*4(sp) -| lw r18, SAVE_GPR_+2*4(sp) -| ldc1 f24, SAVE_FPR_+2*8(sp) -| lw r17, SAVE_GPR_+1*4(sp) -| lw r16, SAVE_GPR_+0*4(sp) -| ldc1 f22, SAVE_FPR_+1*8(sp) -| ldc1 f20, SAVE_FPR_+0*8(sp) -| jr ra -| addiu sp, sp, CFRAME_SPACE -|.endmacro -| -|// Type definitions. Some of these are only used for documentation. -|.type L, lua_State, LREG -|.type GL, global_State -|.type TVALUE, TValue -|.type GCOBJ, GCobj -|.type STR, GCstr -|.type TAB, GCtab -|.type LFUNC, GCfuncL -|.type CFUNC, GCfuncC -|.type PROTO, GCproto -|.type UPVAL, GCupval -|.type NODE, Node -|.type NARGS8, int -|.type TRACE, GCtrace -| -|//----------------------------------------------------------------------- -| -|// Trap for not-yet-implemented parts. -|.macro NYI; .long 0xf0f0f0f0; .endmacro -| -|// Macros to mark delay slots. -|.macro ., a; a; .endmacro -|.macro ., a,b; a,b; .endmacro -|.macro ., a,b,c; a,b,c; .endmacro -| -|//----------------------------------------------------------------------- -| -|// Endian-specific defines. -|.define FRAME_PC, LJ_ENDIAN_SELECT(-4,-8) -|.define FRAME_FUNC, LJ_ENDIAN_SELECT(-8,-4) -|.define HI, LJ_ENDIAN_SELECT(4,0) -|.define LO, LJ_ENDIAN_SELECT(0,4) -|.define OFS_RD, LJ_ENDIAN_SELECT(2,0) -|.define OFS_RA, LJ_ENDIAN_SELECT(1,2) -|.define OFS_OP, LJ_ENDIAN_SELECT(0,3) -| -|// Instruction decode. -|.macro decode_OP1, dst, ins; andi dst, ins, 0xff; .endmacro -|.macro decode_OP4a, dst, ins; andi dst, ins, 0xff; .endmacro -|.macro decode_OP4b, dst; sll dst, dst, 2; .endmacro -|.macro decode_RC4a, dst, ins; srl dst, ins, 14; .endmacro -|.macro decode_RC4b, dst; andi dst, dst, 0x3fc; .endmacro -|.macro decode_RD4b, dst; sll dst, dst, 2; .endmacro -|.macro decode_RA8a, dst, ins; srl dst, ins, 5; .endmacro -|.macro decode_RA8b, dst; andi dst, dst, 0x7f8; .endmacro -|.macro decode_RB8a, dst, ins; srl dst, ins, 21; .endmacro -|.macro decode_RB8b, dst; andi dst, dst, 0x7f8; .endmacro -|.macro decode_RD8a, dst, ins; srl dst, ins, 16; .endmacro -|.macro decode_RD8b, dst; sll dst, dst, 3; .endmacro -|.macro decode_RDtoRC8, dst, src; andi dst, src, 0x7f8; .endmacro -| -|// Instruction fetch. -|.macro ins_NEXT1 -| lw INS, 0(PC) -| addiu PC, PC, 4 -|.endmacro -|// Instruction decode+dispatch. -|.macro ins_NEXT2 -| decode_OP4a TMP1, INS -| decode_OP4b TMP1 -| addu TMP0, DISPATCH, TMP1 -| decode_RD8a RD, INS -| lw AT, 0(TMP0) -| decode_RA8a RA, INS -| decode_RD8b RD -| jr AT -| decode_RA8b RA -|.endmacro -|.macro ins_NEXT -| ins_NEXT1 -| ins_NEXT2 -|.endmacro -| -|// Instruction footer. -|.if 1 -| // Replicated dispatch. Less unpredictable branches, but higher I-Cache use. -| .define ins_next, ins_NEXT -| .define ins_next_, ins_NEXT -| .define ins_next1, ins_NEXT1 -| .define ins_next2, ins_NEXT2 -|.else -| // Common dispatch. Lower I-Cache use, only one (very) unpredictable branch. -| // Affects only certain kinds of benchmarks (and only with -j off). -| .macro ins_next -| b ->ins_next -| .endmacro -| .macro ins_next1 -| .endmacro -| .macro ins_next2 -| b ->ins_next -| .endmacro -| .macro ins_next_ -| ->ins_next: -| ins_NEXT -| .endmacro -|.endif -| -|// Call decode and dispatch. -|.macro ins_callt -| // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC -| lw PC, LFUNC:RB->pc -| lw INS, 0(PC) -| addiu PC, PC, 4 -| decode_OP4a TMP1, INS -| decode_RA8a RA, INS -| decode_OP4b TMP1 -| decode_RA8b RA -| addu TMP0, DISPATCH, TMP1 -| lw TMP0, 0(TMP0) -| jr TMP0 -| addu RA, RA, BASE -|.endmacro -| -|.macro ins_call -| // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, PC = caller PC -| sw PC, FRAME_PC(BASE) -| ins_callt -|.endmacro -| -|//----------------------------------------------------------------------- -| -|.macro branch_RD -| srl TMP0, RD, 1 -| lui AT, (-(BCBIAS_J*4 >> 16) & 65535) -| addu TMP0, TMP0, AT -| addu PC, PC, TMP0 -|.endmacro -| -|// Assumes DISPATCH is relative to GL. -#define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) -#define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) -#define GG_DISP2GOT (GG_OFS(got) - GG_OFS(dispatch)) -#define DISPATCH_GOT(name) (GG_DISP2GOT + 4*LJ_GOT_##name) -| -#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) -| -|.macro load_got, func -| lw CFUNCADDR, DISPATCH_GOT(func)(DISPATCH) -|.endmacro -|// Much faster. Sadly, there's no easy way to force the required code layout. -|// .macro call_intern, func; bal extern func; .endmacro -|.macro call_intern, func; jalr CFUNCADDR; .endmacro -|.macro call_extern; jalr CFUNCADDR; .endmacro -|.macro jmp_extern; jr CFUNCADDR; .endmacro -| -|.macro hotcheck, delta, target -| srl TMP1, PC, 1 -| andi TMP1, TMP1, 126 -| addu TMP1, TMP1, DISPATCH -| lhu TMP2, GG_DISP2HOT(TMP1) -| addiu TMP2, TMP2, -delta -| bltz TMP2, target -|. sh TMP2, GG_DISP2HOT(TMP1) -|.endmacro -| -|.macro hotloop -| hotcheck HOTCOUNT_LOOP, ->vm_hotloop -|.endmacro -| -|.macro hotcall -| hotcheck HOTCOUNT_CALL, ->vm_hotcall -|.endmacro -| -|// Set current VM state. Uses TMP0. -|.macro li_vmstate, st; li TMP0, ~LJ_VMST_..st; .endmacro -|.macro st_vmstate; sw TMP0, DISPATCH_GL(vmstate)(DISPATCH); .endmacro -| -|// Move table write barrier back. Overwrites mark and tmp. -|.macro barrierback, tab, mark, tmp, target -| lw tmp, DISPATCH_GL(gc.grayagain)(DISPATCH) -| andi mark, mark, ~LJ_GC_BLACK & 255 // black2gray(tab) -| sw tab, DISPATCH_GL(gc.grayagain)(DISPATCH) -| sb mark, tab->marked -| b target -|. sw tmp, tab->gclist -|.endmacro -| -|//----------------------------------------------------------------------- - -/* Generate subroutines used by opcodes and other parts of the VM. */ -/* The .code_sub section should be last to help static branch prediction. */ -static void build_subroutines(BuildCtx *ctx) -{ - |.code_sub - | - |//----------------------------------------------------------------------- - |//-- Return handling ---------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_returnp: - | // See vm_return. Also: TMP2 = previous base. - | andi AT, PC, FRAME_P - | beqz AT, ->cont_dispatch - |. li TMP1, LJ_TTRUE - | - | // Return from pcall or xpcall fast func. - | lw PC, FRAME_PC(TMP2) // Fetch PC of previous frame. - | move BASE, TMP2 // Restore caller base. - | // Prepending may overwrite the pcall frame, so do it at the end. - | sw TMP1, FRAME_PC(RA) // Prepend true to results. - | addiu RA, RA, -8 - | - |->vm_returnc: - | addiu RD, RD, 8 // RD = (nresults+1)*8. - | andi TMP0, PC, FRAME_TYPE - | beqz RD, ->vm_unwind_c_eh - |. li CRET1, LUA_YIELD - | beqz TMP0, ->BC_RET_Z // Handle regular return to Lua. - |. move MULTRES, RD - | - |->vm_return: - | // BASE = base, RA = resultptr, RD/MULTRES = (nresults+1)*8, PC = return - | // TMP0 = PC & FRAME_TYPE - | li TMP2, -8 - | xori AT, TMP0, FRAME_C - | and TMP2, PC, TMP2 - | bnez AT, ->vm_returnp - | subu TMP2, BASE, TMP2 // TMP2 = previous base. - | - | addiu TMP1, RD, -8 - | sw TMP2, L->base - | li_vmstate C - | lw TMP2, SAVE_NRES - | addiu BASE, BASE, -8 - | st_vmstate - | beqz TMP1, >2 - |. sll TMP2, TMP2, 3 - |1: - | addiu TMP1, TMP1, -8 - | ldc1 f0, 0(RA) - | addiu RA, RA, 8 - | sdc1 f0, 0(BASE) - | bnez TMP1, <1 - |. addiu BASE, BASE, 8 - | - |2: - | bne TMP2, RD, >6 - |3: - |. sw BASE, L->top // Store new top. - | - |->vm_leave_cp: - | lw TMP0, SAVE_CFRAME // Restore previous C frame. - | move CRET1, r0 // Ok return status for vm_pcall. - | sw TMP0, L->cframe - | - |->vm_leave_unw: - | restoreregs_ret - | - |6: - | lw TMP1, L->maxstack - | slt AT, TMP2, RD - | bnez AT, >7 // Less results wanted? - | // More results wanted. Check stack size and fill up results with nil. - |. slt AT, BASE, TMP1 - | beqz AT, >8 - |. nop - | sw TISNIL, HI(BASE) - | addiu RD, RD, 8 - | b <2 - |. addiu BASE, BASE, 8 - | - |7: // Less results wanted. - | subu TMP0, RD, TMP2 - | subu TMP0, BASE, TMP0 // Either keep top or shrink it. - | b <3 - |. movn BASE, TMP0, TMP2 // LUA_MULTRET+1 case? - | - |8: // Corner case: need to grow stack for filling up results. - | // This can happen if: - | // - A C function grows the stack (a lot). - | // - The GC shrinks the stack in between. - | // - A return back from a lua_call() with (high) nresults adjustment. - | load_got lj_state_growstack - | move MULTRES, RD - | srl CARG2, TMP2, 3 - | call_intern lj_state_growstack // (lua_State *L, int n) - |. move CARG1, L - | lw TMP2, SAVE_NRES - | lw BASE, L->top // Need the (realloced) L->top in BASE. - | move RD, MULTRES - | b <2 - |. sll TMP2, TMP2, 3 - | - |->vm_unwind_c: // Unwind C stack, return from vm_pcall. - | // (void *cframe, int errcode) - | move sp, CARG1 - | move CRET1, CARG2 - |->vm_unwind_c_eh: // Landing pad for external unwinder. - | lw L, SAVE_L - | li TMP0, ~LJ_VMST_C - | lw GL:TMP1, L->glref - | b ->vm_leave_unw - |. sw TMP0, GL:TMP1->vmstate - | - |->vm_unwind_ff: // Unwind C stack, return from ff pcall. - | // (void *cframe) - | li AT, -4 - | and sp, CARG1, AT - |->vm_unwind_ff_eh: // Landing pad for external unwinder. - | lw L, SAVE_L - | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | li TISNIL, LJ_TNIL - | lw BASE, L->base - | lw DISPATCH, L->glref // Setup pointer to dispatch table. - | mtc1 TMP3, TOBIT - | li TMP1, LJ_TFALSE - | li_vmstate INTERP - | lw PC, FRAME_PC(BASE) // Fetch PC of previous frame. - | cvt.d.s TOBIT, TOBIT - | addiu RA, BASE, -8 // Results start at BASE-8. - | addiu DISPATCH, DISPATCH, GG_G2DISP - | sw TMP1, HI(RA) // Prepend false to error message. - | st_vmstate - | b ->vm_returnc - |. li RD, 16 // 2 results: false + error message. - | - |//----------------------------------------------------------------------- - |//-- Grow stack for calls ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_growstack_c: // Grow stack for C function. - | b >2 - |. li CARG2, LUA_MINSTACK - | - |->vm_growstack_l: // Grow stack for Lua function. - | // BASE = new base, RA = BASE+framesize*8, RC = nargs*8, PC = first PC - | addu RC, BASE, RC - | subu RA, RA, BASE - | sw BASE, L->base - | addiu PC, PC, 4 // Must point after first instruction. - | sw RC, L->top - | srl CARG2, RA, 3 - |2: - | // L->base = new base, L->top = top - | load_got lj_state_growstack - | sw PC, SAVE_PC - | call_intern lj_state_growstack // (lua_State *L, int n) - |. move CARG1, L - | lw BASE, L->base - | lw RC, L->top - | lw LFUNC:RB, FRAME_FUNC(BASE) - | subu RC, RC, BASE - | // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC - | ins_callt // Just retry the call. - | - |//----------------------------------------------------------------------- - |//-- Entry points into the assembler VM --------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_resume: // Setup C frame and resume thread. - | // (lua_State *L, TValue *base, int nres1 = 0, ptrdiff_t ef = 0) - | saveregs - | move L, CARG1 - | lw DISPATCH, L->glref // Setup pointer to dispatch table. - | move BASE, CARG2 - | lbu TMP1, L->status - | sw L, SAVE_L - | li PC, FRAME_CP - | addiu TMP0, sp, CFRAME_RESUME - | addiu DISPATCH, DISPATCH, GG_G2DISP - | sw r0, SAVE_NRES - | sw r0, SAVE_ERRF - | sw TMP0, L->cframe - | sw r0, SAVE_CFRAME - | beqz TMP1, >3 - |. sw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | - | // Resume after yield (like a return). - | move RA, BASE - | lw BASE, L->base - | lw TMP1, L->top - | lw PC, FRAME_PC(BASE) - | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | subu RD, TMP1, BASE - | mtc1 TMP3, TOBIT - | sb r0, L->status - | cvt.d.s TOBIT, TOBIT - | li_vmstate INTERP - | addiu RD, RD, 8 - | st_vmstate - | move MULTRES, RD - | andi TMP0, PC, FRAME_TYPE - | beqz TMP0, ->BC_RET_Z - |. li TISNIL, LJ_TNIL - | b ->vm_return - |. nop - | - |->vm_pcall: // Setup protected C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) - | saveregs - | sw CARG4, SAVE_ERRF - | b >1 - |. li PC, FRAME_CP - | - |->vm_call: // Setup C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1) - | saveregs - | li PC, FRAME_C - | - |1: // Entry point for vm_pcall above (PC = ftype). - | lw TMP1, L:CARG1->cframe - | sw CARG3, SAVE_NRES - | move L, CARG1 - | sw CARG1, SAVE_L - | move BASE, CARG2 - | sw sp, L->cframe // Add our C frame to cframe chain. - | lw DISPATCH, L->glref // Setup pointer to dispatch table. - | sw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | sw TMP1, SAVE_CFRAME - | addiu DISPATCH, DISPATCH, GG_G2DISP - | - |3: // Entry point for vm_cpcall/vm_resume (BASE = base, PC = ftype). - | lw TMP2, L->base // TMP2 = old base (used in vmeta_call). - | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | lw TMP1, L->top - | mtc1 TMP3, TOBIT - | addu PC, PC, BASE - | subu NARGS8:RC, TMP1, BASE - | subu PC, PC, TMP2 // PC = frame delta + frame type - | cvt.d.s TOBIT, TOBIT - | li_vmstate INTERP - | li TISNIL, LJ_TNIL - | st_vmstate - | - |->vm_call_dispatch: - | // TMP2 = old base, BASE = new base, RC = nargs*8, PC = caller PC - | lw TMP0, FRAME_PC(BASE) - | li AT, LJ_TFUNC - | bne TMP0, AT, ->vmeta_call - |. lw LFUNC:RB, FRAME_FUNC(BASE) - | - |->vm_call_dispatch_f: - | ins_call - | // BASE = new base, RB = func, RC = nargs*8, PC = caller PC - | - |->vm_cpcall: // Setup protected C frame, call C. - | // (lua_State *L, lua_CFunction func, void *ud, lua_CPFunction cp) - | saveregs - | move L, CARG1 - | lw TMP0, L:CARG1->stack - | sw CARG1, SAVE_L - | lw TMP1, L->top - | sw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | subu TMP0, TMP0, TMP1 // Compute -savestack(L, L->top). - | lw TMP1, L->cframe - | sw sp, L->cframe // Add our C frame to cframe chain. - | sw TMP0, SAVE_NRES // Neg. delta means cframe w/o frame. - | sw r0, SAVE_ERRF // No error function. - | move CFUNCADDR, CARG4 - | jalr CARG4 // (lua_State *L, lua_CFunction func, void *ud) - |. sw TMP1, SAVE_CFRAME - | move BASE, CRET1 - | lw DISPATCH, L->glref // Setup pointer to dispatch table. - | li PC, FRAME_CP - | bnez CRET1, <3 // Else continue with the call. - |. addiu DISPATCH, DISPATCH, GG_G2DISP - | b ->vm_leave_cp // No base? Just remove C frame. - |. nop - | - |//----------------------------------------------------------------------- - |//-- Metamethod handling ------------------------------------------------ - |//----------------------------------------------------------------------- - | - |// The lj_meta_* functions (except for lj_meta_cat) don't reallocate the - |// stack, so BASE doesn't need to be reloaded across these calls. - | - |//-- Continuation dispatch ---------------------------------------------- - | - |->cont_dispatch: - | // BASE = meta base, RA = resultptr, RD = (nresults+1)*8 - | lw TMP0, -16+LO(BASE) // Continuation. - | move RB, BASE - | move BASE, TMP2 // Restore caller BASE. - | lw LFUNC:TMP1, FRAME_FUNC(TMP2) - |.if FFI - | sltiu AT, TMP0, 2 - |.endif - | lw PC, -16+HI(RB) // Restore PC from [cont|PC]. - | addu TMP2, RA, RD - | lw TMP1, LFUNC:TMP1->pc - |.if FFI - | bnez AT, >1 - |.endif - |. sw TISNIL, -8+HI(TMP2) // Ensure one valid arg. - | // BASE = base, RA = resultptr, RB = meta base - | jr TMP0 // Jump to continuation. - |. lw KBASE, PC2PROTO(k)(TMP1) - | - |.if FFI - |1: - | bnez TMP0, ->cont_ffi_callback // cont = 1: return from FFI callback. - | // cont = 0: tailcall from C function. - |. addiu TMP1, RB, -16 - | b ->vm_call_tail - |. subu RC, TMP1, BASE - |.endif - | - |->cont_cat: // RA = resultptr, RB = meta base - | lw INS, -4(PC) - | addiu CARG2, RB, -16 - | ldc1 f0, 0(RA) - | decode_RB8a MULTRES, INS - | decode_RA8a RA, INS - | decode_RB8b MULTRES - | decode_RA8b RA - | addu TMP1, BASE, MULTRES - | sw BASE, L->base - | subu CARG3, CARG2, TMP1 - | bne TMP1, CARG2, ->BC_CAT_Z - |. sdc1 f0, 0(CARG2) - | addu RA, BASE, RA - | b ->cont_nop - |. sdc1 f0, 0(RA) - | - |//-- Table indexing metamethods ----------------------------------------- - | - |->vmeta_tgets1: - | addiu CARG3, DISPATCH, DISPATCH_GL(tmptv) - | li TMP0, LJ_TSTR - | sw STR:RC, LO(CARG3) - | b >1 - |. sw TMP0, HI(CARG3) - | - |->vmeta_tgets: - | addiu CARG2, DISPATCH, DISPATCH_GL(tmptv) - | li TMP0, LJ_TTAB - | sw TAB:RB, LO(CARG2) - | addiu CARG3, DISPATCH, DISPATCH_GL(tmptv2) - | sw TMP0, HI(CARG2) - | li TMP1, LJ_TSTR - | sw STR:RC, LO(CARG3) - | b >1 - |. sw TMP1, HI(CARG3) - | - |->vmeta_tgetb: // TMP0 = index - | mtc1 TMP0, f0 - | cvt.d.w f0, f0 - | addiu CARG3, DISPATCH, DISPATCH_GL(tmptv) - | sdc1 f0, 0(CARG3) - | - |->vmeta_tgetv: - |1: - | load_got lj_meta_tget - | sw BASE, L->base - | sw PC, SAVE_PC - | call_intern lj_meta_tget // (lua_State *L, TValue *o, TValue *k) - |. move CARG1, L - | // Returns TValue * (finished) or NULL (metamethod). - | beqz CRET1, >3 - |. addiu TMP1, BASE, -FRAME_CONT - | ldc1 f0, 0(CRET1) - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - | - |3: // Call __index metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k - | lw BASE, L->top - | sw PC, -16+HI(BASE) // [cont|PC] - | subu PC, BASE, TMP1 - | lw LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | b ->vm_call_dispatch_f - |. li NARGS8:RC, 16 // 2 args for func(t, k). - | - |//----------------------------------------------------------------------- - | - |->vmeta_tsets1: - | addiu CARG3, DISPATCH, DISPATCH_GL(tmptv) - | li TMP0, LJ_TSTR - | sw STR:RC, LO(CARG3) - | b >1 - |. sw TMP0, HI(CARG3) - | - |->vmeta_tsets: - | addiu CARG2, DISPATCH, DISPATCH_GL(tmptv) - | li TMP0, LJ_TTAB - | sw TAB:RB, LO(CARG2) - | addiu CARG3, DISPATCH, DISPATCH_GL(tmptv2) - | sw TMP0, HI(CARG2) - | li TMP1, LJ_TSTR - | sw STR:RC, LO(CARG3) - | b >1 - |. sw TMP1, HI(CARG3) - | - |->vmeta_tsetb: // TMP0 = index - | mtc1 TMP0, f0 - | cvt.d.w f0, f0 - | addiu CARG3, DISPATCH, DISPATCH_GL(tmptv) - | sdc1 f0, 0(CARG3) - | - |->vmeta_tsetv: - |1: - | load_got lj_meta_tset - | sw BASE, L->base - | sw PC, SAVE_PC - | call_intern lj_meta_tset // (lua_State *L, TValue *o, TValue *k) - |. move CARG1, L - | // Returns TValue * (finished) or NULL (metamethod). - | beqz CRET1, >3 - |. ldc1 f0, 0(RA) - | // NOBARRIER: lj_meta_tset ensures the table is not black. - | ins_next1 - | sdc1 f0, 0(CRET1) - | ins_next2 - | - |3: // Call __newindex metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k/(v) - | addiu TMP1, BASE, -FRAME_CONT - | lw BASE, L->top - | sw PC, -16+HI(BASE) // [cont|PC] - | subu PC, BASE, TMP1 - | lw LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | sdc1 f0, 16(BASE) // Copy value to third argument. - | b ->vm_call_dispatch_f - |. li NARGS8:RC, 24 // 3 args for func(t, k, v) - | - |//-- Comparison metamethods --------------------------------------------- - | - |->vmeta_comp: - | // CARG2, CARG3 are already set by BC_ISLT/BC_ISGE/BC_ISLE/BC_ISGT. - | load_got lj_meta_comp - | addiu PC, PC, -4 - | sw BASE, L->base - | sw PC, SAVE_PC - | decode_OP1 CARG4, INS - | call_intern lj_meta_comp // (lua_State *L, TValue *o1, *o2, int op) - |. move CARG1, L - | // Returns 0/1 or TValue * (metamethod). - |3: - | sltiu AT, CRET1, 2 - | beqz AT, ->vmeta_binop - | negu TMP2, CRET1 - |4: - | lhu RD, OFS_RD(PC) - | addiu PC, PC, 4 - | lui TMP1, (-(BCBIAS_J*4 >> 16) & 65535) - | sll RD, RD, 2 - | addu RD, RD, TMP1 - | and RD, RD, TMP2 - | addu PC, PC, RD - |->cont_nop: - | ins_next - | - |->cont_ra: // RA = resultptr - | lbu TMP1, -4+OFS_RA(PC) - | ldc1 f0, 0(RA) - | sll TMP1, TMP1, 3 - | addu TMP1, BASE, TMP1 - | b ->cont_nop - |. sdc1 f0, 0(TMP1) - | - |->cont_condt: // RA = resultptr - | lw TMP0, HI(RA) - | sltiu AT, TMP0, LJ_TISTRUECOND - | b <4 - |. negu TMP2, AT // Branch if result is true. - | - |->cont_condf: // RA = resultptr - | lw TMP0, HI(RA) - | sltiu AT, TMP0, LJ_TISTRUECOND - | b <4 - |. addiu TMP2, AT, -1 // Branch if result is false. - | - |->vmeta_equal: - | // CARG2, CARG3, CARG4 are already set by BC_ISEQV/BC_ISNEV. - | load_got lj_meta_equal - | addiu PC, PC, -4 - | sw BASE, L->base - | sw PC, SAVE_PC - | call_intern lj_meta_equal // (lua_State *L, GCobj *o1, *o2, int ne) - |. move CARG1, L - | // Returns 0/1 or TValue * (metamethod). - | b <3 - |. nop - | - |->vmeta_equal_cd: - |.if FFI - | load_got lj_meta_equal_cd - | move CARG2, INS - | addiu PC, PC, -4 - | sw BASE, L->base - | sw PC, SAVE_PC - | call_intern lj_meta_equal_cd // (lua_State *L, BCIns op) - |. move CARG1, L - | // Returns 0/1 or TValue * (metamethod). - | b <3 - |. nop - |.endif - | - |//-- Arithmetic metamethods --------------------------------------------- - | - |->vmeta_unm: - | move CARG4, CARG3 - | - |->vmeta_arith: - | load_got lj_meta_arith - | decode_OP1 TMP0, INS - | sw BASE, L->base - | sw PC, SAVE_PC - | move CARG2, RA - | sw TMP0, ARG5 - | call_intern lj_meta_arith // (lua_State *L, TValue *ra,*rb,*rc, BCReg op) - |. move CARG1, L - | // Returns NULL (finished) or TValue * (metamethod). - | beqz CRET1, ->cont_nop - |. nop - | - | // Call metamethod for binary op. - |->vmeta_binop: - | // BASE = old base, CRET1 = new base, stack = cont/func/o1/o2 - | subu TMP1, CRET1, BASE - | sw PC, -16+HI(CRET1) // [cont|PC] - | move TMP2, BASE - | addiu PC, TMP1, FRAME_CONT - | move BASE, CRET1 - | b ->vm_call_dispatch - |. li NARGS8:RC, 16 // 2 args for func(o1, o2). - | - |->vmeta_len: - | // CARG2 already set by BC_LEN. -#if LJ_52 - | move MULTRES, CARG1 -#endif - | load_got lj_meta_len - | sw BASE, L->base - | sw PC, SAVE_PC - | call_intern lj_meta_len // (lua_State *L, TValue *o) - |. move CARG1, L - | // Returns NULL (retry) or TValue * (metamethod base). -#if LJ_52 - | bnez CRET1, ->vmeta_binop // Binop call for compatibility. - |. nop - | b ->BC_LEN_Z - |. move CARG1, MULTRES -#else - | b ->vmeta_binop // Binop call for compatibility. - |. nop -#endif - | - |//-- Call metamethod ---------------------------------------------------- - | - |->vmeta_call: // Resolve and call __call metamethod. - | // TMP2 = old base, BASE = new base, RC = nargs*8 - | load_got lj_meta_call - | sw TMP2, L->base // This is the callers base! - | addiu CARG2, BASE, -8 - | sw PC, SAVE_PC - | addu CARG3, BASE, RC - | move MULTRES, NARGS8:RC - | call_intern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - |. move CARG1, L - | lw LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | addiu NARGS8:RC, MULTRES, 8 // Got one more argument now. - | ins_call - | - |->vmeta_callt: // Resolve __call for BC_CALLT. - | // BASE = old base, RA = new base, RC = nargs*8 - | load_got lj_meta_call - | sw BASE, L->base - | addiu CARG2, RA, -8 - | sw PC, SAVE_PC - | addu CARG3, RA, RC - | move MULTRES, NARGS8:RC - | call_intern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - |. move CARG1, L - | lw TMP1, FRAME_PC(BASE) - | lw LFUNC:RB, FRAME_FUNC(RA) // Guaranteed to be a function here. - | b ->BC_CALLT_Z - |. addiu NARGS8:RC, MULTRES, 8 // Got one more argument now. - | - |//-- Argument coercion for 'for' statement ------------------------------ - | - |->vmeta_for: - | load_got lj_meta_for - | sw BASE, L->base - | move CARG2, RA - | sw PC, SAVE_PC - | move MULTRES, INS - | call_intern lj_meta_for // (lua_State *L, TValue *base) - |. move CARG1, L - |.if JIT - | decode_OP1 TMP0, MULTRES - | li AT, BC_JFORI - |.endif - | decode_RA8a RA, MULTRES - | decode_RD8a RD, MULTRES - | decode_RA8b RA - |.if JIT - | beq TMP0, AT, =>BC_JFORI - |. decode_RD8b RD - | b =>BC_FORI - |. nop - |.else - | b =>BC_FORI - |. decode_RD8b RD - |.endif - | - |//----------------------------------------------------------------------- - |//-- Fast functions ----------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro .ffunc, name - |->ff_ .. name: - |.endmacro - | - |.macro .ffunc_1, name - |->ff_ .. name: - | beqz NARGS8:RC, ->fff_fallback - |. lw CARG3, HI(BASE) - | lw CARG1, LO(BASE) - |.endmacro - | - |.macro .ffunc_2, name - |->ff_ .. name: - | sltiu AT, NARGS8:RC, 16 - | lw CARG3, HI(BASE) - | bnez AT, ->fff_fallback - |. lw CARG4, 8+HI(BASE) - | lw CARG1, LO(BASE) - | lw CARG2, 8+LO(BASE) - |.endmacro - | - |.macro .ffunc_n, name // Caveat: has delay slot! - |->ff_ .. name: - | lw CARG3, HI(BASE) - | beqz NARGS8:RC, ->fff_fallback - |. ldc1 FARG1, 0(BASE) - | sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |.endmacro - | - |.macro .ffunc_nn, name // Caveat: has delay slot! - |->ff_ .. name: - | sltiu AT, NARGS8:RC, 16 - | lw CARG3, HI(BASE) - | bnez AT, ->fff_fallback - |. lw CARG4, 8+HI(BASE) - | ldc1 FARG1, 0(BASE) - | ldc1 FARG2, 8(BASE) - | sltiu TMP0, CARG3, LJ_TISNUM - | sltiu TMP1, CARG4, LJ_TISNUM - | and TMP0, TMP0, TMP1 - | beqz TMP0, ->fff_fallback - |.endmacro - | - |// Inlined GC threshold check. Caveat: uses TMP0 and TMP1 and has delay slot! - |.macro ffgccheck - | lw TMP0, DISPATCH_GL(gc.total)(DISPATCH) - | lw TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) - | subu AT, TMP0, TMP1 - | bgezal AT, ->fff_gcstep - |.endmacro - | - |//-- Base library: checks ----------------------------------------------- - | - |.ffunc_1 assert - | sltiu AT, CARG3, LJ_TISTRUECOND - | beqz AT, ->fff_fallback - |. addiu RA, BASE, -8 - | lw PC, FRAME_PC(BASE) - | addiu RD, NARGS8:RC, 8 // Compute (nresults+1)*8. - | addu TMP2, RA, NARGS8:RC - | sw CARG3, HI(RA) - | addiu TMP1, BASE, 8 - | beq BASE, TMP2, ->fff_res // Done if exactly 1 argument. - |. sw CARG1, LO(RA) - |1: - | ldc1 f0, 0(TMP1) - | sdc1 f0, -8(TMP1) - | bne TMP1, TMP2, <1 - |. addiu TMP1, TMP1, 8 - | b ->fff_res - |. nop - | - |.ffunc type - | lw CARG3, HI(BASE) - | li TMP1, LJ_TISNUM - | beqz NARGS8:RC, ->fff_fallback - |. sltiu TMP0, CARG3, LJ_TISNUM - | movz TMP1, CARG3, TMP0 - | not TMP1, TMP1 - | sll TMP1, TMP1, 3 - | addu TMP1, CFUNC:RB, TMP1 - | b ->fff_resn - |. ldc1 FRET1, CFUNC:TMP1->upvalue - | - |//-- Base library: getters and setters --------------------------------- - | - |.ffunc_1 getmetatable - | li AT, LJ_TTAB - | bne CARG3, AT, >6 - |. li AT, LJ_TUDATA - |1: // Field metatable must be at same offset for GCtab and GCudata! - | lw TAB:CARG1, TAB:CARG1->metatable - |2: - | lw STR:RC, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable])(DISPATCH) - | beqz TAB:CARG1, ->fff_restv - |. li CARG3, LJ_TNIL - | lw TMP0, TAB:CARG1->hmask - | li CARG3, LJ_TTAB // Use metatable as default result. - | lw TMP1, STR:RC->hash - | lw NODE:TMP2, TAB:CARG1->node - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | sll TMP0, TMP1, 5 - | sll TMP1, TMP1, 3 - | subu TMP1, TMP0, TMP1 - | addu NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - | li AT, LJ_TSTR - |3: // Rearranged logic, because we expect _not_ to find the key. - | lw CARG4, offsetof(Node, key)+HI(NODE:TMP2) - | lw TMP0, offsetof(Node, key)+LO(NODE:TMP2) - | lw NODE:TMP3, NODE:TMP2->next - | bne CARG4, AT, >4 - |. lw CARG2, offsetof(Node, val)+HI(NODE:TMP2) - | beq TMP0, STR:RC, >5 - |. lw TMP1, offsetof(Node, val)+LO(NODE:TMP2) - |4: - | beqz NODE:TMP3, ->fff_restv // Not found, keep default result. - |. move NODE:TMP2, NODE:TMP3 - | b <3 - |. nop - |5: - | beq CARG2, TISNIL, ->fff_restv // Ditto for nil value. - |. nop - | move CARG3, CARG2 // Return value of mt.__metatable. - | b ->fff_restv - |. move CARG1, TMP1 - | - |6: - | beq CARG3, AT, <1 - |. sltiu TMP0, CARG3, LJ_TISNUM - | li TMP1, LJ_TISNUM - | movz TMP1, CARG3, TMP0 - | not TMP1, TMP1 - | sll TMP1, TMP1, 2 - | addu TMP1, DISPATCH, TMP1 - | b <2 - |. lw TAB:CARG1, DISPATCH_GL(gcroot[GCROOT_BASEMT])(TMP1) - | - |.ffunc_2 setmetatable - | // Fast path: no mt for table yet and not clearing the mt. - | li AT, LJ_TTAB - | bne CARG3, AT, ->fff_fallback - |. addiu CARG4, CARG4, -LJ_TTAB - | lw TAB:TMP1, TAB:CARG1->metatable - | lbu TMP3, TAB:CARG1->marked - | or AT, CARG4, TAB:TMP1 - | bnez AT, ->fff_fallback - |. andi AT, TMP3, LJ_GC_BLACK // isblack(table) - | beqz AT, ->fff_restv - |. sw TAB:CARG2, TAB:CARG1->metatable - | barrierback TAB:CARG1, TMP3, TMP0, ->fff_restv - | - |.ffunc rawget - | lw CARG4, HI(BASE) - | sltiu AT, NARGS8:RC, 16 - | lw TAB:CARG2, LO(BASE) - | load_got lj_tab_get - | addiu CARG4, CARG4, -LJ_TTAB - | or AT, AT, CARG4 - | bnez AT, ->fff_fallback - | addiu CARG3, BASE, 8 - | call_intern lj_tab_get // (lua_State *L, GCtab *t, cTValue *key) - |. move CARG1, L - | // Returns cTValue *. - | b ->fff_resn - |. ldc1 FRET1, 0(CRET1) - | - |//-- Base library: conversions ------------------------------------------ - | - |.ffunc tonumber - | // Only handles the number case inline (without a base argument). - | lw CARG1, HI(BASE) - | xori AT, NARGS8:RC, 8 - | sltiu CARG1, CARG1, LJ_TISNUM - | movn CARG1, r0, AT - | beqz CARG1, ->fff_fallback // Exactly one number argument. - |. ldc1 FRET1, 0(BASE) - | b ->fff_resn - |. nop - | - |.ffunc_1 tostring - | // Only handles the string or number case inline. - | li AT, LJ_TSTR - | // A __tostring method in the string base metatable is ignored. - | beq CARG3, AT, ->fff_restv // String key? - | // Handle numbers inline, unless a number base metatable is present. - |. lw TMP1, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM])(DISPATCH) - | sltiu TMP0, CARG3, LJ_TISNUM - | sltiu TMP1, TMP1, 1 - | and TMP0, TMP0, TMP1 - | beqz TMP0, ->fff_fallback - |. sw BASE, L->base // Add frame since C call can throw. - | ffgccheck - |. sw PC, SAVE_PC // Redundant (but a defined value). - | load_got lj_str_fromnum - | move CARG1, L - | call_intern lj_str_fromnum // (lua_State *L, lua_Number *np) - |. move CARG2, BASE - | // Returns GCstr *. - | li CARG3, LJ_TSTR - | b ->fff_restv - |. move CARG1, CRET1 - | - |//-- Base library: iterators ------------------------------------------- - | - |.ffunc next - | lw CARG1, HI(BASE) - | lw TAB:CARG2, LO(BASE) - | beqz NARGS8:RC, ->fff_fallback - |. addu TMP2, BASE, NARGS8:RC - | li AT, LJ_TTAB - | sw TISNIL, HI(TMP2) // Set missing 2nd arg to nil. - | bne CARG1, AT, ->fff_fallback - |. lw PC, FRAME_PC(BASE) - | load_got lj_tab_next - | sw BASE, L->base // Add frame since C call can throw. - | sw BASE, L->top // Dummy frame length is ok. - | addiu CARG3, BASE, 8 - | sw PC, SAVE_PC - | call_intern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) - |. move CARG1, L - | // Returns 0 at end of traversal. - | beqz CRET1, ->fff_restv // End of traversal: return nil. - |. li CARG3, LJ_TNIL - | ldc1 f0, 8(BASE) // Copy key and value to results. - | addiu RA, BASE, -8 - | ldc1 f2, 16(BASE) - | li RD, (2+1)*8 - | sdc1 f0, 0(RA) - | b ->fff_res - |. sdc1 f2, 8(RA) - | - |.ffunc_1 pairs - | li AT, LJ_TTAB - | bne CARG3, AT, ->fff_fallback - |. lw PC, FRAME_PC(BASE) -#if LJ_52 - | lw TAB:TMP2, TAB:CARG1->metatable - | ldc1 f0, CFUNC:RB->upvalue[0] - | bnez TAB:TMP2, ->fff_fallback -#else - | ldc1 f0, CFUNC:RB->upvalue[0] -#endif - |. addiu RA, BASE, -8 - | sw TISNIL, 8+HI(BASE) - | li RD, (3+1)*8 - | b ->fff_res - |. sdc1 f0, 0(RA) - | - |.ffunc ipairs_aux - | sltiu AT, NARGS8:RC, 16 - | lw CARG3, HI(BASE) - | lw TAB:CARG1, LO(BASE) - | lw CARG4, 8+HI(BASE) - | bnez AT, ->fff_fallback - |. ldc1 FARG2, 8(BASE) - | addiu CARG3, CARG3, -LJ_TTAB - | sltiu AT, CARG4, LJ_TISNUM - | li TMP0, 1 - | movn AT, r0, CARG3 - | mtc1 TMP0, FARG1 - | beqz AT, ->fff_fallback - |. lw PC, FRAME_PC(BASE) - | cvt.w.d FRET1, FARG2 - | cvt.d.w FARG1, FARG1 - | lw TMP0, TAB:CARG1->asize - | lw TMP1, TAB:CARG1->array - | mfc1 TMP2, FRET1 - | addiu RA, BASE, -8 - | add.d FARG2, FARG2, FARG1 - | addiu TMP2, TMP2, 1 - | sltu AT, TMP2, TMP0 - | sll TMP3, TMP2, 3 - | addu TMP3, TMP1, TMP3 - | beqz AT, >2 // Not in array part? - |. sdc1 FARG2, 0(RA) - | lw TMP2, HI(TMP3) - | ldc1 f0, 0(TMP3) - |1: - | beq TMP2, TISNIL, ->fff_res // End of iteration, return 0 results. - |. li RD, (0+1)*8 - | li RD, (2+1)*8 - | b ->fff_res - |. sdc1 f0, 8(RA) - |2: // Check for empty hash part first. Otherwise call C function. - | lw TMP0, TAB:CARG1->hmask - | load_got lj_tab_getinth - | beqz TMP0, ->fff_res - |. li RD, (0+1)*8 - | call_intern lj_tab_getinth // (GCtab *t, int32_t key) - |. move CARG2, TMP2 - | // Returns cTValue * or NULL. - | beqz CRET1, ->fff_res - |. li RD, (0+1)*8 - | lw TMP2, HI(CRET1) - | b <1 - |. ldc1 f0, 0(CRET1) - | - |.ffunc_1 ipairs - | li AT, LJ_TTAB - | bne CARG3, AT, ->fff_fallback - |. lw PC, FRAME_PC(BASE) -#if LJ_52 - | lw TAB:TMP2, TAB:CARG1->metatable - | ldc1 f0, CFUNC:RB->upvalue[0] - | bnez TAB:TMP2, ->fff_fallback -#else - | ldc1 f0, CFUNC:RB->upvalue[0] -#endif - |. addiu RA, BASE, -8 - | sw r0, 8+HI(BASE) - | sw r0, 8+LO(BASE) - | li RD, (3+1)*8 - | b ->fff_res - |. sdc1 f0, 0(RA) - | - |//-- Base library: catch errors ---------------------------------------- - | - |.ffunc pcall - | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | beqz NARGS8:RC, ->fff_fallback - | move TMP2, BASE - | addiu BASE, BASE, 8 - | // Remember active hook before pcall. - | srl TMP3, TMP3, HOOK_ACTIVE_SHIFT - | andi TMP3, TMP3, 1 - | addiu PC, TMP3, 8+FRAME_PCALL - | b ->vm_call_dispatch - |. addiu NARGS8:RC, NARGS8:RC, -8 - | - |.ffunc xpcall - | sltiu AT, NARGS8:RC, 16 - | lw CARG4, 8+HI(BASE) - | bnez AT, ->fff_fallback - |. ldc1 FARG2, 8(BASE) - | ldc1 FARG1, 0(BASE) - | lbu TMP1, DISPATCH_GL(hookmask)(DISPATCH) - | li AT, LJ_TFUNC - | move TMP2, BASE - | bne CARG4, AT, ->fff_fallback // Traceback must be a function. - | addiu BASE, BASE, 16 - | // Remember active hook before pcall. - | srl TMP3, TMP3, HOOK_ACTIVE_SHIFT - | sdc1 FARG2, 0(TMP2) // Swap function and traceback. - | andi TMP3, TMP3, 1 - | sdc1 FARG1, 8(TMP2) - | addiu PC, TMP3, 16+FRAME_PCALL - | b ->vm_call_dispatch - |. addiu NARGS8:RC, NARGS8:RC, -16 - | - |//-- Coroutine library -------------------------------------------------- - | - |.macro coroutine_resume_wrap, resume - |.if resume - |.ffunc_1 coroutine_resume - | li AT, LJ_TTHREAD - | bne CARG3, AT, ->fff_fallback - |.else - |.ffunc coroutine_wrap_aux - | lw L:CARG1, CFUNC:RB->upvalue[0].gcr - |.endif - | lbu TMP0, L:CARG1->status - | lw TMP1, L:CARG1->cframe - | lw CARG2, L:CARG1->top - | lw TMP2, L:CARG1->base - | addiu TMP3, TMP0, -LUA_YIELD - | bgtz TMP3, ->fff_fallback // st > LUA_YIELD? - |. xor TMP2, TMP2, CARG2 - | bnez TMP1, ->fff_fallback // cframe != 0? - |. or AT, TMP2, TMP0 - | lw TMP0, L:CARG1->maxstack - | beqz AT, ->fff_fallback // base == top && st == 0? - |. lw PC, FRAME_PC(BASE) - | addu TMP2, CARG2, NARGS8:RC - | sltu AT, TMP0, TMP2 - | bnez AT, ->fff_fallback // Stack overflow? - |. sw PC, SAVE_PC - | sw BASE, L->base - |1: - |.if resume - | addiu BASE, BASE, 8 // Keep resumed thread in stack for GC. - | addiu NARGS8:RC, NARGS8:RC, -8 - | addiu TMP2, TMP2, -8 - |.endif - | sw TMP2, L:CARG1->top - | addu TMP1, BASE, NARGS8:RC - | move CARG3, CARG2 - | sw BASE, L->top - |2: // Move args to coroutine. - | ldc1 f0, 0(BASE) - | sltu AT, BASE, TMP1 - | beqz AT, >3 - |. addiu BASE, BASE, 8 - | sdc1 f0, 0(CARG3) - | b <2 - |. addiu CARG3, CARG3, 8 - |3: - | bal ->vm_resume // (lua_State *L, TValue *base, 0, 0) - |. move L:RA, L:CARG1 - | // Returns thread status. - |4: - | lw TMP2, L:RA->base - | sltiu AT, CRET1, LUA_YIELD+1 - | lw TMP3, L:RA->top - | li_vmstate INTERP - | lw BASE, L->base - | st_vmstate - | beqz AT, >8 - |. subu RD, TMP3, TMP2 - | lw TMP0, L->maxstack - | beqz RD, >6 // No results? - |. addu TMP1, BASE, RD - | sltu AT, TMP0, TMP1 - | bnez AT, >9 // Need to grow stack? - |. addu TMP3, TMP2, RD - | sw TMP2, L:RA->top // Clear coroutine stack. - | move TMP1, BASE - |5: // Move results from coroutine. - | ldc1 f0, 0(TMP2) - | addiu TMP2, TMP2, 8 - | sltu AT, TMP2, TMP3 - | sdc1 f0, 0(TMP1) - | bnez AT, <5 - |. addiu TMP1, TMP1, 8 - |6: - | andi TMP0, PC, FRAME_TYPE - |.if resume - | li TMP1, LJ_TTRUE - | addiu RA, BASE, -8 - | sw TMP1, -8+HI(BASE) // Prepend true to results. - | addiu RD, RD, 16 - |.else - | move RA, BASE - | addiu RD, RD, 8 - |.endif - |7: - | sw PC, SAVE_PC - | beqz TMP0, ->BC_RET_Z - |. move MULTRES, RD - | b ->vm_return - |. nop - | - |8: // Coroutine returned with error (at co->top-1). - |.if resume - | addiu TMP3, TMP3, -8 - | li TMP1, LJ_TFALSE - | ldc1 f0, 0(TMP3) - | sw TMP3, L:RA->top // Remove error from coroutine stack. - | li RD, (2+1)*8 - | sw TMP1, -8+HI(BASE) // Prepend false to results. - | addiu RA, BASE, -8 - | sdc1 f0, 0(BASE) // Copy error message. - | b <7 - |. andi TMP0, PC, FRAME_TYPE - |.else - | load_got lj_ffh_coroutine_wrap_err - | move CARG2, L:RA - | call_intern lj_ffh_coroutine_wrap_err // (lua_State *L, lua_State *co) - |. move CARG1, L - |.endif - | - |9: // Handle stack expansion on return from yield. - | load_got lj_state_growstack - | srl CARG2, RD, 3 - | call_intern lj_state_growstack // (lua_State *L, int n) - |. move CARG1, L - | b <4 - |. li CRET1, 0 - |.endmacro - | - | coroutine_resume_wrap 1 // coroutine.resume - | coroutine_resume_wrap 0 // coroutine.wrap - | - |.ffunc coroutine_yield - | lw TMP0, L->cframe - | addu TMP1, BASE, NARGS8:RC - | sw BASE, L->base - | andi TMP0, TMP0, CFRAME_RESUME - | sw TMP1, L->top - | beqz TMP0, ->fff_fallback - |. li CRET1, LUA_YIELD - | sw r0, L->cframe - | b ->vm_leave_unw - |. sb CRET1, L->status - | - |//-- Math library ------------------------------------------------------- - | - |.ffunc_n math_abs - |. abs.d FRET1, FARG1 - |->fff_resn: - | lw PC, FRAME_PC(BASE) - | addiu RA, BASE, -8 - | b ->fff_res1 - |. sdc1 FRET1, -8(BASE) - | - |->fff_restv: - | // CARG3/CARG1 = TValue result. - | lw PC, FRAME_PC(BASE) - | sw CARG3, -8+HI(BASE) - | addiu RA, BASE, -8 - | sw CARG1, -8+LO(BASE) - |->fff_res1: - | // RA = results, PC = return. - | li RD, (1+1)*8 - |->fff_res: - | // RA = results, RD = (nresults+1)*8, PC = return. - | andi TMP0, PC, FRAME_TYPE - | bnez TMP0, ->vm_return - |. move MULTRES, RD - | lw INS, -4(PC) - | decode_RB8a RB, INS - | decode_RB8b RB - |5: - | sltu AT, RD, RB - | bnez AT, >6 // More results expected? - |. decode_RA8a TMP0, INS - | decode_RA8b TMP0 - | ins_next1 - | // Adjust BASE. KBASE is assumed to be set for the calling frame. - | subu BASE, RA, TMP0 - | ins_next2 - | - |6: // Fill up results with nil. - | addu TMP1, RA, RD - | addiu RD, RD, 8 - | b <5 - |. sw TISNIL, -8+HI(TMP1) - | - |.macro math_extern, func - |->ff_math_ .. func: - | lw CARG3, HI(BASE) - | beqz NARGS8:RC, ->fff_fallback - |. load_got func - | sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |. nop - | call_extern - |. ldc1 FARG1, 0(BASE) - | b ->fff_resn - |. nop - |.endmacro - | - |.macro math_extern2, func - | .ffunc_nn math_ .. func - |. load_got func - | call_extern - |. nop - | b ->fff_resn - |. nop - |.endmacro - | - |.macro math_round, func - | .ffunc_n math_ .. func - |. nop - | bal ->vm_ .. func - |. nop - | b ->fff_resn - |. nop - |.endmacro - | - | math_round floor - | math_round ceil - | - |.ffunc math_log - | lw CARG3, HI(BASE) - | li AT, 8 - | bne NARGS8:RC, AT, ->fff_fallback // Exactly 1 argument. - |. load_got log - | sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |. nop - | call_extern - |. ldc1 FARG1, 0(BASE) - | b ->fff_resn - |. nop - | - | math_extern log10 - | math_extern exp - | math_extern sin - | math_extern cos - | math_extern tan - | math_extern asin - | math_extern acos - | math_extern atan - | math_extern sinh - | math_extern cosh - | math_extern tanh - | math_extern2 pow - | math_extern2 atan2 - | math_extern2 fmod - | - |.ffunc_n math_sqrt - |. sqrt.d FRET1, FARG1 - | b ->fff_resn - |. nop - | - |->ff_math_deg: - |.ffunc_n math_rad - |. ldc1 FARG2, CFUNC:RB->upvalue[0] - | b ->fff_resn - |. mul.d FRET1, FARG1, FARG2 - | - |.ffunc_nn math_ldexp - | cvt.w.d FARG2, FARG2 - | load_got ldexp - | mfc1 CARG3, FARG2 - | call_extern - |. nop - | b ->fff_resn - |. nop - | - |.ffunc_n math_frexp - | load_got frexp - | lw PC, FRAME_PC(BASE) - | call_extern - |. addiu CARG3, DISPATCH, DISPATCH_GL(tmptv) - | lw TMP1, DISPATCH_GL(tmptv)(DISPATCH) - | addiu RA, BASE, -8 - | mtc1 TMP1, FARG2 - | sdc1 FRET1, 0(RA) - | cvt.d.w FARG2, FARG2 - | sdc1 FARG2, 8(RA) - | b ->fff_res - |. li RD, (2+1)*8 - | - |.ffunc_n math_modf - | load_got modf - | lw PC, FRAME_PC(BASE) - | call_extern - |. addiu CARG3, BASE, -8 - | addiu RA, BASE, -8 - | sdc1 FRET1, 0(BASE) - | b ->fff_res - |. li RD, (2+1)*8 - | - |.macro math_minmax, name, ismax - |->ff_ .. name: - | lw CARG3, HI(BASE) - | beqz NARGS8:RC, ->fff_fallback - |. ldc1 FRET1, 0(BASE) - | sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |. addu TMP2, BASE, NARGS8:RC - | addiu TMP1, BASE, 8 - | beq TMP1, TMP2, ->fff_resn - |1: - |. lw CARG3, HI(TMP1) - | ldc1 FARG1, 0(TMP1) - | addiu TMP1, TMP1, 8 - | sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |.if ismax - |. c.olt.d FARG1, FRET1 - |.else - |. c.olt.d FRET1, FARG1 - |.endif - | bne TMP1, TMP2, <1 - |. movf.d FRET1, FARG1 - | b ->fff_resn - |. nop - |.endmacro - | - | math_minmax math_min, 0 - | math_minmax math_max, 1 - | - |//-- String library ----------------------------------------------------- - | - |.ffunc_1 string_len - | li AT, LJ_TSTR - | bne CARG3, AT, ->fff_fallback - |. nop - | b ->fff_resi - |. lw CRET1, STR:CARG1->len - | - |.ffunc string_byte // Only handle the 1-arg case here. - | lw CARG3, HI(BASE) - | lw STR:CARG1, LO(BASE) - | xori AT, NARGS8:RC, 8 - | addiu CARG3, CARG3, -LJ_TSTR - | or AT, AT, CARG3 - | bnez AT, ->fff_fallback // Need exactly 1 string argument. - |. nop - | lw TMP0, STR:CARG1->len - | lbu TMP1, STR:CARG1[1] // Access is always ok (NUL at end). - | addiu RA, BASE, -8 - | sltu RD, r0, TMP0 - | mtc1 TMP1, f0 - | addiu RD, RD, 1 - | cvt.d.w f0, f0 - | lw PC, FRAME_PC(BASE) - | sll RD, RD, 3 // RD = ((str->len != 0)+1)*8 - | b ->fff_res - |. sdc1 f0, 0(RA) - | - |.ffunc string_char // Only handle the 1-arg case here. - | ffgccheck - | lw CARG3, HI(BASE) - | ldc1 FARG1, 0(BASE) - | li AT, 8 - | bne NARGS8:RC, AT, ->fff_fallback // Exactly 1 argument. - |. sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |. li CARG3, 1 - | cvt.w.d FARG1, FARG1 - | addiu CARG2, sp, ARG5_OFS - | sltiu AT, TMP0, 256 - | mfc1 TMP0, FARG1 - | beqz AT, ->fff_fallback - |. sw TMP0, ARG5 - |->fff_newstr: - | load_got lj_str_new - | sw BASE, L->base - | sw PC, SAVE_PC - | call_intern lj_str_new // (lua_State *L, char *str, size_t l) - |. move CARG1, L - | // Returns GCstr *. - | lw BASE, L->base - | move CARG1, CRET1 - | b ->fff_restv - |. li CARG3, LJ_TSTR - | - |.ffunc string_sub - | ffgccheck - | addiu AT, NARGS8:RC, -16 - | lw CARG3, 16+HI(BASE) - | ldc1 f0, 16(BASE) - | lw TMP0, HI(BASE) - | lw STR:CARG1, LO(BASE) - | bltz AT, ->fff_fallback - | lw CARG2, 8+HI(BASE) - | ldc1 f2, 8(BASE) - | beqz AT, >1 - |. li CARG4, -1 - | cvt.w.d f0, f0 - | sltiu AT, CARG3, LJ_TISNUM - | beqz AT, ->fff_fallback - |. mfc1 CARG4, f0 - |1: - | sltiu AT, CARG2, LJ_TISNUM - | beqz AT, ->fff_fallback - |. li AT, LJ_TSTR - | cvt.w.d f2, f2 - | bne TMP0, AT, ->fff_fallback - |. lw CARG2, STR:CARG1->len - | mfc1 CARG3, f2 - | // STR:CARG1 = str, CARG2 = str->len, CARG3 = start, CARG4 = end - | slt AT, CARG4, r0 - | addiu TMP0, CARG2, 1 - | addu TMP1, CARG4, TMP0 - | slt TMP3, CARG3, r0 - | movn CARG4, TMP1, AT // if (end < 0) end += len+1 - | addu TMP1, CARG3, TMP0 - | movn CARG3, TMP1, TMP3 // if (start < 0) start += len+1 - | li TMP2, 1 - | slt AT, CARG4, r0 - | slt TMP3, r0, CARG3 - | movn CARG4, r0, AT // if (end < 0) end = 0 - | movz CARG3, TMP2, TMP3 // if (start < 1) start = 1 - | slt AT, CARG2, CARG4 - | movn CARG4, CARG2, AT // if (end > len) end = len - | addu CARG2, STR:CARG1, CARG3 - | subu CARG3, CARG4, CARG3 // len = end - start - | addiu CARG2, CARG2, sizeof(GCstr)-1 - | bgez CARG3, ->fff_newstr - |. addiu CARG3, CARG3, 1 // len++ - |->fff_emptystr: // Return empty string. - | addiu STR:CARG1, DISPATCH, DISPATCH_GL(strempty) - | b ->fff_restv - |. li CARG3, LJ_TSTR - | - |.ffunc string_rep // Only handle the 1-char case inline. - | ffgccheck - | lw TMP0, HI(BASE) - | addiu AT, NARGS8:RC, -16 // Exactly 2 arguments. - | lw CARG4, 8+HI(BASE) - | lw STR:CARG1, LO(BASE) - | addiu TMP0, TMP0, -LJ_TSTR - | ldc1 f0, 8(BASE) - | or AT, AT, TMP0 - | bnez AT, ->fff_fallback - |. sltiu AT, CARG4, LJ_TISNUM - | cvt.w.d f0, f0 - | beqz AT, ->fff_fallback - |. lw TMP0, STR:CARG1->len - | mfc1 CARG3, f0 - | lw TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | li AT, 1 - | blez CARG3, ->fff_emptystr // Count <= 0? - |. sltu AT, AT, TMP0 - | beqz TMP0, ->fff_emptystr // Zero length string? - |. sltu TMP0, TMP1, CARG3 - | or AT, AT, TMP0 - | lw CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | bnez AT, ->fff_fallback // Fallback for > 1-char strings. - |. lbu TMP0, STR:CARG1[1] - | addu TMP2, CARG2, CARG3 - |1: // Fill buffer with char. Yes, this is suboptimal code (do you care?). - | addiu TMP2, TMP2, -1 - | sltu AT, CARG2, TMP2 - | bnez AT, <1 - |. sb TMP0, 0(TMP2) - | b ->fff_newstr - |. nop - | - |.ffunc string_reverse - | ffgccheck - | lw CARG3, HI(BASE) - | lw STR:CARG1, LO(BASE) - | beqz NARGS8:RC, ->fff_fallback - |. li AT, LJ_TSTR - | bne CARG3, AT, ->fff_fallback - |. lw TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | lw CARG3, STR:CARG1->len - | addiu CARG1, STR:CARG1, #STR - | lw CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | sltu AT, TMP1, CARG3 - | bnez AT, ->fff_fallback - |. addu TMP3, CARG1, CARG3 - | addu CARG4, CARG2, CARG3 - |1: // Reverse string copy. - | lbu TMP1, 0(CARG1) - | sltu AT, CARG1, TMP3 - | beqz AT, ->fff_newstr - |. addiu CARG1, CARG1, 1 - | addiu CARG4, CARG4, -1 - | b <1 - | sb TMP1, 0(CARG4) - | - |.macro ffstring_case, name, lo - | .ffunc name - | ffgccheck - | lw CARG3, HI(BASE) - | lw STR:CARG1, LO(BASE) - | beqz NARGS8:RC, ->fff_fallback - |. li AT, LJ_TSTR - | bne CARG3, AT, ->fff_fallback - |. lw TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | lw CARG3, STR:CARG1->len - | addiu CARG1, STR:CARG1, #STR - | lw CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | sltu AT, TMP1, CARG3 - | bnez AT, ->fff_fallback - |. addu TMP3, CARG1, CARG3 - | move CARG4, CARG2 - |1: // ASCII case conversion. - | lbu TMP1, 0(CARG1) - | sltu AT, CARG1, TMP3 - | beqz AT, ->fff_newstr - |. addiu TMP0, TMP1, -lo - | xori TMP2, TMP1, 0x20 - | sltiu AT, TMP0, 26 - | movn TMP1, TMP2, AT - | addiu CARG1, CARG1, 1 - | sb TMP1, 0(CARG4) - | b <1 - |. addiu CARG4, CARG4, 1 - |.endmacro - | - |ffstring_case string_lower, 65 - |ffstring_case string_upper, 97 - | - |//-- Table library ------------------------------------------------------ - | - |.ffunc_1 table_getn - | li AT, LJ_TTAB - | bne CARG3, AT, ->fff_fallback - |. load_got lj_tab_len - | call_intern lj_tab_len // (GCtab *t) - |. nop - | // Returns uint32_t (but less than 2^31). - | b ->fff_resi - |. nop - | - |//-- Bit library -------------------------------------------------------- - | - |.macro .ffunc_bit, name - | .ffunc_n bit_..name - |. add.d FARG1, FARG1, TOBIT - | mfc1 CRET1, FARG1 - |.endmacro - | - |.macro .ffunc_bit_op, name, ins - | .ffunc_bit name - | addiu TMP1, BASE, 8 - | addu TMP2, BASE, NARGS8:RC - |1: - | lw CARG4, HI(TMP1) - | beq TMP1, TMP2, ->fff_resi - |. ldc1 FARG1, 0(TMP1) - | sltiu AT, CARG4, LJ_TISNUM - | beqz AT, ->fff_fallback - | add.d FARG1, FARG1, TOBIT - | mfc1 CARG2, FARG1 - | ins CRET1, CRET1, CARG2 - | b <1 - |. addiu TMP1, TMP1, 8 - |.endmacro - | - |.ffunc_bit_op band, and - |.ffunc_bit_op bor, or - |.ffunc_bit_op bxor, xor - | - |.ffunc_bit bswap - | srl TMP0, CRET1, 24 - | srl TMP2, CRET1, 8 - | sll TMP1, CRET1, 24 - | andi TMP2, TMP2, 0xff00 - | or TMP0, TMP0, TMP1 - | andi CRET1, CRET1, 0xff00 - | or TMP0, TMP0, TMP2 - | sll CRET1, CRET1, 8 - | b ->fff_resi - |. or CRET1, TMP0, CRET1 - | - |.ffunc_bit bnot - | b ->fff_resi - |. not CRET1, CRET1 - | - |.macro .ffunc_bit_sh, name, ins, shmod - | .ffunc_nn bit_..name - |. add.d FARG1, FARG1, TOBIT - | add.d FARG2, FARG2, TOBIT - | mfc1 CARG1, FARG1 - | mfc1 CARG2, FARG2 - |.if shmod == 1 - | li AT, 32 - | subu TMP0, AT, CARG2 - | sllv CARG2, CARG1, CARG2 - | srlv CARG1, CARG1, TMP0 - |.elif shmod == 2 - | li AT, 32 - | subu TMP0, AT, CARG2 - | srlv CARG2, CARG1, CARG2 - | sllv CARG1, CARG1, TMP0 - |.endif - | b ->fff_resi - |. ins CRET1, CARG1, CARG2 - |.endmacro - | - |.ffunc_bit_sh lshift, sllv, 0 - |.ffunc_bit_sh rshift, srlv, 0 - |.ffunc_bit_sh arshift, srav, 0 - |// Can't use rotrv, since it's only in MIPS32R2. - |.ffunc_bit_sh rol, or, 1 - |.ffunc_bit_sh ror, or, 2 - | - |.ffunc_bit tobit - |->fff_resi: - | mtc1 CRET1, FRET1 - | b ->fff_resn - |. cvt.d.w FRET1, FRET1 - | - |//----------------------------------------------------------------------- - | - |->fff_fallback: // Call fast function fallback handler. - | // BASE = new base, RB = CFUNC, RC = nargs*8 - | lw TMP3, CFUNC:RB->f - | addu TMP1, BASE, NARGS8:RC - | lw PC, FRAME_PC(BASE) // Fallback may overwrite PC. - | addiu TMP0, TMP1, 8*LUA_MINSTACK - | lw TMP2, L->maxstack - | sw PC, SAVE_PC // Redundant (but a defined value). - | sltu AT, TMP2, TMP0 - | sw BASE, L->base - | sw TMP1, L->top - | bnez AT, >5 // Need to grow stack. - |. move CFUNCADDR, TMP3 - | jalr TMP3 // (lua_State *L) - |. move CARG1, L - | // Either throws an error, or recovers and returns -1, 0 or nresults+1. - | lw BASE, L->base - | sll RD, CRET1, 3 - | bgtz CRET1, ->fff_res // Returned nresults+1? - |. addiu RA, BASE, -8 - |1: // Returned 0 or -1: retry fast path. - | lw TMP0, L->top - | lw LFUNC:RB, FRAME_FUNC(BASE) - | bnez CRET1, ->vm_call_tail // Returned -1? - |. subu NARGS8:RC, TMP0, BASE - | ins_callt // Returned 0: retry fast path. - | - |// Reconstruct previous base for vmeta_call during tailcall. - |->vm_call_tail: - | andi TMP0, PC, FRAME_TYPE - | li AT, -4 - | bnez TMP0, >3 - |. and TMP1, PC, AT - | lbu TMP1, OFS_RA(PC) - | sll TMP1, TMP1, 3 - | addiu TMP1, TMP1, 8 - |3: - | b ->vm_call_dispatch // Resolve again for tailcall. - |. subu TMP2, BASE, TMP1 - | - |5: // Grow stack for fallback handler. - | load_got lj_state_growstack - | li CARG2, LUA_MINSTACK - | call_intern lj_state_growstack // (lua_State *L, int n) - |. move CARG1, L - | lw BASE, L->base - | b <1 - |. li CRET1, 0 // Force retry. - | - |->fff_gcstep: // Call GC step function. - | // BASE = new base, RC = nargs*8 - | move MULTRES, ra - | load_got lj_gc_step - | sw BASE, L->base - | addu TMP0, BASE, NARGS8:RC - | sw PC, SAVE_PC // Redundant (but a defined value). - | sw TMP0, L->top - | call_intern lj_gc_step // (lua_State *L) - |. move CARG1, L - | lw BASE, L->base - | move ra, MULTRES - | lw TMP0, L->top - | lw CFUNC:RB, FRAME_FUNC(BASE) - | jr ra - |. subu NARGS8:RC, TMP0, BASE - | - |//----------------------------------------------------------------------- - |//-- Special dispatch targets ------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_record: // Dispatch target for recording phase. - |.if JIT - | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | andi AT, TMP3, HOOK_VMEVENT // No recording while in vmevent. - | bnez AT, >5 - | // Decrement the hookcount for consistency, but always do the call. - |. lw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | andi AT, TMP3, HOOK_ACTIVE - | bnez AT, >1 - |. addiu TMP2, TMP2, -1 - | andi AT, TMP3, LUA_MASKLINE|LUA_MASKCOUNT - | beqz AT, >1 - |. nop - | b >1 - |. sw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - |.endif - | - |->vm_rethook: // Dispatch target for return hooks. - | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | andi AT, TMP3, HOOK_ACTIVE // Hook already active? - | beqz AT, >1 - |5: // Re-dispatch to static ins. - |. lw AT, GG_DISP2STATIC(TMP0) // Assumes TMP0 holds DISPATCH+OP*4. - | jr AT - |. nop - | - |->vm_inshook: // Dispatch target for instr/line hooks. - | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | lw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | andi AT, TMP3, HOOK_ACTIVE // Hook already active? - | bnez AT, <5 - |. andi AT, TMP3, LUA_MASKLINE|LUA_MASKCOUNT - | beqz AT, <5 - |. addiu TMP2, TMP2, -1 - | beqz TMP2, >1 - |. sw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | andi AT, TMP3, LUA_MASKLINE - | beqz AT, <5 - |1: - |. load_got lj_dispatch_ins - | sw MULTRES, SAVE_MULTRES - | move CARG2, PC - | sw BASE, L->base - | // SAVE_PC must hold the _previous_ PC. The callee updates it with PC. - | call_intern lj_dispatch_ins // (lua_State *L, const BCIns *pc) - |. move CARG1, L - |3: - | lw BASE, L->base - |4: // Re-dispatch to static ins. - | lw INS, -4(PC) - | decode_OP4a TMP1, INS - | decode_OP4b TMP1 - | addu TMP0, DISPATCH, TMP1 - | decode_RD8a RD, INS - | lw AT, GG_DISP2STATIC(TMP0) - | decode_RA8a RA, INS - | decode_RD8b RD - | jr AT - | decode_RA8b RA - | - |->cont_hook: // Continue from hook yield. - | addiu PC, PC, 4 - | b <4 - |. lw MULTRES, -24+LO(RB) // Restore MULTRES for *M ins. - | - |->vm_hotloop: // Hot loop counter underflow. - |.if JIT - | lw LFUNC:TMP1, FRAME_FUNC(BASE) - | addiu CARG1, DISPATCH, GG_DISP2J - | sw PC, SAVE_PC - | lw TMP1, LFUNC:TMP1->pc - | move CARG2, PC - | sw L, DISPATCH_J(L)(DISPATCH) - | lbu TMP1, PC2PROTO(framesize)(TMP1) - | load_got lj_trace_hot - | sw BASE, L->base - | sll TMP1, TMP1, 3 - | addu TMP1, BASE, TMP1 - | call_intern lj_trace_hot // (jit_State *J, const BCIns *pc) - |. sw TMP1, L->top - | b <3 - |. nop - |.endif - | - |->vm_callhook: // Dispatch target for call hooks. - |.if JIT - | b >1 - |.endif - |. move CARG2, PC - | - |->vm_hotcall: // Hot call counter underflow. - |.if JIT - | ori CARG2, PC, 1 - |1: - |.endif - | load_got lj_dispatch_call - | addu TMP0, BASE, RC - | sw PC, SAVE_PC - | sw BASE, L->base - | subu RA, RA, BASE - | sw TMP0, L->top - | call_intern lj_dispatch_call // (lua_State *L, const BCIns *pc) - |. move CARG1, L - | // Returns ASMFunction. - | lw BASE, L->base - | lw TMP0, L->top - | sw r0, SAVE_PC // Invalidate for subsequent line hook. - | subu NARGS8:RC, TMP0, BASE - | addu RA, BASE, RA - | lw LFUNC:RB, FRAME_FUNC(BASE) - | jr CRET1 - |. lw INS, -4(PC) - | - |//----------------------------------------------------------------------- - |//-- Trace exit handler ------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro savex_, a, b - | sdc1 f..a, 16+a*8(sp) - | sw r..a, 16+32*8+a*4(sp) - | sw r..b, 16+32*8+b*4(sp) - |.endmacro - | - |->vm_exit_handler: - |.if JIT - | addiu sp, sp, -(16+32*8+32*4) - | savex_ 0, 1 - | savex_ 2, 3 - | savex_ 4, 5 - | savex_ 6, 7 - | savex_ 8, 9 - | savex_ 10, 11 - | savex_ 12, 13 - | savex_ 14, 15 - | savex_ 16, 17 - | savex_ 18, 19 - | savex_ 20, 21 - | savex_ 22, 23 - | savex_ 24, 25 - | savex_ 26, 27 - | sdc1 f28, 16+28*8(sp) - | sw r28, 16+32*8+28*4(sp) - | sdc1 f30, 16+30*8(sp) - | sw r30, 16+32*8+30*4(sp) - | sw r0, 16+32*8+31*4(sp) // Clear RID_TMP. - | li_vmstate EXIT - | addiu TMP2, sp, 16+32*8+32*4 // Recompute original value of sp. - | addiu DISPATCH, JGL, -GG_DISP2G-32768 - | lw TMP1, 0(TMP2) // Load exit number. - | st_vmstate - | sw TMP2, 16+32*8+29*4(sp) // Store sp in RID_SP. - | lw L, DISPATCH_GL(jit_L)(DISPATCH) - | lw BASE, DISPATCH_GL(jit_base)(DISPATCH) - | load_got lj_trace_exit - | sw L, DISPATCH_J(L)(DISPATCH) - | sw ra, DISPATCH_J(parent)(DISPATCH) // Store trace number. - | sw TMP1, DISPATCH_J(exitno)(DISPATCH) // Store exit number. - | addiu CARG1, DISPATCH, GG_DISP2J - | sw BASE, L->base - | call_intern lj_trace_exit // (jit_State *J, ExitState *ex) - |. addiu CARG2, sp, 16 - | // Returns MULTRES (unscaled) or negated error code. - | lw TMP1, L->cframe - | li AT, -4 - | lw BASE, L->base - | and sp, TMP1, AT - | lw PC, SAVE_PC // Get SAVE_PC. - | b >1 - |. sw L, SAVE_L // Set SAVE_L (on-trace resume/yield). - |.endif - |->vm_exit_interp: - |.if JIT - | // CRET1 = MULTRES or negated error code, BASE, PC and JGL set. - | lw L, SAVE_L - | addiu DISPATCH, JGL, -GG_DISP2G-32768 - |1: - | bltz CRET1, >3 // Check for error from exit. - |. lw LFUNC:TMP1, FRAME_FUNC(BASE) - | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | sll MULTRES, CRET1, 3 - | li TISNIL, LJ_TNIL - | sw MULTRES, SAVE_MULTRES - | mtc1 TMP3, TOBIT - | lw TMP1, LFUNC:TMP1->pc - | sw r0, DISPATCH_GL(jit_L)(DISPATCH) - | lw KBASE, PC2PROTO(k)(TMP1) - | cvt.d.s TOBIT, TOBIT - | // Modified copy of ins_next which handles function header dispatch, too. - | lw INS, 0(PC) - | addiu PC, PC, 4 - | // Assumes TISNIL == ~LJ_VMST_INTERP == -1 - | sw TISNIL, DISPATCH_GL(vmstate)(DISPATCH) - | decode_OP4a TMP1, INS - | decode_OP4b TMP1 - | sltiu TMP2, TMP1, BC_FUNCF*4 // Function header? - | addu TMP0, DISPATCH, TMP1 - | decode_RD8a RD, INS - | lw AT, 0(TMP0) - | decode_RA8a RA, INS - | beqz TMP2, >2 - |. decode_RA8b RA - | jr AT - |. decode_RD8b RD - |2: - | addiu RC, MULTRES, -8 - | jr AT - |. addu RA, RA, BASE - | - |3: // Rethrow error from the right C frame. - | load_got lj_err_throw - | negu CARG2, CRET1 - | call_intern lj_err_throw // (lua_State *L, int errcode) - |. move CARG1, L - |.endif - | - |//----------------------------------------------------------------------- - |//-- Math helper functions ---------------------------------------------- - |//----------------------------------------------------------------------- - | - |// Modifies AT, TMP0, FRET1, FRET2, f4. Keeps all others incl. FARG1. - |.macro vm_round, func - | lui TMP0, 0x4330 // Hiword of 2^52 (double). - | mtc1 r0, f4 - | mtc1 TMP0, f5 - | abs.d FRET2, FARG1 // |x| - | mfc1 AT, f13 - | c.olt.d 0, FRET2, f4 - | add.d FRET1, FRET2, f4 // (|x| + 2^52) - 2^52 - | bc1f 0, >1 // Truncate only if |x| < 2^52. - |. sub.d FRET1, FRET1, f4 - | slt AT, AT, r0 - |.if "func" == "ceil" - | lui TMP0, 0xbff0 // Hiword of -1 (double). Preserves -0. - |.else - | lui TMP0, 0x3ff0 // Hiword of +1 (double). - |.endif - |.if "func" == "trunc" - | mtc1 TMP0, f5 - | c.olt.d 0, FRET2, FRET1 // |x| < result? - | sub.d FRET2, FRET1, f4 - | movt.d FRET1, FRET2, 0 // If yes, subtract +1. - | neg.d FRET2, FRET1 - | jr ra - |. movn.d FRET1, FRET2, AT // Merge sign bit back in. - |.else - | neg.d FRET2, FRET1 - | mtc1 TMP0, f5 - | movn.d FRET1, FRET2, AT // Merge sign bit back in. - |.if "func" == "ceil" - | c.olt.d 0, FRET1, FARG1 // x > result? - |.else - | c.olt.d 0, FARG1, FRET1 // x < result? - |.endif - | sub.d FRET2, FRET1, f4 // If yes, subtract +-1. - | jr ra - |. movt.d FRET1, FRET2, 0 - |.endif - |1: - | jr ra - |. mov.d FRET1, FARG1 - |.endmacro - | - |->vm_floor: - | vm_round floor - |->vm_ceil: - | vm_round ceil - |->vm_trunc: - |.if JIT - | vm_round trunc - |.endif - | - |//----------------------------------------------------------------------- - |//-- Miscellaneous functions -------------------------------------------- - |//----------------------------------------------------------------------- - | - |//----------------------------------------------------------------------- - |//-- FFI helper functions ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |// Handler for callback functions. Callback slot number in r1, g in r2. - |->vm_ffi_callback: - |.if FFI - |.type CTSTATE, CTState, PC - | saveregs - | lw CTSTATE, GL:r2->ctype_state - | addiu DISPATCH, r2, GG_G2DISP - | load_got lj_ccallback_enter - | sw r1, CTSTATE->cb.slot - | sw CARG1, CTSTATE->cb.gpr[0] - | sw CARG2, CTSTATE->cb.gpr[1] - | sdc1 FARG1, CTSTATE->cb.fpr[0] - | sw CARG3, CTSTATE->cb.gpr[2] - | sw CARG4, CTSTATE->cb.gpr[3] - | sdc1 FARG2, CTSTATE->cb.fpr[1] - | addiu TMP0, sp, CFRAME_SPACE+16 - | sw TMP0, CTSTATE->cb.stack - | sw r0, SAVE_PC // Any value outside of bytecode is ok. - | move CARG2, sp - | call_intern lj_ccallback_enter // (CTState *cts, void *cf) - |. move CARG1, CTSTATE - | // Returns lua_State *. - | lw BASE, L:CRET1->base - | lw RC, L:CRET1->top - | move L, CRET1 - | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | lw LFUNC:RB, FRAME_FUNC(BASE) - | mtc1 TMP3, TOBIT - | li_vmstate INTERP - | li TISNIL, LJ_TNIL - | subu RC, RC, BASE - | st_vmstate - | cvt.d.s TOBIT, TOBIT - | ins_callt - |.endif - | - |->cont_ffi_callback: // Return from FFI callback. - |.if FFI - | load_got lj_ccallback_leave - | lw CTSTATE, DISPATCH_GL(ctype_state)(DISPATCH) - | sw BASE, L->base - | sw RB, L->top - | sw L, CTSTATE->L - | move CARG2, RA - | call_intern lj_ccallback_leave // (CTState *cts, TValue *o) - |. move CARG1, CTSTATE - | lw CRET1, CTSTATE->cb.gpr[0] - | ldc1 FRET1, CTSTATE->cb.fpr[0] - | lw CRET2, CTSTATE->cb.gpr[1] - | b ->vm_leave_unw - |. ldc1 FRET2, CTSTATE->cb.fpr[1] - |.endif - | - |->vm_ffi_call: // Call C function via FFI. - | // Caveat: needs special frame unwinding, see below. - |.if FFI - | .type CCSTATE, CCallState, CARG1 - | lw TMP1, CCSTATE->spadj - | lbu CARG2, CCSTATE->nsp - | move TMP2, sp - | subu sp, sp, TMP1 - | sw ra, -4(TMP2) - | sll CARG2, CARG2, 2 - | sw r16, -8(TMP2) - | sw CCSTATE, -12(TMP2) - | move r16, TMP2 - | addiu TMP1, CCSTATE, offsetof(CCallState, stack) - | addiu TMP2, sp, 16 - | beqz CARG2, >2 - |. addu TMP3, TMP1, CARG2 - |1: - | lw TMP0, 0(TMP1) - | addiu TMP1, TMP1, 4 - | sltu AT, TMP1, TMP3 - | sw TMP0, 0(TMP2) - | bnez AT, <1 - |. addiu TMP2, TMP2, 4 - |2: - | lw CFUNCADDR, CCSTATE->func - | lw CARG2, CCSTATE->gpr[1] - | lw CARG3, CCSTATE->gpr[2] - | lw CARG4, CCSTATE->gpr[3] - | ldc1 FARG1, CCSTATE->fpr[0] - | ldc1 FARG2, CCSTATE->fpr[1] - | jalr CFUNCADDR - |. lw CARG1, CCSTATE->gpr[0] // Do this last, since CCSTATE is CARG1. - | lw CCSTATE:TMP1, -12(r16) - | lw TMP2, -8(r16) - | lw ra, -4(r16) - | sw CRET1, CCSTATE:TMP1->gpr[0] - | sw CRET2, CCSTATE:TMP1->gpr[1] - | sdc1 FRET1, CCSTATE:TMP1->fpr[0] - | sdc1 FRET2, CCSTATE:TMP1->fpr[1] - | move sp, r16 - | jr ra - |. move r16, TMP2 - |.endif - |// Note: vm_ffi_call must be the last function in this object file! - | - |//----------------------------------------------------------------------- -} - -/* Generate the code for a single instruction. */ -static void build_ins(BuildCtx *ctx, BCOp op, int defop) -{ - int vk = 0; - |=>defop: - - switch (op) { - - /* -- Comparison ops ---------------------------------------------------- */ - - /* Remember: all ops branch for a true comparison, fall through otherwise. */ - - case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - | // RA = src1*8, RD = src2*8, JMP with RD = target - | addu CARG2, BASE, RA - | addu CARG3, BASE, RD - | lw TMP0, HI(CARG2) - | lw TMP1, HI(CARG3) - | ldc1 f0, 0(CARG2) - | ldc1 f2, 0(CARG3) - | sltiu TMP0, TMP0, LJ_TISNUM - | sltiu TMP1, TMP1, LJ_TISNUM - | lhu TMP2, OFS_RD(PC) - | and TMP0, TMP0, TMP1 - | addiu PC, PC, 4 - | beqz TMP0, ->vmeta_comp - |. lui TMP1, (-(BCBIAS_J*4 >> 16) & 65535) - | decode_RD4b TMP2 - | addu TMP2, TMP2, TMP1 - if (op == BC_ISLT || op == BC_ISGE) { - | c.olt.d f0, f2 - } else { - | c.ole.d f0, f2 - } - if (op == BC_ISLT || op == BC_ISLE) { - | movf TMP2, r0 - } else { - | movt TMP2, r0 - } - | addu PC, PC, TMP2 - |1: - | ins_next - break; - - case BC_ISEQV: case BC_ISNEV: - vk = op == BC_ISEQV; - | // RA = src1*8, RD = src2*8, JMP with RD = target - | addu RA, BASE, RA - | addiu PC, PC, 4 - | lw TMP0, HI(RA) - | ldc1 f0, 0(RA) - | addu RD, BASE, RD - | lhu TMP2, -4+OFS_RD(PC) - | lw TMP1, HI(RD) - | ldc1 f2, 0(RD) - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | sltiu AT, TMP0, LJ_TISNUM - | sltiu CARG1, TMP1, LJ_TISNUM - | decode_RD4b TMP2 - | and AT, AT, CARG1 - | beqz AT, >5 - |. addu TMP2, TMP2, TMP3 - | c.eq.d f0, f2 - if (vk) { - | movf TMP2, r0 - } else { - | movt TMP2, r0 - } - |1: - | addu PC, PC, TMP2 - | ins_next - |5: // Either or both types are not numbers. - | lw CARG2, LO(RA) - | lw CARG3, LO(RD) - |.if FFI - | li TMP3, LJ_TCDATA - | beq TMP0, TMP3, ->vmeta_equal_cd - |.endif - |. sltiu AT, TMP0, LJ_TISPRI // Not a primitive? - |.if FFI - | beq TMP1, TMP3, ->vmeta_equal_cd - |.endif - |. xor TMP3, CARG2, CARG3 // Same tv? - | xor TMP1, TMP1, TMP0 // Same type? - | sltiu CARG1, TMP0, LJ_TISTABUD+1 // Table or userdata? - | movz TMP3, r0, AT // Ignore tv if primitive. - | movn CARG1, r0, TMP1 // Tab/ud and same type? - | or AT, TMP1, TMP3 // Same type && (pri||same tv). - | movz CARG1, r0, AT - | beqz CARG1, <1 // Done if not tab/ud or not same type or same tv. - if (vk) { - |. movn TMP2, r0, AT - } else { - |. movz TMP2, r0, AT - } - | // Different tables or userdatas. Need to check __eq metamethod. - | // Field metatable must be at same offset for GCtab and GCudata! - | lw TAB:TMP1, TAB:CARG2->metatable - | beqz TAB:TMP1, <1 // No metatable? - |. nop - | lbu TMP1, TAB:TMP1->nomm - | andi TMP1, TMP1, 1<vmeta_equal // Handle __eq metamethod. - |. li CARG4, 1-vk // ne = 0 or 1. - break; - - case BC_ISEQS: case BC_ISNES: - vk = op == BC_ISEQS; - | // RA = src*8, RD = str_const*8 (~), JMP with RD = target - | addu RA, BASE, RA - | addiu PC, PC, 4 - | lw TMP0, HI(RA) - | srl RD, RD, 1 - | lw STR:TMP3, LO(RA) - | subu RD, KBASE, RD - | lhu TMP2, -4+OFS_RD(PC) - |.if FFI - | li AT, LJ_TCDATA - | beq TMP0, AT, ->vmeta_equal_cd - |.endif - |. lw STR:TMP1, -4(RD) // KBASE-4-str_const*4 - | addiu TMP0, TMP0, -LJ_TSTR - | decode_RD4b TMP2 - | xor TMP1, STR:TMP1, STR:TMP3 - | or TMP0, TMP0, TMP1 - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | addu TMP2, TMP2, TMP3 - if (vk) { - | movn TMP2, r0, TMP0 - } else { - | movz TMP2, r0, TMP0 - } - | addu PC, PC, TMP2 - | ins_next - break; - - case BC_ISEQN: case BC_ISNEN: - vk = op == BC_ISEQN; - | // RA = src*8, RD = num_const*8, JMP with RD = target - | addu RA, BASE, RA - | addiu PC, PC, 4 - | lw TMP0, HI(RA) - | ldc1 f0, 0(RA) - | addu RD, KBASE, RD - | lhu TMP2, -4+OFS_RD(PC) - | ldc1 f2, 0(RD) - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | sltiu AT, TMP0, LJ_TISNUM - | decode_RD4b TMP2 - |.if FFI - | beqz AT, >5 - |.else - | beqz AT, >1 - |.endif - |. addu TMP2, TMP2, TMP3 - | c.eq.d f0, f2 - if (vk) { - | movf TMP2, r0 - | addu PC, PC, TMP2 - |1: - } else { - | movt TMP2, r0 - |1: - | addu PC, PC, TMP2 - } - | ins_next - |.if FFI - |5: - | li AT, LJ_TCDATA - | beq TMP0, AT, ->vmeta_equal_cd - |. nop - | b <1 - |. nop - |.endif - break; - - case BC_ISEQP: case BC_ISNEP: - vk = op == BC_ISEQP; - | // RA = src*8, RD = primitive_type*8 (~), JMP with RD = target - | addu RA, BASE, RA - | srl TMP1, RD, 3 - | lw TMP0, HI(RA) - | lhu TMP2, OFS_RD(PC) - | not TMP1, TMP1 - | addiu PC, PC, 4 - |.if FFI - | li AT, LJ_TCDATA - | beq TMP0, AT, ->vmeta_equal_cd - |.endif - |. xor TMP0, TMP0, TMP1 - | decode_RD4b TMP2 - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | addu TMP2, TMP2, TMP3 - if (vk) { - | movn TMP2, r0, TMP0 - } else { - | movz TMP2, r0, TMP0 - } - | addu PC, PC, TMP2 - | ins_next - break; - - /* -- Unary test and copy ops ------------------------------------------- */ - - case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - | // RA = dst*8 or unused, RD = src*8, JMP with RD = target - | addu RD, BASE, RD - | lhu TMP2, OFS_RD(PC) - | lw TMP0, HI(RD) - | addiu PC, PC, 4 - if (op == BC_IST || op == BC_ISF) { - | sltiu TMP0, TMP0, LJ_TISTRUECOND - | decode_RD4b TMP2 - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | addu TMP2, TMP2, TMP3 - if (op == BC_IST) { - | movz TMP2, r0, TMP0 - } else { - | movn TMP2, r0, TMP0 - } - | addu PC, PC, TMP2 - } else { - | sltiu TMP0, TMP0, LJ_TISTRUECOND - | ldc1 f0, 0(RD) - if (op == BC_ISTC) { - | beqz TMP0, >1 - } else { - | bnez TMP0, >1 - } - |. addu RA, BASE, RA - | decode_RD4b TMP2 - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | addu TMP2, TMP2, TMP3 - | sdc1 f0, 0(RA) - | addu PC, PC, TMP2 - |1: - } - | ins_next - break; - - /* -- Unary ops --------------------------------------------------------- */ - - case BC_MOV: - | // RA = dst*8, RD = src*8 - | addu RD, BASE, RD - | addu RA, BASE, RA - | ldc1 f0, 0(RD) - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - break; - case BC_NOT: - | // RA = dst*8, RD = src*8 - | addu RD, BASE, RD - | addu RA, BASE, RA - | lw TMP0, HI(RD) - | li TMP1, LJ_TFALSE - | sltiu TMP0, TMP0, LJ_TISTRUECOND - | addiu TMP1, TMP0, LJ_TTRUE - | ins_next1 - | sw TMP1, HI(RA) - | ins_next2 - break; - case BC_UNM: - | // RA = dst*8, RD = src*8 - | addu CARG3, BASE, RD - | addu RA, BASE, RA - | lw TMP0, HI(CARG3) - | ldc1 f0, 0(CARG3) - | sltiu AT, TMP0, LJ_TISNUM - | beqz AT, ->vmeta_unm - |. neg.d f0, f0 - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - break; - case BC_LEN: - | // RA = dst*8, RD = src*8 - | addu CARG2, BASE, RD - | addu RA, BASE, RA - | lw TMP0, HI(CARG2) - | lw CARG1, LO(CARG2) - | li AT, LJ_TSTR - | bne TMP0, AT, >2 - |. li AT, LJ_TTAB - | lw CRET1, STR:CARG1->len - |1: - | mtc1 CRET1, f0 - | cvt.d.w f0, f0 - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - |2: - | bne TMP0, AT, ->vmeta_len - |. nop -#if LJ_52 - | lw TAB:TMP2, TAB:CARG1->metatable - | bnez TAB:TMP2, >9 - |. nop - |3: -#endif - |->BC_LEN_Z: - | load_got lj_tab_len - | call_intern lj_tab_len // (GCtab *t) - |. nop - | // Returns uint32_t (but less than 2^31). - | b <1 - |. nop -#if LJ_52 - |9: - | lbu TMP0, TAB:TMP2->nomm - | andi TMP0, TMP0, 1<vmeta_len - |. nop -#endif - break; - - /* -- Binary ops -------------------------------------------------------- */ - - |.macro ins_arithpre - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - | decode_RB8a RB, INS - | decode_RB8b RB - | decode_RDtoRC8 RC, RD - | // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8 - ||switch (vk) { - ||case 0: - | addu CARG3, BASE, RB - | addu CARG4, KBASE, RC - | lw TMP1, HI(CARG3) - | ldc1 f20, 0(CARG3) - | ldc1 f22, 0(CARG4) - | sltiu AT, TMP1, LJ_TISNUM - || break; - ||case 1: - | addu CARG4, BASE, RB - | addu CARG3, KBASE, RC - | lw TMP1, HI(CARG4) - | ldc1 f22, 0(CARG4) - | ldc1 f20, 0(CARG3) - | sltiu AT, TMP1, LJ_TISNUM - || break; - ||default: - | addu CARG3, BASE, RB - | addu CARG4, BASE, RC - | lw TMP1, HI(CARG3) - | lw TMP2, HI(CARG4) - | ldc1 f20, 0(CARG3) - | ldc1 f22, 0(CARG4) - | sltiu AT, TMP1, LJ_TISNUM - | sltiu TMP0, TMP2, LJ_TISNUM - | and AT, AT, TMP0 - || break; - ||} - | beqz AT, ->vmeta_arith - |. addu RA, BASE, RA - |.endmacro - | - |.macro fpmod, a, b, c - |->BC_MODVN_Z: - | bal ->vm_floor // floor(b/c) - |. div.d FARG1, b, c - | mul.d a, FRET1, c - | sub.d a, b, a // b - floor(b/c)*c - |.endmacro - | - |.macro ins_arith, ins - | ins_arithpre - |.if "ins" == "fpmod_" - | b ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. - |. nop - |.else - | ins f0, f20, f22 - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - |.endif - |.endmacro - - case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - | ins_arith add.d - break; - case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - | ins_arith sub.d - break; - case BC_MULVN: case BC_MULNV: case BC_MULVV: - | ins_arith mul.d - break; - case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - | ins_arith div.d - break; - case BC_MODVN: - | ins_arith fpmod - break; - case BC_MODNV: case BC_MODVV: - | ins_arith fpmod_ - break; - case BC_POW: - | decode_RB8a RB, INS - | decode_RB8b RB - | decode_RDtoRC8 RC, RD - | addu CARG3, BASE, RB - | addu CARG4, BASE, RC - | lw TMP1, HI(CARG3) - | lw TMP2, HI(CARG4) - | ldc1 FARG1, 0(CARG3) - | ldc1 FARG2, 0(CARG4) - | sltiu AT, TMP1, LJ_TISNUM - | sltiu TMP0, TMP2, LJ_TISNUM - | and AT, AT, TMP0 - | load_got pow - | beqz AT, ->vmeta_arith - |. addu RA, BASE, RA - | call_extern - |. nop - | ins_next1 - | sdc1 FRET1, 0(RA) - | ins_next2 - break; - - case BC_CAT: - | // RA = dst*8, RB = src_start*8, RC = src_end*8 - | decode_RB8a RB, INS - | decode_RB8b RB - | decode_RDtoRC8 RC, RD - | subu CARG3, RC, RB - | sw BASE, L->base - | addu CARG2, BASE, RC - | move MULTRES, RB - |->BC_CAT_Z: - | load_got lj_meta_cat - | srl CARG3, CARG3, 3 - | sw PC, SAVE_PC - | call_intern lj_meta_cat // (lua_State *L, TValue *top, int left) - |. move CARG1, L - | // Returns NULL (finished) or TValue * (metamethod). - | bnez CRET1, ->vmeta_binop - |. lw BASE, L->base - | addu RB, BASE, MULTRES - | ldc1 f0, 0(RB) - | addu RA, BASE, RA - | ins_next1 - | sdc1 f0, 0(RA) // Copy result from RB to RA. - | ins_next2 - break; - - /* -- Constant ops ------------------------------------------------------ */ - - case BC_KSTR: - | // RA = dst*8, RD = str_const*8 (~) - | srl TMP1, RD, 1 - | subu TMP1, KBASE, TMP1 - | ins_next1 - | lw TMP0, -4(TMP1) // KBASE-4-str_const*4 - | addu RA, BASE, RA - | li TMP2, LJ_TSTR - | sw TMP0, LO(RA) - | sw TMP2, HI(RA) - | ins_next2 - break; - case BC_KCDATA: - |.if FFI - | // RA = dst*8, RD = cdata_const*8 (~) - | srl TMP1, RD, 1 - | subu TMP1, KBASE, TMP1 - | ins_next1 - | lw TMP0, -4(TMP1) // KBASE-4-cdata_const*4 - | addu RA, BASE, RA - | li TMP2, LJ_TCDATA - | sw TMP0, LO(RA) - | sw TMP2, HI(RA) - | ins_next2 - |.endif - break; - case BC_KSHORT: - | // RA = dst*8, RD = int16_literal*8 - | sra RD, INS, 16 - | mtc1 RD, f0 - | addu RA, BASE, RA - | cvt.d.w f0, f0 - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - break; - case BC_KNUM: - | // RA = dst*8, RD = num_const*8 - | addu RD, KBASE, RD - | addu RA, BASE, RA - | ldc1 f0, 0(RD) - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - break; - case BC_KPRI: - | // RA = dst*8, RD = primitive_type*8 (~) - | srl TMP1, RD, 3 - | addu RA, BASE, RA - | not TMP0, TMP1 - | ins_next1 - | sw TMP0, HI(RA) - | ins_next2 - break; - case BC_KNIL: - | // RA = base*8, RD = end*8 - | addu RA, BASE, RA - | sw TISNIL, HI(RA) - | addiu RA, RA, 8 - | addu RD, BASE, RD - |1: - | sw TISNIL, HI(RA) - | slt AT, RA, RD - | bnez AT, <1 - |. addiu RA, RA, 8 - | ins_next_ - break; - - /* -- Upvalue and function ops ------------------------------------------ */ - - case BC_UGET: - | // RA = dst*8, RD = uvnum*8 - | lw LFUNC:RB, FRAME_FUNC(BASE) - | srl RD, RD, 1 - | addu RD, RD, LFUNC:RB - | lw UPVAL:RB, LFUNC:RD->uvptr - | ins_next1 - | lw TMP1, UPVAL:RB->v - | ldc1 f0, 0(TMP1) - | addu RA, BASE, RA - | sdc1 f0, 0(RA) - | ins_next2 - break; - case BC_USETV: - | // RA = uvnum*8, RD = src*8 - | lw LFUNC:RB, FRAME_FUNC(BASE) - | srl RA, RA, 1 - | addu RD, BASE, RD - | addu RA, RA, LFUNC:RB - | ldc1 f0, 0(RD) - | lw UPVAL:RB, LFUNC:RA->uvptr - | lbu TMP3, UPVAL:RB->marked - | lw CARG2, UPVAL:RB->v - | andi TMP3, TMP3, LJ_GC_BLACK // isblack(uv) - | lbu TMP0, UPVAL:RB->closed - | lw TMP2, HI(RD) - | sdc1 f0, 0(CARG2) - | li AT, LJ_GC_BLACK|1 - | or TMP3, TMP3, TMP0 - | beq TMP3, AT, >2 // Upvalue is closed and black? - |. addiu TMP2, TMP2, -(LJ_TNUMX+1) - |1: - | ins_next - | - |2: // Check if new value is collectable. - | sltiu AT, TMP2, LJ_TISGCV - (LJ_TNUMX+1) - | beqz AT, <1 // tvisgcv(v) - |. lw TMP1, LO(RD) - | lbu TMP3, GCOBJ:TMP1->gch.marked - | andi TMP3, TMP3, LJ_GC_WHITES // iswhite(v) - | beqz TMP3, <1 - |. load_got lj_gc_barrieruv - | // Crossed a write barrier. Move the barrier forward. - | call_intern lj_gc_barrieruv // (global_State *g, TValue *tv) - |. addiu CARG1, DISPATCH, GG_DISP2G - | b <1 - |. nop - break; - case BC_USETS: - | // RA = uvnum*8, RD = str_const*8 (~) - | lw LFUNC:RB, FRAME_FUNC(BASE) - | srl RA, RA, 1 - | srl TMP1, RD, 1 - | addu RA, RA, LFUNC:RB - | subu TMP1, KBASE, TMP1 - | lw UPVAL:RB, LFUNC:RA->uvptr - | lw STR:TMP1, -4(TMP1) // KBASE-4-str_const*4 - | lbu TMP2, UPVAL:RB->marked - | lw CARG2, UPVAL:RB->v - | lbu TMP3, STR:TMP1->marked - | andi AT, TMP2, LJ_GC_BLACK // isblack(uv) - | lbu TMP2, UPVAL:RB->closed - | li TMP0, LJ_TSTR - | sw STR:TMP1, LO(CARG2) - | bnez AT, >2 - |. sw TMP0, HI(CARG2) - |1: - | ins_next - | - |2: // Check if string is white and ensure upvalue is closed. - | beqz TMP2, <1 - |. andi AT, TMP3, LJ_GC_WHITES // iswhite(str) - | beqz AT, <1 - |. load_got lj_gc_barrieruv - | // Crossed a write barrier. Move the barrier forward. - | call_intern lj_gc_barrieruv // (global_State *g, TValue *tv) - |. addiu CARG1, DISPATCH, GG_DISP2G - | b <1 - |. nop - break; - case BC_USETN: - | // RA = uvnum*8, RD = num_const*8 - | lw LFUNC:RB, FRAME_FUNC(BASE) - | srl RA, RA, 1 - | addu RD, KBASE, RD - | addu RA, RA, LFUNC:RB - | ldc1 f0, 0(RD) - | lw UPVAL:RB, LFUNC:RA->uvptr - | ins_next1 - | lw TMP1, UPVAL:RB->v - | sdc1 f0, 0(TMP1) - | ins_next2 - break; - case BC_USETP: - | // RA = uvnum*8, RD = primitive_type*8 (~) - | lw LFUNC:RB, FRAME_FUNC(BASE) - | srl RA, RA, 1 - | srl TMP0, RD, 3 - | addu RA, RA, LFUNC:RB - | not TMP0, TMP0 - | lw UPVAL:RB, LFUNC:RA->uvptr - | ins_next1 - | lw TMP1, UPVAL:RB->v - | sw TMP0, HI(TMP1) - | ins_next2 - break; - - case BC_UCLO: - | // RA = level*8, RD = target - | lw TMP2, L->openupval - | branch_RD // Do this first since RD is not saved. - | load_got lj_func_closeuv - | sw BASE, L->base - | beqz TMP2, >1 - |. move CARG1, L - | call_intern lj_func_closeuv // (lua_State *L, TValue *level) - |. addu CARG2, BASE, RA - | lw BASE, L->base - |1: - | ins_next - break; - - case BC_FNEW: - | // RA = dst*8, RD = proto_const*8 (~) (holding function prototype) - | srl TMP1, RD, 1 - | load_got lj_func_newL_gc - | subu TMP1, KBASE, TMP1 - | lw CARG3, FRAME_FUNC(BASE) - | lw CARG2, -4(TMP1) // KBASE-4-tab_const*4 - | sw BASE, L->base - | sw PC, SAVE_PC - | // (lua_State *L, GCproto *pt, GCfuncL *parent) - | call_intern lj_func_newL_gc - |. move CARG1, L - | // Returns GCfuncL *. - | lw BASE, L->base - | li TMP0, LJ_TFUNC - | ins_next1 - | addu RA, BASE, RA - | sw TMP0, HI(RA) - | sw LFUNC:CRET1, LO(RA) - | ins_next2 - break; - - /* -- Table ops --------------------------------------------------------- */ - - case BC_TNEW: - case BC_TDUP: - | // RA = dst*8, RD = (hbits|asize)*8 | tab_const*8 (~) - | lw TMP0, DISPATCH_GL(gc.total)(DISPATCH) - | lw TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) - | sw BASE, L->base - | sw PC, SAVE_PC - | sltu AT, TMP0, TMP1 - | beqz AT, >5 - |1: - if (op == BC_TNEW) { - | load_got lj_tab_new - | srl CARG2, RD, 3 - | andi CARG2, CARG2, 0x7ff - | li TMP0, 0x801 - | addiu AT, CARG2, -0x7ff - | srl CARG3, RD, 14 - | movz CARG2, TMP0, AT - | // (lua_State *L, int32_t asize, uint32_t hbits) - | call_intern lj_tab_new - |. move CARG1, L - | // Returns Table *. - } else { - | load_got lj_tab_dup - | srl TMP1, RD, 1 - | subu TMP1, KBASE, TMP1 - | move CARG1, L - | call_intern lj_tab_dup // (lua_State *L, Table *kt) - |. lw CARG2, -4(TMP1) // KBASE-4-str_const*4 - | // Returns Table *. - } - | lw BASE, L->base - | ins_next1 - | addu RA, BASE, RA - | li TMP0, LJ_TTAB - | sw TAB:CRET1, LO(RA) - | sw TMP0, HI(RA) - | ins_next2 - |5: - | load_got lj_gc_step_fixtop - | move MULTRES, RD - | call_intern lj_gc_step_fixtop // (lua_State *L) - |. move CARG1, L - | b <1 - |. move RD, MULTRES - break; - - case BC_GGET: - | // RA = dst*8, RD = str_const*8 (~) - case BC_GSET: - | // RA = src*8, RD = str_const*8 (~) - | lw LFUNC:TMP2, FRAME_FUNC(BASE) - | srl TMP1, RD, 1 - | subu TMP1, KBASE, TMP1 - | lw TAB:RB, LFUNC:TMP2->env - | lw STR:RC, -4(TMP1) // KBASE-4-str_const*4 - if (op == BC_GGET) { - | b ->BC_TGETS_Z - } else { - | b ->BC_TSETS_Z - } - |. addu RA, BASE, RA - break; - - case BC_TGETV: - | // RA = dst*8, RB = table*8, RC = key*8 - | decode_RB8a RB, INS - | decode_RB8b RB - | decode_RDtoRC8 RC, RD - | addu CARG2, BASE, RB - | addu CARG3, BASE, RC - | lw TMP1, HI(CARG2) - | lw TMP2, HI(CARG3) - | lw TAB:RB, LO(CARG2) - | li AT, LJ_TTAB - | ldc1 f0, 0(CARG3) - | bne TMP1, AT, ->vmeta_tgetv - |. addu RA, BASE, RA - | sltiu AT, TMP2, LJ_TISNUM - | beqz AT, >5 - |. li AT, LJ_TSTR - | - | // Convert number key to integer, check for integerness and range. - | cvt.w.d f2, f0 - | lw TMP0, TAB:RB->asize - | mfc1 TMP2, f2 - | cvt.d.w f4, f2 - | lw TMP1, TAB:RB->array - | c.eq.d f0, f4 - | sltu AT, TMP2, TMP0 - | movf AT, r0 - | sll TMP2, TMP2, 3 - | beqz AT, ->vmeta_tgetv // Integer key and in array part? - |. addu TMP2, TMP1, TMP2 - | lw TMP0, HI(TMP2) - | beq TMP0, TISNIL, >2 - |. ldc1 f0, 0(TMP2) - |1: - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - | - |2: // Check for __index if table value is nil. - | lw TAB:TMP2, TAB:RB->metatable - | beqz TAB:TMP2, <1 // No metatable: done. - |. nop - | lbu TMP0, TAB:TMP2->nomm - | andi TMP0, TMP0, 1<vmeta_tgetv - |. nop - | - |5: - | bne TMP2, AT, ->vmeta_tgetv - |. lw STR:RC, LO(CARG3) - | b ->BC_TGETS_Z // String key? - |. nop - break; - case BC_TGETS: - | // RA = dst*8, RB = table*8, RC = str_const*4 (~) - | decode_RB8a RB, INS - | decode_RB8b RB - | addu CARG2, BASE, RB - | decode_RC4a RC, INS - | lw TMP0, HI(CARG2) - | decode_RC4b RC - | li AT, LJ_TTAB - | lw TAB:RB, LO(CARG2) - | subu CARG3, KBASE, RC - | lw STR:RC, -4(CARG3) // KBASE-4-str_const*4 - | bne TMP0, AT, ->vmeta_tgets1 - |. addu RA, BASE, RA - |->BC_TGETS_Z: - | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = dst*8 - | lw TMP0, TAB:RB->hmask - | lw TMP1, STR:RC->hash - | lw NODE:TMP2, TAB:RB->node - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | sll TMP0, TMP1, 5 - | sll TMP1, TMP1, 3 - | subu TMP1, TMP0, TMP1 - | addu NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |1: - | lw CARG1, offsetof(Node, key)+HI(NODE:TMP2) - | lw TMP0, offsetof(Node, key)+LO(NODE:TMP2) - | lw NODE:TMP1, NODE:TMP2->next - | lw CARG2, offsetof(Node, val)+HI(NODE:TMP2) - | addiu CARG1, CARG1, -LJ_TSTR - | xor TMP0, TMP0, STR:RC - | or AT, CARG1, TMP0 - | bnez AT, >4 - |. lw TAB:TMP3, TAB:RB->metatable - | beq CARG2, TISNIL, >5 // Key found, but nil value? - |. lw CARG1, offsetof(Node, val)+LO(NODE:TMP2) - |3: - | ins_next1 - | sw CARG2, HI(RA) - | sw CARG1, LO(RA) - | ins_next2 - | - |4: // Follow hash chain. - | bnez NODE:TMP1, <1 - |. move NODE:TMP2, NODE:TMP1 - | // End of hash chain: key not found, nil result. - | - |5: // Check for __index if table value is nil. - | beqz TAB:TMP3, <3 // No metatable: done. - |. li CARG2, LJ_TNIL - | lbu TMP0, TAB:TMP3->nomm - | andi TMP0, TMP0, 1<vmeta_tgets - |. nop - break; - case BC_TGETB: - | // RA = dst*8, RB = table*8, RC = index*8 - | decode_RB8a RB, INS - | decode_RB8b RB - | addu CARG2, BASE, RB - | decode_RDtoRC8 RC, RD - | lw CARG1, HI(CARG2) - | li AT, LJ_TTAB - | lw TAB:RB, LO(CARG2) - | addu RA, BASE, RA - | bne CARG1, AT, ->vmeta_tgetb - |. srl TMP0, RC, 3 - | lw TMP1, TAB:RB->asize - | lw TMP2, TAB:RB->array - | sltu AT, TMP0, TMP1 - | beqz AT, ->vmeta_tgetb - |. addu RC, TMP2, RC - | lw TMP1, HI(RC) - | beq TMP1, TISNIL, >5 - |. ldc1 f0, 0(RC) - |1: - | ins_next1 - | sdc1 f0, 0(RA) - | ins_next2 - | - |5: // Check for __index if table value is nil. - | lw TAB:TMP2, TAB:RB->metatable - | beqz TAB:TMP2, <1 // No metatable: done. - |. nop - | lbu TMP1, TAB:TMP2->nomm - | andi TMP1, TMP1, 1<vmeta_tgetb // Caveat: preserve TMP0! - |. nop - break; - - case BC_TSETV: - | // RA = src*8, RB = table*8, RC = key*8 - | decode_RB8a RB, INS - | decode_RB8b RB - | decode_RDtoRC8 RC, RD - | addu CARG2, BASE, RB - | addu CARG3, BASE, RC - | lw TMP1, HI(CARG2) - | lw TMP2, HI(CARG3) - | lw TAB:RB, LO(CARG2) - | li AT, LJ_TTAB - | ldc1 f0, 0(CARG3) - | bne TMP1, AT, ->vmeta_tsetv - |. addu RA, BASE, RA - | sltiu AT, TMP2, LJ_TISNUM - | beqz AT, >5 - |. li AT, LJ_TSTR - | - | // Convert number key to integer, check for integerness and range. - | cvt.w.d f2, f0 - | lw TMP0, TAB:RB->asize - | mfc1 TMP2, f2 - | cvt.d.w f4, f2 - | lw TMP1, TAB:RB->array - | c.eq.d f0, f4 - | sltu AT, TMP2, TMP0 - | movf AT, r0 - | sll TMP2, TMP2, 3 - | beqz AT, ->vmeta_tsetv // Integer key and in array part? - |. addu TMP1, TMP1, TMP2 - | lbu TMP3, TAB:RB->marked - | lw TMP0, HI(TMP1) - | beq TMP0, TISNIL, >3 - |. ldc1 f0, 0(RA) - |1: - | andi AT, TMP3, LJ_GC_BLACK // isblack(table) - | bnez AT, >7 - |. sdc1 f0, 0(TMP1) - |2: - | ins_next - | - |3: // Check for __newindex if previous value is nil. - | lw TAB:TMP2, TAB:RB->metatable - | beqz TAB:TMP2, <1 // No metatable: done. - |. nop - | lbu TMP2, TAB:TMP2->nomm - | andi TMP2, TMP2, 1<vmeta_tsetv - |. nop - | - |5: - | bne TMP2, AT, ->vmeta_tsetv - |. lw STR:RC, LO(CARG3) - | b ->BC_TSETS_Z // String key? - |. nop - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0, <2 - break; - case BC_TSETS: - | // RA = src*8, RB = table*8, RC = str_const*8 (~) - | decode_RB8a RB, INS - | decode_RB8b RB - | addu CARG2, BASE, RB - | decode_RC4a RC, INS - | lw TMP0, HI(CARG2) - | decode_RC4b RC - | li AT, LJ_TTAB - | subu CARG3, KBASE, RC - | lw TAB:RB, LO(CARG2) - | lw STR:RC, -4(CARG3) // KBASE-4-str_const*4 - | bne TMP0, AT, ->vmeta_tsets1 - |. addu RA, BASE, RA - |->BC_TSETS_Z: - | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = BASE+src*8 - | lw TMP0, TAB:RB->hmask - | lw TMP1, STR:RC->hash - | lw NODE:TMP2, TAB:RB->node - | sb r0, TAB:RB->nomm // Clear metamethod cache. - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | sll TMP0, TMP1, 5 - | sll TMP1, TMP1, 3 - | subu TMP1, TMP0, TMP1 - | addu NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - | ldc1 f20, 0(RA) - |1: - | lw CARG1, offsetof(Node, key)+HI(NODE:TMP2) - | lw TMP0, offsetof(Node, key)+LO(NODE:TMP2) - | li AT, LJ_TSTR - | lw NODE:TMP1, NODE:TMP2->next - | bne CARG1, AT, >5 - |. lw CARG2, offsetof(Node, val)+HI(NODE:TMP2) - | bne TMP0, STR:RC, >5 - |. lbu TMP3, TAB:RB->marked - | beq CARG2, TISNIL, >4 // Key found, but nil value? - |. lw TAB:TMP0, TAB:RB->metatable - |2: - | andi AT, TMP3, LJ_GC_BLACK // isblack(table) - | bnez AT, >7 - |. sdc1 f20, NODE:TMP2->val - |3: - | ins_next - | - |4: // Check for __newindex if previous value is nil. - | beqz TAB:TMP0, <2 // No metatable: done. - |. nop - | lbu TMP0, TAB:TMP0->nomm - | andi TMP0, TMP0, 1<vmeta_tsets - |. nop - | - |5: // Follow hash chain. - | bnez NODE:TMP1, <1 - |. move NODE:TMP2, NODE:TMP1 - | // End of hash chain: key not found, add a new one - | - | // But check for __newindex first. - | lw TAB:TMP2, TAB:RB->metatable - | beqz TAB:TMP2, >6 // No metatable: continue. - |. addiu CARG3, DISPATCH, DISPATCH_GL(tmptv) - | lbu TMP0, TAB:TMP2->nomm - | andi TMP0, TMP0, 1<vmeta_tsets // 'no __newindex' flag NOT set: check. - |. li AT, LJ_TSTR - |6: - | load_got lj_tab_newkey - | sw STR:RC, LO(CARG3) - | sw AT, HI(CARG3) - | sw BASE, L->base - | move CARG2, TAB:RB - | sw PC, SAVE_PC - | call_intern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k - |. move CARG1, L - | // Returns TValue *. - | lw BASE, L->base - | b <3 // No 2nd write barrier needed. - |. sdc1 f20, 0(CRET1) - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0, <3 - break; - case BC_TSETB: - | // RA = src*8, RB = table*8, RC = index*8 - | decode_RB8a RB, INS - | decode_RB8b RB - | addu CARG2, BASE, RB - | decode_RDtoRC8 RC, RD - | lw CARG1, HI(CARG2) - | li AT, LJ_TTAB - | lw TAB:RB, LO(CARG2) - | addu RA, BASE, RA - | bne CARG1, AT, ->vmeta_tsetb - |. srl TMP0, RC, 3 - | lw TMP1, TAB:RB->asize - | lw TMP2, TAB:RB->array - | sltu AT, TMP0, TMP1 - | beqz AT, ->vmeta_tsetb - |. addu RC, TMP2, RC - | lw TMP1, HI(RC) - | lbu TMP3, TAB:RB->marked - | beq TMP1, TISNIL, >5 - |. ldc1 f0, 0(RA) - |1: - | andi AT, TMP3, LJ_GC_BLACK // isblack(table) - | bnez AT, >7 - |. sdc1 f0, 0(RC) - |2: - | ins_next - | - |5: // Check for __newindex if previous value is nil. - | lw TAB:TMP2, TAB:RB->metatable - | beqz TAB:TMP2, <1 // No metatable: done. - |. nop - | lbu TMP1, TAB:TMP2->nomm - | andi TMP1, TMP1, 1<vmeta_tsetb // Caveat: preserve TMP0! - |. nop - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0, <2 - break; - - case BC_TSETM: - | // RA = base*8 (table at base-1), RD = num_const*8 (start index) - | addu RA, BASE, RA - |1: - | addu TMP3, KBASE, RD - | lw TAB:CARG2, -8+LO(RA) // Guaranteed to be a table. - | addiu TMP0, MULTRES, -8 - | lw TMP3, LO(TMP3) // Integer constant is in lo-word. - | beqz TMP0, >4 // Nothing to copy? - |. srl CARG3, TMP0, 3 - | addu CARG3, CARG3, TMP3 - | lw TMP2, TAB:CARG2->asize - | sll TMP1, TMP3, 3 - | lbu TMP3, TAB:CARG2->marked - | lw CARG1, TAB:CARG2->array - | sltu AT, TMP2, CARG3 - | bnez AT, >5 - |. addu TMP2, RA, TMP0 - | addu TMP1, TMP1, CARG1 - | andi TMP0, TMP3, LJ_GC_BLACK // isblack(table) - |3: // Copy result slots to table. - | ldc1 f0, 0(RA) - | addiu RA, RA, 8 - | sltu AT, RA, TMP2 - | sdc1 f0, 0(TMP1) - | bnez AT, <3 - |. addiu TMP1, TMP1, 8 - | bnez TMP0, >7 - |. nop - |4: - | ins_next - | - |5: // Need to resize array part. - | load_got lj_tab_reasize - | sw BASE, L->base - | sw PC, SAVE_PC - | move BASE, RD - | call_intern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) - |. move CARG1, L - | // Must not reallocate the stack. - | move RD, BASE - | b <1 - |. lw BASE, L->base // Reload BASE for lack of a saved register. - | - |7: // Possible table write barrier for any value. Skip valiswhite check. - | barrierback TAB:CARG2, TMP3, TMP0, <4 - break; - - /* -- Calls and vararg handling ----------------------------------------- */ - - case BC_CALLM: - | // RA = base*8, (RB = (nresults+1)*8,) RC = extra_nargs*8 - | decode_RDtoRC8 NARGS8:RC, RD - | b ->BC_CALL_Z - |. addu NARGS8:RC, NARGS8:RC, MULTRES - break; - case BC_CALL: - | // RA = base*8, (RB = (nresults+1)*8,) RC = (nargs+1)*8 - | decode_RDtoRC8 NARGS8:RC, RD - |->BC_CALL_Z: - | move TMP2, BASE - | addu BASE, BASE, RA - | li AT, LJ_TFUNC - | lw TMP0, HI(BASE) - | lw LFUNC:RB, LO(BASE) - | addiu BASE, BASE, 8 - | bne TMP0, AT, ->vmeta_call - |. addiu NARGS8:RC, NARGS8:RC, -8 - | ins_call - break; - - case BC_CALLMT: - | // RA = base*8, (RB = 0,) RC = extra_nargs*8 - | addu NARGS8:RD, NARGS8:RD, MULTRES // BC_CALLT gets RC from RD. - | // Fall through. Assumes BC_CALLT follows. - break; - case BC_CALLT: - | // RA = base*8, (RB = 0,) RC = (nargs+1)*8 - | addu RA, BASE, RA - | li AT, LJ_TFUNC - | lw TMP0, HI(RA) - | lw LFUNC:RB, LO(RA) - | move NARGS8:RC, RD - | lw TMP1, FRAME_PC(BASE) - | addiu RA, RA, 8 - | bne TMP0, AT, ->vmeta_callt - |. addiu NARGS8:RC, NARGS8:RC, -8 - |->BC_CALLT_Z: - | andi TMP0, TMP1, FRAME_TYPE // Caveat: preserve TMP0 until the 'or'. - | lbu TMP3, LFUNC:RB->ffid - | bnez TMP0, >7 - |. xori TMP2, TMP1, FRAME_VARG - |1: - | sw LFUNC:RB, FRAME_FUNC(BASE) // Copy function down, but keep PC. - | sltiu AT, TMP3, 2 // (> FF_C) Calling a fast function? - | move TMP2, BASE - | beqz NARGS8:RC, >3 - |. move TMP3, NARGS8:RC - |2: - | ldc1 f0, 0(RA) - | addiu RA, RA, 8 - | addiu TMP3, TMP3, -8 - | sdc1 f0, 0(TMP2) - | bnez TMP3, <2 - |. addiu TMP2, TMP2, 8 - |3: - | or TMP0, TMP0, AT - | beqz TMP0, >5 - |. nop - |4: - | ins_callt - | - |5: // Tailcall to a fast function with a Lua frame below. - | lw INS, -4(TMP1) - | decode_RA8a RA, INS - | decode_RA8b RA - | subu TMP1, BASE, RA - | lw LFUNC:TMP1, -8+FRAME_FUNC(TMP1) - | lw TMP1, LFUNC:TMP1->pc - | b <4 - |. lw KBASE, PC2PROTO(k)(TMP1) // Need to prepare KBASE. - | - |7: // Tailcall from a vararg function. - | andi AT, TMP2, FRAME_TYPEP - | bnez AT, <1 // Vararg frame below? - |. subu TMP2, BASE, TMP2 // Relocate BASE down. - | move BASE, TMP2 - | lw TMP1, FRAME_PC(TMP2) - | b <1 - |. andi TMP0, TMP1, FRAME_TYPE - break; - - case BC_ITERC: - | // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 ((2+1)*8)) - | move TMP2, BASE - | addu BASE, BASE, RA - | li AT, LJ_TFUNC - | lw TMP1, -24+HI(BASE) - | lw LFUNC:RB, -24+LO(BASE) - | ldc1 f2, -8(BASE) - | ldc1 f0, -16(BASE) - | sw TMP1, HI(BASE) // Copy callable. - | sw LFUNC:RB, LO(BASE) - | sdc1 f2, 16(BASE) // Copy control var. - | sdc1 f0, 8(BASE) // Copy state. - | addiu BASE, BASE, 8 - | bne TMP1, AT, ->vmeta_call - |. li NARGS8:RC, 16 // Iterators get 2 arguments. - | ins_call - break; - - case BC_ITERN: - | // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 (2+1)*8) - |.if JIT - | // NYI: add hotloop, record BC_ITERN. - |.endif - | addu RA, BASE, RA - | lw TAB:RB, -16+LO(RA) - | lw RC, -8+LO(RA) // Get index from control var. - | lw TMP0, TAB:RB->asize - | lw TMP1, TAB:RB->array - | addiu PC, PC, 4 - |1: // Traverse array part. - | sltu AT, RC, TMP0 - | beqz AT, >5 // Index points after array part? - |. sll TMP3, RC, 3 - | addu TMP3, TMP1, TMP3 - | lw TMP2, HI(TMP3) - | ldc1 f0, 0(TMP3) - | mtc1 RC, f2 - | lhu RD, -4+OFS_RD(PC) - | beq TMP2, TISNIL, <1 // Skip holes in array part. - |. addiu RC, RC, 1 - | cvt.d.w f2, f2 - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | sdc1 f0, 8(RA) - | decode_RD4b RD - | addu RD, RD, TMP3 - | sw RC, -8+LO(RA) // Update control var. - | addu PC, PC, RD - | sdc1 f2, 0(RA) - |3: - | ins_next - | - |5: // Traverse hash part. - | lw TMP1, TAB:RB->hmask - | subu RC, RC, TMP0 - | lw TMP2, TAB:RB->node - |6: - | sltu AT, TMP1, RC // End of iteration? Branch to ITERL+1. - | bnez AT, <3 - |. sll TMP3, RC, 5 - | sll RB, RC, 3 - | subu TMP3, TMP3, RB - | addu NODE:TMP3, TMP3, TMP2 - | lw RB, HI(NODE:TMP3) - | ldc1 f0, 0(NODE:TMP3) - | lhu RD, -4+OFS_RD(PC) - | beq RB, TISNIL, <6 // Skip holes in hash part. - |. addiu RC, RC, 1 - | ldc1 f2, NODE:TMP3->key - | lui TMP3, (-(BCBIAS_J*4 >> 16) & 65535) - | sdc1 f0, 8(RA) - | addu RC, RC, TMP0 - | decode_RD4b RD - | addu RD, RD, TMP3 - | sdc1 f2, 0(RA) - | addu PC, PC, RD - | b <3 - |. sw RC, -8+LO(RA) // Update control var. - break; - - case BC_ISNEXT: - | // RA = base*8, RD = target (points to ITERN) - | addu RA, BASE, RA - | lw TMP0, -24+HI(RA) - | lw CFUNC:TMP1, -24+LO(RA) - | lw TMP2, -16+HI(RA) - | lw TMP3, -8+HI(RA) - | li AT, LJ_TFUNC - | bne TMP0, AT, >5 - |. addiu TMP2, TMP2, -LJ_TTAB - | lbu TMP1, CFUNC:TMP1->ffid - | addiu TMP3, TMP3, -LJ_TNIL - | srl TMP0, RD, 1 - | or TMP2, TMP2, TMP3 - | addiu TMP1, TMP1, -FF_next_N - | addu TMP0, PC, TMP0 - | or TMP1, TMP1, TMP2 - | bnez TMP1, >5 - |. lui TMP2, (-(BCBIAS_J*4 >> 16) & 65535) - | addu PC, TMP0, TMP2 - | lui TMP1, 0xfffe - | ori TMP1, TMP1, 0x7fff - | sw r0, -8+LO(RA) // Initialize control var. - | sw TMP1, -8+HI(RA) - |1: - | ins_next - |5: // Despecialize bytecode if any of the checks fail. - | li TMP3, BC_JMP - | li TMP1, BC_ITERC - | sb TMP3, -4+OFS_OP(PC) - | addu PC, TMP0, TMP2 - | b <1 - |. sb TMP1, OFS_OP(PC) - break; - - case BC_VARG: - | // RA = base*8, RB = (nresults+1)*8, RC = numparams*8 - | lw TMP0, FRAME_PC(BASE) - | decode_RDtoRC8 RC, RD - | decode_RB8a RB, INS - | addu RC, BASE, RC - | decode_RB8b RB - | addu RA, BASE, RA - | addiu RC, RC, FRAME_VARG - | addu TMP2, RA, RB - | addiu TMP3, BASE, -8 // TMP3 = vtop - | subu RC, RC, TMP0 // RC = vbase - | // Note: RC may now be even _above_ BASE if nargs was < numparams. - | beqz RB, >5 // Copy all varargs? - |. subu TMP1, TMP3, RC - | addiu TMP2, TMP2, -16 - |1: // Copy vararg slots to destination slots. - | lw CARG1, HI(RC) - | sltu AT, RC, TMP3 - | lw CARG2, LO(RC) - | addiu RC, RC, 8 - | movz CARG1, TISNIL, AT - | sw CARG1, HI(RA) - | sw CARG2, LO(RA) - | sltu AT, RA, TMP2 - | bnez AT, <1 - |. addiu RA, RA, 8 - |3: - | ins_next - | - |5: // Copy all varargs. - | lw TMP0, L->maxstack - | blez TMP1, <3 // No vararg slots? - |. li MULTRES, 8 // MULTRES = (0+1)*8 - | addu TMP2, RA, TMP1 - | sltu AT, TMP0, TMP2 - | bnez AT, >7 - |. addiu MULTRES, TMP1, 8 - |6: - | ldc1 f0, 0(RC) - | addiu RC, RC, 8 - | sdc1 f0, 0(RA) - | sltu AT, RC, TMP3 - | bnez AT, <6 // More vararg slots? - |. addiu RA, RA, 8 - | b <3 - |. nop - | - |7: // Grow stack for varargs. - | load_got lj_state_growstack - | sw RA, L->top - | subu RA, RA, BASE - | sw BASE, L->base - | subu BASE, RC, BASE // Need delta, because BASE may change. - | sw PC, SAVE_PC - | srl CARG2, TMP1, 3 - | call_intern lj_state_growstack // (lua_State *L, int n) - |. move CARG1, L - | move RC, BASE - | lw BASE, L->base - | addu RA, BASE, RA - | addu RC, BASE, RC - | b <6 - |. addiu TMP3, BASE, -8 - break; - - /* -- Returns ----------------------------------------------------------- */ - - case BC_RETM: - | // RA = results*8, RD = extra_nresults*8 - | addu RD, RD, MULTRES // MULTRES >= 8, so RD >= 8. - | // Fall through. Assumes BC_RET follows. - break; - - case BC_RET: - | // RA = results*8, RD = (nresults+1)*8 - | lw PC, FRAME_PC(BASE) - | addu RA, BASE, RA - | move MULTRES, RD - |1: - | andi TMP0, PC, FRAME_TYPE - | bnez TMP0, ->BC_RETV_Z - |. xori TMP1, PC, FRAME_VARG - | - |->BC_RET_Z: - | // BASE = base, RA = resultptr, RD = (nresults+1)*8, PC = return - | lw INS, -4(PC) - | addiu TMP2, BASE, -8 - | addiu RC, RD, -8 - | decode_RA8a TMP0, INS - | decode_RB8a RB, INS - | decode_RA8b TMP0 - | decode_RB8b RB - | addu TMP3, TMP2, RB - | beqz RC, >3 - |. subu BASE, TMP2, TMP0 - |2: - | ldc1 f0, 0(RA) - | addiu RA, RA, 8 - | addiu RC, RC, -8 - | sdc1 f0, 0(TMP2) - | bnez RC, <2 - |. addiu TMP2, TMP2, 8 - |3: - | addiu TMP3, TMP3, -8 - |5: - | sltu AT, TMP2, TMP3 - | bnez AT, >6 - |. lw LFUNC:TMP1, FRAME_FUNC(BASE) - | ins_next1 - | lw TMP1, LFUNC:TMP1->pc - | lw KBASE, PC2PROTO(k)(TMP1) - | ins_next2 - | - |6: // Fill up results with nil. - | sw TISNIL, HI(TMP2) - | b <5 - |. addiu TMP2, TMP2, 8 - | - |->BC_RETV_Z: // Non-standard return case. - | andi TMP2, TMP1, FRAME_TYPEP - | bnez TMP2, ->vm_return - |. nop - | // Return from vararg function: relocate BASE down. - | subu BASE, BASE, TMP1 - | b <1 - |. lw PC, FRAME_PC(BASE) - break; - - case BC_RET0: case BC_RET1: - | // RA = results*8, RD = (nresults+1)*8 - | lw PC, FRAME_PC(BASE) - | addu RA, BASE, RA - | move MULTRES, RD - | andi TMP0, PC, FRAME_TYPE - | bnez TMP0, ->BC_RETV_Z - |. xori TMP1, PC, FRAME_VARG - | - | lw INS, -4(PC) - | addiu TMP2, BASE, -8 - if (op == BC_RET1) { - | ldc1 f0, 0(RA) - } - | decode_RB8a RB, INS - | decode_RA8a RA, INS - | decode_RB8b RB - | decode_RA8b RA - if (op == BC_RET1) { - | sdc1 f0, 0(TMP2) - } - | subu BASE, TMP2, RA - |5: - | sltu AT, RD, RB - | bnez AT, >6 - |. lw LFUNC:TMP1, FRAME_FUNC(BASE) - | ins_next1 - | lw TMP1, LFUNC:TMP1->pc - | lw KBASE, PC2PROTO(k)(TMP1) - | ins_next2 - | - |6: // Fill up results with nil. - | addiu TMP2, TMP2, 8 - | addiu RD, RD, 8 - | b <5 - if (op == BC_RET1) { - |. sw TISNIL, HI(TMP2) - } else { - |. sw TISNIL, -8+HI(TMP2) - } - break; - - /* -- Loops and branches ------------------------------------------------ */ - - case BC_FORL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IFORL follows. - break; - - case BC_JFORI: - case BC_JFORL: -#if !LJ_HASJIT - break; -#endif - case BC_FORI: - case BC_IFORL: - | // RA = base*8, RD = target (after end of loop or start of loop) - vk = (op == BC_IFORL || op == BC_JFORL); - | addu RA, BASE, RA - if (vk) { - | ldc1 f0, FORL_IDX*8(RA) - | ldc1 f4, FORL_STEP*8(RA) - | ldc1 f2, FORL_STOP*8(RA) - | lw TMP3, FORL_STEP*8+HI(RA) - | add.d f0, f0, f4 - | sdc1 f0, FORL_IDX*8(RA) - } else { - | lw TMP1, FORL_IDX*8+HI(RA) - | lw TMP3, FORL_STEP*8+HI(RA) - | lw TMP2, FORL_STOP*8+HI(RA) - | sltiu TMP1, TMP1, LJ_TISNUM - | sltiu TMP0, TMP3, LJ_TISNUM - | sltiu TMP2, TMP2, LJ_TISNUM - | and TMP1, TMP1, TMP0 - | and TMP1, TMP1, TMP2 - | ldc1 f0, FORL_IDX*8(RA) - | beqz TMP1, ->vmeta_for - |. ldc1 f2, FORL_STOP*8(RA) - } - if (op != BC_JFORL) { - | srl RD, RD, 1 - | lui TMP0, (-(BCBIAS_J*4 >> 16) & 65535) - } - | c.le.d 0, f0, f2 - | c.le.d 1, f2, f0 - | sdc1 f0, FORL_EXT*8(RA) - if (op == BC_JFORI) { - | li TMP1, 1 - | li TMP2, 1 - | addu TMP0, RD, TMP0 - | slt TMP3, TMP3, r0 - | movf TMP1, r0, 0 - | addu PC, PC, TMP0 - | movf TMP2, r0, 1 - | lhu RD, -4+OFS_RD(PC) - | movn TMP1, TMP2, TMP3 - | bnez TMP1, =>BC_JLOOP - |. decode_RD8b RD - } else if (op == BC_JFORL) { - | li TMP1, 1 - | li TMP2, 1 - | slt TMP3, TMP3, r0 - | movf TMP1, r0, 0 - | movf TMP2, r0, 1 - | movn TMP1, TMP2, TMP3 - | bnez TMP1, =>BC_JLOOP - |. nop - } else { - | addu TMP1, RD, TMP0 - | slt TMP3, TMP3, r0 - | move TMP2, TMP1 - if (op == BC_FORI) { - | movt TMP1, r0, 0 - | movt TMP2, r0, 1 - } else { - | movf TMP1, r0, 0 - | movf TMP2, r0, 1 - } - | movn TMP1, TMP2, TMP3 - | addu PC, PC, TMP1 - } - | ins_next - break; - - case BC_ITERL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IITERL follows. - break; - - case BC_JITERL: -#if !LJ_HASJIT - break; -#endif - case BC_IITERL: - | // RA = base*8, RD = target - | addu RA, BASE, RA - | lw TMP1, HI(RA) - | beq TMP1, TISNIL, >1 // Stop if iterator returned nil. - |. lw TMP2, LO(RA) - if (op == BC_JITERL) { - | sw TMP1, -8+HI(RA) - | b =>BC_JLOOP - |. sw TMP2, -8+LO(RA) - } else { - | branch_RD // Otherwise save control var + branch. - | sw TMP1, -8+HI(RA) - | sw TMP2, -8+LO(RA) - } - |1: - | ins_next - break; - - case BC_LOOP: - | // RA = base*8, RD = target (loop extent) - | // Note: RA/RD is only used by trace recorder to determine scope/extent - | // This opcode does NOT jump, it's only purpose is to detect a hot loop. - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_ILOOP follows. - break; - - case BC_ILOOP: - | // RA = base*8, RD = target (loop extent) - | ins_next - break; - - case BC_JLOOP: - |.if JIT - | // RA = base*8 (ignored), RD = traceno*8 - | lw TMP1, DISPATCH_J(trace)(DISPATCH) - | srl RD, RD, 1 - | li AT, 0 - | addu TMP1, TMP1, RD - | // Traces on MIPS don't store the trace number, so use 0. - | sw AT, DISPATCH_GL(vmstate)(DISPATCH) - | lw TRACE:TMP2, 0(TMP1) - | sw BASE, DISPATCH_GL(jit_base)(DISPATCH) - | sw L, DISPATCH_GL(jit_L)(DISPATCH) - | lw TMP2, TRACE:TMP2->mcode - | jr TMP2 - |. addiu JGL, DISPATCH, GG_DISP2G+32768 - |.endif - break; - - case BC_JMP: - | // RA = base*8 (only used by trace recorder), RD = target - | branch_RD - | ins_next - break; - - /* -- Function headers -------------------------------------------------- */ - - case BC_FUNCF: - |.if JIT - | hotcall - |.endif - case BC_FUNCV: /* NYI: compiled vararg functions. */ - | // Fall through. Assumes BC_IFUNCF/BC_IFUNCV follow. - break; - - case BC_JFUNCF: -#if !LJ_HASJIT - break; -#endif - case BC_IFUNCF: - | // BASE = new base, RA = BASE+framesize*8, RB = LFUNC, RC = nargs*8 - | lw TMP2, L->maxstack - | lbu TMP1, -4+PC2PROTO(numparams)(PC) - | lw KBASE, -4+PC2PROTO(k)(PC) - | sltu AT, TMP2, RA - | bnez AT, ->vm_growstack_l - |. sll TMP1, TMP1, 3 - if (op != BC_JFUNCF) { - | ins_next1 - } - |2: - | sltu AT, NARGS8:RC, TMP1 // Check for missing parameters. - | bnez AT, >3 - |. addu AT, BASE, NARGS8:RC - if (op == BC_JFUNCF) { - | decode_RD8a RD, INS - | b =>BC_JLOOP - |. decode_RD8b RD - } else { - | ins_next2 - } - | - |3: // Clear missing parameters. - | sw TISNIL, HI(AT) - | b <2 - |. addiu NARGS8:RC, NARGS8:RC, 8 - break; - - case BC_JFUNCV: -#if !LJ_HASJIT - break; -#endif - | NYI // NYI: compiled vararg functions - break; /* NYI: compiled vararg functions. */ - - case BC_IFUNCV: - | // BASE = new base, RA = BASE+framesize*8, RB = LFUNC, RC = nargs*8 - | addu TMP1, BASE, RC - | lw TMP2, L->maxstack - | addu TMP0, RA, RC - | sw LFUNC:RB, LO(TMP1) // Store copy of LFUNC. - | addiu TMP3, RC, 8+FRAME_VARG - | sltu AT, TMP0, TMP2 - | lw KBASE, -4+PC2PROTO(k)(PC) - | beqz AT, ->vm_growstack_l - |. sw TMP3, HI(TMP1) // Store delta + FRAME_VARG. - | lbu TMP2, -4+PC2PROTO(numparams)(PC) - | move RA, BASE - | move RC, TMP1 - | ins_next1 - | beqz TMP2, >3 - |. addiu BASE, TMP1, 8 - |1: - | lw TMP0, HI(RA) - | lw TMP3, LO(RA) - | sltu AT, RA, RC // Less args than parameters? - | move CARG1, TMP0 - | movz TMP0, TISNIL, AT // Clear missing parameters. - | movn CARG1, TISNIL, AT // Clear old fixarg slot (help the GC). - | sw TMP3, 8+LO(TMP1) - | addiu TMP2, TMP2, -1 - | sw TMP0, 8+HI(TMP1) - | addiu TMP1, TMP1, 8 - | sw CARG1, HI(RA) - | bnez TMP2, <1 - |. addiu RA, RA, 8 - |3: - | ins_next2 - break; - - case BC_FUNCC: - case BC_FUNCCW: - | // BASE = new base, RA = BASE+framesize*8, RB = CFUNC, RC = nargs*8 - if (op == BC_FUNCC) { - | lw CFUNCADDR, CFUNC:RB->f - } else { - | lw CFUNCADDR, DISPATCH_GL(wrapf)(DISPATCH) - } - | addu TMP1, RA, NARGS8:RC - | lw TMP2, L->maxstack - | addu RC, BASE, NARGS8:RC - | sw BASE, L->base - | sltu AT, TMP2, TMP1 - | sw RC, L->top - | li_vmstate C - if (op == BC_FUNCCW) { - | lw CARG2, CFUNC:RB->f - } - | bnez AT, ->vm_growstack_c // Need to grow stack. - |. move CARG1, L - | jalr CFUNCADDR // (lua_State *L [, lua_CFunction f]) - |. st_vmstate - | // Returns nresults. - | lw BASE, L->base - | sll RD, CRET1, 3 - | lw TMP1, L->top - | li_vmstate INTERP - | lw PC, FRAME_PC(BASE) // Fetch PC of caller. - | subu RA, TMP1, RD // RA = L->top - nresults*8 - | b ->vm_returnc - |. st_vmstate - break; - - /* ---------------------------------------------------------------------- */ - - default: - fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]); - exit(2); - break; - } -} - -static int build_backend(BuildCtx *ctx) -{ - int op; - - dasm_growpc(Dst, BC__MAX); - - build_subroutines(ctx); - - |.code_op - for (op = 0; op < BC__MAX; op++) - build_ins(ctx, (BCOp)op, op); - - return BC__MAX; -} - -/* Emit pseudo frame-info for all assembler functions. */ -static void emit_asm_debug(BuildCtx *ctx) -{ - int fcofs = (int)((uint8_t *)ctx->glob[GLOB_vm_ffi_call] - ctx->code); - int i; - switch (ctx->mode) { - case BUILD_elfasm: - fprintf(ctx->fp, "\t.section .debug_frame,\"\",@progbits\n"); - fprintf(ctx->fp, - ".Lframe0:\n" - "\t.4byte .LECIE0-.LSCIE0\n" - ".LSCIE0:\n" - "\t.4byte 0xffffffff\n" - "\t.byte 0x1\n" - "\t.string \"\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 31\n" - "\t.byte 0xc\n\t.uleb128 29\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE0:\n\n"); - fprintf(ctx->fp, - ".LSFDE0:\n" - "\t.4byte .LEFDE0-.LASFDE0\n" - ".LASFDE0:\n" - "\t.4byte .Lframe0\n" - "\t.4byte .Lbegin\n" - "\t.4byte %d\n" - "\t.byte 0xe\n\t.uleb128 %d\n" - "\t.byte 0x9f\n\t.sleb128 1\n" - "\t.byte 0x9e\n\t.sleb128 2\n", - fcofs, CFRAME_SIZE); - for (i = 23; i >= 16; i--) - fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 26-i); - for (i = 30; i >= 20; i -= 2) - fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+32+i, 42-i); - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE0:\n\n"); -#if LJ_HASFFI - fprintf(ctx->fp, - ".LSFDE1:\n" - "\t.4byte .LEFDE1-.LASFDE1\n" - ".LASFDE1:\n" - "\t.4byte .Lframe0\n" - "\t.4byte lj_vm_ffi_call\n" - "\t.4byte %d\n" - "\t.byte 0x9f\n\t.uleb128 1\n" - "\t.byte 0x90\n\t.uleb128 2\n" - "\t.byte 0xd\n\t.uleb128 0x10\n" - "\t.align 2\n" - ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); -#endif - fprintf(ctx->fp, "\t.section .eh_frame,\"aw\",@progbits\n"); - fprintf(ctx->fp, - "\t.globl lj_err_unwind_dwarf\n" - ".Lframe1:\n" - "\t.4byte .LECIE1-.LSCIE1\n" - ".LSCIE1:\n" - "\t.4byte 0\n" - "\t.byte 0x1\n" - "\t.string \"zPR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 31\n" - "\t.uleb128 6\n" /* augmentation length */ - "\t.byte 0\n" - "\t.4byte lj_err_unwind_dwarf\n" - "\t.byte 0\n" - "\t.byte 0xc\n\t.uleb128 29\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE1:\n\n"); - fprintf(ctx->fp, - ".LSFDE2:\n" - "\t.4byte .LEFDE2-.LASFDE2\n" - ".LASFDE2:\n" - "\t.4byte .LASFDE2-.Lframe1\n" - "\t.4byte .Lbegin\n" - "\t.4byte %d\n" - "\t.uleb128 0\n" /* augmentation length */ - "\t.byte 0xe\n\t.uleb128 %d\n" - "\t.byte 0x9f\n\t.sleb128 1\n" - "\t.byte 0x9e\n\t.sleb128 2\n", - fcofs, CFRAME_SIZE); - for (i = 23; i >= 16; i--) - fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 26-i); - for (i = 30; i >= 20; i -= 2) - fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+32+i, 42-i); - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE2:\n\n"); -#if LJ_HASFFI - fprintf(ctx->fp, - ".Lframe2:\n" - "\t.4byte .LECIE2-.LSCIE2\n" - ".LSCIE2:\n" - "\t.4byte 0\n" - "\t.byte 0x1\n" - "\t.string \"zR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 31\n" - "\t.uleb128 1\n" /* augmentation length */ - "\t.byte 0\n" - "\t.byte 0xc\n\t.uleb128 29\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE2:\n\n"); - fprintf(ctx->fp, - ".LSFDE3:\n" - "\t.4byte .LEFDE3-.LASFDE3\n" - ".LASFDE3:\n" - "\t.4byte .LASFDE3-.Lframe2\n" - "\t.4byte lj_vm_ffi_call\n" - "\t.4byte %d\n" - "\t.uleb128 0\n" /* augmentation length */ - "\t.byte 0x9f\n\t.uleb128 1\n" - "\t.byte 0x90\n\t.uleb128 2\n" - "\t.byte 0xd\n\t.uleb128 0x10\n" - "\t.align 2\n" - ".LEFDE3:\n\n", (int)ctx->codesz - fcofs); -#endif - break; - default: - break; - } -} - diff --git a/deps/luajit/src/vm_ppc.dasc b/deps/luajit/src/vm_ppc.dasc deleted file mode 100644 index ad8a023..0000000 --- a/deps/luajit/src/vm_ppc.dasc +++ /dev/null @@ -1,5160 +0,0 @@ -|// Low-level VM code for PowerPC CPUs. -|// Bytecode interpreter, fast functions and helper functions. -|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -| -|.arch ppc -|.section code_op, code_sub -| -|.actionlist build_actionlist -|.globals GLOB_ -|.globalnames globnames -|.externnames extnames -| -|// Note: The ragged indentation of the instructions is intentional. -|// The starting columns indicate data dependencies. -| -|//----------------------------------------------------------------------- -| -|// DynASM defines used by the PPC port: -|// -|// P64 64 bit pointers (only for GPR64 testing). -|// Note: a full PPC64 _LP64 port is not planned. -|// GPR64 64 bit registers (but possibly 32 bit pointers, e.g. PS3). -|// Affects reg saves, stack layout, carry/overflow/dot flags etc. -|// FRAME32 Use 32 bit frame layout, even with GPR64 (Xbox 360). -|// TOC Need table of contents (64 bit or 32 bit variant, e.g. PS3). -|// Function pointers are really a struct: code, TOC, env (optional). -|// TOCENV Function pointers have an environment pointer, too (not on PS3). -|// PPE Power Processor Element of Cell (PS3) or Xenon (Xbox 360). -|// Must avoid (slow) micro-coded instructions. -| -|.if P64 -|.define TOC, 1 -|.define TOCENV, 1 -|.macro lpx, a, b, c; ldx a, b, c; .endmacro -|.macro lp, a, b; ld a, b; .endmacro -|.macro stp, a, b; std a, b; .endmacro -|.define decode_OPP, decode_OP8 -|.if FFI -|// Missing: Calling conventions, 64 bit regs, TOC. -|.error lib_ffi not yet implemented for PPC64 -|.endif -|.else -|.macro lpx, a, b, c; lwzx a, b, c; .endmacro -|.macro lp, a, b; lwz a, b; .endmacro -|.macro stp, a, b; stw a, b; .endmacro -|.define decode_OPP, decode_OP4 -|.endif -| -|// Convenience macros for TOC handling. -|.if TOC -|// Linker needs a TOC patch area for every external call relocation. -|.macro blex, target; bl extern target@plt; nop; .endmacro -|.macro .toc, a, b; a, b; .endmacro -|.if P64 -|.define TOC_OFS, 8 -|.define ENV_OFS, 16 -|.else -|.define TOC_OFS, 4 -|.define ENV_OFS, 8 -|.endif -|.else // No TOC. -|.macro blex, target; bl extern target@plt; .endmacro -|.macro .toc, a, b; .endmacro -|.endif -|.macro .tocenv, a, b; .if TOCENV; a, b; .endif; .endmacro -| -|.macro .gpr64, a, b; .if GPR64; a, b; .endif; .endmacro -| -|.macro andix., y, a, i -|.if PPE -| rlwinm y, a, 0, 31-lj_fls(i), 31-lj_ffs(i) -| cmpwi y, 0 -|.else -| andi. y, a, i -|.endif -|.endmacro -| -|.macro clrso, reg -|.if PPE -| li reg, 0 -| mtxer reg -|.else -| mcrxr cr0 -|.endif -|.endmacro -| -|.macro checkov, reg, noov -|.if PPE -| mfxer reg -| add reg, reg, reg -| cmpwi reg, 0 -| li reg, 0 -| mtxer reg -| bgey noov -|.else -| mcrxr cr0 -| bley noov -|.endif -|.endmacro -| -|//----------------------------------------------------------------------- -| -|// Fixed register assignments for the interpreter. -|// Don't use: r1 = sp, r2 and r13 = reserved (TOC, TLS or SDATA) -| -|// The following must be C callee-save (but BASE is often refetched). -|.define BASE, r14 // Base of current Lua stack frame. -|.define KBASE, r15 // Constants of current Lua function. -|.define PC, r16 // Next PC. -|.define DISPATCH, r17 // Opcode dispatch table. -|.define LREG, r18 // Register holding lua_State (also in SAVE_L). -|.define MULTRES, r19 // Size of multi-result: (nresults+1)*8. -|.define JGL, r31 // On-trace: global_State + 32768. -| -|// Constants for type-comparisons, stores and conversions. C callee-save. -|.define TISNUM, r22 -|.define TISNIL, r23 -|.define ZERO, r24 -|.define TOBIT, f30 // 2^52 + 2^51. -|.define TONUM, f31 // 2^52 + 2^51 + 2^31. -| -|// The following temporaries are not saved across C calls, except for RA. -|.define RA, r20 // Callee-save. -|.define RB, r10 -|.define RC, r11 -|.define RD, r12 -|.define INS, r7 // Overlaps CARG5. -| -|.define TMP0, r0 -|.define TMP1, r8 -|.define TMP2, r9 -|.define TMP3, r6 // Overlaps CARG4. -| -|// Saved temporaries. -|.define SAVE0, r21 -| -|// Calling conventions. -|.define CARG1, r3 -|.define CARG2, r4 -|.define CARG3, r5 -|.define CARG4, r6 // Overlaps TMP3. -|.define CARG5, r7 // Overlaps INS. -| -|.define FARG1, f1 -|.define FARG2, f2 -| -|.define CRET1, r3 -|.define CRET2, r4 -| -|.define TOCREG, r2 // TOC register (only used by C code). -|.define ENVREG, r11 // Environment pointer (nested C functions). -| -|// Stack layout while in interpreter. Must match with lj_frame.h. -|.if GPR64 -|.if FRAME32 -| -|// 456(sp) // \ 32/64 bit C frame info -|.define TONUM_LO, 452(sp) // | -|.define TONUM_HI, 448(sp) // | -|.define TMPD_LO, 444(sp) // | -|.define TMPD_HI, 440(sp) // | -|.define SAVE_CR, 432(sp) // | 64 bit CR save. -|.define SAVE_ERRF, 424(sp) // > Parameter save area. -|.define SAVE_NRES, 420(sp) // | -|.define SAVE_L, 416(sp) // | -|.define SAVE_PC, 412(sp) // | -|.define SAVE_MULTRES, 408(sp) // | -|.define SAVE_CFRAME, 400(sp) // / 64 bit C frame chain. -|// 392(sp) // Reserved. -|.define CFRAME_SPACE, 384 // Delta for sp. -|// Back chain for sp: 384(sp) <-- sp entering interpreter -|.define SAVE_LR, 376(sp) // 32 bit LR stored in hi-part. -|.define SAVE_GPR_, 232 // .. 232+18*8: 64 bit GPR saves. -|.define SAVE_FPR_, 88 // .. 88+18*8: 64 bit FPR saves. -|// 80(sp) // Needed for 16 byte stack frame alignment. -|// 16(sp) // Callee parameter save area (ABI mandated). -|// 8(sp) // Reserved -|// Back chain for sp: 0(sp) <-- sp while in interpreter -|// 32 bit sp stored in hi-part of 0(sp). -| -|.define TMPD_BLO, 447(sp) -|.define TMPD, TMPD_HI -|.define TONUM_D, TONUM_HI -| -|.else -| -|// 508(sp) // \ 32 bit C frame info. -|.define SAVE_ERRF, 472(sp) // | -|.define SAVE_NRES, 468(sp) // | -|.define SAVE_L, 464(sp) // > Parameter save area. -|.define SAVE_PC, 460(sp) // | -|.define SAVE_MULTRES, 456(sp) // | -|.define SAVE_CFRAME, 448(sp) // / 64 bit C frame chain. -|.define SAVE_LR, 416(sp) -|.define CFRAME_SPACE, 400 // Delta for sp. -|// Back chain for sp: 400(sp) <-- sp entering interpreter -|.define SAVE_FPR_, 256 // .. 256+18*8: 64 bit FPR saves. -|.define SAVE_GPR_, 112 // .. 112+18*8: 64 bit GPR saves. -|// 48(sp) // Callee parameter save area (ABI mandated). -|.define SAVE_TOC, 40(sp) // TOC save area. -|.define TMPD_LO, 36(sp) // \ Link editor temp (ABI mandated). -|.define TMPD_HI, 32(sp) // / -|.define TONUM_LO, 28(sp) // \ Compiler temp (ABI mandated). -|.define TONUM_HI, 24(sp) // / -|// Next frame lr: 16(sp) -|.define SAVE_CR, 8(sp) // 64 bit CR save. -|// Back chain for sp: 0(sp) <-- sp while in interpreter -| -|.define TMPD_BLO, 39(sp) -|.define TMPD, TMPD_HI -|.define TONUM_D, TONUM_HI -| -|.endif -|.else -| -|.define SAVE_LR, 276(sp) -|.define CFRAME_SPACE, 272 // Delta for sp. -|// Back chain for sp: 272(sp) <-- sp entering interpreter -|.define SAVE_FPR_, 128 // .. 128+18*8: 64 bit FPR saves. -|.define SAVE_GPR_, 56 // .. 56+18*4: 32 bit GPR saves. -|.define SAVE_CR, 52(sp) // 32 bit CR save. -|.define SAVE_ERRF, 48(sp) // 32 bit C frame info. -|.define SAVE_NRES, 44(sp) -|.define SAVE_CFRAME, 40(sp) -|.define SAVE_L, 36(sp) -|.define SAVE_PC, 32(sp) -|.define SAVE_MULTRES, 28(sp) -|.define UNUSED1, 24(sp) -|.define TMPD_LO, 20(sp) -|.define TMPD_HI, 16(sp) -|.define TONUM_LO, 12(sp) -|.define TONUM_HI, 8(sp) -|// Next frame lr: 4(sp) -|// Back chain for sp: 0(sp) <-- sp while in interpreter -| -|.define TMPD_BLO, 23(sp) -|.define TMPD, TMPD_HI -|.define TONUM_D, TONUM_HI -| -|.endif -| -|.macro save_, reg -|.if GPR64 -| std r..reg, SAVE_GPR_+(reg-14)*8(sp) -|.else -| stw r..reg, SAVE_GPR_+(reg-14)*4(sp) -|.endif -| stfd f..reg, SAVE_FPR_+(reg-14)*8(sp) -|.endmacro -|.macro rest_, reg -|.if GPR64 -| ld r..reg, SAVE_GPR_+(reg-14)*8(sp) -|.else -| lwz r..reg, SAVE_GPR_+(reg-14)*4(sp) -|.endif -| lfd f..reg, SAVE_FPR_+(reg-14)*8(sp) -|.endmacro -| -|.macro saveregs -|.if GPR64 and not FRAME32 -| stdu sp, -CFRAME_SPACE(sp) -|.else -| stwu sp, -CFRAME_SPACE(sp) -|.endif -| save_ 14; save_ 15; save_ 16 -| mflr r0 -| save_ 17; save_ 18; save_ 19; save_ 20; save_ 21; save_ 22 -|.if GPR64 and not FRAME32 -| std r0, SAVE_LR -|.else -| stw r0, SAVE_LR -|.endif -| save_ 23; save_ 24; save_ 25 -| mfcr r0 -| save_ 26; save_ 27; save_ 28; save_ 29; save_ 30; save_ 31 -|.if GPR64 -| std r0, SAVE_CR -|.else -| stw r0, SAVE_CR -|.endif -| .toc std TOCREG, SAVE_TOC -|.endmacro -| -|.macro restoreregs -|.if GPR64 and not FRAME32 -| ld r0, SAVE_LR -|.else -| lwz r0, SAVE_LR -|.endif -|.if GPR64 -| ld r12, SAVE_CR -|.else -| lwz r12, SAVE_CR -|.endif -| rest_ 14; rest_ 15; rest_ 16; rest_ 17; rest_ 18; rest_ 19 -| mtlr r0; -|.if PPE; mtocrf 0x20, r12; .else; mtcrf 0x38, r12; .endif -| rest_ 20; rest_ 21; rest_ 22; rest_ 23; rest_ 24; rest_ 25 -|.if PPE; mtocrf 0x10, r12; .endif -| rest_ 26; rest_ 27; rest_ 28; rest_ 29; rest_ 30; rest_ 31 -|.if PPE; mtocrf 0x08, r12; .endif -| addi sp, sp, CFRAME_SPACE -|.endmacro -| -|// Type definitions. Some of these are only used for documentation. -|.type L, lua_State, LREG -|.type GL, global_State -|.type TVALUE, TValue -|.type GCOBJ, GCobj -|.type STR, GCstr -|.type TAB, GCtab -|.type LFUNC, GCfuncL -|.type CFUNC, GCfuncC -|.type PROTO, GCproto -|.type UPVAL, GCupval -|.type NODE, Node -|.type NARGS8, int -|.type TRACE, GCtrace -| -|//----------------------------------------------------------------------- -| -|// These basic macros should really be part of DynASM. -|.macro srwi, rx, ry, n; rlwinm rx, ry, 32-n, n, 31; .endmacro -|.macro slwi, rx, ry, n; rlwinm rx, ry, n, 0, 31-n; .endmacro -|.macro rotlwi, rx, ry, n; rlwinm rx, ry, n, 0, 31; .endmacro -|.macro rotlw, rx, ry, rn; rlwnm rx, ry, rn, 0, 31; .endmacro -|.macro subi, rx, ry, i; addi rx, ry, -i; .endmacro -| -|// Trap for not-yet-implemented parts. -|.macro NYI; tw 4, sp, sp; .endmacro -| -|// int/FP conversions. -|.macro tonum_i, freg, reg -| xoris reg, reg, 0x8000 -| stw reg, TONUM_LO -| lfd freg, TONUM_D -| fsub freg, freg, TONUM -|.endmacro -| -|.macro tonum_u, freg, reg -| stw reg, TONUM_LO -| lfd freg, TONUM_D -| fsub freg, freg, TOBIT -|.endmacro -| -|.macro toint, reg, freg, tmpfreg -| fctiwz tmpfreg, freg -| stfd tmpfreg, TMPD -| lwz reg, TMPD_LO -|.endmacro -| -|.macro toint, reg, freg -| toint reg, freg, freg -|.endmacro -| -|//----------------------------------------------------------------------- -| -|// Access to frame relative to BASE. -|.define FRAME_PC, -8 -|.define FRAME_FUNC, -4 -| -|// Instruction decode. -|.macro decode_OP4, dst, ins; rlwinm dst, ins, 2, 22, 29; .endmacro -|.macro decode_OP8, dst, ins; rlwinm dst, ins, 3, 21, 28; .endmacro -|.macro decode_RA8, dst, ins; rlwinm dst, ins, 27, 21, 28; .endmacro -|.macro decode_RB8, dst, ins; rlwinm dst, ins, 11, 21, 28; .endmacro -|.macro decode_RC8, dst, ins; rlwinm dst, ins, 19, 21, 28; .endmacro -|.macro decode_RD8, dst, ins; rlwinm dst, ins, 19, 13, 28; .endmacro -| -|.macro decode_OP1, dst, ins; rlwinm dst, ins, 0, 24, 31; .endmacro -|.macro decode_RD4, dst, ins; rlwinm dst, ins, 18, 14, 29; .endmacro -| -|// Instruction fetch. -|.macro ins_NEXT1 -| lwz INS, 0(PC) -| addi PC, PC, 4 -|.endmacro -|// Instruction decode+dispatch. Note: optimized for e300! -|.macro ins_NEXT2 -| decode_OPP TMP1, INS -| lpx TMP0, DISPATCH, TMP1 -| mtctr TMP0 -| decode_RB8 RB, INS -| decode_RD8 RD, INS -| decode_RA8 RA, INS -| decode_RC8 RC, INS -| bctr -|.endmacro -|.macro ins_NEXT -| ins_NEXT1 -| ins_NEXT2 -|.endmacro -| -|// Instruction footer. -|.if 1 -| // Replicated dispatch. Less unpredictable branches, but higher I-Cache use. -| .define ins_next, ins_NEXT -| .define ins_next_, ins_NEXT -| .define ins_next1, ins_NEXT1 -| .define ins_next2, ins_NEXT2 -|.else -| // Common dispatch. Lower I-Cache use, only one (very) unpredictable branch. -| // Affects only certain kinds of benchmarks (and only with -j off). -| .macro ins_next -| b ->ins_next -| .endmacro -| .macro ins_next1 -| .endmacro -| .macro ins_next2 -| b ->ins_next -| .endmacro -| .macro ins_next_ -| ->ins_next: -| ins_NEXT -| .endmacro -|.endif -| -|// Call decode and dispatch. -|.macro ins_callt -| // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC -| lwz PC, LFUNC:RB->pc -| lwz INS, 0(PC) -| addi PC, PC, 4 -| decode_OPP TMP1, INS -| decode_RA8 RA, INS -| lpx TMP0, DISPATCH, TMP1 -| add RA, RA, BASE -| mtctr TMP0 -| bctr -|.endmacro -| -|.macro ins_call -| // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, PC = caller PC -| stw PC, FRAME_PC(BASE) -| ins_callt -|.endmacro -| -|//----------------------------------------------------------------------- -| -|// Macros to test operand types. -|.macro checknum, reg; cmplw reg, TISNUM; .endmacro -|.macro checknum, cr, reg; cmplw cr, reg, TISNUM; .endmacro -|.macro checkstr, reg; cmpwi reg, LJ_TSTR; .endmacro -|.macro checktab, reg; cmpwi reg, LJ_TTAB; .endmacro -|.macro checkfunc, reg; cmpwi reg, LJ_TFUNC; .endmacro -|.macro checknil, reg; cmpwi reg, LJ_TNIL; .endmacro -| -|.macro branch_RD -| srwi TMP0, RD, 1 -| addis PC, PC, -(BCBIAS_J*4 >> 16) -| add PC, PC, TMP0 -|.endmacro -| -|// Assumes DISPATCH is relative to GL. -#define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) -#define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) -| -#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) -| -|.macro hotcheck, delta, target -| rlwinm TMP1, PC, 31, 25, 30 -| addi TMP1, TMP1, GG_DISP2HOT -| lhzx TMP2, DISPATCH, TMP1 -| addic. TMP2, TMP2, -delta -| sthx TMP2, DISPATCH, TMP1 -| blt target -|.endmacro -| -|.macro hotloop -| hotcheck HOTCOUNT_LOOP, ->vm_hotloop -|.endmacro -| -|.macro hotcall -| hotcheck HOTCOUNT_CALL, ->vm_hotcall -|.endmacro -| -|// Set current VM state. Uses TMP0. -|.macro li_vmstate, st; li TMP0, ~LJ_VMST_..st; .endmacro -|.macro st_vmstate; stw TMP0, DISPATCH_GL(vmstate)(DISPATCH); .endmacro -| -|// Move table write barrier back. Overwrites mark and tmp. -|.macro barrierback, tab, mark, tmp -| lwz tmp, DISPATCH_GL(gc.grayagain)(DISPATCH) -| // Assumes LJ_GC_BLACK is 0x04. -| rlwinm mark, mark, 0, 30, 28 // black2gray(tab) -| stw tab, DISPATCH_GL(gc.grayagain)(DISPATCH) -| stb mark, tab->marked -| stw tmp, tab->gclist -|.endmacro -| -|//----------------------------------------------------------------------- - -/* Generate subroutines used by opcodes and other parts of the VM. */ -/* The .code_sub section should be last to help static branch prediction. */ -static void build_subroutines(BuildCtx *ctx) -{ - |.code_sub - | - |//----------------------------------------------------------------------- - |//-- Return handling ---------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_returnp: - | // See vm_return. Also: TMP2 = previous base. - | andix. TMP0, PC, FRAME_P - | li TMP1, LJ_TTRUE - | beq ->cont_dispatch - | - | // Return from pcall or xpcall fast func. - | lwz PC, FRAME_PC(TMP2) // Fetch PC of previous frame. - | mr BASE, TMP2 // Restore caller base. - | // Prepending may overwrite the pcall frame, so do it at the end. - | stwu TMP1, FRAME_PC(RA) // Prepend true to results. - | - |->vm_returnc: - | addi RD, RD, 8 // RD = (nresults+1)*8. - | andix. TMP0, PC, FRAME_TYPE - | cmpwi cr1, RD, 0 - | li CRET1, LUA_YIELD - | beq cr1, ->vm_unwind_c_eh - | mr MULTRES, RD - | beq ->BC_RET_Z // Handle regular return to Lua. - | - |->vm_return: - | // BASE = base, RA = resultptr, RD/MULTRES = (nresults+1)*8, PC = return - | // TMP0 = PC & FRAME_TYPE - | cmpwi TMP0, FRAME_C - | rlwinm TMP2, PC, 0, 0, 28 - | li_vmstate C - | sub TMP2, BASE, TMP2 // TMP2 = previous base. - | bney ->vm_returnp - | - | addic. TMP1, RD, -8 - | stp TMP2, L->base - | lwz TMP2, SAVE_NRES - | subi BASE, BASE, 8 - | st_vmstate - | slwi TMP2, TMP2, 3 - | beq >2 - |1: - | addic. TMP1, TMP1, -8 - | lfd f0, 0(RA) - | addi RA, RA, 8 - | stfd f0, 0(BASE) - | addi BASE, BASE, 8 - | bney <1 - | - |2: - | cmpw TMP2, RD // More/less results wanted? - | bne >6 - |3: - | stp BASE, L->top // Store new top. - | - |->vm_leave_cp: - | lp TMP0, SAVE_CFRAME // Restore previous C frame. - | li CRET1, 0 // Ok return status for vm_pcall. - | stp TMP0, L->cframe - | - |->vm_leave_unw: - | restoreregs - | blr - | - |6: - | ble >7 // Less results wanted? - | // More results wanted. Check stack size and fill up results with nil. - | lwz TMP1, L->maxstack - | cmplw BASE, TMP1 - | bge >8 - | stw TISNIL, 0(BASE) - | addi RD, RD, 8 - | addi BASE, BASE, 8 - | b <2 - | - |7: // Less results wanted. - | subfic TMP3, TMP2, 0 // LUA_MULTRET+1 case? - | sub TMP0, RD, TMP2 - | subfe TMP1, TMP1, TMP1 // TMP1 = TMP2 == 0 ? 0 : -1 - | and TMP0, TMP0, TMP1 - | sub BASE, BASE, TMP0 // Either keep top or shrink it. - | b <3 - | - |8: // Corner case: need to grow stack for filling up results. - | // This can happen if: - | // - A C function grows the stack (a lot). - | // - The GC shrinks the stack in between. - | // - A return back from a lua_call() with (high) nresults adjustment. - | stp BASE, L->top // Save current top held in BASE (yes). - | mr SAVE0, RD - | srwi CARG2, TMP2, 3 - | mr CARG1, L - | bl extern lj_state_growstack // (lua_State *L, int n) - | lwz TMP2, SAVE_NRES - | mr RD, SAVE0 - | slwi TMP2, TMP2, 3 - | lp BASE, L->top // Need the (realloced) L->top in BASE. - | b <2 - | - |->vm_unwind_c: // Unwind C stack, return from vm_pcall. - | // (void *cframe, int errcode) - | mr sp, CARG1 - | mr CRET1, CARG2 - |->vm_unwind_c_eh: // Landing pad for external unwinder. - | lwz L, SAVE_L - | .toc ld TOCREG, SAVE_TOC - | li TMP0, ~LJ_VMST_C - | lwz GL:TMP1, L->glref - | stw TMP0, GL:TMP1->vmstate - | b ->vm_leave_unw - | - |->vm_unwind_ff: // Unwind C stack, return from ff pcall. - | // (void *cframe) - |.if GPR64 - | rldicr sp, CARG1, 0, 61 - |.else - | rlwinm sp, CARG1, 0, 0, 29 - |.endif - |->vm_unwind_ff_eh: // Landing pad for external unwinder. - | lwz L, SAVE_L - | .toc ld TOCREG, SAVE_TOC - | li TISNUM, LJ_TISNUM // Setup type comparison constants. - | lp BASE, L->base - | lus TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | li ZERO, 0 - | stw TMP3, TMPD - | li TMP1, LJ_TFALSE - | ori TMP3, TMP3, 0x0004 // TONUM = 2^52 + 2^51 + 2^31 (float). - | li TISNIL, LJ_TNIL - | li_vmstate INTERP - | lfs TOBIT, TMPD - | lwz PC, FRAME_PC(BASE) // Fetch PC of previous frame. - | la RA, -8(BASE) // Results start at BASE-8. - | stw TMP3, TMPD - | addi DISPATCH, DISPATCH, GG_G2DISP - | stw TMP1, 0(RA) // Prepend false to error message. - | li RD, 16 // 2 results: false + error message. - | st_vmstate - | lfs TONUM, TMPD - | b ->vm_returnc - | - |//----------------------------------------------------------------------- - |//-- Grow stack for calls ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_growstack_c: // Grow stack for C function. - | li CARG2, LUA_MINSTACK - | b >2 - | - |->vm_growstack_l: // Grow stack for Lua function. - | // BASE = new base, RA = BASE+framesize*8, RC = nargs*8, PC = first PC - | add RC, BASE, RC - | sub RA, RA, BASE - | stp BASE, L->base - | addi PC, PC, 4 // Must point after first instruction. - | stp RC, L->top - | srwi CARG2, RA, 3 - |2: - | // L->base = new base, L->top = top - | stw PC, SAVE_PC - | mr CARG1, L - | bl extern lj_state_growstack // (lua_State *L, int n) - | lp BASE, L->base - | lp RC, L->top - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | sub RC, RC, BASE - | // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC - | ins_callt // Just retry the call. - | - |//----------------------------------------------------------------------- - |//-- Entry points into the assembler VM --------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_resume: // Setup C frame and resume thread. - | // (lua_State *L, TValue *base, int nres1 = 0, ptrdiff_t ef = 0) - | saveregs - | mr L, CARG1 - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | mr BASE, CARG2 - | lbz TMP1, L->status - | stw L, SAVE_L - | li PC, FRAME_CP - | addi TMP0, sp, CFRAME_RESUME - | addi DISPATCH, DISPATCH, GG_G2DISP - | stw CARG3, SAVE_NRES - | cmplwi TMP1, 0 - | stw CARG3, SAVE_ERRF - | stp TMP0, L->cframe - | stp CARG3, SAVE_CFRAME - | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | beq >3 - | - | // Resume after yield (like a return). - | mr RA, BASE - | lp BASE, L->base - | li TISNUM, LJ_TISNUM // Setup type comparison constants. - | lp TMP1, L->top - | lwz PC, FRAME_PC(BASE) - | lus TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | stb CARG3, L->status - | stw TMP3, TMPD - | ori TMP3, TMP3, 0x0004 // TONUM = 2^52 + 2^51 + 2^31 (float). - | lfs TOBIT, TMPD - | sub RD, TMP1, BASE - | stw TMP3, TMPD - | lus TMP0, 0x4338 // Hiword of 2^52 + 2^51 (double) - | addi RD, RD, 8 - | stw TMP0, TONUM_HI - | li_vmstate INTERP - | li ZERO, 0 - | st_vmstate - | andix. TMP0, PC, FRAME_TYPE - | mr MULTRES, RD - | lfs TONUM, TMPD - | li TISNIL, LJ_TNIL - | beq ->BC_RET_Z - | b ->vm_return - | - |->vm_pcall: // Setup protected C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) - | saveregs - | li PC, FRAME_CP - | stw CARG4, SAVE_ERRF - | b >1 - | - |->vm_call: // Setup C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1) - | saveregs - | li PC, FRAME_C - | - |1: // Entry point for vm_pcall above (PC = ftype). - | lp TMP1, L:CARG1->cframe - | stw CARG3, SAVE_NRES - | mr L, CARG1 - | stw CARG1, SAVE_L - | mr BASE, CARG2 - | stp sp, L->cframe // Add our C frame to cframe chain. - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | stp TMP1, SAVE_CFRAME - | addi DISPATCH, DISPATCH, GG_G2DISP - | - |3: // Entry point for vm_cpcall/vm_resume (BASE = base, PC = ftype). - | lp TMP2, L->base // TMP2 = old base (used in vmeta_call). - | li TISNUM, LJ_TISNUM // Setup type comparison constants. - | lp TMP1, L->top - | lus TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | add PC, PC, BASE - | stw TMP3, TMPD - | li ZERO, 0 - | ori TMP3, TMP3, 0x0004 // TONUM = 2^52 + 2^51 + 2^31 (float). - | lfs TOBIT, TMPD - | sub PC, PC, TMP2 // PC = frame delta + frame type - | stw TMP3, TMPD - | lus TMP0, 0x4338 // Hiword of 2^52 + 2^51 (double) - | sub NARGS8:RC, TMP1, BASE - | stw TMP0, TONUM_HI - | li_vmstate INTERP - | lfs TONUM, TMPD - | li TISNIL, LJ_TNIL - | st_vmstate - | - |->vm_call_dispatch: - | // TMP2 = old base, BASE = new base, RC = nargs*8, PC = caller PC - | lwz TMP0, FRAME_PC(BASE) - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | checkfunc TMP0; bne ->vmeta_call - | - |->vm_call_dispatch_f: - | ins_call - | // BASE = new base, RB = func, RC = nargs*8, PC = caller PC - | - |->vm_cpcall: // Setup protected C frame, call C. - | // (lua_State *L, lua_CFunction func, void *ud, lua_CPFunction cp) - | saveregs - | mr L, CARG1 - | lwz TMP0, L:CARG1->stack - | stw CARG1, SAVE_L - | lp TMP1, L->top - | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | sub TMP0, TMP0, TMP1 // Compute -savestack(L, L->top). - | lp TMP1, L->cframe - | stp sp, L->cframe // Add our C frame to cframe chain. - | .toc lp CARG4, 0(CARG4) - | li TMP2, 0 - | stw TMP0, SAVE_NRES // Neg. delta means cframe w/o frame. - | stw TMP2, SAVE_ERRF // No error function. - | stp TMP1, SAVE_CFRAME - | mtctr CARG4 - | bctrl // (lua_State *L, lua_CFunction func, void *ud) - |.if PPE - | mr BASE, CRET1 - | cmpwi CRET1, 0 - |.else - | mr. BASE, CRET1 - |.endif - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | li PC, FRAME_CP - | addi DISPATCH, DISPATCH, GG_G2DISP - | bne <3 // Else continue with the call. - | b ->vm_leave_cp // No base? Just remove C frame. - | - |//----------------------------------------------------------------------- - |//-- Metamethod handling ------------------------------------------------ - |//----------------------------------------------------------------------- - | - |// The lj_meta_* functions (except for lj_meta_cat) don't reallocate the - |// stack, so BASE doesn't need to be reloaded across these calls. - | - |//-- Continuation dispatch ---------------------------------------------- - | - |->cont_dispatch: - | // BASE = meta base, RA = resultptr, RD = (nresults+1)*8 - | lwz TMP0, -12(BASE) // Continuation. - | mr RB, BASE - | mr BASE, TMP2 // Restore caller BASE. - | lwz LFUNC:TMP1, FRAME_FUNC(TMP2) - |.if FFI - | cmplwi TMP0, 1 - |.endif - | lwz PC, -16(RB) // Restore PC from [cont|PC]. - | subi TMP2, RD, 8 - | lwz TMP1, LFUNC:TMP1->pc - | stwx TISNIL, RA, TMP2 // Ensure one valid arg. - |.if FFI - | ble >1 - |.endif - | lwz KBASE, PC2PROTO(k)(TMP1) - | // BASE = base, RA = resultptr, RB = meta base - | mtctr TMP0 - | bctr // Jump to continuation. - | - |.if FFI - |1: - | beq ->cont_ffi_callback // cont = 1: return from FFI callback. - | // cont = 0: tailcall from C function. - | subi TMP1, RB, 16 - | sub RC, TMP1, BASE - | b ->vm_call_tail - |.endif - | - |->cont_cat: // RA = resultptr, RB = meta base - | lwz INS, -4(PC) - | subi CARG2, RB, 16 - | decode_RB8 SAVE0, INS - | lfd f0, 0(RA) - | add TMP1, BASE, SAVE0 - | stp BASE, L->base - | cmplw TMP1, CARG2 - | sub CARG3, CARG2, TMP1 - | decode_RA8 RA, INS - | stfd f0, 0(CARG2) - | bney ->BC_CAT_Z - | stfdx f0, BASE, RA - | b ->cont_nop - | - |//-- Table indexing metamethods ----------------------------------------- - | - |->vmeta_tgets1: - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | li TMP0, LJ_TSTR - | decode_RB8 RB, INS - | stw STR:RC, 4(CARG3) - | add CARG2, BASE, RB - | stw TMP0, 0(CARG3) - | b >1 - | - |->vmeta_tgets: - | la CARG2, DISPATCH_GL(tmptv)(DISPATCH) - | li TMP0, LJ_TTAB - | stw TAB:RB, 4(CARG2) - | la CARG3, DISPATCH_GL(tmptv2)(DISPATCH) - | stw TMP0, 0(CARG2) - | li TMP1, LJ_TSTR - | stw STR:RC, 4(CARG3) - | stw TMP1, 0(CARG3) - | b >1 - | - |->vmeta_tgetb: // TMP0 = index - |.if not DUALNUM - | tonum_u f0, TMP0 - |.endif - | decode_RB8 RB, INS - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | add CARG2, BASE, RB - |.if DUALNUM - | stw TISNUM, 0(CARG3) - | stw TMP0, 4(CARG3) - |.else - | stfd f0, 0(CARG3) - |.endif - | b >1 - | - |->vmeta_tgetv: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG2, BASE, RB - | add CARG3, BASE, RC - |1: - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_tget // (lua_State *L, TValue *o, TValue *k) - | // Returns TValue * (finished) or NULL (metamethod). - | cmplwi CRET1, 0 - | beq >3 - | lfd f0, 0(CRET1) - | ins_next1 - | stfdx f0, BASE, RA - | ins_next2 - | - |3: // Call __index metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k - | subfic TMP1, BASE, FRAME_CONT - | lp BASE, L->top - | stw PC, -16(BASE) // [cont|PC] - | add PC, TMP1, BASE - | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | li NARGS8:RC, 16 // 2 args for func(t, k). - | b ->vm_call_dispatch_f - | - |//----------------------------------------------------------------------- - | - |->vmeta_tsets1: - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | li TMP0, LJ_TSTR - | decode_RB8 RB, INS - | stw STR:RC, 4(CARG3) - | add CARG2, BASE, RB - | stw TMP0, 0(CARG3) - | b >1 - | - |->vmeta_tsets: - | la CARG2, DISPATCH_GL(tmptv)(DISPATCH) - | li TMP0, LJ_TTAB - | stw TAB:RB, 4(CARG2) - | la CARG3, DISPATCH_GL(tmptv2)(DISPATCH) - | stw TMP0, 0(CARG2) - | li TMP1, LJ_TSTR - | stw STR:RC, 4(CARG3) - | stw TMP1, 0(CARG3) - | b >1 - | - |->vmeta_tsetb: // TMP0 = index - |.if not DUALNUM - | tonum_u f0, TMP0 - |.endif - | decode_RB8 RB, INS - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | add CARG2, BASE, RB - |.if DUALNUM - | stw TISNUM, 0(CARG3) - | stw TMP0, 4(CARG3) - |.else - | stfd f0, 0(CARG3) - |.endif - | b >1 - | - |->vmeta_tsetv: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG2, BASE, RB - | add CARG3, BASE, RC - |1: - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_tset // (lua_State *L, TValue *o, TValue *k) - | // Returns TValue * (finished) or NULL (metamethod). - | cmplwi CRET1, 0 - | lfdx f0, BASE, RA - | beq >3 - | // NOBARRIER: lj_meta_tset ensures the table is not black. - | ins_next1 - | stfd f0, 0(CRET1) - | ins_next2 - | - |3: // Call __newindex metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k/(v) - | subfic TMP1, BASE, FRAME_CONT - | lp BASE, L->top - | stw PC, -16(BASE) // [cont|PC] - | add PC, TMP1, BASE - | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | li NARGS8:RC, 24 // 3 args for func(t, k, v) - | stfd f0, 16(BASE) // Copy value to third argument. - | b ->vm_call_dispatch_f - | - |//-- Comparison metamethods --------------------------------------------- - | - |->vmeta_comp: - | mr CARG1, L - | subi PC, PC, 4 - |.if DUALNUM - | mr CARG2, RA - |.else - | add CARG2, BASE, RA - |.endif - | stw PC, SAVE_PC - |.if DUALNUM - | mr CARG3, RD - |.else - | add CARG3, BASE, RD - |.endif - | stp BASE, L->base - | decode_OP1 CARG4, INS - | bl extern lj_meta_comp // (lua_State *L, TValue *o1, *o2, int op) - | // Returns 0/1 or TValue * (metamethod). - |3: - | cmplwi CRET1, 1 - | bgt ->vmeta_binop - | subfic CRET1, CRET1, 0 - |4: - | lwz INS, 0(PC) - | addi PC, PC, 4 - | decode_RD4 TMP2, INS - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | and TMP2, TMP2, CRET1 - | add PC, PC, TMP2 - |->cont_nop: - | ins_next - | - |->cont_ra: // RA = resultptr - | lwz INS, -4(PC) - | lfd f0, 0(RA) - | decode_RA8 TMP1, INS - | stfdx f0, BASE, TMP1 - | b ->cont_nop - | - |->cont_condt: // RA = resultptr - | lwz TMP0, 0(RA) - | .gpr64 extsw TMP0, TMP0 - | subfic TMP0, TMP0, LJ_TTRUE // Branch if result is true. - | subfe CRET1, CRET1, CRET1 - | not CRET1, CRET1 - | b <4 - | - |->cont_condf: // RA = resultptr - | lwz TMP0, 0(RA) - | .gpr64 extsw TMP0, TMP0 - | subfic TMP0, TMP0, LJ_TTRUE // Branch if result is false. - | subfe CRET1, CRET1, CRET1 - | b <4 - | - |->vmeta_equal: - | // CARG2, CARG3, CARG4 are already set by BC_ISEQV/BC_ISNEV. - | subi PC, PC, 4 - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_equal // (lua_State *L, GCobj *o1, *o2, int ne) - | // Returns 0/1 or TValue * (metamethod). - | b <3 - | - |->vmeta_equal_cd: - |.if FFI - | mr CARG2, INS - | subi PC, PC, 4 - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_equal_cd // (lua_State *L, BCIns op) - | // Returns 0/1 or TValue * (metamethod). - | b <3 - |.endif - | - |//-- Arithmetic metamethods --------------------------------------------- - | - |->vmeta_arith_nv: - | add CARG3, KBASE, RC - | add CARG4, BASE, RB - | b >1 - |->vmeta_arith_nv2: - |.if DUALNUM - | mr CARG3, RC - | mr CARG4, RB - | b >1 - |.endif - | - |->vmeta_unm: - | mr CARG3, RD - | mr CARG4, RD - | b >1 - | - |->vmeta_arith_vn: - | add CARG3, BASE, RB - | add CARG4, KBASE, RC - | b >1 - | - |->vmeta_arith_vv: - | add CARG3, BASE, RB - | add CARG4, BASE, RC - |.if DUALNUM - | b >1 - |.endif - |->vmeta_arith_vn2: - |->vmeta_arith_vv2: - |.if DUALNUM - | mr CARG3, RB - | mr CARG4, RC - |.endif - |1: - | add CARG2, BASE, RA - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | decode_OP1 CARG5, INS // Caveat: CARG5 overlaps INS. - | bl extern lj_meta_arith // (lua_State *L, TValue *ra,*rb,*rc, BCReg op) - | // Returns NULL (finished) or TValue * (metamethod). - | cmplwi CRET1, 0 - | beq ->cont_nop - | - | // Call metamethod for binary op. - |->vmeta_binop: - | // BASE = old base, CRET1 = new base, stack = cont/func/o1/o2 - | sub TMP1, CRET1, BASE - | stw PC, -16(CRET1) // [cont|PC] - | mr TMP2, BASE - | addi PC, TMP1, FRAME_CONT - | mr BASE, CRET1 - | li NARGS8:RC, 16 // 2 args for func(o1, o2). - | b ->vm_call_dispatch - | - |->vmeta_len: -#if LJ_52 - | mr SAVE0, CARG1 -#endif - | mr CARG2, RD - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_len // (lua_State *L, TValue *o) - | // Returns NULL (retry) or TValue * (metamethod base). -#if LJ_52 - | cmplwi CRET1, 0 - | bne ->vmeta_binop // Binop call for compatibility. - | mr CARG1, SAVE0 - | b ->BC_LEN_Z -#else - | b ->vmeta_binop // Binop call for compatibility. -#endif - | - |//-- Call metamethod ---------------------------------------------------- - | - |->vmeta_call: // Resolve and call __call metamethod. - | // TMP2 = old base, BASE = new base, RC = nargs*8 - | mr CARG1, L - | stp TMP2, L->base // This is the callers base! - | subi CARG2, BASE, 8 - | stw PC, SAVE_PC - | add CARG3, BASE, RC - | mr SAVE0, NARGS8:RC - | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | addi NARGS8:RC, SAVE0, 8 // Got one more argument now. - | ins_call - | - |->vmeta_callt: // Resolve __call for BC_CALLT. - | // BASE = old base, RA = new base, RC = nargs*8 - | mr CARG1, L - | stp BASE, L->base - | subi CARG2, RA, 8 - | stw PC, SAVE_PC - | add CARG3, RA, RC - | mr SAVE0, NARGS8:RC - | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | lwz TMP1, FRAME_PC(BASE) - | addi NARGS8:RC, SAVE0, 8 // Got one more argument now. - | lwz LFUNC:RB, FRAME_FUNC(RA) // Guaranteed to be a function here. - | b ->BC_CALLT_Z - | - |//-- Argument coercion for 'for' statement ------------------------------ - | - |->vmeta_for: - | mr CARG1, L - | stp BASE, L->base - | mr CARG2, RA - | stw PC, SAVE_PC - | mr SAVE0, INS - | bl extern lj_meta_for // (lua_State *L, TValue *base) - |.if JIT - | decode_OP1 TMP0, SAVE0 - |.endif - | decode_RA8 RA, SAVE0 - |.if JIT - | cmpwi TMP0, BC_JFORI - |.endif - | decode_RD8 RD, SAVE0 - |.if JIT - | beqy =>BC_JFORI - |.endif - | b =>BC_FORI - | - |//----------------------------------------------------------------------- - |//-- Fast functions ----------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro .ffunc, name - |->ff_ .. name: - |.endmacro - | - |.macro .ffunc_1, name - |->ff_ .. name: - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - | lwz CARG1, 4(BASE) - | blt ->fff_fallback - |.endmacro - | - |.macro .ffunc_2, name - |->ff_ .. name: - | cmplwi NARGS8:RC, 16 - | lwz CARG3, 0(BASE) - | lwz CARG4, 8(BASE) - | lwz CARG1, 4(BASE) - | lwz CARG2, 12(BASE) - | blt ->fff_fallback - |.endmacro - | - |.macro .ffunc_n, name - |->ff_ .. name: - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - | lfd FARG1, 0(BASE) - | blt ->fff_fallback - | checknum CARG3; bge ->fff_fallback - |.endmacro - | - |.macro .ffunc_nn, name - |->ff_ .. name: - | cmplwi NARGS8:RC, 16 - | lwz CARG3, 0(BASE) - | lfd FARG1, 0(BASE) - | lwz CARG4, 8(BASE) - | lfd FARG2, 8(BASE) - | blt ->fff_fallback - | checknum CARG3; bge ->fff_fallback - | checknum CARG4; bge ->fff_fallback - |.endmacro - | - |// Inlined GC threshold check. Caveat: uses TMP0 and TMP1. - |.macro ffgccheck - | lwz TMP0, DISPATCH_GL(gc.total)(DISPATCH) - | lwz TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) - | cmplw TMP0, TMP1 - | bgel ->fff_gcstep - |.endmacro - | - |//-- Base library: checks ----------------------------------------------- - | - |.ffunc_1 assert - | li TMP1, LJ_TFALSE - | la RA, -8(BASE) - | cmplw cr1, CARG3, TMP1 - | lwz PC, FRAME_PC(BASE) - | bge cr1, ->fff_fallback - | stw CARG3, 0(RA) - | addi RD, NARGS8:RC, 8 // Compute (nresults+1)*8. - | stw CARG1, 4(RA) - | beq ->fff_res // Done if exactly 1 argument. - | li TMP1, 8 - | subi RC, RC, 8 - |1: - | cmplw TMP1, RC - | lfdx f0, BASE, TMP1 - | stfdx f0, RA, TMP1 - | addi TMP1, TMP1, 8 - | bney <1 - | b ->fff_res - | - |.ffunc type - | cmplwi NARGS8:RC, 8 - | lwz CARG1, 0(BASE) - | blt ->fff_fallback - | .gpr64 extsw CARG1, CARG1 - | subfc TMP0, TISNUM, CARG1 - | subfe TMP2, CARG1, CARG1 - | orc TMP1, TMP2, TMP0 - | addi TMP1, TMP1, ~LJ_TISNUM+1 - | slwi TMP1, TMP1, 3 - | la TMP2, CFUNC:RB->upvalue - | lfdx FARG1, TMP2, TMP1 - | b ->fff_resn - | - |//-- Base library: getters and setters --------------------------------- - | - |.ffunc_1 getmetatable - | checktab CARG3; bne >6 - |1: // Field metatable must be at same offset for GCtab and GCudata! - | lwz TAB:CARG1, TAB:CARG1->metatable - |2: - | li CARG3, LJ_TNIL - | cmplwi TAB:CARG1, 0 - | lwz STR:RC, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable])(DISPATCH) - | beq ->fff_restv - | lwz TMP0, TAB:CARG1->hmask - | li CARG3, LJ_TTAB // Use metatable as default result. - | lwz TMP1, STR:RC->hash - | lwz NODE:TMP2, TAB:CARG1->node - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | slwi TMP0, TMP1, 5 - | slwi TMP1, TMP1, 3 - | sub TMP1, TMP0, TMP1 - | add NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |3: // Rearranged logic, because we expect _not_ to find the key. - | lwz CARG4, NODE:TMP2->key - | lwz TMP0, 4+offsetof(Node, key)(NODE:TMP2) - | lwz CARG2, NODE:TMP2->val - | lwz TMP1, 4+offsetof(Node, val)(NODE:TMP2) - | checkstr CARG4; bne >4 - | cmpw TMP0, STR:RC; beq >5 - |4: - | lwz NODE:TMP2, NODE:TMP2->next - | cmplwi NODE:TMP2, 0 - | beq ->fff_restv // Not found, keep default result. - | b <3 - |5: - | checknil CARG2 - | beq ->fff_restv // Ditto for nil value. - | mr CARG3, CARG2 // Return value of mt.__metatable. - | mr CARG1, TMP1 - | b ->fff_restv - | - |6: - | cmpwi CARG3, LJ_TUDATA; beq <1 - | .gpr64 extsw CARG3, CARG3 - | subfc TMP0, TISNUM, CARG3 - | subfe TMP2, CARG3, CARG3 - | orc TMP1, TMP2, TMP0 - | addi TMP1, TMP1, ~LJ_TISNUM+1 - | slwi TMP1, TMP1, 2 - | la TMP2, DISPATCH_GL(gcroot[GCROOT_BASEMT])(DISPATCH) - | lwzx TAB:CARG1, TMP2, TMP1 - | b <2 - | - |.ffunc_2 setmetatable - | // Fast path: no mt for table yet and not clearing the mt. - | checktab CARG3; bne ->fff_fallback - | lwz TAB:TMP1, TAB:CARG1->metatable - | checktab CARG4; bne ->fff_fallback - | cmplwi TAB:TMP1, 0 - | lbz TMP3, TAB:CARG1->marked - | bne ->fff_fallback - | andix. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - | stw TAB:CARG2, TAB:CARG1->metatable - | beq ->fff_restv - | barrierback TAB:CARG1, TMP3, TMP0 - | b ->fff_restv - | - |.ffunc rawget - | cmplwi NARGS8:RC, 16 - | lwz CARG4, 0(BASE) - | lwz TAB:CARG2, 4(BASE) - | blt ->fff_fallback - | checktab CARG4; bne ->fff_fallback - | la CARG3, 8(BASE) - | mr CARG1, L - | bl extern lj_tab_get // (lua_State *L, GCtab *t, cTValue *key) - | // Returns cTValue *. - | lfd FARG1, 0(CRET1) - | b ->fff_resn - | - |//-- Base library: conversions ------------------------------------------ - | - |.ffunc tonumber - | // Only handles the number case inline (without a base argument). - | cmplwi NARGS8:RC, 8 - | lwz CARG1, 0(BASE) - | lfd FARG1, 0(BASE) - | bne ->fff_fallback // Exactly one argument. - | checknum CARG1; bgt ->fff_fallback - | b ->fff_resn - | - |.ffunc_1 tostring - | // Only handles the string or number case inline. - | checkstr CARG3 - | // A __tostring method in the string base metatable is ignored. - | beq ->fff_restv // String key? - | // Handle numbers inline, unless a number base metatable is present. - | lwz TMP0, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM])(DISPATCH) - | checknum CARG3 - | cmplwi cr1, TMP0, 0 - | stp BASE, L->base // Add frame since C call can throw. - | crorc 4*cr0+eq, 4*cr0+gt, 4*cr1+eq - | stw PC, SAVE_PC // Redundant (but a defined value). - | beq ->fff_fallback - | ffgccheck - | mr CARG1, L - | mr CARG2, BASE - |.if DUALNUM - | bl extern lj_str_fromnumber // (lua_State *L, cTValue *o) - |.else - | bl extern lj_str_fromnum // (lua_State *L, lua_Number *np) - |.endif - | // Returns GCstr *. - | li CARG3, LJ_TSTR - | b ->fff_restv - | - |//-- Base library: iterators ------------------------------------------- - | - |.ffunc next - | cmplwi NARGS8:RC, 8 - | lwz CARG1, 0(BASE) - | lwz TAB:CARG2, 4(BASE) - | blt ->fff_fallback - | stwx TISNIL, BASE, NARGS8:RC // Set missing 2nd arg to nil. - | checktab CARG1 - | lwz PC, FRAME_PC(BASE) - | bne ->fff_fallback - | stp BASE, L->base // Add frame since C call can throw. - | mr CARG1, L - | stp BASE, L->top // Dummy frame length is ok. - | la CARG3, 8(BASE) - | stw PC, SAVE_PC - | bl extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) - | // Returns 0 at end of traversal. - | cmplwi CRET1, 0 - | li CARG3, LJ_TNIL - | beq ->fff_restv // End of traversal: return nil. - | lfd f0, 8(BASE) // Copy key and value to results. - | la RA, -8(BASE) - | lfd f1, 16(BASE) - | stfd f0, 0(RA) - | li RD, (2+1)*8 - | stfd f1, 8(RA) - | b ->fff_res - | - |.ffunc_1 pairs - | checktab CARG3 - | lwz PC, FRAME_PC(BASE) - | bne ->fff_fallback -#if LJ_52 - | lwz TAB:TMP2, TAB:CARG1->metatable - | lfd f0, CFUNC:RB->upvalue[0] - | cmplwi TAB:TMP2, 0 - | la RA, -8(BASE) - | bne ->fff_fallback -#else - | lfd f0, CFUNC:RB->upvalue[0] - | la RA, -8(BASE) -#endif - | stw TISNIL, 8(BASE) - | li RD, (3+1)*8 - | stfd f0, 0(RA) - | b ->fff_res - | - |.ffunc ipairs_aux - | cmplwi NARGS8:RC, 16 - | lwz CARG3, 0(BASE) - | lwz TAB:CARG1, 4(BASE) - | lwz CARG4, 8(BASE) - |.if DUALNUM - | lwz TMP2, 12(BASE) - |.else - | lfd FARG2, 8(BASE) - |.endif - | blt ->fff_fallback - | checktab CARG3 - | checknum cr1, CARG4 - | lwz PC, FRAME_PC(BASE) - |.if DUALNUM - | bne ->fff_fallback - | bne cr1, ->fff_fallback - |.else - | lus TMP0, 0x3ff0 - | stw ZERO, TMPD_LO - | bne ->fff_fallback - | stw TMP0, TMPD_HI - | bge cr1, ->fff_fallback - | lfd FARG1, TMPD - | toint TMP2, FARG2, f0 - |.endif - | lwz TMP0, TAB:CARG1->asize - | lwz TMP1, TAB:CARG1->array - |.if not DUALNUM - | fadd FARG2, FARG2, FARG1 - |.endif - | addi TMP2, TMP2, 1 - | la RA, -8(BASE) - | cmplw TMP0, TMP2 - |.if DUALNUM - | stw TISNUM, 0(RA) - | slwi TMP3, TMP2, 3 - | stw TMP2, 4(RA) - |.else - | slwi TMP3, TMP2, 3 - | stfd FARG2, 0(RA) - |.endif - | ble >2 // Not in array part? - | lwzx TMP2, TMP1, TMP3 - | lfdx f0, TMP1, TMP3 - |1: - | checknil TMP2 - | li RD, (0+1)*8 - | beq ->fff_res // End of iteration, return 0 results. - | li RD, (2+1)*8 - | stfd f0, 8(RA) - | b ->fff_res - |2: // Check for empty hash part first. Otherwise call C function. - | lwz TMP0, TAB:CARG1->hmask - | cmplwi TMP0, 0 - | li RD, (0+1)*8 - | beq ->fff_res - | mr CARG2, TMP2 - | bl extern lj_tab_getinth // (GCtab *t, int32_t key) - | // Returns cTValue * or NULL. - | cmplwi CRET1, 0 - | li RD, (0+1)*8 - | beq ->fff_res - | lwz TMP2, 0(CRET1) - | lfd f0, 0(CRET1) - | b <1 - | - |.ffunc_1 ipairs - | checktab CARG3 - | lwz PC, FRAME_PC(BASE) - | bne ->fff_fallback -#if LJ_52 - | lwz TAB:TMP2, TAB:CARG1->metatable - | lfd f0, CFUNC:RB->upvalue[0] - | cmplwi TAB:TMP2, 0 - | la RA, -8(BASE) - | bne ->fff_fallback -#else - | lfd f0, CFUNC:RB->upvalue[0] - | la RA, -8(BASE) -#endif - |.if DUALNUM - | stw TISNUM, 8(BASE) - |.else - | stw ZERO, 8(BASE) - |.endif - | stw ZERO, 12(BASE) - | li RD, (3+1)*8 - | stfd f0, 0(RA) - | b ->fff_res - | - |//-- Base library: catch errors ---------------------------------------- - | - |.ffunc pcall - | cmplwi NARGS8:RC, 8 - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | blt ->fff_fallback - | mr TMP2, BASE - | la BASE, 8(BASE) - | // Remember active hook before pcall. - | rlwinm TMP3, TMP3, 32-HOOK_ACTIVE_SHIFT, 31, 31 - | subi NARGS8:RC, NARGS8:RC, 8 - | addi PC, TMP3, 8+FRAME_PCALL - | b ->vm_call_dispatch - | - |.ffunc xpcall - | cmplwi NARGS8:RC, 16 - | lwz CARG4, 8(BASE) - | lfd FARG2, 8(BASE) - | lfd FARG1, 0(BASE) - | blt ->fff_fallback - | lbz TMP1, DISPATCH_GL(hookmask)(DISPATCH) - | mr TMP2, BASE - | checkfunc CARG4; bne ->fff_fallback // Traceback must be a function. - | la BASE, 16(BASE) - | // Remember active hook before pcall. - | rlwinm TMP1, TMP1, 32-HOOK_ACTIVE_SHIFT, 31, 31 - | stfd FARG2, 0(TMP2) // Swap function and traceback. - | subi NARGS8:RC, NARGS8:RC, 16 - | stfd FARG1, 8(TMP2) - | addi PC, TMP1, 16+FRAME_PCALL - | b ->vm_call_dispatch - | - |//-- Coroutine library -------------------------------------------------- - | - |.macro coroutine_resume_wrap, resume - |.if resume - |.ffunc_1 coroutine_resume - | cmpwi CARG3, LJ_TTHREAD; bne ->fff_fallback - |.else - |.ffunc coroutine_wrap_aux - | lwz L:CARG1, CFUNC:RB->upvalue[0].gcr - |.endif - | lbz TMP0, L:CARG1->status - | lp TMP1, L:CARG1->cframe - | lp CARG2, L:CARG1->top - | cmplwi cr0, TMP0, LUA_YIELD - | lp TMP2, L:CARG1->base - | cmplwi cr1, TMP1, 0 - | lwz TMP0, L:CARG1->maxstack - | cmplw cr7, CARG2, TMP2 - | lwz PC, FRAME_PC(BASE) - | crorc 4*cr6+lt, 4*cr0+gt, 4*cr1+eq // st>LUA_YIELD || cframe!=0 - | add TMP2, CARG2, NARGS8:RC - | crandc 4*cr6+gt, 4*cr7+eq, 4*cr0+eq // base==top && st!=LUA_YIELD - | cmplw cr1, TMP2, TMP0 - | cror 4*cr6+lt, 4*cr6+lt, 4*cr6+gt - | stw PC, SAVE_PC - | cror 4*cr6+lt, 4*cr6+lt, 4*cr1+gt // cond1 || cond2 || stackov - | stp BASE, L->base - | blt cr6, ->fff_fallback - |1: - |.if resume - | addi BASE, BASE, 8 // Keep resumed thread in stack for GC. - | subi NARGS8:RC, NARGS8:RC, 8 - | subi TMP2, TMP2, 8 - |.endif - | stp TMP2, L:CARG1->top - | li TMP1, 0 - | stp BASE, L->top - |2: // Move args to coroutine. - | cmpw TMP1, NARGS8:RC - | lfdx f0, BASE, TMP1 - | beq >3 - | stfdx f0, CARG2, TMP1 - | addi TMP1, TMP1, 8 - | b <2 - |3: - | li CARG3, 0 - | mr L:SAVE0, L:CARG1 - | li CARG4, 0 - | bl ->vm_resume // (lua_State *L, TValue *base, 0, 0) - | // Returns thread status. - |4: - | lp TMP2, L:SAVE0->base - | cmplwi CRET1, LUA_YIELD - | lp TMP3, L:SAVE0->top - | li_vmstate INTERP - | lp BASE, L->base - | st_vmstate - | bgt >8 - | sub RD, TMP3, TMP2 - | lwz TMP0, L->maxstack - | cmplwi RD, 0 - | add TMP1, BASE, RD - | beq >6 // No results? - | cmplw TMP1, TMP0 - | li TMP1, 0 - | bgt >9 // Need to grow stack? - | - | subi TMP3, RD, 8 - | stp TMP2, L:SAVE0->top // Clear coroutine stack. - |5: // Move results from coroutine. - | cmplw TMP1, TMP3 - | lfdx f0, TMP2, TMP1 - | stfdx f0, BASE, TMP1 - | addi TMP1, TMP1, 8 - | bne <5 - |6: - | andix. TMP0, PC, FRAME_TYPE - |.if resume - | li TMP1, LJ_TTRUE - | la RA, -8(BASE) - | stw TMP1, -8(BASE) // Prepend true to results. - | addi RD, RD, 16 - |.else - | mr RA, BASE - | addi RD, RD, 8 - |.endif - |7: - | stw PC, SAVE_PC - | mr MULTRES, RD - | beq ->BC_RET_Z - | b ->vm_return - | - |8: // Coroutine returned with error (at co->top-1). - |.if resume - | andix. TMP0, PC, FRAME_TYPE - | la TMP3, -8(TMP3) - | li TMP1, LJ_TFALSE - | lfd f0, 0(TMP3) - | stp TMP3, L:SAVE0->top // Remove error from coroutine stack. - | li RD, (2+1)*8 - | stw TMP1, -8(BASE) // Prepend false to results. - | la RA, -8(BASE) - | stfd f0, 0(BASE) // Copy error message. - | b <7 - |.else - | mr CARG1, L - | mr CARG2, L:SAVE0 - | bl extern lj_ffh_coroutine_wrap_err // (lua_State *L, lua_State *co) - |.endif - | - |9: // Handle stack expansion on return from yield. - | mr CARG1, L - | srwi CARG2, RD, 3 - | bl extern lj_state_growstack // (lua_State *L, int n) - | li CRET1, 0 - | b <4 - |.endmacro - | - | coroutine_resume_wrap 1 // coroutine.resume - | coroutine_resume_wrap 0 // coroutine.wrap - | - |.ffunc coroutine_yield - | lp TMP0, L->cframe - | add TMP1, BASE, NARGS8:RC - | stp BASE, L->base - | andix. TMP0, TMP0, CFRAME_RESUME - | stp TMP1, L->top - | li CRET1, LUA_YIELD - | beq ->fff_fallback - | stp ZERO, L->cframe - | stb CRET1, L->status - | b ->vm_leave_unw - | - |//-- Math library ------------------------------------------------------- - | - |.ffunc_1 math_abs - | checknum CARG3 - |.if DUALNUM - | bne >2 - | srawi TMP1, CARG1, 31 - | xor TMP2, TMP1, CARG1 - |.if GPR64 - | lus TMP0, 0x8000 - | sub CARG1, TMP2, TMP1 - | cmplw CARG1, TMP0 - | beq >1 - |.else - | sub. CARG1, TMP2, TMP1 - | blt >1 - |.endif - |->fff_resi: - | lwz PC, FRAME_PC(BASE) - | la RA, -8(BASE) - | stw TISNUM, -8(BASE) - | stw CRET1, -4(BASE) - | b ->fff_res1 - |1: - | lus CARG3, 0x41e0 // 2^31. - | li CARG1, 0 - | b ->fff_restv - |2: - |.endif - | bge ->fff_fallback - | rlwinm CARG3, CARG3, 0, 1, 31 - | // Fallthrough. - | - |->fff_restv: - | // CARG3/CARG1 = TValue result. - | lwz PC, FRAME_PC(BASE) - | stw CARG3, -8(BASE) - | la RA, -8(BASE) - | stw CARG1, -4(BASE) - |->fff_res1: - | // RA = results, PC = return. - | li RD, (1+1)*8 - |->fff_res: - | // RA = results, RD = (nresults+1)*8, PC = return. - | andix. TMP0, PC, FRAME_TYPE - | mr MULTRES, RD - | bney ->vm_return - | lwz INS, -4(PC) - | decode_RB8 RB, INS - |5: - | cmplw RB, RD // More results expected? - | decode_RA8 TMP0, INS - | bgt >6 - | ins_next1 - | // Adjust BASE. KBASE is assumed to be set for the calling frame. - | sub BASE, RA, TMP0 - | ins_next2 - | - |6: // Fill up results with nil. - | subi TMP1, RD, 8 - | addi RD, RD, 8 - | stwx TISNIL, RA, TMP1 - | b <5 - | - |.macro math_extern, func - | .ffunc_n math_ .. func - | blex func - | b ->fff_resn - |.endmacro - | - |.macro math_extern2, func - | .ffunc_nn math_ .. func - | blex func - | b ->fff_resn - |.endmacro - | - |.macro math_round, func - | .ffunc_1 math_ .. func - | checknum CARG3; beqy ->fff_restv - | rlwinm TMP2, CARG3, 12, 21, 31 - | bge ->fff_fallback - | addic. TMP2, TMP2, -1023 // exp = exponent(x) - 1023 - | cmplwi cr1, TMP2, 31 // 0 <= exp < 31? - | subfic TMP0, TMP2, 31 - | blt >3 - | slwi TMP1, CARG3, 11 - | srwi TMP3, CARG1, 21 - | oris TMP1, TMP1, 0x8000 - | addi TMP2, TMP2, 1 - | or TMP1, TMP1, TMP3 - | slwi CARG2, CARG1, 11 - | bge cr1, >4 - | slw TMP3, TMP1, TMP2 - | srw RD, TMP1, TMP0 - | or TMP3, TMP3, CARG2 - | srawi TMP2, CARG3, 31 - |.if "func" == "floor" - | and TMP1, TMP3, TMP2 - | addic TMP0, TMP1, -1 - | subfe TMP1, TMP0, TMP1 - | add CARG1, RD, TMP1 - | xor CARG1, CARG1, TMP2 - | sub CARG1, CARG1, TMP2 - | b ->fff_resi - |.else - | andc TMP1, TMP3, TMP2 - | addic TMP0, TMP1, -1 - | subfe TMP1, TMP0, TMP1 - | add CARG1, RD, TMP1 - | cmpw CARG1, RD - | xor CARG1, CARG1, TMP2 - | sub CARG1, CARG1, TMP2 - | bge ->fff_resi - | // Overflow to 2^31. - | lus CARG3, 0x41e0 // 2^31. - | li CARG1, 0 - | b ->fff_restv - |.endif - |3: // |x| < 1 - | slwi TMP2, CARG3, 1 - | srawi TMP1, CARG3, 31 - | or TMP2, CARG1, TMP2 // ztest = (hi+hi) | lo - |.if "func" == "floor" - | and TMP1, TMP2, TMP1 // (ztest & sign) == 0 ? 0 : -1 - | subfic TMP2, TMP1, 0 - | subfe CARG1, CARG1, CARG1 - |.else - | andc TMP1, TMP2, TMP1 // (ztest & ~sign) == 0 ? 0 : 1 - | addic TMP2, TMP1, -1 - | subfe CARG1, TMP2, TMP1 - |.endif - | b ->fff_resi - |4: // exp >= 31. Check for -(2^31). - | xoris TMP1, TMP1, 0x8000 - | srawi TMP2, CARG3, 31 - |.if "func" == "floor" - | or TMP1, TMP1, CARG2 - |.endif - |.if PPE - | orc TMP1, TMP1, TMP2 - | cmpwi TMP1, 0 - |.else - | orc. TMP1, TMP1, TMP2 - |.endif - | crand 4*cr0+eq, 4*cr0+eq, 4*cr1+eq - | lus CARG1, 0x8000 // -(2^31). - | beqy ->fff_resi - |5: - | lfd FARG1, 0(BASE) - | blex func - | b ->fff_resn - |.endmacro - | - |.if DUALNUM - | math_round floor - | math_round ceil - |.else - | // NYI: use internal implementation. - | math_extern floor - | math_extern ceil - |.endif - | - |.if SQRT - |.ffunc_n math_sqrt - | fsqrt FARG1, FARG1 - | b ->fff_resn - |.else - | math_extern sqrt - |.endif - | - |.ffunc math_log - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - | lfd FARG1, 0(BASE) - | bne ->fff_fallback // Need exactly 1 argument. - | checknum CARG3; bge ->fff_fallback - | blex log - | b ->fff_resn - | - | math_extern log10 - | math_extern exp - | math_extern sin - | math_extern cos - | math_extern tan - | math_extern asin - | math_extern acos - | math_extern atan - | math_extern sinh - | math_extern cosh - | math_extern tanh - | math_extern2 pow - | math_extern2 atan2 - | math_extern2 fmod - | - |->ff_math_deg: - |.ffunc_n math_rad - | lfd FARG2, CFUNC:RB->upvalue[0] - | fmul FARG1, FARG1, FARG2 - | b ->fff_resn - | - |.if DUALNUM - |.ffunc math_ldexp - | cmplwi NARGS8:RC, 16 - | lwz CARG3, 0(BASE) - | lfd FARG1, 0(BASE) - | lwz CARG4, 8(BASE) - |.if GPR64 - | lwz CARG2, 12(BASE) - |.else - | lwz CARG1, 12(BASE) - |.endif - | blt ->fff_fallback - | checknum CARG3; bge ->fff_fallback - | checknum CARG4; bne ->fff_fallback - |.else - |.ffunc_nn math_ldexp - |.if GPR64 - | toint CARG2, FARG2 - |.else - | toint CARG1, FARG2 - |.endif - |.endif - | blex ldexp - | b ->fff_resn - | - |.ffunc_n math_frexp - |.if GPR64 - | la CARG2, DISPATCH_GL(tmptv)(DISPATCH) - |.else - | la CARG1, DISPATCH_GL(tmptv)(DISPATCH) - |.endif - | lwz PC, FRAME_PC(BASE) - | blex frexp - | lwz TMP1, DISPATCH_GL(tmptv)(DISPATCH) - | la RA, -8(BASE) - |.if not DUALNUM - | tonum_i FARG2, TMP1 - |.endif - | stfd FARG1, 0(RA) - | li RD, (2+1)*8 - |.if DUALNUM - | stw TISNUM, 8(RA) - | stw TMP1, 12(RA) - |.else - | stfd FARG2, 8(RA) - |.endif - | b ->fff_res - | - |.ffunc_n math_modf - |.if GPR64 - | la CARG2, -8(BASE) - |.else - | la CARG1, -8(BASE) - |.endif - | lwz PC, FRAME_PC(BASE) - | blex modf - | la RA, -8(BASE) - | stfd FARG1, 0(BASE) - | li RD, (2+1)*8 - | b ->fff_res - | - |.macro math_minmax, name, ismax - |.if DUALNUM - | .ffunc_1 name - | checknum CARG3 - | addi TMP1, BASE, 8 - | add TMP2, BASE, NARGS8:RC - | bne >4 - |1: // Handle integers. - | lwz CARG4, 0(TMP1) - | cmplw cr1, TMP1, TMP2 - | lwz CARG2, 4(TMP1) - | bge cr1, ->fff_resi - | checknum CARG4 - | xoris TMP0, CARG1, 0x8000 - | xoris TMP3, CARG2, 0x8000 - | bne >3 - | subfc TMP3, TMP3, TMP0 - | subfe TMP0, TMP0, TMP0 - |.if ismax - | andc TMP3, TMP3, TMP0 - |.else - | and TMP3, TMP3, TMP0 - |.endif - | add CARG1, TMP3, CARG2 - |.if GPR64 - | rldicl CARG1, CARG1, 0, 32 - |.endif - | addi TMP1, TMP1, 8 - | b <1 - |3: - | bge ->fff_fallback - | // Convert intermediate result to number and continue below. - | tonum_i FARG1, CARG1 - | lfd FARG2, 0(TMP1) - | b >6 - |4: - | lfd FARG1, 0(BASE) - | bge ->fff_fallback - |5: // Handle numbers. - | lwz CARG4, 0(TMP1) - | cmplw cr1, TMP1, TMP2 - | lfd FARG2, 0(TMP1) - | bge cr1, ->fff_resn - | checknum CARG4; bge >7 - |6: - | fsub f0, FARG1, FARG2 - | addi TMP1, TMP1, 8 - |.if ismax - | fsel FARG1, f0, FARG1, FARG2 - |.else - | fsel FARG1, f0, FARG2, FARG1 - |.endif - | b <5 - |7: // Convert integer to number and continue above. - | lwz CARG2, 4(TMP1) - | bne ->fff_fallback - | tonum_i FARG2, CARG2 - | b <6 - |.else - | .ffunc_n name - | li TMP1, 8 - |1: - | lwzx CARG2, BASE, TMP1 - | lfdx FARG2, BASE, TMP1 - | cmplw cr1, TMP1, NARGS8:RC - | checknum CARG2 - | bge cr1, ->fff_resn - | bge ->fff_fallback - | fsub f0, FARG1, FARG2 - | addi TMP1, TMP1, 8 - |.if ismax - | fsel FARG1, f0, FARG1, FARG2 - |.else - | fsel FARG1, f0, FARG2, FARG1 - |.endif - | b <1 - |.endif - |.endmacro - | - | math_minmax math_min, 0 - | math_minmax math_max, 1 - | - |//-- String library ----------------------------------------------------- - | - |.ffunc_1 string_len - | checkstr CARG3; bne ->fff_fallback - | lwz CRET1, STR:CARG1->len - | b ->fff_resi - | - |.ffunc string_byte // Only handle the 1-arg case here. - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - | lwz STR:CARG1, 4(BASE) - | bne ->fff_fallback // Need exactly 1 argument. - | checkstr CARG3 - | bne ->fff_fallback - | lwz TMP0, STR:CARG1->len - |.if DUALNUM - | lbz CARG1, STR:CARG1[1] // Access is always ok (NUL at end). - | li RD, (0+1)*8 - | lwz PC, FRAME_PC(BASE) - | cmplwi TMP0, 0 - | la RA, -8(BASE) - | beqy ->fff_res - | b ->fff_resi - |.else - | lbz TMP1, STR:CARG1[1] // Access is always ok (NUL at end). - | addic TMP3, TMP0, -1 // RD = ((str->len != 0)+1)*8 - | subfe RD, TMP3, TMP0 - | stw TMP1, TONUM_LO // Inlined tonum_u f0, TMP1. - | addi RD, RD, 1 - | lfd f0, TONUM_D - | la RA, -8(BASE) - | lwz PC, FRAME_PC(BASE) - | fsub f0, f0, TOBIT - | slwi RD, RD, 3 - | stfd f0, 0(RA) - | b ->fff_res - |.endif - | - |.ffunc string_char // Only handle the 1-arg case here. - | ffgccheck - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - |.if DUALNUM - | lwz TMP0, 4(BASE) - | bne ->fff_fallback // Exactly 1 argument. - | checknum CARG3; bne ->fff_fallback - | la CARG2, 7(BASE) - |.else - | lfd FARG1, 0(BASE) - | bne ->fff_fallback // Exactly 1 argument. - | checknum CARG3; bge ->fff_fallback - | toint TMP0, FARG1 - | la CARG2, TMPD_BLO - |.endif - | li CARG3, 1 - | cmplwi TMP0, 255; bgt ->fff_fallback - |->fff_newstr: - | mr CARG1, L - | stp BASE, L->base - | stw PC, SAVE_PC - | bl extern lj_str_new // (lua_State *L, char *str, size_t l) - | // Returns GCstr *. - | lp BASE, L->base - | li CARG3, LJ_TSTR - | b ->fff_restv - | - |.ffunc string_sub - | ffgccheck - | cmplwi NARGS8:RC, 16 - | lwz CARG3, 16(BASE) - |.if not DUALNUM - | lfd f0, 16(BASE) - |.endif - | lwz TMP0, 0(BASE) - | lwz STR:CARG1, 4(BASE) - | blt ->fff_fallback - | lwz CARG2, 8(BASE) - |.if DUALNUM - | lwz TMP1, 12(BASE) - |.else - | lfd f1, 8(BASE) - |.endif - | li TMP2, -1 - | beq >1 - |.if DUALNUM - | checknum CARG3 - | lwz TMP2, 20(BASE) - | bne ->fff_fallback - |1: - | checknum CARG2; bne ->fff_fallback - |.else - | checknum CARG3; bge ->fff_fallback - | toint TMP2, f0 - |1: - | checknum CARG2; bge ->fff_fallback - |.endif - | checkstr TMP0; bne ->fff_fallback - |.if not DUALNUM - | toint TMP1, f1 - |.endif - | lwz TMP0, STR:CARG1->len - | cmplw TMP0, TMP2 // len < end? (unsigned compare) - | addi TMP3, TMP2, 1 - | blt >5 - |2: - | cmpwi TMP1, 0 // start <= 0? - | add TMP3, TMP1, TMP0 - | ble >7 - |3: - | sub CARG3, TMP2, TMP1 - | addi CARG2, STR:CARG1, #STR-1 - | srawi TMP0, CARG3, 31 - | addi CARG3, CARG3, 1 - | add CARG2, CARG2, TMP1 - | andc CARG3, CARG3, TMP0 - |.if GPR64 - | rldicl CARG2, CARG2, 0, 32 - | rldicl CARG3, CARG3, 0, 32 - |.endif - | b ->fff_newstr - | - |5: // Negative end or overflow. - | cmpw TMP0, TMP2 // len >= end? (signed compare) - | add TMP2, TMP0, TMP3 // Negative end: end = end+len+1. - | bge <2 - | mr TMP2, TMP0 // Overflow: end = len. - | b <2 - | - |7: // Negative start or underflow. - | .gpr64 extsw TMP1, TMP1 - | addic CARG3, TMP1, -1 - | subfe CARG3, CARG3, CARG3 - | srawi CARG2, TMP3, 31 // Note: modifies carry. - | andc TMP3, TMP3, CARG3 - | andc TMP1, TMP3, CARG2 - | addi TMP1, TMP1, 1 // start = 1 + (start ? start+len : 0) - | b <3 - | - |.ffunc string_rep // Only handle the 1-char case inline. - | ffgccheck - | cmplwi NARGS8:RC, 16 - | lwz TMP0, 0(BASE) - | lwz STR:CARG1, 4(BASE) - | lwz CARG4, 8(BASE) - |.if DUALNUM - | lwz CARG3, 12(BASE) - |.else - | lfd FARG2, 8(BASE) - |.endif - | bne ->fff_fallback // Exactly 2 arguments. - | checkstr TMP0; bne ->fff_fallback - |.if DUALNUM - | checknum CARG4; bne ->fff_fallback - |.else - | checknum CARG4; bge ->fff_fallback - | toint CARG3, FARG2 - |.endif - | lwz TMP0, STR:CARG1->len - | cmpwi CARG3, 0 - | lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | ble >2 // Count <= 0? (or non-int) - | cmplwi TMP0, 1 - | subi TMP2, CARG3, 1 - | blt >2 // Zero length string? - | cmplw cr1, TMP1, CARG3 - | bne ->fff_fallback // Fallback for > 1-char strings. - | lbz TMP0, STR:CARG1[1] - | lp CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | blt cr1, ->fff_fallback - |1: // Fill buffer with char. Yes, this is suboptimal code (do you care?). - | cmplwi TMP2, 0 - | stbx TMP0, CARG2, TMP2 - | subi TMP2, TMP2, 1 - | bne <1 - | b ->fff_newstr - |2: // Return empty string. - | la STR:CARG1, DISPATCH_GL(strempty)(DISPATCH) - | li CARG3, LJ_TSTR - | b ->fff_restv - | - |.ffunc string_reverse - | ffgccheck - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - | lwz STR:CARG1, 4(BASE) - | blt ->fff_fallback - | checkstr CARG3 - | lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | bne ->fff_fallback - | lwz CARG3, STR:CARG1->len - | la CARG1, #STR(STR:CARG1) - | lp CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | li TMP2, 0 - | cmplw TMP1, CARG3 - | subi TMP3, CARG3, 1 - | blt ->fff_fallback - |1: // Reverse string copy. - | cmpwi TMP3, 0 - | lbzx TMP1, CARG1, TMP2 - | blty ->fff_newstr - | stbx TMP1, CARG2, TMP3 - | subi TMP3, TMP3, 1 - | addi TMP2, TMP2, 1 - | b <1 - | - |.macro ffstring_case, name, lo - | .ffunc name - | ffgccheck - | cmplwi NARGS8:RC, 8 - | lwz CARG3, 0(BASE) - | lwz STR:CARG1, 4(BASE) - | blt ->fff_fallback - | checkstr CARG3 - | lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | bne ->fff_fallback - | lwz CARG3, STR:CARG1->len - | la CARG1, #STR(STR:CARG1) - | lp CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | cmplw TMP1, CARG3 - | li TMP2, 0 - | blt ->fff_fallback - |1: // ASCII case conversion. - | cmplw TMP2, CARG3 - | lbzx TMP1, CARG1, TMP2 - | bgey ->fff_newstr - | subi TMP0, TMP1, lo - | xori TMP3, TMP1, 0x20 - | addic TMP0, TMP0, -26 - | subfe TMP3, TMP3, TMP3 - | rlwinm TMP3, TMP3, 0, 26, 26 // x &= 0x20. - | xor TMP1, TMP1, TMP3 - | stbx TMP1, CARG2, TMP2 - | addi TMP2, TMP2, 1 - | b <1 - |.endmacro - | - |ffstring_case string_lower, 65 - |ffstring_case string_upper, 97 - | - |//-- Table library ------------------------------------------------------ - | - |.ffunc_1 table_getn - | checktab CARG3; bne ->fff_fallback - | bl extern lj_tab_len // (GCtab *t) - | // Returns uint32_t (but less than 2^31). - | b ->fff_resi - | - |//-- Bit library -------------------------------------------------------- - | - |.macro .ffunc_bit, name - |.if DUALNUM - | .ffunc_1 bit_..name - | checknum CARG3; bnel ->fff_tobit_fb - |.else - | .ffunc_n bit_..name - | fadd FARG1, FARG1, TOBIT - | stfd FARG1, TMPD - | lwz CARG1, TMPD_LO - |.endif - |.endmacro - | - |.macro .ffunc_bit_op, name, ins - | .ffunc_bit name - | addi TMP1, BASE, 8 - | add TMP2, BASE, NARGS8:RC - |1: - | lwz CARG4, 0(TMP1) - | cmplw cr1, TMP1, TMP2 - |.if DUALNUM - | lwz CARG2, 4(TMP1) - |.else - | lfd FARG1, 0(TMP1) - |.endif - | bgey cr1, ->fff_resi - | checknum CARG4 - |.if DUALNUM - | bnel ->fff_bitop_fb - |.else - | fadd FARG1, FARG1, TOBIT - | bge ->fff_fallback - | stfd FARG1, TMPD - | lwz CARG2, TMPD_LO - |.endif - | ins CARG1, CARG1, CARG2 - | addi TMP1, TMP1, 8 - | b <1 - |.endmacro - | - |.ffunc_bit_op band, and - |.ffunc_bit_op bor, or - |.ffunc_bit_op bxor, xor - | - |.ffunc_bit bswap - | rotlwi TMP0, CARG1, 8 - | rlwimi TMP0, CARG1, 24, 0, 7 - | rlwimi TMP0, CARG1, 24, 16, 23 - | mr CRET1, TMP0 - | b ->fff_resi - | - |.ffunc_bit bnot - | not CRET1, CARG1 - | b ->fff_resi - | - |.macro .ffunc_bit_sh, name, ins, shmod - |.if DUALNUM - | .ffunc_2 bit_..name - | checknum CARG3; bnel ->fff_tobit_fb - | // Note: no inline conversion from number for 2nd argument! - | checknum CARG4; bne ->fff_fallback - |.else - | .ffunc_nn bit_..name - | fadd FARG1, FARG1, TOBIT - | fadd FARG2, FARG2, TOBIT - | stfd FARG1, TMPD - | lwz CARG1, TMPD_LO - | stfd FARG2, TMPD - | lwz CARG2, TMPD_LO - |.endif - |.if shmod == 1 - | rlwinm CARG2, CARG2, 0, 27, 31 - |.elif shmod == 2 - | neg CARG2, CARG2 - |.endif - | ins CRET1, CARG1, CARG2 - | b ->fff_resi - |.endmacro - | - |.ffunc_bit_sh lshift, slw, 1 - |.ffunc_bit_sh rshift, srw, 1 - |.ffunc_bit_sh arshift, sraw, 1 - |.ffunc_bit_sh rol, rotlw, 0 - |.ffunc_bit_sh ror, rotlw, 2 - | - |.ffunc_bit tobit - |.if DUALNUM - | b ->fff_resi - |.else - |->fff_resi: - | tonum_i FARG1, CRET1 - |.endif - |->fff_resn: - | lwz PC, FRAME_PC(BASE) - | la RA, -8(BASE) - | stfd FARG1, -8(BASE) - | b ->fff_res1 - | - |// Fallback FP number to bit conversion. - |->fff_tobit_fb: - |.if DUALNUM - | lfd FARG1, 0(BASE) - | bgt ->fff_fallback - | fadd FARG1, FARG1, TOBIT - | stfd FARG1, TMPD - | lwz CARG1, TMPD_LO - | blr - |.endif - |->fff_bitop_fb: - |.if DUALNUM - | lfd FARG1, 0(TMP1) - | bgt ->fff_fallback - | fadd FARG1, FARG1, TOBIT - | stfd FARG1, TMPD - | lwz CARG2, TMPD_LO - | blr - |.endif - | - |//----------------------------------------------------------------------- - | - |->fff_fallback: // Call fast function fallback handler. - | // BASE = new base, RB = CFUNC, RC = nargs*8 - | lp TMP3, CFUNC:RB->f - | add TMP1, BASE, NARGS8:RC - | lwz PC, FRAME_PC(BASE) // Fallback may overwrite PC. - | addi TMP0, TMP1, 8*LUA_MINSTACK - | lwz TMP2, L->maxstack - | stw PC, SAVE_PC // Redundant (but a defined value). - | .toc lp TMP3, 0(TMP3) - | cmplw TMP0, TMP2 - | stp BASE, L->base - | stp TMP1, L->top - | mr CARG1, L - | bgt >5 // Need to grow stack. - | mtctr TMP3 - | bctrl // (lua_State *L) - | // Either throws an error, or recovers and returns -1, 0 or nresults+1. - | lp BASE, L->base - | cmpwi CRET1, 0 - | slwi RD, CRET1, 3 - | la RA, -8(BASE) - | bgt ->fff_res // Returned nresults+1? - |1: // Returned 0 or -1: retry fast path. - | lp TMP0, L->top - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | sub NARGS8:RC, TMP0, BASE - | bne ->vm_call_tail // Returned -1? - | ins_callt // Returned 0: retry fast path. - | - |// Reconstruct previous base for vmeta_call during tailcall. - |->vm_call_tail: - | andix. TMP0, PC, FRAME_TYPE - | rlwinm TMP1, PC, 0, 0, 28 - | bne >3 - | lwz INS, -4(PC) - | decode_RA8 TMP1, INS - | addi TMP1, TMP1, 8 - |3: - | sub TMP2, BASE, TMP1 - | b ->vm_call_dispatch // Resolve again for tailcall. - | - |5: // Grow stack for fallback handler. - | li CARG2, LUA_MINSTACK - | bl extern lj_state_growstack // (lua_State *L, int n) - | lp BASE, L->base - | cmpw TMP0, TMP0 // Set 4*cr0+eq to force retry. - | b <1 - | - |->fff_gcstep: // Call GC step function. - | // BASE = new base, RC = nargs*8 - | mflr SAVE0 - | stp BASE, L->base - | add TMP0, BASE, NARGS8:RC - | stw PC, SAVE_PC // Redundant (but a defined value). - | stp TMP0, L->top - | mr CARG1, L - | bl extern lj_gc_step // (lua_State *L) - | lp BASE, L->base - | mtlr SAVE0 - | lp TMP0, L->top - | sub NARGS8:RC, TMP0, BASE - | lwz CFUNC:RB, FRAME_FUNC(BASE) - | blr - | - |//----------------------------------------------------------------------- - |//-- Special dispatch targets ------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_record: // Dispatch target for recording phase. - |.if JIT - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | andix. TMP0, TMP3, HOOK_VMEVENT // No recording while in vmevent. - | bne >5 - | // Decrement the hookcount for consistency, but always do the call. - | lwz TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | andix. TMP0, TMP3, HOOK_ACTIVE - | bne >1 - | subi TMP2, TMP2, 1 - | andi. TMP0, TMP3, LUA_MASKLINE|LUA_MASKCOUNT - | beqy >1 - | stw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | b >1 - |.endif - | - |->vm_rethook: // Dispatch target for return hooks. - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | andix. TMP0, TMP3, HOOK_ACTIVE // Hook already active? - | beq >1 - |5: // Re-dispatch to static ins. - | addi TMP1, TMP1, GG_DISP2STATIC // Assumes decode_OPP TMP1, INS. - | lpx TMP0, DISPATCH, TMP1 - | mtctr TMP0 - | bctr - | - |->vm_inshook: // Dispatch target for instr/line hooks. - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | lwz TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | andix. TMP0, TMP3, HOOK_ACTIVE // Hook already active? - | rlwinm TMP0, TMP3, 31-LUA_HOOKLINE, 31, 0 - | bne <5 - | - | cmpwi cr1, TMP0, 0 - | addic. TMP2, TMP2, -1 - | beq cr1, <5 - | stw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | beq >1 - | bge cr1, <5 - |1: - | mr CARG1, L - | stw MULTRES, SAVE_MULTRES - | mr CARG2, PC - | stp BASE, L->base - | // SAVE_PC must hold the _previous_ PC. The callee updates it with PC. - | bl extern lj_dispatch_ins // (lua_State *L, const BCIns *pc) - |3: - | lp BASE, L->base - |4: // Re-dispatch to static ins. - | lwz INS, -4(PC) - | decode_OPP TMP1, INS - | decode_RB8 RB, INS - | addi TMP1, TMP1, GG_DISP2STATIC - | decode_RD8 RD, INS - | lpx TMP0, DISPATCH, TMP1 - | decode_RA8 RA, INS - | decode_RC8 RC, INS - | mtctr TMP0 - | bctr - | - |->cont_hook: // Continue from hook yield. - | addi PC, PC, 4 - | lwz MULTRES, -20(RB) // Restore MULTRES for *M ins. - | b <4 - | - |->vm_hotloop: // Hot loop counter underflow. - |.if JIT - | lwz LFUNC:TMP1, FRAME_FUNC(BASE) - | addi CARG1, DISPATCH, GG_DISP2J - | stw PC, SAVE_PC - | lwz TMP1, LFUNC:TMP1->pc - | mr CARG2, PC - | stw L, DISPATCH_J(L)(DISPATCH) - | lbz TMP1, PC2PROTO(framesize)(TMP1) - | stp BASE, L->base - | slwi TMP1, TMP1, 3 - | add TMP1, BASE, TMP1 - | stp TMP1, L->top - | bl extern lj_trace_hot // (jit_State *J, const BCIns *pc) - | b <3 - |.endif - | - |->vm_callhook: // Dispatch target for call hooks. - | mr CARG2, PC - |.if JIT - | b >1 - |.endif - | - |->vm_hotcall: // Hot call counter underflow. - |.if JIT - | ori CARG2, PC, 1 - |1: - |.endif - | add TMP0, BASE, RC - | stw PC, SAVE_PC - | mr CARG1, L - | stp BASE, L->base - | sub RA, RA, BASE - | stp TMP0, L->top - | bl extern lj_dispatch_call // (lua_State *L, const BCIns *pc) - | // Returns ASMFunction. - | lp BASE, L->base - | lp TMP0, L->top - | stw ZERO, SAVE_PC // Invalidate for subsequent line hook. - | sub NARGS8:RC, TMP0, BASE - | add RA, BASE, RA - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | lwz INS, -4(PC) - | mtctr CRET1 - | bctr - | - |//----------------------------------------------------------------------- - |//-- Trace exit handler ------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro savex_, a, b, c, d - | stfd f..a, 16+a*8(sp) - | stfd f..b, 16+b*8(sp) - | stfd f..c, 16+c*8(sp) - | stfd f..d, 16+d*8(sp) - |.endmacro - | - |->vm_exit_handler: - |.if JIT - | addi sp, sp, -(16+32*8+32*4) - | stmw r2, 16+32*8+2*4(sp) - | addi DISPATCH, JGL, -GG_DISP2G-32768 - | li CARG2, ~LJ_VMST_EXIT - | lwz CARG1, 16+32*8+32*4(sp) // Get stack chain. - | stw CARG2, DISPATCH_GL(vmstate)(DISPATCH) - | savex_ 0,1,2,3 - | stw CARG1, 0(sp) // Store extended stack chain. - | clrso TMP1 - | savex_ 4,5,6,7 - | addi CARG2, sp, 16+32*8+32*4 // Recompute original value of sp. - | savex_ 8,9,10,11 - | stw CARG2, 16+32*8+1*4(sp) // Store sp in RID_SP. - | savex_ 12,13,14,15 - | mflr CARG3 - | li TMP1, 0 - | savex_ 16,17,18,19 - | stw TMP1, 16+32*8+0*4(sp) // Clear RID_TMP. - | savex_ 20,21,22,23 - | lhz CARG4, 2(CARG3) // Load trace number. - | savex_ 24,25,26,27 - | lwz L, DISPATCH_GL(jit_L)(DISPATCH) - | savex_ 28,29,30,31 - | sub CARG3, TMP0, CARG3 // Compute exit number. - | lp BASE, DISPATCH_GL(jit_base)(DISPATCH) - | srwi CARG3, CARG3, 2 - | stw L, DISPATCH_J(L)(DISPATCH) - | subi CARG3, CARG3, 2 - | stw TMP1, DISPATCH_GL(jit_L)(DISPATCH) - | stw CARG4, DISPATCH_J(parent)(DISPATCH) - | stp BASE, L->base - | addi CARG1, DISPATCH, GG_DISP2J - | stw CARG3, DISPATCH_J(exitno)(DISPATCH) - | addi CARG2, sp, 16 - | bl extern lj_trace_exit // (jit_State *J, ExitState *ex) - | // Returns MULTRES (unscaled) or negated error code. - | lp TMP1, L->cframe - | lwz TMP2, 0(sp) - | lp BASE, L->base - |.if GPR64 - | rldicr sp, TMP1, 0, 61 - |.else - | rlwinm sp, TMP1, 0, 0, 29 - |.endif - | lwz PC, SAVE_PC // Get SAVE_PC. - | stw TMP2, 0(sp) - | stw L, SAVE_L // Set SAVE_L (on-trace resume/yield). - | b >1 - |.endif - |->vm_exit_interp: - |.if JIT - | // CARG1 = MULTRES or negated error code, BASE, PC and JGL set. - | lwz L, SAVE_L - | addi DISPATCH, JGL, -GG_DISP2G-32768 - |1: - | cmpwi CARG1, 0 - | blt >3 // Check for error from exit. - | lwz LFUNC:TMP1, FRAME_FUNC(BASE) - | slwi MULTRES, CARG1, 3 - | li TMP2, 0 - | stw MULTRES, SAVE_MULTRES - | lwz TMP1, LFUNC:TMP1->pc - | stw TMP2, DISPATCH_GL(jit_L)(DISPATCH) - | lwz KBASE, PC2PROTO(k)(TMP1) - | // Setup type comparison constants. - | li TISNUM, LJ_TISNUM - | lus TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | stw TMP3, TMPD - | li ZERO, 0 - | ori TMP3, TMP3, 0x0004 // TONUM = 2^52 + 2^51 + 2^31 (float). - | lfs TOBIT, TMPD - | stw TMP3, TMPD - | lus TMP0, 0x4338 // Hiword of 2^52 + 2^51 (double) - | li TISNIL, LJ_TNIL - | stw TMP0, TONUM_HI - | lfs TONUM, TMPD - | // Modified copy of ins_next which handles function header dispatch, too. - | lwz INS, 0(PC) - | addi PC, PC, 4 - | // Assumes TISNIL == ~LJ_VMST_INTERP == -1. - | stw TISNIL, DISPATCH_GL(vmstate)(DISPATCH) - | decode_OPP TMP1, INS - | decode_RA8 RA, INS - | lpx TMP0, DISPATCH, TMP1 - | mtctr TMP0 - | cmplwi TMP1, BC_FUNCF*4 // Function header? - | bge >2 - | decode_RB8 RB, INS - | decode_RD8 RD, INS - | decode_RC8 RC, INS - | bctr - |2: - | subi RC, MULTRES, 8 - | add RA, RA, BASE - | bctr - | - |3: // Rethrow error from the right C frame. - | neg CARG2, CARG1 - | mr CARG1, L - | bl extern lj_err_throw // (lua_State *L, int errcode) - |.endif - | - |//----------------------------------------------------------------------- - |//-- Math helper functions ---------------------------------------------- - |//----------------------------------------------------------------------- - | - |// NYI: Use internal implementations of floor, ceil, trunc. - | - |->vm_modi: - | divwo. TMP0, CARG1, CARG2 - | bso >1 - |.if GPR64 - | xor CARG3, CARG1, CARG2 - | cmpwi CARG3, 0 - |.else - | xor. CARG3, CARG1, CARG2 - |.endif - | mullw TMP0, TMP0, CARG2 - | sub CARG1, CARG1, TMP0 - | bgelr - | cmpwi CARG1, 0; beqlr - | add CARG1, CARG1, CARG2 - | blr - |1: - | cmpwi CARG2, 0 - | li CARG1, 0 - | beqlr - | clrso TMP0 // Clear SO for -2147483648 % -1 and return 0. - | blr - | - |//----------------------------------------------------------------------- - |//-- Miscellaneous functions -------------------------------------------- - |//----------------------------------------------------------------------- - | - |// void lj_vm_cachesync(void *start, void *end) - |// Flush D-Cache and invalidate I-Cache. Assumes 32 byte cache line size. - |// This is a good lower bound, except for very ancient PPC models. - |->vm_cachesync: - |.if JIT or FFI - | // Compute start of first cache line and number of cache lines. - | rlwinm CARG1, CARG1, 0, 0, 26 - | sub CARG2, CARG2, CARG1 - | addi CARG2, CARG2, 31 - | rlwinm. CARG2, CARG2, 27, 5, 31 - | beqlr - | mtctr CARG2 - | mr CARG3, CARG1 - |1: // Flush D-Cache. - | dcbst r0, CARG1 - | addi CARG1, CARG1, 32 - | bdnz <1 - | sync - | mtctr CARG2 - |1: // Invalidate I-Cache. - | icbi r0, CARG3 - | addi CARG3, CARG3, 32 - | bdnz <1 - | isync - | blr - |.endif - | - |//----------------------------------------------------------------------- - |//-- FFI helper functions ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |// Handler for callback functions. Callback slot number in r11, g in r12. - |->vm_ffi_callback: - |.if FFI - |.type CTSTATE, CTState, PC - | saveregs - | lwz CTSTATE, GL:r12->ctype_state - | addi DISPATCH, r12, GG_G2DISP - | stw r11, CTSTATE->cb.slot - | stw r3, CTSTATE->cb.gpr[0] - | stfd f1, CTSTATE->cb.fpr[0] - | stw r4, CTSTATE->cb.gpr[1] - | stfd f2, CTSTATE->cb.fpr[1] - | stw r5, CTSTATE->cb.gpr[2] - | stfd f3, CTSTATE->cb.fpr[2] - | stw r6, CTSTATE->cb.gpr[3] - | stfd f4, CTSTATE->cb.fpr[3] - | stw r7, CTSTATE->cb.gpr[4] - | stfd f5, CTSTATE->cb.fpr[4] - | stw r8, CTSTATE->cb.gpr[5] - | stfd f6, CTSTATE->cb.fpr[5] - | stw r9, CTSTATE->cb.gpr[6] - | stfd f7, CTSTATE->cb.fpr[6] - | stw r10, CTSTATE->cb.gpr[7] - | stfd f8, CTSTATE->cb.fpr[7] - | addi TMP0, sp, CFRAME_SPACE+8 - | stw TMP0, CTSTATE->cb.stack - | mr CARG1, CTSTATE - | stw CTSTATE, SAVE_PC // Any value outside of bytecode is ok. - | mr CARG2, sp - | bl extern lj_ccallback_enter // (CTState *cts, void *cf) - | // Returns lua_State *. - | lp BASE, L:CRET1->base - | li TISNUM, LJ_TISNUM // Setup type comparison constants. - | lp RC, L:CRET1->top - | lus TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). - | li ZERO, 0 - | mr L, CRET1 - | stw TMP3, TMPD - | lus TMP0, 0x4338 // Hiword of 2^52 + 2^51 (double) - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | ori TMP3, TMP3, 0x0004 // TONUM = 2^52 + 2^51 + 2^31 (float). - | stw TMP0, TONUM_HI - | li TISNIL, LJ_TNIL - | li_vmstate INTERP - | lfs TOBIT, TMPD - | stw TMP3, TMPD - | sub RC, RC, BASE - | st_vmstate - | lfs TONUM, TMPD - | ins_callt - |.endif - | - |->cont_ffi_callback: // Return from FFI callback. - |.if FFI - | lwz CTSTATE, DISPATCH_GL(ctype_state)(DISPATCH) - | stp BASE, L->base - | stp RB, L->top - | stp L, CTSTATE->L - | mr CARG1, CTSTATE - | mr CARG2, RA - | bl extern lj_ccallback_leave // (CTState *cts, TValue *o) - | lwz CRET1, CTSTATE->cb.gpr[0] - | lfd FARG1, CTSTATE->cb.fpr[0] - | lwz CRET2, CTSTATE->cb.gpr[1] - | b ->vm_leave_unw - |.endif - | - |->vm_ffi_call: // Call C function via FFI. - | // Caveat: needs special frame unwinding, see below. - |.if FFI - | .type CCSTATE, CCallState, CARG1 - | lwz TMP1, CCSTATE->spadj - | mflr TMP0 - | lbz CARG2, CCSTATE->nsp - | lbz CARG3, CCSTATE->nfpr - | neg TMP1, TMP1 - | stw TMP0, 4(sp) - | cmpwi cr1, CARG3, 0 - | mr TMP2, sp - | addic. CARG2, CARG2, -1 - | stwux sp, sp, TMP1 - | crnot 4*cr1+eq, 4*cr1+eq // For vararg calls. - | stw r14, -4(TMP2) - | stw CCSTATE, -8(TMP2) - | mr r14, TMP2 - | la TMP1, CCSTATE->stack - | slwi CARG2, CARG2, 2 - | blty >2 - | la TMP2, 8(sp) - |1: - | lwzx TMP0, TMP1, CARG2 - | stwx TMP0, TMP2, CARG2 - | addic. CARG2, CARG2, -4 - | bge <1 - |2: - | bney cr1, >3 - | lfd f1, CCSTATE->fpr[0] - | lfd f2, CCSTATE->fpr[1] - | lfd f3, CCSTATE->fpr[2] - | lfd f4, CCSTATE->fpr[3] - | lfd f5, CCSTATE->fpr[4] - | lfd f6, CCSTATE->fpr[5] - | lfd f7, CCSTATE->fpr[6] - | lfd f8, CCSTATE->fpr[7] - |3: - | lp TMP0, CCSTATE->func - | lwz CARG2, CCSTATE->gpr[1] - | lwz CARG3, CCSTATE->gpr[2] - | lwz CARG4, CCSTATE->gpr[3] - | lwz CARG5, CCSTATE->gpr[4] - | mtctr TMP0 - | lwz r8, CCSTATE->gpr[5] - | lwz r9, CCSTATE->gpr[6] - | lwz r10, CCSTATE->gpr[7] - | lwz CARG1, CCSTATE->gpr[0] // Do this last, since CCSTATE is CARG1. - | bctrl - | lwz CCSTATE:TMP1, -8(r14) - | lwz TMP2, -4(r14) - | lwz TMP0, 4(r14) - | stw CARG1, CCSTATE:TMP1->gpr[0] - | stfd FARG1, CCSTATE:TMP1->fpr[0] - | stw CARG2, CCSTATE:TMP1->gpr[1] - | mtlr TMP0 - | stw CARG3, CCSTATE:TMP1->gpr[2] - | mr sp, r14 - | stw CARG4, CCSTATE:TMP1->gpr[3] - | mr r14, TMP2 - | blr - |.endif - |// Note: vm_ffi_call must be the last function in this object file! - | - |//----------------------------------------------------------------------- -} - -/* Generate the code for a single instruction. */ -static void build_ins(BuildCtx *ctx, BCOp op, int defop) -{ - int vk = 0; - |=>defop: - - switch (op) { - - /* -- Comparison ops ---------------------------------------------------- */ - - /* Remember: all ops branch for a true comparison, fall through otherwise. */ - - case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - | // RA = src1*8, RD = src2*8, JMP with RD = target - |.if DUALNUM - | lwzux TMP0, RA, BASE - | addi PC, PC, 4 - | lwz CARG2, 4(RA) - | lwzux TMP1, RD, BASE - | lwz TMP2, -4(PC) - | checknum cr0, TMP0 - | lwz CARG3, 4(RD) - | decode_RD4 TMP2, TMP2 - | checknum cr1, TMP1 - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | bne cr0, >7 - | bne cr1, >8 - | cmpw CARG2, CARG3 - if (op == BC_ISLT) { - | bge >2 - } else if (op == BC_ISGE) { - | blt >2 - } else if (op == BC_ISLE) { - | bgt >2 - } else { - | ble >2 - } - |1: - | add PC, PC, TMP2 - |2: - | ins_next - | - |7: // RA is not an integer. - | bgt cr0, ->vmeta_comp - | // RA is a number. - | lfd f0, 0(RA) - | bgt cr1, ->vmeta_comp - | blt cr1, >4 - | // RA is a number, RD is an integer. - | tonum_i f1, CARG3 - | b >5 - | - |8: // RA is an integer, RD is not an integer. - | bgt cr1, ->vmeta_comp - | // RA is an integer, RD is a number. - | tonum_i f0, CARG2 - |4: - | lfd f1, 0(RD) - |5: - | fcmpu cr0, f0, f1 - if (op == BC_ISLT) { - | bge <2 - } else if (op == BC_ISGE) { - | blt <2 - } else if (op == BC_ISLE) { - | cror 4*cr0+lt, 4*cr0+lt, 4*cr0+eq - | bge <2 - } else { - | cror 4*cr0+lt, 4*cr0+lt, 4*cr0+eq - | blt <2 - } - | b <1 - |.else - | lwzx TMP0, BASE, RA - | addi PC, PC, 4 - | lfdx f0, BASE, RA - | lwzx TMP1, BASE, RD - | checknum cr0, TMP0 - | lwz TMP2, -4(PC) - | lfdx f1, BASE, RD - | checknum cr1, TMP1 - | decode_RD4 TMP2, TMP2 - | bge cr0, ->vmeta_comp - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | bge cr1, ->vmeta_comp - | fcmpu cr0, f0, f1 - if (op == BC_ISLT) { - | bge >1 - } else if (op == BC_ISGE) { - | blt >1 - } else if (op == BC_ISLE) { - | cror 4*cr0+lt, 4*cr0+lt, 4*cr0+eq - | bge >1 - } else { - | cror 4*cr0+lt, 4*cr0+lt, 4*cr0+eq - | blt >1 - } - | add PC, PC, TMP2 - |1: - | ins_next - |.endif - break; - - case BC_ISEQV: case BC_ISNEV: - vk = op == BC_ISEQV; - | // RA = src1*8, RD = src2*8, JMP with RD = target - |.if DUALNUM - | lwzux TMP0, RA, BASE - | addi PC, PC, 4 - | lwz CARG2, 4(RA) - | lwzux TMP1, RD, BASE - | checknum cr0, TMP0 - | lwz TMP2, -4(PC) - | checknum cr1, TMP1 - | decode_RD4 TMP2, TMP2 - | lwz CARG3, 4(RD) - | cror 4*cr7+gt, 4*cr0+gt, 4*cr1+gt - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - if (vk) { - | ble cr7, ->BC_ISEQN_Z - } else { - | ble cr7, ->BC_ISNEN_Z - } - |.else - | lwzux TMP0, RA, BASE - | lwz TMP2, 0(PC) - | lfd f0, 0(RA) - | addi PC, PC, 4 - | lwzux TMP1, RD, BASE - | checknum cr0, TMP0 - | decode_RD4 TMP2, TMP2 - | lfd f1, 0(RD) - | checknum cr1, TMP1 - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | bge cr0, >5 - | bge cr1, >5 - | fcmpu cr0, f0, f1 - if (vk) { - | bne >1 - | add PC, PC, TMP2 - } else { - | beq >1 - | add PC, PC, TMP2 - } - |1: - | ins_next - |.endif - |5: // Either or both types are not numbers. - |.if not DUALNUM - | lwz CARG2, 4(RA) - | lwz CARG3, 4(RD) - |.endif - |.if FFI - | cmpwi cr7, TMP0, LJ_TCDATA - | cmpwi cr5, TMP1, LJ_TCDATA - |.endif - | not TMP3, TMP0 - | cmplw TMP0, TMP1 - | cmplwi cr1, TMP3, ~LJ_TISPRI // Primitive? - |.if FFI - | cror 4*cr7+eq, 4*cr7+eq, 4*cr5+eq - |.endif - | cmplwi cr6, TMP3, ~LJ_TISTABUD // Table or userdata? - |.if FFI - | beq cr7, ->vmeta_equal_cd - |.endif - | cmplw cr5, CARG2, CARG3 - | crandc 4*cr0+gt, 4*cr0+eq, 4*cr1+gt // 2: Same type and primitive. - | crorc 4*cr0+lt, 4*cr5+eq, 4*cr0+eq // 1: Same tv or different type. - | crand 4*cr0+eq, 4*cr0+eq, 4*cr5+eq // 0: Same type and same tv. - | mr SAVE0, PC - | cror 4*cr0+eq, 4*cr0+eq, 4*cr0+gt // 0 or 2. - | cror 4*cr0+lt, 4*cr0+lt, 4*cr0+gt // 1 or 2. - if (vk) { - | bne cr0, >6 - | add PC, PC, TMP2 - |6: - } else { - | beq cr0, >6 - | add PC, PC, TMP2 - |6: - } - |.if DUALNUM - | bge cr0, >2 // Done if 1 or 2. - |1: - | ins_next - |2: - |.else - | blt cr0, <1 // Done if 1 or 2. - |.endif - | blt cr6, <1 // Done if not tab/ud. - | - | // Different tables or userdatas. Need to check __eq metamethod. - | // Field metatable must be at same offset for GCtab and GCudata! - | lwz TAB:TMP2, TAB:CARG2->metatable - | li CARG4, 1-vk // ne = 0 or 1. - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable? - | lbz TMP2, TAB:TMP2->nomm - | andix. TMP2, TMP2, 1<vmeta_equal // Handle __eq metamethod. - break; - - case BC_ISEQS: case BC_ISNES: - vk = op == BC_ISEQS; - | // RA = src*8, RD = str_const*8 (~), JMP with RD = target - | lwzux TMP0, RA, BASE - | srwi RD, RD, 1 - | lwz STR:TMP3, 4(RA) - | lwz TMP2, 0(PC) - | subfic RD, RD, -4 - | addi PC, PC, 4 - |.if FFI - | cmpwi TMP0, LJ_TCDATA - |.endif - | lwzx STR:TMP1, KBASE, RD // KBASE-4-str_const*4 - | .gpr64 extsw TMP0, TMP0 - | subfic TMP0, TMP0, LJ_TSTR - |.if FFI - | beq ->vmeta_equal_cd - |.endif - | sub TMP1, STR:TMP1, STR:TMP3 - | or TMP0, TMP0, TMP1 - | decode_RD4 TMP2, TMP2 - | subfic TMP0, TMP0, 0 - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | subfe TMP1, TMP1, TMP1 - if (vk) { - | andc TMP2, TMP2, TMP1 - } else { - | and TMP2, TMP2, TMP1 - } - | add PC, PC, TMP2 - | ins_next - break; - - case BC_ISEQN: case BC_ISNEN: - vk = op == BC_ISEQN; - | // RA = src*8, RD = num_const*8, JMP with RD = target - |.if DUALNUM - | lwzux TMP0, RA, BASE - | addi PC, PC, 4 - | lwz CARG2, 4(RA) - | lwzux TMP1, RD, KBASE - | checknum cr0, TMP0 - | lwz TMP2, -4(PC) - | checknum cr1, TMP1 - | decode_RD4 TMP2, TMP2 - | lwz CARG3, 4(RD) - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - if (vk) { - |->BC_ISEQN_Z: - } else { - |->BC_ISNEN_Z: - } - | bne cr0, >7 - | bne cr1, >8 - | cmpw CARG2, CARG3 - |4: - |.else - if (vk) { - |->BC_ISEQN_Z: // Dummy label. - } else { - |->BC_ISNEN_Z: // Dummy label. - } - | lwzx TMP0, BASE, RA - | addi PC, PC, 4 - | lfdx f0, BASE, RA - | lwz TMP2, -4(PC) - | lfdx f1, KBASE, RD - | decode_RD4 TMP2, TMP2 - | checknum TMP0 - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | bge >3 - | fcmpu cr0, f0, f1 - |.endif - if (vk) { - | bne >1 - | add PC, PC, TMP2 - |1: - |.if not FFI - |3: - |.endif - } else { - | beq >2 - |1: - |.if not FFI - |3: - |.endif - | add PC, PC, TMP2 - |2: - } - | ins_next - |.if FFI - |3: - | cmpwi TMP0, LJ_TCDATA - | beq ->vmeta_equal_cd - | b <1 - |.endif - |.if DUALNUM - |7: // RA is not an integer. - | bge cr0, <3 - | // RA is a number. - | lfd f0, 0(RA) - | blt cr1, >1 - | // RA is a number, RD is an integer. - | tonum_i f1, CARG3 - | b >2 - | - |8: // RA is an integer, RD is a number. - | tonum_i f0, CARG2 - |1: - | lfd f1, 0(RD) - |2: - | fcmpu cr0, f0, f1 - | b <4 - |.endif - break; - - case BC_ISEQP: case BC_ISNEP: - vk = op == BC_ISEQP; - | // RA = src*8, RD = primitive_type*8 (~), JMP with RD = target - | lwzx TMP0, BASE, RA - | srwi TMP1, RD, 3 - | lwz TMP2, 0(PC) - | not TMP1, TMP1 - | addi PC, PC, 4 - |.if FFI - | cmpwi TMP0, LJ_TCDATA - |.endif - | sub TMP0, TMP0, TMP1 - |.if FFI - | beq ->vmeta_equal_cd - |.endif - | decode_RD4 TMP2, TMP2 - | .gpr64 extsw TMP0, TMP0 - | addic TMP0, TMP0, -1 - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - | subfe TMP1, TMP1, TMP1 - if (vk) { - | and TMP2, TMP2, TMP1 - } else { - | andc TMP2, TMP2, TMP1 - } - | add PC, PC, TMP2 - | ins_next - break; - - /* -- Unary test and copy ops ------------------------------------------- */ - - case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - | // RA = dst*8 or unused, RD = src*8, JMP with RD = target - | lwzx TMP0, BASE, RD - | lwz INS, 0(PC) - | addi PC, PC, 4 - if (op == BC_IST || op == BC_ISF) { - | .gpr64 extsw TMP0, TMP0 - | subfic TMP0, TMP0, LJ_TTRUE - | decode_RD4 TMP2, INS - | subfe TMP1, TMP1, TMP1 - | addis TMP2, TMP2, -(BCBIAS_J*4 >> 16) - if (op == BC_IST) { - | andc TMP2, TMP2, TMP1 - } else { - | and TMP2, TMP2, TMP1 - } - | add PC, PC, TMP2 - } else { - | li TMP1, LJ_TFALSE - | lfdx f0, BASE, RD - | cmplw TMP0, TMP1 - if (op == BC_ISTC) { - | bge >1 - } else { - | blt >1 - } - | addis PC, PC, -(BCBIAS_J*4 >> 16) - | decode_RD4 TMP2, INS - | stfdx f0, BASE, RA - | add PC, PC, TMP2 - |1: - } - | ins_next - break; - - /* -- Unary ops --------------------------------------------------------- */ - - case BC_MOV: - | // RA = dst*8, RD = src*8 - | ins_next1 - | lfdx f0, BASE, RD - | stfdx f0, BASE, RA - | ins_next2 - break; - case BC_NOT: - | // RA = dst*8, RD = src*8 - | ins_next1 - | lwzx TMP0, BASE, RD - | .gpr64 extsw TMP0, TMP0 - | subfic TMP1, TMP0, LJ_TTRUE - | adde TMP0, TMP0, TMP1 - | stwx TMP0, BASE, RA - | ins_next2 - break; - case BC_UNM: - | // RA = dst*8, RD = src*8 - | lwzux TMP1, RD, BASE - | lwz TMP0, 4(RD) - | checknum TMP1 - |.if DUALNUM - | bne >5 - |.if GPR64 - | lus TMP2, 0x8000 - | neg TMP0, TMP0 - | cmplw TMP0, TMP2 - | beq >4 - |.else - | nego. TMP0, TMP0 - | bso >4 - |1: - |.endif - | ins_next1 - | stwux TISNUM, RA, BASE - | stw TMP0, 4(RA) - |3: - | ins_next2 - |4: - |.if not GPR64 - | // Potential overflow. - | checkov TMP1, <1 // Ignore unrelated overflow. - |.endif - | lus TMP1, 0x41e0 // 2^31. - | li TMP0, 0 - | b >7 - |.endif - |5: - | bge ->vmeta_unm - | xoris TMP1, TMP1, 0x8000 - |7: - | ins_next1 - | stwux TMP1, RA, BASE - | stw TMP0, 4(RA) - |.if DUALNUM - | b <3 - |.else - | ins_next2 - |.endif - break; - case BC_LEN: - | // RA = dst*8, RD = src*8 - | lwzux TMP0, RD, BASE - | lwz CARG1, 4(RD) - | checkstr TMP0; bne >2 - | lwz CRET1, STR:CARG1->len - |1: - |.if DUALNUM - | ins_next1 - | stwux TISNUM, RA, BASE - | stw CRET1, 4(RA) - |.else - | tonum_u f0, CRET1 // Result is a non-negative integer. - | ins_next1 - | stfdx f0, BASE, RA - |.endif - | ins_next2 - |2: - | checktab TMP0; bne ->vmeta_len -#if LJ_52 - | lwz TAB:TMP2, TAB:CARG1->metatable - | cmplwi TAB:TMP2, 0 - | bne >9 - |3: -#endif - |->BC_LEN_Z: - | bl extern lj_tab_len // (GCtab *t) - | // Returns uint32_t (but less than 2^31). - | b <1 -#if LJ_52 - |9: - | lbz TMP0, TAB:TMP2->nomm - | andix. TMP0, TMP0, 1<vmeta_len -#endif - break; - - /* -- Binary ops -------------------------------------------------------- */ - - |.macro ins_arithpre - | // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8 - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - ||switch (vk) { - ||case 0: - | lwzx TMP1, BASE, RB - | .if DUALNUM - | lwzx TMP2, KBASE, RC - | .endif - | lfdx f14, BASE, RB - | lfdx f15, KBASE, RC - | .if DUALNUM - | checknum cr0, TMP1 - | checknum cr1, TMP2 - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | bge ->vmeta_arith_vn - | .else - | checknum TMP1; bge ->vmeta_arith_vn - | .endif - || break; - ||case 1: - | lwzx TMP1, BASE, RB - | .if DUALNUM - | lwzx TMP2, KBASE, RC - | .endif - | lfdx f15, BASE, RB - | lfdx f14, KBASE, RC - | .if DUALNUM - | checknum cr0, TMP1 - | checknum cr1, TMP2 - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | bge ->vmeta_arith_nv - | .else - | checknum TMP1; bge ->vmeta_arith_nv - | .endif - || break; - ||default: - | lwzx TMP1, BASE, RB - | lwzx TMP2, BASE, RC - | lfdx f14, BASE, RB - | lfdx f15, BASE, RC - | checknum cr0, TMP1 - | checknum cr1, TMP2 - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | bge ->vmeta_arith_vv - || break; - ||} - |.endmacro - | - |.macro ins_arithfallback, ins - ||switch (vk) { - ||case 0: - | ins ->vmeta_arith_vn2 - || break; - ||case 1: - | ins ->vmeta_arith_nv2 - || break; - ||default: - | ins ->vmeta_arith_vv2 - || break; - ||} - |.endmacro - | - |.macro intmod, a, b, c - | bl ->vm_modi - |.endmacro - | - |.macro fpmod, a, b, c - |->BC_MODVN_Z: - | fdiv FARG1, b, c - | // NYI: Use internal implementation of floor. - | blex floor // floor(b/c) - | fmul a, FARG1, c - | fsub a, b, a // b - floor(b/c)*c - |.endmacro - | - |.macro ins_arithfp, fpins - | ins_arithpre - |.if "fpins" == "fpmod_" - | b ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. - |.else - | fpins f0, f14, f15 - | ins_next1 - | stfdx f0, BASE, RA - | ins_next2 - |.endif - |.endmacro - | - |.macro ins_arithdn, intins, fpins - | // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8 - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - ||switch (vk) { - ||case 0: - | lwzux TMP1, RB, BASE - | lwzux TMP2, RC, KBASE - | lwz CARG1, 4(RB) - | checknum cr0, TMP1 - | lwz CARG2, 4(RC) - || break; - ||case 1: - | lwzux TMP1, RB, BASE - | lwzux TMP2, RC, KBASE - | lwz CARG2, 4(RB) - | checknum cr0, TMP1 - | lwz CARG1, 4(RC) - || break; - ||default: - | lwzux TMP1, RB, BASE - | lwzux TMP2, RC, BASE - | lwz CARG1, 4(RB) - | checknum cr0, TMP1 - | lwz CARG2, 4(RC) - || break; - ||} - | checknum cr1, TMP2 - | bne >5 - | bne cr1, >5 - | intins CARG1, CARG1, CARG2 - | bso >4 - |1: - | ins_next1 - | stwux TISNUM, RA, BASE - | stw CARG1, 4(RA) - |2: - | ins_next2 - |4: // Overflow. - | checkov TMP0, <1 // Ignore unrelated overflow. - | ins_arithfallback b - |5: // FP variant. - ||if (vk == 1) { - | lfd f15, 0(RB) - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | lfd f14, 0(RC) - ||} else { - | lfd f14, 0(RB) - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | lfd f15, 0(RC) - ||} - | ins_arithfallback bge - |.if "fpins" == "fpmod_" - | b ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. - |.else - | fpins f0, f14, f15 - | ins_next1 - | stfdx f0, BASE, RA - | b <2 - |.endif - |.endmacro - | - |.macro ins_arith, intins, fpins - |.if DUALNUM - | ins_arithdn intins, fpins - |.else - | ins_arithfp fpins - |.endif - |.endmacro - - case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - |.if GPR64 - |.macro addo32., y, a, b - | // Need to check overflow for (a<<32) + (b<<32). - | rldicr TMP0, a, 32, 31 - | rldicr TMP3, b, 32, 31 - | addo. TMP0, TMP0, TMP3 - | add y, a, b - |.endmacro - | ins_arith addo32., fadd - |.else - | ins_arith addo., fadd - |.endif - break; - case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - |.if GPR64 - |.macro subo32., y, a, b - | // Need to check overflow for (a<<32) - (b<<32). - | rldicr TMP0, a, 32, 31 - | rldicr TMP3, b, 32, 31 - | subo. TMP0, TMP0, TMP3 - | sub y, a, b - |.endmacro - | ins_arith subo32., fsub - |.else - | ins_arith subo., fsub - |.endif - break; - case BC_MULVN: case BC_MULNV: case BC_MULVV: - | ins_arith mullwo., fmul - break; - case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - | ins_arithfp fdiv - break; - case BC_MODVN: - | ins_arith intmod, fpmod - break; - case BC_MODNV: case BC_MODVV: - | ins_arith intmod, fpmod_ - break; - case BC_POW: - | // NYI: (partial) integer arithmetic. - | lwzx TMP1, BASE, RB - | lfdx FARG1, BASE, RB - | lwzx TMP2, BASE, RC - | lfdx FARG2, BASE, RC - | checknum cr0, TMP1 - | checknum cr1, TMP2 - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | bge ->vmeta_arith_vv - | blex pow - | ins_next1 - | stfdx FARG1, BASE, RA - | ins_next2 - break; - - case BC_CAT: - | // RA = dst*8, RB = src_start*8, RC = src_end*8 - | sub CARG3, RC, RB - | stp BASE, L->base - | add CARG2, BASE, RC - | mr SAVE0, RB - |->BC_CAT_Z: - | stw PC, SAVE_PC - | mr CARG1, L - | srwi CARG3, CARG3, 3 - | bl extern lj_meta_cat // (lua_State *L, TValue *top, int left) - | // Returns NULL (finished) or TValue * (metamethod). - | cmplwi CRET1, 0 - | lp BASE, L->base - | bne ->vmeta_binop - | ins_next1 - | lfdx f0, BASE, SAVE0 // Copy result from RB to RA. - | stfdx f0, BASE, RA - | ins_next2 - break; - - /* -- Constant ops ------------------------------------------------------ */ - - case BC_KSTR: - | // RA = dst*8, RD = str_const*8 (~) - | srwi TMP1, RD, 1 - | subfic TMP1, TMP1, -4 - | ins_next1 - | lwzx TMP0, KBASE, TMP1 // KBASE-4-str_const*4 - | li TMP2, LJ_TSTR - | stwux TMP2, RA, BASE - | stw TMP0, 4(RA) - | ins_next2 - break; - case BC_KCDATA: - |.if FFI - | // RA = dst*8, RD = cdata_const*8 (~) - | srwi TMP1, RD, 1 - | subfic TMP1, TMP1, -4 - | ins_next1 - | lwzx TMP0, KBASE, TMP1 // KBASE-4-cdata_const*4 - | li TMP2, LJ_TCDATA - | stwux TMP2, RA, BASE - | stw TMP0, 4(RA) - | ins_next2 - |.endif - break; - case BC_KSHORT: - | // RA = dst*8, RD = int16_literal*8 - |.if DUALNUM - | slwi RD, RD, 13 - | srawi RD, RD, 16 - | ins_next1 - | stwux TISNUM, RA, BASE - | stw RD, 4(RA) - | ins_next2 - |.else - | // The soft-float approach is faster. - | slwi RD, RD, 13 - | srawi TMP1, RD, 31 - | xor TMP2, TMP1, RD - | sub TMP2, TMP2, TMP1 // TMP2 = abs(x) - | cntlzw TMP3, TMP2 - | subfic TMP1, TMP3, 0x40d // TMP1 = exponent-1 - | slw TMP2, TMP2, TMP3 // TMP2 = left aligned mantissa - | subfic TMP3, RD, 0 - | slwi TMP1, TMP1, 20 - | rlwimi RD, TMP2, 21, 1, 31 // hi = sign(x) | (mantissa>>11) - | subfe TMP0, TMP0, TMP0 - | add RD, RD, TMP1 // hi = hi + exponent-1 - | and RD, RD, TMP0 // hi = x == 0 ? 0 : hi - | ins_next1 - | stwux RD, RA, BASE - | stw ZERO, 4(RA) - | ins_next2 - |.endif - break; - case BC_KNUM: - | // RA = dst*8, RD = num_const*8 - | ins_next1 - | lfdx f0, KBASE, RD - | stfdx f0, BASE, RA - | ins_next2 - break; - case BC_KPRI: - | // RA = dst*8, RD = primitive_type*8 (~) - | srwi TMP1, RD, 3 - | not TMP0, TMP1 - | ins_next1 - | stwx TMP0, BASE, RA - | ins_next2 - break; - case BC_KNIL: - | // RA = base*8, RD = end*8 - | stwx TISNIL, BASE, RA - | addi RA, RA, 8 - |1: - | stwx TISNIL, BASE, RA - | cmpw RA, RD - | addi RA, RA, 8 - | blt <1 - | ins_next_ - break; - - /* -- Upvalue and function ops ------------------------------------------ */ - - case BC_UGET: - | // RA = dst*8, RD = uvnum*8 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RD, RD, 1 - | addi RD, RD, offsetof(GCfuncL, uvptr) - | lwzx UPVAL:RB, LFUNC:RB, RD - | ins_next1 - | lwz TMP1, UPVAL:RB->v - | lfd f0, 0(TMP1) - | stfdx f0, BASE, RA - | ins_next2 - break; - case BC_USETV: - | // RA = uvnum*8, RD = src*8 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RA, RA, 1 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | lfdux f0, RD, BASE - | lwzx UPVAL:RB, LFUNC:RB, RA - | lbz TMP3, UPVAL:RB->marked - | lwz CARG2, UPVAL:RB->v - | andix. TMP3, TMP3, LJ_GC_BLACK // isblack(uv) - | lbz TMP0, UPVAL:RB->closed - | lwz TMP2, 0(RD) - | stfd f0, 0(CARG2) - | cmplwi cr1, TMP0, 0 - | lwz TMP1, 4(RD) - | cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq - | subi TMP2, TMP2, (LJ_TNUMX+1) - | bne >2 // Upvalue is closed and black? - |1: - | ins_next - | - |2: // Check if new value is collectable. - | cmplwi TMP2, LJ_TISGCV - (LJ_TNUMX+1) - | bge <1 // tvisgcv(v) - | lbz TMP3, GCOBJ:TMP1->gch.marked - | andix. TMP3, TMP3, LJ_GC_WHITES // iswhite(v) - | la CARG1, GG_DISP2G(DISPATCH) - | // Crossed a write barrier. Move the barrier forward. - | beq <1 - | bl extern lj_gc_barrieruv // (global_State *g, TValue *tv) - | b <1 - break; - case BC_USETS: - | // RA = uvnum*8, RD = str_const*8 (~) - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi TMP1, RD, 1 - | srwi RA, RA, 1 - | subfic TMP1, TMP1, -4 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | lwzx STR:TMP1, KBASE, TMP1 // KBASE-4-str_const*4 - | lwzx UPVAL:RB, LFUNC:RB, RA - | lbz TMP3, UPVAL:RB->marked - | lwz CARG2, UPVAL:RB->v - | andix. TMP3, TMP3, LJ_GC_BLACK // isblack(uv) - | lbz TMP3, STR:TMP1->marked - | lbz TMP2, UPVAL:RB->closed - | li TMP0, LJ_TSTR - | stw STR:TMP1, 4(CARG2) - | stw TMP0, 0(CARG2) - | bne >2 - |1: - | ins_next - | - |2: // Check if string is white and ensure upvalue is closed. - | andix. TMP3, TMP3, LJ_GC_WHITES // iswhite(str) - | cmplwi cr1, TMP2, 0 - | cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq - | la CARG1, GG_DISP2G(DISPATCH) - | // Crossed a write barrier. Move the barrier forward. - | beq <1 - | bl extern lj_gc_barrieruv // (global_State *g, TValue *tv) - | b <1 - break; - case BC_USETN: - | // RA = uvnum*8, RD = num_const*8 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RA, RA, 1 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | lfdx f0, KBASE, RD - | lwzx UPVAL:RB, LFUNC:RB, RA - | ins_next1 - | lwz TMP1, UPVAL:RB->v - | stfd f0, 0(TMP1) - | ins_next2 - break; - case BC_USETP: - | // RA = uvnum*8, RD = primitive_type*8 (~) - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RA, RA, 1 - | srwi TMP0, RD, 3 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | not TMP0, TMP0 - | lwzx UPVAL:RB, LFUNC:RB, RA - | ins_next1 - | lwz TMP1, UPVAL:RB->v - | stw TMP0, 0(TMP1) - | ins_next2 - break; - - case BC_UCLO: - | // RA = level*8, RD = target - | lwz TMP1, L->openupval - | branch_RD // Do this first since RD is not saved. - | stp BASE, L->base - | cmplwi TMP1, 0 - | mr CARG1, L - | beq >1 - | add CARG2, BASE, RA - | bl extern lj_func_closeuv // (lua_State *L, TValue *level) - | lp BASE, L->base - |1: - | ins_next - break; - - case BC_FNEW: - | // RA = dst*8, RD = proto_const*8 (~) (holding function prototype) - | srwi TMP1, RD, 1 - | stp BASE, L->base - | subfic TMP1, TMP1, -4 - | stw PC, SAVE_PC - | lwzx CARG2, KBASE, TMP1 // KBASE-4-tab_const*4 - | mr CARG1, L - | lwz CARG3, FRAME_FUNC(BASE) - | // (lua_State *L, GCproto *pt, GCfuncL *parent) - | bl extern lj_func_newL_gc - | // Returns GCfuncL *. - | lp BASE, L->base - | li TMP0, LJ_TFUNC - | stwux TMP0, RA, BASE - | stw LFUNC:CRET1, 4(RA) - | ins_next - break; - - /* -- Table ops --------------------------------------------------------- */ - - case BC_TNEW: - case BC_TDUP: - | // RA = dst*8, RD = (hbits|asize)*8 | tab_const*8 (~) - | lwz TMP0, DISPATCH_GL(gc.total)(DISPATCH) - | mr CARG1, L - | lwz TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) - | stp BASE, L->base - | cmplw TMP0, TMP1 - | stw PC, SAVE_PC - | bge >5 - |1: - if (op == BC_TNEW) { - | rlwinm CARG2, RD, 29, 21, 31 - | rlwinm CARG3, RD, 18, 27, 31 - | cmpwi CARG2, 0x7ff; beq >3 - |2: - | bl extern lj_tab_new // (lua_State *L, int32_t asize, uint32_t hbits) - | // Returns Table *. - } else { - | srwi TMP1, RD, 1 - | subfic TMP1, TMP1, -4 - | lwzx CARG2, KBASE, TMP1 // KBASE-4-tab_const*4 - | bl extern lj_tab_dup // (lua_State *L, Table *kt) - | // Returns Table *. - } - | lp BASE, L->base - | li TMP0, LJ_TTAB - | stwux TMP0, RA, BASE - | stw TAB:CRET1, 4(RA) - | ins_next - if (op == BC_TNEW) { - |3: - | li CARG2, 0x801 - | b <2 - } - |5: - | mr SAVE0, RD - | bl extern lj_gc_step_fixtop // (lua_State *L) - | mr RD, SAVE0 - | mr CARG1, L - | b <1 - break; - - case BC_GGET: - | // RA = dst*8, RD = str_const*8 (~) - case BC_GSET: - | // RA = src*8, RD = str_const*8 (~) - | lwz LFUNC:TMP2, FRAME_FUNC(BASE) - | srwi TMP1, RD, 1 - | lwz TAB:RB, LFUNC:TMP2->env - | subfic TMP1, TMP1, -4 - | lwzx STR:RC, KBASE, TMP1 // KBASE-4-str_const*4 - if (op == BC_GGET) { - | b ->BC_TGETS_Z - } else { - | b ->BC_TSETS_Z - } - break; - - case BC_TGETV: - | // RA = dst*8, RB = table*8, RC = key*8 - | lwzux CARG1, RB, BASE - | lwzux CARG2, RC, BASE - | lwz TAB:RB, 4(RB) - |.if DUALNUM - | lwz RC, 4(RC) - |.else - | lfd f0, 0(RC) - |.endif - | checktab CARG1 - | checknum cr1, CARG2 - | bne ->vmeta_tgetv - |.if DUALNUM - | lwz TMP0, TAB:RB->asize - | bne cr1, >5 - | lwz TMP1, TAB:RB->array - | cmplw TMP0, RC - | slwi TMP2, RC, 3 - |.else - | bge cr1, >5 - | // Convert number key to integer, check for integerness and range. - | fctiwz f1, f0 - | fadd f2, f0, TOBIT - | stfd f1, TMPD - | lwz TMP0, TAB:RB->asize - | fsub f2, f2, TOBIT - | lwz TMP2, TMPD_LO - | lwz TMP1, TAB:RB->array - | fcmpu cr1, f0, f2 - | cmplw cr0, TMP0, TMP2 - | crand 4*cr0+gt, 4*cr0+gt, 4*cr1+eq - | slwi TMP2, TMP2, 3 - |.endif - | ble ->vmeta_tgetv // Integer key and in array part? - | lwzx TMP0, TMP1, TMP2 - | lfdx f14, TMP1, TMP2 - | checknil TMP0; beq >2 - |1: - | ins_next1 - | stfdx f14, BASE, RA - | ins_next2 - | - |2: // Check for __index if table value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable: done. - | lbz TMP0, TAB:TMP2->nomm - | andix. TMP0, TMP0, 1<vmeta_tgetv - | - |5: - | checkstr CARG2; bne ->vmeta_tgetv - |.if not DUALNUM - | lwz STR:RC, 4(RC) - |.endif - | b ->BC_TGETS_Z // String key? - break; - case BC_TGETS: - | // RA = dst*8, RB = table*8, RC = str_const*8 (~) - | lwzux CARG1, RB, BASE - | srwi TMP1, RC, 1 - | lwz TAB:RB, 4(RB) - | subfic TMP1, TMP1, -4 - | checktab CARG1 - | lwzx STR:RC, KBASE, TMP1 // KBASE-4-str_const*4 - | bne ->vmeta_tgets1 - |->BC_TGETS_Z: - | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = dst*8 - | lwz TMP0, TAB:RB->hmask - | lwz TMP1, STR:RC->hash - | lwz NODE:TMP2, TAB:RB->node - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | slwi TMP0, TMP1, 5 - | slwi TMP1, TMP1, 3 - | sub TMP1, TMP0, TMP1 - | add NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |1: - | lwz CARG1, NODE:TMP2->key - | lwz TMP0, 4+offsetof(Node, key)(NODE:TMP2) - | lwz CARG2, NODE:TMP2->val - | lwz TMP1, 4+offsetof(Node, val)(NODE:TMP2) - | checkstr CARG1; bne >4 - | cmpw TMP0, STR:RC; bne >4 - | checknil CARG2; beq >5 // Key found, but nil value? - |3: - | stwux CARG2, RA, BASE - | stw TMP1, 4(RA) - | ins_next - | - |4: // Follow hash chain. - | lwz NODE:TMP2, NODE:TMP2->next - | cmplwi NODE:TMP2, 0 - | bne <1 - | // End of hash chain: key not found, nil result. - | li CARG2, LJ_TNIL - | - |5: // Check for __index if table value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <3 // No metatable: done. - | lbz TMP0, TAB:TMP2->nomm - | andix. TMP0, TMP0, 1<vmeta_tgets - break; - case BC_TGETB: - | // RA = dst*8, RB = table*8, RC = index*8 - | lwzux CARG1, RB, BASE - | srwi TMP0, RC, 3 - | lwz TAB:RB, 4(RB) - | checktab CARG1; bne ->vmeta_tgetb - | lwz TMP1, TAB:RB->asize - | lwz TMP2, TAB:RB->array - | cmplw TMP0, TMP1; bge ->vmeta_tgetb - | lwzx TMP1, TMP2, RC - | lfdx f0, TMP2, RC - | checknil TMP1; beq >5 - |1: - | ins_next1 - | stfdx f0, BASE, RA - | ins_next2 - | - |5: // Check for __index if table value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable: done. - | lbz TMP2, TAB:TMP2->nomm - | andix. TMP2, TMP2, 1<vmeta_tgetb // Caveat: preserve TMP0! - break; - - case BC_TSETV: - | // RA = src*8, RB = table*8, RC = key*8 - | lwzux CARG1, RB, BASE - | lwzux CARG2, RC, BASE - | lwz TAB:RB, 4(RB) - |.if DUALNUM - | lwz RC, 4(RC) - |.else - | lfd f0, 0(RC) - |.endif - | checktab CARG1 - | checknum cr1, CARG2 - | bne ->vmeta_tsetv - |.if DUALNUM - | lwz TMP0, TAB:RB->asize - | bne cr1, >5 - | lwz TMP1, TAB:RB->array - | cmplw TMP0, RC - | slwi TMP0, RC, 3 - |.else - | bge cr1, >5 - | // Convert number key to integer, check for integerness and range. - | fctiwz f1, f0 - | fadd f2, f0, TOBIT - | stfd f1, TMPD - | lwz TMP0, TAB:RB->asize - | fsub f2, f2, TOBIT - | lwz TMP2, TMPD_LO - | lwz TMP1, TAB:RB->array - | fcmpu cr1, f0, f2 - | cmplw cr0, TMP0, TMP2 - | crand 4*cr0+gt, 4*cr0+gt, 4*cr1+eq - | slwi TMP0, TMP2, 3 - |.endif - | ble ->vmeta_tsetv // Integer key and in array part? - | lwzx TMP2, TMP1, TMP0 - | lbz TMP3, TAB:RB->marked - | lfdx f14, BASE, RA - | checknil TMP2; beq >3 - |1: - | andix. TMP2, TMP3, LJ_GC_BLACK // isblack(table) - | stfdx f14, TMP1, TMP0 - | bne >7 - |2: - | ins_next - | - |3: // Check for __newindex if previous value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable: done. - | lbz TMP2, TAB:TMP2->nomm - | andix. TMP2, TMP2, 1<vmeta_tsetv - | - |5: - | checkstr CARG2; bne ->vmeta_tsetv - |.if not DUALNUM - | lwz STR:RC, 4(RC) - |.endif - | b ->BC_TSETS_Z // String key? - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0 - | b <2 - break; - case BC_TSETS: - | // RA = src*8, RB = table*8, RC = str_const*8 (~) - | lwzux CARG1, RB, BASE - | srwi TMP1, RC, 1 - | lwz TAB:RB, 4(RB) - | subfic TMP1, TMP1, -4 - | checktab CARG1 - | lwzx STR:RC, KBASE, TMP1 // KBASE-4-str_const*4 - | bne ->vmeta_tsets1 - |->BC_TSETS_Z: - | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = src*8 - | lwz TMP0, TAB:RB->hmask - | lwz TMP1, STR:RC->hash - | lwz NODE:TMP2, TAB:RB->node - | stb ZERO, TAB:RB->nomm // Clear metamethod cache. - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | lfdx f14, BASE, RA - | slwi TMP0, TMP1, 5 - | slwi TMP1, TMP1, 3 - | sub TMP1, TMP0, TMP1 - | lbz TMP3, TAB:RB->marked - | add NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |1: - | lwz CARG1, NODE:TMP2->key - | lwz TMP0, 4+offsetof(Node, key)(NODE:TMP2) - | lwz CARG2, NODE:TMP2->val - | lwz NODE:TMP1, NODE:TMP2->next - | checkstr CARG1; bne >5 - | cmpw TMP0, STR:RC; bne >5 - | checknil CARG2; beq >4 // Key found, but nil value? - |2: - | andix. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - | stfd f14, NODE:TMP2->val - | bne >7 - |3: - | ins_next - | - |4: // Check for __newindex if previous value is nil. - | lwz TAB:TMP1, TAB:RB->metatable - | cmplwi TAB:TMP1, 0 - | beq <2 // No metatable: done. - | lbz TMP0, TAB:TMP1->nomm - | andix. TMP0, TMP0, 1<vmeta_tsets - | - |5: // Follow hash chain. - | cmplwi NODE:TMP1, 0 - | mr NODE:TMP2, NODE:TMP1 - | bne <1 - | // End of hash chain: key not found, add a new one. - | - | // But check for __newindex first. - | lwz TAB:TMP1, TAB:RB->metatable - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | stw PC, SAVE_PC - | mr CARG1, L - | cmplwi TAB:TMP1, 0 - | stp BASE, L->base - | beq >6 // No metatable: continue. - | lbz TMP0, TAB:TMP1->nomm - | andix. TMP0, TMP0, 1<vmeta_tsets // 'no __newindex' flag NOT set: check. - |6: - | li TMP0, LJ_TSTR - | stw STR:RC, 4(CARG3) - | mr CARG2, TAB:RB - | stw TMP0, 0(CARG3) - | bl extern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k) - | // Returns TValue *. - | lp BASE, L->base - | stfd f14, 0(CRET1) - | b <3 // No 2nd write barrier needed. - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0 - | b <3 - break; - case BC_TSETB: - | // RA = src*8, RB = table*8, RC = index*8 - | lwzux CARG1, RB, BASE - | srwi TMP0, RC, 3 - | lwz TAB:RB, 4(RB) - | checktab CARG1; bne ->vmeta_tsetb - | lwz TMP1, TAB:RB->asize - | lwz TMP2, TAB:RB->array - | lbz TMP3, TAB:RB->marked - | cmplw TMP0, TMP1 - | lfdx f14, BASE, RA - | bge ->vmeta_tsetb - | lwzx TMP1, TMP2, RC - | checknil TMP1; beq >5 - |1: - | andix. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - | stfdx f14, TMP2, RC - | bne >7 - |2: - | ins_next - | - |5: // Check for __newindex if previous value is nil. - | lwz TAB:TMP1, TAB:RB->metatable - | cmplwi TAB:TMP1, 0 - | beq <1 // No metatable: done. - | lbz TMP1, TAB:TMP1->nomm - | andix. TMP1, TMP1, 1<vmeta_tsetb // Caveat: preserve TMP0! - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0 - | b <2 - break; - - case BC_TSETM: - | // RA = base*8 (table at base-1), RD = num_const*8 (start index) - | add RA, BASE, RA - |1: - | add TMP3, KBASE, RD - | lwz TAB:CARG2, -4(RA) // Guaranteed to be a table. - | addic. TMP0, MULTRES, -8 - | lwz TMP3, 4(TMP3) // Integer constant is in lo-word. - | srwi CARG3, TMP0, 3 - | beq >4 // Nothing to copy? - | add CARG3, CARG3, TMP3 - | lwz TMP2, TAB:CARG2->asize - | slwi TMP1, TMP3, 3 - | lbz TMP3, TAB:CARG2->marked - | cmplw CARG3, TMP2 - | add TMP2, RA, TMP0 - | lwz TMP0, TAB:CARG2->array - | bgt >5 - | add TMP1, TMP1, TMP0 - | andix. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - |3: // Copy result slots to table. - | lfd f0, 0(RA) - | addi RA, RA, 8 - | cmpw cr1, RA, TMP2 - | stfd f0, 0(TMP1) - | addi TMP1, TMP1, 8 - | blt cr1, <3 - | bne >7 - |4: - | ins_next - | - |5: // Need to resize array part. - | stp BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | mr SAVE0, RD - | bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) - | // Must not reallocate the stack. - | mr RD, SAVE0 - | b <1 - | - |7: // Possible table write barrier for any value. Skip valiswhite check. - | barrierback TAB:CARG2, TMP3, TMP0 - | b <4 - break; - - /* -- Calls and vararg handling ----------------------------------------- */ - - case BC_CALLM: - | // RA = base*8, (RB = (nresults+1)*8,) RC = extra_nargs*8 - | add NARGS8:RC, NARGS8:RC, MULTRES - | // Fall through. Assumes BC_CALL follows. - break; - case BC_CALL: - | // RA = base*8, (RB = (nresults+1)*8,) RC = (nargs+1)*8 - | mr TMP2, BASE - | lwzux TMP0, BASE, RA - | lwz LFUNC:RB, 4(BASE) - | subi NARGS8:RC, NARGS8:RC, 8 - | addi BASE, BASE, 8 - | checkfunc TMP0; bne ->vmeta_call - | ins_call - break; - - case BC_CALLMT: - | // RA = base*8, (RB = 0,) RC = extra_nargs*8 - | add NARGS8:RC, NARGS8:RC, MULTRES - | // Fall through. Assumes BC_CALLT follows. - break; - case BC_CALLT: - | // RA = base*8, (RB = 0,) RC = (nargs+1)*8 - | lwzux TMP0, RA, BASE - | lwz LFUNC:RB, 4(RA) - | subi NARGS8:RC, NARGS8:RC, 8 - | lwz TMP1, FRAME_PC(BASE) - | checkfunc TMP0 - | addi RA, RA, 8 - | bne ->vmeta_callt - |->BC_CALLT_Z: - | andix. TMP0, TMP1, FRAME_TYPE // Caveat: preserve cr0 until the crand. - | lbz TMP3, LFUNC:RB->ffid - | xori TMP2, TMP1, FRAME_VARG - | cmplwi cr1, NARGS8:RC, 0 - | bne >7 - |1: - | stw LFUNC:RB, FRAME_FUNC(BASE) // Copy function down, but keep PC. - | li TMP2, 0 - | cmplwi cr7, TMP3, 1 // (> FF_C) Calling a fast function? - | beq cr1, >3 - |2: - | addi TMP3, TMP2, 8 - | lfdx f0, RA, TMP2 - | cmplw cr1, TMP3, NARGS8:RC - | stfdx f0, BASE, TMP2 - | mr TMP2, TMP3 - | bne cr1, <2 - |3: - | crand 4*cr0+eq, 4*cr0+eq, 4*cr7+gt - | beq >5 - |4: - | ins_callt - | - |5: // Tailcall to a fast function with a Lua frame below. - | lwz INS, -4(TMP1) - | decode_RA8 RA, INS - | sub TMP1, BASE, RA - | lwz LFUNC:TMP1, FRAME_FUNC-8(TMP1) - | lwz TMP1, LFUNC:TMP1->pc - | lwz KBASE, PC2PROTO(k)(TMP1) // Need to prepare KBASE. - | b <4 - | - |7: // Tailcall from a vararg function. - | andix. TMP0, TMP2, FRAME_TYPEP - | bne <1 // Vararg frame below? - | sub BASE, BASE, TMP2 // Relocate BASE down. - | lwz TMP1, FRAME_PC(BASE) - | andix. TMP0, TMP1, FRAME_TYPE - | b <1 - break; - - case BC_ITERC: - | // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 ((2+1)*8)) - | mr TMP2, BASE - | add BASE, BASE, RA - | lwz TMP1, -24(BASE) - | lwz LFUNC:RB, -20(BASE) - | lfd f1, -8(BASE) - | lfd f0, -16(BASE) - | stw TMP1, 0(BASE) // Copy callable. - | stw LFUNC:RB, 4(BASE) - | checkfunc TMP1 - | stfd f1, 16(BASE) // Copy control var. - | li NARGS8:RC, 16 // Iterators get 2 arguments. - | stfdu f0, 8(BASE) // Copy state. - | bne ->vmeta_call - | ins_call - break; - - case BC_ITERN: - | // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 (2+1)*8) - |.if JIT - | // NYI: add hotloop, record BC_ITERN. - |.endif - | add RA, BASE, RA - | lwz TAB:RB, -12(RA) - | lwz RC, -4(RA) // Get index from control var. - | lwz TMP0, TAB:RB->asize - | lwz TMP1, TAB:RB->array - | addi PC, PC, 4 - |1: // Traverse array part. - | cmplw RC, TMP0 - | slwi TMP3, RC, 3 - | bge >5 // Index points after array part? - | lwzx TMP2, TMP1, TMP3 - | lfdx f0, TMP1, TMP3 - | checknil TMP2 - | lwz INS, -4(PC) - | beq >4 - |.if DUALNUM - | stw RC, 4(RA) - | stw TISNUM, 0(RA) - |.else - | tonum_u f1, RC - |.endif - | addi RC, RC, 1 - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | stfd f0, 8(RA) - | decode_RD4 TMP1, INS - | stw RC, -4(RA) // Update control var. - | add PC, TMP1, TMP3 - |.if not DUALNUM - | stfd f1, 0(RA) - |.endif - |3: - | ins_next - | - |4: // Skip holes in array part. - | addi RC, RC, 1 - | b <1 - | - |5: // Traverse hash part. - | lwz TMP1, TAB:RB->hmask - | sub RC, RC, TMP0 - | lwz TMP2, TAB:RB->node - |6: - | cmplw RC, TMP1 // End of iteration? Branch to ITERL+1. - | slwi TMP3, RC, 5 - | bgty <3 - | slwi RB, RC, 3 - | sub TMP3, TMP3, RB - | lwzx RB, TMP2, TMP3 - | lfdx f0, TMP2, TMP3 - | add NODE:TMP3, TMP2, TMP3 - | checknil RB - | lwz INS, -4(PC) - | beq >7 - | lfd f1, NODE:TMP3->key - | addis TMP2, PC, -(BCBIAS_J*4 >> 16) - | stfd f0, 8(RA) - | add RC, RC, TMP0 - | decode_RD4 TMP1, INS - | stfd f1, 0(RA) - | addi RC, RC, 1 - | add PC, TMP1, TMP2 - | stw RC, -4(RA) // Update control var. - | b <3 - | - |7: // Skip holes in hash part. - | addi RC, RC, 1 - | b <6 - break; - - case BC_ISNEXT: - | // RA = base*8, RD = target (points to ITERN) - | add RA, BASE, RA - | lwz TMP0, -24(RA) - | lwz CFUNC:TMP1, -20(RA) - | lwz TMP2, -16(RA) - | lwz TMP3, -8(RA) - | cmpwi cr0, TMP2, LJ_TTAB - | cmpwi cr1, TMP0, LJ_TFUNC - | cmpwi cr6, TMP3, LJ_TNIL - | bne cr1, >5 - | lbz TMP1, CFUNC:TMP1->ffid - | crand 4*cr0+eq, 4*cr0+eq, 4*cr6+eq - | cmpwi cr7, TMP1, FF_next_N - | srwi TMP0, RD, 1 - | crand 4*cr0+eq, 4*cr0+eq, 4*cr7+eq - | add TMP3, PC, TMP0 - | bne cr0, >5 - | lus TMP1, 0xfffe - | ori TMP1, TMP1, 0x7fff - | stw ZERO, -4(RA) // Initialize control var. - | stw TMP1, -8(RA) - | addis PC, TMP3, -(BCBIAS_J*4 >> 16) - |1: - | ins_next - |5: // Despecialize bytecode if any of the checks fail. - | li TMP0, BC_JMP - | li TMP1, BC_ITERC - | stb TMP0, -1(PC) - | addis PC, TMP3, -(BCBIAS_J*4 >> 16) - | stb TMP1, 3(PC) - | b <1 - break; - - case BC_VARG: - | // RA = base*8, RB = (nresults+1)*8, RC = numparams*8 - | lwz TMP0, FRAME_PC(BASE) - | add RC, BASE, RC - | add RA, BASE, RA - | addi RC, RC, FRAME_VARG - | add TMP2, RA, RB - | subi TMP3, BASE, 8 // TMP3 = vtop - | sub RC, RC, TMP0 // RC = vbase - | // Note: RC may now be even _above_ BASE if nargs was < numparams. - | cmplwi cr1, RB, 0 - |.if PPE - | sub TMP1, TMP3, RC - | cmpwi TMP1, 0 - |.else - | sub. TMP1, TMP3, RC - |.endif - | beq cr1, >5 // Copy all varargs? - | subi TMP2, TMP2, 16 - | ble >2 // No vararg slots? - |1: // Copy vararg slots to destination slots. - | lfd f0, 0(RC) - | addi RC, RC, 8 - | stfd f0, 0(RA) - | cmplw RA, TMP2 - | cmplw cr1, RC, TMP3 - | bge >3 // All destination slots filled? - | addi RA, RA, 8 - | blt cr1, <1 // More vararg slots? - |2: // Fill up remainder with nil. - | stw TISNIL, 0(RA) - | cmplw RA, TMP2 - | addi RA, RA, 8 - | blt <2 - |3: - | ins_next - | - |5: // Copy all varargs. - | lwz TMP0, L->maxstack - | li MULTRES, 8 // MULTRES = (0+1)*8 - | bley <3 // No vararg slots? - | add TMP2, RA, TMP1 - | cmplw TMP2, TMP0 - | addi MULTRES, TMP1, 8 - | bgt >7 - |6: - | lfd f0, 0(RC) - | addi RC, RC, 8 - | stfd f0, 0(RA) - | cmplw RC, TMP3 - | addi RA, RA, 8 - | blt <6 // More vararg slots? - | b <3 - | - |7: // Grow stack for varargs. - | mr CARG1, L - | stp RA, L->top - | sub SAVE0, RC, BASE // Need delta, because BASE may change. - | stp BASE, L->base - | sub RA, RA, BASE - | stw PC, SAVE_PC - | srwi CARG2, TMP1, 3 - | bl extern lj_state_growstack // (lua_State *L, int n) - | lp BASE, L->base - | add RA, BASE, RA - | add RC, BASE, SAVE0 - | subi TMP3, BASE, 8 - | b <6 - break; - - /* -- Returns ----------------------------------------------------------- */ - - case BC_RETM: - | // RA = results*8, RD = extra_nresults*8 - | add RD, RD, MULTRES // MULTRES >= 8, so RD >= 8. - | // Fall through. Assumes BC_RET follows. - break; - - case BC_RET: - | // RA = results*8, RD = (nresults+1)*8 - | lwz PC, FRAME_PC(BASE) - | add RA, BASE, RA - | mr MULTRES, RD - |1: - | andix. TMP0, PC, FRAME_TYPE - | xori TMP1, PC, FRAME_VARG - | bne ->BC_RETV_Z - | - |->BC_RET_Z: - | // BASE = base, RA = resultptr, RD = (nresults+1)*8, PC = return - | lwz INS, -4(PC) - | cmpwi RD, 8 - | subi TMP2, BASE, 8 - | subi RC, RD, 8 - | decode_RB8 RB, INS - | beq >3 - | li TMP1, 0 - |2: - | addi TMP3, TMP1, 8 - | lfdx f0, RA, TMP1 - | cmpw TMP3, RC - | stfdx f0, TMP2, TMP1 - | beq >3 - | addi TMP1, TMP3, 8 - | lfdx f1, RA, TMP3 - | cmpw TMP1, RC - | stfdx f1, TMP2, TMP3 - | bne <2 - |3: - |5: - | cmplw RB, RD - | decode_RA8 RA, INS - | bgt >6 - | sub BASE, TMP2, RA - | lwz LFUNC:TMP1, FRAME_FUNC(BASE) - | ins_next1 - | lwz TMP1, LFUNC:TMP1->pc - | lwz KBASE, PC2PROTO(k)(TMP1) - | ins_next2 - | - |6: // Fill up results with nil. - | subi TMP1, RD, 8 - | addi RD, RD, 8 - | stwx TISNIL, TMP2, TMP1 - | b <5 - | - |->BC_RETV_Z: // Non-standard return case. - | andix. TMP2, TMP1, FRAME_TYPEP - | bne ->vm_return - | // Return from vararg function: relocate BASE down. - | sub BASE, BASE, TMP1 - | lwz PC, FRAME_PC(BASE) - | b <1 - break; - - case BC_RET0: case BC_RET1: - | // RA = results*8, RD = (nresults+1)*8 - | lwz PC, FRAME_PC(BASE) - | add RA, BASE, RA - | mr MULTRES, RD - | andix. TMP0, PC, FRAME_TYPE - | xori TMP1, PC, FRAME_VARG - | bney ->BC_RETV_Z - | - | lwz INS, -4(PC) - | subi TMP2, BASE, 8 - | decode_RB8 RB, INS - if (op == BC_RET1) { - | lfd f0, 0(RA) - | stfd f0, 0(TMP2) - } - |5: - | cmplw RB, RD - | decode_RA8 RA, INS - | bgt >6 - | sub BASE, TMP2, RA - | lwz LFUNC:TMP1, FRAME_FUNC(BASE) - | ins_next1 - | lwz TMP1, LFUNC:TMP1->pc - | lwz KBASE, PC2PROTO(k)(TMP1) - | ins_next2 - | - |6: // Fill up results with nil. - | subi TMP1, RD, 8 - | addi RD, RD, 8 - | stwx TISNIL, TMP2, TMP1 - | b <5 - break; - - /* -- Loops and branches ------------------------------------------------ */ - - case BC_FORL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IFORL follows. - break; - - case BC_JFORI: - case BC_JFORL: -#if !LJ_HASJIT - break; -#endif - case BC_FORI: - case BC_IFORL: - | // RA = base*8, RD = target (after end of loop or start of loop) - vk = (op == BC_IFORL || op == BC_JFORL); - |.if DUALNUM - | // Integer loop. - | lwzux TMP1, RA, BASE - | lwz CARG1, FORL_IDX*8+4(RA) - | cmplw cr0, TMP1, TISNUM - if (vk) { - | lwz CARG3, FORL_STEP*8+4(RA) - | bne >9 - |.if GPR64 - | // Need to check overflow for (a<<32) + (b<<32). - | rldicr TMP0, CARG1, 32, 31 - | rldicr TMP2, CARG3, 32, 31 - | add CARG1, CARG1, CARG3 - | addo. TMP0, TMP0, TMP2 - |.else - | addo. CARG1, CARG1, CARG3 - |.endif - | cmpwi cr6, CARG3, 0 - | lwz CARG2, FORL_STOP*8+4(RA) - | bso >6 - |4: - | stw CARG1, FORL_IDX*8+4(RA) - } else { - | lwz TMP3, FORL_STEP*8(RA) - | lwz CARG3, FORL_STEP*8+4(RA) - | lwz TMP2, FORL_STOP*8(RA) - | lwz CARG2, FORL_STOP*8+4(RA) - | cmplw cr7, TMP3, TISNUM - | cmplw cr1, TMP2, TISNUM - | crand 4*cr0+eq, 4*cr0+eq, 4*cr7+eq - | crand 4*cr0+eq, 4*cr0+eq, 4*cr1+eq - | cmpwi cr6, CARG3, 0 - | bne >9 - } - | blt cr6, >5 - | cmpw CARG1, CARG2 - |1: - | stw TISNUM, FORL_EXT*8(RA) - if (op != BC_JFORL) { - | srwi RD, RD, 1 - } - | stw CARG1, FORL_EXT*8+4(RA) - if (op != BC_JFORL) { - | add RD, PC, RD - } - if (op == BC_FORI) { - | bgt >3 // See FP loop below. - } else if (op == BC_JFORI) { - | addis PC, RD, -(BCBIAS_J*4 >> 16) - | bley >7 - } else if (op == BC_IFORL) { - | bgt >2 - | addis PC, RD, -(BCBIAS_J*4 >> 16) - } else { - | bley =>BC_JLOOP - } - |2: - | ins_next - |5: // Invert check for negative step. - | cmpw CARG2, CARG1 - | b <1 - if (vk) { - |6: // Potential overflow. - | checkov TMP0, <4 // Ignore unrelated overflow. - | b <2 - } - |.endif - if (vk) { - |.if DUALNUM - |9: // FP loop. - | lfd f1, FORL_IDX*8(RA) - |.else - | lfdux f1, RA, BASE - |.endif - | lfd f3, FORL_STEP*8(RA) - | lfd f2, FORL_STOP*8(RA) - | lwz TMP3, FORL_STEP*8(RA) - | fadd f1, f1, f3 - | stfd f1, FORL_IDX*8(RA) - } else { - |.if DUALNUM - |9: // FP loop. - |.else - | lwzux TMP1, RA, BASE - | lwz TMP3, FORL_STEP*8(RA) - | lwz TMP2, FORL_STOP*8(RA) - | cmplw cr0, TMP1, TISNUM - | cmplw cr7, TMP3, TISNUM - | cmplw cr1, TMP2, TISNUM - |.endif - | lfd f1, FORL_IDX*8(RA) - | crand 4*cr0+lt, 4*cr0+lt, 4*cr7+lt - | crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | lfd f2, FORL_STOP*8(RA) - | bge ->vmeta_for - } - | cmpwi cr6, TMP3, 0 - if (op != BC_JFORL) { - | srwi RD, RD, 1 - } - | stfd f1, FORL_EXT*8(RA) - if (op != BC_JFORL) { - | add RD, PC, RD - } - | fcmpu cr0, f1, f2 - if (op == BC_JFORI) { - | addis PC, RD, -(BCBIAS_J*4 >> 16) - } - | blt cr6, >5 - if (op == BC_FORI) { - | bgt >3 - } else if (op == BC_IFORL) { - |.if DUALNUM - | bgty <2 - |.else - | bgt >2 - |.endif - |1: - | addis PC, RD, -(BCBIAS_J*4 >> 16) - } else if (op == BC_JFORI) { - | bley >7 - } else { - | bley =>BC_JLOOP - } - |.if DUALNUM - | b <2 - |.else - |2: - | ins_next - |.endif - |5: // Negative step. - if (op == BC_FORI) { - | bge <2 - |3: // Used by integer loop, too. - | addis PC, RD, -(BCBIAS_J*4 >> 16) - } else if (op == BC_IFORL) { - | bgey <1 - } else if (op == BC_JFORI) { - | bgey >7 - } else { - | bgey =>BC_JLOOP - } - | b <2 - if (op == BC_JFORI) { - |7: - | lwz INS, -4(PC) - | decode_RD8 RD, INS - | b =>BC_JLOOP - } - break; - - case BC_ITERL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IITERL follows. - break; - - case BC_JITERL: -#if !LJ_HASJIT - break; -#endif - case BC_IITERL: - | // RA = base*8, RD = target - | lwzux TMP1, RA, BASE - | lwz TMP2, 4(RA) - | checknil TMP1; beq >1 // Stop if iterator returned nil. - if (op == BC_JITERL) { - | stw TMP1, -8(RA) - | stw TMP2, -4(RA) - | b =>BC_JLOOP - } else { - | branch_RD // Otherwise save control var + branch. - | stw TMP1, -8(RA) - | stw TMP2, -4(RA) - } - |1: - | ins_next - break; - - case BC_LOOP: - | // RA = base*8, RD = target (loop extent) - | // Note: RA/RD is only used by trace recorder to determine scope/extent - | // This opcode does NOT jump, it's only purpose is to detect a hot loop. - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_ILOOP follows. - break; - - case BC_ILOOP: - | // RA = base*8, RD = target (loop extent) - | ins_next - break; - - case BC_JLOOP: - |.if JIT - | // RA = base*8 (ignored), RD = traceno*8 - | lwz TMP1, DISPATCH_J(trace)(DISPATCH) - | srwi RD, RD, 1 - | // Traces on PPC don't store the trace number, so use 0. - | stw ZERO, DISPATCH_GL(vmstate)(DISPATCH) - | lwzx TRACE:TMP2, TMP1, RD - | clrso TMP1 - | lp TMP2, TRACE:TMP2->mcode - | stw BASE, DISPATCH_GL(jit_base)(DISPATCH) - | mtctr TMP2 - | stw L, DISPATCH_GL(jit_L)(DISPATCH) - | addi JGL, DISPATCH, GG_DISP2G+32768 - | bctr - |.endif - break; - - case BC_JMP: - | // RA = base*8 (only used by trace recorder), RD = target - | branch_RD - | ins_next - break; - - /* -- Function headers -------------------------------------------------- */ - - case BC_FUNCF: - |.if JIT - | hotcall - |.endif - case BC_FUNCV: /* NYI: compiled vararg functions. */ - | // Fall through. Assumes BC_IFUNCF/BC_IFUNCV follow. - break; - - case BC_JFUNCF: -#if !LJ_HASJIT - break; -#endif - case BC_IFUNCF: - | // BASE = new base, RA = BASE+framesize*8, RB = LFUNC, RC = nargs*8 - | lwz TMP2, L->maxstack - | lbz TMP1, -4+PC2PROTO(numparams)(PC) - | lwz KBASE, -4+PC2PROTO(k)(PC) - | cmplw RA, TMP2 - | slwi TMP1, TMP1, 3 - | bgt ->vm_growstack_l - if (op != BC_JFUNCF) { - | ins_next1 - } - |2: - | cmplw NARGS8:RC, TMP1 // Check for missing parameters. - | blt >3 - if (op == BC_JFUNCF) { - | decode_RD8 RD, INS - | b =>BC_JLOOP - } else { - | ins_next2 - } - | - |3: // Clear missing parameters. - | stwx TISNIL, BASE, NARGS8:RC - | addi NARGS8:RC, NARGS8:RC, 8 - | b <2 - break; - - case BC_JFUNCV: -#if !LJ_HASJIT - break; -#endif - | NYI // NYI: compiled vararg functions - break; /* NYI: compiled vararg functions. */ - - case BC_IFUNCV: - | // BASE = new base, RA = BASE+framesize*8, RB = LFUNC, RC = nargs*8 - | lwz TMP2, L->maxstack - | add TMP1, BASE, RC - | add TMP0, RA, RC - | stw LFUNC:RB, 4(TMP1) // Store copy of LFUNC. - | addi TMP3, RC, 8+FRAME_VARG - | lwz KBASE, -4+PC2PROTO(k)(PC) - | cmplw TMP0, TMP2 - | stw TMP3, 0(TMP1) // Store delta + FRAME_VARG. - | bge ->vm_growstack_l - | lbz TMP2, -4+PC2PROTO(numparams)(PC) - | mr RA, BASE - | mr RC, TMP1 - | ins_next1 - | cmpwi TMP2, 0 - | addi BASE, TMP1, 8 - | beq >3 - |1: - | cmplw RA, RC // Less args than parameters? - | lwz TMP0, 0(RA) - | lwz TMP3, 4(RA) - | bge >4 - | stw TISNIL, 0(RA) // Clear old fixarg slot (help the GC). - | addi RA, RA, 8 - |2: - | addic. TMP2, TMP2, -1 - | stw TMP0, 8(TMP1) - | stw TMP3, 12(TMP1) - | addi TMP1, TMP1, 8 - | bne <1 - |3: - | ins_next2 - | - |4: // Clear missing parameters. - | li TMP0, LJ_TNIL - | b <2 - break; - - case BC_FUNCC: - case BC_FUNCCW: - | // BASE = new base, RA = BASE+framesize*8, RB = CFUNC, RC = nargs*8 - if (op == BC_FUNCC) { - | lp RD, CFUNC:RB->f - } else { - | lp RD, DISPATCH_GL(wrapf)(DISPATCH) - } - | add TMP1, RA, NARGS8:RC - | lwz TMP2, L->maxstack - | .toc lp TMP3, 0(RD) - | add RC, BASE, NARGS8:RC - | stp BASE, L->base - | cmplw TMP1, TMP2 - | stp RC, L->top - | li_vmstate C - |.if TOC - | mtctr TMP3 - |.else - | mtctr RD - |.endif - if (op == BC_FUNCCW) { - | lp CARG2, CFUNC:RB->f - } - | mr CARG1, L - | bgt ->vm_growstack_c // Need to grow stack. - | .toc lp TOCREG, TOC_OFS(RD) - | .tocenv lp ENVREG, ENV_OFS(RD) - | st_vmstate - | bctrl // (lua_State *L [, lua_CFunction f]) - | // Returns nresults. - | lp BASE, L->base - | .toc ld TOCREG, SAVE_TOC - | slwi RD, CRET1, 3 - | lp TMP1, L->top - | li_vmstate INTERP - | lwz PC, FRAME_PC(BASE) // Fetch PC of caller. - | sub RA, TMP1, RD // RA = L->top - nresults*8 - | st_vmstate - | b ->vm_returnc - break; - - /* ---------------------------------------------------------------------- */ - - default: - fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]); - exit(2); - break; - } -} - -static int build_backend(BuildCtx *ctx) -{ - int op; - - dasm_growpc(Dst, BC__MAX); - - build_subroutines(ctx); - - |.code_op - for (op = 0; op < BC__MAX; op++) - build_ins(ctx, (BCOp)op, op); - - return BC__MAX; -} - -/* Emit pseudo frame-info for all assembler functions. */ -static void emit_asm_debug(BuildCtx *ctx) -{ - int fcofs = (int)((uint8_t *)ctx->glob[GLOB_vm_ffi_call] - ctx->code); - int i; - switch (ctx->mode) { - case BUILD_elfasm: - fprintf(ctx->fp, "\t.section .debug_frame,\"\",@progbits\n"); - fprintf(ctx->fp, - ".Lframe0:\n" - "\t.long .LECIE0-.LSCIE0\n" - ".LSCIE0:\n" - "\t.long 0xffffffff\n" - "\t.byte 0x1\n" - "\t.string \"\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 65\n" - "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE0:\n\n"); - fprintf(ctx->fp, - ".LSFDE0:\n" - "\t.long .LEFDE0-.LASFDE0\n" - ".LASFDE0:\n" - "\t.long .Lframe0\n" - "\t.long .Lbegin\n" - "\t.long %d\n" - "\t.byte 0xe\n\t.uleb128 %d\n" - "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" - "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n", - fcofs, CFRAME_SIZE); - for (i = 14; i <= 31; i++) - fprintf(ctx->fp, - "\t.byte %d\n\t.uleb128 %d\n" - "\t.byte %d\n\t.uleb128 %d\n", - 0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i)); - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE0:\n\n"); -#if LJ_HASFFI - fprintf(ctx->fp, - ".LSFDE1:\n" - "\t.long .LEFDE1-.LASFDE1\n" - ".LASFDE1:\n" - "\t.long .Lframe0\n" -#if LJ_TARGET_PS3 - "\t.long .lj_vm_ffi_call\n" -#else - "\t.long lj_vm_ffi_call\n" -#endif - "\t.long %d\n" - "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" - "\t.byte 0x8e\n\t.uleb128 2\n" - "\t.byte 0xd\n\t.uleb128 0xe\n" - "\t.align 2\n" - ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); -#endif -#if !LJ_NO_UNWIND - fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); - fprintf(ctx->fp, - ".Lframe1:\n" - "\t.long .LECIE1-.LSCIE1\n" - ".LSCIE1:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.string \"zPR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 65\n" - "\t.uleb128 6\n" /* augmentation length */ - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.long lj_err_unwind_dwarf-.\n" - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE1:\n\n"); - fprintf(ctx->fp, - ".LSFDE2:\n" - "\t.long .LEFDE2-.LASFDE2\n" - ".LASFDE2:\n" - "\t.long .LASFDE2-.Lframe1\n" - "\t.long .Lbegin-.\n" - "\t.long %d\n" - "\t.uleb128 0\n" /* augmentation length */ - "\t.byte 0xe\n\t.uleb128 %d\n" - "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" - "\t.byte 0x5\n\t.uleb128 70\n\t.uleb128 55\n", - fcofs, CFRAME_SIZE); - for (i = 14; i <= 31; i++) - fprintf(ctx->fp, - "\t.byte %d\n\t.uleb128 %d\n" - "\t.byte %d\n\t.uleb128 %d\n", - 0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i)); - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE2:\n\n"); -#if LJ_HASFFI - fprintf(ctx->fp, - ".Lframe2:\n" - "\t.long .LECIE2-.LSCIE2\n" - ".LSCIE2:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.string \"zR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 65\n" - "\t.uleb128 1\n" /* augmentation length */ - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE2:\n\n"); - fprintf(ctx->fp, - ".LSFDE3:\n" - "\t.long .LEFDE3-.LASFDE3\n" - ".LASFDE3:\n" - "\t.long .LASFDE3-.Lframe2\n" - "\t.long lj_vm_ffi_call-.\n" - "\t.long %d\n" - "\t.uleb128 0\n" /* augmentation length */ - "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" - "\t.byte 0x8e\n\t.uleb128 2\n" - "\t.byte 0xd\n\t.uleb128 0xe\n" - "\t.align 2\n" - ".LEFDE3:\n\n", (int)ctx->codesz - fcofs); -#endif -#endif - break; - default: - break; - } -} - diff --git a/deps/luajit/src/vm_ppcspe.dasc b/deps/luajit/src/vm_ppcspe.dasc deleted file mode 100644 index 53ea2d9..0000000 --- a/deps/luajit/src/vm_ppcspe.dasc +++ /dev/null @@ -1,3691 +0,0 @@ -|// Low-level VM code for PowerPC/e500 CPUs. -|// Bytecode interpreter, fast functions and helper functions. -|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -| -|.arch ppc -|.section code_op, code_sub -| -|.actionlist build_actionlist -|.globals GLOB_ -|.globalnames globnames -|.externnames extnames -| -|// Note: The ragged indentation of the instructions is intentional. -|// The starting columns indicate data dependencies. -| -|//----------------------------------------------------------------------- -| -|// Fixed register assignments for the interpreter. -|// Don't use: r1 = sp, r2 and r13 = reserved and/or small data area ptr -| -|// The following must be C callee-save (but BASE is often refetched). -|.define BASE, r14 // Base of current Lua stack frame. -|.define KBASE, r15 // Constants of current Lua function. -|.define PC, r16 // Next PC. -|.define DISPATCH, r17 // Opcode dispatch table. -|.define LREG, r18 // Register holding lua_State (also in SAVE_L). -|.define MULTRES, r19 // Size of multi-result: (nresults+1)*8. -| -|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save. -|.define TISNUM, r22 -|.define TISSTR, r23 -|.define TISTAB, r24 -|.define TISFUNC, r25 -|.define TISNIL, r26 -|.define TOBIT, r27 -|.define ZERO, TOBIT // Zero in lo word. -| -|// The following temporaries are not saved across C calls, except for RA. -|.define RA, r20 // Callee-save. -|.define RB, r10 -|.define RC, r11 -|.define RD, r12 -|.define INS, r7 // Overlaps CARG5. -| -|.define TMP0, r0 -|.define TMP1, r8 -|.define TMP2, r9 -|.define TMP3, r6 // Overlaps CARG4. -| -|// Saved temporaries. -|.define SAVE0, r21 -| -|// Calling conventions. -|.define CARG1, r3 -|.define CARG2, r4 -|.define CARG3, r5 -|.define CARG4, r6 // Overlaps TMP3. -|.define CARG5, r7 // Overlaps INS. -| -|.define CRET1, r3 -|.define CRET2, r4 -| -|// Stack layout while in interpreter. Must match with lj_frame.h. -|.define SAVE_LR, 188(sp) -|.define CFRAME_SPACE, 184 // Delta for sp. -|// Back chain for sp: 184(sp) <-- sp entering interpreter -|.define SAVE_r31, 176(sp) // 64 bit register saves. -|.define SAVE_r30, 168(sp) -|.define SAVE_r29, 160(sp) -|.define SAVE_r28, 152(sp) -|.define SAVE_r27, 144(sp) -|.define SAVE_r26, 136(sp) -|.define SAVE_r25, 128(sp) -|.define SAVE_r24, 120(sp) -|.define SAVE_r23, 112(sp) -|.define SAVE_r22, 104(sp) -|.define SAVE_r21, 96(sp) -|.define SAVE_r20, 88(sp) -|.define SAVE_r19, 80(sp) -|.define SAVE_r18, 72(sp) -|.define SAVE_r17, 64(sp) -|.define SAVE_r16, 56(sp) -|.define SAVE_r15, 48(sp) -|.define SAVE_r14, 40(sp) -|.define SAVE_CR, 36(sp) -|.define UNUSED1, 32(sp) -|.define SAVE_ERRF, 28(sp) // 32 bit C frame info. -|.define SAVE_NRES, 24(sp) -|.define SAVE_CFRAME, 20(sp) -|.define SAVE_L, 16(sp) -|.define SAVE_PC, 12(sp) -|.define SAVE_MULTRES, 8(sp) -|// Next frame lr: 4(sp) -|// Back chain for sp: 0(sp) <-- sp while in interpreter -| -|.macro save_, reg; evstdd reg, SAVE_..reg; .endmacro -|.macro rest_, reg; evldd reg, SAVE_..reg; .endmacro -| -|.macro saveregs -| stwu sp, -CFRAME_SPACE(sp) -| save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19 -| mflr r0; mfcr r12 -| save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25 -| stw r0, SAVE_LR; stw r12, SAVE_CR -| save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31 -|.endmacro -| -|.macro restoreregs -| lwz r0, SAVE_LR; lwz r12, SAVE_CR -| rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19 -| mtlr r0; mtcrf 0x38, r12 -| rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25 -| rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31 -| addi sp, sp, CFRAME_SPACE -|.endmacro -| -|// Type definitions. Some of these are only used for documentation. -|.type L, lua_State, LREG -|.type GL, global_State -|.type TVALUE, TValue -|.type GCOBJ, GCobj -|.type STR, GCstr -|.type TAB, GCtab -|.type LFUNC, GCfuncL -|.type CFUNC, GCfuncC -|.type PROTO, GCproto -|.type UPVAL, GCupval -|.type NODE, Node -|.type NARGS8, int -|.type TRACE, GCtrace -| -|//----------------------------------------------------------------------- -| -|// These basic macros should really be part of DynASM. -|.macro srwi, rx, ry, n; rlwinm rx, ry, 32-n, n, 31; .endmacro -|.macro slwi, rx, ry, n; rlwinm rx, ry, n, 0, 31-n; .endmacro -|.macro rotlwi, rx, ry, n; rlwinm rx, ry, n, 0, 31; .endmacro -|.macro rotlw, rx, ry, rn; rlwnm rx, ry, rn, 0, 31; .endmacro -|.macro subi, rx, ry, i; addi rx, ry, -i; .endmacro -| -|// Trap for not-yet-implemented parts. -|.macro NYI; tw 4, sp, sp; .endmacro -| -|//----------------------------------------------------------------------- -| -|// Access to frame relative to BASE. -|.define FRAME_PC, -8 -|.define FRAME_FUNC, -4 -| -|// Instruction decode. -|.macro decode_OP4, dst, ins; rlwinm dst, ins, 2, 22, 29; .endmacro -|.macro decode_RA8, dst, ins; rlwinm dst, ins, 27, 21, 28; .endmacro -|.macro decode_RB8, dst, ins; rlwinm dst, ins, 11, 21, 28; .endmacro -|.macro decode_RC8, dst, ins; rlwinm dst, ins, 19, 21, 28; .endmacro -|.macro decode_RD8, dst, ins; rlwinm dst, ins, 19, 13, 28; .endmacro -| -|.macro decode_OP1, dst, ins; rlwinm dst, ins, 0, 24, 31; .endmacro -|.macro decode_RD4, dst, ins; rlwinm dst, ins, 18, 14, 29; .endmacro -| -|// Instruction fetch. -|.macro ins_NEXT1 -| lwz INS, 0(PC) -| addi PC, PC, 4 -|.endmacro -|// Instruction decode+dispatch. -|.macro ins_NEXT2 -| decode_OP4 TMP1, INS -| decode_RB8 RB, INS -| decode_RD8 RD, INS -| lwzx TMP0, DISPATCH, TMP1 -| decode_RA8 RA, INS -| decode_RC8 RC, INS -| mtctr TMP0 -| bctr -|.endmacro -|.macro ins_NEXT -| ins_NEXT1 -| ins_NEXT2 -|.endmacro -| -|// Instruction footer. -|.if 1 -| // Replicated dispatch. Less unpredictable branches, but higher I-Cache use. -| .define ins_next, ins_NEXT -| .define ins_next_, ins_NEXT -| .define ins_next1, ins_NEXT1 -| .define ins_next2, ins_NEXT2 -|.else -| // Common dispatch. Lower I-Cache use, only one (very) unpredictable branch. -| // Affects only certain kinds of benchmarks (and only with -j off). -| .macro ins_next -| b ->ins_next -| .endmacro -| .macro ins_next1 -| .endmacro -| .macro ins_next2 -| b ->ins_next -| .endmacro -| .macro ins_next_ -| ->ins_next: -| ins_NEXT -| .endmacro -|.endif -| -|// Call decode and dispatch. -|.macro ins_callt -| // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC -| lwz PC, LFUNC:RB->pc -| lwz INS, 0(PC) -| addi PC, PC, 4 -| decode_OP4 TMP1, INS -| decode_RA8 RA, INS -| lwzx TMP0, DISPATCH, TMP1 -| add RA, RA, BASE -| mtctr TMP0 -| bctr -|.endmacro -| -|.macro ins_call -| // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, PC = caller PC -| stw PC, FRAME_PC(BASE) -| ins_callt -|.endmacro -| -|//----------------------------------------------------------------------- -| -|// Macros to test operand types. -|.macro checknum, reg; evcmpltu reg, TISNUM; .endmacro -|.macro checkstr, reg; evcmpeq reg, TISSTR; .endmacro -|.macro checktab, reg; evcmpeq reg, TISTAB; .endmacro -|.macro checkfunc, reg; evcmpeq reg, TISFUNC; .endmacro -|.macro checknil, reg; evcmpeq reg, TISNIL; .endmacro -|.macro checkok, label; blt label; .endmacro -|.macro checkfail, label; bge label; .endmacro -|.macro checkanyfail, label; bns label; .endmacro -|.macro checkallok, label; bso label; .endmacro -| -|.macro branch_RD -| srwi TMP0, RD, 1 -| add PC, PC, TMP0 -| addis PC, PC, -(BCBIAS_J*4 >> 16) -|.endmacro -| -|// Assumes DISPATCH is relative to GL. -#define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) -#define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) -| -#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) -| -|.macro hotloop -| NYI -|.endmacro -| -|.macro hotcall -| NYI -|.endmacro -| -|// Set current VM state. Uses TMP0. -|.macro li_vmstate, st; li TMP0, ~LJ_VMST_..st; .endmacro -|.macro st_vmstate; stw TMP0, DISPATCH_GL(vmstate)(DISPATCH); .endmacro -| -|// Move table write barrier back. Overwrites mark and tmp. -|.macro barrierback, tab, mark, tmp -| lwz tmp, DISPATCH_GL(gc.grayagain)(DISPATCH) -| // Assumes LJ_GC_BLACK is 0x04. -| rlwinm mark, mark, 0, 30, 28 // black2gray(tab) -| stw tab, DISPATCH_GL(gc.grayagain)(DISPATCH) -| stb mark, tab->marked -| stw tmp, tab->gclist -|.endmacro -| -|//----------------------------------------------------------------------- - -/* Generate subroutines used by opcodes and other parts of the VM. */ -/* The .code_sub section should be last to help static branch prediction. */ -static void build_subroutines(BuildCtx *ctx) -{ - |.code_sub - | - |//----------------------------------------------------------------------- - |//-- Return handling ---------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_returnp: - | // See vm_return. Also: TMP2 = previous base. - | andi. TMP0, PC, FRAME_P - | evsplati TMP1, LJ_TTRUE - | beq ->cont_dispatch - | - | // Return from pcall or xpcall fast func. - | lwz PC, FRAME_PC(TMP2) // Fetch PC of previous frame. - | mr BASE, TMP2 // Restore caller base. - | // Prepending may overwrite the pcall frame, so do it at the end. - | stwu TMP1, FRAME_PC(RA) // Prepend true to results. - | - |->vm_returnc: - | addi RD, RD, 8 // RD = (nresults+1)*8. - | andi. TMP0, PC, FRAME_TYPE - | cmpwi cr1, RD, 0 - | li CRET1, LUA_YIELD - | beq cr1, ->vm_unwind_c_eh - | mr MULTRES, RD - | beq ->BC_RET_Z // Handle regular return to Lua. - | - |->vm_return: - | // BASE = base, RA = resultptr, RD/MULTRES = (nresults+1)*8, PC = return - | // TMP0 = PC & FRAME_TYPE - | cmpwi TMP0, FRAME_C - | rlwinm TMP2, PC, 0, 0, 28 - | li_vmstate C - | sub TMP2, BASE, TMP2 // TMP2 = previous base. - | bne ->vm_returnp - | - | addic. TMP1, RD, -8 - | stw TMP2, L->base - | lwz TMP2, SAVE_NRES - | subi BASE, BASE, 8 - | st_vmstate - | slwi TMP2, TMP2, 3 - | beq >2 - |1: - | addic. TMP1, TMP1, -8 - | evldd TMP0, 0(RA) - | addi RA, RA, 8 - | evstdd TMP0, 0(BASE) - | addi BASE, BASE, 8 - | bne <1 - | - |2: - | cmpw TMP2, RD // More/less results wanted? - | bne >6 - |3: - | stw BASE, L->top // Store new top. - | - |->vm_leave_cp: - | lwz TMP0, SAVE_CFRAME // Restore previous C frame. - | li CRET1, 0 // Ok return status for vm_pcall. - | stw TMP0, L->cframe - | - |->vm_leave_unw: - | restoreregs - | blr - | - |6: - | ble >7 // Less results wanted? - | // More results wanted. Check stack size and fill up results with nil. - | lwz TMP1, L->maxstack - | cmplw BASE, TMP1 - | bge >8 - | evstdd TISNIL, 0(BASE) - | addi RD, RD, 8 - | addi BASE, BASE, 8 - | b <2 - | - |7: // Less results wanted. - | sub TMP0, RD, TMP2 - | cmpwi TMP2, 0 // LUA_MULTRET+1 case? - | sub TMP0, BASE, TMP0 // Subtract the difference. - | iseleq BASE, BASE, TMP0 // Either keep top or shrink it. - | b <3 - | - |8: // Corner case: need to grow stack for filling up results. - | // This can happen if: - | // - A C function grows the stack (a lot). - | // - The GC shrinks the stack in between. - | // - A return back from a lua_call() with (high) nresults adjustment. - | stw BASE, L->top // Save current top held in BASE (yes). - | mr SAVE0, RD - | mr CARG2, TMP2 - | mr CARG1, L - | bl extern lj_state_growstack // (lua_State *L, int n) - | lwz TMP2, SAVE_NRES - | mr RD, SAVE0 - | slwi TMP2, TMP2, 3 - | lwz BASE, L->top // Need the (realloced) L->top in BASE. - | b <2 - | - |->vm_unwind_c: // Unwind C stack, return from vm_pcall. - | // (void *cframe, int errcode) - | mr sp, CARG1 - | mr CRET1, CARG2 - |->vm_unwind_c_eh: // Landing pad for external unwinder. - | lwz L, SAVE_L - | li TMP0, ~LJ_VMST_C - | lwz GL:TMP1, L->glref - | stw TMP0, GL:TMP1->vmstate - | b ->vm_leave_unw - | - |->vm_unwind_ff: // Unwind C stack, return from ff pcall. - | // (void *cframe) - | rlwinm sp, CARG1, 0, 0, 29 - |->vm_unwind_ff_eh: // Landing pad for external unwinder. - | lwz L, SAVE_L - | evsplati TISNUM, LJ_TISNUM+1 // Setup type comparison constants. - | evsplati TISFUNC, LJ_TFUNC - | lus TOBIT, 0x4338 - | evsplati TISTAB, LJ_TTAB - | li TMP0, 0 - | lwz BASE, L->base - | evmergelo TOBIT, TOBIT, TMP0 - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | evsplati TISSTR, LJ_TSTR - | li TMP1, LJ_TFALSE - | evsplati TISNIL, LJ_TNIL - | li_vmstate INTERP - | lwz PC, FRAME_PC(BASE) // Fetch PC of previous frame. - | la RA, -8(BASE) // Results start at BASE-8. - | addi DISPATCH, DISPATCH, GG_G2DISP - | stw TMP1, 0(RA) // Prepend false to error message. - | li RD, 16 // 2 results: false + error message. - | st_vmstate - | b ->vm_returnc - | - |//----------------------------------------------------------------------- - |//-- Grow stack for calls ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_growstack_c: // Grow stack for C function. - | li CARG2, LUA_MINSTACK - | b >2 - | - |->vm_growstack_l: // Grow stack for Lua function. - | // BASE = new base, RA = BASE+framesize*8, RC = nargs*8, PC = first PC - | add RC, BASE, RC - | sub RA, RA, BASE - | stw BASE, L->base - | addi PC, PC, 4 // Must point after first instruction. - | stw RC, L->top - | srwi CARG2, RA, 3 - |2: - | // L->base = new base, L->top = top - | stw PC, SAVE_PC - | mr CARG1, L - | bl extern lj_state_growstack // (lua_State *L, int n) - | lwz BASE, L->base - | lwz RC, L->top - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | sub RC, RC, BASE - | // BASE = new base, RB = LFUNC/CFUNC, RC = nargs*8, FRAME_PC(BASE) = PC - | ins_callt // Just retry the call. - | - |//----------------------------------------------------------------------- - |//-- Entry points into the assembler VM --------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_resume: // Setup C frame and resume thread. - | // (lua_State *L, TValue *base, int nres1 = 0, ptrdiff_t ef = 0) - | saveregs - | mr L, CARG1 - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | mr BASE, CARG2 - | lbz TMP1, L->status - | stw L, SAVE_L - | li PC, FRAME_CP - | addi TMP0, sp, CFRAME_RESUME - | addi DISPATCH, DISPATCH, GG_G2DISP - | stw CARG3, SAVE_NRES - | cmplwi TMP1, 0 - | stw CARG3, SAVE_ERRF - | stw TMP0, L->cframe - | stw CARG3, SAVE_CFRAME - | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | beq >3 - | - | // Resume after yield (like a return). - | mr RA, BASE - | lwz BASE, L->base - | evsplati TISNUM, LJ_TISNUM+1 // Setup type comparison constants. - | lwz TMP1, L->top - | evsplati TISFUNC, LJ_TFUNC - | lus TOBIT, 0x4338 - | evsplati TISTAB, LJ_TTAB - | lwz PC, FRAME_PC(BASE) - | li TMP2, 0 - | evsplati TISSTR, LJ_TSTR - | sub RD, TMP1, BASE - | evmergelo TOBIT, TOBIT, TMP2 - | stb CARG3, L->status - | andi. TMP0, PC, FRAME_TYPE - | li_vmstate INTERP - | addi RD, RD, 8 - | evsplati TISNIL, LJ_TNIL - | mr MULTRES, RD - | st_vmstate - | beq ->BC_RET_Z - | b ->vm_return - | - |->vm_pcall: // Setup protected C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) - | saveregs - | li PC, FRAME_CP - | stw CARG4, SAVE_ERRF - | b >1 - | - |->vm_call: // Setup C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1) - | saveregs - | li PC, FRAME_C - | - |1: // Entry point for vm_pcall above (PC = ftype). - | lwz TMP1, L:CARG1->cframe - | stw CARG3, SAVE_NRES - | mr L, CARG1 - | stw CARG1, SAVE_L - | mr BASE, CARG2 - | stw sp, L->cframe // Add our C frame to cframe chain. - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | stw TMP1, SAVE_CFRAME - | addi DISPATCH, DISPATCH, GG_G2DISP - | - |3: // Entry point for vm_cpcall/vm_resume (BASE = base, PC = ftype). - | lwz TMP2, L->base // TMP2 = old base (used in vmeta_call). - | evsplati TISNUM, LJ_TISNUM+1 // Setup type comparison constants. - | lwz TMP1, L->top - | evsplati TISFUNC, LJ_TFUNC - | add PC, PC, BASE - | evsplati TISTAB, LJ_TTAB - | lus TOBIT, 0x4338 - | li TMP0, 0 - | sub PC, PC, TMP2 // PC = frame delta + frame type - | evsplati TISSTR, LJ_TSTR - | sub NARGS8:RC, TMP1, BASE - | evmergelo TOBIT, TOBIT, TMP0 - | li_vmstate INTERP - | evsplati TISNIL, LJ_TNIL - | st_vmstate - | - |->vm_call_dispatch: - | // TMP2 = old base, BASE = new base, RC = nargs*8, PC = caller PC - | li TMP0, -8 - | evlddx LFUNC:RB, BASE, TMP0 - | checkfunc LFUNC:RB - | checkfail ->vmeta_call - | - |->vm_call_dispatch_f: - | ins_call - | // BASE = new base, RB = func, RC = nargs*8, PC = caller PC - | - |->vm_cpcall: // Setup protected C frame, call C. - | // (lua_State *L, lua_CFunction func, void *ud, lua_CPFunction cp) - | saveregs - | mr L, CARG1 - | lwz TMP0, L:CARG1->stack - | stw CARG1, SAVE_L - | lwz TMP1, L->top - | stw CARG1, SAVE_PC // Any value outside of bytecode is ok. - | sub TMP0, TMP0, TMP1 // Compute -savestack(L, L->top). - | lwz TMP1, L->cframe - | stw sp, L->cframe // Add our C frame to cframe chain. - | li TMP2, 0 - | stw TMP0, SAVE_NRES // Neg. delta means cframe w/o frame. - | stw TMP2, SAVE_ERRF // No error function. - | stw TMP1, SAVE_CFRAME - | mtctr CARG4 - | bctrl // (lua_State *L, lua_CFunction func, void *ud) - | mr. BASE, CRET1 - | lwz DISPATCH, L->glref // Setup pointer to dispatch table. - | li PC, FRAME_CP - | addi DISPATCH, DISPATCH, GG_G2DISP - | bne <3 // Else continue with the call. - | b ->vm_leave_cp // No base? Just remove C frame. - | - |//----------------------------------------------------------------------- - |//-- Metamethod handling ------------------------------------------------ - |//----------------------------------------------------------------------- - | - |// The lj_meta_* functions (except for lj_meta_cat) don't reallocate the - |// stack, so BASE doesn't need to be reloaded across these calls. - | - |//-- Continuation dispatch ---------------------------------------------- - | - |->cont_dispatch: - | // BASE = meta base, RA = resultptr, RD = (nresults+1)*8 - | lwz TMP0, -12(BASE) // Continuation. - | mr RB, BASE - | mr BASE, TMP2 // Restore caller BASE. - | lwz LFUNC:TMP1, FRAME_FUNC(TMP2) - | cmplwi TMP0, 0 - | lwz PC, -16(RB) // Restore PC from [cont|PC]. - | beq >1 - | subi TMP2, RD, 8 - | lwz TMP1, LFUNC:TMP1->pc - | evstddx TISNIL, RA, TMP2 // Ensure one valid arg. - | lwz KBASE, PC2PROTO(k)(TMP1) - | // BASE = base, RA = resultptr, RB = meta base - | mtctr TMP0 - | bctr // Jump to continuation. - | - |1: // Tail call from C function. - | subi TMP1, RB, 16 - | sub RC, TMP1, BASE - | b ->vm_call_tail - | - |->cont_cat: // RA = resultptr, RB = meta base - | lwz INS, -4(PC) - | subi CARG2, RB, 16 - | decode_RB8 SAVE0, INS - | evldd TMP0, 0(RA) - | add TMP1, BASE, SAVE0 - | stw BASE, L->base - | cmplw TMP1, CARG2 - | sub CARG3, CARG2, TMP1 - | decode_RA8 RA, INS - | evstdd TMP0, 0(CARG2) - | bne ->BC_CAT_Z - | evstddx TMP0, BASE, RA - | b ->cont_nop - | - |//-- Table indexing metamethods ----------------------------------------- - | - |->vmeta_tgets1: - | evmergelo STR:RC, TISSTR, STR:RC - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | decode_RB8 RB, INS - | evstdd STR:RC, 0(CARG3) - | add CARG2, BASE, RB - | b >1 - | - |->vmeta_tgets: - | evmergelo TAB:RB, TISTAB, TAB:RB - | la CARG2, DISPATCH_GL(tmptv)(DISPATCH) - | evmergelo STR:RC, TISSTR, STR:RC - | evstdd TAB:RB, 0(CARG2) - | la CARG3, DISPATCH_GL(tmptv2)(DISPATCH) - | evstdd STR:RC, 0(CARG3) - | b >1 - | - |->vmeta_tgetb: // TMP0 = index - | efdcfsi TMP0, TMP0 - | decode_RB8 RB, INS - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | add CARG2, BASE, RB - | evstdd TMP0, 0(CARG3) - | b >1 - | - |->vmeta_tgetv: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG2, BASE, RB - | add CARG3, BASE, RC - |1: - | stw BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_tget // (lua_State *L, TValue *o, TValue *k) - | // Returns TValue * (finished) or NULL (metamethod). - | cmplwi CRET1, 0 - | beq >3 - | evldd TMP0, 0(CRET1) - | evstddx TMP0, BASE, RA - | ins_next - | - |3: // Call __index metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k - | subfic TMP1, BASE, FRAME_CONT - | lwz BASE, L->top - | stw PC, -16(BASE) // [cont|PC] - | add PC, TMP1, BASE - | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | li NARGS8:RC, 16 // 2 args for func(t, k). - | b ->vm_call_dispatch_f - | - |//----------------------------------------------------------------------- - | - |->vmeta_tsets1: - | evmergelo STR:RC, TISSTR, STR:RC - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | decode_RB8 RB, INS - | evstdd STR:RC, 0(CARG3) - | add CARG2, BASE, RB - | b >1 - | - |->vmeta_tsets: - | evmergelo TAB:RB, TISTAB, TAB:RB - | la CARG2, DISPATCH_GL(tmptv)(DISPATCH) - | evmergelo STR:RC, TISSTR, STR:RC - | evstdd TAB:RB, 0(CARG2) - | la CARG3, DISPATCH_GL(tmptv2)(DISPATCH) - | evstdd STR:RC, 0(CARG3) - | b >1 - | - |->vmeta_tsetb: // TMP0 = index - | efdcfsi TMP0, TMP0 - | decode_RB8 RB, INS - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | add CARG2, BASE, RB - | evstdd TMP0, 0(CARG3) - | b >1 - | - |->vmeta_tsetv: - | decode_RB8 RB, INS - | decode_RC8 RC, INS - | add CARG2, BASE, RB - | add CARG3, BASE, RC - |1: - | stw BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_tset // (lua_State *L, TValue *o, TValue *k) - | // Returns TValue * (finished) or NULL (metamethod). - | cmplwi CRET1, 0 - | evlddx TMP0, BASE, RA - | beq >3 - | // NOBARRIER: lj_meta_tset ensures the table is not black. - | evstdd TMP0, 0(CRET1) - | ins_next - | - |3: // Call __newindex metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k/(v) - | subfic TMP1, BASE, FRAME_CONT - | lwz BASE, L->top - | stw PC, -16(BASE) // [cont|PC] - | add PC, TMP1, BASE - | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | li NARGS8:RC, 24 // 3 args for func(t, k, v) - | evstdd TMP0, 16(BASE) // Copy value to third argument. - | b ->vm_call_dispatch_f - | - |//-- Comparison metamethods --------------------------------------------- - | - |->vmeta_comp: - | mr CARG1, L - | subi PC, PC, 4 - | add CARG2, BASE, RA - | stw PC, SAVE_PC - | add CARG3, BASE, RD - | stw BASE, L->base - | decode_OP1 CARG4, INS - | bl extern lj_meta_comp // (lua_State *L, TValue *o1, *o2, int op) - | // Returns 0/1 or TValue * (metamethod). - |3: - | cmplwi CRET1, 1 - | bgt ->vmeta_binop - |4: - | lwz INS, 0(PC) - | addi PC, PC, 4 - | decode_RD4 TMP2, INS - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | add TMP2, TMP2, TMP3 - | isellt PC, PC, TMP2 - |->cont_nop: - | ins_next - | - |->cont_ra: // RA = resultptr - | lwz INS, -4(PC) - | evldd TMP0, 0(RA) - | decode_RA8 TMP1, INS - | evstddx TMP0, BASE, TMP1 - | b ->cont_nop - | - |->cont_condt: // RA = resultptr - | lwz TMP0, 0(RA) - | li TMP1, LJ_TTRUE - | cmplw TMP1, TMP0 // Branch if result is true. - | b <4 - | - |->cont_condf: // RA = resultptr - | lwz TMP0, 0(RA) - | li TMP1, LJ_TFALSE - | cmplw TMP0, TMP1 // Branch if result is false. - | b <4 - | - |->vmeta_equal: - | // CARG2, CARG3, CARG4 are already set by BC_ISEQV/BC_ISNEV. - | subi PC, PC, 4 - | stw BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_equal // (lua_State *L, GCobj *o1, *o2, int ne) - | // Returns 0/1 or TValue * (metamethod). - | b <3 - | - |//-- Arithmetic metamethods --------------------------------------------- - | - |->vmeta_arith_vn: - | add CARG3, BASE, RB - | add CARG4, KBASE, RC - | b >1 - | - |->vmeta_arith_nv: - | add CARG3, KBASE, RC - | add CARG4, BASE, RB - | b >1 - | - |->vmeta_unm: - | add CARG3, BASE, RD - | mr CARG4, CARG3 - | b >1 - | - |->vmeta_arith_vv: - | add CARG3, BASE, RB - | add CARG4, BASE, RC - |1: - | add CARG2, BASE, RA - | stw BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | decode_OP1 CARG5, INS // Caveat: CARG5 overlaps INS. - | bl extern lj_meta_arith // (lua_State *L, TValue *ra,*rb,*rc, BCReg op) - | // Returns NULL (finished) or TValue * (metamethod). - | cmplwi CRET1, 0 - | beq ->cont_nop - | - | // Call metamethod for binary op. - |->vmeta_binop: - | // BASE = old base, CRET1 = new base, stack = cont/func/o1/o2 - | sub TMP1, CRET1, BASE - | stw PC, -16(CRET1) // [cont|PC] - | mr TMP2, BASE - | addi PC, TMP1, FRAME_CONT - | mr BASE, CRET1 - | li NARGS8:RC, 16 // 2 args for func(o1, o2). - | b ->vm_call_dispatch - | - |->vmeta_len: -#if LJ_52 - | mr SAVE0, CARG1 -#endif - | add CARG2, BASE, RD - | stw BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | bl extern lj_meta_len // (lua_State *L, TValue *o) - | // Returns NULL (retry) or TValue * (metamethod base). -#if LJ_52 - | cmplwi CRET1, 0 - | bne ->vmeta_binop // Binop call for compatibility. - | mr CARG1, SAVE0 - | b ->BC_LEN_Z -#else - | b ->vmeta_binop // Binop call for compatibility. -#endif - | - |//-- Call metamethod ---------------------------------------------------- - | - |->vmeta_call: // Resolve and call __call metamethod. - | // TMP2 = old base, BASE = new base, RC = nargs*8 - | mr CARG1, L - | stw TMP2, L->base // This is the callers base! - | subi CARG2, BASE, 8 - | stw PC, SAVE_PC - | add CARG3, BASE, RC - | mr SAVE0, NARGS8:RC - | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | lwz LFUNC:RB, FRAME_FUNC(BASE) // Guaranteed to be a function here. - | addi NARGS8:RC, SAVE0, 8 // Got one more argument now. - | ins_call - | - |->vmeta_callt: // Resolve __call for BC_CALLT. - | // BASE = old base, RA = new base, RC = nargs*8 - | mr CARG1, L - | stw BASE, L->base - | subi CARG2, RA, 8 - | stw PC, SAVE_PC - | add CARG3, RA, RC - | mr SAVE0, NARGS8:RC - | bl extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | lwz TMP1, FRAME_PC(BASE) - | addi NARGS8:RC, SAVE0, 8 // Got one more argument now. - | lwz LFUNC:RB, FRAME_FUNC(RA) // Guaranteed to be a function here. - | b ->BC_CALLT_Z - | - |//-- Argument coercion for 'for' statement ------------------------------ - | - |->vmeta_for: - | mr CARG1, L - | stw BASE, L->base - | mr CARG2, RA - | stw PC, SAVE_PC - | mr SAVE0, INS - | bl extern lj_meta_for // (lua_State *L, TValue *base) - |.if JIT - | decode_OP1 TMP0, SAVE0 - |.endif - | decode_RA8 RA, SAVE0 - |.if JIT - | cmpwi TMP0, BC_JFORI - |.endif - | decode_RD8 RD, SAVE0 - |.if JIT - | beq =>BC_JFORI - |.endif - | b =>BC_FORI - | - |//----------------------------------------------------------------------- - |//-- Fast functions ----------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro .ffunc, name - |->ff_ .. name: - |.endmacro - | - |.macro .ffunc_1, name - |->ff_ .. name: - | cmplwi NARGS8:RC, 8 - | evldd CARG1, 0(BASE) - | blt ->fff_fallback - |.endmacro - | - |.macro .ffunc_2, name - |->ff_ .. name: - | cmplwi NARGS8:RC, 16 - | evldd CARG1, 0(BASE) - | evldd CARG2, 8(BASE) - | blt ->fff_fallback - |.endmacro - | - |.macro .ffunc_n, name - | .ffunc_1 name - | checknum CARG1 - | checkfail ->fff_fallback - |.endmacro - | - |.macro .ffunc_nn, name - | .ffunc_2 name - | evmergehi TMP0, CARG1, CARG2 - | checknum TMP0 - | checkanyfail ->fff_fallback - |.endmacro - | - |// Inlined GC threshold check. Caveat: uses TMP0 and TMP1. - |.macro ffgccheck - | lwz TMP0, DISPATCH_GL(gc.total)(DISPATCH) - | lwz TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) - | cmplw TMP0, TMP1 - | bgel ->fff_gcstep - |.endmacro - | - |//-- Base library: checks ----------------------------------------------- - | - |.ffunc assert - | cmplwi NARGS8:RC, 8 - | evldd TMP0, 0(BASE) - | blt ->fff_fallback - | evaddw TMP1, TISNIL, TISNIL // Synthesize LJ_TFALSE. - | la RA, -8(BASE) - | evcmpltu cr1, TMP0, TMP1 - | lwz PC, FRAME_PC(BASE) - | bge cr1, ->fff_fallback - | evstdd TMP0, 0(RA) - | addi RD, NARGS8:RC, 8 // Compute (nresults+1)*8. - | beq ->fff_res // Done if exactly 1 argument. - | li TMP1, 8 - | subi RC, RC, 8 - |1: - | cmplw TMP1, RC - | evlddx TMP0, BASE, TMP1 - | evstddx TMP0, RA, TMP1 - | addi TMP1, TMP1, 8 - | bne <1 - | b ->fff_res - | - |.ffunc type - | cmplwi NARGS8:RC, 8 - | lwz CARG1, 0(BASE) - | blt ->fff_fallback - | li TMP2, ~LJ_TNUMX - | cmplw CARG1, TISNUM - | not TMP1, CARG1 - | isellt TMP1, TMP2, TMP1 - | slwi TMP1, TMP1, 3 - | la TMP2, CFUNC:RB->upvalue - | evlddx STR:CRET1, TMP2, TMP1 - | b ->fff_restv - | - |//-- Base library: getters and setters --------------------------------- - | - |.ffunc_1 getmetatable - | checktab CARG1 - | evmergehi TMP1, CARG1, CARG1 - | checkfail >6 - |1: // Field metatable must be at same offset for GCtab and GCudata! - | lwz TAB:RB, TAB:CARG1->metatable - |2: - | evmr CRET1, TISNIL - | cmplwi TAB:RB, 0 - | lwz STR:RC, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable])(DISPATCH) - | beq ->fff_restv - | lwz TMP0, TAB:RB->hmask - | evmergelo CRET1, TISTAB, TAB:RB // Use metatable as default result. - | lwz TMP1, STR:RC->hash - | lwz NODE:TMP2, TAB:RB->node - | evmergelo STR:RC, TISSTR, STR:RC - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | slwi TMP0, TMP1, 5 - | slwi TMP1, TMP1, 3 - | sub TMP1, TMP0, TMP1 - | add NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |3: // Rearranged logic, because we expect _not_ to find the key. - | evldd TMP0, NODE:TMP2->key - | evldd TMP1, NODE:TMP2->val - | evcmpeq TMP0, STR:RC - | lwz NODE:TMP2, NODE:TMP2->next - | checkallok >5 - | cmplwi NODE:TMP2, 0 - | beq ->fff_restv // Not found, keep default result. - | b <3 - |5: - | checknil TMP1 - | checkok ->fff_restv // Ditto for nil value. - | evmr CRET1, TMP1 // Return value of mt.__metatable. - | b ->fff_restv - | - |6: - | cmpwi TMP1, LJ_TUDATA - | not TMP1, TMP1 - | beq <1 - | checknum CARG1 - | slwi TMP1, TMP1, 2 - | li TMP2, 4*~LJ_TNUMX - | isellt TMP1, TMP2, TMP1 - | la TMP2, DISPATCH_GL(gcroot[GCROOT_BASEMT])(DISPATCH) - | lwzx TAB:RB, TMP2, TMP1 - | b <2 - | - |.ffunc_2 setmetatable - | // Fast path: no mt for table yet and not clearing the mt. - | evmergehi TMP0, TAB:CARG1, TAB:CARG2 - | checktab TMP0 - | checkanyfail ->fff_fallback - | lwz TAB:TMP1, TAB:CARG1->metatable - | cmplwi TAB:TMP1, 0 - | lbz TMP3, TAB:CARG1->marked - | bne ->fff_fallback - | andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - | stw TAB:CARG2, TAB:CARG1->metatable - | beq ->fff_restv - | barrierback TAB:CARG1, TMP3, TMP0 - | b ->fff_restv - | - |.ffunc rawget - | cmplwi NARGS8:RC, 16 - | evldd CARG2, 0(BASE) - | blt ->fff_fallback - | checktab CARG2 - | la CARG3, 8(BASE) - | checkfail ->fff_fallback - | mr CARG1, L - | bl extern lj_tab_get // (lua_State *L, GCtab *t, cTValue *key) - | // Returns cTValue *. - | evldd CRET1, 0(CRET1) - | b ->fff_restv - | - |//-- Base library: conversions ------------------------------------------ - | - |.ffunc tonumber - | // Only handles the number case inline (without a base argument). - | cmplwi NARGS8:RC, 8 - | evldd CARG1, 0(BASE) - | bne ->fff_fallback // Exactly one argument. - | checknum CARG1 - | checkok ->fff_restv - | b ->fff_fallback - | - |.ffunc_1 tostring - | // Only handles the string or number case inline. - | checkstr CARG1 - | // A __tostring method in the string base metatable is ignored. - | checkok ->fff_restv // String key? - | // Handle numbers inline, unless a number base metatable is present. - | lwz TMP0, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM])(DISPATCH) - | checknum CARG1 - | cmplwi cr1, TMP0, 0 - | stw BASE, L->base // Add frame since C call can throw. - | crand 4*cr0+eq, 4*cr0+lt, 4*cr1+eq - | stw PC, SAVE_PC // Redundant (but a defined value). - | bne ->fff_fallback - | ffgccheck - | mr CARG1, L - | mr CARG2, BASE - | bl extern lj_str_fromnum // (lua_State *L, lua_Number *np) - | // Returns GCstr *. - | evmergelo STR:CRET1, TISSTR, STR:CRET1 - | b ->fff_restv - | - |//-- Base library: iterators ------------------------------------------- - | - |.ffunc next - | cmplwi NARGS8:RC, 8 - | evldd CARG2, 0(BASE) - | blt ->fff_fallback - | evstddx TISNIL, BASE, NARGS8:RC // Set missing 2nd arg to nil. - | checktab TAB:CARG2 - | lwz PC, FRAME_PC(BASE) - | checkfail ->fff_fallback - | stw BASE, L->base // Add frame since C call can throw. - | mr CARG1, L - | stw BASE, L->top // Dummy frame length is ok. - | la CARG3, 8(BASE) - | stw PC, SAVE_PC - | bl extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) - | // Returns 0 at end of traversal. - | cmplwi CRET1, 0 - | evmr CRET1, TISNIL - | beq ->fff_restv // End of traversal: return nil. - | evldd TMP0, 8(BASE) // Copy key and value to results. - | la RA, -8(BASE) - | evldd TMP1, 16(BASE) - | evstdd TMP0, 0(RA) - | li RD, (2+1)*8 - | evstdd TMP1, 8(RA) - | b ->fff_res - | - |.ffunc_1 pairs - | checktab TAB:CARG1 - | lwz PC, FRAME_PC(BASE) - | checkfail ->fff_fallback -#if LJ_52 - | lwz TAB:TMP2, TAB:CARG1->metatable - | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] - | cmplwi TAB:TMP2, 0 - | la RA, -8(BASE) - | bne ->fff_fallback -#else - | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] - | la RA, -8(BASE) -#endif - | evstdd TISNIL, 8(BASE) - | li RD, (3+1)*8 - | evstdd CFUNC:TMP0, 0(RA) - | b ->fff_res - | - |.ffunc_2 ipairs_aux - | checktab TAB:CARG1 - | lwz PC, FRAME_PC(BASE) - | checkfail ->fff_fallback - | checknum CARG2 - | lus TMP3, 0x3ff0 - | checkfail ->fff_fallback - | efdctsi TMP2, CARG2 - | lwz TMP0, TAB:CARG1->asize - | evmergelo TMP3, TMP3, ZERO - | lwz TMP1, TAB:CARG1->array - | efdadd CARG2, CARG2, TMP3 - | addi TMP2, TMP2, 1 - | la RA, -8(BASE) - | cmplw TMP0, TMP2 - | slwi TMP3, TMP2, 3 - | evstdd CARG2, 0(RA) - | ble >2 // Not in array part? - | evlddx TMP1, TMP1, TMP3 - |1: - | checknil TMP1 - | li RD, (0+1)*8 - | checkok ->fff_res // End of iteration, return 0 results. - | li RD, (2+1)*8 - | evstdd TMP1, 8(RA) - | b ->fff_res - |2: // Check for empty hash part first. Otherwise call C function. - | lwz TMP0, TAB:CARG1->hmask - | cmplwi TMP0, 0 - | li RD, (0+1)*8 - | beq ->fff_res - | mr CARG2, TMP2 - | bl extern lj_tab_getinth // (GCtab *t, int32_t key) - | // Returns cTValue * or NULL. - | cmplwi CRET1, 0 - | li RD, (0+1)*8 - | beq ->fff_res - | evldd TMP1, 0(CRET1) - | b <1 - | - |.ffunc_1 ipairs - | checktab TAB:CARG1 - | lwz PC, FRAME_PC(BASE) - | checkfail ->fff_fallback -#if LJ_52 - | lwz TAB:TMP2, TAB:CARG1->metatable - | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] - | cmplwi TAB:TMP2, 0 - | la RA, -8(BASE) - | bne ->fff_fallback -#else - | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] - | la RA, -8(BASE) -#endif - | evsplati TMP1, 0 - | li RD, (3+1)*8 - | evstdd TMP1, 8(BASE) - | evstdd CFUNC:TMP0, 0(RA) - | b ->fff_res - | - |//-- Base library: catch errors ---------------------------------------- - | - |.ffunc pcall - | cmplwi NARGS8:RC, 8 - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | blt ->fff_fallback - | mr TMP2, BASE - | la BASE, 8(BASE) - | // Remember active hook before pcall. - | rlwinm TMP3, TMP3, 32-HOOK_ACTIVE_SHIFT, 31, 31 - | subi NARGS8:RC, NARGS8:RC, 8 - | addi PC, TMP3, 8+FRAME_PCALL - | b ->vm_call_dispatch - | - |.ffunc_2 xpcall - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | mr TMP2, BASE - | checkfunc CARG2 // Traceback must be a function. - | checkfail ->fff_fallback - | la BASE, 16(BASE) - | // Remember active hook before pcall. - | rlwinm TMP3, TMP3, 32-HOOK_ACTIVE_SHIFT, 31, 31 - | evstdd CARG2, 0(TMP2) // Swap function and traceback. - | subi NARGS8:RC, NARGS8:RC, 16 - | evstdd CARG1, 8(TMP2) - | addi PC, TMP3, 16+FRAME_PCALL - | b ->vm_call_dispatch - | - |//-- Coroutine library -------------------------------------------------- - | - |.macro coroutine_resume_wrap, resume - |.if resume - |.ffunc_1 coroutine_resume - | evmergehi TMP0, L:CARG1, L:CARG1 - |.else - |.ffunc coroutine_wrap_aux - | lwz L:CARG1, CFUNC:RB->upvalue[0].gcr - |.endif - |.if resume - | cmpwi TMP0, LJ_TTHREAD - | bne ->fff_fallback - |.endif - | lbz TMP0, L:CARG1->status - | lwz TMP1, L:CARG1->cframe - | lwz CARG2, L:CARG1->top - | cmplwi cr0, TMP0, LUA_YIELD - | lwz TMP2, L:CARG1->base - | cmplwi cr1, TMP1, 0 - | lwz TMP0, L:CARG1->maxstack - | cmplw cr7, CARG2, TMP2 - | lwz PC, FRAME_PC(BASE) - | crorc 4*cr6+lt, 4*cr0+gt, 4*cr1+eq // st>LUA_YIELD || cframe!=0 - | add TMP2, CARG2, NARGS8:RC - | crandc 4*cr6+gt, 4*cr7+eq, 4*cr0+eq // base==top && st!=LUA_YIELD - | cmplw cr1, TMP2, TMP0 - | cror 4*cr6+lt, 4*cr6+lt, 4*cr6+gt - | stw PC, SAVE_PC - | cror 4*cr6+lt, 4*cr6+lt, 4*cr1+gt // cond1 || cond2 || stackov - | stw BASE, L->base - | blt cr6, ->fff_fallback - |1: - |.if resume - | addi BASE, BASE, 8 // Keep resumed thread in stack for GC. - | subi NARGS8:RC, NARGS8:RC, 8 - | subi TMP2, TMP2, 8 - |.endif - | stw TMP2, L:CARG1->top - | li TMP1, 0 - | stw BASE, L->top - |2: // Move args to coroutine. - | cmpw TMP1, NARGS8:RC - | evlddx TMP0, BASE, TMP1 - | beq >3 - | evstddx TMP0, CARG2, TMP1 - | addi TMP1, TMP1, 8 - | b <2 - |3: - | li CARG3, 0 - | mr L:SAVE0, L:CARG1 - | li CARG4, 0 - | bl ->vm_resume // (lua_State *L, TValue *base, 0, 0) - | // Returns thread status. - |4: - | lwz TMP2, L:SAVE0->base - | cmplwi CRET1, LUA_YIELD - | lwz TMP3, L:SAVE0->top - | li_vmstate INTERP - | lwz BASE, L->base - | st_vmstate - | bgt >8 - | sub RD, TMP3, TMP2 - | lwz TMP0, L->maxstack - | cmplwi RD, 0 - | add TMP1, BASE, RD - | beq >6 // No results? - | cmplw TMP1, TMP0 - | li TMP1, 0 - | bgt >9 // Need to grow stack? - | - | subi TMP3, RD, 8 - | stw TMP2, L:SAVE0->top // Clear coroutine stack. - |5: // Move results from coroutine. - | cmplw TMP1, TMP3 - | evlddx TMP0, TMP2, TMP1 - | evstddx TMP0, BASE, TMP1 - | addi TMP1, TMP1, 8 - | bne <5 - |6: - | andi. TMP0, PC, FRAME_TYPE - |.if resume - | li TMP1, LJ_TTRUE - | la RA, -8(BASE) - | stw TMP1, -8(BASE) // Prepend true to results. - | addi RD, RD, 16 - |.else - | mr RA, BASE - | addi RD, RD, 8 - |.endif - |7: - | stw PC, SAVE_PC - | mr MULTRES, RD - | beq ->BC_RET_Z - | b ->vm_return - | - |8: // Coroutine returned with error (at co->top-1). - |.if resume - | andi. TMP0, PC, FRAME_TYPE - | la TMP3, -8(TMP3) - | li TMP1, LJ_TFALSE - | evldd TMP0, 0(TMP3) - | stw TMP3, L:SAVE0->top // Remove error from coroutine stack. - | li RD, (2+1)*8 - | stw TMP1, -8(BASE) // Prepend false to results. - | la RA, -8(BASE) - | evstdd TMP0, 0(BASE) // Copy error message. - | b <7 - |.else - | mr CARG1, L - | mr CARG2, L:SAVE0 - | bl extern lj_ffh_coroutine_wrap_err // (lua_State *L, lua_State *co) - |.endif - | - |9: // Handle stack expansion on return from yield. - | mr CARG1, L - | srwi CARG2, RD, 3 - | bl extern lj_state_growstack // (lua_State *L, int n) - | li CRET1, 0 - | b <4 - |.endmacro - | - | coroutine_resume_wrap 1 // coroutine.resume - | coroutine_resume_wrap 0 // coroutine.wrap - | - |.ffunc coroutine_yield - | lwz TMP0, L->cframe - | add TMP1, BASE, NARGS8:RC - | stw BASE, L->base - | andi. TMP0, TMP0, CFRAME_RESUME - | stw TMP1, L->top - | li CRET1, LUA_YIELD - | beq ->fff_fallback - | stw ZERO, L->cframe - | stb CRET1, L->status - | b ->vm_leave_unw - | - |//-- Math library ------------------------------------------------------- - | - |.ffunc_n math_abs - | efdabs CRET1, CARG1 - | // Fallthrough. - | - |->fff_restv: - | // CRET1 = TValue result. - | lwz PC, FRAME_PC(BASE) - | la RA, -8(BASE) - | evstdd CRET1, 0(RA) - |->fff_res1: - | // RA = results, PC = return. - | li RD, (1+1)*8 - |->fff_res: - | // RA = results, RD = (nresults+1)*8, PC = return. - | andi. TMP0, PC, FRAME_TYPE - | mr MULTRES, RD - | bne ->vm_return - | lwz INS, -4(PC) - | decode_RB8 RB, INS - |5: - | cmplw RB, RD // More results expected? - | decode_RA8 TMP0, INS - | bgt >6 - | ins_next1 - | // Adjust BASE. KBASE is assumed to be set for the calling frame. - | sub BASE, RA, TMP0 - | ins_next2 - | - |6: // Fill up results with nil. - | subi TMP1, RD, 8 - | addi RD, RD, 8 - | evstddx TISNIL, RA, TMP1 - | b <5 - | - |.macro math_extern, func - | .ffunc math_ .. func - | cmplwi NARGS8:RC, 8 - | evldd CARG2, 0(BASE) - | blt ->fff_fallback - | checknum CARG2 - | evmergehi CARG1, CARG2, CARG2 - | checkfail ->fff_fallback - | bl extern func@plt - | evmergelo CRET1, CRET1, CRET2 - | b ->fff_restv - |.endmacro - | - |.macro math_extern2, func - | .ffunc math_ .. func - | cmplwi NARGS8:RC, 16 - | evldd CARG2, 0(BASE) - | evldd CARG4, 8(BASE) - | blt ->fff_fallback - | evmergehi CARG1, CARG4, CARG2 - | checknum CARG1 - | evmergehi CARG3, CARG4, CARG4 - | checkanyfail ->fff_fallback - | bl extern func@plt - | evmergelo CRET1, CRET1, CRET2 - | b ->fff_restv - |.endmacro - | - |.macro math_round, func - | .ffunc math_ .. func - | cmplwi NARGS8:RC, 8 - | evldd CARG2, 0(BASE) - | blt ->fff_fallback - | checknum CARG2 - | evmergehi CARG1, CARG2, CARG2 - | checkfail ->fff_fallback - | lwz PC, FRAME_PC(BASE) - | bl ->vm_..func.._hilo; - | la RA, -8(BASE) - | evstdd CRET2, 0(RA) - | b ->fff_res1 - |.endmacro - | - | math_round floor - | math_round ceil - | - | math_extern sqrt - | - |.ffunc math_log - | cmplwi NARGS8:RC, 8 - | evldd CARG2, 0(BASE) - | bne ->fff_fallback // Need exactly 1 argument. - | checknum CARG2 - | evmergehi CARG1, CARG2, CARG2 - | checkfail ->fff_fallback - | bl extern log@plt - | evmergelo CRET1, CRET1, CRET2 - | b ->fff_restv - | - | math_extern log10 - | math_extern exp - | math_extern sin - | math_extern cos - | math_extern tan - | math_extern asin - | math_extern acos - | math_extern atan - | math_extern sinh - | math_extern cosh - | math_extern tanh - | math_extern2 pow - | math_extern2 atan2 - | math_extern2 fmod - | - |->ff_math_deg: - |.ffunc_n math_rad - | evldd CARG2, CFUNC:RB->upvalue[0] - | efdmul CRET1, CARG1, CARG2 - | b ->fff_restv - | - |.ffunc math_ldexp - | cmplwi NARGS8:RC, 16 - | evldd CARG2, 0(BASE) - | evldd CARG4, 8(BASE) - | blt ->fff_fallback - | evmergehi CARG1, CARG4, CARG2 - | checknum CARG1 - | checkanyfail ->fff_fallback - | efdctsi CARG3, CARG4 - | bl extern ldexp@plt - | evmergelo CRET1, CRET1, CRET2 - | b ->fff_restv - | - |.ffunc math_frexp - | cmplwi NARGS8:RC, 8 - | evldd CARG2, 0(BASE) - | blt ->fff_fallback - | checknum CARG2 - | evmergehi CARG1, CARG2, CARG2 - | checkfail ->fff_fallback - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | lwz PC, FRAME_PC(BASE) - | bl extern frexp@plt - | lwz TMP1, DISPATCH_GL(tmptv)(DISPATCH) - | evmergelo CRET1, CRET1, CRET2 - | efdcfsi CRET2, TMP1 - | la RA, -8(BASE) - | evstdd CRET1, 0(RA) - | li RD, (2+1)*8 - | evstdd CRET2, 8(RA) - | b ->fff_res - | - |.ffunc math_modf - | cmplwi NARGS8:RC, 8 - | evldd CARG2, 0(BASE) - | blt ->fff_fallback - | checknum CARG2 - | evmergehi CARG1, CARG2, CARG2 - | checkfail ->fff_fallback - | la CARG3, -8(BASE) - | lwz PC, FRAME_PC(BASE) - | bl extern modf@plt - | evmergelo CRET1, CRET1, CRET2 - | la RA, -8(BASE) - | evstdd CRET1, 0(BASE) - | li RD, (2+1)*8 - | b ->fff_res - | - |.macro math_minmax, name, cmpop - | .ffunc_1 name - | checknum CARG1 - | li TMP1, 8 - | checkfail ->fff_fallback - |1: - | evlddx CARG2, BASE, TMP1 - | cmplw cr1, TMP1, NARGS8:RC - | checknum CARG2 - | bge cr1, ->fff_restv // Ok, since CRET1 = CARG1. - | checkfail ->fff_fallback - | cmpop CARG2, CARG1 - | addi TMP1, TMP1, 8 - | crmove 4*cr0+lt, 4*cr0+gt - | evsel CARG1, CARG2, CARG1 - | b <1 - |.endmacro - | - | math_minmax math_min, efdtstlt - | math_minmax math_max, efdtstgt - | - |//-- String library ----------------------------------------------------- - | - |.ffunc_1 string_len - | checkstr STR:CARG1 - | checkfail ->fff_fallback - | lwz TMP0, STR:CARG1->len - | efdcfsi CRET1, TMP0 - | b ->fff_restv - | - |.ffunc string_byte // Only handle the 1-arg case here. - | cmplwi NARGS8:RC, 8 - | evldd STR:CARG1, 0(BASE) - | bne ->fff_fallback // Need exactly 1 argument. - | checkstr STR:CARG1 - | la RA, -8(BASE) - | checkfail ->fff_fallback - | lwz TMP0, STR:CARG1->len - | li RD, (0+1)*8 - | lbz TMP1, STR:CARG1[1] // Access is always ok (NUL at end). - | li TMP2, (1+1)*8 - | cmplwi TMP0, 0 - | lwz PC, FRAME_PC(BASE) - | efdcfsi CRET1, TMP1 - | iseleq RD, RD, TMP2 - | evstdd CRET1, 0(RA) - | b ->fff_res - | - |.ffunc string_char // Only handle the 1-arg case here. - | ffgccheck - | cmplwi NARGS8:RC, 8 - | evldd CARG1, 0(BASE) - | bne ->fff_fallback // Exactly 1 argument. - | checknum CARG1 - | la CARG2, DISPATCH_GL(tmptv)(DISPATCH) - | checkfail ->fff_fallback - | efdctsiz TMP0, CARG1 - | li CARG3, 1 - | cmplwi TMP0, 255 - | stb TMP0, 0(CARG2) - | bgt ->fff_fallback - |->fff_newstr: - | mr CARG1, L - | stw BASE, L->base - | stw PC, SAVE_PC - | bl extern lj_str_new // (lua_State *L, char *str, size_t l) - | // Returns GCstr *. - | lwz BASE, L->base - | evmergelo STR:CRET1, TISSTR, STR:CRET1 - | b ->fff_restv - | - |.ffunc string_sub - | ffgccheck - | cmplwi NARGS8:RC, 16 - | evldd CARG3, 16(BASE) - | evldd STR:CARG1, 0(BASE) - | blt ->fff_fallback - | evldd CARG2, 8(BASE) - | li TMP2, -1 - | beq >1 - | checknum CARG3 - | checkfail ->fff_fallback - | efdctsiz TMP2, CARG3 - |1: - | checknum CARG2 - | checkfail ->fff_fallback - | checkstr STR:CARG1 - | efdctsiz TMP1, CARG2 - | checkfail ->fff_fallback - | lwz TMP0, STR:CARG1->len - | cmplw TMP0, TMP2 // len < end? (unsigned compare) - | add TMP3, TMP2, TMP0 - | blt >5 - |2: - | cmpwi TMP1, 0 // start <= 0? - | add TMP3, TMP1, TMP0 - | ble >7 - |3: - | sub. CARG3, TMP2, TMP1 - | addi CARG2, STR:CARG1, #STR-1 - | addi CARG3, CARG3, 1 - | add CARG2, CARG2, TMP1 - | isellt CARG3, r0, CARG3 - | b ->fff_newstr - | - |5: // Negative end or overflow. - | cmpw TMP0, TMP2 - | addi TMP3, TMP3, 1 - | iselgt TMP2, TMP3, TMP0 // end = end > len ? len : end+len+1 - | b <2 - | - |7: // Negative start or underflow. - | cmpwi cr1, TMP3, 0 - | iseleq TMP1, r0, TMP3 - | isel TMP1, r0, TMP1, 4*cr1+lt - | addi TMP1, TMP1, 1 // start = 1 + (start ? start+len : 0) - | b <3 - | - |.ffunc string_rep // Only handle the 1-char case inline. - | ffgccheck - | cmplwi NARGS8:RC, 16 - | evldd CARG1, 0(BASE) - | evldd CARG2, 8(BASE) - | bne ->fff_fallback // Exactly 2 arguments. - | checknum CARG2 - | checkfail ->fff_fallback - | checkstr STR:CARG1 - | efdctsiz CARG3, CARG2 - | checkfail ->fff_fallback - | lwz TMP0, STR:CARG1->len - | cmpwi CARG3, 0 - | lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | ble >2 // Count <= 0? (or non-int) - | cmplwi TMP0, 1 - | subi TMP2, CARG3, 1 - | blt >2 // Zero length string? - | cmplw cr1, TMP1, CARG3 - | bne ->fff_fallback // Fallback for > 1-char strings. - | lbz TMP0, STR:CARG1[1] - | lwz CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | blt cr1, ->fff_fallback - |1: // Fill buffer with char. Yes, this is suboptimal code (do you care?). - | cmplwi TMP2, 0 - | stbx TMP0, CARG2, TMP2 - | subi TMP2, TMP2, 1 - | bne <1 - | b ->fff_newstr - |2: // Return empty string. - | la STR:CRET1, DISPATCH_GL(strempty)(DISPATCH) - | evmergelo CRET1, TISSTR, STR:CRET1 - | b ->fff_restv - | - |.ffunc string_reverse - | ffgccheck - | cmplwi NARGS8:RC, 8 - | evldd CARG1, 0(BASE) - | blt ->fff_fallback - | checkstr STR:CARG1 - | lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | checkfail ->fff_fallback - | lwz CARG3, STR:CARG1->len - | la CARG1, #STR(STR:CARG1) - | lwz CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | li TMP2, 0 - | cmplw TMP1, CARG3 - | subi TMP3, CARG3, 1 - | blt ->fff_fallback - |1: // Reverse string copy. - | cmpwi TMP3, 0 - | lbzx TMP1, CARG1, TMP2 - | blt ->fff_newstr - | stbx TMP1, CARG2, TMP3 - | subi TMP3, TMP3, 1 - | addi TMP2, TMP2, 1 - | b <1 - | - |.macro ffstring_case, name, lo - | .ffunc name - | ffgccheck - | cmplwi NARGS8:RC, 8 - | evldd CARG1, 0(BASE) - | blt ->fff_fallback - | checkstr STR:CARG1 - | lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH) - | checkfail ->fff_fallback - | lwz CARG3, STR:CARG1->len - | la CARG1, #STR(STR:CARG1) - | lwz CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH) - | cmplw TMP1, CARG3 - | li TMP2, 0 - | blt ->fff_fallback - |1: // ASCII case conversion. - | cmplw TMP2, CARG3 - | lbzx TMP1, CARG1, TMP2 - | bge ->fff_newstr - | subi TMP0, TMP1, lo - | xori TMP3, TMP1, 0x20 - | cmplwi TMP0, 26 - | isellt TMP1, TMP3, TMP1 - | stbx TMP1, CARG2, TMP2 - | addi TMP2, TMP2, 1 - | b <1 - |.endmacro - | - |ffstring_case string_lower, 65 - |ffstring_case string_upper, 97 - | - |//-- Table library ------------------------------------------------------ - | - |.ffunc_1 table_getn - | checktab CARG1 - | checkfail ->fff_fallback - | bl extern lj_tab_len // (GCtab *t) - | // Returns uint32_t (but less than 2^31). - | efdcfsi CRET1, CRET1 - | b ->fff_restv - | - |//-- Bit library -------------------------------------------------------- - | - |.macro .ffunc_bit, name - | .ffunc_n bit_..name - | efdadd CARG1, CARG1, TOBIT - |.endmacro - | - |.ffunc_bit tobit - |->fff_resbit: - | efdcfsi CRET1, CARG1 - | b ->fff_restv - | - |.macro .ffunc_bit_op, name, ins - | .ffunc_bit name - | li TMP1, 8 - |1: - | evlddx CARG2, BASE, TMP1 - | cmplw cr1, TMP1, NARGS8:RC - | checknum CARG2 - | bge cr1, ->fff_resbit - | checkfail ->fff_fallback - | efdadd CARG2, CARG2, TOBIT - | ins CARG1, CARG1, CARG2 - | addi TMP1, TMP1, 8 - | b <1 - |.endmacro - | - |.ffunc_bit_op band, and - |.ffunc_bit_op bor, or - |.ffunc_bit_op bxor, xor - | - |.ffunc_bit bswap - | rotlwi TMP0, CARG1, 8 - | rlwimi TMP0, CARG1, 24, 0, 7 - | rlwimi TMP0, CARG1, 24, 16, 23 - | efdcfsi CRET1, TMP0 - | b ->fff_restv - | - |.ffunc_bit bnot - | not TMP0, CARG1 - | efdcfsi CRET1, TMP0 - | b ->fff_restv - | - |.macro .ffunc_bit_sh, name, ins, shmod - | .ffunc_nn bit_..name - | efdadd CARG2, CARG2, TOBIT - | efdadd CARG1, CARG1, TOBIT - |.if shmod == 1 - | rlwinm CARG2, CARG2, 0, 27, 31 - |.elif shmod == 2 - | neg CARG2, CARG2 - |.endif - | ins TMP0, CARG1, CARG2 - | efdcfsi CRET1, TMP0 - | b ->fff_restv - |.endmacro - | - |.ffunc_bit_sh lshift, slw, 1 - |.ffunc_bit_sh rshift, srw, 1 - |.ffunc_bit_sh arshift, sraw, 1 - |.ffunc_bit_sh rol, rotlw, 0 - |.ffunc_bit_sh ror, rotlw, 2 - | - |//----------------------------------------------------------------------- - | - |->fff_fallback: // Call fast function fallback handler. - | // BASE = new base, RB = CFUNC, RC = nargs*8 - | lwz TMP3, CFUNC:RB->f - | add TMP1, BASE, NARGS8:RC - | lwz PC, FRAME_PC(BASE) // Fallback may overwrite PC. - | addi TMP0, TMP1, 8*LUA_MINSTACK - | lwz TMP2, L->maxstack - | stw PC, SAVE_PC // Redundant (but a defined value). - | cmplw TMP0, TMP2 - | stw BASE, L->base - | stw TMP1, L->top - | mr CARG1, L - | bgt >5 // Need to grow stack. - | mtctr TMP3 - | bctrl // (lua_State *L) - | // Either throws an error, or recovers and returns -1, 0 or nresults+1. - | lwz BASE, L->base - | cmpwi CRET1, 0 - | slwi RD, CRET1, 3 - | la RA, -8(BASE) - | bgt ->fff_res // Returned nresults+1? - |1: // Returned 0 or -1: retry fast path. - | lwz TMP0, L->top - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | sub NARGS8:RC, TMP0, BASE - | bne ->vm_call_tail // Returned -1? - | ins_callt // Returned 0: retry fast path. - | - |// Reconstruct previous base for vmeta_call during tailcall. - |->vm_call_tail: - | andi. TMP0, PC, FRAME_TYPE - | rlwinm TMP1, PC, 0, 0, 28 - | bne >3 - | lwz INS, -4(PC) - | decode_RA8 TMP1, INS - | addi TMP1, TMP1, 8 - |3: - | sub TMP2, BASE, TMP1 - | b ->vm_call_dispatch // Resolve again for tailcall. - | - |5: // Grow stack for fallback handler. - | li CARG2, LUA_MINSTACK - | bl extern lj_state_growstack // (lua_State *L, int n) - | lwz BASE, L->base - | cmpw TMP0, TMP0 // Set 4*cr0+eq to force retry. - | b <1 - | - |->fff_gcstep: // Call GC step function. - | // BASE = new base, RC = nargs*8 - | mflr SAVE0 - | stw BASE, L->base - | add TMP0, BASE, NARGS8:RC - | stw PC, SAVE_PC // Redundant (but a defined value). - | stw TMP0, L->top - | mr CARG1, L - | bl extern lj_gc_step // (lua_State *L) - | lwz BASE, L->base - | mtlr SAVE0 - | lwz TMP0, L->top - | sub NARGS8:RC, TMP0, BASE - | lwz CFUNC:RB, FRAME_FUNC(BASE) - | blr - | - |//----------------------------------------------------------------------- - |//-- Special dispatch targets ------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_record: // Dispatch target for recording phase. - |.if JIT - | NYI - |.endif - | - |->vm_rethook: // Dispatch target for return hooks. - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | andi. TMP0, TMP3, HOOK_ACTIVE // Hook already active? - | beq >1 - |5: // Re-dispatch to static ins. - | addi TMP1, TMP1, GG_DISP2STATIC // Assumes decode_OP4 TMP1, INS. - | lwzx TMP0, DISPATCH, TMP1 - | mtctr TMP0 - | bctr - | - |->vm_inshook: // Dispatch target for instr/line hooks. - | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) - | lwz TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | andi. TMP0, TMP3, HOOK_ACTIVE // Hook already active? - | rlwinm TMP0, TMP3, 31-LUA_HOOKLINE, 31, 0 - | bne <5 - | - | cmpwi cr1, TMP0, 0 - | addic. TMP2, TMP2, -1 - | beq cr1, <5 - | stw TMP2, DISPATCH_GL(hookcount)(DISPATCH) - | beq >1 - | bge cr1, <5 - |1: - | mr CARG1, L - | stw MULTRES, SAVE_MULTRES - | mr CARG2, PC - | stw BASE, L->base - | // SAVE_PC must hold the _previous_ PC. The callee updates it with PC. - | bl extern lj_dispatch_ins // (lua_State *L, const BCIns *pc) - |3: - | lwz BASE, L->base - |4: // Re-dispatch to static ins. - | lwz INS, -4(PC) - | decode_OP4 TMP1, INS - | decode_RB8 RB, INS - | addi TMP1, TMP1, GG_DISP2STATIC - | decode_RD8 RD, INS - | lwzx TMP0, DISPATCH, TMP1 - | decode_RA8 RA, INS - | decode_RC8 RC, INS - | mtctr TMP0 - | bctr - | - |->cont_hook: // Continue from hook yield. - | addi PC, PC, 4 - | lwz MULTRES, -20(RB) // Restore MULTRES for *M ins. - | b <4 - | - |->vm_hotloop: // Hot loop counter underflow. - |.if JIT - | NYI - |.endif - | - |->vm_callhook: // Dispatch target for call hooks. - | mr CARG2, PC - |.if JIT - | b >1 - |.endif - | - |->vm_hotcall: // Hot call counter underflow. - |.if JIT - | ori CARG2, PC, 1 - |1: - |.endif - | add TMP0, BASE, RC - | stw PC, SAVE_PC - | mr CARG1, L - | stw BASE, L->base - | sub RA, RA, BASE - | stw TMP0, L->top - | bl extern lj_dispatch_call // (lua_State *L, const BCIns *pc) - | // Returns ASMFunction. - | lwz BASE, L->base - | lwz TMP0, L->top - | stw ZERO, SAVE_PC // Invalidate for subsequent line hook. - | sub NARGS8:RC, TMP0, BASE - | add RA, BASE, RA - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | mtctr CRET1 - | bctr - | - |//----------------------------------------------------------------------- - |//-- Trace exit handler ------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_exit_handler: - |.if JIT - | NYI - |.endif - |->vm_exit_interp: - |.if JIT - | NYI - |.endif - | - |//----------------------------------------------------------------------- - |//-- Math helper functions ---------------------------------------------- - |//----------------------------------------------------------------------- - | - |// FP value rounding. Called by math.floor/math.ceil fast functions - |// and from JIT code. - |// - |// This can be inlined if the CPU has the frin/friz/frip/frim instructions. - |// The alternative hard-float approaches have a deep dependency chain. - |// The resulting latency is at least 3x-7x the double-precision FP latency - |// (e500v2: 6cy, e600: 5cy, Cell: 10cy) or around 20-70 cycles. - |// - |// The soft-float approach is tedious, but much faster (e500v2: ~11cy/~6cy). - |// However it relies on a fast way to transfer the FP value to GPRs - |// (e500v2: 0cy for lo-word, 1cy for hi-word). - |// - |.macro vm_round, name, mode - | // Used temporaries: TMP0, TMP1, TMP2, TMP3. - |->name.._efd: // Input: CARG2, output: CRET2 - | evmergehi CARG1, CARG2, CARG2 - |->name.._hilo: - | // Input: CARG1 (hi), CARG2 (hi, lo), output: CRET2 - | rlwinm TMP2, CARG1, 12, 21, 31 - | addic. TMP2, TMP2, -1023 // exp = exponent(x) - 1023 - | li TMP1, -1 - | cmplwi cr1, TMP2, 51 // 0 <= exp <= 51? - | subfic TMP0, TMP2, 52 - | bgt cr1, >1 - | lus TMP3, 0xfff0 - | slw TMP0, TMP1, TMP0 // lomask = -1 << (52-exp) - | sraw TMP1, TMP3, TMP2 // himask = (int32_t)0xfff00000 >> exp - |.if mode == 2 // trunc(x): - | evmergelo TMP0, TMP1, TMP0 - | evand CRET2, CARG2, TMP0 // hi &= himask, lo &= lomask - |.else - | andc TMP2, CARG2, TMP0 - | andc TMP3, CARG1, TMP1 - | or TMP2, TMP2, TMP3 // ztest = (hi&~himask) | (lo&~lomask) - | srawi TMP3, CARG1, 31 // signmask = (int32_t)hi >> 31 - |.if mode == 0 // floor(x): - | and. TMP2, TMP2, TMP3 // iszero = ((ztest & signmask) == 0) - |.else // ceil(x): - | andc. TMP2, TMP2, TMP3 // iszero = ((ztest & ~signmask) == 0) - |.endif - | and CARG2, CARG2, TMP0 // lo &= lomask - | and CARG1, CARG1, TMP1 // hi &= himask - | subc TMP0, CARG2, TMP0 - | iseleq TMP0, CARG2, TMP0 // lo = iszero ? lo : lo-lomask - | sube TMP1, CARG1, TMP1 - | iseleq TMP1, CARG1, TMP1 // hi = iszero ? hi : hi-himask+carry - | evmergelo CRET2, TMP1, TMP0 - |.endif - | blr - |1: - | bgtlr // Already done if >=2^52, +-inf or nan. - |.if mode == 2 // trunc(x): - | rlwinm TMP1, CARG1, 0, 0, 0 // hi = sign(x) - | li TMP0, 0 - | evmergelo CRET2, TMP1, TMP0 - |.else - | rlwinm TMP2, CARG1, 0, 1, 31 - | srawi TMP0, CARG1, 31 // signmask = (int32_t)hi >> 31 - | or TMP2, TMP2, CARG2 // ztest = abs(hi) | lo - | lus TMP1, 0x3ff0 - |.if mode == 0 // floor(x): - | and. TMP2, TMP2, TMP0 // iszero = ((ztest & signmask) == 0) - |.else // ceil(x): - | andc. TMP2, TMP2, TMP0 // iszero = ((ztest & ~signmask) == 0) - |.endif - | li TMP0, 0 - | iseleq TMP1, r0, TMP1 - | rlwimi CARG1, TMP1, 0, 1, 31 // hi = sign(x) | (iszero ? 0.0 : 1.0) - | evmergelo CRET2, CARG1, TMP0 - |.endif - | blr - |.endmacro - | - |->vm_floor: - | mflr CARG3 - | evmergelo CARG2, CARG1, CARG2 - | bl ->vm_floor_hilo - | mtlr CARG3 - | evmergehi CRET1, CRET2, CRET2 - | blr - | - | vm_round vm_floor, 0 - | vm_round vm_ceil, 1 - |.if JIT - | vm_round vm_trunc, 2 - |.else - |->vm_trunc_efd: - |->vm_trunc_hilo: - |.endif - | - |//----------------------------------------------------------------------- - |//-- Miscellaneous functions -------------------------------------------- - |//----------------------------------------------------------------------- - | - |//----------------------------------------------------------------------- - |//-- FFI helper functions ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_ffi_call: - |.if FFI - | NYI - |.endif - | - |//----------------------------------------------------------------------- -} - -/* Generate the code for a single instruction. */ -static void build_ins(BuildCtx *ctx, BCOp op, int defop) -{ - int vk = 0; - |=>defop: - - switch (op) { - - /* -- Comparison ops ---------------------------------------------------- */ - - /* Remember: all ops branch for a true comparison, fall through otherwise. */ - - case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - | // RA = src1*8, RD = src2*8, JMP with RD = target - | evlddx TMP0, BASE, RA - | addi PC, PC, 4 - | evlddx TMP1, BASE, RD - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | lwz TMP2, -4(PC) - | evmergehi RB, TMP0, TMP1 - | decode_RD4 TMP2, TMP2 - | checknum RB - | add TMP2, TMP2, TMP3 - | checkanyfail ->vmeta_comp - | efdcmplt TMP0, TMP1 - if (op == BC_ISLE || op == BC_ISGT) { - | efdcmpeq cr1, TMP0, TMP1 - | cror 4*cr0+gt, 4*cr0+gt, 4*cr1+gt - } - if (op == BC_ISLT || op == BC_ISLE) { - | iselgt PC, TMP2, PC - } else { - | iselgt PC, PC, TMP2 - } - | ins_next - break; - - case BC_ISEQV: case BC_ISNEV: - vk = op == BC_ISEQV; - | // RA = src1*8, RD = src2*8, JMP with RD = target - | evlddx CARG2, BASE, RA - | addi PC, PC, 4 - | evlddx CARG3, BASE, RD - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | lwz TMP2, -4(PC) - | evmergehi RB, CARG2, CARG3 - | decode_RD4 TMP2, TMP2 - | checknum RB - | add TMP2, TMP2, TMP3 - | checkanyfail >5 - | efdcmpeq CARG2, CARG3 - if (vk) { - | iselgt PC, TMP2, PC - } else { - | iselgt PC, PC, TMP2 - } - |1: - | ins_next - | - |5: // Either or both types are not numbers. - | evcmpeq CARG2, CARG3 - | not TMP3, RB - | cmplwi cr1, TMP3, ~LJ_TISPRI // Primitive? - | crorc 4*cr7+lt, 4*cr0+so, 4*cr0+lt // 1: Same tv or different type. - | cmplwi cr6, TMP3, ~LJ_TISTABUD // Table or userdata? - | crandc 4*cr7+gt, 4*cr0+lt, 4*cr1+gt // 2: Same type and primitive. - | mr SAVE0, PC - if (vk) { - | isel PC, TMP2, PC, 4*cr7+gt - } else { - | isel TMP2, PC, TMP2, 4*cr7+gt - } - | cror 4*cr7+lt, 4*cr7+lt, 4*cr7+gt // 1 or 2. - if (vk) { - | isel PC, TMP2, PC, 4*cr0+so - } else { - | isel PC, PC, TMP2, 4*cr0+so - } - | blt cr7, <1 // Done if 1 or 2. - | blt cr6, <1 // Done if not tab/ud. - | - | // Different tables or userdatas. Need to check __eq metamethod. - | // Field metatable must be at same offset for GCtab and GCudata! - | lwz TAB:TMP2, TAB:CARG2->metatable - | li CARG4, 1-vk // ne = 0 or 1. - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable? - | lbz TMP2, TAB:TMP2->nomm - | andi. TMP2, TMP2, 1<vmeta_equal // Handle __eq metamethod. - break; - - case BC_ISEQS: case BC_ISNES: - vk = op == BC_ISEQS; - | // RA = src*8, RD = str_const*8 (~), JMP with RD = target - | evlddx TMP0, BASE, RA - | srwi RD, RD, 1 - | lwz INS, 0(PC) - | subfic RD, RD, -4 - | addi PC, PC, 4 - | lwzx STR:TMP1, KBASE, RD // KBASE-4-str_const*4 - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | decode_RD4 TMP2, INS - | evmergelo STR:TMP1, TISSTR, STR:TMP1 - | add TMP2, TMP2, TMP3 - | evcmpeq TMP0, STR:TMP1 - if (vk) { - | isel PC, TMP2, PC, 4*cr0+so - } else { - | isel PC, PC, TMP2, 4*cr0+so - } - | ins_next - break; - - case BC_ISEQN: case BC_ISNEN: - vk = op == BC_ISEQN; - | // RA = src*8, RD = num_const*8, JMP with RD = target - | evlddx TMP0, BASE, RA - | addi PC, PC, 4 - | evlddx TMP1, KBASE, RD - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | lwz INS, -4(PC) - | checknum TMP0 - | checkfail >5 - | efdcmpeq TMP0, TMP1 - |1: - | decode_RD4 TMP2, INS - | add TMP2, TMP2, TMP3 - if (vk) { - | iselgt PC, TMP2, PC - |5: - } else { - | iselgt PC, PC, TMP2 - } - |3: - | ins_next - if (!vk) { - |5: - | decode_RD4 TMP2, INS - | add PC, TMP2, TMP3 - | b <3 - } - break; - - case BC_ISEQP: case BC_ISNEP: - vk = op == BC_ISEQP; - | // RA = src*8, RD = primitive_type*8 (~), JMP with RD = target - | lwzx TMP0, BASE, RA - | srwi TMP1, RD, 3 - | lwz INS, 0(PC) - | addi PC, PC, 4 - | not TMP1, TMP1 - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | cmplw TMP0, TMP1 - | decode_RD4 TMP2, INS - | add TMP2, TMP2, TMP3 - if (vk) { - | iseleq PC, TMP2, PC - } else { - | iseleq PC, PC, TMP2 - } - | ins_next - break; - - /* -- Unary test and copy ops ------------------------------------------- */ - - case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - | // RA = dst*8 or unused, RD = src*8, JMP with RD = target - | evlddx TMP0, BASE, RD - | evaddw TMP1, TISNIL, TISNIL // Synthesize LJ_TFALSE. - | lwz INS, 0(PC) - | evcmpltu TMP0, TMP1 - | addi PC, PC, 4 - if (op == BC_IST || op == BC_ISF) { - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | decode_RD4 TMP2, INS - | add TMP2, TMP2, TMP3 - if (op == BC_IST) { - | isellt PC, TMP2, PC - } else { - | isellt PC, PC, TMP2 - } - } else { - if (op == BC_ISTC) { - | checkfail >1 - } else { - | checkok >1 - } - | addis PC, PC, -(BCBIAS_J*4 >> 16) - | decode_RD4 TMP2, INS - | evstddx TMP0, BASE, RA - | add PC, PC, TMP2 - |1: - } - | ins_next - break; - - /* -- Unary ops --------------------------------------------------------- */ - - case BC_MOV: - | // RA = dst*8, RD = src*8 - | ins_next1 - | evlddx TMP0, BASE, RD - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_NOT: - | // RA = dst*8, RD = src*8 - | ins_next1 - | lwzx TMP0, BASE, RD - | subfic TMP1, TMP0, LJ_TTRUE - | adde TMP0, TMP0, TMP1 - | stwx TMP0, BASE, RA - | ins_next2 - break; - case BC_UNM: - | // RA = dst*8, RD = src*8 - | evlddx TMP0, BASE, RD - | checknum TMP0 - | checkfail ->vmeta_unm - | efdneg TMP0, TMP0 - | ins_next1 - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_LEN: - | // RA = dst*8, RD = src*8 - | evlddx CARG1, BASE, RD - | checkstr CARG1 - | checkfail >2 - | lwz CRET1, STR:CARG1->len - |1: - | ins_next1 - | efdcfsi TMP0, CRET1 - | evstddx TMP0, BASE, RA - | ins_next2 - |2: - | checktab CARG1 - | checkfail ->vmeta_len -#if LJ_52 - | lwz TAB:TMP2, TAB:CARG1->metatable - | cmplwi TAB:TMP2, 0 - | bne >9 - |3: -#endif - |->BC_LEN_Z: - | bl extern lj_tab_len // (GCtab *t) - | // Returns uint32_t (but less than 2^31). - | b <1 -#if LJ_52 - |9: - | lbz TMP0, TAB:TMP2->nomm - | andi. TMP0, TMP0, 1<vmeta_len -#endif - break; - - /* -- Binary ops -------------------------------------------------------- */ - - |.macro ins_arithpre, t0, t1 - | // RA = dst*8, RB = src1*8, RC = src2*8 | num_const*8 - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - ||switch (vk) { - ||case 0: - | evlddx t0, BASE, RB - | checknum t0 - | evlddx t1, KBASE, RC - | checkfail ->vmeta_arith_vn - || break; - ||case 1: - | evlddx t1, BASE, RB - | checknum t1 - | evlddx t0, KBASE, RC - | checkfail ->vmeta_arith_nv - || break; - ||default: - | evlddx t0, BASE, RB - | evlddx t1, BASE, RC - | evmergehi TMP2, t0, t1 - | checknum TMP2 - | checkanyfail ->vmeta_arith_vv - || break; - ||} - |.endmacro - | - |.macro ins_arith, ins - | ins_arithpre TMP0, TMP1 - | ins_next1 - | ins TMP0, TMP0, TMP1 - | evstddx TMP0, BASE, RA - | ins_next2 - |.endmacro - - case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - | ins_arith efdadd - break; - case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - | ins_arith efdsub - break; - case BC_MULVN: case BC_MULNV: case BC_MULVV: - | ins_arith efdmul - break; - case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - | ins_arith efddiv - break; - case BC_MODVN: - | ins_arithpre RD, SAVE0 - |->BC_MODVN_Z: - | efddiv CARG2, RD, SAVE0 - | bl ->vm_floor_efd // floor(b/c) - | efdmul TMP0, CRET2, SAVE0 - | ins_next1 - | efdsub TMP0, RD, TMP0 // b - floor(b/c)*c - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_MODNV: case BC_MODVV: - | ins_arithpre RD, SAVE0 - | b ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. - break; - case BC_POW: - | evlddx CARG2, BASE, RB - | evlddx CARG4, BASE, RC - | evmergehi CARG1, CARG4, CARG2 - | checknum CARG1 - | evmergehi CARG3, CARG4, CARG4 - | checkanyfail ->vmeta_arith_vv - | bl extern pow@plt - | evmergelo CRET2, CRET1, CRET2 - | evstddx CRET2, BASE, RA - | ins_next - break; - - case BC_CAT: - | // RA = dst*8, RB = src_start*8, RC = src_end*8 - | sub CARG3, RC, RB - | stw BASE, L->base - | add CARG2, BASE, RC - | mr SAVE0, RB - |->BC_CAT_Z: - | stw PC, SAVE_PC - | mr CARG1, L - | srwi CARG3, CARG3, 3 - | bl extern lj_meta_cat // (lua_State *L, TValue *top, int left) - | // Returns NULL (finished) or TValue * (metamethod). - | cmplwi CRET1, 0 - | lwz BASE, L->base - | bne ->vmeta_binop - | evlddx TMP0, BASE, SAVE0 // Copy result from RB to RA. - | evstddx TMP0, BASE, RA - | ins_next - break; - - /* -- Constant ops ------------------------------------------------------ */ - - case BC_KSTR: - | // RA = dst*8, RD = str_const*8 (~) - | ins_next1 - | srwi TMP1, RD, 1 - | subfic TMP1, TMP1, -4 - | lwzx TMP0, KBASE, TMP1 // KBASE-4-str_const*4 - | evmergelo TMP0, TISSTR, TMP0 - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_KCDATA: - |.if FFI - | // RA = dst*8, RD = cdata_const*8 (~) - | ins_next1 - | srwi TMP1, RD, 1 - | subfic TMP1, TMP1, -4 - | lwzx TMP0, KBASE, TMP1 // KBASE-4-cdata_const*4 - | li TMP2, LJ_TCDATA - | evmergelo TMP0, TMP2, TMP0 - | evstddx TMP0, BASE, RA - | ins_next2 - |.endif - break; - case BC_KSHORT: - | // RA = dst*8, RD = int16_literal*8 - | srwi TMP1, RD, 3 - | extsh TMP1, TMP1 - | ins_next1 - | efdcfsi TMP0, TMP1 - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_KNUM: - | // RA = dst*8, RD = num_const*8 - | evlddx TMP0, KBASE, RD - | ins_next1 - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_KPRI: - | // RA = dst*8, RD = primitive_type*8 (~) - | srwi TMP1, RD, 3 - | not TMP0, TMP1 - | ins_next1 - | stwx TMP0, BASE, RA - | ins_next2 - break; - case BC_KNIL: - | // RA = base*8, RD = end*8 - | evstddx TISNIL, BASE, RA - | addi RA, RA, 8 - |1: - | evstddx TISNIL, BASE, RA - | cmpw RA, RD - | addi RA, RA, 8 - | blt <1 - | ins_next_ - break; - - /* -- Upvalue and function ops ------------------------------------------ */ - - case BC_UGET: - | // RA = dst*8, RD = uvnum*8 - | ins_next1 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RD, RD, 1 - | addi RD, RD, offsetof(GCfuncL, uvptr) - | lwzx UPVAL:RB, LFUNC:RB, RD - | lwz TMP1, UPVAL:RB->v - | evldd TMP0, 0(TMP1) - | evstddx TMP0, BASE, RA - | ins_next2 - break; - case BC_USETV: - | // RA = uvnum*8, RD = src*8 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RA, RA, 1 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | evlddx TMP1, BASE, RD - | lwzx UPVAL:RB, LFUNC:RB, RA - | lbz TMP3, UPVAL:RB->marked - | lwz CARG2, UPVAL:RB->v - | andi. TMP3, TMP3, LJ_GC_BLACK // isblack(uv) - | lbz TMP0, UPVAL:RB->closed - | evmergehi TMP2, TMP1, TMP1 - | evstdd TMP1, 0(CARG2) - | cmplwi cr1, TMP0, 0 - | cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq - | subi TMP2, TMP2, (LJ_TISNUM+1) - | bne >2 // Upvalue is closed and black? - |1: - | ins_next - | - |2: // Check if new value is collectable. - | cmplwi TMP2, LJ_TISGCV - (LJ_TISNUM+1) - | bge <1 // tvisgcv(v) - | lbz TMP3, GCOBJ:TMP1->gch.marked - | andi. TMP3, TMP3, LJ_GC_WHITES // iswhite(v) - | la CARG1, GG_DISP2G(DISPATCH) - | // Crossed a write barrier. Move the barrier forward. - | beq <1 - | bl extern lj_gc_barrieruv // (global_State *g, TValue *tv) - | b <1 - break; - case BC_USETS: - | // RA = uvnum*8, RD = str_const*8 (~) - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi TMP1, RD, 1 - | srwi RA, RA, 1 - | subfic TMP1, TMP1, -4 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | lwzx STR:TMP1, KBASE, TMP1 // KBASE-4-str_const*4 - | lwzx UPVAL:RB, LFUNC:RB, RA - | evmergelo STR:TMP1, TISSTR, STR:TMP1 - | lbz TMP3, UPVAL:RB->marked - | lwz CARG2, UPVAL:RB->v - | andi. TMP3, TMP3, LJ_GC_BLACK // isblack(uv) - | lbz TMP3, STR:TMP1->marked - | lbz TMP2, UPVAL:RB->closed - | evstdd STR:TMP1, 0(CARG2) - | bne >2 - |1: - | ins_next - | - |2: // Check if string is white and ensure upvalue is closed. - | andi. TMP3, TMP3, LJ_GC_WHITES // iswhite(str) - | cmplwi cr1, TMP2, 0 - | cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq - | la CARG1, GG_DISP2G(DISPATCH) - | // Crossed a write barrier. Move the barrier forward. - | beq <1 - | bl extern lj_gc_barrieruv // (global_State *g, TValue *tv) - | b <1 - break; - case BC_USETN: - | // RA = uvnum*8, RD = num_const*8 - | ins_next1 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RA, RA, 1 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | evlddx TMP0, KBASE, RD - | lwzx UPVAL:RB, LFUNC:RB, RA - | lwz TMP1, UPVAL:RB->v - | evstdd TMP0, 0(TMP1) - | ins_next2 - break; - case BC_USETP: - | // RA = uvnum*8, RD = primitive_type*8 (~) - | ins_next1 - | lwz LFUNC:RB, FRAME_FUNC(BASE) - | srwi RA, RA, 1 - | addi RA, RA, offsetof(GCfuncL, uvptr) - | srwi TMP0, RD, 3 - | lwzx UPVAL:RB, LFUNC:RB, RA - | not TMP0, TMP0 - | lwz TMP1, UPVAL:RB->v - | stw TMP0, 0(TMP1) - | ins_next2 - break; - - case BC_UCLO: - | // RA = level*8, RD = target - | lwz TMP1, L->openupval - | branch_RD // Do this first since RD is not saved. - | stw BASE, L->base - | cmplwi TMP1, 0 - | mr CARG1, L - | beq >1 - | add CARG2, BASE, RA - | bl extern lj_func_closeuv // (lua_State *L, TValue *level) - | lwz BASE, L->base - |1: - | ins_next - break; - - case BC_FNEW: - | // RA = dst*8, RD = proto_const*8 (~) (holding function prototype) - | srwi TMP1, RD, 1 - | stw BASE, L->base - | subfic TMP1, TMP1, -4 - | stw PC, SAVE_PC - | lwzx CARG2, KBASE, TMP1 // KBASE-4-tab_const*4 - | mr CARG1, L - | lwz CARG3, FRAME_FUNC(BASE) - | // (lua_State *L, GCproto *pt, GCfuncL *parent) - | bl extern lj_func_newL_gc - | // Returns GCfuncL *. - | lwz BASE, L->base - | evmergelo LFUNC:CRET1, TISFUNC, LFUNC:CRET1 - | evstddx LFUNC:CRET1, BASE, RA - | ins_next - break; - - /* -- Table ops --------------------------------------------------------- */ - - case BC_TNEW: - case BC_TDUP: - | // RA = dst*8, RD = (hbits|asize)*8 | tab_const*8 (~) - | lwz TMP0, DISPATCH_GL(gc.total)(DISPATCH) - | mr CARG1, L - | lwz TMP1, DISPATCH_GL(gc.threshold)(DISPATCH) - | stw BASE, L->base - | cmplw TMP0, TMP1 - | stw PC, SAVE_PC - | bge >5 - |1: - if (op == BC_TNEW) { - | rlwinm CARG2, RD, 29, 21, 31 - | rlwinm CARG3, RD, 18, 27, 31 - | cmpwi CARG2, 0x7ff - | li TMP1, 0x801 - | iseleq CARG2, TMP1, CARG2 - | bl extern lj_tab_new // (lua_State *L, int32_t asize, uint32_t hbits) - | // Returns Table *. - } else { - | srwi TMP1, RD, 1 - | subfic TMP1, TMP1, -4 - | lwzx CARG2, KBASE, TMP1 // KBASE-4-tab_const*4 - | bl extern lj_tab_dup // (lua_State *L, Table *kt) - | // Returns Table *. - } - | lwz BASE, L->base - | evmergelo TAB:CRET1, TISTAB, TAB:CRET1 - | evstddx TAB:CRET1, BASE, RA - | ins_next - |5: - | mr SAVE0, RD - | bl extern lj_gc_step_fixtop // (lua_State *L) - | mr RD, SAVE0 - | mr CARG1, L - | b <1 - break; - - case BC_GGET: - | // RA = dst*8, RD = str_const*8 (~) - case BC_GSET: - | // RA = src*8, RD = str_const*8 (~) - | lwz LFUNC:TMP2, FRAME_FUNC(BASE) - | srwi TMP1, RD, 1 - | lwz TAB:RB, LFUNC:TMP2->env - | subfic TMP1, TMP1, -4 - | lwzx STR:RC, KBASE, TMP1 // KBASE-4-str_const*4 - if (op == BC_GGET) { - | b ->BC_TGETS_Z - } else { - | b ->BC_TSETS_Z - } - break; - - case BC_TGETV: - | // RA = dst*8, RB = table*8, RC = key*8 - | evlddx TAB:RB, BASE, RB - | evlddx RC, BASE, RC - | checktab TAB:RB - | checkfail ->vmeta_tgetv - | checknum RC - | checkfail >5 - | // Convert number key to integer - | efdctsi TMP2, RC - | lwz TMP0, TAB:RB->asize - | efdcfsi TMP1, TMP2 - | cmplw cr0, TMP0, TMP2 - | efdcmpeq cr1, RC, TMP1 - | lwz TMP1, TAB:RB->array - | crand 4*cr0+gt, 4*cr0+gt, 4*cr1+gt - | slwi TMP2, TMP2, 3 - | ble ->vmeta_tgetv // Integer key and in array part? - | evlddx TMP1, TMP1, TMP2 - | checknil TMP1 - | checkok >2 - |1: - | evstddx TMP1, BASE, RA - | ins_next - | - |2: // Check for __index if table value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable: done. - | lbz TMP0, TAB:TMP2->nomm - | andi. TMP0, TMP0, 1<vmeta_tgetv - | - |5: - | checkstr STR:RC // String key? - | checkok ->BC_TGETS_Z - | b ->vmeta_tgetv - break; - case BC_TGETS: - | // RA = dst*8, RB = table*8, RC = str_const*8 (~) - | evlddx TAB:RB, BASE, RB - | srwi TMP1, RC, 1 - | checktab TAB:RB - | subfic TMP1, TMP1, -4 - | lwzx STR:RC, KBASE, TMP1 // KBASE-4-str_const*4 - | checkfail ->vmeta_tgets1 - |->BC_TGETS_Z: - | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = dst*8 - | lwz TMP0, TAB:RB->hmask - | lwz TMP1, STR:RC->hash - | lwz NODE:TMP2, TAB:RB->node - | evmergelo STR:RC, TISSTR, STR:RC - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | slwi TMP0, TMP1, 5 - | slwi TMP1, TMP1, 3 - | sub TMP1, TMP0, TMP1 - | add NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |1: - | evldd TMP0, NODE:TMP2->key - | evldd TMP1, NODE:TMP2->val - | evcmpeq TMP0, STR:RC - | checkanyfail >4 - | checknil TMP1 - | checkok >5 // Key found, but nil value? - |3: - | evstddx TMP1, BASE, RA - | ins_next - | - |4: // Follow hash chain. - | lwz NODE:TMP2, NODE:TMP2->next - | cmplwi NODE:TMP2, 0 - | bne <1 - | // End of hash chain: key not found, nil result. - | evmr TMP1, TISNIL - | - |5: // Check for __index if table value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <3 // No metatable: done. - | lbz TMP0, TAB:TMP2->nomm - | andi. TMP0, TMP0, 1<vmeta_tgets - break; - case BC_TGETB: - | // RA = dst*8, RB = table*8, RC = index*8 - | evlddx TAB:RB, BASE, RB - | srwi TMP0, RC, 3 - | checktab TAB:RB - | checkfail ->vmeta_tgetb - | lwz TMP1, TAB:RB->asize - | lwz TMP2, TAB:RB->array - | cmplw TMP0, TMP1 - | bge ->vmeta_tgetb - | evlddx TMP1, TMP2, RC - | checknil TMP1 - | checkok >5 - |1: - | ins_next1 - | evstddx TMP1, BASE, RA - | ins_next2 - | - |5: // Check for __index if table value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable: done. - | lbz TMP2, TAB:TMP2->nomm - | andi. TMP2, TMP2, 1<vmeta_tgetb // Caveat: preserve TMP0! - break; - - case BC_TSETV: - | // RA = src*8, RB = table*8, RC = key*8 - | evlddx TAB:RB, BASE, RB - | evlddx RC, BASE, RC - | checktab TAB:RB - | checkfail ->vmeta_tsetv - | checknum RC - | checkfail >5 - | // Convert number key to integer - | efdctsi TMP2, RC - | evlddx SAVE0, BASE, RA - | lwz TMP0, TAB:RB->asize - | efdcfsi TMP1, TMP2 - | cmplw cr0, TMP0, TMP2 - | efdcmpeq cr1, RC, TMP1 - | lwz TMP1, TAB:RB->array - | crand 4*cr0+gt, 4*cr0+gt, 4*cr1+gt - | slwi TMP0, TMP2, 3 - | ble ->vmeta_tsetv // Integer key and in array part? - | lbz TMP3, TAB:RB->marked - | evlddx TMP2, TMP1, TMP0 - | checknil TMP2 - | checkok >3 - |1: - | andi. TMP2, TMP3, LJ_GC_BLACK // isblack(table) - | evstddx SAVE0, TMP1, TMP0 - | bne >7 - |2: - | ins_next - | - |3: // Check for __newindex if previous value is nil. - | lwz TAB:TMP2, TAB:RB->metatable - | cmplwi TAB:TMP2, 0 - | beq <1 // No metatable: done. - | lbz TMP2, TAB:TMP2->nomm - | andi. TMP2, TMP2, 1<vmeta_tsetv - | - |5: - | checkstr STR:RC // String key? - | checkok ->BC_TSETS_Z - | b ->vmeta_tsetv - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0 - | b <2 - break; - case BC_TSETS: - | // RA = src*8, RB = table*8, RC = str_const*8 (~) - | evlddx TAB:RB, BASE, RB - | srwi TMP1, RC, 1 - | checktab TAB:RB - | subfic TMP1, TMP1, -4 - | lwzx STR:RC, KBASE, TMP1 // KBASE-4-str_const*4 - | checkfail ->vmeta_tsets1 - |->BC_TSETS_Z: - | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = src*8 - | lwz TMP0, TAB:RB->hmask - | lwz TMP1, STR:RC->hash - | lwz NODE:TMP2, TAB:RB->node - | evmergelo STR:RC, TISSTR, STR:RC - | stb ZERO, TAB:RB->nomm // Clear metamethod cache. - | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask - | evlddx SAVE0, BASE, RA - | slwi TMP0, TMP1, 5 - | slwi TMP1, TMP1, 3 - | sub TMP1, TMP0, TMP1 - | lbz TMP3, TAB:RB->marked - | add NODE:TMP2, NODE:TMP2, TMP1 // node = tab->node + (idx*32-idx*8) - |1: - | evldd TMP0, NODE:TMP2->key - | evldd TMP1, NODE:TMP2->val - | evcmpeq TMP0, STR:RC - | checkanyfail >5 - | checknil TMP1 - | checkok >4 // Key found, but nil value? - |2: - | andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - | evstdd SAVE0, NODE:TMP2->val - | bne >7 - |3: - | ins_next - | - |4: // Check for __newindex if previous value is nil. - | lwz TAB:TMP1, TAB:RB->metatable - | cmplwi TAB:TMP1, 0 - | beq <2 // No metatable: done. - | lbz TMP0, TAB:TMP1->nomm - | andi. TMP0, TMP0, 1<vmeta_tsets - | - |5: // Follow hash chain. - | lwz NODE:TMP2, NODE:TMP2->next - | cmplwi NODE:TMP2, 0 - | bne <1 - | // End of hash chain: key not found, add a new one. - | - | // But check for __newindex first. - | lwz TAB:TMP1, TAB:RB->metatable - | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) - | stw PC, SAVE_PC - | mr CARG1, L - | cmplwi TAB:TMP1, 0 - | stw BASE, L->base - | beq >6 // No metatable: continue. - | lbz TMP0, TAB:TMP1->nomm - | andi. TMP0, TMP0, 1<vmeta_tsets // 'no __newindex' flag NOT set: check. - |6: - | mr CARG2, TAB:RB - | evstdd STR:RC, 0(CARG3) - | bl extern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k) - | // Returns TValue *. - | lwz BASE, L->base - | evstdd SAVE0, 0(CRET1) - | b <3 // No 2nd write barrier needed. - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0 - | b <3 - break; - case BC_TSETB: - | // RA = src*8, RB = table*8, RC = index*8 - | evlddx TAB:RB, BASE, RB - | srwi TMP0, RC, 3 - | checktab TAB:RB - | checkfail ->vmeta_tsetb - | lwz TMP1, TAB:RB->asize - | lwz TMP2, TAB:RB->array - | lbz TMP3, TAB:RB->marked - | cmplw TMP0, TMP1 - | evlddx SAVE0, BASE, RA - | bge ->vmeta_tsetb - | evlddx TMP1, TMP2, RC - | checknil TMP1 - | checkok >5 - |1: - | andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - | evstddx SAVE0, TMP2, RC - | bne >7 - |2: - | ins_next - | - |5: // Check for __newindex if previous value is nil. - | lwz TAB:TMP1, TAB:RB->metatable - | cmplwi TAB:TMP1, 0 - | beq <1 // No metatable: done. - | lbz TMP1, TAB:TMP1->nomm - | andi. TMP1, TMP1, 1<vmeta_tsetb // Caveat: preserve TMP0! - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, TMP3, TMP0 - | b <2 - break; - - case BC_TSETM: - | // RA = base*8 (table at base-1), RD = num_const*8 (start index) - | add RA, BASE, RA - |1: - | add TMP3, KBASE, RD - | lwz TAB:CARG2, -4(RA) // Guaranteed to be a table. - | addic. TMP0, MULTRES, -8 - | lwz TMP3, 4(TMP3) // Integer constant is in lo-word. - | srwi CARG3, TMP0, 3 - | beq >4 // Nothing to copy? - | add CARG3, CARG3, TMP3 - | lwz TMP2, TAB:CARG2->asize - | slwi TMP1, TMP3, 3 - | lbz TMP3, TAB:CARG2->marked - | cmplw CARG3, TMP2 - | add TMP2, RA, TMP0 - | lwz TMP0, TAB:CARG2->array - | bgt >5 - | add TMP1, TMP1, TMP0 - | andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table) - |3: // Copy result slots to table. - | evldd TMP0, 0(RA) - | addi RA, RA, 8 - | cmpw cr1, RA, TMP2 - | evstdd TMP0, 0(TMP1) - | addi TMP1, TMP1, 8 - | blt cr1, <3 - | bne >7 - |4: - | ins_next - | - |5: // Need to resize array part. - | stw BASE, L->base - | mr CARG1, L - | stw PC, SAVE_PC - | mr SAVE0, RD - | bl extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) - | // Must not reallocate the stack. - | mr RD, SAVE0 - | b <1 - | - |7: // Possible table write barrier for any value. Skip valiswhite check. - | barrierback TAB:CARG2, TMP3, TMP0 - | b <4 - break; - - /* -- Calls and vararg handling ----------------------------------------- */ - - case BC_CALLM: - | // RA = base*8, (RB = (nresults+1)*8,) RC = extra_nargs*8 - | add NARGS8:RC, NARGS8:RC, MULTRES - | // Fall through. Assumes BC_CALL follows. - break; - case BC_CALL: - | // RA = base*8, (RB = (nresults+1)*8,) RC = (nargs+1)*8 - | evlddx LFUNC:RB, BASE, RA - | mr TMP2, BASE - | add BASE, BASE, RA - | subi NARGS8:RC, NARGS8:RC, 8 - | checkfunc LFUNC:RB - | addi BASE, BASE, 8 - | checkfail ->vmeta_call - | ins_call - break; - - case BC_CALLMT: - | // RA = base*8, (RB = 0,) RC = extra_nargs*8 - | add NARGS8:RC, NARGS8:RC, MULTRES - | // Fall through. Assumes BC_CALLT follows. - break; - case BC_CALLT: - | // RA = base*8, (RB = 0,) RC = (nargs+1)*8 - | evlddx LFUNC:RB, BASE, RA - | add RA, BASE, RA - | lwz TMP1, FRAME_PC(BASE) - | subi NARGS8:RC, NARGS8:RC, 8 - | checkfunc LFUNC:RB - | addi RA, RA, 8 - | checkfail ->vmeta_callt - |->BC_CALLT_Z: - | andi. TMP0, TMP1, FRAME_TYPE // Caveat: preserve cr0 until the crand. - | lbz TMP3, LFUNC:RB->ffid - | xori TMP2, TMP1, FRAME_VARG - | cmplwi cr1, NARGS8:RC, 0 - | bne >7 - |1: - | stw LFUNC:RB, FRAME_FUNC(BASE) // Copy function down, but keep PC. - | li TMP2, 0 - | cmplwi cr7, TMP3, 1 // (> FF_C) Calling a fast function? - | beq cr1, >3 - |2: - | addi TMP3, TMP2, 8 - | evlddx TMP0, RA, TMP2 - | cmplw cr1, TMP3, NARGS8:RC - | evstddx TMP0, BASE, TMP2 - | mr TMP2, TMP3 - | bne cr1, <2 - |3: - | crand 4*cr0+eq, 4*cr0+eq, 4*cr7+gt - | beq >5 - |4: - | ins_callt - | - |5: // Tailcall to a fast function with a Lua frame below. - | lwz INS, -4(TMP1) - | decode_RA8 RA, INS - | sub TMP1, BASE, RA - | lwz LFUNC:TMP1, FRAME_FUNC-8(TMP1) - | lwz TMP1, LFUNC:TMP1->pc - | lwz KBASE, PC2PROTO(k)(TMP1) // Need to prepare KBASE. - | b <4 - | - |7: // Tailcall from a vararg function. - | andi. TMP0, TMP2, FRAME_TYPEP - | bne <1 // Vararg frame below? - | sub BASE, BASE, TMP2 // Relocate BASE down. - | lwz TMP1, FRAME_PC(BASE) - | andi. TMP0, TMP1, FRAME_TYPE - | b <1 - break; - - case BC_ITERC: - | // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 ((2+1)*8)) - | subi RA, RA, 24 // evldd doesn't support neg. offsets. - | mr TMP2, BASE - | evlddx LFUNC:RB, BASE, RA - | add BASE, BASE, RA - | evldd TMP0, 8(BASE) - | evldd TMP1, 16(BASE) - | evstdd LFUNC:RB, 24(BASE) // Copy callable. - | checkfunc LFUNC:RB - | evstdd TMP0, 32(BASE) // Copy state. - | li NARGS8:RC, 16 // Iterators get 2 arguments. - | evstdd TMP1, 40(BASE) // Copy control var. - | addi BASE, BASE, 32 - | checkfail ->vmeta_call - | ins_call - break; - - case BC_ITERN: - | // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 (2+1)*8) - |.if JIT - | // NYI: add hotloop, record BC_ITERN. - |.endif - | add RA, BASE, RA - | lwz TAB:RB, -12(RA) - | lwz RC, -4(RA) // Get index from control var. - | lwz TMP0, TAB:RB->asize - | lwz TMP1, TAB:RB->array - | addi PC, PC, 4 - |1: // Traverse array part. - | cmplw RC, TMP0 - | slwi TMP3, RC, 3 - | bge >5 // Index points after array part? - | evlddx TMP2, TMP1, TMP3 - | checknil TMP2 - | lwz INS, -4(PC) - | checkok >4 - | efdcfsi TMP0, RC - | addi RC, RC, 1 - | addis TMP3, PC, -(BCBIAS_J*4 >> 16) - | evstdd TMP2, 8(RA) - | decode_RD4 TMP1, INS - | stw RC, -4(RA) // Update control var. - | add PC, TMP1, TMP3 - | evstdd TMP0, 0(RA) - |3: - | ins_next - | - |4: // Skip holes in array part. - | addi RC, RC, 1 - | b <1 - | - |5: // Traverse hash part. - | lwz TMP1, TAB:RB->hmask - | sub RC, RC, TMP0 - | lwz TMP2, TAB:RB->node - |6: - | cmplw RC, TMP1 // End of iteration? Branch to ITERL+1. - | slwi TMP3, RC, 5 - | bgt <3 - | slwi RB, RC, 3 - | sub TMP3, TMP3, RB - | evlddx RB, TMP2, TMP3 - | add NODE:TMP3, TMP2, TMP3 - | checknil RB - | lwz INS, -4(PC) - | checkok >7 - | evldd TMP3, NODE:TMP3->key - | addis TMP2, PC, -(BCBIAS_J*4 >> 16) - | evstdd RB, 8(RA) - | add RC, RC, TMP0 - | decode_RD4 TMP1, INS - | evstdd TMP3, 0(RA) - | addi RC, RC, 1 - | add PC, TMP1, TMP2 - | stw RC, -4(RA) // Update control var. - | b <3 - | - |7: // Skip holes in hash part. - | addi RC, RC, 1 - | b <6 - break; - - case BC_ISNEXT: - | // RA = base*8, RD = target (points to ITERN) - | add RA, BASE, RA - | li TMP2, -24 - | evlddx CFUNC:TMP1, RA, TMP2 - | lwz TMP2, -16(RA) - | lwz TMP3, -8(RA) - | evmergehi TMP0, CFUNC:TMP1, CFUNC:TMP1 - | cmpwi cr0, TMP2, LJ_TTAB - | cmpwi cr1, TMP0, LJ_TFUNC - | cmpwi cr6, TMP3, LJ_TNIL - | bne cr1, >5 - | lbz TMP1, CFUNC:TMP1->ffid - | crand 4*cr0+eq, 4*cr0+eq, 4*cr6+eq - | cmpwi cr7, TMP1, FF_next_N - | srwi TMP0, RD, 1 - | crand 4*cr0+eq, 4*cr0+eq, 4*cr7+eq - | add TMP3, PC, TMP0 - | bne cr0, >5 - | lus TMP1, 0xfffe - | ori TMP1, TMP1, 0x7fff - | stw ZERO, -4(RA) // Initialize control var. - | stw TMP1, -8(RA) - | addis PC, TMP3, -(BCBIAS_J*4 >> 16) - |1: - | ins_next - |5: // Despecialize bytecode if any of the checks fail. - | li TMP0, BC_JMP - | li TMP1, BC_ITERC - | stb TMP0, -1(PC) - | addis PC, TMP3, -(BCBIAS_J*4 >> 16) - | stb TMP1, 3(PC) - | b <1 - break; - - case BC_VARG: - | // RA = base*8, RB = (nresults+1)*8, RC = numparams*8 - | lwz TMP0, FRAME_PC(BASE) - | add RC, BASE, RC - | add RA, BASE, RA - | addi RC, RC, FRAME_VARG - | add TMP2, RA, RB - | subi TMP3, BASE, 8 // TMP3 = vtop - | sub RC, RC, TMP0 // RC = vbase - | // Note: RC may now be even _above_ BASE if nargs was < numparams. - | cmplwi cr1, RB, 0 - | sub. TMP1, TMP3, RC - | beq cr1, >5 // Copy all varargs? - | subi TMP2, TMP2, 16 - | ble >2 // No vararg slots? - |1: // Copy vararg slots to destination slots. - | evldd TMP0, 0(RC) - | addi RC, RC, 8 - | evstdd TMP0, 0(RA) - | cmplw RA, TMP2 - | cmplw cr1, RC, TMP3 - | bge >3 // All destination slots filled? - | addi RA, RA, 8 - | blt cr1, <1 // More vararg slots? - |2: // Fill up remainder with nil. - | evstdd TISNIL, 0(RA) - | cmplw RA, TMP2 - | addi RA, RA, 8 - | blt <2 - |3: - | ins_next - | - |5: // Copy all varargs. - | lwz TMP0, L->maxstack - | li MULTRES, 8 // MULTRES = (0+1)*8 - | ble <3 // No vararg slots? - | add TMP2, RA, TMP1 - | cmplw TMP2, TMP0 - | addi MULTRES, TMP1, 8 - | bgt >7 - |6: - | evldd TMP0, 0(RC) - | addi RC, RC, 8 - | evstdd TMP0, 0(RA) - | cmplw RC, TMP3 - | addi RA, RA, 8 - | blt <6 // More vararg slots? - | b <3 - | - |7: // Grow stack for varargs. - | mr CARG1, L - | stw RA, L->top - | sub SAVE0, RC, BASE // Need delta, because BASE may change. - | stw BASE, L->base - | sub RA, RA, BASE - | stw PC, SAVE_PC - | srwi CARG2, TMP1, 3 - | bl extern lj_state_growstack // (lua_State *L, int n) - | lwz BASE, L->base - | add RA, BASE, RA - | add RC, BASE, SAVE0 - | subi TMP3, BASE, 8 - | b <6 - break; - - /* -- Returns ----------------------------------------------------------- */ - - case BC_RETM: - | // RA = results*8, RD = extra_nresults*8 - | add RD, RD, MULTRES // MULTRES >= 8, so RD >= 8. - | // Fall through. Assumes BC_RET follows. - break; - - case BC_RET: - | // RA = results*8, RD = (nresults+1)*8 - | lwz PC, FRAME_PC(BASE) - | add RA, BASE, RA - | mr MULTRES, RD - |1: - | andi. TMP0, PC, FRAME_TYPE - | xori TMP1, PC, FRAME_VARG - | bne ->BC_RETV_Z - | - |->BC_RET_Z: - | // BASE = base, RA = resultptr, RD = (nresults+1)*8, PC = return - | lwz INS, -4(PC) - | cmpwi RD, 8 - | subi TMP2, BASE, 8 - | subi RC, RD, 8 - | decode_RB8 RB, INS - | beq >3 - | li TMP1, 0 - |2: - | addi TMP3, TMP1, 8 - | evlddx TMP0, RA, TMP1 - | cmpw TMP3, RC - | evstddx TMP0, TMP2, TMP1 - | beq >3 - | addi TMP1, TMP3, 8 - | evlddx TMP0, RA, TMP3 - | cmpw TMP1, RC - | evstddx TMP0, TMP2, TMP3 - | bne <2 - |3: - |5: - | cmplw RB, RD - | decode_RA8 RA, INS - | bgt >6 - | sub BASE, TMP2, RA - | lwz LFUNC:TMP1, FRAME_FUNC(BASE) - | ins_next1 - | lwz TMP1, LFUNC:TMP1->pc - | lwz KBASE, PC2PROTO(k)(TMP1) - | ins_next2 - | - |6: // Fill up results with nil. - | subi TMP1, RD, 8 - | addi RD, RD, 8 - | evstddx TISNIL, TMP2, TMP1 - | b <5 - | - |->BC_RETV_Z: // Non-standard return case. - | andi. TMP2, TMP1, FRAME_TYPEP - | bne ->vm_return - | // Return from vararg function: relocate BASE down. - | sub BASE, BASE, TMP1 - | lwz PC, FRAME_PC(BASE) - | b <1 - break; - - case BC_RET0: case BC_RET1: - | // RA = results*8, RD = (nresults+1)*8 - | lwz PC, FRAME_PC(BASE) - | add RA, BASE, RA - | mr MULTRES, RD - | andi. TMP0, PC, FRAME_TYPE - | xori TMP1, PC, FRAME_VARG - | bne ->BC_RETV_Z - | - | lwz INS, -4(PC) - | subi TMP2, BASE, 8 - | decode_RB8 RB, INS - if (op == BC_RET1) { - | evldd TMP0, 0(RA) - | evstdd TMP0, 0(TMP2) - } - |5: - | cmplw RB, RD - | decode_RA8 RA, INS - | bgt >6 - | sub BASE, TMP2, RA - | lwz LFUNC:TMP1, FRAME_FUNC(BASE) - | ins_next1 - | lwz TMP1, LFUNC:TMP1->pc - | lwz KBASE, PC2PROTO(k)(TMP1) - | ins_next2 - | - |6: // Fill up results with nil. - | subi TMP1, RD, 8 - | addi RD, RD, 8 - | evstddx TISNIL, TMP2, TMP1 - | b <5 - break; - - /* -- Loops and branches ------------------------------------------------ */ - - case BC_FORL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IFORL follows. - break; - - case BC_JFORI: - case BC_JFORL: -#if !LJ_HASJIT - break; -#endif - case BC_FORI: - case BC_IFORL: - | // RA = base*8, RD = target (after end of loop or start of loop) - vk = (op == BC_IFORL || op == BC_JFORL); - | add RA, BASE, RA - | evldd TMP1, FORL_IDX*8(RA) - | evldd TMP3, FORL_STEP*8(RA) - | evldd TMP2, FORL_STOP*8(RA) - if (!vk) { - | evcmpgtu cr0, TMP1, TISNUM - | evcmpgtu cr7, TMP3, TISNUM - | evcmpgtu cr1, TMP2, TISNUM - | cror 4*cr0+lt, 4*cr0+lt, 4*cr7+lt - | cror 4*cr0+lt, 4*cr0+lt, 4*cr1+lt - | blt ->vmeta_for - } - if (vk) { - | efdadd TMP1, TMP1, TMP3 - | evstdd TMP1, FORL_IDX*8(RA) - } - | evcmpgts TMP3, TISNIL - | evstdd TMP1, FORL_EXT*8(RA) - | bge >2 - | efdcmpgt TMP1, TMP2 - |1: - if (op != BC_JFORL) { - | srwi RD, RD, 1 - | add RD, PC, RD - if (op == BC_JFORI) { - | addis PC, RD, -(BCBIAS_J*4 >> 16) - } else { - | addis RD, RD, -(BCBIAS_J*4 >> 16) - } - } - if (op == BC_FORI) { - | iselgt PC, RD, PC - } else if (op == BC_IFORL) { - | iselgt PC, PC, RD - } else { - | ble =>BC_JLOOP - } - | ins_next - |2: - | efdcmpgt TMP2, TMP1 - | b <1 - break; - - case BC_ITERL: - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_IITERL follows. - break; - - case BC_JITERL: -#if !LJ_HASJIT - break; -#endif - case BC_IITERL: - | // RA = base*8, RD = target - | evlddx TMP1, BASE, RA - | subi RA, RA, 8 - | checknil TMP1 - | checkok >1 // Stop if iterator returned nil. - if (op == BC_JITERL) { - | NYI - } else { - | branch_RD // Otherwise save control var + branch. - | evstddx TMP1, BASE, RA - } - |1: - | ins_next - break; - - case BC_LOOP: - | // RA = base*8, RD = target (loop extent) - | // Note: RA/RD is only used by trace recorder to determine scope/extent - | // This opcode does NOT jump, it's only purpose is to detect a hot loop. - |.if JIT - | hotloop - |.endif - | // Fall through. Assumes BC_ILOOP follows. - break; - - case BC_ILOOP: - | // RA = base*8, RD = target (loop extent) - | ins_next - break; - - case BC_JLOOP: - |.if JIT - | NYI - |.endif - break; - - case BC_JMP: - | // RA = base*8 (only used by trace recorder), RD = target - | branch_RD - | ins_next - break; - - /* -- Function headers -------------------------------------------------- */ - - case BC_FUNCF: - |.if JIT - | hotcall - |.endif - case BC_FUNCV: /* NYI: compiled vararg functions. */ - | // Fall through. Assumes BC_IFUNCF/BC_IFUNCV follow. - break; - - case BC_JFUNCF: -#if !LJ_HASJIT - break; -#endif - case BC_IFUNCF: - | // BASE = new base, RA = BASE+framesize*8, RB = LFUNC, RC = nargs*8 - | lwz TMP2, L->maxstack - | lbz TMP1, -4+PC2PROTO(numparams)(PC) - | lwz KBASE, -4+PC2PROTO(k)(PC) - | cmplw RA, TMP2 - | slwi TMP1, TMP1, 3 - | bgt ->vm_growstack_l - | ins_next1 - |2: - | cmplw NARGS8:RC, TMP1 // Check for missing parameters. - | ble >3 - if (op == BC_JFUNCF) { - | NYI - } else { - | ins_next2 - } - | - |3: // Clear missing parameters. - | evstddx TISNIL, BASE, NARGS8:RC - | addi NARGS8:RC, NARGS8:RC, 8 - | b <2 - break; - - case BC_JFUNCV: -#if !LJ_HASJIT - break; -#endif - | NYI // NYI: compiled vararg functions - break; /* NYI: compiled vararg functions. */ - - case BC_IFUNCV: - | // BASE = new base, RA = BASE+framesize*8, RB = LFUNC, RC = nargs*8 - | lwz TMP2, L->maxstack - | add TMP1, BASE, RC - | add TMP0, RA, RC - | stw LFUNC:RB, 4(TMP1) // Store copy of LFUNC. - | addi TMP3, RC, 8+FRAME_VARG - | lwz KBASE, -4+PC2PROTO(k)(PC) - | cmplw TMP0, TMP2 - | stw TMP3, 0(TMP1) // Store delta + FRAME_VARG. - | bge ->vm_growstack_l - | lbz TMP2, -4+PC2PROTO(numparams)(PC) - | mr RA, BASE - | mr RC, TMP1 - | ins_next1 - | cmpwi TMP2, 0 - | addi BASE, TMP1, 8 - | beq >3 - |1: - | cmplw RA, RC // Less args than parameters? - | evldd TMP0, 0(RA) - | bge >4 - | evstdd TISNIL, 0(RA) // Clear old fixarg slot (help the GC). - | addi RA, RA, 8 - |2: - | addic. TMP2, TMP2, -1 - | evstdd TMP0, 8(TMP1) - | addi TMP1, TMP1, 8 - | bne <1 - |3: - | ins_next2 - | - |4: // Clear missing parameters. - | evmr TMP0, TISNIL - | b <2 - break; - - case BC_FUNCC: - case BC_FUNCCW: - | // BASE = new base, RA = BASE+framesize*8, RB = CFUNC, RC = nargs*8 - if (op == BC_FUNCC) { - | lwz TMP3, CFUNC:RB->f - } else { - | lwz TMP3, DISPATCH_GL(wrapf)(DISPATCH) - } - | add TMP1, RA, NARGS8:RC - | lwz TMP2, L->maxstack - | add RC, BASE, NARGS8:RC - | stw BASE, L->base - | cmplw TMP1, TMP2 - | stw RC, L->top - | li_vmstate C - | mtctr TMP3 - if (op == BC_FUNCCW) { - | lwz CARG2, CFUNC:RB->f - } - | mr CARG1, L - | bgt ->vm_growstack_c // Need to grow stack. - | st_vmstate - | bctrl // (lua_State *L [, lua_CFunction f]) - | // Returns nresults. - | lwz TMP1, L->top - | slwi RD, CRET1, 3 - | lwz BASE, L->base - | li_vmstate INTERP - | lwz PC, FRAME_PC(BASE) // Fetch PC of caller. - | sub RA, TMP1, RD // RA = L->top - nresults*8 - | st_vmstate - | b ->vm_returnc - break; - - /* ---------------------------------------------------------------------- */ - - default: - fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]); - exit(2); - break; - } -} - -static int build_backend(BuildCtx *ctx) -{ - int op; - - dasm_growpc(Dst, BC__MAX); - - build_subroutines(ctx); - - |.code_op - for (op = 0; op < BC__MAX; op++) - build_ins(ctx, (BCOp)op, op); - - return BC__MAX; -} - -/* Emit pseudo frame-info for all assembler functions. */ -static void emit_asm_debug(BuildCtx *ctx) -{ - int i; - switch (ctx->mode) { - case BUILD_elfasm: - fprintf(ctx->fp, "\t.section .debug_frame,\"\",@progbits\n"); - fprintf(ctx->fp, - ".Lframe0:\n" - "\t.long .LECIE0-.LSCIE0\n" - ".LSCIE0:\n" - "\t.long 0xffffffff\n" - "\t.byte 0x1\n" - "\t.string \"\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 65\n" - "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE0:\n\n"); - fprintf(ctx->fp, - ".LSFDE0:\n" - "\t.long .LEFDE0-.LASFDE0\n" - ".LASFDE0:\n" - "\t.long .Lframe0\n" - "\t.long .Lbegin\n" - "\t.long %d\n" - "\t.byte 0xe\n\t.uleb128 %d\n" - "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" - "\t.byte 0x5\n\t.uleb128 70\n\t.sleb128 37\n", - (int)ctx->codesz, CFRAME_SIZE); - for (i = 14; i <= 31; i++) - fprintf(ctx->fp, - "\t.byte %d\n\t.uleb128 %d\n" - "\t.byte 5\n\t.uleb128 %d\n\t.uleb128 %d\n", - 0x80+i, 1+2*(31-i), 1200+i, 2+2*(31-i)); - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE0:\n\n"); - fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); - fprintf(ctx->fp, - ".Lframe1:\n" - "\t.long .LECIE1-.LSCIE1\n" - ".LSCIE1:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.string \"zPR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -4\n" - "\t.byte 65\n" - "\t.uleb128 6\n" /* augmentation length */ - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.long lj_err_unwind_dwarf-.\n" - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n" - "\t.align 2\n" - ".LECIE1:\n\n"); - fprintf(ctx->fp, - ".LSFDE1:\n" - "\t.long .LEFDE1-.LASFDE1\n" - ".LASFDE1:\n" - "\t.long .LASFDE1-.Lframe1\n" - "\t.long .Lbegin-.\n" - "\t.long %d\n" - "\t.uleb128 0\n" /* augmentation length */ - "\t.byte 0xe\n\t.uleb128 %d\n" - "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n" - "\t.byte 0x5\n\t.uleb128 70\n\t.sleb128 37\n", - (int)ctx->codesz, CFRAME_SIZE); - for (i = 14; i <= 31; i++) - fprintf(ctx->fp, - "\t.byte %d\n\t.uleb128 %d\n" - "\t.byte 5\n\t.uleb128 %d\n\t.uleb128 %d\n", - 0x80+i, 1+2*(31-i), 1200+i, 2+2*(31-i)); - fprintf(ctx->fp, - "\t.align 2\n" - ".LEFDE1:\n\n"); - break; - default: - break; - } -} - diff --git a/deps/luajit/src/vm_x86.dasc b/deps/luajit/src/vm_x86.dasc deleted file mode 100644 index 6cdb8cb..0000000 --- a/deps/luajit/src/vm_x86.dasc +++ /dev/null @@ -1,6377 +0,0 @@ -|// Low-level VM code for x86 CPUs. -|// Bytecode interpreter, fast functions and helper functions. -|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h -| -|.if P64 -|.arch x64 -|.else -|.arch x86 -|.endif -|.section code_op, code_sub -| -|.actionlist build_actionlist -|.globals GLOB_ -|.globalnames globnames -|.externnames extnames -| -|//----------------------------------------------------------------------- -| -|.if P64 -|.define X64, 1 -|.define SSE, 1 -|.if WIN -|.define X64WIN, 1 -|.endif -|.endif -| -|// Fixed register assignments for the interpreter. -|// This is very fragile and has many dependencies. Caveat emptor. -|.define BASE, edx // Not C callee-save, refetched anyway. -|.if not X64 -|.define KBASE, edi // Must be C callee-save. -|.define KBASEa, KBASE -|.define PC, esi // Must be C callee-save. -|.define PCa, PC -|.define DISPATCH, ebx // Must be C callee-save. -|.elif X64WIN -|.define KBASE, edi // Must be C callee-save. -|.define KBASEa, rdi -|.define PC, esi // Must be C callee-save. -|.define PCa, rsi -|.define DISPATCH, ebx // Must be C callee-save. -|.else -|.define KBASE, r15d // Must be C callee-save. -|.define KBASEa, r15 -|.define PC, ebx // Must be C callee-save. -|.define PCa, rbx -|.define DISPATCH, r14d // Must be C callee-save. -|.endif -| -|.define RA, ecx -|.define RAH, ch -|.define RAL, cl -|.define RB, ebp // Must be ebp (C callee-save). -|.define RC, eax // Must be eax. -|.define RCW, ax -|.define RCH, ah -|.define RCL, al -|.define OP, RB -|.define RD, RC -|.define RDW, RCW -|.define RDL, RCL -|.if X64 -|.define RAa, rcx -|.define RBa, rbp -|.define RCa, rax -|.define RDa, rax -|.else -|.define RAa, RA -|.define RBa, RB -|.define RCa, RC -|.define RDa, RD -|.endif -| -|.if not X64 -|.define FCARG1, ecx // x86 fastcall arguments. -|.define FCARG2, edx -|.elif X64WIN -|.define CARG1, rcx // x64/WIN64 C call arguments. -|.define CARG2, rdx -|.define CARG3, r8 -|.define CARG4, r9 -|.define CARG1d, ecx -|.define CARG2d, edx -|.define CARG3d, r8d -|.define CARG4d, r9d -|.define FCARG1, CARG1d // Upwards compatible to x86 fastcall. -|.define FCARG2, CARG2d -|.else -|.define CARG1, rdi // x64/POSIX C call arguments. -|.define CARG2, rsi -|.define CARG3, rdx -|.define CARG4, rcx -|.define CARG5, r8 -|.define CARG6, r9 -|.define CARG1d, edi -|.define CARG2d, esi -|.define CARG3d, edx -|.define CARG4d, ecx -|.define CARG5d, r8d -|.define CARG6d, r9d -|.define FCARG1, CARG1d // Simulate x86 fastcall. -|.define FCARG2, CARG2d -|.endif -| -|// Type definitions. Some of these are only used for documentation. -|.type L, lua_State -|.type GL, global_State -|.type TVALUE, TValue -|.type GCOBJ, GCobj -|.type STR, GCstr -|.type TAB, GCtab -|.type LFUNC, GCfuncL -|.type CFUNC, GCfuncC -|.type PROTO, GCproto -|.type UPVAL, GCupval -|.type NODE, Node -|.type NARGS, int -|.type TRACE, GCtrace -| -|// Stack layout while in interpreter. Must match with lj_frame.h. -|//----------------------------------------------------------------------- -|.if not X64 // x86 stack layout. -| -|.define CFRAME_SPACE, aword*7 // Delta for esp (see <--). -|.macro saveregs_ -| push edi; push esi; push ebx -| sub esp, CFRAME_SPACE -|.endmacro -|.macro saveregs -| push ebp; saveregs_ -|.endmacro -|.macro restoreregs -| add esp, CFRAME_SPACE -| pop ebx; pop esi; pop edi; pop ebp -|.endmacro -| -|.define SAVE_ERRF, aword [esp+aword*15] // vm_pcall/vm_cpcall only. -|.define SAVE_NRES, aword [esp+aword*14] -|.define SAVE_CFRAME, aword [esp+aword*13] -|.define SAVE_L, aword [esp+aword*12] -|//----- 16 byte aligned, ^^^ arguments from C caller -|.define SAVE_RET, aword [esp+aword*11] //<-- esp entering interpreter. -|.define SAVE_R4, aword [esp+aword*10] -|.define SAVE_R3, aword [esp+aword*9] -|.define SAVE_R2, aword [esp+aword*8] -|//----- 16 byte aligned -|.define SAVE_R1, aword [esp+aword*7] //<-- esp after register saves. -|.define SAVE_PC, aword [esp+aword*6] -|.define TMP2, aword [esp+aword*5] -|.define TMP1, aword [esp+aword*4] -|//----- 16 byte aligned -|.define ARG4, aword [esp+aword*3] -|.define ARG3, aword [esp+aword*2] -|.define ARG2, aword [esp+aword*1] -|.define ARG1, aword [esp] //<-- esp while in interpreter. -|//----- 16 byte aligned, ^^^ arguments for C callee -| -|// FPARGx overlaps ARGx and ARG(x+1) on x86. -|.define FPARG3, qword [esp+qword*1] -|.define FPARG1, qword [esp] -|// TMPQ overlaps TMP1/TMP2. ARG5/MULTRES overlap TMP1/TMP2 (and TMPQ). -|.define TMPQ, qword [esp+aword*4] -|.define TMP3, ARG4 -|.define ARG5, TMP1 -|.define TMPa, TMP1 -|.define MULTRES, TMP2 -| -|// Arguments for vm_call and vm_pcall. -|.define INARG_BASE, SAVE_CFRAME // Overwritten by SAVE_CFRAME! -| -|// Arguments for vm_cpcall. -|.define INARG_CP_CALL, SAVE_ERRF -|.define INARG_CP_UD, SAVE_NRES -|.define INARG_CP_FUNC, SAVE_CFRAME -| -|//----------------------------------------------------------------------- -|.elif X64WIN // x64/Windows stack layout -| -|.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--). -|.macro saveregs_ -| push rdi; push rsi; push rbx -| sub rsp, CFRAME_SPACE -|.endmacro -|.macro saveregs -| push rbp; saveregs_ -|.endmacro -|.macro restoreregs -| add rsp, CFRAME_SPACE -| pop rbx; pop rsi; pop rdi; pop rbp -|.endmacro -| -|.define SAVE_CFRAME, aword [rsp+aword*13] -|.define SAVE_PC, dword [rsp+dword*25] -|.define SAVE_L, dword [rsp+dword*24] -|.define SAVE_ERRF, dword [rsp+dword*23] -|.define SAVE_NRES, dword [rsp+dword*22] -|.define TMP2, dword [rsp+dword*21] -|.define TMP1, dword [rsp+dword*20] -|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by interpreter -|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter. -|.define SAVE_R4, aword [rsp+aword*8] -|.define SAVE_R3, aword [rsp+aword*7] -|.define SAVE_R2, aword [rsp+aword*6] -|.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves. -|.define ARG5, aword [rsp+aword*4] -|.define CSAVE_4, aword [rsp+aword*3] -|.define CSAVE_3, aword [rsp+aword*2] -|.define CSAVE_2, aword [rsp+aword*1] -|.define CSAVE_1, aword [rsp] //<-- rsp while in interpreter. -|//----- 16 byte aligned, ^^^ 32 byte register save area, owned by callee -| -|// TMPQ overlaps TMP1/TMP2. MULTRES overlaps TMP2 (and TMPQ). -|.define TMPQ, qword [rsp+aword*10] -|.define MULTRES, TMP2 -|.define TMPa, ARG5 -|.define ARG5d, dword [rsp+aword*4] -|.define TMP3, ARG5d -| -|//----------------------------------------------------------------------- -|.else // x64/POSIX stack layout -| -|.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--). -|.macro saveregs_ -| push rbx; push r15; push r14 -| sub rsp, CFRAME_SPACE -|.endmacro -|.macro saveregs -| push rbp; saveregs_ -|.endmacro -|.macro restoreregs -| add rsp, CFRAME_SPACE -| pop r14; pop r15; pop rbx; pop rbp -|.endmacro -| -|//----- 16 byte aligned, -|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter. -|.define SAVE_R4, aword [rsp+aword*8] -|.define SAVE_R3, aword [rsp+aword*7] -|.define SAVE_R2, aword [rsp+aword*6] -|.define SAVE_R1, aword [rsp+aword*5] //<-- rsp after register saves. -|.define SAVE_CFRAME, aword [rsp+aword*4] -|.define SAVE_PC, dword [rsp+dword*7] -|.define SAVE_L, dword [rsp+dword*6] -|.define SAVE_ERRF, dword [rsp+dword*5] -|.define SAVE_NRES, dword [rsp+dword*4] -|.define TMPa, aword [rsp+aword*1] -|.define TMP2, dword [rsp+dword*1] -|.define TMP1, dword [rsp] //<-- rsp while in interpreter. -|//----- 16 byte aligned -| -|// TMPQ overlaps TMP1/TMP2. MULTRES overlaps TMP2 (and TMPQ). -|.define TMPQ, qword [rsp] -|.define TMP3, dword [rsp+aword*1] -|.define MULTRES, TMP2 -| -|.endif -| -|//----------------------------------------------------------------------- -| -|// Instruction headers. -|.macro ins_A; .endmacro -|.macro ins_AD; .endmacro -|.macro ins_AJ; .endmacro -|.macro ins_ABC; movzx RB, RCH; movzx RC, RCL; .endmacro -|.macro ins_AB_; movzx RB, RCH; .endmacro -|.macro ins_A_C; movzx RC, RCL; .endmacro -|.macro ins_AND; not RDa; .endmacro -| -|// Instruction decode+dispatch. Carefully tuned (nope, lodsd is not faster). -|.macro ins_NEXT -| mov RC, [PC] -| movzx RA, RCH -| movzx OP, RCL -| add PC, 4 -| shr RC, 16 -|.if X64 -| jmp aword [DISPATCH+OP*8] -|.else -| jmp aword [DISPATCH+OP*4] -|.endif -|.endmacro -| -|// Instruction footer. -|.if 1 -| // Replicated dispatch. Less unpredictable branches, but higher I-Cache use. -| .define ins_next, ins_NEXT -| .define ins_next_, ins_NEXT -|.else -| // Common dispatch. Lower I-Cache use, only one (very) unpredictable branch. -| // Affects only certain kinds of benchmarks (and only with -j off). -| // Around 10%-30% slower on Core2, a lot more slower on P4. -| .macro ins_next -| jmp ->ins_next -| .endmacro -| .macro ins_next_ -| ->ins_next: -| ins_NEXT -| .endmacro -|.endif -| -|// Call decode and dispatch. -|.macro ins_callt -| // BASE = new base, RB = LFUNC, RD = nargs+1, [BASE-4] = PC -| mov PC, LFUNC:RB->pc -| mov RA, [PC] -| movzx OP, RAL -| movzx RA, RAH -| add PC, 4 -|.if X64 -| jmp aword [DISPATCH+OP*8] -|.else -| jmp aword [DISPATCH+OP*4] -|.endif -|.endmacro -| -|.macro ins_call -| // BASE = new base, RB = LFUNC, RD = nargs+1 -| mov [BASE-4], PC -| ins_callt -|.endmacro -| -|//----------------------------------------------------------------------- -| -|// Macros to test operand types. -|.macro checktp, reg, tp; cmp dword [BASE+reg*8+4], tp; .endmacro -|.macro checknum, reg, target; checktp reg, LJ_TISNUM; jae target; .endmacro -|.macro checkint, reg, target; checktp reg, LJ_TISNUM; jne target; .endmacro -|.macro checkstr, reg, target; checktp reg, LJ_TSTR; jne target; .endmacro -|.macro checktab, reg, target; checktp reg, LJ_TTAB; jne target; .endmacro -| -|// These operands must be used with movzx. -|.define PC_OP, byte [PC-4] -|.define PC_RA, byte [PC-3] -|.define PC_RB, byte [PC-1] -|.define PC_RC, byte [PC-2] -|.define PC_RD, word [PC-2] -| -|.macro branchPC, reg -| lea PC, [PC+reg*4-BCBIAS_J*4] -|.endmacro -| -|// Assumes DISPATCH is relative to GL. -#define DISPATCH_GL(field) (GG_DISP2G + (int)offsetof(global_State, field)) -#define DISPATCH_J(field) (GG_DISP2J + (int)offsetof(jit_State, field)) -| -#define PC2PROTO(field) ((int)offsetof(GCproto, field)-(int)sizeof(GCproto)) -| -|// Decrement hashed hotcount and trigger trace recorder if zero. -|.macro hotloop, reg -| mov reg, PC -| shr reg, 1 -| and reg, HOTCOUNT_PCMASK -| sub word [DISPATCH+reg+GG_DISP2HOT], HOTCOUNT_LOOP -| jb ->vm_hotloop -|.endmacro -| -|.macro hotcall, reg -| mov reg, PC -| shr reg, 1 -| and reg, HOTCOUNT_PCMASK -| sub word [DISPATCH+reg+GG_DISP2HOT], HOTCOUNT_CALL -| jb ->vm_hotcall -|.endmacro -| -|// Set current VM state. -|.macro set_vmstate, st -| mov dword [DISPATCH+DISPATCH_GL(vmstate)], ~LJ_VMST_..st -|.endmacro -| -|// x87 compares. -|.macro fcomparepp // Compare and pop st0 >< st1. -| fucomip st1 -| fpop -|.endmacro -| -|.macro fdup; fld st0; .endmacro -|.macro fpop1; fstp st1; .endmacro -| -|// Synthesize SSE FP constants. -|.macro sseconst_abs, reg, tmp // Synthesize abs mask. -|.if X64 -| mov64 tmp, U64x(7fffffff,ffffffff); movd reg, tmp -|.else -| pxor reg, reg; pcmpeqd reg, reg; psrlq reg, 1 -|.endif -|.endmacro -| -|.macro sseconst_hi, reg, tmp, val // Synthesize hi-32 bit const. -|.if X64 -| mov64 tmp, U64x(val,00000000); movd reg, tmp -|.else -| mov tmp, 0x .. val; movd reg, tmp; pshufd reg, reg, 0x51 -|.endif -|.endmacro -| -|.macro sseconst_sign, reg, tmp // Synthesize sign mask. -| sseconst_hi reg, tmp, 80000000 -|.endmacro -|.macro sseconst_1, reg, tmp // Synthesize 1.0. -| sseconst_hi reg, tmp, 3ff00000 -|.endmacro -|.macro sseconst_m1, reg, tmp // Synthesize -1.0. -| sseconst_hi reg, tmp, bff00000 -|.endmacro -|.macro sseconst_2p52, reg, tmp // Synthesize 2^52. -| sseconst_hi reg, tmp, 43300000 -|.endmacro -|.macro sseconst_tobit, reg, tmp // Synthesize 2^52 + 2^51. -| sseconst_hi reg, tmp, 43380000 -|.endmacro -| -|// Move table write barrier back. Overwrites reg. -|.macro barrierback, tab, reg -| and byte tab->marked, (uint8_t)~LJ_GC_BLACK // black2gray(tab) -| mov reg, [DISPATCH+DISPATCH_GL(gc.grayagain)] -| mov [DISPATCH+DISPATCH_GL(gc.grayagain)], tab -| mov tab->gclist, reg -|.endmacro -| -|//----------------------------------------------------------------------- - -/* Generate subroutines used by opcodes and other parts of the VM. */ -/* The .code_sub section should be last to help static branch prediction. */ -static void build_subroutines(BuildCtx *ctx) -{ - |.code_sub - | - |//----------------------------------------------------------------------- - |//-- Return handling ---------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_returnp: - | test PC, FRAME_P - | jz ->cont_dispatch - | - | // Return from pcall or xpcall fast func. - | and PC, -8 - | sub BASE, PC // Restore caller base. - | lea RAa, [RA+PC-8] // Rebase RA and prepend one result. - | mov PC, [BASE-4] // Fetch PC of previous frame. - | // Prepending may overwrite the pcall frame, so do it at the end. - | mov dword [BASE+RA+4], LJ_TTRUE // Prepend true to results. - | - |->vm_returnc: - | add RD, 1 // RD = nresults+1 - | jz ->vm_unwind_yield - | mov MULTRES, RD - | test PC, FRAME_TYPE - | jz ->BC_RET_Z // Handle regular return to Lua. - | - |->vm_return: - | // BASE = base, RA = resultofs, RD = nresults+1 (= MULTRES), PC = return - | xor PC, FRAME_C - | test PC, FRAME_TYPE - | jnz ->vm_returnp - | - | // Return to C. - | set_vmstate C - | and PC, -8 - | sub PC, BASE - | neg PC // Previous base = BASE - delta. - | - | sub RD, 1 - | jz >2 - |1: // Move results down. - |.if X64 - | mov RBa, [BASE+RA] - | mov [BASE-8], RBa - |.else - | mov RB, [BASE+RA] - | mov [BASE-8], RB - | mov RB, [BASE+RA+4] - | mov [BASE-4], RB - |.endif - | add BASE, 8 - | sub RD, 1 - | jnz <1 - |2: - | mov L:RB, SAVE_L - | mov L:RB->base, PC - |3: - | mov RD, MULTRES - | mov RA, SAVE_NRES // RA = wanted nresults+1 - |4: - | cmp RA, RD - | jne >6 // More/less results wanted? - |5: - | sub BASE, 8 - | mov L:RB->top, BASE - | - |->vm_leave_cp: - | mov RAa, SAVE_CFRAME // Restore previous C frame. - | mov L:RB->cframe, RAa - | xor eax, eax // Ok return status for vm_pcall. - | - |->vm_leave_unw: - | restoreregs - | ret - | - |6: - | jb >7 // Less results wanted? - | // More results wanted. Check stack size and fill up results with nil. - | cmp BASE, L:RB->maxstack - | ja >8 - | mov dword [BASE-4], LJ_TNIL - | add BASE, 8 - | add RD, 1 - | jmp <4 - | - |7: // Less results wanted. - | test RA, RA - | jz <5 // But check for LUA_MULTRET+1. - | sub RA, RD // Negative result! - | lea BASE, [BASE+RA*8] // Correct top. - | jmp <5 - | - |8: // Corner case: need to grow stack for filling up results. - | // This can happen if: - | // - A C function grows the stack (a lot). - | // - The GC shrinks the stack in between. - | // - A return back from a lua_call() with (high) nresults adjustment. - | mov L:RB->top, BASE // Save current top held in BASE (yes). - | mov MULTRES, RD // Need to fill only remainder with nil. - | mov FCARG2, RA - | mov FCARG1, L:RB - | call extern lj_state_growstack@8 // (lua_State *L, int n) - | mov BASE, L:RB->top // Need the (realloced) L->top in BASE. - | jmp <3 - | - |->vm_unwind_yield: - | mov al, LUA_YIELD - | jmp ->vm_unwind_c_eh - | - |->vm_unwind_c@8: // Unwind C stack, return from vm_pcall. - | // (void *cframe, int errcode) - |.if X64 - | mov eax, CARG2d // Error return status for vm_pcall. - | mov rsp, CARG1 - |.else - | mov eax, FCARG2 // Error return status for vm_pcall. - | mov esp, FCARG1 - |.endif - |->vm_unwind_c_eh: // Landing pad for external unwinder. - | mov L:RB, SAVE_L - | mov GL:RB, L:RB->glref - | mov dword GL:RB->vmstate, ~LJ_VMST_C - | jmp ->vm_leave_unw - | - |->vm_unwind_rethrow: - |.if X64 and not X64WIN - | mov FCARG1, SAVE_L - | mov FCARG2, eax - | restoreregs - | jmp extern lj_err_throw@8 // (lua_State *L, int errcode) - |.endif - | - |->vm_unwind_ff@4: // Unwind C stack, return from ff pcall. - | // (void *cframe) - |.if X64 - | and CARG1, CFRAME_RAWMASK - | mov rsp, CARG1 - |.else - | and FCARG1, CFRAME_RAWMASK - | mov esp, FCARG1 - |.endif - |->vm_unwind_ff_eh: // Landing pad for external unwinder. - | mov L:RB, SAVE_L - | mov RAa, -8 // Results start at BASE+RA = BASE-8. - | mov RD, 1+1 // Really 1+2 results, incr. later. - | mov BASE, L:RB->base - | mov DISPATCH, L:RB->glref // Setup pointer to dispatch table. - | add DISPATCH, GG_G2DISP - | mov PC, [BASE-4] // Fetch PC of previous frame. - | mov dword [BASE-4], LJ_TFALSE // Prepend false to error message. - | set_vmstate INTERP - | jmp ->vm_returnc // Increments RD/MULTRES and returns. - | - |//----------------------------------------------------------------------- - |//-- Grow stack for calls ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_growstack_c: // Grow stack for C function. - | mov FCARG2, LUA_MINSTACK - | jmp >2 - | - |->vm_growstack_v: // Grow stack for vararg Lua function. - | sub RD, 8 - | jmp >1 - | - |->vm_growstack_f: // Grow stack for fixarg Lua function. - | // BASE = new base, RD = nargs+1, RB = L, PC = first PC - | lea RD, [BASE+NARGS:RD*8-8] - |1: - | movzx RA, byte [PC-4+PC2PROTO(framesize)] - | add PC, 4 // Must point after first instruction. - | mov L:RB->base, BASE - | mov L:RB->top, RD - | mov SAVE_PC, PC - | mov FCARG2, RA - |2: - | // RB = L, L->base = new base, L->top = top - | mov FCARG1, L:RB - | call extern lj_state_growstack@8 // (lua_State *L, int n) - | mov BASE, L:RB->base - | mov RD, L:RB->top - | mov LFUNC:RB, [BASE-8] - | sub RD, BASE - | shr RD, 3 - | add NARGS:RD, 1 - | // BASE = new base, RB = LFUNC, RD = nargs+1 - | ins_callt // Just retry the call. - | - |//----------------------------------------------------------------------- - |//-- Entry points into the assembler VM --------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_resume: // Setup C frame and resume thread. - | // (lua_State *L, TValue *base, int nres1 = 0, ptrdiff_t ef = 0) - | saveregs - |.if X64 - | mov L:RB, CARG1d // Caveat: CARG1d may be RA. - | mov SAVE_L, CARG1d - | mov RA, CARG2d - |.else - | mov L:RB, SAVE_L - | mov RA, INARG_BASE // Caveat: overlaps SAVE_CFRAME! - |.endif - | mov PC, FRAME_CP - | xor RD, RD - | lea KBASEa, [esp+CFRAME_RESUME] - | mov DISPATCH, L:RB->glref // Setup pointer to dispatch table. - | add DISPATCH, GG_G2DISP - | mov L:RB->cframe, KBASEa - | mov SAVE_PC, RD // Any value outside of bytecode is ok. - | mov SAVE_CFRAME, RDa - |.if X64 - | mov SAVE_NRES, RD - | mov SAVE_ERRF, RD - |.endif - | cmp byte L:RB->status, RDL - | je >3 // Initial resume (like a call). - | - | // Resume after yield (like a return). - | set_vmstate INTERP - | mov byte L:RB->status, RDL - | mov BASE, L:RB->base - | mov RD, L:RB->top - | sub RD, RA - | shr RD, 3 - | add RD, 1 // RD = nresults+1 - | sub RA, BASE // RA = resultofs - | mov PC, [BASE-4] - | mov MULTRES, RD - | test PC, FRAME_TYPE - | jz ->BC_RET_Z - | jmp ->vm_return - | - |->vm_pcall: // Setup protected C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1, ptrdiff_t ef) - | saveregs - | mov PC, FRAME_CP - |.if X64 - | mov SAVE_ERRF, CARG4d - |.endif - | jmp >1 - | - |->vm_call: // Setup C frame and enter VM. - | // (lua_State *L, TValue *base, int nres1) - | saveregs - | mov PC, FRAME_C - | - |1: // Entry point for vm_pcall above (PC = ftype). - |.if X64 - | mov SAVE_NRES, CARG3d - | mov L:RB, CARG1d // Caveat: CARG1d may be RA. - | mov SAVE_L, CARG1d - | mov RA, CARG2d - |.else - | mov L:RB, SAVE_L - | mov RA, INARG_BASE // Caveat: overlaps SAVE_CFRAME! - |.endif - | - | mov KBASEa, L:RB->cframe // Add our C frame to cframe chain. - | mov SAVE_CFRAME, KBASEa - | mov SAVE_PC, L:RB // Any value outside of bytecode is ok. - |.if X64 - | mov L:RB->cframe, rsp - |.else - | mov L:RB->cframe, esp - |.endif - | - |2: // Entry point for vm_cpcall below (RA = base, RB = L, PC = ftype). - | mov DISPATCH, L:RB->glref // Setup pointer to dispatch table. - | add DISPATCH, GG_G2DISP - | - |3: // Entry point for vm_resume above (RA = base, RB = L, PC = ftype). - | set_vmstate INTERP - | mov BASE, L:RB->base // BASE = old base (used in vmeta_call). - | add PC, RA - | sub PC, BASE // PC = frame delta + frame type - | - | mov RD, L:RB->top - | sub RD, RA - | shr NARGS:RD, 3 - | add NARGS:RD, 1 // RD = nargs+1 - | - |->vm_call_dispatch: - | mov LFUNC:RB, [RA-8] - | cmp dword [RA-4], LJ_TFUNC - | jne ->vmeta_call // Ensure KBASE defined and != BASE. - | - |->vm_call_dispatch_f: - | mov BASE, RA - | ins_call - | // BASE = new base, RB = func, RD = nargs+1, PC = caller PC - | - |->vm_cpcall: // Setup protected C frame, call C. - | // (lua_State *L, lua_CFunction func, void *ud, lua_CPFunction cp) - | saveregs - |.if X64 - | mov L:RB, CARG1d // Caveat: CARG1d may be RA. - | mov SAVE_L, CARG1d - |.else - | mov L:RB, SAVE_L - | // Caveat: INARG_CP_* and SAVE_CFRAME/SAVE_NRES/SAVE_ERRF overlap! - | mov RC, INARG_CP_UD // Get args before they are overwritten. - | mov RA, INARG_CP_FUNC - | mov BASE, INARG_CP_CALL - |.endif - | mov SAVE_PC, L:RB // Any value outside of bytecode is ok. - | - | mov KBASE, L:RB->stack // Compute -savestack(L, L->top). - | sub KBASE, L:RB->top - | mov SAVE_ERRF, 0 // No error function. - | mov SAVE_NRES, KBASE // Neg. delta means cframe w/o frame. - | // Handler may change cframe_nres(L->cframe) or cframe_errfunc(L->cframe). - | - |.if X64 - | mov KBASEa, L:RB->cframe // Add our C frame to cframe chain. - | mov SAVE_CFRAME, KBASEa - | mov L:RB->cframe, rsp - | - | call CARG4 // (lua_State *L, lua_CFunction func, void *ud) - |.else - | mov ARG3, RC // Have to copy args downwards. - | mov ARG2, RA - | mov ARG1, L:RB - | - | mov KBASE, L:RB->cframe // Add our C frame to cframe chain. - | mov SAVE_CFRAME, KBASE - | mov L:RB->cframe, esp - | - | call BASE // (lua_State *L, lua_CFunction func, void *ud) - |.endif - | // TValue * (new base) or NULL returned in eax (RC). - | test RC, RC - | jz ->vm_leave_cp // No base? Just remove C frame. - | mov RA, RC - | mov PC, FRAME_CP - | jmp <2 // Else continue with the call. - | - |//----------------------------------------------------------------------- - |//-- Metamethod handling ------------------------------------------------ - |//----------------------------------------------------------------------- - | - |//-- Continuation dispatch ---------------------------------------------- - | - |->cont_dispatch: - | // BASE = meta base, RA = resultofs, RD = nresults+1 (also in MULTRES) - | add RA, BASE - | and PC, -8 - | mov RB, BASE - | sub BASE, PC // Restore caller BASE. - | mov dword [RA+RD*8-4], LJ_TNIL // Ensure one valid arg. - | mov RC, RA // ... in [RC] - | mov PC, [RB-12] // Restore PC from [cont|PC]. - |.if X64 - | movsxd RAa, dword [RB-16] // May be negative on WIN64 with debug. - |.if FFI - | cmp RA, 1 - | jbe >1 - |.endif - | lea KBASEa, qword [=>0] - | add RAa, KBASEa - |.else - | mov RA, dword [RB-16] - |.if FFI - | cmp RA, 1 - | jbe >1 - |.endif - |.endif - | mov LFUNC:KBASE, [BASE-8] - | mov KBASE, LFUNC:KBASE->pc - | mov KBASE, [KBASE+PC2PROTO(k)] - | // BASE = base, RC = result, RB = meta base - | jmp RAa // Jump to continuation. - | - |.if FFI - |1: - | je ->cont_ffi_callback // cont = 1: return from FFI callback. - | // cont = 0: Tail call from C function. - | sub RB, BASE - | shr RB, 3 - | lea RD, [RB-1] - | jmp ->vm_call_tail - |.endif - | - |->cont_cat: // BASE = base, RC = result, RB = mbase - | movzx RA, PC_RB - | sub RB, 16 - | lea RA, [BASE+RA*8] - | sub RA, RB - | je ->cont_ra - | neg RA - | shr RA, 3 - |.if X64WIN - | mov CARG3d, RA - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE - | mov RCa, [RC] - | mov [RB], RCa - | mov CARG2d, RB - |.elif X64 - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE - | mov CARG3d, RA - | mov RAa, [RC] - | mov [RB], RAa - | mov CARG2d, RB - |.else - | mov ARG3, RA - | mov RA, [RC+4] - | mov RC, [RC] - | mov [RB+4], RA - | mov [RB], RC - | mov ARG2, RB - |.endif - | jmp ->BC_CAT_Z - | - |//-- Table indexing metamethods ----------------------------------------- - | - |->vmeta_tgets: - | mov TMP1, RC // RC = GCstr * - | mov TMP2, LJ_TSTR - | lea RCa, TMP1 // Store temp. TValue in TMP1/TMP2. - | cmp PC_OP, BC_GGET - | jne >1 - | lea RA, [DISPATCH+DISPATCH_GL(tmptv)] // Store fn->l.env in g->tmptv. - | mov [RA], TAB:RB // RB = GCtab * - | mov dword [RA+4], LJ_TTAB - | mov RB, RA - | jmp >2 - | - |->vmeta_tgetb: - | movzx RC, PC_RC - |.if DUALNUM - | mov TMP2, LJ_TISNUM - | mov TMP1, RC - |.elif SSE - | cvtsi2sd xmm0, RC - | movsd TMPQ, xmm0 - |.else - | mov ARG4, RC - | fild ARG4 - | fstp TMPQ - |.endif - | lea RCa, TMPQ // Store temp. TValue in TMPQ. - | jmp >1 - | - |->vmeta_tgetv: - | movzx RC, PC_RC // Reload TValue *k from RC. - | lea RC, [BASE+RC*8] - |1: - | movzx RB, PC_RB // Reload TValue *t from RB. - | lea RB, [BASE+RB*8] - |2: - |.if X64 - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE // Caveat: CARG2d/CARG3d may be BASE. - | mov CARG2d, RB - | mov CARG3, RCa // May be 64 bit ptr to stack. - | mov L:RB, L:CARG1d - |.else - | mov ARG2, RB - | mov L:RB, SAVE_L - | mov ARG3, RC - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_tget // (lua_State *L, TValue *o, TValue *k) - | // TValue * (finished) or NULL (metamethod) returned in eax (RC). - | mov BASE, L:RB->base - | test RC, RC - | jz >3 - |->cont_ra: // BASE = base, RC = result - | movzx RA, PC_RA - |.if X64 - | mov RBa, [RC] - | mov [BASE+RA*8], RBa - |.else - | mov RB, [RC+4] - | mov RC, [RC] - | mov [BASE+RA*8+4], RB - | mov [BASE+RA*8], RC - |.endif - | ins_next - | - |3: // Call __index metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k - | mov RA, L:RB->top - | mov [RA-12], PC // [cont|PC] - | lea PC, [RA+FRAME_CONT] - | sub PC, BASE - | mov LFUNC:RB, [RA-8] // Guaranteed to be a function here. - | mov NARGS:RD, 2+1 // 2 args for func(t, k). - | jmp ->vm_call_dispatch_f - | - |//----------------------------------------------------------------------- - | - |->vmeta_tsets: - | mov TMP1, RC // RC = GCstr * - | mov TMP2, LJ_TSTR - | lea RCa, TMP1 // Store temp. TValue in TMP1/TMP2. - | cmp PC_OP, BC_GSET - | jne >1 - | lea RA, [DISPATCH+DISPATCH_GL(tmptv)] // Store fn->l.env in g->tmptv. - | mov [RA], TAB:RB // RB = GCtab * - | mov dword [RA+4], LJ_TTAB - | mov RB, RA - | jmp >2 - | - |->vmeta_tsetb: - | movzx RC, PC_RC - |.if DUALNUM - | mov TMP2, LJ_TISNUM - | mov TMP1, RC - |.elif SSE - | cvtsi2sd xmm0, RC - | movsd TMPQ, xmm0 - |.else - | mov ARG4, RC - | fild ARG4 - | fstp TMPQ - |.endif - | lea RCa, TMPQ // Store temp. TValue in TMPQ. - | jmp >1 - | - |->vmeta_tsetv: - | movzx RC, PC_RC // Reload TValue *k from RC. - | lea RC, [BASE+RC*8] - |1: - | movzx RB, PC_RB // Reload TValue *t from RB. - | lea RB, [BASE+RB*8] - |2: - |.if X64 - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE // Caveat: CARG2d/CARG3d may be BASE. - | mov CARG2d, RB - | mov CARG3, RCa // May be 64 bit ptr to stack. - | mov L:RB, L:CARG1d - |.else - | mov ARG2, RB - | mov L:RB, SAVE_L - | mov ARG3, RC - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_tset // (lua_State *L, TValue *o, TValue *k) - | // TValue * (finished) or NULL (metamethod) returned in eax (RC). - | mov BASE, L:RB->base - | test RC, RC - | jz >3 - | // NOBARRIER: lj_meta_tset ensures the table is not black. - | movzx RA, PC_RA - |.if X64 - | mov RBa, [BASE+RA*8] - | mov [RC], RBa - |.else - | mov RB, [BASE+RA*8+4] - | mov RA, [BASE+RA*8] - | mov [RC+4], RB - | mov [RC], RA - |.endif - |->cont_nop: // BASE = base, (RC = result) - | ins_next - | - |3: // Call __newindex metamethod. - | // BASE = base, L->top = new base, stack = cont/func/t/k/(v) - | mov RA, L:RB->top - | mov [RA-12], PC // [cont|PC] - | movzx RC, PC_RA - | // Copy value to third argument. - |.if X64 - | mov RBa, [BASE+RC*8] - | mov [RA+16], RBa - |.else - | mov RB, [BASE+RC*8+4] - | mov RC, [BASE+RC*8] - | mov [RA+20], RB - | mov [RA+16], RC - |.endif - | lea PC, [RA+FRAME_CONT] - | sub PC, BASE - | mov LFUNC:RB, [RA-8] // Guaranteed to be a function here. - | mov NARGS:RD, 3+1 // 3 args for func(t, k, v). - | jmp ->vm_call_dispatch_f - | - |//-- Comparison metamethods --------------------------------------------- - | - |->vmeta_comp: - |.if X64 - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG2d/CARG3d == BASE. - |.if X64WIN - | lea CARG3d, [BASE+RD*8] - | lea CARG2d, [BASE+RA*8] - |.else - | lea CARG2d, [BASE+RA*8] - | lea CARG3d, [BASE+RD*8] - |.endif - | mov CARG1d, L:RB // Caveat: CARG1d/CARG4d == RA. - | movzx CARG4d, PC_OP - |.else - | movzx RB, PC_OP - | lea RD, [BASE+RD*8] - | lea RA, [BASE+RA*8] - | mov ARG4, RB - | mov L:RB, SAVE_L - | mov ARG3, RD - | mov ARG2, RA - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_comp // (lua_State *L, TValue *o1, *o2, int op) - | // 0/1 or TValue * (metamethod) returned in eax (RC). - |3: - | mov BASE, L:RB->base - | cmp RC, 1 - | ja ->vmeta_binop - |4: - | lea PC, [PC+4] - | jb >6 - |5: - | movzx RD, PC_RD - | branchPC RD - |6: - | ins_next - | - |->cont_condt: // BASE = base, RC = result - | add PC, 4 - | cmp dword [RC+4], LJ_TISTRUECOND // Branch if result is true. - | jb <5 - | jmp <6 - | - |->cont_condf: // BASE = base, RC = result - | cmp dword [RC+4], LJ_TISTRUECOND // Branch if result is false. - | jmp <4 - | - |->vmeta_equal: - | sub PC, 4 - |.if X64WIN - | mov CARG3d, RD - | mov CARG4d, RB - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG2d == BASE. - | mov CARG2d, RA - | mov CARG1d, L:RB // Caveat: CARG1d == RA. - |.elif X64 - | mov CARG2d, RA - | mov CARG4d, RB // Caveat: CARG4d == RA. - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG3d == BASE. - | mov CARG3d, RD - | mov CARG1d, L:RB - |.else - | mov ARG4, RB - | mov L:RB, SAVE_L - | mov ARG3, RD - | mov ARG2, RA - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_equal // (lua_State *L, GCobj *o1, *o2, int ne) - | // 0/1 or TValue * (metamethod) returned in eax (RC). - | jmp <3 - | - |->vmeta_equal_cd: - |.if FFI - | sub PC, 4 - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov FCARG1, L:RB - | mov FCARG2, dword [PC-4] - | mov SAVE_PC, PC - | call extern lj_meta_equal_cd@8 // (lua_State *L, BCIns ins) - | // 0/1 or TValue * (metamethod) returned in eax (RC). - | jmp <3 - |.endif - | - |//-- Arithmetic metamethods --------------------------------------------- - | - |->vmeta_arith_vno: - |.if DUALNUM - | movzx RB, PC_RB - |.endif - |->vmeta_arith_vn: - | lea RC, [KBASE+RC*8] - | jmp >1 - | - |->vmeta_arith_nvo: - |.if DUALNUM - | movzx RC, PC_RC - |.endif - |->vmeta_arith_nv: - | lea RC, [KBASE+RC*8] - | lea RB, [BASE+RB*8] - | xchg RB, RC - | jmp >2 - | - |->vmeta_unm: - | lea RC, [BASE+RD*8] - | mov RB, RC - | jmp >2 - | - |->vmeta_arith_vvo: - |.if DUALNUM - | movzx RB, PC_RB - |.endif - |->vmeta_arith_vv: - | lea RC, [BASE+RC*8] - |1: - | lea RB, [BASE+RB*8] - |2: - | lea RA, [BASE+RA*8] - |.if X64WIN - | mov CARG3d, RB - | mov CARG4d, RC - | movzx RC, PC_OP - | mov ARG5d, RC - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG2d == BASE. - | mov CARG2d, RA - | mov CARG1d, L:RB // Caveat: CARG1d == RA. - |.elif X64 - | movzx CARG5d, PC_OP - | mov CARG2d, RA - | mov CARG4d, RC // Caveat: CARG4d == RA. - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE // Caveat: CARG3d == BASE. - | mov CARG3d, RB - | mov L:RB, L:CARG1d - |.else - | mov ARG3, RB - | mov L:RB, SAVE_L - | mov ARG4, RC - | movzx RC, PC_OP - | mov ARG2, RA - | mov ARG5, RC - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_arith // (lua_State *L, TValue *ra,*rb,*rc, BCReg op) - | // NULL (finished) or TValue * (metamethod) returned in eax (RC). - | mov BASE, L:RB->base - | test RC, RC - | jz ->cont_nop - | - | // Call metamethod for binary op. - |->vmeta_binop: - | // BASE = base, RC = new base, stack = cont/func/o1/o2 - | mov RA, RC - | sub RC, BASE - | mov [RA-12], PC // [cont|PC] - | lea PC, [RC+FRAME_CONT] - | mov NARGS:RD, 2+1 // 2 args for func(o1, o2). - | jmp ->vm_call_dispatch - | - |->vmeta_len: - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | lea FCARG2, [BASE+RD*8] // Caveat: FCARG2 == BASE - | mov L:FCARG1, L:RB - | mov SAVE_PC, PC - | call extern lj_meta_len@8 // (lua_State *L, TValue *o) - | // NULL (retry) or TValue * (metamethod) returned in eax (RC). - | mov BASE, L:RB->base -#if LJ_52 - | test RC, RC - | jne ->vmeta_binop // Binop call for compatibility. - | movzx RD, PC_RD - | mov TAB:FCARG1, [BASE+RD*8] - | jmp ->BC_LEN_Z -#else - | jmp ->vmeta_binop // Binop call for compatibility. -#endif - | - |//-- Call metamethod ---------------------------------------------------- - | - |->vmeta_call_ra: - | lea RA, [BASE+RA*8+8] - |->vmeta_call: // Resolve and call __call metamethod. - | // BASE = old base, RA = new base, RC = nargs+1, PC = return - | mov TMP2, RA // Save RA, RC for us. - | mov TMP1, NARGS:RD - | sub RA, 8 - |.if X64 - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG2d/CARG3d may be BASE. - | mov CARG2d, RA - | lea CARG3d, [RA+NARGS:RD*8] - | mov CARG1d, L:RB // Caveat: CARG1d may be RA. - |.else - | lea RC, [RA+NARGS:RD*8] - | mov L:RB, SAVE_L - | mov ARG2, RA - | mov ARG3, RC - | mov ARG1, L:RB - | mov L:RB->base, BASE // This is the callers base! - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_call // (lua_State *L, TValue *func, TValue *top) - | mov BASE, L:RB->base - | mov RA, TMP2 - | mov NARGS:RD, TMP1 - | mov LFUNC:RB, [RA-8] - | add NARGS:RD, 1 - | // This is fragile. L->base must not move, KBASE must always be defined. - | cmp KBASE, BASE // Continue with CALLT if flag set. - | je ->BC_CALLT_Z - | mov BASE, RA - | ins_call // Otherwise call resolved metamethod. - | - |//-- Argument coercion for 'for' statement ------------------------------ - | - |->vmeta_for: - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov FCARG2, RA // Caveat: FCARG2 == BASE - | mov L:FCARG1, L:RB // Caveat: FCARG1 == RA - | mov SAVE_PC, PC - | call extern lj_meta_for@8 // (lua_State *L, TValue *base) - | mov BASE, L:RB->base - | mov RC, [PC-4] - | movzx RA, RCH - | movzx OP, RCL - | shr RC, 16 - |.if X64 - | jmp aword [DISPATCH+OP*8+GG_DISP2STATIC] // Retry FORI or JFORI. - |.else - | jmp aword [DISPATCH+OP*4+GG_DISP2STATIC] // Retry FORI or JFORI. - |.endif - | - |//----------------------------------------------------------------------- - |//-- Fast functions ----------------------------------------------------- - |//----------------------------------------------------------------------- - | - |.macro .ffunc, name - |->ff_ .. name: - |.endmacro - | - |.macro .ffunc_1, name - |->ff_ .. name: - | cmp NARGS:RD, 1+1; jb ->fff_fallback - |.endmacro - | - |.macro .ffunc_2, name - |->ff_ .. name: - | cmp NARGS:RD, 2+1; jb ->fff_fallback - |.endmacro - | - |.macro .ffunc_n, name - | .ffunc_1 name - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | fld qword [BASE] - |.endmacro - | - |.macro .ffunc_n, name, op - | .ffunc_1 name - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | op - | fld qword [BASE] - |.endmacro - | - |.macro .ffunc_nsse, name, op - | .ffunc_1 name - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | op xmm0, qword [BASE] - |.endmacro - | - |.macro .ffunc_nsse, name - | .ffunc_nsse name, movsd - |.endmacro - | - |.macro .ffunc_nn, name - | .ffunc_2 name - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | cmp dword [BASE+12], LJ_TISNUM; jae ->fff_fallback - | fld qword [BASE] - | fld qword [BASE+8] - |.endmacro - | - |.macro .ffunc_nnsse, name - | .ffunc_2 name - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | cmp dword [BASE+12], LJ_TISNUM; jae ->fff_fallback - | movsd xmm0, qword [BASE] - | movsd xmm1, qword [BASE+8] - |.endmacro - | - |.macro .ffunc_nnr, name - | .ffunc_2 name - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | cmp dword [BASE+12], LJ_TISNUM; jae ->fff_fallback - | fld qword [BASE+8] - | fld qword [BASE] - |.endmacro - | - |// Inlined GC threshold check. Caveat: uses label 1. - |.macro ffgccheck - | mov RB, [DISPATCH+DISPATCH_GL(gc.total)] - | cmp RB, [DISPATCH+DISPATCH_GL(gc.threshold)] - | jb >1 - | call ->fff_gcstep - |1: - |.endmacro - | - |//-- Base library: checks ----------------------------------------------- - | - |.ffunc_1 assert - | mov RB, [BASE+4] - | cmp RB, LJ_TISTRUECOND; jae ->fff_fallback - | mov PC, [BASE-4] - | mov MULTRES, RD - | mov [BASE-4], RB - | mov RB, [BASE] - | mov [BASE-8], RB - | sub RD, 2 - | jz >2 - | mov RA, BASE - |1: - | add RA, 8 - |.if X64 - | mov RBa, [RA] - | mov [RA-8], RBa - |.else - | mov RB, [RA+4] - | mov [RA-4], RB - | mov RB, [RA] - | mov [RA-8], RB - |.endif - | sub RD, 1 - | jnz <1 - |2: - | mov RD, MULTRES - | jmp ->fff_res_ - | - |.ffunc_1 type - | mov RB, [BASE+4] - |.if X64 - | mov RA, RB - | sar RA, 15 - | cmp RA, -2 - | je >3 - |.endif - | mov RC, ~LJ_TNUMX - | not RB - | cmp RC, RB - | cmova RC, RB - |2: - | mov CFUNC:RB, [BASE-8] - | mov STR:RC, [CFUNC:RB+RC*8+((char *)(&((GCfuncC *)0)->upvalue))] - | mov PC, [BASE-4] - | mov dword [BASE-4], LJ_TSTR - | mov [BASE-8], STR:RC - | jmp ->fff_res1 - |.if X64 - |3: - | mov RC, ~LJ_TLIGHTUD - | jmp <2 - |.endif - | - |//-- Base library: getters and setters --------------------------------- - | - |.ffunc_1 getmetatable - | mov RB, [BASE+4] - | mov PC, [BASE-4] - | cmp RB, LJ_TTAB; jne >6 - |1: // Field metatable must be at same offset for GCtab and GCudata! - | mov TAB:RB, [BASE] - | mov TAB:RB, TAB:RB->metatable - |2: - | test TAB:RB, TAB:RB - | mov dword [BASE-4], LJ_TNIL - | jz ->fff_res1 - | mov STR:RC, [DISPATCH+DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable)] - | mov dword [BASE-4], LJ_TTAB // Store metatable as default result. - | mov [BASE-8], TAB:RB - | mov RA, TAB:RB->hmask - | and RA, STR:RC->hash - | imul RA, #NODE - | add NODE:RA, TAB:RB->node - |3: // Rearranged logic, because we expect _not_ to find the key. - | cmp dword NODE:RA->key.it, LJ_TSTR - | jne >4 - | cmp dword NODE:RA->key.gcr, STR:RC - | je >5 - |4: - | mov NODE:RA, NODE:RA->next - | test NODE:RA, NODE:RA - | jnz <3 - | jmp ->fff_res1 // Not found, keep default result. - |5: - | mov RB, [RA+4] - | cmp RB, LJ_TNIL; je ->fff_res1 // Ditto for nil value. - | mov RC, [RA] - | mov [BASE-4], RB // Return value of mt.__metatable. - | mov [BASE-8], RC - | jmp ->fff_res1 - | - |6: - | cmp RB, LJ_TUDATA; je <1 - |.if X64 - | cmp RB, LJ_TNUMX; ja >8 - | cmp RB, LJ_TISNUM; jbe >7 - | mov RB, LJ_TLIGHTUD - | jmp >8 - |7: - |.else - | cmp RB, LJ_TISNUM; ja >8 - |.endif - | mov RB, LJ_TNUMX - |8: - | not RB - | mov TAB:RB, [DISPATCH+RB*4+DISPATCH_GL(gcroot[GCROOT_BASEMT])] - | jmp <2 - | - |.ffunc_2 setmetatable - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback - | // Fast path: no mt for table yet and not clearing the mt. - | mov TAB:RB, [BASE] - | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback - | cmp dword [BASE+12], LJ_TTAB; jne ->fff_fallback - | mov TAB:RC, [BASE+8] - | mov TAB:RB->metatable, TAB:RC - | mov PC, [BASE-4] - | mov dword [BASE-4], LJ_TTAB // Return original table. - | mov [BASE-8], TAB:RB - | test byte TAB:RB->marked, LJ_GC_BLACK // isblack(table) - | jz >1 - | // Possible write barrier. Table is black, but skip iswhite(mt) check. - | barrierback TAB:RB, RC - |1: - | jmp ->fff_res1 - | - |.ffunc_2 rawget - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback - |.if X64WIN - | mov RB, BASE // Save BASE. - | lea CARG3d, [BASE+8] - | mov CARG2d, [BASE] // Caveat: CARG2d == BASE. - | mov CARG1d, SAVE_L - |.elif X64 - | mov RB, BASE // Save BASE. - | mov CARG2d, [BASE] - | lea CARG3d, [BASE+8] // Caveat: CARG3d == BASE. - | mov CARG1d, SAVE_L - |.else - | mov TAB:RD, [BASE] - | mov L:RB, SAVE_L - | mov ARG2, TAB:RD - | mov ARG1, L:RB - | mov RB, BASE // Save BASE. - | add BASE, 8 - | mov ARG3, BASE - |.endif - | call extern lj_tab_get // (lua_State *L, GCtab *t, cTValue *key) - | // cTValue * returned in eax (RD). - | mov BASE, RB // Restore BASE. - | // Copy table slot. - |.if X64 - | mov RBa, [RD] - | mov PC, [BASE-4] - | mov [BASE-8], RBa - |.else - | mov RB, [RD] - | mov RD, [RD+4] - | mov PC, [BASE-4] - | mov [BASE-8], RB - | mov [BASE-4], RD - |.endif - | jmp ->fff_res1 - | - |//-- Base library: conversions ------------------------------------------ - | - |.ffunc tonumber - | // Only handles the number case inline (without a base argument). - | cmp NARGS:RD, 1+1; jne ->fff_fallback // Exactly one argument. - | cmp dword [BASE+4], LJ_TISNUM - |.if DUALNUM - | jne >1 - | mov RB, dword [BASE]; jmp ->fff_resi - |1: - | ja ->fff_fallback - |.else - | jae ->fff_fallback - |.endif - |.if SSE - | movsd xmm0, qword [BASE]; jmp ->fff_resxmm0 - |.else - | fld qword [BASE]; jmp ->fff_resn - |.endif - | - |.ffunc_1 tostring - | // Only handles the string or number case inline. - | mov PC, [BASE-4] - | cmp dword [BASE+4], LJ_TSTR; jne >3 - | // A __tostring method in the string base metatable is ignored. - | mov STR:RD, [BASE] - |2: - | mov dword [BASE-4], LJ_TSTR - | mov [BASE-8], STR:RD - | jmp ->fff_res1 - |3: // Handle numbers inline, unless a number base metatable is present. - | cmp dword [BASE+4], LJ_TISNUM; ja ->fff_fallback - | cmp dword [DISPATCH+DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM])], 0 - | jne ->fff_fallback - | ffgccheck // Caveat: uses label 1. - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Add frame since C call can throw. - | mov SAVE_PC, PC // Redundant (but a defined value). - |.if X64 and not X64WIN - | mov FCARG2, BASE // Otherwise: FCARG2 == BASE - |.endif - | mov L:FCARG1, L:RB - |.if DUALNUM - | call extern lj_str_fromnumber@8 // (lua_State *L, cTValue *o) - |.else - | call extern lj_str_fromnum@8 // (lua_State *L, lua_Number *np) - |.endif - | // GCstr returned in eax (RD). - | mov BASE, L:RB->base - | jmp <2 - | - |//-- Base library: iterators ------------------------------------------- - | - |.ffunc_1 next - | je >2 // Missing 2nd arg? - |1: - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Add frame since C call can throw. - | mov L:RB->top, BASE // Dummy frame length is ok. - | mov PC, [BASE-4] - |.if X64WIN - | lea CARG3d, [BASE+8] - | mov CARG2d, [BASE] // Caveat: CARG2d == BASE. - | mov CARG1d, L:RB - |.elif X64 - | mov CARG2d, [BASE] - | lea CARG3d, [BASE+8] // Caveat: CARG3d == BASE. - | mov CARG1d, L:RB - |.else - | mov TAB:RD, [BASE] - | mov ARG2, TAB:RD - | mov ARG1, L:RB - | add BASE, 8 - | mov ARG3, BASE - |.endif - | mov SAVE_PC, PC // Needed for ITERN fallback. - | call extern lj_tab_next // (lua_State *L, GCtab *t, TValue *key) - | // Flag returned in eax (RD). - | mov BASE, L:RB->base - | test RD, RD; jz >3 // End of traversal? - | // Copy key and value to results. - |.if X64 - | mov RBa, [BASE+8] - | mov RDa, [BASE+16] - | mov [BASE-8], RBa - | mov [BASE], RDa - |.else - | mov RB, [BASE+8] - | mov RD, [BASE+12] - | mov [BASE-8], RB - | mov [BASE-4], RD - | mov RB, [BASE+16] - | mov RD, [BASE+20] - | mov [BASE], RB - | mov [BASE+4], RD - |.endif - |->fff_res2: - | mov RD, 1+2 - | jmp ->fff_res - |2: // Set missing 2nd arg to nil. - | mov dword [BASE+12], LJ_TNIL - | jmp <1 - |3: // End of traversal: return nil. - | mov dword [BASE-4], LJ_TNIL - | jmp ->fff_res1 - | - |.ffunc_1 pairs - | mov TAB:RB, [BASE] - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback -#if LJ_52 - | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback -#endif - | mov CFUNC:RB, [BASE-8] - | mov CFUNC:RD, CFUNC:RB->upvalue[0] - | mov PC, [BASE-4] - | mov dword [BASE-4], LJ_TFUNC - | mov [BASE-8], CFUNC:RD - | mov dword [BASE+12], LJ_TNIL - | mov RD, 1+3 - | jmp ->fff_res - | - |.ffunc_2 ipairs_aux - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback - | cmp dword [BASE+12], LJ_TISNUM - |.if DUALNUM - | jne ->fff_fallback - |.else - | jae ->fff_fallback - |.endif - | mov PC, [BASE-4] - |.if DUALNUM - | mov RD, dword [BASE+8] - | add RD, 1 - | mov dword [BASE-4], LJ_TISNUM - | mov dword [BASE-8], RD - |.elif SSE - | movsd xmm0, qword [BASE+8] - | sseconst_1 xmm1, RBa - | addsd xmm0, xmm1 - | cvtsd2si RD, xmm0 - | movsd qword [BASE-8], xmm0 - |.else - | fld qword [BASE+8] - | fld1 - | faddp st1 - | fist ARG1 - | fstp qword [BASE-8] - | mov RD, ARG1 - |.endif - | mov TAB:RB, [BASE] - | cmp RD, TAB:RB->asize; jae >2 // Not in array part? - | shl RD, 3 - | add RD, TAB:RB->array - |1: - | cmp dword [RD+4], LJ_TNIL; je ->fff_res0 - | // Copy array slot. - |.if X64 - | mov RBa, [RD] - | mov [BASE], RBa - |.else - | mov RB, [RD] - | mov RD, [RD+4] - | mov [BASE], RB - | mov [BASE+4], RD - |.endif - | jmp ->fff_res2 - |2: // Check for empty hash part first. Otherwise call C function. - | cmp dword TAB:RB->hmask, 0; je ->fff_res0 - | mov FCARG1, TAB:RB - | mov RB, BASE // Save BASE. - | mov FCARG2, RD // Caveat: FCARG2 == BASE - | call extern lj_tab_getinth@8 // (GCtab *t, int32_t key) - | // cTValue * or NULL returned in eax (RD). - | mov BASE, RB - | test RD, RD - | jnz <1 - |->fff_res0: - | mov RD, 1+0 - | jmp ->fff_res - | - |.ffunc_1 ipairs - | mov TAB:RB, [BASE] - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback -#if LJ_52 - | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback -#endif - | mov CFUNC:RB, [BASE-8] - | mov CFUNC:RD, CFUNC:RB->upvalue[0] - | mov PC, [BASE-4] - | mov dword [BASE-4], LJ_TFUNC - | mov [BASE-8], CFUNC:RD - |.if DUALNUM - | mov dword [BASE+12], LJ_TISNUM - | mov dword [BASE+8], 0 - |.elif SSE - | xorps xmm0, xmm0 - | movsd qword [BASE+8], xmm0 - |.else - | fldz - | fstp qword [BASE+8] - |.endif - | mov RD, 1+3 - | jmp ->fff_res - | - |//-- Base library: catch errors ---------------------------------------- - | - |.ffunc_1 pcall - | lea RA, [BASE+8] - | sub NARGS:RD, 1 - | mov PC, 8+FRAME_PCALL - |1: - | movzx RB, byte [DISPATCH+DISPATCH_GL(hookmask)] - | shr RB, HOOK_ACTIVE_SHIFT - | and RB, 1 - | add PC, RB // Remember active hook before pcall. - | jmp ->vm_call_dispatch - | - |.ffunc_2 xpcall - | cmp dword [BASE+12], LJ_TFUNC; jne ->fff_fallback - | mov RB, [BASE+4] // Swap function and traceback. - | mov [BASE+12], RB - | mov dword [BASE+4], LJ_TFUNC - | mov LFUNC:RB, [BASE] - | mov PC, [BASE+8] - | mov [BASE+8], LFUNC:RB - | mov [BASE], PC - | lea RA, [BASE+16] - | sub NARGS:RD, 2 - | mov PC, 16+FRAME_PCALL - | jmp <1 - | - |//-- Coroutine library -------------------------------------------------- - | - |.macro coroutine_resume_wrap, resume - |.if resume - |.ffunc_1 coroutine_resume - | mov L:RB, [BASE] - |.else - |.ffunc coroutine_wrap_aux - | mov CFUNC:RB, [BASE-8] - | mov L:RB, CFUNC:RB->upvalue[0].gcr - |.endif - | mov PC, [BASE-4] - | mov SAVE_PC, PC - |.if X64 - | mov TMP1, L:RB - |.else - | mov ARG1, L:RB - |.endif - |.if resume - | cmp dword [BASE+4], LJ_TTHREAD; jne ->fff_fallback - |.endif - | cmp aword L:RB->cframe, 0; jne ->fff_fallback - | cmp byte L:RB->status, LUA_YIELD; ja ->fff_fallback - | mov RA, L:RB->top - | je >1 // Status != LUA_YIELD (i.e. 0)? - | cmp RA, L:RB->base // Check for presence of initial func. - | je ->fff_fallback - |1: - |.if resume - | lea PC, [RA+NARGS:RD*8-16] // Check stack space (-1-thread). - |.else - | lea PC, [RA+NARGS:RD*8-8] // Check stack space (-1). - |.endif - | cmp PC, L:RB->maxstack; ja ->fff_fallback - | mov L:RB->top, PC - | - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - |.if resume - | add BASE, 8 // Keep resumed thread in stack for GC. - |.endif - | mov L:RB->top, BASE - |.if resume - | lea RB, [BASE+NARGS:RD*8-24] // RB = end of source for stack move. - |.else - | lea RB, [BASE+NARGS:RD*8-16] // RB = end of source for stack move. - |.endif - | sub RBa, PCa // Relative to PC. - | - | cmp PC, RA - | je >3 - |2: // Move args to coroutine. - |.if X64 - | mov RCa, [PC+RB] - | mov [PC-8], RCa - |.else - | mov RC, [PC+RB+4] - | mov [PC-4], RC - | mov RC, [PC+RB] - | mov [PC-8], RC - |.endif - | sub PC, 8 - | cmp PC, RA - | jne <2 - |3: - |.if X64 - | mov CARG2d, RA - | mov CARG1d, TMP1 - |.else - | mov ARG2, RA - | xor RA, RA - | mov ARG4, RA - | mov ARG3, RA - |.endif - | call ->vm_resume // (lua_State *L, TValue *base, 0, 0) - | set_vmstate INTERP - | - | mov L:RB, SAVE_L - |.if X64 - | mov L:PC, TMP1 - |.else - | mov L:PC, ARG1 // The callee doesn't modify SAVE_L. - |.endif - | mov BASE, L:RB->base - | cmp eax, LUA_YIELD - | ja >8 - |4: - | mov RA, L:PC->base - | mov KBASE, L:PC->top - | mov L:PC->top, RA // Clear coroutine stack. - | mov PC, KBASE - | sub PC, RA - | je >6 // No results? - | lea RD, [BASE+PC] - | shr PC, 3 - | cmp RD, L:RB->maxstack - | ja >9 // Need to grow stack? - | - | mov RB, BASE - | sub RBa, RAa - |5: // Move results from coroutine. - |.if X64 - | mov RDa, [RA] - | mov [RA+RB], RDa - |.else - | mov RD, [RA] - | mov [RA+RB], RD - | mov RD, [RA+4] - | mov [RA+RB+4], RD - |.endif - | add RA, 8 - | cmp RA, KBASE - | jne <5 - |6: - |.if resume - | lea RD, [PC+2] // nresults+1 = 1 + true + results. - | mov dword [BASE-4], LJ_TTRUE // Prepend true to results. - |.else - | lea RD, [PC+1] // nresults+1 = 1 + results. - |.endif - |7: - | mov PC, SAVE_PC - | mov MULTRES, RD - |.if resume - | mov RAa, -8 - |.else - | xor RA, RA - |.endif - | test PC, FRAME_TYPE - | jz ->BC_RET_Z - | jmp ->vm_return - | - |8: // Coroutine returned with error (at co->top-1). - |.if resume - | mov dword [BASE-4], LJ_TFALSE // Prepend false to results. - | mov RA, L:PC->top - | sub RA, 8 - | mov L:PC->top, RA // Clear error from coroutine stack. - | // Copy error message. - |.if X64 - | mov RDa, [RA] - | mov [BASE], RDa - |.else - | mov RD, [RA] - | mov [BASE], RD - | mov RD, [RA+4] - | mov [BASE+4], RD - |.endif - | mov RD, 1+2 // nresults+1 = 1 + false + error. - | jmp <7 - |.else - | mov FCARG2, L:PC - | mov FCARG1, L:RB - | call extern lj_ffh_coroutine_wrap_err@8 // (lua_State *L, lua_State *co) - | // Error function does not return. - |.endif - | - |9: // Handle stack expansion on return from yield. - |.if X64 - | mov L:RA, TMP1 - |.else - | mov L:RA, ARG1 // The callee doesn't modify SAVE_L. - |.endif - | mov L:RA->top, KBASE // Undo coroutine stack clearing. - | mov FCARG2, PC - | mov FCARG1, L:RB - | call extern lj_state_growstack@8 // (lua_State *L, int n) - |.if X64 - | mov L:PC, TMP1 - |.else - | mov L:PC, ARG1 - |.endif - | mov BASE, L:RB->base - | jmp <4 // Retry the stack move. - |.endmacro - | - | coroutine_resume_wrap 1 // coroutine.resume - | coroutine_resume_wrap 0 // coroutine.wrap - | - |.ffunc coroutine_yield - | mov L:RB, SAVE_L - | test aword L:RB->cframe, CFRAME_RESUME - | jz ->fff_fallback - | mov L:RB->base, BASE - | lea RD, [BASE+NARGS:RD*8-8] - | mov L:RB->top, RD - | xor RD, RD - | mov aword L:RB->cframe, RDa - | mov al, LUA_YIELD - | mov byte L:RB->status, al - | jmp ->vm_leave_unw - | - |//-- Math library ------------------------------------------------------- - | - |.if not DUALNUM - |->fff_resi: // Dummy. - |.endif - | - |.if SSE - |->fff_resn: - | mov PC, [BASE-4] - | fstp qword [BASE-8] - | jmp ->fff_res1 - |.endif - | - | .ffunc_1 math_abs - |.if DUALNUM - | cmp dword [BASE+4], LJ_TISNUM; jne >2 - | mov RB, dword [BASE] - | cmp RB, 0; jns ->fff_resi - | neg RB; js >1 - |->fff_resbit: - |->fff_resi: - | mov PC, [BASE-4] - | mov dword [BASE-4], LJ_TISNUM - | mov dword [BASE-8], RB - | jmp ->fff_res1 - |1: - | mov PC, [BASE-4] - | mov dword [BASE-4], 0x41e00000 // 2^31. - | mov dword [BASE-8], 0 - | jmp ->fff_res1 - |2: - | ja ->fff_fallback - |.else - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - |.endif - | - |.if SSE - | movsd xmm0, qword [BASE] - | sseconst_abs xmm1, RDa - | andps xmm0, xmm1 - |->fff_resxmm0: - | mov PC, [BASE-4] - | movsd qword [BASE-8], xmm0 - | // fallthrough - |.else - | fld qword [BASE] - | fabs - | // fallthrough - |->fff_resxmm0: // Dummy. - |->fff_resn: - | mov PC, [BASE-4] - | fstp qword [BASE-8] - |.endif - | - |->fff_res1: - | mov RD, 1+1 - |->fff_res: - | mov MULTRES, RD - |->fff_res_: - | test PC, FRAME_TYPE - | jnz >7 - |5: - | cmp PC_RB, RDL // More results expected? - | ja >6 - | // Adjust BASE. KBASE is assumed to be set for the calling frame. - | movzx RA, PC_RA - | not RAa // Note: ~RA = -(RA+1) - | lea BASE, [BASE+RA*8] // base = base - (RA+1)*8 - | ins_next - | - |6: // Fill up results with nil. - | mov dword [BASE+RD*8-12], LJ_TNIL - | add RD, 1 - | jmp <5 - | - |7: // Non-standard return case. - | mov RAa, -8 // Results start at BASE+RA = BASE-8. - | jmp ->vm_return - | - |.macro math_round, func - | .ffunc math_ .. func - |.if DUALNUM - | cmp dword [BASE+4], LJ_TISNUM; jne >1 - | mov RB, dword [BASE]; jmp ->fff_resi - |1: - | ja ->fff_fallback - |.else - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - |.endif - |.if SSE - | movsd xmm0, qword [BASE] - | call ->vm_ .. func - | .if DUALNUM - | cvtsd2si RB, xmm0 - | cmp RB, 0x80000000 - | jne ->fff_resi - | cvtsi2sd xmm1, RB - | ucomisd xmm0, xmm1 - | jp ->fff_resxmm0 - | je ->fff_resi - | .endif - | jmp ->fff_resxmm0 - |.else - | fld qword [BASE] - | call ->vm_ .. func - | .if DUALNUM - | fist ARG1 - | mov RB, ARG1 - | cmp RB, 0x80000000; jne >2 - | fdup - | fild ARG1 - | fcomparepp - | jp ->fff_resn - | jne ->fff_resn - |2: - | fpop - | jmp ->fff_resi - | .else - | jmp ->fff_resn - | .endif - |.endif - |.endmacro - | - | math_round floor - | math_round ceil - | - |.if SSE - |.ffunc_nsse math_sqrt, sqrtsd; jmp ->fff_resxmm0 - |.else - |.ffunc_n math_sqrt; fsqrt; jmp ->fff_resn - |.endif - | - |.ffunc math_log - | cmp NARGS:RD, 1+1; jne ->fff_fallback // Exactly one argument. - | cmp dword [BASE+4], LJ_TISNUM; jae ->fff_fallback - | fldln2; fld qword [BASE]; fyl2x; jmp ->fff_resn - | - |.ffunc_n math_log10, fldlg2; fyl2x; jmp ->fff_resn - |.ffunc_n math_exp; call ->vm_exp_x87; jmp ->fff_resn - | - |.ffunc_n math_sin; fsin; jmp ->fff_resn - |.ffunc_n math_cos; fcos; jmp ->fff_resn - |.ffunc_n math_tan; fptan; fpop; jmp ->fff_resn - | - |.ffunc_n math_asin - | fdup; fmul st0; fld1; fsubrp st1; fsqrt; fpatan - | jmp ->fff_resn - |.ffunc_n math_acos - | fdup; fmul st0; fld1; fsubrp st1; fsqrt; fxch; fpatan - | jmp ->fff_resn - |.ffunc_n math_atan; fld1; fpatan; jmp ->fff_resn - | - |.macro math_extern, func - |.if SSE - | .ffunc_nsse math_ .. func - | .if not X64 - | movsd FPARG1, xmm0 - | .endif - |.else - | .ffunc_n math_ .. func - | fstp FPARG1 - |.endif - | mov RB, BASE - | call extern lj_vm_ .. func - | mov BASE, RB - | .if X64 - | jmp ->fff_resxmm0 - | .else - | jmp ->fff_resn - | .endif - |.endmacro - | - | math_extern sinh - | math_extern cosh - | math_extern tanh - | - |->ff_math_deg: - |.if SSE - |.ffunc_nsse math_rad - | mov CFUNC:RB, [BASE-8] - | mulsd xmm0, qword CFUNC:RB->upvalue[0] - | jmp ->fff_resxmm0 - |.else - |.ffunc_n math_rad - | mov CFUNC:RB, [BASE-8] - | fmul qword CFUNC:RB->upvalue[0] - | jmp ->fff_resn - |.endif - | - |.ffunc_nn math_atan2; fpatan; jmp ->fff_resn - |.ffunc_nnr math_ldexp; fscale; fpop1; jmp ->fff_resn - | - |.ffunc_1 math_frexp - | mov RB, [BASE+4] - | cmp RB, LJ_TISNUM; jae ->fff_fallback - | mov PC, [BASE-4] - | mov RC, [BASE] - | mov [BASE-4], RB; mov [BASE-8], RC - | shl RB, 1; cmp RB, 0xffe00000; jae >3 - | or RC, RB; jz >3 - | mov RC, 1022 - | cmp RB, 0x00200000; jb >4 - |1: - | shr RB, 21; sub RB, RC // Extract and unbias exponent. - |.if SSE - | cvtsi2sd xmm0, RB - |.else - | mov TMP1, RB; fild TMP1 - |.endif - | mov RB, [BASE-4] - | and RB, 0x800fffff // Mask off exponent. - | or RB, 0x3fe00000 // Put mantissa in range [0.5,1) or 0. - | mov [BASE-4], RB - |2: - |.if SSE - | movsd qword [BASE], xmm0 - |.else - | fstp qword [BASE] - |.endif - | mov RD, 1+2 - | jmp ->fff_res - |3: // Return +-0, +-Inf, NaN unmodified and an exponent of 0. - |.if SSE - | xorps xmm0, xmm0; jmp <2 - |.else - | fldz; jmp <2 - |.endif - |4: // Handle denormals by multiplying with 2^54 and adjusting the bias. - |.if SSE - | movsd xmm0, qword [BASE] - | sseconst_hi xmm1, RBa, 43500000 // 2^54. - | mulsd xmm0, xmm1 - | movsd qword [BASE-8], xmm0 - |.else - | fld qword [BASE] - | mov TMP1, 0x5a800000; fmul TMP1 // x = x*2^54 - | fstp qword [BASE-8] - |.endif - | mov RB, [BASE-4]; mov RC, 1076; shl RB, 1; jmp <1 - | - |.if SSE - |.ffunc_nsse math_modf - |.else - |.ffunc_n math_modf - |.endif - | mov RB, [BASE+4] - | mov PC, [BASE-4] - | shl RB, 1; cmp RB, 0xffe00000; je >4 // +-Inf? - |.if SSE - | movaps xmm4, xmm0 - | call ->vm_trunc - | subsd xmm4, xmm0 - |1: - | movsd qword [BASE-8], xmm0 - | movsd qword [BASE], xmm4 - |.else - | fdup - | call ->vm_trunc - | fsub st1, st0 - |1: - | fstp qword [BASE-8] - | fstp qword [BASE] - |.endif - | mov RC, [BASE-4]; mov RB, [BASE+4] - | xor RC, RB; js >3 // Need to adjust sign? - |2: - | mov RD, 1+2 - | jmp ->fff_res - |3: - | xor RB, 0x80000000; mov [BASE+4], RB // Flip sign of fraction. - | jmp <2 - |4: - |.if SSE - | xorps xmm4, xmm4; jmp <1 // Return +-Inf and +-0. - |.else - | fldz; fxch; jmp <1 // Return +-Inf and +-0. - |.endif - | - |.ffunc_nnr math_fmod - |1: ; fprem; fnstsw ax; and ax, 0x400; jnz <1 - | fpop1 - | jmp ->fff_resn - | - |.if SSE - |.ffunc_nnsse math_pow; call ->vm_pow; jmp ->fff_resxmm0 - |.else - |.ffunc_nn math_pow; call ->vm_pow; jmp ->fff_resn - |.endif - | - |.macro math_minmax, name, cmovop, fcmovop, sseop - | .ffunc name - | mov RA, 2 - | cmp dword [BASE+4], LJ_TISNUM - |.if DUALNUM - | jne >4 - | mov RB, dword [BASE] - |1: // Handle integers. - | cmp RA, RD; jae ->fff_resi - | cmp dword [BASE+RA*8-4], LJ_TISNUM; jne >3 - | cmp RB, dword [BASE+RA*8-8] - | cmovop RB, dword [BASE+RA*8-8] - | add RA, 1 - | jmp <1 - |3: - | ja ->fff_fallback - | // Convert intermediate result to number and continue below. - |.if SSE - | cvtsi2sd xmm0, RB - |.else - | mov TMP1, RB - | fild TMP1 - |.endif - | jmp >6 - |4: - | ja ->fff_fallback - |.else - | jae ->fff_fallback - |.endif - | - |.if SSE - | movsd xmm0, qword [BASE] - |5: // Handle numbers or integers. - | cmp RA, RD; jae ->fff_resxmm0 - | cmp dword [BASE+RA*8-4], LJ_TISNUM - |.if DUALNUM - | jb >6 - | ja ->fff_fallback - | cvtsi2sd xmm1, dword [BASE+RA*8-8] - | jmp >7 - |.else - | jae ->fff_fallback - |.endif - |6: - | movsd xmm1, qword [BASE+RA*8-8] - |7: - | sseop xmm0, xmm1 - | add RA, 1 - | jmp <5 - |.else - | fld qword [BASE] - |5: // Handle numbers or integers. - | cmp RA, RD; jae ->fff_resn - | cmp dword [BASE+RA*8-4], LJ_TISNUM - |.if DUALNUM - | jb >6 - | ja >9 - | fild dword [BASE+RA*8-8] - | jmp >7 - |.else - | jae >9 - |.endif - |6: - | fld qword [BASE+RA*8-8] - |7: - | fucomi st1; fcmovop st1; fpop1 - | add RA, 1 - | jmp <5 - |.endif - |.endmacro - | - | math_minmax math_min, cmovg, fcmovnbe, minsd - | math_minmax math_max, cmovl, fcmovbe, maxsd - |.if not SSE - |9: - | fpop; jmp ->fff_fallback - |.endif - | - |//-- String library ----------------------------------------------------- - | - |.ffunc_1 string_len - | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback - | mov STR:RB, [BASE] - |.if DUALNUM - | mov RB, dword STR:RB->len; jmp ->fff_resi - |.elif SSE - | cvtsi2sd xmm0, dword STR:RB->len; jmp ->fff_resxmm0 - |.else - | fild dword STR:RB->len; jmp ->fff_resn - |.endif - | - |.ffunc string_byte // Only handle the 1-arg case here. - | cmp NARGS:RD, 1+1; jne ->fff_fallback - | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback - | mov STR:RB, [BASE] - | mov PC, [BASE-4] - | cmp dword STR:RB->len, 1 - | jb ->fff_res0 // Return no results for empty string. - | movzx RB, byte STR:RB[1] - |.if DUALNUM - | jmp ->fff_resi - |.elif SSE - | cvtsi2sd xmm0, RB; jmp ->fff_resxmm0 - |.else - | mov TMP1, RB; fild TMP1; jmp ->fff_resn - |.endif - | - |.ffunc string_char // Only handle the 1-arg case here. - | ffgccheck - | cmp NARGS:RD, 1+1; jne ->fff_fallback // *Exactly* 1 arg. - | cmp dword [BASE+4], LJ_TISNUM - |.if DUALNUM - | jne ->fff_fallback - | mov RB, dword [BASE] - | cmp RB, 255; ja ->fff_fallback - | mov TMP2, RB - |.elif SSE - | jae ->fff_fallback - | cvttsd2si RB, qword [BASE] - | cmp RB, 255; ja ->fff_fallback - | mov TMP2, RB - |.else - | jae ->fff_fallback - | fld qword [BASE] - | fistp TMP2 - | cmp TMP2, 255; ja ->fff_fallback - |.endif - |.if X64 - | mov TMP3, 1 - |.else - | mov ARG3, 1 - |.endif - | lea RDa, TMP2 // Points to stack. Little-endian. - |->fff_newstr: - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - |.if X64 - | mov CARG3d, TMP3 // Zero-extended to size_t. - | mov CARG2, RDa // May be 64 bit ptr to stack. - | mov CARG1d, L:RB - |.else - | mov ARG2, RD - | mov ARG1, L:RB - |.endif - | mov SAVE_PC, PC - | call extern lj_str_new // (lua_State *L, char *str, size_t l) - | // GCstr * returned in eax (RD). - | mov BASE, L:RB->base - | mov PC, [BASE-4] - | mov dword [BASE-4], LJ_TSTR - | mov [BASE-8], STR:RD - | jmp ->fff_res1 - | - |.ffunc string_sub - | ffgccheck - | mov TMP2, -1 - | cmp NARGS:RD, 1+2; jb ->fff_fallback - | jna >1 - | cmp dword [BASE+20], LJ_TISNUM - |.if DUALNUM - | jne ->fff_fallback - | mov RB, dword [BASE+16] - | mov TMP2, RB - |.elif SSE - | jae ->fff_fallback - | cvttsd2si RB, qword [BASE+16] - | mov TMP2, RB - |.else - | jae ->fff_fallback - | fld qword [BASE+16] - | fistp TMP2 - |.endif - |1: - | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback - | cmp dword [BASE+12], LJ_TISNUM - |.if DUALNUM - | jne ->fff_fallback - |.else - | jae ->fff_fallback - |.endif - | mov STR:RB, [BASE] - | mov TMP3, STR:RB - | mov RB, STR:RB->len - |.if DUALNUM - | mov RA, dword [BASE+8] - |.elif SSE - | cvttsd2si RA, qword [BASE+8] - |.else - | fld qword [BASE+8] - | fistp ARG3 - | mov RA, ARG3 - |.endif - | mov RC, TMP2 - | cmp RB, RC // len < end? (unsigned compare) - | jb >5 - |2: - | test RA, RA // start <= 0? - | jle >7 - |3: - | mov STR:RB, TMP3 - | sub RC, RA // start > end? - | jl ->fff_emptystr - | lea RB, [STR:RB+RA+#STR-1] - | add RC, 1 - |4: - |.if X64 - | mov TMP3, RC - |.else - | mov ARG3, RC - |.endif - | mov RD, RB - | jmp ->fff_newstr - | - |5: // Negative end or overflow. - | jl >6 - | lea RC, [RC+RB+1] // end = end+(len+1) - | jmp <2 - |6: // Overflow. - | mov RC, RB // end = len - | jmp <2 - | - |7: // Negative start or underflow. - | je >8 - | add RA, RB // start = start+(len+1) - | add RA, 1 - | jg <3 // start > 0? - |8: // Underflow. - | mov RA, 1 // start = 1 - | jmp <3 - | - |->fff_emptystr: // Range underflow. - | xor RC, RC // Zero length. Any ptr in RB is ok. - | jmp <4 - | - |.ffunc string_rep // Only handle the 1-char case inline. - | ffgccheck - | cmp NARGS:RD, 2+1; jne ->fff_fallback // Exactly 2 arguments. - | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback - | cmp dword [BASE+12], LJ_TISNUM - | mov STR:RB, [BASE] - |.if DUALNUM - | jne ->fff_fallback - | mov RC, dword [BASE+8] - |.elif SSE - | jae ->fff_fallback - | cvttsd2si RC, qword [BASE+8] - |.else - | jae ->fff_fallback - | fld qword [BASE+8] - | fistp TMP2 - | mov RC, TMP2 - |.endif - | test RC, RC - | jle ->fff_emptystr // Count <= 0? (or non-int) - | cmp dword STR:RB->len, 1 - | jb ->fff_emptystr // Zero length string? - | jne ->fff_fallback_2 // Fallback for > 1-char strings. - | cmp [DISPATCH+DISPATCH_GL(tmpbuf.sz)], RC; jb ->fff_fallback_2 - | movzx RA, byte STR:RB[1] - | mov RB, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] - |.if X64 - | mov TMP3, RC - |.else - | mov ARG3, RC - |.endif - |1: // Fill buffer with char. Yes, this is suboptimal code (do you care?). - | mov [RB], RAL - | add RB, 1 - | sub RC, 1 - | jnz <1 - | mov RD, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] - | jmp ->fff_newstr - | - |.ffunc_1 string_reverse - | ffgccheck - | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback - | mov STR:RB, [BASE] - | mov RC, STR:RB->len - | test RC, RC - | jz ->fff_emptystr // Zero length string? - | cmp [DISPATCH+DISPATCH_GL(tmpbuf.sz)], RC; jb ->fff_fallback_1 - | add RB, #STR - | mov TMP2, PC // Need another temp register. - |.if X64 - | mov TMP3, RC - |.else - | mov ARG3, RC - |.endif - | mov PC, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] - |1: - | movzx RA, byte [RB] - | add RB, 1 - | sub RC, 1 - | mov [PC+RC], RAL - | jnz <1 - | mov RD, PC - | mov PC, TMP2 - | jmp ->fff_newstr - | - |.macro ffstring_case, name, lo, hi - | .ffunc_1 name - | ffgccheck - | cmp dword [BASE+4], LJ_TSTR; jne ->fff_fallback - | mov STR:RB, [BASE] - | mov RC, STR:RB->len - | cmp [DISPATCH+DISPATCH_GL(tmpbuf.sz)], RC; jb ->fff_fallback_1 - | add RB, #STR - | mov TMP2, PC // Need another temp register. - |.if X64 - | mov TMP3, RC - |.else - | mov ARG3, RC - |.endif - | mov PC, [DISPATCH+DISPATCH_GL(tmpbuf.buf)] - | jmp >3 - |1: // ASCII case conversion. Yes, this is suboptimal code (do you care?). - | movzx RA, byte [RB+RC] - | cmp RA, lo - | jb >2 - | cmp RA, hi - | ja >2 - | xor RA, 0x20 - |2: - | mov [PC+RC], RAL - |3: - | sub RC, 1 - | jns <1 - | mov RD, PC - | mov PC, TMP2 - | jmp ->fff_newstr - |.endmacro - | - |ffstring_case string_lower, 0x41, 0x5a - |ffstring_case string_upper, 0x61, 0x7a - | - |//-- Table library ------------------------------------------------------ - | - |.ffunc_1 table_getn - | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback - | mov RB, BASE // Save BASE. - | mov TAB:FCARG1, [BASE] - | call extern lj_tab_len@4 // LJ_FASTCALL (GCtab *t) - | // Length of table returned in eax (RD). - | mov BASE, RB // Restore BASE. - |.if DUALNUM - | mov RB, RD; jmp ->fff_resi - |.elif SSE - | cvtsi2sd xmm0, RD; jmp ->fff_resxmm0 - |.else - | mov ARG1, RD; fild ARG1; jmp ->fff_resn - |.endif - | - |//-- Bit library -------------------------------------------------------- - | - |.define TOBIT_BIAS, 0x59c00000 // 2^52 + 2^51 (float, not double!). - | - |.macro .ffunc_bit, name, kind, fdef - | fdef name - |.if kind == 2 - |.if SSE - | sseconst_tobit xmm1, RBa - |.else - | mov TMP1, TOBIT_BIAS - |.endif - |.endif - | cmp dword [BASE+4], LJ_TISNUM - |.if DUALNUM - | jne >1 - | mov RB, dword [BASE] - |.if kind > 0 - | jmp >2 - |.else - | jmp ->fff_resbit - |.endif - |1: - | ja ->fff_fallback - |.else - | jae ->fff_fallback - |.endif - |.if SSE - | movsd xmm0, qword [BASE] - |.if kind < 2 - | sseconst_tobit xmm1, RBa - |.endif - | addsd xmm0, xmm1 - | movd RB, xmm0 - |.else - | fld qword [BASE] - |.if kind < 2 - | mov TMP1, TOBIT_BIAS - |.endif - | fadd TMP1 - | fstp FPARG1 - |.if kind > 0 - | mov RB, ARG1 - |.endif - |.endif - |2: - |.endmacro - | - |.macro .ffunc_bit, name, kind - | .ffunc_bit name, kind, .ffunc_1 - |.endmacro - | - |.ffunc_bit bit_tobit, 0 - |.if DUALNUM or SSE - |.if not SSE - | mov RB, ARG1 - |.endif - | jmp ->fff_resbit - |.else - | fild ARG1 - | jmp ->fff_resn - |.endif - | - |.macro .ffunc_bit_op, name, ins - | .ffunc_bit name, 2 - | mov TMP2, NARGS:RD // Save for fallback. - | lea RD, [BASE+NARGS:RD*8-16] - |1: - | cmp RD, BASE - | jbe ->fff_resbit - | cmp dword [RD+4], LJ_TISNUM - |.if DUALNUM - | jne >2 - | ins RB, dword [RD] - | sub RD, 8 - | jmp <1 - |2: - | ja ->fff_fallback_bit_op - |.else - | jae ->fff_fallback_bit_op - |.endif - |.if SSE - | movsd xmm0, qword [RD] - | addsd xmm0, xmm1 - | movd RA, xmm0 - | ins RB, RA - |.else - | fld qword [RD] - | fadd TMP1 - | fstp FPARG1 - | ins RB, ARG1 - |.endif - | sub RD, 8 - | jmp <1 - |.endmacro - | - |.ffunc_bit_op bit_band, and - |.ffunc_bit_op bit_bor, or - |.ffunc_bit_op bit_bxor, xor - | - |.ffunc_bit bit_bswap, 1 - | bswap RB - | jmp ->fff_resbit - | - |.ffunc_bit bit_bnot, 1 - | not RB - |.if DUALNUM - | jmp ->fff_resbit - |.elif SSE - |->fff_resbit: - | cvtsi2sd xmm0, RB - | jmp ->fff_resxmm0 - |.else - |->fff_resbit: - | mov ARG1, RB - | fild ARG1 - | jmp ->fff_resn - |.endif - | - |->fff_fallback_bit_op: - | mov NARGS:RD, TMP2 // Restore for fallback - | jmp ->fff_fallback - | - |.macro .ffunc_bit_sh, name, ins - |.if DUALNUM - | .ffunc_bit name, 1, .ffunc_2 - | // Note: no inline conversion from number for 2nd argument! - | cmp dword [BASE+12], LJ_TISNUM; jne ->fff_fallback - | mov RA, dword [BASE+8] - |.elif SSE - | .ffunc_nnsse name - | sseconst_tobit xmm2, RBa - | addsd xmm0, xmm2 - | addsd xmm1, xmm2 - | movd RB, xmm0 - | movd RA, xmm1 - |.else - | .ffunc_nn name - | mov TMP1, TOBIT_BIAS - | fadd TMP1 - | fstp FPARG3 - | fadd TMP1 - | fstp FPARG1 - | mov RA, ARG3 - | mov RB, ARG1 - |.endif - | ins RB, cl // Assumes RA is ecx. - | jmp ->fff_resbit - |.endmacro - | - |.ffunc_bit_sh bit_lshift, shl - |.ffunc_bit_sh bit_rshift, shr - |.ffunc_bit_sh bit_arshift, sar - |.ffunc_bit_sh bit_rol, rol - |.ffunc_bit_sh bit_ror, ror - | - |//----------------------------------------------------------------------- - | - |->fff_fallback_2: - | mov NARGS:RD, 1+2 // Other args are ignored, anyway. - | jmp ->fff_fallback - |->fff_fallback_1: - | mov NARGS:RD, 1+1 // Other args are ignored, anyway. - |->fff_fallback: // Call fast function fallback handler. - | // BASE = new base, RD = nargs+1 - | mov L:RB, SAVE_L - | mov PC, [BASE-4] // Fallback may overwrite PC. - | mov SAVE_PC, PC // Redundant (but a defined value). - | mov L:RB->base, BASE - | lea RD, [BASE+NARGS:RD*8-8] - | lea RA, [RD+8*LUA_MINSTACK] // Ensure enough space for handler. - | mov L:RB->top, RD - | mov CFUNC:RD, [BASE-8] - | cmp RA, L:RB->maxstack - | ja >5 // Need to grow stack. - |.if X64 - | mov CARG1d, L:RB - |.else - | mov ARG1, L:RB - |.endif - | call aword CFUNC:RD->f // (lua_State *L) - | mov BASE, L:RB->base - | // Either throws an error, or recovers and returns -1, 0 or nresults+1. - | test RD, RD; jg ->fff_res // Returned nresults+1? - |1: - | mov RA, L:RB->top - | sub RA, BASE - | shr RA, 3 - | test RD, RD - | lea NARGS:RD, [RA+1] - | mov LFUNC:RB, [BASE-8] - | jne ->vm_call_tail // Returned -1? - | ins_callt // Returned 0: retry fast path. - | - |// Reconstruct previous base for vmeta_call during tailcall. - |->vm_call_tail: - | mov RA, BASE - | test PC, FRAME_TYPE - | jnz >3 - | movzx RB, PC_RA - | not RBa // Note: ~RB = -(RB+1) - | lea BASE, [BASE+RB*8] // base = base - (RB+1)*8 - | jmp ->vm_call_dispatch // Resolve again for tailcall. - |3: - | mov RB, PC - | and RB, -8 - | sub BASE, RB - | jmp ->vm_call_dispatch // Resolve again for tailcall. - | - |5: // Grow stack for fallback handler. - | mov FCARG2, LUA_MINSTACK - | mov FCARG1, L:RB - | call extern lj_state_growstack@8 // (lua_State *L, int n) - | mov BASE, L:RB->base - | xor RD, RD // Simulate a return 0. - | jmp <1 // Dumb retry (goes through ff first). - | - |->fff_gcstep: // Call GC step function. - | // BASE = new base, RD = nargs+1 - | pop RBa // Must keep stack at same level. - | mov TMPa, RBa // Save return address - | mov L:RB, SAVE_L - | mov SAVE_PC, PC // Redundant (but a defined value). - | mov L:RB->base, BASE - | lea RD, [BASE+NARGS:RD*8-8] - | mov FCARG1, L:RB - | mov L:RB->top, RD - | call extern lj_gc_step@4 // (lua_State *L) - | mov BASE, L:RB->base - | mov RD, L:RB->top - | sub RD, BASE - | shr RD, 3 - | add NARGS:RD, 1 - | mov RBa, TMPa - | push RBa // Restore return address. - | ret - | - |//----------------------------------------------------------------------- - |//-- Special dispatch targets ------------------------------------------- - |//----------------------------------------------------------------------- - | - |->vm_record: // Dispatch target for recording phase. - |.if JIT - | movzx RD, byte [DISPATCH+DISPATCH_GL(hookmask)] - | test RDL, HOOK_VMEVENT // No recording while in vmevent. - | jnz >5 - | // Decrement the hookcount for consistency, but always do the call. - | test RDL, HOOK_ACTIVE - | jnz >1 - | test RDL, LUA_MASKLINE|LUA_MASKCOUNT - | jz >1 - | dec dword [DISPATCH+DISPATCH_GL(hookcount)] - | jmp >1 - |.endif - | - |->vm_rethook: // Dispatch target for return hooks. - | movzx RD, byte [DISPATCH+DISPATCH_GL(hookmask)] - | test RDL, HOOK_ACTIVE // Hook already active? - | jnz >5 - | jmp >1 - | - |->vm_inshook: // Dispatch target for instr/line hooks. - | movzx RD, byte [DISPATCH+DISPATCH_GL(hookmask)] - | test RDL, HOOK_ACTIVE // Hook already active? - | jnz >5 - | - | test RDL, LUA_MASKLINE|LUA_MASKCOUNT - | jz >5 - | dec dword [DISPATCH+DISPATCH_GL(hookcount)] - | jz >1 - | test RDL, LUA_MASKLINE - | jz >5 - |1: - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov FCARG2, PC // Caveat: FCARG2 == BASE - | mov FCARG1, L:RB - | // SAVE_PC must hold the _previous_ PC. The callee updates it with PC. - | call extern lj_dispatch_ins@8 // (lua_State *L, BCIns *pc) - |3: - | mov BASE, L:RB->base - |4: - | movzx RA, PC_RA - |5: - | movzx OP, PC_OP - | movzx RD, PC_RD - |.if X64 - | jmp aword [DISPATCH+OP*8+GG_DISP2STATIC] // Re-dispatch to static ins. - |.else - | jmp aword [DISPATCH+OP*4+GG_DISP2STATIC] // Re-dispatch to static ins. - |.endif - | - |->cont_hook: // Continue from hook yield. - | add PC, 4 - | mov RA, [RB-24] - | mov MULTRES, RA // Restore MULTRES for *M ins. - | jmp <4 - | - |->vm_hotloop: // Hot loop counter underflow. - |.if JIT - | mov LFUNC:RB, [BASE-8] // Same as curr_topL(L). - | mov RB, LFUNC:RB->pc - | movzx RD, byte [RB+PC2PROTO(framesize)] - | lea RD, [BASE+RD*8] - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov L:RB->top, RD - | mov FCARG2, PC - | lea FCARG1, [DISPATCH+GG_DISP2J] - | mov aword [DISPATCH+DISPATCH_J(L)], L:RBa - | mov SAVE_PC, PC - | call extern lj_trace_hot@8 // (jit_State *J, const BCIns *pc) - | jmp <3 - |.endif - | - |->vm_callhook: // Dispatch target for call hooks. - | mov SAVE_PC, PC - |.if JIT - | jmp >1 - |.endif - | - |->vm_hotcall: // Hot call counter underflow. - |.if JIT - | mov SAVE_PC, PC - | or PC, 1 // Marker for hot call. - |1: - |.endif - | lea RD, [BASE+NARGS:RD*8-8] - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov L:RB->top, RD - | mov FCARG2, PC - | mov FCARG1, L:RB - | call extern lj_dispatch_call@8 // (lua_State *L, const BCIns *pc) - | // ASMFunction returned in eax/rax (RDa). - | mov SAVE_PC, 0 // Invalidate for subsequent line hook. - |.if JIT - | and PC, -2 - |.endif - | mov BASE, L:RB->base - | mov RAa, RDa - | mov RD, L:RB->top - | sub RD, BASE - | mov RBa, RAa - | movzx RA, PC_RA - | shr RD, 3 - | add NARGS:RD, 1 - | jmp RBa - | - |//----------------------------------------------------------------------- - |//-- Trace exit handler ------------------------------------------------- - |//----------------------------------------------------------------------- - | - |// Called from an exit stub with the exit number on the stack. - |// The 16 bit exit number is stored with two (sign-extended) push imm8. - |->vm_exit_handler: - |.if JIT - |.if X64 - | push r13; push r12 - | push r11; push r10; push r9; push r8 - | push rdi; push rsi; push rbp; lea rbp, [rsp+88]; push rbp - | push rbx; push rdx; push rcx; push rax - | movzx RC, byte [rbp-8] // Reconstruct exit number. - | mov RCH, byte [rbp-16] - | mov [rbp-8], r15; mov [rbp-16], r14 - |.else - | push ebp; lea ebp, [esp+12]; push ebp - | push ebx; push edx; push ecx; push eax - | movzx RC, byte [ebp-4] // Reconstruct exit number. - | mov RCH, byte [ebp-8] - | mov [ebp-4], edi; mov [ebp-8], esi - |.endif - | // Caveat: DISPATCH is ebx. - | mov DISPATCH, [ebp] - | mov RA, [DISPATCH+DISPATCH_GL(vmstate)] // Get trace number. - | set_vmstate EXIT - | mov [DISPATCH+DISPATCH_J(exitno)], RC - | mov [DISPATCH+DISPATCH_J(parent)], RA - |.if X64 - |.if X64WIN - | sub rsp, 16*8+4*8 // Room for SSE regs + save area. - |.else - | sub rsp, 16*8 // Room for SSE regs. - |.endif - | add rbp, -128 - | movsd qword [rbp-8], xmm15; movsd qword [rbp-16], xmm14 - | movsd qword [rbp-24], xmm13; movsd qword [rbp-32], xmm12 - | movsd qword [rbp-40], xmm11; movsd qword [rbp-48], xmm10 - | movsd qword [rbp-56], xmm9; movsd qword [rbp-64], xmm8 - | movsd qword [rbp-72], xmm7; movsd qword [rbp-80], xmm6 - | movsd qword [rbp-88], xmm5; movsd qword [rbp-96], xmm4 - | movsd qword [rbp-104], xmm3; movsd qword [rbp-112], xmm2 - | movsd qword [rbp-120], xmm1; movsd qword [rbp-128], xmm0 - |.else - | sub esp, 8*8+16 // Room for SSE regs + args. - | movsd qword [ebp-40], xmm7; movsd qword [ebp-48], xmm6 - | movsd qword [ebp-56], xmm5; movsd qword [ebp-64], xmm4 - | movsd qword [ebp-72], xmm3; movsd qword [ebp-80], xmm2 - | movsd qword [ebp-88], xmm1; movsd qword [ebp-96], xmm0 - |.endif - | // Caveat: RB is ebp. - | mov L:RB, [DISPATCH+DISPATCH_GL(jit_L)] - | mov BASE, [DISPATCH+DISPATCH_GL(jit_base)] - | mov aword [DISPATCH+DISPATCH_J(L)], L:RBa - | mov dword [DISPATCH+DISPATCH_GL(jit_L)], 0 - | mov L:RB->base, BASE - |.if X64WIN - | lea CARG2, [rsp+4*8] - |.elif X64 - | mov CARG2, rsp - |.else - | lea FCARG2, [esp+16] - |.endif - | lea FCARG1, [DISPATCH+GG_DISP2J] - | call extern lj_trace_exit@8 // (jit_State *J, ExitState *ex) - | // MULTRES or negated error code returned in eax (RD). - | mov RAa, L:RB->cframe - | and RAa, CFRAME_RAWMASK - |.if X64WIN - | // Reposition stack later. - |.elif X64 - | mov rsp, RAa // Reposition stack to C frame. - |.else - | mov esp, RAa // Reposition stack to C frame. - |.endif - | mov [RAa+CFRAME_OFS_L], L:RB // Set SAVE_L (on-trace resume/yield). - | mov BASE, L:RB->base - | mov PC, [RAa+CFRAME_OFS_PC] // Get SAVE_PC. - |.if X64 - | jmp >1 - |.endif - |.endif - |->vm_exit_interp: - | // RD = MULTRES or negated error code, BASE, PC and DISPATCH set. - |.if JIT - |.if X64 - | // Restore additional callee-save registers only used in compiled code. - |.if X64WIN - | lea RAa, [rsp+9*16+4*8] - |1: - | movdqa xmm15, [RAa-9*16] - | movdqa xmm14, [RAa-8*16] - | movdqa xmm13, [RAa-7*16] - | movdqa xmm12, [RAa-6*16] - | movdqa xmm11, [RAa-5*16] - | movdqa xmm10, [RAa-4*16] - | movdqa xmm9, [RAa-3*16] - | movdqa xmm8, [RAa-2*16] - | movdqa xmm7, [RAa-1*16] - | mov rsp, RAa // Reposition stack to C frame. - | movdqa xmm6, [RAa] - | mov r15, CSAVE_3 - | mov r14, CSAVE_4 - |.else - | add rsp, 16 // Reposition stack to C frame. - |1: - |.endif - | mov r13, TMPa - | mov r12, TMPQ - |.endif - | test RD, RD; js >3 // Check for error from exit. - | mov MULTRES, RD - | mov LFUNC:KBASE, [BASE-8] - | mov KBASE, LFUNC:KBASE->pc - | mov KBASE, [KBASE+PC2PROTO(k)] - | mov dword [DISPATCH+DISPATCH_GL(jit_L)], 0 - | set_vmstate INTERP - | // Modified copy of ins_next which handles function header dispatch, too. - | mov RC, [PC] - | movzx RA, RCH - | movzx OP, RCL - | add PC, 4 - | shr RC, 16 - | cmp OP, BC_FUNCF // Function header? - | jb >2 - | mov RC, MULTRES // RC/RD holds nres+1. - |2: - |.if X64 - | jmp aword [DISPATCH+OP*8] - |.else - | jmp aword [DISPATCH+OP*4] - |.endif - | - |3: // Rethrow error from the right C frame. - | neg RD - | mov FCARG1, L:RB - | mov FCARG2, RD - | call extern lj_err_throw@8 // (lua_State *L, int errcode) - |.endif - | - |//----------------------------------------------------------------------- - |//-- Math helper functions ---------------------------------------------- - |//----------------------------------------------------------------------- - | - |// FP value rounding. Called by math.floor/math.ceil fast functions - |// and from JIT code. - | - |// x87 variant: Arg/ret on x87 stack. No int/xmm registers modified. - |.macro vm_round_x87, mode1, mode2 - | fnstcw word [esp+4] // Caveat: overwrites ARG1 and ARG2. - | mov [esp+8], eax - | mov ax, mode1 - | or ax, [esp+4] - |.if mode2 ~= 0xffff - | and ax, mode2 - |.endif - | mov [esp+6], ax - | fldcw word [esp+6] - | frndint - | fldcw word [esp+4] - | mov eax, [esp+8] - | ret - |.endmacro - | - |// SSE variant: arg/ret is xmm0. xmm0-xmm3 and RD (eax) modified. - |.macro vm_round_sse, mode - | sseconst_abs xmm2, RDa - | sseconst_2p52 xmm3, RDa - | movaps xmm1, xmm0 - | andpd xmm1, xmm2 // |x| - | ucomisd xmm3, xmm1 // No truncation if 2^52 <= |x|. - | jbe >1 - | andnpd xmm2, xmm0 // Isolate sign bit. - |.if mode == 2 // trunc(x)? - | movaps xmm0, xmm1 - | addsd xmm1, xmm3 // (|x| + 2^52) - 2^52 - | subsd xmm1, xmm3 - | sseconst_1 xmm3, RDa - | cmpsd xmm0, xmm1, 1 // |x| < result? - | andpd xmm0, xmm3 - | subsd xmm1, xmm0 // If yes, subtract -1. - | orpd xmm1, xmm2 // Merge sign bit back in. - |.else - | addsd xmm1, xmm3 // (|x| + 2^52) - 2^52 - | subsd xmm1, xmm3 - | orpd xmm1, xmm2 // Merge sign bit back in. - | .if mode == 1 // ceil(x)? - | sseconst_m1 xmm2, RDa // Must subtract -1 to preserve -0. - | cmpsd xmm0, xmm1, 6 // x > result? - | .else // floor(x)? - | sseconst_1 xmm2, RDa - | cmpsd xmm0, xmm1, 1 // x < result? - | .endif - | andpd xmm0, xmm2 - | subsd xmm1, xmm0 // If yes, subtract +-1. - |.endif - | movaps xmm0, xmm1 - |1: - | ret - |.endmacro - | - |.macro vm_round, name, ssemode, mode1, mode2 - |->name: - |.if not SSE - | vm_round_x87 mode1, mode2 - |.endif - |->name .. _sse: - | vm_round_sse ssemode - |.endmacro - | - | vm_round vm_floor, 0, 0x0400, 0xf7ff - | vm_round vm_ceil, 1, 0x0800, 0xfbff - | vm_round vm_trunc, 2, 0x0c00, 0xffff - | - |// FP modulo x%y. Called by BC_MOD* and vm_arith. - |->vm_mod: - |.if SSE - |// Args in xmm0/xmm1, return value in xmm0. - |// Caveat: xmm0-xmm5 and RC (eax) modified! - | movaps xmm5, xmm0 - | divsd xmm0, xmm1 - | sseconst_abs xmm2, RDa - | sseconst_2p52 xmm3, RDa - | movaps xmm4, xmm0 - | andpd xmm4, xmm2 // |x/y| - | ucomisd xmm3, xmm4 // No truncation if 2^52 <= |x/y|. - | jbe >1 - | andnpd xmm2, xmm0 // Isolate sign bit. - | addsd xmm4, xmm3 // (|x/y| + 2^52) - 2^52 - | subsd xmm4, xmm3 - | orpd xmm4, xmm2 // Merge sign bit back in. - | sseconst_1 xmm2, RDa - | cmpsd xmm0, xmm4, 1 // x/y < result? - | andpd xmm0, xmm2 - | subsd xmm4, xmm0 // If yes, subtract 1.0. - | movaps xmm0, xmm5 - | mulsd xmm1, xmm4 - | subsd xmm0, xmm1 - | ret - |1: - | mulsd xmm1, xmm0 - | movaps xmm0, xmm5 - | subsd xmm0, xmm1 - | ret - |.else - |// Args/ret on x87 stack (y on top). No xmm registers modified. - |// Caveat: needs 3 slots on x87 stack! RC (eax) modified! - | fld st1 - | fdiv st1 - | fnstcw word [esp+4] - | mov ax, 0x0400 - | or ax, [esp+4] - | and ax, 0xf7ff - | mov [esp+6], ax - | fldcw word [esp+6] - | frndint - | fldcw word [esp+4] - | fmulp st1 - | fsubp st1 - | ret - |.endif - | - |// FP log2(x). Called by math.log(x, base). - |->vm_log2: - |.if X64WIN - | movsd qword [rsp+8], xmm0 // Use scratch area. - | fld1 - | fld qword [rsp+8] - | fyl2x - | fstp qword [rsp+8] - | movsd xmm0, qword [rsp+8] - |.elif X64 - | movsd qword [rsp-8], xmm0 // Use red zone. - | fld1 - | fld qword [rsp-8] - | fyl2x - | fstp qword [rsp-8] - | movsd xmm0, qword [rsp-8] - |.else - | fld1 - | fld qword [esp+4] - | fyl2x - |.endif - | ret - | - |// FP exponentiation e^x and 2^x. Called by math.exp fast function and - |// from JIT code. Arg/ret on x87 stack. No int/xmm regs modified. - |// Caveat: needs 3 slots on x87 stack! - |->vm_exp_x87: - | fldl2e; fmulp st1 // e^x ==> 2^(x*log2(e)) - |->vm_exp2_x87: - | .if X64WIN - | .define expscratch, dword [rsp+8] // Use scratch area. - | .elif X64 - | .define expscratch, dword [rsp-8] // Use red zone. - | .else - | .define expscratch, dword [esp+4] // Needs 4 byte scratch area. - | .endif - | fst expscratch // Caveat: overwrites ARG1. - | cmp expscratch, 0x7f800000; je >1 // Special case: e^+Inf = +Inf - | cmp expscratch, 0xff800000; je >2 // Special case: e^-Inf = 0 - |->vm_exp2raw: // Entry point for vm_pow. Without +-Inf check. - | fdup; frndint; fsub st1, st0; fxch // Split into frac/int part. - | f2xm1; fld1; faddp st1; fscale; fpop1 // ==> (2^frac-1 +1) << int - |1: - | ret - |2: - | fpop; fldz; ret - | - |// Generic power function x^y. Called by BC_POW, math.pow fast function, - |// and vm_arith. - |// Args/ret on x87 stack (y on top). RC (eax) modified. - |// Caveat: needs 3 slots on x87 stack! - |->vm_pow: - |.if not SSE - | fist dword [esp+4] // Store/reload int before comparison. - | fild dword [esp+4] // Integral exponent used in vm_powi. - | fucomip st1 - | jnz >8 // Branch for FP exponents. - | jp >9 // Branch for NaN exponent. - | fpop // Pop y and fallthrough to vm_powi. - | - |// FP/int power function x^i. Arg1/ret on x87 stack. - |// Arg2 (int) on C stack. RC (eax) modified. - |// Caveat: needs 2 slots on x87 stack! - | mov eax, [esp+4] - | cmp eax, 1; jle >6 // i<=1? - | // Now 1 < (unsigned)i <= 0x80000000. - |1: // Handle leading zeros. - | test eax, 1; jnz >2 - | fmul st0 - | shr eax, 1 - | jmp <1 - |2: - | shr eax, 1; jz >5 - | fdup - |3: // Handle trailing bits. - | fmul st0 - | shr eax, 1; jz >4 - | jnc <3 - | fmul st1, st0 - | jmp <3 - |4: - | fmulp st1 - |5: - | ret - |6: - | je <5 // x^1 ==> x - | jb >7 - | fld1; fdivrp st1 - | neg eax - | cmp eax, 1; je <5 // x^-1 ==> 1/x - | jmp <1 // x^-i ==> (1/x)^i - |7: - | fpop; fld1 // x^0 ==> 1 - | ret - | - |8: // FP/FP power function x^y. - | fst dword [esp+4] - | fxch - | fst dword [esp+8] - | mov eax, [esp+4]; shl eax, 1 - | cmp eax, 0xff000000; je >2 // x^+-Inf? - | mov eax, [esp+8]; shl eax, 1; je >4 // +-0^y? - | cmp eax, 0xff000000; je >4 // +-Inf^y? - | fyl2x - | jmp ->vm_exp2raw - | - |9: // Handle x^NaN. - | fld1 - | fucomip st2 - | je >1 // 1^NaN ==> 1 - | fxch // x^NaN ==> NaN - |1: - | fpop - | ret - | - |2: // Handle x^+-Inf. - | fabs - | fld1 - | fucomip st1 - | je >3 // +-1^+-Inf ==> 1 - | fpop; fabs; fldz; mov eax, 0; setc al - | ror eax, 1; xor eax, [esp+4]; jns >3 // |x|<>1, x^+-Inf ==> +Inf/0 - | fxch - |3: - | fpop1; fabs - | ret - | - |4: // Handle +-0^y or +-Inf^y. - | cmp dword [esp+4], 0; jge <3 // y >= 0, x^y ==> |x| - | fpop; fpop - | test eax, eax; jz >5 // y < 0, +-0^y ==> +Inf - | fldz // y < 0, +-Inf^y ==> 0 - | ret - |5: - | mov dword [esp+4], 0x7f800000 // Return +Inf. - | fld dword [esp+4] - | ret - |.endif - | - |// Args in xmm0/xmm1. Ret in xmm0. xmm0-xmm2 and RC (eax) modified. - |// Needs 16 byte scratch area for x86. Also called from JIT code. - |->vm_pow_sse: - | cvtsd2si eax, xmm1 - | cvtsi2sd xmm2, eax - | ucomisd xmm1, xmm2 - | jnz >8 // Branch for FP exponents. - | jp >9 // Branch for NaN exponent. - | // Fallthrough to vm_powi_sse. - | - |// Args in xmm0/eax. Ret in xmm0. xmm0-xmm1 and eax modified. - |->vm_powi_sse: - | cmp eax, 1; jle >6 // i<=1? - | // Now 1 < (unsigned)i <= 0x80000000. - |1: // Handle leading zeros. - | test eax, 1; jnz >2 - | mulsd xmm0, xmm0 - | shr eax, 1 - | jmp <1 - |2: - | shr eax, 1; jz >5 - | movaps xmm1, xmm0 - |3: // Handle trailing bits. - | mulsd xmm0, xmm0 - | shr eax, 1; jz >4 - | jnc <3 - | mulsd xmm1, xmm0 - | jmp <3 - |4: - | mulsd xmm0, xmm1 - |5: - | ret - |6: - | je <5 // x^1 ==> x - | jb >7 // x^0 ==> 1 - | neg eax - | call <1 - | sseconst_1 xmm1, RDa - | divsd xmm1, xmm0 - | movaps xmm0, xmm1 - | ret - |7: - | sseconst_1 xmm0, RDa - | ret - | - |8: // FP/FP power function x^y. - |.if X64 - | movd rax, xmm1; shl rax, 1 - | rol rax, 12; cmp rax, 0xffe; je >2 // x^+-Inf? - | movd rax, xmm0; shl rax, 1; je >4 // +-0^y? - | rol rax, 12; cmp rax, 0xffe; je >5 // +-Inf^y? - | .if X64WIN - | movsd qword [rsp+16], xmm1 // Use scratch area. - | movsd qword [rsp+8], xmm0 - | fld qword [rsp+16] - | fld qword [rsp+8] - | .else - | movsd qword [rsp-16], xmm1 // Use red zone. - | movsd qword [rsp-8], xmm0 - | fld qword [rsp-16] - | fld qword [rsp-8] - | .endif - |.else - | movsd qword [esp+12], xmm1 // Needs 16 byte scratch area. - | movsd qword [esp+4], xmm0 - | cmp dword [esp+12], 0; jne >1 - | mov eax, [esp+16]; shl eax, 1 - | cmp eax, 0xffe00000; je >2 // x^+-Inf? - |1: - | cmp dword [esp+4], 0; jne >1 - | mov eax, [esp+8]; shl eax, 1; je >4 // +-0^y? - | cmp eax, 0xffe00000; je >5 // +-Inf^y? - |1: - | fld qword [esp+12] - | fld qword [esp+4] - |.endif - | fyl2x // y*log2(x) - | fdup; frndint; fsub st1, st0; fxch // Split into frac/int part. - | f2xm1; fld1; faddp st1; fscale; fpop1 // ==> (2^frac-1 +1) << int - |.if X64WIN - | fstp qword [rsp+8] // Use scratch area. - | movsd xmm0, qword [rsp+8] - |.elif X64 - | fstp qword [rsp-8] // Use red zone. - | movsd xmm0, qword [rsp-8] - |.else - | fstp qword [esp+4] // Needs 8 byte scratch area. - | movsd xmm0, qword [esp+4] - |.endif - | ret - | - |9: // Handle x^NaN. - | sseconst_1 xmm2, RDa - | ucomisd xmm0, xmm2; je >1 // 1^NaN ==> 1 - | movaps xmm0, xmm1 // x^NaN ==> NaN - |1: - | ret - | - |2: // Handle x^+-Inf. - | sseconst_abs xmm2, RDa - | andpd xmm0, xmm2 // |x| - | sseconst_1 xmm2, RDa - | ucomisd xmm0, xmm2; je <1 // +-1^+-Inf ==> 1 - | movmskpd eax, xmm1 - | xorps xmm0, xmm0 - | mov ah, al; setc al; xor al, ah; jne <1 // |x|<>1, x^+-Inf ==> +Inf/0 - |3: - | sseconst_hi xmm0, RDa, 7ff00000 // +Inf - | ret - | - |4: // Handle +-0^y. - | movmskpd eax, xmm1; test eax, eax; jnz <3 // y < 0, +-0^y ==> +Inf - | xorps xmm0, xmm0 // y >= 0, +-0^y ==> 0 - | ret - | - |5: // Handle +-Inf^y. - | movmskpd eax, xmm1; test eax, eax; jz <3 // y >= 0, +-Inf^y ==> +Inf - | xorps xmm0, xmm0 // y < 0, +-Inf^y ==> 0 - | ret - | - |// Callable from C: double lj_vm_foldfpm(double x, int fpm) - |// Computes fpm(x) for extended math functions. ORDER FPM. - |->vm_foldfpm: - |.if JIT - |.if X64 - | .if X64WIN - | .define fpmop, CARG2d - | .else - | .define fpmop, CARG1d - | .endif - | cmp fpmop, 1; jb ->vm_floor; je ->vm_ceil - | cmp fpmop, 3; jb ->vm_trunc; ja >2 - | sqrtsd xmm0, xmm0; ret - |2: - | .if X64WIN - | movsd qword [rsp+8], xmm0 // Use scratch area. - | fld qword [rsp+8] - | .else - | movsd qword [rsp-8], xmm0 // Use red zone. - | fld qword [rsp-8] - | .endif - | cmp fpmop, 5; ja >2 - | .if X64WIN; pop rax; .endif - | je >1 - | call ->vm_exp_x87 - | .if X64WIN; push rax; .endif - | jmp >7 - |1: - | call ->vm_exp2_x87 - | .if X64WIN; push rax; .endif - | jmp >7 - |2: ; cmp fpmop, 7; je >1; ja >2 - | fldln2; fxch; fyl2x; jmp >7 - |1: ; fld1; fxch; fyl2x; jmp >7 - |2: ; cmp fpmop, 9; je >1; ja >2 - | fldlg2; fxch; fyl2x; jmp >7 - |1: ; fsin; jmp >7 - |2: ; cmp fpmop, 11; je >1; ja >9 - | fcos; jmp >7 - |1: ; fptan; fpop - |7: - | .if X64WIN - | fstp qword [rsp+8] // Use scratch area. - | movsd xmm0, qword [rsp+8] - | .else - | fstp qword [rsp-8] // Use red zone. - | movsd xmm0, qword [rsp-8] - | .endif - | ret - |.else // x86 calling convention. - | .define fpmop, eax - |.if SSE - | mov fpmop, [esp+12] - | movsd xmm0, qword [esp+4] - | cmp fpmop, 1; je >1; ja >2 - | call ->vm_floor; jmp >7 - |1: ; call ->vm_ceil; jmp >7 - |2: ; cmp fpmop, 3; je >1; ja >2 - | call ->vm_trunc; jmp >7 - |1: - | sqrtsd xmm0, xmm0 - |7: - | movsd qword [esp+4], xmm0 // Overwrite callee-owned args. - | fld qword [esp+4] - | ret - |2: ; fld qword [esp+4] - | cmp fpmop, 5; jb ->vm_exp_x87; je ->vm_exp2_x87 - |2: ; cmp fpmop, 7; je >1; ja >2 - | fldln2; fxch; fyl2x; ret - |1: ; fld1; fxch; fyl2x; ret - |2: ; cmp fpmop, 9; je >1; ja >2 - | fldlg2; fxch; fyl2x; ret - |1: ; fsin; ret - |2: ; cmp fpmop, 11; je >1; ja >9 - | fcos; ret - |1: ; fptan; fpop; ret - |.else - | mov fpmop, [esp+12] - | fld qword [esp+4] - | cmp fpmop, 1; jb ->vm_floor; je ->vm_ceil - | cmp fpmop, 3; jb ->vm_trunc; ja >2 - | fsqrt; ret - |2: ; cmp fpmop, 5; jb ->vm_exp_x87; je ->vm_exp2_x87 - | cmp fpmop, 7; je >1; ja >2 - | fldln2; fxch; fyl2x; ret - |1: ; fld1; fxch; fyl2x; ret - |2: ; cmp fpmop, 9; je >1; ja >2 - | fldlg2; fxch; fyl2x; ret - |1: ; fsin; ret - |2: ; cmp fpmop, 11; je >1; ja >9 - | fcos; ret - |1: ; fptan; fpop; ret - |.endif - |.endif - |9: ; int3 // Bad fpm. - |.endif - | - |// Callable from C: double lj_vm_foldarith(double x, double y, int op) - |// Compute x op y for basic arithmetic operators (+ - * / % ^ and unary -) - |// and basic math functions. ORDER ARITH - |->vm_foldarith: - |.if X64 - | - | .if X64WIN - | .define foldop, CARG3d - | .else - | .define foldop, CARG1d - | .endif - | cmp foldop, 1; je >1; ja >2 - | addsd xmm0, xmm1; ret - |1: ; subsd xmm0, xmm1; ret - |2: ; cmp foldop, 3; je >1; ja >2 - | mulsd xmm0, xmm1; ret - |1: ; divsd xmm0, xmm1; ret - |2: ; cmp foldop, 5; jb ->vm_mod; je ->vm_pow - | cmp foldop, 7; je >1; ja >2 - | sseconst_sign xmm1, RDa; xorps xmm0, xmm1; ret - |1: ; sseconst_abs xmm1, RDa; andps xmm0, xmm1; ret - |2: ; cmp foldop, 9; ja >2 - |.if X64WIN - | movsd qword [rsp+8], xmm0 // Use scratch area. - | movsd qword [rsp+16], xmm1 - | fld qword [rsp+8] - | fld qword [rsp+16] - |.else - | movsd qword [rsp-8], xmm0 // Use red zone. - | movsd qword [rsp-16], xmm1 - | fld qword [rsp-8] - | fld qword [rsp-16] - |.endif - | je >1 - | fpatan - |7: - |.if X64WIN - | fstp qword [rsp+8] // Use scratch area. - | movsd xmm0, qword [rsp+8] - |.else - | fstp qword [rsp-8] // Use red zone. - | movsd xmm0, qword [rsp-8] - |.endif - | ret - |1: ; fxch; fscale; fpop1; jmp <7 - |2: ; cmp foldop, 11; je >1; ja >9 - | minsd xmm0, xmm1; ret - |1: ; maxsd xmm0, xmm1; ret - |9: ; int3 // Bad op. - | - |.elif SSE // x86 calling convention with SSE ops. - | - | .define foldop, eax - | mov foldop, [esp+20] - | movsd xmm0, qword [esp+4] - | movsd xmm1, qword [esp+12] - | cmp foldop, 1; je >1; ja >2 - | addsd xmm0, xmm1 - |7: - | movsd qword [esp+4], xmm0 // Overwrite callee-owned args. - | fld qword [esp+4] - | ret - |1: ; subsd xmm0, xmm1; jmp <7 - |2: ; cmp foldop, 3; je >1; ja >2 - | mulsd xmm0, xmm1; jmp <7 - |1: ; divsd xmm0, xmm1; jmp <7 - |2: ; cmp foldop, 5 - | je >1; ja >2 - | call ->vm_mod; jmp <7 - |1: ; pop edx; call ->vm_pow; push edx; jmp <7 // Writes to scratch area. - |2: ; cmp foldop, 7; je >1; ja >2 - | sseconst_sign xmm1, RDa; xorps xmm0, xmm1; jmp <7 - |1: ; sseconst_abs xmm1, RDa; andps xmm0, xmm1; jmp <7 - |2: ; cmp foldop, 9; ja >2 - | fld qword [esp+4] // Reload from stack - | fld qword [esp+12] - | je >1 - | fpatan; ret - |1: ; fxch; fscale; fpop1; ret - |2: ; cmp foldop, 11; je >1; ja >9 - | minsd xmm0, xmm1; jmp <7 - |1: ; maxsd xmm0, xmm1; jmp <7 - |9: ; int3 // Bad op. - | - |.else // x86 calling convention with x87 ops. - | - | mov eax, [esp+20] - | fld qword [esp+4] - | fld qword [esp+12] - | cmp eax, 1; je >1; ja >2 - | faddp st1; ret - |1: ; fsubp st1; ret - |2: ; cmp eax, 3; je >1; ja >2 - | fmulp st1; ret - |1: ; fdivp st1; ret - |2: ; cmp eax, 5; jb ->vm_mod; je ->vm_pow - | cmp eax, 7; je >1; ja >2 - | fpop; fchs; ret - |1: ; fpop; fabs; ret - |2: ; cmp eax, 9; je >1; ja >2 - | fpatan; ret - |1: ; fxch; fscale; fpop1; ret - |2: ; cmp eax, 11; je >1; ja >9 - | fucomi st1; fcmovnbe st1; fpop1; ret - |1: ; fucomi st1; fcmovbe st1; fpop1; ret - |9: ; int3 // Bad op. - | - |.endif - | - |//----------------------------------------------------------------------- - |//-- Miscellaneous functions -------------------------------------------- - |//----------------------------------------------------------------------- - | - |// int lj_vm_cpuid(uint32_t f, uint32_t res[4]) - |->vm_cpuid: - |.if X64 - | mov eax, CARG1d - | .if X64WIN; push rsi; mov rsi, CARG2; .endif - | push rbx - | cpuid - | mov [rsi], eax - | mov [rsi+4], ebx - | mov [rsi+8], ecx - | mov [rsi+12], edx - | pop rbx - | .if X64WIN; pop rsi; .endif - | ret - |.else - | pushfd - | pop edx - | mov ecx, edx - | xor edx, 0x00200000 // Toggle ID bit in flags. - | push edx - | popfd - | pushfd - | pop edx - | xor eax, eax // Zero means no features supported. - | cmp ecx, edx - | jz >1 // No ID toggle means no CPUID support. - | mov eax, [esp+4] // Argument 1 is function number. - | push edi - | push ebx - | cpuid - | mov edi, [esp+16] // Argument 2 is result area. - | mov [edi], eax - | mov [edi+4], ebx - | mov [edi+8], ecx - | mov [edi+12], edx - | pop ebx - | pop edi - |1: - | ret - |.endif - | - |//----------------------------------------------------------------------- - |//-- Assertions --------------------------------------------------------- - |//----------------------------------------------------------------------- - | - |->assert_bad_for_arg_type: -#ifdef LUA_USE_ASSERT - | int3 -#endif - | int3 - | - |//----------------------------------------------------------------------- - |//-- FFI helper functions ----------------------------------------------- - |//----------------------------------------------------------------------- - | - |// Handler for callback functions. Callback slot number in ah/al. - |->vm_ffi_callback: - |.if FFI - |.type CTSTATE, CTState, PC - |.if not X64 - | sub esp, 16 // Leave room for SAVE_ERRF etc. - |.endif - | saveregs_ // ebp/rbp already saved. ebp now holds global_State *. - | lea DISPATCH, [ebp+GG_G2DISP] - | mov CTSTATE, GL:ebp->ctype_state - | movzx eax, ax - | mov CTSTATE->cb.slot, eax - |.if X64 - | mov CTSTATE->cb.gpr[0], CARG1 - | mov CTSTATE->cb.gpr[1], CARG2 - | mov CTSTATE->cb.gpr[2], CARG3 - | mov CTSTATE->cb.gpr[3], CARG4 - | movsd qword CTSTATE->cb.fpr[0], xmm0 - | movsd qword CTSTATE->cb.fpr[1], xmm1 - | movsd qword CTSTATE->cb.fpr[2], xmm2 - | movsd qword CTSTATE->cb.fpr[3], xmm3 - |.if X64WIN - | lea rax, [rsp+CFRAME_SIZE+4*8] - |.else - | lea rax, [rsp+CFRAME_SIZE] - | mov CTSTATE->cb.gpr[4], CARG5 - | mov CTSTATE->cb.gpr[5], CARG6 - | movsd qword CTSTATE->cb.fpr[4], xmm4 - | movsd qword CTSTATE->cb.fpr[5], xmm5 - | movsd qword CTSTATE->cb.fpr[6], xmm6 - | movsd qword CTSTATE->cb.fpr[7], xmm7 - |.endif - | mov CTSTATE->cb.stack, rax - | mov CARG2, rsp - |.else - | lea eax, [esp+CFRAME_SIZE+16] - | mov CTSTATE->cb.gpr[0], FCARG1 - | mov CTSTATE->cb.gpr[1], FCARG2 - | mov CTSTATE->cb.stack, eax - | mov FCARG1, [esp+CFRAME_SIZE+12] // Move around misplaced retaddr/ebp. - | mov FCARG2, [esp+CFRAME_SIZE+8] - | mov SAVE_RET, FCARG1 - | mov SAVE_R4, FCARG2 - | mov FCARG2, esp - |.endif - | mov SAVE_PC, CTSTATE // Any value outside of bytecode is ok. - | mov FCARG1, CTSTATE - | call extern lj_ccallback_enter@8 // (CTState *cts, void *cf) - | // lua_State * returned in eax (RD). - | set_vmstate INTERP - | mov BASE, L:RD->base - | mov RD, L:RD->top - | sub RD, BASE - | mov LFUNC:RB, [BASE-8] - | shr RD, 3 - | add RD, 1 - | ins_callt - |.endif - | - |->cont_ffi_callback: // Return from FFI callback. - |.if FFI - | mov L:RA, SAVE_L - | mov CTSTATE, [DISPATCH+DISPATCH_GL(ctype_state)] - | mov aword CTSTATE->L, L:RAa - | mov L:RA->base, BASE - | mov L:RA->top, RB - | mov FCARG1, CTSTATE - | mov FCARG2, RC - | call extern lj_ccallback_leave@8 // (CTState *cts, TValue *o) - |.if X64 - | mov rax, CTSTATE->cb.gpr[0] - | movsd xmm0, qword CTSTATE->cb.fpr[0] - | jmp ->vm_leave_unw - |.else - | mov L:RB, SAVE_L - | mov eax, CTSTATE->cb.gpr[0] - | mov edx, CTSTATE->cb.gpr[1] - | cmp dword CTSTATE->cb.gpr[2], 1 - | jb >7 - | je >6 - | fld qword CTSTATE->cb.fpr[0].d - | jmp >7 - |6: - | fld dword CTSTATE->cb.fpr[0].f - |7: - | mov ecx, L:RB->top - | movzx ecx, word [ecx+6] // Get stack adjustment and copy up. - | mov SAVE_L, ecx // Must be one slot above SAVE_RET - | restoreregs - | pop ecx // Move return addr from SAVE_RET. - | add esp, [esp] // Adjust stack. - | add esp, 16 - | push ecx - | ret - |.endif - |.endif - | - |->vm_ffi_call@4: // Call C function via FFI. - | // Caveat: needs special frame unwinding, see below. - |.if FFI - |.if X64 - | .type CCSTATE, CCallState, rbx - | push rbp; mov rbp, rsp; push rbx; mov CCSTATE, CARG1 - |.else - | .type CCSTATE, CCallState, ebx - | push ebp; mov ebp, esp; push ebx; mov CCSTATE, FCARG1 - |.endif - | - | // Readjust stack. - |.if X64 - | mov eax, CCSTATE->spadj - | sub rsp, rax - |.else - | sub esp, CCSTATE->spadj - |.if WIN - | mov CCSTATE->spadj, esp - |.endif - |.endif - | - | // Copy stack slots. - | movzx ecx, byte CCSTATE->nsp - | sub ecx, 1 - | js >2 - |1: - |.if X64 - | mov rax, [CCSTATE+rcx*8+offsetof(CCallState, stack)] - | mov [rsp+rcx*8+CCALL_SPS_EXTRA*8], rax - |.else - | mov eax, [CCSTATE+ecx*4+offsetof(CCallState, stack)] - | mov [esp+ecx*4], eax - |.endif - | sub ecx, 1 - | jns <1 - |2: - | - |.if X64 - | movzx eax, byte CCSTATE->nfpr - | mov CARG1, CCSTATE->gpr[0] - | mov CARG2, CCSTATE->gpr[1] - | mov CARG3, CCSTATE->gpr[2] - | mov CARG4, CCSTATE->gpr[3] - |.if not X64WIN - | mov CARG5, CCSTATE->gpr[4] - | mov CARG6, CCSTATE->gpr[5] - |.endif - | test eax, eax; jz >5 - | movaps xmm0, CCSTATE->fpr[0] - | movaps xmm1, CCSTATE->fpr[1] - | movaps xmm2, CCSTATE->fpr[2] - | movaps xmm3, CCSTATE->fpr[3] - |.if not X64WIN - | cmp eax, 4; jbe >5 - | movaps xmm4, CCSTATE->fpr[4] - | movaps xmm5, CCSTATE->fpr[5] - | movaps xmm6, CCSTATE->fpr[6] - | movaps xmm7, CCSTATE->fpr[7] - |.endif - |5: - |.else - | mov FCARG1, CCSTATE->gpr[0] - | mov FCARG2, CCSTATE->gpr[1] - |.endif - | - | call aword CCSTATE->func - | - |.if X64 - | mov CCSTATE->gpr[0], rax - | movaps CCSTATE->fpr[0], xmm0 - |.if not X64WIN - | mov CCSTATE->gpr[1], rdx - | movaps CCSTATE->fpr[1], xmm1 - |.endif - |.else - | mov CCSTATE->gpr[0], eax - | mov CCSTATE->gpr[1], edx - | cmp byte CCSTATE->resx87, 1 - | jb >7 - | je >6 - | fstp qword CCSTATE->fpr[0].d[0] - | jmp >7 - |6: - | fstp dword CCSTATE->fpr[0].f[0] - |7: - |.if WIN - | sub CCSTATE->spadj, esp - |.endif - |.endif - | - |.if X64 - | mov rbx, [rbp-8]; leave; ret - |.else - | mov ebx, [ebp-4]; leave; ret - |.endif - |.endif - |// Note: vm_ffi_call must be the last function in this object file! - | - |//----------------------------------------------------------------------- -} - -/* Generate the code for a single instruction. */ -static void build_ins(BuildCtx *ctx, BCOp op, int defop) -{ - int vk = 0; - |// Note: aligning all instructions does not pay off. - |=>defop: - - switch (op) { - - /* -- Comparison ops ---------------------------------------------------- */ - - /* Remember: all ops branch for a true comparison, fall through otherwise. */ - - |.macro jmp_comp, lt, ge, le, gt, target - ||switch (op) { - ||case BC_ISLT: - | lt target - ||break; - ||case BC_ISGE: - | ge target - ||break; - ||case BC_ISLE: - | le target - ||break; - ||case BC_ISGT: - | gt target - ||break; - ||default: break; /* Shut up GCC. */ - ||} - |.endmacro - - case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - | // RA = src1, RD = src2, JMP with RD = target - | ins_AD - |.if DUALNUM - | checkint RA, >7 - | checkint RD, >8 - | mov RB, dword [BASE+RA*8] - | add PC, 4 - | cmp RB, dword [BASE+RD*8] - | jmp_comp jge, jl, jg, jle, >9 - |6: - | movzx RD, PC_RD - | branchPC RD - |9: - | ins_next - | - |7: // RA is not an integer. - | ja ->vmeta_comp - | // RA is a number. - | cmp dword [BASE+RD*8+4], LJ_TISNUM; jb >1; jne ->vmeta_comp - | // RA is a number, RD is an integer. - |.if SSE - | cvtsi2sd xmm0, dword [BASE+RD*8] - | jmp >2 - |.else - | fld qword [BASE+RA*8] - | fild dword [BASE+RD*8] - | jmp >3 - |.endif - | - |8: // RA is an integer, RD is not an integer. - | ja ->vmeta_comp - | // RA is an integer, RD is a number. - |.if SSE - | cvtsi2sd xmm1, dword [BASE+RA*8] - | movsd xmm0, qword [BASE+RD*8] - | add PC, 4 - | ucomisd xmm0, xmm1 - | jmp_comp jbe, ja, jb, jae, <9 - | jmp <6 - |.else - | fild dword [BASE+RA*8] - | jmp >2 - |.endif - |.else - | checknum RA, ->vmeta_comp - | checknum RD, ->vmeta_comp - |.endif - |.if SSE - |1: - | movsd xmm0, qword [BASE+RD*8] - |2: - | add PC, 4 - | ucomisd xmm0, qword [BASE+RA*8] - |3: - |.else - |1: - | fld qword [BASE+RA*8] // Reverse order, i.e like cmp D, A. - |2: - | fld qword [BASE+RD*8] - |3: - | add PC, 4 - | fcomparepp - |.endif - | // Unordered: all of ZF CF PF set, ordered: PF clear. - | // To preserve NaN semantics GE/GT branch on unordered, but LT/LE don't. - |.if DUALNUM - | jmp_comp jbe, ja, jb, jae, <9 - | jmp <6 - |.else - | jmp_comp jbe, ja, jb, jae, >1 - | movzx RD, PC_RD - | branchPC RD - |1: - | ins_next - |.endif - break; - - case BC_ISEQV: case BC_ISNEV: - vk = op == BC_ISEQV; - | ins_AD // RA = src1, RD = src2, JMP with RD = target - | mov RB, [BASE+RD*8+4] - | add PC, 4 - |.if DUALNUM - | cmp RB, LJ_TISNUM; jne >7 - | checkint RA, >8 - | mov RB, dword [BASE+RD*8] - | cmp RB, dword [BASE+RA*8] - if (vk) { - | jne >9 - } else { - | je >9 - } - | movzx RD, PC_RD - | branchPC RD - |9: - | ins_next - | - |7: // RD is not an integer. - | ja >5 - | // RD is a number. - | cmp dword [BASE+RA*8+4], LJ_TISNUM; jb >1; jne >5 - | // RD is a number, RA is an integer. - |.if SSE - | cvtsi2sd xmm0, dword [BASE+RA*8] - |.else - | fild dword [BASE+RA*8] - |.endif - | jmp >2 - | - |8: // RD is an integer, RA is not an integer. - | ja >5 - | // RD is an integer, RA is a number. - |.if SSE - | cvtsi2sd xmm0, dword [BASE+RD*8] - | ucomisd xmm0, qword [BASE+RA*8] - |.else - | fild dword [BASE+RD*8] - | fld qword [BASE+RA*8] - |.endif - | jmp >4 - | - |.else - | cmp RB, LJ_TISNUM; jae >5 - | checknum RA, >5 - |.endif - |.if SSE - |1: - | movsd xmm0, qword [BASE+RA*8] - |2: - | ucomisd xmm0, qword [BASE+RD*8] - |4: - |.else - |1: - | fld qword [BASE+RA*8] - |2: - | fld qword [BASE+RD*8] - |4: - | fcomparepp - |.endif - iseqne_fp: - if (vk) { - | jp >2 // Unordered means not equal. - | jne >2 - } else { - | jp >2 // Unordered means not equal. - | je >1 - } - iseqne_end: - if (vk) { - |1: // EQ: Branch to the target. - | movzx RD, PC_RD - | branchPC RD - |2: // NE: Fallthrough to next instruction. - |.if not FFI - |3: - |.endif - } else { - |.if not FFI - |3: - |.endif - |2: // NE: Branch to the target. - | movzx RD, PC_RD - | branchPC RD - |1: // EQ: Fallthrough to next instruction. - } - if (LJ_DUALNUM && (op == BC_ISEQV || op == BC_ISNEV || - op == BC_ISEQN || op == BC_ISNEN)) { - | jmp <9 - } else { - | ins_next - } - | - if (op == BC_ISEQV || op == BC_ISNEV) { - |5: // Either or both types are not numbers. - |.if FFI - | cmp RB, LJ_TCDATA; je ->vmeta_equal_cd - | checktp RA, LJ_TCDATA; je ->vmeta_equal_cd - |.endif - | checktp RA, RB // Compare types. - | jne <2 // Not the same type? - | cmp RB, LJ_TISPRI - | jae <1 // Same type and primitive type? - | - | // Same types and not a primitive type. Compare GCobj or pvalue. - | mov RA, [BASE+RA*8] - | mov RD, [BASE+RD*8] - | cmp RA, RD - | je <1 // Same GCobjs or pvalues? - | cmp RB, LJ_TISTABUD - | ja <2 // Different objects and not table/ud? - |.if X64 - | cmp RB, LJ_TUDATA // And not 64 bit lightuserdata. - | jb <2 - |.endif - | - | // Different tables or userdatas. Need to check __eq metamethod. - | // Field metatable must be at same offset for GCtab and GCudata! - | mov TAB:RB, TAB:RA->metatable - | test TAB:RB, TAB:RB - | jz <2 // No metatable? - | test byte TAB:RB->nomm, 1<vmeta_equal // Handle __eq metamethod. - } else { - |.if FFI - |3: - | cmp RB, LJ_TCDATA - if (LJ_DUALNUM && vk) { - | jne <9 - } else { - | jne <2 - } - | jmp ->vmeta_equal_cd - |.endif - } - break; - case BC_ISEQS: case BC_ISNES: - vk = op == BC_ISEQS; - | ins_AND // RA = src, RD = str const, JMP with RD = target - | mov RB, [BASE+RA*8+4] - | add PC, 4 - | cmp RB, LJ_TSTR; jne >3 - | mov RA, [BASE+RA*8] - | cmp RA, [KBASE+RD*4] - iseqne_test: - if (vk) { - | jne >2 - } else { - | je >1 - } - goto iseqne_end; - case BC_ISEQN: case BC_ISNEN: - vk = op == BC_ISEQN; - | ins_AD // RA = src, RD = num const, JMP with RD = target - | mov RB, [BASE+RA*8+4] - | add PC, 4 - |.if DUALNUM - | cmp RB, LJ_TISNUM; jne >7 - | cmp dword [KBASE+RD*8+4], LJ_TISNUM; jne >8 - | mov RB, dword [KBASE+RD*8] - | cmp RB, dword [BASE+RA*8] - if (vk) { - | jne >9 - } else { - | je >9 - } - | movzx RD, PC_RD - | branchPC RD - |9: - | ins_next - | - |7: // RA is not an integer. - | ja >3 - | // RA is a number. - | cmp dword [KBASE+RD*8+4], LJ_TISNUM; jb >1 - | // RA is a number, RD is an integer. - |.if SSE - | cvtsi2sd xmm0, dword [KBASE+RD*8] - |.else - | fild dword [KBASE+RD*8] - |.endif - | jmp >2 - | - |8: // RA is an integer, RD is a number. - |.if SSE - | cvtsi2sd xmm0, dword [BASE+RA*8] - | ucomisd xmm0, qword [KBASE+RD*8] - |.else - | fild dword [BASE+RA*8] - | fld qword [KBASE+RD*8] - |.endif - | jmp >4 - |.else - | cmp RB, LJ_TISNUM; jae >3 - |.endif - |.if SSE - |1: - | movsd xmm0, qword [KBASE+RD*8] - |2: - | ucomisd xmm0, qword [BASE+RA*8] - |4: - |.else - |1: - | fld qword [KBASE+RD*8] - |2: - | fld qword [BASE+RA*8] - |4: - | fcomparepp - |.endif - goto iseqne_fp; - case BC_ISEQP: case BC_ISNEP: - vk = op == BC_ISEQP; - | ins_AND // RA = src, RD = primitive type (~), JMP with RD = target - | mov RB, [BASE+RA*8+4] - | add PC, 4 - | cmp RB, RD - if (!LJ_HASFFI) goto iseqne_test; - if (vk) { - | jne >3 - | movzx RD, PC_RD - | branchPC RD - |2: - | ins_next - |3: - | cmp RB, LJ_TCDATA; jne <2 - | jmp ->vmeta_equal_cd - } else { - | je >2 - | cmp RB, LJ_TCDATA; je ->vmeta_equal_cd - | movzx RD, PC_RD - | branchPC RD - |2: - | ins_next - } - break; - - /* -- Unary test and copy ops ------------------------------------------- */ - - case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - | ins_AD // RA = dst or unused, RD = src, JMP with RD = target - | mov RB, [BASE+RD*8+4] - | add PC, 4 - | cmp RB, LJ_TISTRUECOND - if (op == BC_IST || op == BC_ISTC) { - | jae >1 - } else { - | jb >1 - } - if (op == BC_ISTC || op == BC_ISFC) { - | mov [BASE+RA*8+4], RB - | mov RB, [BASE+RD*8] - | mov [BASE+RA*8], RB - } - | movzx RD, PC_RD - | branchPC RD - |1: // Fallthrough to the next instruction. - | ins_next - break; - - /* -- Unary ops --------------------------------------------------------- */ - - case BC_MOV: - | ins_AD // RA = dst, RD = src - |.if X64 - | mov RBa, [BASE+RD*8] - | mov [BASE+RA*8], RBa - |.else - | mov RB, [BASE+RD*8+4] - | mov RD, [BASE+RD*8] - | mov [BASE+RA*8+4], RB - | mov [BASE+RA*8], RD - |.endif - | ins_next_ - break; - case BC_NOT: - | ins_AD // RA = dst, RD = src - | xor RB, RB - | checktp RD, LJ_TISTRUECOND - | adc RB, LJ_TTRUE - | mov [BASE+RA*8+4], RB - | ins_next - break; - case BC_UNM: - | ins_AD // RA = dst, RD = src - |.if DUALNUM - | checkint RD, >5 - | mov RB, [BASE+RD*8] - | neg RB - | jo >4 - | mov dword [BASE+RA*8+4], LJ_TISNUM - | mov dword [BASE+RA*8], RB - |9: - | ins_next - |4: - | mov dword [BASE+RA*8+4], 0x41e00000 // 2^31. - | mov dword [BASE+RA*8], 0 - | jmp <9 - |5: - | ja ->vmeta_unm - |.else - | checknum RD, ->vmeta_unm - |.endif - |.if SSE - | movsd xmm0, qword [BASE+RD*8] - | sseconst_sign xmm1, RDa - | xorps xmm0, xmm1 - | movsd qword [BASE+RA*8], xmm0 - |.else - | fld qword [BASE+RD*8] - | fchs - | fstp qword [BASE+RA*8] - |.endif - |.if DUALNUM - | jmp <9 - |.else - | ins_next - |.endif - break; - case BC_LEN: - | ins_AD // RA = dst, RD = src - | checkstr RD, >2 - | mov STR:RD, [BASE+RD*8] - |.if DUALNUM - | mov RD, dword STR:RD->len - |1: - | mov dword [BASE+RA*8+4], LJ_TISNUM - | mov dword [BASE+RA*8], RD - |.elif SSE - | xorps xmm0, xmm0 - | cvtsi2sd xmm0, dword STR:RD->len - |1: - | movsd qword [BASE+RA*8], xmm0 - |.else - | fild dword STR:RD->len - |1: - | fstp qword [BASE+RA*8] - |.endif - | ins_next - |2: - | checktab RD, ->vmeta_len - | mov TAB:FCARG1, [BASE+RD*8] -#if LJ_52 - | mov TAB:RB, TAB:FCARG1->metatable - | cmp TAB:RB, 0 - | jnz >9 - |3: -#endif - |->BC_LEN_Z: - | mov RB, BASE // Save BASE. - | call extern lj_tab_len@4 // (GCtab *t) - | // Length of table returned in eax (RD). - |.if DUALNUM - | // Nothing to do. - |.elif SSE - | cvtsi2sd xmm0, RD - |.else - | mov ARG1, RD - | fild ARG1 - |.endif - | mov BASE, RB // Restore BASE. - | movzx RA, PC_RA - | jmp <1 -#if LJ_52 - |9: // Check for __len. - | test byte TAB:RB->nomm, 1<vmeta_len // 'no __len' flag NOT set: check. -#endif - break; - - /* -- Binary ops -------------------------------------------------------- */ - - |.macro ins_arithpre, x87ins, sseins, ssereg - | ins_ABC - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - ||switch (vk) { - ||case 0: - | checknum RB, ->vmeta_arith_vn - | .if DUALNUM - | cmp dword [KBASE+RC*8+4], LJ_TISNUM; jae ->vmeta_arith_vn - | .endif - | .if SSE - | movsd xmm0, qword [BASE+RB*8] - | sseins ssereg, qword [KBASE+RC*8] - | .else - | fld qword [BASE+RB*8] - | x87ins qword [KBASE+RC*8] - | .endif - || break; - ||case 1: - | checknum RB, ->vmeta_arith_nv - | .if DUALNUM - | cmp dword [KBASE+RC*8+4], LJ_TISNUM; jae ->vmeta_arith_nv - | .endif - | .if SSE - | movsd xmm0, qword [KBASE+RC*8] - | sseins ssereg, qword [BASE+RB*8] - | .else - | fld qword [KBASE+RC*8] - | x87ins qword [BASE+RB*8] - | .endif - || break; - ||default: - | checknum RB, ->vmeta_arith_vv - | checknum RC, ->vmeta_arith_vv - | .if SSE - | movsd xmm0, qword [BASE+RB*8] - | sseins ssereg, qword [BASE+RC*8] - | .else - | fld qword [BASE+RB*8] - | x87ins qword [BASE+RC*8] - | .endif - || break; - ||} - |.endmacro - | - |.macro ins_arithdn, intins - | ins_ABC - ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - ||switch (vk) { - ||case 0: - | checkint RB, ->vmeta_arith_vn - | cmp dword [KBASE+RC*8+4], LJ_TISNUM; jne ->vmeta_arith_vn - | mov RB, [BASE+RB*8] - | intins RB, [KBASE+RC*8]; jo ->vmeta_arith_vno - || break; - ||case 1: - | checkint RB, ->vmeta_arith_nv - | cmp dword [KBASE+RC*8+4], LJ_TISNUM; jne ->vmeta_arith_nv - | mov RC, [KBASE+RC*8] - | intins RC, [BASE+RB*8]; jo ->vmeta_arith_nvo - || break; - ||default: - | checkint RB, ->vmeta_arith_vv - | checkint RC, ->vmeta_arith_vv - | mov RB, [BASE+RB*8] - | intins RB, [BASE+RC*8]; jo ->vmeta_arith_vvo - || break; - ||} - | mov dword [BASE+RA*8+4], LJ_TISNUM - ||if (vk == 1) { - | mov dword [BASE+RA*8], RC - ||} else { - | mov dword [BASE+RA*8], RB - ||} - | ins_next - |.endmacro - | - |.macro ins_arithpost - |.if SSE - | movsd qword [BASE+RA*8], xmm0 - |.else - | fstp qword [BASE+RA*8] - |.endif - |.endmacro - | - |.macro ins_arith, x87ins, sseins - | ins_arithpre x87ins, sseins, xmm0 - | ins_arithpost - | ins_next - |.endmacro - | - |.macro ins_arith, intins, x87ins, sseins - |.if DUALNUM - | ins_arithdn intins - |.else - | ins_arith, x87ins, sseins - |.endif - |.endmacro - - | // RA = dst, RB = src1 or num const, RC = src2 or num const - case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - | ins_arith add, fadd, addsd - break; - case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - | ins_arith sub, fsub, subsd - break; - case BC_MULVN: case BC_MULNV: case BC_MULVV: - | ins_arith imul, fmul, mulsd - break; - case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - | ins_arith fdiv, divsd - break; - case BC_MODVN: - | ins_arithpre fld, movsd, xmm1 - |->BC_MODVN_Z: - | call ->vm_mod - | ins_arithpost - | ins_next - break; - case BC_MODNV: case BC_MODVV: - | ins_arithpre fld, movsd, xmm1 - | jmp ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. - break; - case BC_POW: - | ins_arithpre fld, movsd, xmm1 - | call ->vm_pow - | ins_arithpost - | ins_next - break; - - case BC_CAT: - | ins_ABC // RA = dst, RB = src_start, RC = src_end - |.if X64 - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE - | lea CARG2d, [BASE+RC*8] - | mov CARG3d, RC - | sub CARG3d, RB - |->BC_CAT_Z: - | mov L:RB, L:CARG1d - |.else - | lea RA, [BASE+RC*8] - | sub RC, RB - | mov ARG2, RA - | mov ARG3, RC - |->BC_CAT_Z: - | mov L:RB, SAVE_L - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_meta_cat // (lua_State *L, TValue *top, int left) - | // NULL (finished) or TValue * (metamethod) returned in eax (RC). - | mov BASE, L:RB->base - | test RC, RC - | jnz ->vmeta_binop - | movzx RB, PC_RB // Copy result to Stk[RA] from Stk[RB]. - | movzx RA, PC_RA - |.if X64 - | mov RCa, [BASE+RB*8] - | mov [BASE+RA*8], RCa - |.else - | mov RC, [BASE+RB*8+4] - | mov RB, [BASE+RB*8] - | mov [BASE+RA*8+4], RC - | mov [BASE+RA*8], RB - |.endif - | ins_next - break; - - /* -- Constant ops ------------------------------------------------------ */ - - case BC_KSTR: - | ins_AND // RA = dst, RD = str const (~) - | mov RD, [KBASE+RD*4] - | mov dword [BASE+RA*8+4], LJ_TSTR - | mov [BASE+RA*8], RD - | ins_next - break; - case BC_KCDATA: - |.if FFI - | ins_AND // RA = dst, RD = cdata const (~) - | mov RD, [KBASE+RD*4] - | mov dword [BASE+RA*8+4], LJ_TCDATA - | mov [BASE+RA*8], RD - | ins_next - |.endif - break; - case BC_KSHORT: - | ins_AD // RA = dst, RD = signed int16 literal - |.if DUALNUM - | movsx RD, RDW - | mov dword [BASE+RA*8+4], LJ_TISNUM - | mov dword [BASE+RA*8], RD - |.elif SSE - | movsx RD, RDW // Sign-extend literal. - | cvtsi2sd xmm0, RD - | movsd qword [BASE+RA*8], xmm0 - |.else - | fild PC_RD // Refetch signed RD from instruction. - | fstp qword [BASE+RA*8] - |.endif - | ins_next - break; - case BC_KNUM: - | ins_AD // RA = dst, RD = num const - |.if SSE - | movsd xmm0, qword [KBASE+RD*8] - | movsd qword [BASE+RA*8], xmm0 - |.else - | fld qword [KBASE+RD*8] - | fstp qword [BASE+RA*8] - |.endif - | ins_next - break; - case BC_KPRI: - | ins_AND // RA = dst, RD = primitive type (~) - | mov [BASE+RA*8+4], RD - | ins_next - break; - case BC_KNIL: - | ins_AD // RA = dst_start, RD = dst_end - | lea RA, [BASE+RA*8+12] - | lea RD, [BASE+RD*8+4] - | mov RB, LJ_TNIL - | mov [RA-8], RB // Sets minimum 2 slots. - |1: - | mov [RA], RB - | add RA, 8 - | cmp RA, RD - | jbe <1 - | ins_next - break; - - /* -- Upvalue and function ops ------------------------------------------ */ - - case BC_UGET: - | ins_AD // RA = dst, RD = upvalue # - | mov LFUNC:RB, [BASE-8] - | mov UPVAL:RB, [LFUNC:RB+RD*4+offsetof(GCfuncL, uvptr)] - | mov RB, UPVAL:RB->v - |.if X64 - | mov RDa, [RB] - | mov [BASE+RA*8], RDa - |.else - | mov RD, [RB+4] - | mov RB, [RB] - | mov [BASE+RA*8+4], RD - | mov [BASE+RA*8], RB - |.endif - | ins_next - break; - case BC_USETV: -#define TV2MARKOFS \ - ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - | ins_AD // RA = upvalue #, RD = src - | mov LFUNC:RB, [BASE-8] - | mov UPVAL:RB, [LFUNC:RB+RA*4+offsetof(GCfuncL, uvptr)] - | cmp byte UPVAL:RB->closed, 0 - | mov RB, UPVAL:RB->v - | mov RA, [BASE+RD*8] - | mov RD, [BASE+RD*8+4] - | mov [RB], RA - | mov [RB+4], RD - | jz >1 - | // Check barrier for closed upvalue. - | test byte [RB+TV2MARKOFS], LJ_GC_BLACK // isblack(uv) - | jnz >2 - |1: - | ins_next - | - |2: // Upvalue is black. Check if new value is collectable and white. - | sub RD, LJ_TISGCV - | cmp RD, LJ_TNUMX - LJ_TISGCV // tvisgcv(v) - | jbe <1 - | test byte GCOBJ:RA->gch.marked, LJ_GC_WHITES // iswhite(v) - | jz <1 - | // Crossed a write barrier. Move the barrier forward. - |.if X64 and not X64WIN - | mov FCARG2, RB - | mov RB, BASE // Save BASE. - |.else - | xchg FCARG2, RB // Save BASE (FCARG2 == BASE). - |.endif - | lea GL:FCARG1, [DISPATCH+GG_DISP2G] - | call extern lj_gc_barrieruv@8 // (global_State *g, TValue *tv) - | mov BASE, RB // Restore BASE. - | jmp <1 - break; -#undef TV2MARKOFS - case BC_USETS: - | ins_AND // RA = upvalue #, RD = str const (~) - | mov LFUNC:RB, [BASE-8] - | mov UPVAL:RB, [LFUNC:RB+RA*4+offsetof(GCfuncL, uvptr)] - | mov GCOBJ:RA, [KBASE+RD*4] - | mov RD, UPVAL:RB->v - | mov [RD], GCOBJ:RA - | mov dword [RD+4], LJ_TSTR - | test byte UPVAL:RB->marked, LJ_GC_BLACK // isblack(uv) - | jnz >2 - |1: - | ins_next - | - |2: // Check if string is white and ensure upvalue is closed. - | test byte GCOBJ:RA->gch.marked, LJ_GC_WHITES // iswhite(str) - | jz <1 - | cmp byte UPVAL:RB->closed, 0 - | jz <1 - | // Crossed a write barrier. Move the barrier forward. - | mov RB, BASE // Save BASE (FCARG2 == BASE). - | mov FCARG2, RD - | lea GL:FCARG1, [DISPATCH+GG_DISP2G] - | call extern lj_gc_barrieruv@8 // (global_State *g, TValue *tv) - | mov BASE, RB // Restore BASE. - | jmp <1 - break; - case BC_USETN: - | ins_AD // RA = upvalue #, RD = num const - | mov LFUNC:RB, [BASE-8] - |.if SSE - | movsd xmm0, qword [KBASE+RD*8] - |.else - | fld qword [KBASE+RD*8] - |.endif - | mov UPVAL:RB, [LFUNC:RB+RA*4+offsetof(GCfuncL, uvptr)] - | mov RA, UPVAL:RB->v - |.if SSE - | movsd qword [RA], xmm0 - |.else - | fstp qword [RA] - |.endif - | ins_next - break; - case BC_USETP: - | ins_AND // RA = upvalue #, RD = primitive type (~) - | mov LFUNC:RB, [BASE-8] - | mov UPVAL:RB, [LFUNC:RB+RA*4+offsetof(GCfuncL, uvptr)] - | mov RA, UPVAL:RB->v - | mov [RA+4], RD - | ins_next - break; - case BC_UCLO: - | ins_AD // RA = level, RD = target - | branchPC RD // Do this first to free RD. - | mov L:RB, SAVE_L - | cmp dword L:RB->openupval, 0 - | je >1 - | mov L:RB->base, BASE - | lea FCARG2, [BASE+RA*8] // Caveat: FCARG2 == BASE - | mov L:FCARG1, L:RB // Caveat: FCARG1 == RA - | call extern lj_func_closeuv@8 // (lua_State *L, TValue *level) - | mov BASE, L:RB->base - |1: - | ins_next - break; - - case BC_FNEW: - | ins_AND // RA = dst, RD = proto const (~) (holding function prototype) - |.if X64 - | mov L:RB, SAVE_L - | mov L:RB->base, BASE // Caveat: CARG2d/CARG3d may be BASE. - | mov CARG3d, [BASE-8] - | mov CARG2d, [KBASE+RD*4] // Fetch GCproto *. - | mov CARG1d, L:RB - |.else - | mov LFUNC:RA, [BASE-8] - | mov PROTO:RD, [KBASE+RD*4] // Fetch GCproto *. - | mov L:RB, SAVE_L - | mov ARG3, LFUNC:RA - | mov ARG2, PROTO:RD - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | // (lua_State *L, GCproto *pt, GCfuncL *parent) - | call extern lj_func_newL_gc - | // GCfuncL * returned in eax (RC). - | mov BASE, L:RB->base - | movzx RA, PC_RA - | mov [BASE+RA*8], LFUNC:RC - | mov dword [BASE+RA*8+4], LJ_TFUNC - | ins_next - break; - - /* -- Table ops --------------------------------------------------------- */ - - case BC_TNEW: - | ins_AD // RA = dst, RD = hbits|asize - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov RA, [DISPATCH+DISPATCH_GL(gc.total)] - | cmp RA, [DISPATCH+DISPATCH_GL(gc.threshold)] - | mov SAVE_PC, PC - | jae >5 - |1: - |.if X64 - | mov CARG3d, RD - | and RD, 0x7ff - | shr CARG3d, 11 - |.else - | mov RA, RD - | and RD, 0x7ff - | shr RA, 11 - | mov ARG3, RA - |.endif - | cmp RD, 0x7ff - | je >3 - |2: - |.if X64 - | mov L:CARG1d, L:RB - | mov CARG2d, RD - |.else - | mov ARG1, L:RB - | mov ARG2, RD - |.endif - | call extern lj_tab_new // (lua_State *L, int32_t asize, uint32_t hbits) - | // Table * returned in eax (RC). - | mov BASE, L:RB->base - | movzx RA, PC_RA - | mov [BASE+RA*8], TAB:RC - | mov dword [BASE+RA*8+4], LJ_TTAB - | ins_next - |3: // Turn 0x7ff into 0x801. - | mov RD, 0x801 - | jmp <2 - |5: - | mov L:FCARG1, L:RB - | call extern lj_gc_step_fixtop@4 // (lua_State *L) - | movzx RD, PC_RD - | jmp <1 - break; - case BC_TDUP: - | ins_AND // RA = dst, RD = table const (~) (holding template table) - | mov L:RB, SAVE_L - | mov RA, [DISPATCH+DISPATCH_GL(gc.total)] - | mov SAVE_PC, PC - | cmp RA, [DISPATCH+DISPATCH_GL(gc.threshold)] - | mov L:RB->base, BASE - | jae >3 - |2: - | mov TAB:FCARG2, [KBASE+RD*4] // Caveat: FCARG2 == BASE - | mov L:FCARG1, L:RB // Caveat: FCARG1 == RA - | call extern lj_tab_dup@8 // (lua_State *L, Table *kt) - | // Table * returned in eax (RC). - | mov BASE, L:RB->base - | movzx RA, PC_RA - | mov [BASE+RA*8], TAB:RC - | mov dword [BASE+RA*8+4], LJ_TTAB - | ins_next - |3: - | mov L:FCARG1, L:RB - | call extern lj_gc_step_fixtop@4 // (lua_State *L) - | movzx RD, PC_RD // Need to reload RD. - | not RDa - | jmp <2 - break; - - case BC_GGET: - | ins_AND // RA = dst, RD = str const (~) - | mov LFUNC:RB, [BASE-8] - | mov TAB:RB, LFUNC:RB->env - | mov STR:RC, [KBASE+RD*4] - | jmp ->BC_TGETS_Z - break; - case BC_GSET: - | ins_AND // RA = src, RD = str const (~) - | mov LFUNC:RB, [BASE-8] - | mov TAB:RB, LFUNC:RB->env - | mov STR:RC, [KBASE+RD*4] - | jmp ->BC_TSETS_Z - break; - - case BC_TGETV: - | ins_ABC // RA = dst, RB = table, RC = key - | checktab RB, ->vmeta_tgetv - | mov TAB:RB, [BASE+RB*8] - | - | // Integer key? - |.if DUALNUM - | checkint RC, >5 - | mov RC, dword [BASE+RC*8] - |.else - | // Convert number to int and back and compare. - | checknum RC, >5 - |.if SSE - | movsd xmm0, qword [BASE+RC*8] - | cvtsd2si RC, xmm0 - | cvtsi2sd xmm1, RC - | ucomisd xmm0, xmm1 - |.else - | fld qword [BASE+RC*8] - | fist ARG1 - | fild ARG1 - | fcomparepp - | mov RC, ARG1 - |.endif - | jne ->vmeta_tgetv // Generic numeric key? Use fallback. - |.endif - | cmp RC, TAB:RB->asize // Takes care of unordered, too. - | jae ->vmeta_tgetv // Not in array part? Use fallback. - | shl RC, 3 - | add RC, TAB:RB->array - | cmp dword [RC+4], LJ_TNIL // Avoid overwriting RB in fastpath. - | je >2 - | // Get array slot. - |.if X64 - | mov RBa, [RC] - | mov [BASE+RA*8], RBa - |.else - | mov RB, [RC] - | mov RC, [RC+4] - | mov [BASE+RA*8], RB - | mov [BASE+RA*8+4], RC - |.endif - |1: - | ins_next - | - |2: // Check for __index if table value is nil. - | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath. - | jz >3 - | mov TAB:RA, TAB:RB->metatable - | test byte TAB:RA->nomm, 1<vmeta_tgetv // 'no __index' flag NOT set: check. - | movzx RA, PC_RA // Restore RA. - |3: - | mov dword [BASE+RA*8+4], LJ_TNIL - | jmp <1 - | - |5: // String key? - | checkstr RC, ->vmeta_tgetv - | mov STR:RC, [BASE+RC*8] - | jmp ->BC_TGETS_Z - break; - case BC_TGETS: - | ins_ABC // RA = dst, RB = table, RC = str const (~) - | not RCa - | mov STR:RC, [KBASE+RC*4] - | checktab RB, ->vmeta_tgets - | mov TAB:RB, [BASE+RB*8] - |->BC_TGETS_Z: // RB = GCtab *, RC = GCstr *, refetches PC_RA. - | mov RA, TAB:RB->hmask - | and RA, STR:RC->hash - | imul RA, #NODE - | add NODE:RA, TAB:RB->node - |1: - | cmp dword NODE:RA->key.it, LJ_TSTR - | jne >4 - | cmp dword NODE:RA->key.gcr, STR:RC - | jne >4 - | // Ok, key found. Assumes: offsetof(Node, val) == 0 - | cmp dword [RA+4], LJ_TNIL // Avoid overwriting RB in fastpath. - | je >5 // Key found, but nil value? - | movzx RC, PC_RA - | // Get node value. - |.if X64 - | mov RBa, [RA] - | mov [BASE+RC*8], RBa - |.else - | mov RB, [RA] - | mov RA, [RA+4] - | mov [BASE+RC*8], RB - | mov [BASE+RC*8+4], RA - |.endif - |2: - | ins_next - | - |3: - | movzx RC, PC_RA - | mov dword [BASE+RC*8+4], LJ_TNIL - | jmp <2 - | - |4: // Follow hash chain. - | mov NODE:RA, NODE:RA->next - | test NODE:RA, NODE:RA - | jnz <1 - | // End of hash chain: key not found, nil result. - | - |5: // Check for __index if table value is nil. - | mov TAB:RA, TAB:RB->metatable - | test TAB:RA, TAB:RA - | jz <3 // No metatable: done. - | test byte TAB:RA->nomm, 1<vmeta_tgets // Caveat: preserve STR:RC. - break; - case BC_TGETB: - | ins_ABC // RA = dst, RB = table, RC = byte literal - | checktab RB, ->vmeta_tgetb - | mov TAB:RB, [BASE+RB*8] - | cmp RC, TAB:RB->asize - | jae ->vmeta_tgetb - | shl RC, 3 - | add RC, TAB:RB->array - | cmp dword [RC+4], LJ_TNIL // Avoid overwriting RB in fastpath. - | je >2 - | // Get array slot. - |.if X64 - | mov RBa, [RC] - | mov [BASE+RA*8], RBa - |.else - | mov RB, [RC] - | mov RC, [RC+4] - | mov [BASE+RA*8], RB - | mov [BASE+RA*8+4], RC - |.endif - |1: - | ins_next - | - |2: // Check for __index if table value is nil. - | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath. - | jz >3 - | mov TAB:RA, TAB:RB->metatable - | test byte TAB:RA->nomm, 1<vmeta_tgetb // 'no __index' flag NOT set: check. - | movzx RA, PC_RA // Restore RA. - |3: - | mov dword [BASE+RA*8+4], LJ_TNIL - | jmp <1 - break; - - case BC_TSETV: - | ins_ABC // RA = src, RB = table, RC = key - | checktab RB, ->vmeta_tsetv - | mov TAB:RB, [BASE+RB*8] - | - | // Integer key? - |.if DUALNUM - | checkint RC, >5 - | mov RC, dword [BASE+RC*8] - |.else - | // Convert number to int and back and compare. - | checknum RC, >5 - |.if SSE - | movsd xmm0, qword [BASE+RC*8] - | cvtsd2si RC, xmm0 - | cvtsi2sd xmm1, RC - | ucomisd xmm0, xmm1 - |.else - | fld qword [BASE+RC*8] - | fist ARG1 - | fild ARG1 - | fcomparepp - | mov RC, ARG1 - |.endif - | jne ->vmeta_tsetv // Generic numeric key? Use fallback. - |.endif - | cmp RC, TAB:RB->asize // Takes care of unordered, too. - | jae ->vmeta_tsetv - | shl RC, 3 - | add RC, TAB:RB->array - | cmp dword [RC+4], LJ_TNIL - | je >3 // Previous value is nil? - |1: - | test byte TAB:RB->marked, LJ_GC_BLACK // isblack(table) - | jnz >7 - |2: // Set array slot. - |.if X64 - | mov RBa, [BASE+RA*8] - | mov [RC], RBa - |.else - | mov RB, [BASE+RA*8+4] - | mov RA, [BASE+RA*8] - | mov [RC+4], RB - | mov [RC], RA - |.endif - | ins_next - | - |3: // Check for __newindex if previous value is nil. - | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath. - | jz <1 - | mov TAB:RA, TAB:RB->metatable - | test byte TAB:RA->nomm, 1<vmeta_tsetv // 'no __newindex' flag NOT set: check. - | movzx RA, PC_RA // Restore RA. - | jmp <1 - | - |5: // String key? - | checkstr RC, ->vmeta_tsetv - | mov STR:RC, [BASE+RC*8] - | jmp ->BC_TSETS_Z - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, RA - | movzx RA, PC_RA // Restore RA. - | jmp <2 - break; - case BC_TSETS: - | ins_ABC // RA = src, RB = table, RC = str const (~) - | not RCa - | mov STR:RC, [KBASE+RC*4] - | checktab RB, ->vmeta_tsets - | mov TAB:RB, [BASE+RB*8] - |->BC_TSETS_Z: // RB = GCtab *, RC = GCstr *, refetches PC_RA. - | mov RA, TAB:RB->hmask - | and RA, STR:RC->hash - | imul RA, #NODE - | mov byte TAB:RB->nomm, 0 // Clear metamethod cache. - | add NODE:RA, TAB:RB->node - |1: - | cmp dword NODE:RA->key.it, LJ_TSTR - | jne >5 - | cmp dword NODE:RA->key.gcr, STR:RC - | jne >5 - | // Ok, key found. Assumes: offsetof(Node, val) == 0 - | cmp dword [RA+4], LJ_TNIL - | je >4 // Previous value is nil? - |2: - | test byte TAB:RB->marked, LJ_GC_BLACK // isblack(table) - | jnz >7 - |3: // Set node value. - | movzx RC, PC_RA - |.if X64 - | mov RBa, [BASE+RC*8] - | mov [RA], RBa - |.else - | mov RB, [BASE+RC*8+4] - | mov RC, [BASE+RC*8] - | mov [RA+4], RB - | mov [RA], RC - |.endif - | ins_next - | - |4: // Check for __newindex if previous value is nil. - | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath. - | jz <2 - | mov TMP1, RA // Save RA. - | mov TAB:RA, TAB:RB->metatable - | test byte TAB:RA->nomm, 1<vmeta_tsets // 'no __newindex' flag NOT set: check. - | mov RA, TMP1 // Restore RA. - | jmp <2 - | - |5: // Follow hash chain. - | mov NODE:RA, NODE:RA->next - | test NODE:RA, NODE:RA - | jnz <1 - | // End of hash chain: key not found, add a new one. - | - | // But check for __newindex first. - | mov TAB:RA, TAB:RB->metatable - | test TAB:RA, TAB:RA - | jz >6 // No metatable: continue. - | test byte TAB:RA->nomm, 1<vmeta_tsets // 'no __newindex' flag NOT set: check. - |6: - | mov TMP1, STR:RC - | mov TMP2, LJ_TSTR - | mov TMP3, TAB:RB // Save TAB:RB for us. - |.if X64 - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE - | lea CARG3, TMP1 - | mov CARG2d, TAB:RB - | mov L:RB, L:CARG1d - |.else - | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. - | mov ARG2, TAB:RB - | mov L:RB, SAVE_L - | mov ARG3, RC - | mov ARG1, L:RB - | mov L:RB->base, BASE - |.endif - | mov SAVE_PC, PC - | call extern lj_tab_newkey // (lua_State *L, GCtab *t, TValue *k) - | // Handles write barrier for the new key. TValue * returned in eax (RC). - | mov BASE, L:RB->base - | mov TAB:RB, TMP3 // Need TAB:RB for barrier. - | mov RA, eax - | jmp <2 // Must check write barrier for value. - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, RC // Destroys STR:RC. - | jmp <3 - break; - case BC_TSETB: - | ins_ABC // RA = src, RB = table, RC = byte literal - | checktab RB, ->vmeta_tsetb - | mov TAB:RB, [BASE+RB*8] - | cmp RC, TAB:RB->asize - | jae ->vmeta_tsetb - | shl RC, 3 - | add RC, TAB:RB->array - | cmp dword [RC+4], LJ_TNIL - | je >3 // Previous value is nil? - |1: - | test byte TAB:RB->marked, LJ_GC_BLACK // isblack(table) - | jnz >7 - |2: // Set array slot. - |.if X64 - | mov RAa, [BASE+RA*8] - | mov [RC], RAa - |.else - | mov RB, [BASE+RA*8+4] - | mov RA, [BASE+RA*8] - | mov [RC+4], RB - | mov [RC], RA - |.endif - | ins_next - | - |3: // Check for __newindex if previous value is nil. - | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath. - | jz <1 - | mov TAB:RA, TAB:RB->metatable - | test byte TAB:RA->nomm, 1<vmeta_tsetb // 'no __newindex' flag NOT set: check. - | movzx RA, PC_RA // Restore RA. - | jmp <1 - | - |7: // Possible table write barrier for the value. Skip valiswhite check. - | barrierback TAB:RB, RA - | movzx RA, PC_RA // Restore RA. - | jmp <2 - break; - - case BC_TSETM: - | ins_AD // RA = base (table at base-1), RD = num const (start index) - | mov TMP1, KBASE // Need one more free register. - | mov KBASE, dword [KBASE+RD*8] // Integer constant is in lo-word. - |1: - | lea RA, [BASE+RA*8] - | mov TAB:RB, [RA-8] // Guaranteed to be a table. - | test byte TAB:RB->marked, LJ_GC_BLACK // isblack(table) - | jnz >7 - |2: - | mov RD, MULTRES - | sub RD, 1 - | jz >4 // Nothing to copy? - | add RD, KBASE // Compute needed size. - | cmp RD, TAB:RB->asize - | ja >5 // Doesn't fit into array part? - | sub RD, KBASE - | shl KBASE, 3 - | add KBASE, TAB:RB->array - |3: // Copy result slots to table. - |.if X64 - | mov RBa, [RA] - | add RA, 8 - | mov [KBASE], RBa - |.else - | mov RB, [RA] - | mov [KBASE], RB - | mov RB, [RA+4] - | add RA, 8 - | mov [KBASE+4], RB - |.endif - | add KBASE, 8 - | sub RD, 1 - | jnz <3 - |4: - | mov KBASE, TMP1 - | ins_next - | - |5: // Need to resize array part. - |.if X64 - | mov L:CARG1d, SAVE_L - | mov L:CARG1d->base, BASE // Caveat: CARG2d/CARG3d may be BASE. - | mov CARG2d, TAB:RB - | mov CARG3d, RD - | mov L:RB, L:CARG1d - |.else - | mov ARG2, TAB:RB - | mov L:RB, SAVE_L - | mov L:RB->base, BASE - | mov ARG3, RD - | mov ARG1, L:RB - |.endif - | mov SAVE_PC, PC - | call extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) - | mov BASE, L:RB->base - | movzx RA, PC_RA // Restore RA. - | jmp <1 // Retry. - | - |7: // Possible table write barrier for any value. Skip valiswhite check. - | barrierback TAB:RB, RD - | jmp <2 - break; - - /* -- Calls and vararg handling ----------------------------------------- */ - - case BC_CALL: case BC_CALLM: - | ins_A_C // RA = base, (RB = nresults+1,) RC = nargs+1 | extra_nargs - if (op == BC_CALLM) { - | add NARGS:RD, MULTRES - } - | cmp dword [BASE+RA*8+4], LJ_TFUNC - | mov LFUNC:RB, [BASE+RA*8] - | jne ->vmeta_call_ra - | lea BASE, [BASE+RA*8+8] - | ins_call - break; - - case BC_CALLMT: - | ins_AD // RA = base, RD = extra_nargs - | add NARGS:RD, MULTRES - | // Fall through. Assumes BC_CALLT follows and ins_AD is a no-op. - break; - case BC_CALLT: - | ins_AD // RA = base, RD = nargs+1 - | lea RA, [BASE+RA*8+8] - | mov KBASE, BASE // Use KBASE for move + vmeta_call hint. - | mov LFUNC:RB, [RA-8] - | cmp dword [RA-4], LJ_TFUNC - | jne ->vmeta_call - |->BC_CALLT_Z: - | mov PC, [BASE-4] - | test PC, FRAME_TYPE - | jnz >7 - |1: - | mov [BASE-8], LFUNC:RB // Copy function down, reloaded below. - | mov MULTRES, NARGS:RD - | sub NARGS:RD, 1 - | jz >3 - |2: // Move args down. - |.if X64 - | mov RBa, [RA] - | add RA, 8 - | mov [KBASE], RBa - |.else - | mov RB, [RA] - | mov [KBASE], RB - | mov RB, [RA+4] - | add RA, 8 - | mov [KBASE+4], RB - |.endif - | add KBASE, 8 - | sub NARGS:RD, 1 - | jnz <2 - | - | mov LFUNC:RB, [BASE-8] - |3: - | mov NARGS:RD, MULTRES - | cmp byte LFUNC:RB->ffid, 1 // (> FF_C) Calling a fast function? - | ja >5 - |4: - | ins_callt - | - |5: // Tailcall to a fast function. - | test PC, FRAME_TYPE // Lua frame below? - | jnz <4 - | movzx RA, PC_RA - | not RAa - | mov LFUNC:KBASE, [BASE+RA*8-8] // Need to prepare KBASE. - | mov KBASE, LFUNC:KBASE->pc - | mov KBASE, [KBASE+PC2PROTO(k)] - | jmp <4 - | - |7: // Tailcall from a vararg function. - | sub PC, FRAME_VARG - | test PC, FRAME_TYPEP - | jnz >8 // Vararg frame below? - | sub BASE, PC // Need to relocate BASE/KBASE down. - | mov KBASE, BASE - | mov PC, [BASE-4] - | jmp <1 - |8: - | add PC, FRAME_VARG - | jmp <1 - break; - - case BC_ITERC: - | ins_A // RA = base, (RB = nresults+1,) RC = nargs+1 (2+1) - | lea RA, [BASE+RA*8+8] // fb = base+1 - |.if X64 - | mov RBa, [RA-24] // Copy state. fb[0] = fb[-3]. - | mov RCa, [RA-16] // Copy control var. fb[1] = fb[-2]. - | mov [RA], RBa - | mov [RA+8], RCa - |.else - | mov RB, [RA-24] // Copy state. fb[0] = fb[-3]. - | mov RC, [RA-20] - | mov [RA], RB - | mov [RA+4], RC - | mov RB, [RA-16] // Copy control var. fb[1] = fb[-2]. - | mov RC, [RA-12] - | mov [RA+8], RB - | mov [RA+12], RC - |.endif - | mov LFUNC:RB, [RA-32] // Copy callable. fb[-1] = fb[-4] - | mov RC, [RA-28] - | mov [RA-8], LFUNC:RB - | mov [RA-4], RC - | cmp RC, LJ_TFUNC // Handle like a regular 2-arg call. - | mov NARGS:RD, 2+1 - | jne ->vmeta_call - | mov BASE, RA - | ins_call - break; - - case BC_ITERN: - | ins_A // RA = base, (RB = nresults+1, RC = nargs+1 (2+1)) - |.if JIT - | // NYI: add hotloop, record BC_ITERN. - |.endif - | mov TMP1, KBASE // Need two more free registers. - | mov TMP2, DISPATCH - | mov TAB:RB, [BASE+RA*8-16] - | mov RC, [BASE+RA*8-8] // Get index from control var. - | mov DISPATCH, TAB:RB->asize - | add PC, 4 - | mov KBASE, TAB:RB->array - |1: // Traverse array part. - | cmp RC, DISPATCH; jae >5 // Index points after array part? - | cmp dword [KBASE+RC*8+4], LJ_TNIL; je >4 - |.if DUALNUM - | mov dword [BASE+RA*8+4], LJ_TISNUM - | mov dword [BASE+RA*8], RC - |.elif SSE - | cvtsi2sd xmm0, RC - |.else - | fild dword [BASE+RA*8-8] - |.endif - | // Copy array slot to returned value. - |.if X64 - | mov RBa, [KBASE+RC*8] - | mov [BASE+RA*8+8], RBa - |.else - | mov RB, [KBASE+RC*8+4] - | mov [BASE+RA*8+12], RB - | mov RB, [KBASE+RC*8] - | mov [BASE+RA*8+8], RB - |.endif - | add RC, 1 - | // Return array index as a numeric key. - |.if DUALNUM - | // See above. - |.elif SSE - | movsd qword [BASE+RA*8], xmm0 - |.else - | fstp qword [BASE+RA*8] - |.endif - | mov [BASE+RA*8-8], RC // Update control var. - |2: - | movzx RD, PC_RD // Get target from ITERL. - | branchPC RD - |3: - | mov DISPATCH, TMP2 - | mov KBASE, TMP1 - | ins_next - | - |4: // Skip holes in array part. - | add RC, 1 - |.if not (DUALNUM or SSE) - | mov [BASE+RA*8-8], RC - |.endif - | jmp <1 - | - |5: // Traverse hash part. - | sub RC, DISPATCH - |6: - | cmp RC, TAB:RB->hmask; ja <3 // End of iteration? Branch to ITERL+1. - | imul KBASE, RC, #NODE - | add NODE:KBASE, TAB:RB->node - | cmp dword NODE:KBASE->val.it, LJ_TNIL; je >7 - | lea DISPATCH, [RC+DISPATCH+1] - | // Copy key and value from hash slot. - |.if X64 - | mov RBa, NODE:KBASE->key - | mov RCa, NODE:KBASE->val - | mov [BASE+RA*8], RBa - | mov [BASE+RA*8+8], RCa - |.else - | mov RB, NODE:KBASE->key.gcr - | mov RC, NODE:KBASE->key.it - | mov [BASE+RA*8], RB - | mov [BASE+RA*8+4], RC - | mov RB, NODE:KBASE->val.gcr - | mov RC, NODE:KBASE->val.it - | mov [BASE+RA*8+8], RB - | mov [BASE+RA*8+12], RC - |.endif - | mov [BASE+RA*8-8], DISPATCH - | jmp <2 - | - |7: // Skip holes in hash part. - | add RC, 1 - | jmp <6 - break; - - case BC_ISNEXT: - | ins_AD // RA = base, RD = target (points to ITERN) - | cmp dword [BASE+RA*8-20], LJ_TFUNC; jne >5 - | mov CFUNC:RB, [BASE+RA*8-24] - | cmp dword [BASE+RA*8-12], LJ_TTAB; jne >5 - | cmp dword [BASE+RA*8-4], LJ_TNIL; jne >5 - | cmp byte CFUNC:RB->ffid, FF_next_N; jne >5 - | branchPC RD - | mov dword [BASE+RA*8-8], 0 // Initialize control var. - | mov dword [BASE+RA*8-4], 0xfffe7fff - |1: - | ins_next - |5: // Despecialize bytecode if any of the checks fail. - | mov PC_OP, BC_JMP - | branchPC RD - | mov byte [PC], BC_ITERC - | jmp <1 - break; - - case BC_VARG: - | ins_ABC // RA = base, RB = nresults+1, RC = numparams - | mov TMP1, KBASE // Need one more free register. - | lea KBASE, [BASE+RC*8+(8+FRAME_VARG)] - | lea RA, [BASE+RA*8] - | sub KBASE, [BASE-4] - | // Note: KBASE may now be even _above_ BASE if nargs was < numparams. - | test RB, RB - | jz >5 // Copy all varargs? - | lea RB, [RA+RB*8-8] - | cmp KBASE, BASE // No vararg slots? - | jnb >2 - |1: // Copy vararg slots to destination slots. - |.if X64 - | mov RCa, [KBASE-8] - | add KBASE, 8 - | mov [RA], RCa - |.else - | mov RC, [KBASE-8] - | mov [RA], RC - | mov RC, [KBASE-4] - | add KBASE, 8 - | mov [RA+4], RC - |.endif - | add RA, 8 - | cmp RA, RB // All destination slots filled? - | jnb >3 - | cmp KBASE, BASE // No more vararg slots? - | jb <1 - |2: // Fill up remainder with nil. - | mov dword [RA+4], LJ_TNIL - | add RA, 8 - | cmp RA, RB - | jb <2 - |3: - | mov KBASE, TMP1 - | ins_next - | - |5: // Copy all varargs. - | mov MULTRES, 1 // MULTRES = 0+1 - | mov RC, BASE - | sub RC, KBASE - | jbe <3 // No vararg slots? - | mov RB, RC - | shr RB, 3 - | add RB, 1 - | mov MULTRES, RB // MULTRES = #varargs+1 - | mov L:RB, SAVE_L - | add RC, RA - | cmp RC, L:RB->maxstack - | ja >7 // Need to grow stack? - |6: // Copy all vararg slots. - |.if X64 - | mov RCa, [KBASE-8] - | add KBASE, 8 - | mov [RA], RCa - |.else - | mov RC, [KBASE-8] - | mov [RA], RC - | mov RC, [KBASE-4] - | add KBASE, 8 - | mov [RA+4], RC - |.endif - | add RA, 8 - | cmp KBASE, BASE // No more vararg slots? - | jb <6 - | jmp <3 - | - |7: // Grow stack for varargs. - | mov L:RB->base, BASE - | mov L:RB->top, RA - | mov SAVE_PC, PC - | sub KBASE, BASE // Need delta, because BASE may change. - | mov FCARG2, MULTRES - | sub FCARG2, 1 - | mov FCARG1, L:RB - | call extern lj_state_growstack@8 // (lua_State *L, int n) - | mov BASE, L:RB->base - | mov RA, L:RB->top - | add KBASE, BASE - | jmp <6 - break; - - /* -- Returns ----------------------------------------------------------- */ - - case BC_RETM: - | ins_AD // RA = results, RD = extra_nresults - | add RD, MULTRES // MULTRES >=1, so RD >=1. - | // Fall through. Assumes BC_RET follows and ins_AD is a no-op. - break; - - case BC_RET: case BC_RET0: case BC_RET1: - | ins_AD // RA = results, RD = nresults+1 - if (op != BC_RET0) { - | shl RA, 3 - } - |1: - | mov PC, [BASE-4] - | mov MULTRES, RD // Save nresults+1. - | test PC, FRAME_TYPE // Check frame type marker. - | jnz >7 // Not returning to a fixarg Lua func? - switch (op) { - case BC_RET: - |->BC_RET_Z: - | mov KBASE, BASE // Use KBASE for result move. - | sub RD, 1 - | jz >3 - |2: // Move results down. - |.if X64 - | mov RBa, [KBASE+RA] - | mov [KBASE-8], RBa - |.else - | mov RB, [KBASE+RA] - | mov [KBASE-8], RB - | mov RB, [KBASE+RA+4] - | mov [KBASE-4], RB - |.endif - | add KBASE, 8 - | sub RD, 1 - | jnz <2 - |3: - | mov RD, MULTRES // Note: MULTRES may be >255. - | movzx RB, PC_RB // So cannot compare with RDL! - |5: - | cmp RB, RD // More results expected? - | ja >6 - break; - case BC_RET1: - |.if X64 - | mov RBa, [BASE+RA] - | mov [BASE-8], RBa - |.else - | mov RB, [BASE+RA+4] - | mov [BASE-4], RB - | mov RB, [BASE+RA] - | mov [BASE-8], RB - |.endif - /* fallthrough */ - case BC_RET0: - |5: - | cmp PC_RB, RDL // More results expected? - | ja >6 - default: - break; - } - | movzx RA, PC_RA - | not RAa // Note: ~RA = -(RA+1) - | lea BASE, [BASE+RA*8] // base = base - (RA+1)*8 - | mov LFUNC:KBASE, [BASE-8] - | mov KBASE, LFUNC:KBASE->pc - | mov KBASE, [KBASE+PC2PROTO(k)] - | ins_next - | - |6: // Fill up results with nil. - if (op == BC_RET) { - | mov dword [KBASE-4], LJ_TNIL // Note: relies on shifted base. - | add KBASE, 8 - } else { - | mov dword [BASE+RD*8-12], LJ_TNIL - } - | add RD, 1 - | jmp <5 - | - |7: // Non-standard return case. - | lea RB, [PC-FRAME_VARG] - | test RB, FRAME_TYPEP - | jnz ->vm_return - | // Return from vararg function: relocate BASE down and RA up. - | sub BASE, RB - if (op != BC_RET0) { - | add RA, RB - } - | jmp <1 - break; - - /* -- Loops and branches ------------------------------------------------ */ - - |.define FOR_IDX, [RA]; .define FOR_TIDX, dword [RA+4] - |.define FOR_STOP, [RA+8]; .define FOR_TSTOP, dword [RA+12] - |.define FOR_STEP, [RA+16]; .define FOR_TSTEP, dword [RA+20] - |.define FOR_EXT, [RA+24]; .define FOR_TEXT, dword [RA+28] - - case BC_FORL: - |.if JIT - | hotloop RB - |.endif - | // Fall through. Assumes BC_IFORL follows and ins_AJ is a no-op. - break; - - case BC_JFORI: - case BC_JFORL: -#if !LJ_HASJIT - break; -#endif - case BC_FORI: - case BC_IFORL: - vk = (op == BC_IFORL || op == BC_JFORL); - | ins_AJ // RA = base, RD = target (after end of loop or start of loop) - | lea RA, [BASE+RA*8] - if (LJ_DUALNUM) { - | cmp FOR_TIDX, LJ_TISNUM; jne >9 - if (!vk) { - | cmp FOR_TSTOP, LJ_TISNUM; jne ->vmeta_for - | cmp FOR_TSTEP, LJ_TISNUM; jne ->vmeta_for - | mov RB, dword FOR_IDX - | cmp dword FOR_STEP, 0; jl >5 - } else { -#ifdef LUA_USE_ASSERT - | cmp FOR_TSTOP, LJ_TISNUM; jne ->assert_bad_for_arg_type - | cmp FOR_TSTEP, LJ_TISNUM; jne ->assert_bad_for_arg_type -#endif - | mov RB, dword FOR_STEP - | test RB, RB; js >5 - | add RB, dword FOR_IDX; jo >1 - | mov dword FOR_IDX, RB - } - | cmp RB, dword FOR_STOP - | mov FOR_TEXT, LJ_TISNUM - | mov dword FOR_EXT, RB - if (op == BC_FORI) { - | jle >7 - |1: - |6: - | branchPC RD - } else if (op == BC_JFORI) { - | branchPC RD - | movzx RD, PC_RD - | jle =>BC_JLOOP - |1: - |6: - } else if (op == BC_IFORL) { - | jg >7 - |6: - | branchPC RD - |1: - } else { - | jle =>BC_JLOOP - |1: - |6: - } - |7: - | ins_next - | - |5: // Invert check for negative step. - if (vk) { - | add RB, dword FOR_IDX; jo <1 - | mov dword FOR_IDX, RB - } - | cmp RB, dword FOR_STOP - | mov FOR_TEXT, LJ_TISNUM - | mov dword FOR_EXT, RB - if (op == BC_FORI) { - | jge <7 - } else if (op == BC_JFORI) { - | branchPC RD - | movzx RD, PC_RD - | jge =>BC_JLOOP - } else if (op == BC_IFORL) { - | jl <7 - } else { - | jge =>BC_JLOOP - } - | jmp <6 - |9: // Fallback to FP variant. - } else if (!vk) { - | cmp FOR_TIDX, LJ_TISNUM - } - if (!vk) { - | jae ->vmeta_for - | cmp FOR_TSTOP, LJ_TISNUM; jae ->vmeta_for - } else { -#ifdef LUA_USE_ASSERT - | cmp FOR_TSTOP, LJ_TISNUM; jae ->assert_bad_for_arg_type - | cmp FOR_TSTEP, LJ_TISNUM; jae ->assert_bad_for_arg_type -#endif - } - | mov RB, FOR_TSTEP // Load type/hiword of for step. - if (!vk) { - | cmp RB, LJ_TISNUM; jae ->vmeta_for - } - |.if SSE - | movsd xmm0, qword FOR_IDX - | movsd xmm1, qword FOR_STOP - if (vk) { - | addsd xmm0, qword FOR_STEP - | movsd qword FOR_IDX, xmm0 - | test RB, RB; js >3 - } else { - | jl >3 - } - | ucomisd xmm1, xmm0 - |1: - | movsd qword FOR_EXT, xmm0 - |.else - | fld qword FOR_STOP - | fld qword FOR_IDX - if (vk) { - | fadd qword FOR_STEP // nidx = idx + step - | fst qword FOR_IDX - | fst qword FOR_EXT - | test RB, RB; js >1 - } else { - | fst qword FOR_EXT - | jl >1 - } - | fxch // Swap lim/(n)idx if step non-negative. - |1: - | fcomparepp - |.endif - if (op == BC_FORI) { - |.if DUALNUM - | jnb <7 - |.else - | jnb >2 - | branchPC RD - |.endif - } else if (op == BC_JFORI) { - | branchPC RD - | movzx RD, PC_RD - | jnb =>BC_JLOOP - } else if (op == BC_IFORL) { - |.if DUALNUM - | jb <7 - |.else - | jb >2 - | branchPC RD - |.endif - } else { - | jnb =>BC_JLOOP - } - |.if DUALNUM - | jmp <6 - |.else - |2: - | ins_next - |.endif - |.if SSE - |3: // Invert comparison if step is negative. - | ucomisd xmm0, xmm1 - | jmp <1 - |.endif - break; - - case BC_ITERL: - |.if JIT - | hotloop RB - |.endif - | // Fall through. Assumes BC_IITERL follows and ins_AJ is a no-op. - break; - - case BC_JITERL: -#if !LJ_HASJIT - break; -#endif - case BC_IITERL: - | ins_AJ // RA = base, RD = target - | lea RA, [BASE+RA*8] - | mov RB, [RA+4] - | cmp RB, LJ_TNIL; je >1 // Stop if iterator returned nil. - if (op == BC_JITERL) { - | mov [RA-4], RB - | mov RB, [RA] - | mov [RA-8], RB - | jmp =>BC_JLOOP - } else { - | branchPC RD // Otherwise save control var + branch. - | mov RD, [RA] - | mov [RA-4], RB - | mov [RA-8], RD - } - |1: - | ins_next - break; - - case BC_LOOP: - | ins_A // RA = base, RD = target (loop extent) - | // Note: RA/RD is only used by trace recorder to determine scope/extent - | // This opcode does NOT jump, it's only purpose is to detect a hot loop. - |.if JIT - | hotloop RB - |.endif - | // Fall through. Assumes BC_ILOOP follows and ins_A is a no-op. - break; - - case BC_ILOOP: - | ins_A // RA = base, RD = target (loop extent) - | ins_next - break; - - case BC_JLOOP: - |.if JIT - | ins_AD // RA = base (ignored), RD = traceno - | mov RA, [DISPATCH+DISPATCH_J(trace)] - | mov TRACE:RD, [RA+RD*4] - | mov RDa, TRACE:RD->mcode - | mov L:RB, SAVE_L - | mov [DISPATCH+DISPATCH_GL(jit_base)], BASE - | mov [DISPATCH+DISPATCH_GL(jit_L)], L:RB - | // Save additional callee-save registers only used in compiled code. - |.if X64WIN - | mov TMPQ, r12 - | mov TMPa, r13 - | mov CSAVE_4, r14 - | mov CSAVE_3, r15 - | mov RAa, rsp - | sub rsp, 9*16+4*8 - | movdqa [RAa], xmm6 - | movdqa [RAa-1*16], xmm7 - | movdqa [RAa-2*16], xmm8 - | movdqa [RAa-3*16], xmm9 - | movdqa [RAa-4*16], xmm10 - | movdqa [RAa-5*16], xmm11 - | movdqa [RAa-6*16], xmm12 - | movdqa [RAa-7*16], xmm13 - | movdqa [RAa-8*16], xmm14 - | movdqa [RAa-9*16], xmm15 - |.elif X64 - | mov TMPQ, r12 - | mov TMPa, r13 - | sub rsp, 16 - |.endif - | jmp RDa - |.endif - break; - - case BC_JMP: - | ins_AJ // RA = unused, RD = target - | branchPC RD - | ins_next - break; - - /* -- Function headers -------------------------------------------------- */ - - /* - ** Reminder: A function may be called with func/args above L->maxstack, - ** i.e. occupying EXTRA_STACK slots. And vmeta_call may add one extra slot, - ** too. This means all FUNC* ops (including fast functions) must check - ** for stack overflow _before_ adding more slots! - */ - - case BC_FUNCF: - |.if JIT - | hotcall RB - |.endif - case BC_FUNCV: /* NYI: compiled vararg functions. */ - | // Fall through. Assumes BC_IFUNCF/BC_IFUNCV follow and ins_AD is a no-op. - break; - - case BC_JFUNCF: -#if !LJ_HASJIT - break; -#endif - case BC_IFUNCF: - | ins_AD // BASE = new base, RA = framesize, RD = nargs+1 - | mov KBASE, [PC-4+PC2PROTO(k)] - | mov L:RB, SAVE_L - | lea RA, [BASE+RA*8] // Top of frame. - | cmp RA, L:RB->maxstack - | ja ->vm_growstack_f - | movzx RA, byte [PC-4+PC2PROTO(numparams)] - | cmp NARGS:RD, RA // Check for missing parameters. - | jbe >3 - |2: - if (op == BC_JFUNCF) { - | movzx RD, PC_RD - | jmp =>BC_JLOOP - } else { - | ins_next - } - | - |3: // Clear missing parameters. - | mov dword [BASE+NARGS:RD*8-4], LJ_TNIL - | add NARGS:RD, 1 - | cmp NARGS:RD, RA - | jbe <3 - | jmp <2 - break; - - case BC_JFUNCV: -#if !LJ_HASJIT - break; -#endif - | int3 // NYI: compiled vararg functions - break; /* NYI: compiled vararg functions. */ - - case BC_IFUNCV: - | ins_AD // BASE = new base, RA = framesize, RD = nargs+1 - | lea RB, [NARGS:RD*8+FRAME_VARG] - | lea RD, [BASE+NARGS:RD*8] - | mov LFUNC:KBASE, [BASE-8] - | mov [RD-4], RB // Store delta + FRAME_VARG. - | mov [RD-8], LFUNC:KBASE // Store copy of LFUNC. - | mov L:RB, SAVE_L - | lea RA, [RD+RA*8] - | cmp RA, L:RB->maxstack - | ja ->vm_growstack_v // Need to grow stack. - | mov RA, BASE - | mov BASE, RD - | movzx RB, byte [PC-4+PC2PROTO(numparams)] - | test RB, RB - | jz >2 - |1: // Copy fixarg slots up to new frame. - | add RA, 8 - | cmp RA, BASE - | jnb >3 // Less args than parameters? - | mov KBASE, [RA-8] - | mov [RD], KBASE - | mov KBASE, [RA-4] - | mov [RD+4], KBASE - | add RD, 8 - | mov dword [RA-4], LJ_TNIL // Clear old fixarg slot (help the GC). - | sub RB, 1 - | jnz <1 - |2: - if (op == BC_JFUNCV) { - | movzx RD, PC_RD - | jmp =>BC_JLOOP - } else { - | mov KBASE, [PC-4+PC2PROTO(k)] - | ins_next - } - | - |3: // Clear missing parameters. - | mov dword [RD+4], LJ_TNIL - | add RD, 8 - | sub RB, 1 - | jnz <3 - | jmp <2 - break; - - case BC_FUNCC: - case BC_FUNCCW: - | ins_AD // BASE = new base, RA = ins RA|RD (unused), RD = nargs+1 - | mov CFUNC:RB, [BASE-8] - | mov KBASEa, CFUNC:RB->f - | mov L:RB, SAVE_L - | lea RD, [BASE+NARGS:RD*8-8] - | mov L:RB->base, BASE - | lea RA, [RD+8*LUA_MINSTACK] - | cmp RA, L:RB->maxstack - | mov L:RB->top, RD - if (op == BC_FUNCC) { - |.if X64 - | mov CARG1d, L:RB // Caveat: CARG1d may be RA. - |.else - | mov ARG1, L:RB - |.endif - } else { - |.if X64 - | mov CARG2, KBASEa - | mov CARG1d, L:RB // Caveat: CARG1d may be RA. - |.else - | mov ARG2, KBASEa - | mov ARG1, L:RB - |.endif - } - | ja ->vm_growstack_c // Need to grow stack. - | set_vmstate C - if (op == BC_FUNCC) { - | call KBASEa // (lua_State *L) - } else { - | // (lua_State *L, lua_CFunction f) - | call aword [DISPATCH+DISPATCH_GL(wrapf)] - } - | set_vmstate INTERP - | // nresults returned in eax (RD). - | mov BASE, L:RB->base - | lea RA, [BASE+RD*8] - | neg RA - | add RA, L:RB->top // RA = (L->top-(L->base+nresults))*8 - | mov PC, [BASE-4] // Fetch PC of caller. - | jmp ->vm_returnc - break; - - /* ---------------------------------------------------------------------- */ - - default: - fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]); - exit(2); - break; - } -} - -static int build_backend(BuildCtx *ctx) -{ - int op; - dasm_growpc(Dst, BC__MAX); - build_subroutines(ctx); - |.code_op - for (op = 0; op < BC__MAX; op++) - build_ins(ctx, (BCOp)op, op); - return BC__MAX; -} - -/* Emit pseudo frame-info for all assembler functions. */ -static void emit_asm_debug(BuildCtx *ctx) -{ - int fcofs = (int)((uint8_t *)ctx->glob[GLOB_vm_ffi_call] - ctx->code); -#if LJ_64 -#define SZPTR "8" -#define BSZPTR "3" -#define REG_SP "0x7" -#define REG_RA "0x10" -#else -#define SZPTR "4" -#define BSZPTR "2" -#define REG_SP "0x4" -#define REG_RA "0x8" -#endif - switch (ctx->mode) { - case BUILD_elfasm: - fprintf(ctx->fp, "\t.section .debug_frame,\"\",@progbits\n"); - fprintf(ctx->fp, - ".Lframe0:\n" - "\t.long .LECIE0-.LSCIE0\n" - ".LSCIE0:\n" - "\t.long 0xffffffff\n" - "\t.byte 0x1\n" - "\t.string \"\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -" SZPTR "\n" - "\t.byte " REG_RA "\n" - "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n" - "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n" - "\t.align " SZPTR "\n" - ".LECIE0:\n\n"); - fprintf(ctx->fp, - ".LSFDE0:\n" - "\t.long .LEFDE0-.LASFDE0\n" - ".LASFDE0:\n" - "\t.long .Lframe0\n" -#if LJ_64 - "\t.quad .Lbegin\n" - "\t.quad %d\n" - "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */ - "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */ - "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ - "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ - "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ -#else - "\t.long .Lbegin\n" - "\t.long %d\n" - "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */ - "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ - "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */ - "\t.byte 0x86\n\t.uleb128 0x4\n" /* offset esi */ - "\t.byte 0x83\n\t.uleb128 0x5\n" /* offset ebx */ -#endif - "\t.align " SZPTR "\n" - ".LEFDE0:\n\n", fcofs, CFRAME_SIZE); -#if LJ_HASFFI - fprintf(ctx->fp, - ".LSFDE1:\n" - "\t.long .LEFDE1-.LASFDE1\n" - ".LASFDE1:\n" - "\t.long .Lframe0\n" -#if LJ_64 - "\t.quad lj_vm_ffi_call\n" - "\t.quad %d\n" - "\t.byte 0xe\n\t.uleb128 16\n" /* def_cfa_offset */ - "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */ - "\t.byte 0xd\n\t.uleb128 0x6\n" /* def_cfa_register rbp */ - "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ -#else - "\t.long lj_vm_ffi_call\n" - "\t.long %d\n" - "\t.byte 0xe\n\t.uleb128 8\n" /* def_cfa_offset */ - "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ - "\t.byte 0xd\n\t.uleb128 0x5\n" /* def_cfa_register ebp */ - "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset ebx */ -#endif - "\t.align " SZPTR "\n" - ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); -#endif -#if (defined(__sun__) && defined(__svr4__)) -#if LJ_64 - fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@unwind\n"); -#else - fprintf(ctx->fp, "\t.section .eh_frame,\"aw\",@progbits\n"); -#endif -#else - fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n"); -#endif - fprintf(ctx->fp, - ".Lframe1:\n" - "\t.long .LECIE1-.LSCIE1\n" - ".LSCIE1:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.string \"zPR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -" SZPTR "\n" - "\t.byte " REG_RA "\n" - "\t.uleb128 6\n" /* augmentation length */ - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.long lj_err_unwind_dwarf-.\n" - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n" - "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n" - "\t.align " SZPTR "\n" - ".LECIE1:\n\n"); - fprintf(ctx->fp, - ".LSFDE2:\n" - "\t.long .LEFDE2-.LASFDE2\n" - ".LASFDE2:\n" - "\t.long .LASFDE2-.Lframe1\n" - "\t.long .Lbegin-.\n" - "\t.long %d\n" - "\t.uleb128 0\n" /* augmentation length */ - "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */ -#if LJ_64 - "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */ - "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ - "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ - "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ -#else - "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ - "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */ - "\t.byte 0x86\n\t.uleb128 0x4\n" /* offset esi */ - "\t.byte 0x83\n\t.uleb128 0x5\n" /* offset ebx */ -#endif - "\t.align " SZPTR "\n" - ".LEFDE2:\n\n", fcofs, CFRAME_SIZE); -#if LJ_HASFFI - fprintf(ctx->fp, - ".Lframe2:\n" - "\t.long .LECIE2-.LSCIE2\n" - ".LSCIE2:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.string \"zR\"\n" - "\t.uleb128 0x1\n" - "\t.sleb128 -" SZPTR "\n" - "\t.byte " REG_RA "\n" - "\t.uleb128 1\n" /* augmentation length */ - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n" - "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n" - "\t.align " SZPTR "\n" - ".LECIE2:\n\n"); - fprintf(ctx->fp, - ".LSFDE3:\n" - "\t.long .LEFDE3-.LASFDE3\n" - ".LASFDE3:\n" - "\t.long .LASFDE3-.Lframe2\n" - "\t.long lj_vm_ffi_call-.\n" - "\t.long %d\n" - "\t.uleb128 0\n" /* augmentation length */ -#if LJ_64 - "\t.byte 0xe\n\t.uleb128 16\n" /* def_cfa_offset */ - "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */ - "\t.byte 0xd\n\t.uleb128 0x6\n" /* def_cfa_register rbp */ - "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ -#else - "\t.byte 0xe\n\t.uleb128 8\n" /* def_cfa_offset */ - "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ - "\t.byte 0xd\n\t.uleb128 0x5\n" /* def_cfa_register ebp */ - "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset ebx */ -#endif - "\t.align " SZPTR "\n" - ".LEFDE3:\n\n", (int)ctx->codesz - fcofs); -#endif - break; - /* Mental note: never let Apple design an assembler. - ** Or a linker. Or a plastic case. But I digress. - */ - case BUILD_machasm: { -#if LJ_HASFFI - int fcsize = 0; -#endif - int i; - fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n"); - fprintf(ctx->fp, - "EH_frame1:\n" - "\t.set L$set$x,LECIEX-LSCIEX\n" - "\t.long L$set$x\n" - "LSCIEX:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.ascii \"zPR\\0\"\n" - "\t.byte 0x1\n" - "\t.byte 128-" SZPTR "\n" - "\t.byte " REG_RA "\n" - "\t.byte 6\n" /* augmentation length */ - "\t.byte 0x9b\n" /* indirect|pcrel|sdata4 */ -#if LJ_64 - "\t.long _lj_err_unwind_dwarf+4@GOTPCREL\n" - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.byte " REG_SP "\n\t.byte " SZPTR "\n" -#else - "\t.long L_lj_err_unwind_dwarf$non_lazy_ptr-.\n" - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.byte 0x5\n\t.byte 0x4\n" /* esp=5 on 32 bit MACH-O. */ -#endif - "\t.byte 0x80+" REG_RA "\n\t.byte 0x1\n" - "\t.align " BSZPTR "\n" - "LECIEX:\n\n"); - for (i = 0; i < ctx->nsym; i++) { - const char *name = ctx->sym[i].name; - int32_t size = ctx->sym[i+1].ofs - ctx->sym[i].ofs; - if (size == 0) continue; -#if LJ_HASFFI - if (!strcmp(name, "_lj_vm_ffi_call")) { fcsize = size; continue; } -#endif - fprintf(ctx->fp, - "%s.eh:\n" - "LSFDE%d:\n" - "\t.set L$set$%d,LEFDE%d-LASFDE%d\n" - "\t.long L$set$%d\n" - "LASFDE%d:\n" - "\t.long LASFDE%d-EH_frame1\n" - "\t.long %s-.\n" - "\t.long %d\n" - "\t.byte 0\n" /* augmentation length */ - "\t.byte 0xe\n\t.byte %d\n" /* def_cfa_offset */ -#if LJ_64 - "\t.byte 0x86\n\t.byte 0x2\n" /* offset rbp */ - "\t.byte 0x83\n\t.byte 0x3\n" /* offset rbx */ - "\t.byte 0x8f\n\t.byte 0x4\n" /* offset r15 */ - "\t.byte 0x8e\n\t.byte 0x5\n" /* offset r14 */ -#else - "\t.byte 0x84\n\t.byte 0x2\n" /* offset ebp (4 for MACH-O)*/ - "\t.byte 0x87\n\t.byte 0x3\n" /* offset edi */ - "\t.byte 0x86\n\t.byte 0x4\n" /* offset esi */ - "\t.byte 0x83\n\t.byte 0x5\n" /* offset ebx */ -#endif - "\t.align " BSZPTR "\n" - "LEFDE%d:\n\n", - name, i, i, i, i, i, i, i, name, size, CFRAME_SIZE, i); - } -#if LJ_HASFFI - if (fcsize) { - fprintf(ctx->fp, - "EH_frame2:\n" - "\t.set L$set$y,LECIEY-LSCIEY\n" - "\t.long L$set$y\n" - "LSCIEY:\n" - "\t.long 0\n" - "\t.byte 0x1\n" - "\t.ascii \"zR\\0\"\n" - "\t.byte 0x1\n" - "\t.byte 128-" SZPTR "\n" - "\t.byte " REG_RA "\n" - "\t.byte 1\n" /* augmentation length */ -#if LJ_64 - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.byte " REG_SP "\n\t.byte " SZPTR "\n" -#else - "\t.byte 0x1b\n" /* pcrel|sdata4 */ - "\t.byte 0xc\n\t.byte 0x5\n\t.byte 0x4\n" /* esp=5 on 32 bit MACH. */ -#endif - "\t.byte 0x80+" REG_RA "\n\t.byte 0x1\n" - "\t.align " BSZPTR "\n" - "LECIEY:\n\n"); - fprintf(ctx->fp, - "_lj_vm_ffi_call.eh:\n" - "LSFDEY:\n" - "\t.set L$set$yy,LEFDEY-LASFDEY\n" - "\t.long L$set$yy\n" - "LASFDEY:\n" - "\t.long LASFDEY-EH_frame2\n" - "\t.long _lj_vm_ffi_call-.\n" - "\t.long %d\n" - "\t.byte 0\n" /* augmentation length */ -#if LJ_64 - "\t.byte 0xe\n\t.byte 16\n" /* def_cfa_offset */ - "\t.byte 0x86\n\t.byte 0x2\n" /* offset rbp */ - "\t.byte 0xd\n\t.byte 0x6\n" /* def_cfa_register rbp */ - "\t.byte 0x83\n\t.byte 0x3\n" /* offset rbx */ -#else - "\t.byte 0xe\n\t.byte 8\n" /* def_cfa_offset */ - "\t.byte 0x84\n\t.byte 0x2\n" /* offset ebp (4 for MACH-O)*/ - "\t.byte 0xd\n\t.byte 0x4\n" /* def_cfa_register ebp */ - "\t.byte 0x83\n\t.byte 0x3\n" /* offset ebx */ -#endif - "\t.align " BSZPTR "\n" - "LEFDEY:\n\n", fcsize); - } -#endif -#if LJ_64 - fprintf(ctx->fp, "\t.subsections_via_symbols\n"); -#else - fprintf(ctx->fp, - "\t.non_lazy_symbol_pointer\n" - "L_lj_err_unwind_dwarf$non_lazy_ptr:\n" - ".indirect_symbol _lj_err_unwind_dwarf\n" - ".long 0\n"); -#endif - } - break; - default: /* Difficult for other modes. */ - break; - } -} - diff --git a/deps/luajit/src/xedkbuild.bat b/deps/luajit/src/xedkbuild.bat deleted file mode 100644 index 240ec87..0000000 --- a/deps/luajit/src/xedkbuild.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem Script to build LuaJIT with the Xbox 360 SDK. -@rem Donated to the public domain. -@rem -@rem Open a "Visual Studio .NET Command Prompt" (32 bit host compiler) -@rem Then cd to this directory and run this script. - -@if not defined INCLUDE goto :FAIL -@if not defined XEDK goto :FAIL - -@setlocal -@rem ---- Host compiler ---- -@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE -@set LJLINK=link /nologo -@set LJMT=mt /nologo -@set DASMDIR=..\dynasm -@set DASM=%DASMDIR%\dynasm.lua -@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c - -%LJCOMPILE% host\minilua.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:minilua.exe minilua.obj -@if errorlevel 1 goto :BAD -if exist minilua.exe.manifest^ - %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe - -@rem Error out for 64 bit host compiler -@minilua -@if errorlevel 8 goto :FAIL - -@set DASMFLAGS=-D GPR64 -D FRAME32 -D PPE -D SQRT -D DUALNUM -minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_ppc.dasc -@if errorlevel 1 goto :BAD - -%LJCOMPILE% /I "." /I %DASMDIR% /D_XBOX_VER=200 /DLUAJIT_TARGET=LUAJIT_ARCH_PPC host\buildvm*.c -@if errorlevel 1 goto :BAD -%LJLINK% /out:buildvm.exe buildvm*.obj -@if errorlevel 1 goto :BAD -if exist buildvm.exe.manifest^ - %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe - -buildvm -m peobj -o lj_vm.obj -@if errorlevel 1 goto :BAD -buildvm -m bcdef -o lj_bcdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m ffdef -o lj_ffdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m libdef -o lj_libdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m recdef -o lj_recdef.h %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB% -@if errorlevel 1 goto :BAD -buildvm -m folddef -o lj_folddef.h lj_opt_fold.c -@if errorlevel 1 goto :BAD - -@rem ---- Cross compiler ---- -@set LJCOMPILE="%XEDK%\bin\win32\cl" /nologo /c /MT /O2 /W3 /GF /Gm- /GR- /GS- /Gy /openmp- /D_CRT_SECURE_NO_DEPRECATE /DNDEBUG /D_XBOX /D_LIB /DLUAJIT_USE_SYSMALLOC -@set LJLIB="%XEDK%\bin\win32\lib" /nologo -@set "INCLUDE=%XEDK%\include\xbox" - -@if "%1" neq "debug" goto :NODEBUG -@shift -@set "LJCOMPILE=%LJCOMPILE% /Zi" -:NODEBUG -@if "%1"=="amalg" goto :AMALG -%LJCOMPILE% /DLUA_BUILD_AS_DLL lj_*.c lib_*.c -@if errorlevel 1 goto :BAD -%LJLIB% /OUT:luajit20.lib lj_*.obj lib_*.obj -@if errorlevel 1 goto :BAD -@goto :NOAMALG -:AMALG -%LJCOMPILE% /DLUA_BUILD_AS_DLL ljamalg.c -@if errorlevel 1 goto :BAD -%LJLIB% /OUT:luajit20.lib ljamalg.obj lj_vm.obj -@if errorlevel 1 goto :BAD -:NOAMALG - -@del *.obj *.manifest minilua.exe buildvm.exe -@echo. -@echo === Successfully built LuaJIT for Xbox 360 === - -@goto :END -:BAD -@echo. -@echo ******************************************************* -@echo *** Build FAILED -- Please check the error messages *** -@echo ******************************************************* -@goto :END -:FAIL -@echo To run this script you must open a "Visual Studio .NET Command Prompt" -@echo (32 bit host compiler). The Xbox 360 SDK must be installed, too. -:END diff --git a/deps/openssl-1.0.2g.tar.gz b/deps/openssl-1.0.2g.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..315ad62cb716761af508716c6348614d7f8bf6df GIT binary patch literal 5266102 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

ZU9p~y-DNca-qsV_(LG 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

yoHeUB+&_7Hetzj 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�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

`1SN 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 z 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

W&-Gou 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%0AMrUE(rCwF5w!{;)- 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

L7BPpTQgL)*1`Gsx; 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

&rB9j~d2f?sG2?E-m3dLZohGym^MCH|k$ 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 M}s?Ux3d8Pd}_4G<#Zr9i6VLFG?KS*IOo=miA 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

{$5vOev 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 JMHEi&Mi%;0 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 iA+VnGhlCl+T=-6Sm!0dj4!>%vD>VRIZ>A0 z_^ed|9gYv6?+JGRB-fa#@N=EgYp1pPGIR>YsOhgKUKvb#HKke^TCi<9BZKZNWc}TP zp=axN&=Y+LwU6_@>*At)5)St=}Glc;oe}F;&IqSMs)C)S>ACE z;OB#`q1nj->RTy>aECuA^+~z#C3Kulb3tJhAtnh94;SKa)Vqu2Bzz2%kH)BZ?gP8t zM5^nsib)i8;Y2MyVf&x4ys3YYRh2wgjKErR(!Utl6isOHZVrqm+tN#p?rl%u%XHt) z2ngn3LUrLB>iexNITnYHjkbg-CAMn!;~@XG8W83rv5DpRF>8dCt7fHZb9f8y<_&e( zqd96-PQu)qZlB!Rc9h>Hl({BoM?8Z)vWDUMbjA_3>oMAJ0|n|GkmI0a-T6GH;=+|N z3a=FflHznO7T)7ld@vduyMs^Jqgi$1T5wtIEe>;rx7hb}A^O6Y_&ez)?im!OKl8et zpMx?m#dHDL*#pyX5LO_BoHa+4EgN_-Xt48mel%Lf$eAOj5|ikeDvThJR;}ZfbAZKf zIf?5BcCQ{8=zF1-Gj_QqZjkh-)GCN!Q1s4lzD&f8t69u?gHwQ%j0c(+uC82%zGDkP zGy3?Y5N5GPKSFqnVrRD$sVZ6CoUUyx+(K$FQVs^OLrp1Q=liMr=zRon~o3A3U zUFABw-xK7rCcNoHIPXbuap~4FgEJEDI+X@a`CI}~IgE9BM}6Ue`xomdVu6^y7-h5{ z#~6iPS*Zd^jM_2Q&x?ZZ$}p-KXWebyv6PQB*-g!M9V1}H7lK{-{V9Fbp|~>Lx5+34 z6HSwALeS=fPFE0R0&+12?G2(e8^UDTl_dyjHsZV5eq5{xg~VRrX`grYDS z9Yzzw!wso)cDRCD_xb}3k=Rm>Kuh<_7|ak;CED$Fi+Bo37{t%SMbQa12o30hf<)SS z#k@7FW|wB~q@~G;30#p$A5SOkj=BI#99k4hgLljB7-5xAJ;%=#H+6Dlgs|gBWAoq6 zXsC8H@1nYadZF@?k6^cd591Vsj3X_rf)6=3y)Vg#Lu(?x5ot^@T-5jCD-^Nmvi8$F z4+-pdbjuqGLQZbO#`sa16F~qUF~?wyl`^YXNzPE|ut_DT`M?6FsJKam zsir#A#gd&EwxVs>nXnkKbv|tpZ^k8`6kUjGy%#R17<-%6awnmHzMoYx83My*xK1Om zs}|Pk8oV1G%z!&653g7jvB1wvHCG5$KqcU&j6kHJRS~BO%0A>29MY<& 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�)*^Br4!LBT=>UI1|xRZMx0?e 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 z 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

|{nCd>x{2Eg|tI^tHF2_nr;WxJ!M1 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%0A{ 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

OG5M$6GT&YrDz;pY?8AiR9I&`i z$MvP||Ji0Vl+JHzbEtr*@GEo~TvXdn1gz^GWxcG6EViYdZxB()24z78#Pwsz6|RgvW9s=EwdXHgBTKG zx#+6k8zD`-?SZ{M#MWW5Ul4r@kjF((m`%g+0u?o zK2m$_qP?RPk(^W4IPhos&Y-s7c4|%D+?sE*Zd?#0s)@jHl*K>ROrZNMi(it~lh-x*O;JhyXI6Wjw&r2Mg>h&Y>3 zGG|=eXE9U9sYEaauP(YAx_Ox^Fkt(Y>OgJS@i9>uG;is4nqP@H?S4kL3n0JjhS3(S zFDumKd($=yHztt`UzeWCGOZeB{_RljY)3Wk-SVapz;3&*ib29v!VeYVNsey)rZ-(@ ze)D6%2iNV7(vt&#m%8#sdUp3(bJh*&DI$S4t{VEwTm#bW8C`|tW{%N}P^1BXUxJS0 z6fo1b5Oo@!X_v%zhOgQznSx>oN~QC-$CI(NNa?{%ur=|J!59457X9%+s#eH`C*Li&6uPrG2I z0&xJt=eDHF;dj7ume&}lR`u=-UjQBer>MK*El$Io5rhE-byJg`4j-Xs(vPlsTOn5u zR%#9G7b23FTIDn;>G^VJ%A`k0d?BTad0~!Y1ZOHdt zd1oQ`KJJ9L_`XKKlY4anVsoI_w21Nm!*$M)VxnB4yot zs{3y4?7wgy=(|gCfQ*dZie^_dXDVt41{v%KzRTwo=tK9S=5c^KY1vwuk3}k)k@nf~ zV|B#!RHbBT;lLbg2tu9aASwa)jp?-0-_({@)PY{abP#RBSP&!1o^n*$b_pc%Me8){ z$P!TQ+6(#J>_vq^#c=h|3k?MOUF8@d;|EKXiF;j^xpqXV))l37S2$n&e1lEhfTqsu zfRM#1{P+MyE#h#?ZSJPLRh)GJ*u^)DZkMSUpHA*}6uRRYf zH)Xt#TV8e+hi%^`ZyG$g(w5=%5%k=uljZX{8bG5tNU=9udf|=0kqBF_DN1mlT1U&m z0KU<5c~;;P5VXEqaGZL5fM&!0T|~TYfUvMdVRisY2QU+vr0NMYU*|Hs_@bg}C+>~p zYZ6P__{Ej6&|YM`Itut~x2vcrmBn)~BNR6PW>pDk11Bnt7p()A;TcPMzchV{rpx02 zvXC*G%4vEQ1D;QiS4e9A2CR^AajO}%rE$8TAh6hZJ|mVVo;jy9t{W{ys>ur@h8ow^ zlbC_2-q!goINeUR5E8=jtUcIfT`fn-KrOO*_*U~+{wlg^(ikj;sphrKQJJl4gb4f5 zz2bG9Kvi0%6SNlp!GB3tqe)o~DiyWp4m-YsEWSv@#6?Tg*RYD=W2?CBDI>(>x;rHt~@zT5kix%!!r1dCniso)`MR6GMG&|i=>PbTcr?!!XJH&PJ0*1m!i zqAJ4Y&Tq>UAd!O^TfNr@eaZj(4LsX?INoztcc~c=!gg*WKMn z+NACw$yPVqF$2+?zg|UbO zj4fl`?vfk6!#tqN^lnshRv-J0)-0>+Gu0*$AZdk9r>mdXq-@RPkC*DqWZVI(F1kf> z_xj+2JbXS!mERT}mkde+RKCMIU2w-;`8W_B$}~5fR0Ld6-?0i=CzTYK70B7nBN3EsJ zX?@>f9N+_@xS1EVxnF?c!E1;1nd+_dFgHR?HAL=R3Ct^@gx8M4-+B@0<)+{|o@t74 z*8{`o($%DSd>o(N`$8NPu-y?+$1$|cA^_QZLt4$1I>|yy(=1#M{)Z+hpqQM*x$1X}q_mmR zlEkta@KQ_GaSTC5E1DBWe~*utCGKBT-k1jf-!Y4poGxrt@OZ(^8}98h(d!G@_vlxn z52o+jXQS+mq|eeF%Tn(E1DoMdO~nD^m!ZC(1Hi|>T~VC0@GgNkaCyL*u2bzPPBUT| z^Q08BtkiNn_+y<;|G=P>tWaSsTaDtoLsxCuSv@$-s}MXuzVRBj)_4Fajo+8gdxa%4 z(Tzh-;iCXZ!QH0nHngDW#+{dwGN8^fzyK@^s{K4f8q>^WxH!}GU8P0#r=;MA zW4GQGLjkUvE{C3-`Ws;izW3_soFT{%slios9EeTOT zwPlb&Rx3s|of^wahQ4!Wv*BaI&|^PdC=WZIH5sugJi)Po+(yI|pYFSKjQ>66vsJA# zO{7NSd`^?-t%QTK5ceJS^||E|o6akP?@T-Bx)5lRD5vxjs8IH@wl;!y?I+3(I%DK8 zXcwPUZ4zVy*X^^v0EAVxXjMD9wlrh!%VIiSgG^xtDki;-W2`KMA`pzOEYZ&5gg|E* zkqm3aN8E*XCX2GFPKFOX4m=>O(V~o@4DGRibMAfKav)px8RSuVf%quavMesd9l$J+6y4!O z#Nqm$#FA21*EL{;6^&{-GYLY5^z&Giim%-_zI1RnWs@d>u*7JTq7gH0(W4APQ{x*{ zTL=f2QN|nAZD$*p7r?fGmxER?Ld!2g$*thgOG|ff3V&Q@$Bp+jV`*T060|B1Q+Rn}t_1k9Hb*0X8BB7W`(FGA0rWc|W{h`~W^BKXR~v>@ zKpCtwj7Qv*mFV3l!222gPchUW^VFQ!+J6Y@KMRrbZ3#Q{qy#T~j*%z9D8w_vHHG6y}sX9Bb_&m8R{4W`Va&QEv z;EY@fuH65nNYdD4+OX3nT$^vFpDsePv2)BY6oj-$hpbaD{(YX5^V-votgbk(cS z?Z3^{caEX0yPH%gz)Ag*!D8zW~|L3OC;Q1nUy-C_T zj@@aA-R~8ru>mYdz3V4>#g*T8JPmmtXwer-IyD;4U$3cSVod zGw3Cwbqw|hh^W3{wceG>>&ihl)~XZuTt~UpRLH^BK*3eMgw~I5IcZcx{H=Z!)JCb> zJVY9*dTD%iU`^NGnw*=6J6RGGj@!xI#MVF~tS03e95g)gS548k)bR`ibAv#m-WJN;LVWv%S8Oe<$t^gIg&n5;iJf(4DRHU_eO;L~PMp=!= z@IF&X$+qqlSm~=P9X5(ZCWU`m^0m7fq z-z!}n>uC)BQdVTEy4wNz5Dy-tCL3-#r}?qK z0|c3J8}FaXx)Hsqvw=KG23f%TeZ7;{j=0GPaj91)Lk>-0IY@3s1_Cjo#|9W=njav#}lggd|U&j%S9 z{}`DaaMJc$p`)-+xOKeaD6~?S1~_*lmdCRBFC;VHRQD031N$ zztGDo{MG4+*N67()~Us`;48%mmP$@>{pX`ug%EpY6p7ljGcLQy3m)(Z{MD(o$pkxk z2dBfI@{zJr1jT0BO`DTTI?dS%ZMEEI0Uz(tExqgsLEDWhiM;XZcvpeqCWRNumoTGqGU{&oiE9GJ!Z z`Fay!JP>E$-8Ioxn{0QvWM{wKT`CGTX&?Ei4tGcIVk!Bh+^APHjaf6bm=qr*Y81Ww zDu9p0rF>=R2%ZM@&)ivpmO_R*eYbZosxDe zDB=N*s4!rcQeN*js2*%!$xu-4?eAv%H>h6jIcncB;Sce3xZTJESLNmDGlbw_1mr8o zLU5YeJeTEOjiEdCTC#Xetyk_nS&!Y#=Bs>29JcitSEa#|+S~VgFVcj43+omYAsAz4 zaE5oz@lQ=lLN0%KBJI&Jz@Ri<}Gs^eIV+kHV+^&wt>>G)}Y z-?>ZE3cjnonlb{?PL3_8wHWwLY@f;~T{$G&H;5ZH9=%`CIX$Vy5NJtb4jF6YilR$$eUGo@VJu=5bx!?5P-e zoL*yYT4LWI>VALfk^s9^`xM3JuuM^pCRd2~LkHB6r(g2j@ObLg#KK{gWQuwbw*|y3 z=)Q^LJjkmwyg0)vZPB&?c7l}*Ye4xDQ1V6MxSxQ+oS_J%Q3fFz8Gq+NJnK}kDx~lH zP90xhFfb)auJ|ewhbitN)>c_q0lNTac`;IQlz9*=-yBsnL5X*N5k~13$(Dp~v}rRHj027kagl_x|+sG7RjUU!}Ap|Wd%B*1#ryY^f!KDkbMG%z9q zbvsw!*3{AMdGh&a%Md0mRd%U^!V^YI;%^U0bj`BcjjE#W)-s*bgnZ+Wds-cv?99ft zbf`Dw-&cL@AUgnfS3k)%X-YgzVY4F!3H|r}&e-1DNLO-TJ83snC` zEiy))ei`R)zRbFEbf2dB0Mv;%{!ZXiJ9(6(J3+S~Dp@;+ z6}N5y2FmBocfIXgr02V}g0X8KWaMjk#%Jl+<7?{biHH_cGYF-Zklm4u931LY zSNlL5N2l6jaa;ozH=6So-+bVcZ!bu|XEN44k<+p(_s`|mS znM-DSoxb<+ z4{W0<{ExkFYtHMqvh%Zk#aGJ1*e;ps`(dCU*S*UU$6PBX#$raiH5KjZ5yV!bv=L zx_=lmRWo~BGXULI9G^q4CxGr)G)Yszwg}>P5+1CD1to~Xn0C(It~y8_fZ1&(P;GD` zuZ$poygFC9u%Kb@P&pcHr>z1LW(>ec$C?FP4_MMhKO-IW#> zS2Z^7*c+!kHIq!vrH!I;u7bPX&#Dj%uH-zG+V=8*qxSP9(i?D6vKIXZFb1~9xp)d( z>Hg3ZlyH{wVrguZW}w9y#7>5v+f^OB_(i-aJy&_Wgk3Q_}KbkK5g3Wwr;7M2q#Vsi|S4 zhUMOL(%bQ=iI@rQR4+MZnrnvriifeL2BwOhlvjE{W!GIJV4Zp+-2$d02x~vMJoYo)NzRL|G$#c3TNqgsYt2KA70U?5{T3RF$Qi0Rt#A3tnF<4LYTUqZ z)-sNJucxvd?w`ZHP6^&Bx{mP?#mus36njz!eOY4=aBEIPg$&yvnd3V)!d#P2g*tKS z4)dJL+WcHt*JR;DV_T!nGcJMv?S*Cz6ab@G9ob$H=>^_`l6>9R!R!~b?f5ja`$lZ; zW*F*D8;RdWPV6c|yBxhw#PT?@J7@V>@@Gl-wnjn`A8sU|PqU;DiAc}t-6COU!xS%) z#f+;dkw0i7z=SZT7j^uqx%a6O!*Q%!<)NWV?~JJSsRFFbczkq(p!P84IB?U3gTiJM zUZ|`y!4uil%1XSLIUEKlVkTykxhC{donkU8+6t@A9R`ya71eH3L(`OWUPsNratLY| zqCp6Or_(GB%dxp{8bu-}E9*QaHkKHuu~cv8otQQ05gg3AufEwep06lTA*#L>VP0Jq zfH}c-ZT`UY1gO~;!+<4SwrcTIf6l0^6{j|i<{ZC z*X@YJPP?eEX`c$)0Hu)WFN5ryl$Q-$5n-JEDcH^jMR%ao>gp;thnHp;3 zT9I|4=5EOV2opqfQ;bF72Tk4erafYF7`fFcTQd;5=)rI_4b9p8G>4)7s$Hl!k^13c z=NrHmqOr}F8gUbKH4p+e??XiyrWkvJBNm5?JJE6-iRG*D=r=JjDz zg%t<|VP0v9LmrjLz3%S4PN&nVN_QJuR7P|_xJHx}+zab;C}C%EKmZU_TY?~VOhkwu z?nFm?-;<|)Y{EV$J5MuhBQsW~YzrCyMu>7|;@4yM?y0BMC%v=VG$3@fbm@X}N{~^^ z={*oO+g*##IK&IE;y@S-KM;F`Cfmw%a-JkNcyOs<(RM-(AC(P(yA#TwwjLqdmTES> zES&@(#(AhapKZ2&qyvZTkQ9P>!th%*838GL^z(zDxKR*H6=mJGQFZ6B8E|L zzICtmX@jtOF~{fB6ixL=I!(MLHYmhR3QxHwVF0p-)}4WHhv8A8t;_~DALTf#wIlC> zAlN!(&egA+0Hus@?|S4~`f5?=$|tvHaU2{Xsdg{FRg4yl9>i_~=dn0Hdku*NKEZxC?sE)7E`6go|r-CzQuv)*|9(^UMQ6t_Q10tCSAQk zrskSplcX?=A%0pGUctUDA7nJCg*Ys+X3`;+a?t}1#{71jm^nt?dvyudWM-;FNUNwJ zNbCccl)(wf5V8ql7Zg=W>9OV{lctte!2po+J#cAP$n=uDvS`u+8fqQXatCUxQW?56t-!dEK1eB&x?Y&16 zab)&u^jn!0#apNV!-!a!HQl%g|Gp2xz#hV(awkj&Qmx}7WR}#5Jr`5-m^BHF}#&ZXus1cgtOjeCBX;m_YJ5ql%i+?ZDe87R(r5kVB@(YL- zswmRLe8z#yN?j5c(?n;Nm5#4=}a`lxT0{a zM$VN7<1)>Lr(L4R4H)*H_dx&vk#w4f=n*e3Iw}?8p~6vA4_UGAZl>jwMASA%b-h?F zm7T@2_YMd@$)xaE(B3v2coF{VZ2BTOCOX2<4+%-Yi>6qU%~BMq#XyvU)g$6G#s?Mw z%wDWR)TeahaaX{Xnz|T-IrGsr&Jawai}w2zNhD4l&4b|sek&I#0MH7IKMx(_Ek>pH zSstSDfMa{23%gvb5y39dz-1J z-uqIQ)>ZelDnSk7row4bs{|2!*+o@5ZmFk*Un1!jiQIa|E6|I+c1$yi-}}-=r{-Ip zXY!TUfLf5bw9yB%j=}&}psanOinwK0l1O1EmtL%p`_2xVnWus?=?(5W(JsZ=7B5_a z@h2``G0$XsEQ^$cgm%L&?~Bvy`()Ra5dS!BJ|Ywabig}@P z**M*%3?i()mx(&ODXA0%sQt!O7D(<&-00iV$`cg^15oY4LRz#8gHM1681!HdcpZqvGP8 z$*Pn3&^hR;_#`+9!Ot6~?RK@=>Oft$yC8`1*jr0rI0MN$F-g;W)!3}ukJN0@eQ!IT z1My58t2eJvpI($Eji{KpG~G2#!tF{^t@T`ZNJZh;Cnf4kFv)>b#W`;Dsh5KWqQO?y zJRSj%Rz?txrG-hgn@4F|+`&FLpEMOk9`lL8B_#lcq6WvxgjliAT-nYcFzg`7p_O%Z zIJH98rRN!3HETu!MklB^(%$n=?!p#CtjR(5X^Rj$Jr>p|wir!yqJs0p`zW z17<_-BzQFz#HVZ)D(#dk+f@MrusA#mGCNHW?W9+hq!t*7!HM8)i8%-o{-pkDPS+Gd zW(Rqf38%EO0No+jw*ssUM{C2QU6nZ6b|;;kx89CL4+qc@L;#zN#z|&4)<^8&Q0TBJ z!L?L)_i=7wo)sk_o7o^Vjq5`?(HFa7yZ+^*IHWYh9s5RnnA zD=VsoDPgl0yQY?%Lcq9-?BwQ&BY$P94C(ZWiCta8WJEbaK&+&9?(+y23a7=LUj&~; zUb1Rx`r)Z062HQI?%gCo8y^|%AtGq04Z&gOY%hU(r@EODyKy@U#S#K$7=sPz!nwKq z1Ird25h8I(3*h-6A3sB%X^clM3G1Sm)U>3A>epmeqkfg0yUYXX;T|ftQNkA*ahyrk zWJI=lB{&L4_fZafH!S^{v&>Kzc?fEi0MKR%Ix26eov+C&JYM06;!Y$pMs%NR%J&4W z)le^4DPf;C-CN`2XOQcuBJcym>6?~xL5E}8brKY^S zF$(b0G2djP>RSj!mKjK6&MoOPK!%-?lJwq57k5$Edy-laZy_RrW>}sntEu5nQs)@exyX#zqzPS-e+_#Hb19l0%%v|knzh*zL~?XWJBEk6;FPQC9$(o$4QUGT_;kIEHWVm5RHHdj8+G4_Sxh1m#l&QQ=5ZP?jcS7H zV9H1DfE9e&2deD^f8p_>e7o+J>_WjISBYV>{IsLL?s`K74)owiXl8} zk(|}4?Hg%W$^>%lc94XMly~uS_>flw9I0-)uK^t&zuG9xD1lU!1)s(+z#crPFdNB+ z9|~SL&@L@|fL#(qc9=LEf%CXqqx1p`x^LwK@CxL&xX%a8S;@?3X$wY~7O<)JZW2u_ z(T_!l+NlpxjP!UomZgf-N+H7ecF03?0F*T^Yn)C-kf#UNy5qM13>Rs%W#@m#Hq@MW zRnCktMT6+#?r z`OkYY?fbyProo7;jF=t93!G>j^-r*Ct2v#!YPU6*4&f))*UNz0v!bKMJA_3`gbx>k z?Y4W-Pn$$i-P{ZktdXqSB-7nGTV=pCH+9_`A>e2b!NwJ}A)FOSJ;dz@64dG=3`797 z^RD5U^(un|Qt7FpUIinC&s}ieA(&0O{(K@C!_|x0vdLBpQ4NaPOyu0`Os%TA^C;l2 z-bTKIge}*+NH5Q-y30)4jV-6U+QUBJ#MmBtj-n}533}G*28~N|c^7EE<**N0x=9}K zk?D|VNJT!%71)Cn_Sr(fawqVk`MgyzBeEboqcH2(=_GNue4~nHAF$Ji$8n$-VBjP= zB`y$EN^TW8X7@0fhbaX3`;DVtI|sXYkTduO?N9AnS0eS+=E z8l7}qq$D%Kd!@Z%W+Sn5@eYkq_V`9Q`y*a@gh_DYj(yPwcNxQa#h&#f^)3v;PTRs zgOllL$4Ir3m;>`^kb=00L#p^0;>=U4bE&rjT94;C#nLGt<5z@d@??Z6`-O@3oZF5Q zH9}utbVky!NaGxmeL#}yr~{6(@KeP&4=}I9^yoQ(R1?mo$V+OY;%ZZbfiI)^J?uls zqa9Bn5aF(lQHnK>>HCtzG{pS9m!A`Llr5SDV&1?F$=Er1B2{0z9T8+c&?pwwJeNUq zP$|^zq%sKt_{A|~atVD`HqDKo;Yx*>sk7u!(8j{?Gu1*!08D2d-Hk#QuZh!Cr6=lG z6^=#ChG@{PunGudj~gp4*(PtKVTXpB5NsA2pPP8AWD5(K_Z~lmt!-9Q5FlV4a(@2Y zOPtv^(oiwH(+=}UQhZ4ZP34W314ukib#SL8QLq4we-ng?} z5hEHWq5#SxwM+=3>I0#4#^WWryc4rngUc&sF>pj~<3s~}CK6`DzOjc06TL%SHL!$k zF0BUKKvBXfBbMx*DSWGH)NHm_k1N9WHB3SQi;luKstgR#7ai4{gSzGRvj7`8_^@k4 z$lZu>*J2tCy39q4Hk;qGdDL01mRRHr0YFttI*bNe)mJY^fI{> z_4RVGr@^xTN$#E3lV;D9UF3D01pmZ%oA+uiP0gZUTMlCk@H5fye1Ep1!P|?-mADBb zN3H>;&6qv69*rjXWgh7{*S5V77Ez=&!1bW&TNwumdu`#=CwG^@a&-h(!m;#L;PBY@ z=;&$OeRHnx3)t#>oM*x1MZ^+ak6|vgrW%Oy!W=m8u|RRnEX~$Smg=s6FfBih6|aGn zUmlRO+ZQd0M!+#0ayL3>(F5hqfe5 z?b1B6q>@IACnx|2>w6~T&~Okr95Pvm!(ff)3QOU)#Q3|`Eg%fwo?q&$J~YtN04^{( zQWGlVVyALBd!b!NlS=yU`ht> zhqaPOM8Kt8Gpj~}&*iS;KoyE4(t(Jo3^gnBB36Kb-KdsQVN{v1w7c#RnhH8irzmJz z^mN3-eBfy&ve?eafe!rP3O!yYEH;OXWHJfqhHONCk}ivAP)TQ+%f_~txC;&SOq9Ee zJ)iuC6WwJE-Y>;f1R(|3w)@6pJY~w*`BU?d5+IADzHD19Ii#%~_Hh+Yu&OLHOyhAl^ZV#GO=S;mQV4_iaYV0Y zb7fS`Y2leVX;<$%QIFU(S7eDhAAm_{qXewc%3$=CNsnnSk&KSp;?^u%tD&a$(rBvOTEx(T9L+XpE!6;_tMfYOl&yFR=FT(w%u za=t`BEav9{(g2bc^P9=F9SO zYSbpVPTJ3cPLmjVIJ|a_>LGjdPE~b4q_iLou{4S*4}$BG9CNn-F(QuMOQw--VJTkw z7;F@y-!Rlf#=3OFU|J5^>lBIh$tNWRcnvS76zy~*mBl4V;`-Um`XE8CH8tg^CAbKq z>J_%XUBqZK#;*6E%SWH|8Z~Je07DBU!#Z>uo?XWz+V;bYAn-k4k6SJL1)m_M6o&`K zpM2tBj+*uEP`uZwdJcViv~_l|m2;+sA+Eg>rE>85Y0U6!h)CFTHe%iqDm^^~;s97N z(?FQEQ;ur~RI|J@&;$IE6BSQbq_|94ol0f1SAEY}GPTgUH^~}Vdw0%<$eAoSB^M8G z0ly6^#`E)`lD?MxNWeh~MqI25*eiL@V8EUw;}#uwAOkBhnp2I6$ak){kj+6?6v)@d z$r%i4seuC#V@*DmHdxaH9w6wvSGp)IV-p9)2>M*rLlSyAQwLZ3h{Z9RJq1GKn7ZX< zl@;)lRQ2>Rs>X0y#oBWlb>|pD2(xJ25>`q@A@?+6FjRu$Awz75a1g8p^2>_Df9-)i zyl^ZjwH)-??TFCIp~3;Ai#y=1=!PAM2(8JUEb6F!Bz||k?dd=mq-vHNWCp+(Nice7 zSnXOkdY^`Pt9N`b1K`D)C`Jfs5L$@WsC38ga{+(?(?erhh{Mof;bzuO6LJErW8wX3 zC&E4fZrul~h>cILkcSu*ToyeTxcxW_uK{UW;x>13+d`yjybrJ^y0&5;IQVQV1Lv*@ z5Y2r?kSbp@u##aV78@txg;@e|AFYO=iMPI2IEbpVtbIy+Ncg*Gn57^fa|^#utwp`_ zuFYB#F+gx$xkY#&!TdIq*43>F2OQ~PX9j(#KS!%Oaes0yJW?8CxLDjl8!l!ya|D$Zc~D zQz(i!l2j?|ToW~I9l8TuApIit-LS2mlJ8=y$u&Q@Jm0Z%!@(~MH;Yc(H+SArQ7BqE z#FeWb?L^PH#cmwW?|DxY@l}#l(RSr>p{fKZ^nz-M|$Ag z^W?@hO0`7Q1s#SnM6}4=!f>Prh4%(}R}?~5Hu^ww0Ih;jbWk%chdi;zK{^O~`+8_I zat%nQoVr#{FvAY&+F#VN27%w6#Yv>LT9!?05y)Irx_XPPCMG)Y(Kf=~J2Nab^>Z}Q zY4Xd8aTelO>LV=XRh1B;sJ*^mYp!-FT2d82jDEL?=siD5r=KJ3eJeZdnqz}vdho4? zA%ftDjFOLwnbbQU_Z&*LAr~&0CTkrms2ISfdZXizB2%}diTfZ$=s2B=2{LyeC{Z3D zqYgaGwCkN(o_C0&$FL)>D=(rpvF+3tA&%uD!MI*8hfhP&0)lMcjzH^xRhF6o&4HIkg}lI1AJJRTW%ftL5J+=*FEbE+;D>XQ>wip>sk$bNNMOay`ZkYUG*Rs0AV zXsUQ2VOUgiR`F;TfjXL2-~8B(8xVTB^?5%X5Z+8h^-U?45DBO~2ZWYfr>S zA;_w*Qx|WE8m3IWhdi1jXBRbo(Z(P)5cq(2AQCrmAciEOfW3vHkjIi4T6-uDP%nJpW?yWvoKldK zQ;!r@mU~DwfVh?{hyeg$Q8gC0DMToH8c2-*xXZz}Hx~9$nlzkY#Z{i7u(8#l9|^kv zW`xtiJ@(dx=2@X>)6V&W)EtGb2aE)-(71G-qn@^jn8}gIU|3`n&H`-gWL2rbHFq}p zt`Y^ZnB^IH5=8~SMtn`T58NW$pKy2Fxz~oR(zW%NXI=8_#daX`oqKN3l+7xrR&R-) zRGfuKJy1O6kp=}l`z%jXjWj_Pt2@w#9K|s@+u_(IT7;tX*Vm-qn$Gw4}MFW_&rYHfiMiX*f*r(ku zwg`k220>mpj5%ib1>R;p0woGbQ$!FMrOJ zmiG<_k5f{0Tznsa(7z!3MmR~`eH`|k;m*E@)cNi?8P^r1aRk(*ELL@#c5NP5-|vIh z9bsBn^1}xA7E+NwQ&*c;+z3EYZ9TAAWJgjaoH%a|o?58CV;>Xx;wetzjoup^@!WJ( zM$#U@clZzQz+z#ui-yJLwZ)^52=WlThbk`~3ZQ0(NGgw&dY+tuHJO@V=yfD!d~MbUPy z15n6fqXrNN)U2`{XH($V!lHukQ}-!lnmW;BFzYA|E1>nB3iAQ4k^5xw#AgN3Uf4(m zd5uJ4r#R(zdYoAE*(x$I3y~QM9S7A?Dog3n_Nh}nbk6Gv%(KLGyP{g1n4eGH=(H$? zBY~iOvJRWa6U!$zc?KM4mnCC(53A#dC`U;FZJ#oQYgt4L4vrVERZLt1hIzGyZGdq` z?E4%Gurk77Hu^Xx-HO1|wVv_r%_>khm-dorCPB4Tku`((Gz53O!}n>9cx@Gz(=HfR zBFO{sY=P5MtrImC5{I-Uul7B%>pN?@N5mZ}zav0i9CbnLN-ZRSUkvl${OsBC|I+@5 zyIZR5!A8IbL6Za%fIyEKGgPI{+`ZP;28_05T9g(m0Ul9bs1AnEE^QmcBz-rk#*tvi z;)N?c*qLQwnz|D?pEycnCHfT&=6|w&egP0HKTO`eDHhmH~;#{zy8A~zxw}Q{~=$u@5j6Q`!~PS zPt+6h=g-^SPwyXYKOYVMd;h1~_VA?rpMQqJR|xL>UwnP=U#nxZztScIZ#C?m{*}_+ zd-bc6`j1$EAMPK@-RbnJyW87`|J~31t?&Oo`t|v5Pak>br{8}5$>+cQcDZF%_q$q(;t zemCy#$Gaze{1>{`yuCX;d_PVvvFEO?o}b>|-TuqK$NjHAfym>S39)F## z^x+jg;Tt~v=YNAQy8g4<_dng;{Q3Kb)34iaP8ulacSb35y58>o+sC^`$bpGl4 z)7`iqcYht7?uah*YV@1?hr65l!^6$(yHk1BPe0s`)6Kin{p}BTZJht5-n=V!Khg8O zz5nd=-_ z_RX8yA8+3M8O!;u-_S4J(^csA-j0XAU$>^8d~kR7r`!2>Tjv+?7H0!b^iXiSbm3BO z|4QFlYeN^o*Sp(?8?x^Y-{0Jy-r#z4nO{En{DjBb!iTmu<>u|Udt4?X?**T^t;^%R z;A#60xW9j&+rfvftI$vM+xElT@$R8KzPiuxR&Mc~yA$^JxVtHD?tfYS^J`n%6JPto zJU*p;a^5PX|8?9w+}zV=|8gPvB>XJ>;~eGT2ka!;1+-i60Q5BL%J;YP;m7m4q$R=U zynj=E`rwgD`^&rAAK#4rXS(d)uiyOin%0Du@Bz=d4&Bce?BlQF4IDzJqxT@U`nt?q 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

g_d% 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

dVSkrEZe>IetPh+7jN^QPzzHK^> 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

RyHT|yCU(B~tOK(-B& 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

FAuG+TWg;4A(tZ=c0<<|AziXhRIaJz9Y*Kn@>O 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

q44pyy%0 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 z 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

UZIesF@| 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

V(z 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

nulSM(qiLJ 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

J#6JR{BV(nu?(o9&9tCRQIUru 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

1AQrzft)&$=V7>)oI%r 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

`DH+i{q3y(tu9pwQj{kc~2vzq|<1U-KY| z+ip0CR^b@suvwq8c-DcOGA-`Qdq^1fXzC}(N<@UPYqU>EWY-W)oS*qvCA8D+viZ1O zDCR zkKPGd#VgwZJzPcDbZ9F+4xGOQfCrt zJOe9%f{M*aDBSR$fQUOVs9+7-MmlwOt;wP`kJ)#LHOF;_uAzg zAoqQa5ofe03nG9%0V?Y5OZ>Ybg{ukE%019!0*Z2=( z^c5Bn zw74X4-RfNXbrynNSd@r`mKDa`Q3>jzLns zPj=!{x2;O%CU15aqc>96FoX07%-YebTQ@6?P6?qcV-hkobhSb9- zcA%-k62JloV!PzBd+(9^@tu|@DO0Y#?Up&tlaAnqsgrl$Op46$+l>9#vX^Y=!-n0g zuocz3xYjR7?L>(t`)(2ahaWC_U za$a#WI9E1(4rG`Jcm3g~&YJu%!7l0Dy2!=av?mBdA4-A1q|9vP(*5uma~U|Q59fCJ zZqUCF4SMVPPh|e1ruDKIg???deHjnW@5nc z>^vXOD6fi}A#+f>gSR3CnACa#Sq;fDf-%)pR2#C#&6?n@4>!$|fEd3&RE?)|o3NL} z#hK6$7&TVQUgND8^nJDV3H-xGS;BJKfhairD9&nNbM{{ejK=g3-NB9{?|w04R=C1>@O;Z^qUbOrsb(Db_I%bwF8L7!{|L-OJ22LmdMcG^5EjEN7@0)akKdK0p4CxdD z@PSeB`s)qj+)!*WFf{ZE{`Hd4FxS_1u!8WQTF=oTpsbg8z})dl)Vrt`-sl0+vDO%Q z+rmpmFc7wSVaY6)PUVhZGJ<8zuT(dpt$4-cbIVZ5WZ_Ms#;Gh{IFDk(GRq9{evcYM z*%V&3pn(&~5LR~CQ~sG;S-GEMPkw|{MY^{@qxg&E!;?uykmTrt4#`jc^t3?xDRLt- zV*R4F{E7Z$r(AJTv^d(DOLx-LD~zaxg|ighu~o?=ZVStg78c3u5~}$+5RIBLCU&(X zSczds2WvooqxCkuY-83xB}}su66hL7sgj83ouXd24URd$v&#_f6^p=_EZ&D^e@z%0 z)skP|Mm(D*)|+iW<$go2`tVW`JII)Sy-5CI2Xx1-7oT3dSDO}x^a2HAE^{V=z3f~U zv+gT6i$nU9X}}x^#t<+Jr(p?Wm*l~aq=9d4rcZ}pzA_{P{uQfq*lH_ovbP%!(dl6< z;?>r{V3dn*1W(P6<7+e>-v2=z&Ejm%n(AriTz0Hao7M{5w0uX}^fZV1%jO#k5?Xbo z#MIPr7VR8&UOvjV3lq6)npOrz)=I6zN%KO*0%IYQ>ff;;G-Y-8^}1Db^u~}} zmw2^#^knhK#Y*EFl{gYtda8G<#(*quh>nR!0%oFf1xU1Gta452HH|1{d;Rb@t z%eCg^`XXR3mlwnLfsE1jh`4cuN2=L+4-R(-H-$Wfqax$BAfT$xa+44A4Utf=r9EBV zK-YJaHx6dTg;CJ^s~Au-PgQ&+qk_q@STDlNVtecUY2z~!cU!S{b`~>e!*a%l5bc-* zr15)k3srC>>ysL!(4b#Z&Q?@`QeJE-7Vl{Jc7Cq#N8uWH!Zgx6O4#QHE;2KxC^DW~Qk!(_Vd zYIL4i7FvQccvqmw$JO9Uc5cuXe5b6H%IT(Tsgb(F>2^SM34 z8YTtB0Y^5&4as(nEwl8%LEs~aVlZ$h&hq23`7hbS?5e(}A5JyJ?vP!p)mU0WWbzTN ztzZ_T)op@$P9`#!$%igaL`piai(?F=K0?oasbr_ZQigHKEs}@? z=dZ)qN4(2ZtuenSXh=Bl9M972tvAnccfX`=pE4rxZskF6{~8)=n9NOHEG2Ir^)giR zO=wU|8Y4SU#e;U21F3M4LprX4(nG6w`2|9yKI?=pY1J1>z6L!8hom3Kpwg2J*I_Ib zH-zVfJS}OYQXZ$MEc*HL7lj3Q#W1wpfpudr!aOOS{y~Y_EKZ#sK0bc4_73hWWnkl) zlL2d5NP?_E!<6Z&_*8)Oq9QY>E_&$Tz|}*ehv-v>bOD85>|3-gaG8g+cCYRPa;~mq zg}%C7BF$!tnpIV1OU1lz%{UWH0gBj3TnGq-5R=h%^iQSxxvJLExUq!L!ra~}g1v`>hCI&}%U;Ew;eKW|p z7Yg~(usGBl1>0MijIVqi|Lz8Pk&2^0?y>nYP3&_20|REPBHvo1db{w?HMSQ^i|ZD< zz+t^BbOnnYC~(v>4iO=3z1pYi{TpA7Kj{+z4I*iaT|%8Sola*HkXRwjkaBM zBEDz-)?8seu{8mri1}V_Q8I|m%U7y_ASYwjil|A%>LgkA{I_Ij>%c5WFrTd{^9N|x zTtW2H#ew6Dn-Yyt-|K-b#wk)M?xB=#Q_E2K|KzhKd*p#vIqF9Y#k{(U&x5^7vv_8$ z^ryWr^_lD65b2bn{4PW5;I-<8hU{=$tFjOtFjg$2Uka!qAhA4$HTG}L;UeKQ85yN< z7)P~*P_C*gkUWm&1ttPOP%MANGV&nd?!9Xw`xg+ZxGik?sKfRSLLB*ZflX~w8Y*a0 zNg*=tZ-p=N$1qsrJj`n*DfsE{(5RL(oA5++5)|BJ$)Rp{n!<9rEoa^sVN2s`zAKY- z)Vi;(>a^8glc~|)RJn-X59?89mKl8N$|n!Vf-;Zn6v+BBdkz1gArG8X$9obr3|9pH ziKg?LhPKNi*$e~jjdxG=am;~%MQ*K@_mc#Fj?eS=NrrP=~oWi z^Iubq@0x?N=Ujn2R0Gm(yvz~@t$bN9(voI9>ao~u`AOrJ_|!Q?VsTF`X37HhLCa z>~4C!E=K^KY^>1$XICQt!=i5je1JLH=l?<(r<#11H%L=!i00o61m4lg19GGvA==LS z=gpd5Lk`}HMHf%-r#!m}vn7x40rwA8%@@jB8!K0Ti#~)m_&pHwz8k_i^>kzZTA;PxZ*CBA$mohr=F5b$m>T z>7ZHJR$RU8UYn_MP5NmE+bxn_(J)yD@y5anKl(M7n!I%*pSqLjx;$n#_T3sLEYK3YIQx*EMaTr(G%1BCXWfi_ zd>1V4J-nW1LXNChRsp_auK0};RY;CKoiUa#XZ-BH?z~w$%b)6I0Pp6VZLh*>|GD|! zx8wihSa;SNfNtYownA5Xe!YxqHS(^M2|LrqDUOYZ7fa5J5t^!|JnPeA=kw%Se%)258Qv$;oZ;q43Oo-y$MXktT zP@ONldn|8$6@>D`b2A8=&06fQjjHWbk4=lPt*(7{YQyOXX-XCV#Vw0)?TPe73sTgE=B+$AjwM_I?|&+Yuz)r^1h$V^X5AoG;q?X%}d z&#EAjOOK8q%zu6g483ltodNOGSN_~Y9RU-$sUskk3WB1(Sqt%h% zPtmw$ere%(P}eQCU|*)TEnD^)|0=c@|C={|Sosrprwq)f&uJfg?5z)U3b#x9_gESD zDsL?9zz3PRK~bS$={hVHiB;n%eXSDcqB)lmb-OJ^;GXrG8~Iz;@WtKm>iB)e5J9ay z{t>qAb>54?T*@v2q})u+OJu@FStaERr%dYGUC=RiM8Wz$1GHq4b1{$RwF7thhSr}( zAOQqn=VtG*d1AE{d}(T62Ss2%bktknKWY5`*+cnTzqF}d;n(iI{de^=BDlc69Hcys z!Ys$Ph~!&W(zVJgM9Qw)r1H9#9%N8W5)qk@ru>W)TR|eAnzHg;83Wtu<_KANOi?R4)>;lVah1W;)=Z{y@;&)UO+7QLxzz&hj2 zbSVyh@IwzCnam=ol$6Ort0ryilNCixNJK4DA5b7_^^k(|=1=+nMr;a2HMr2)xV^UE z*wKfED8CWrO%v7C+~swhqYV2F8BhwRNkGbn2euvWw7IGQookm$t2uJ+d7_mlf^nql zhRKH?)0T;cAF{ZRCR&YLJE2oIxRq5!!9uC(0uy=n!2;nhJqws(o-SzTHizJ@PA>i5 zQ@@VuwokTW7EE|72u=Qmvsor8P=VY5Mz?rgRlt2jq+r5$11wD3hca_eT4)OQnLw6T z2o!9Pe|$*-9!_v`4y7q)^4&U5y+#GdEL92l@qk%^64#U_(%;2sdb2^y$BGD{+rx{V zT9F-a(cZy}Hq0G3i35;fP1KMACPbknM9mg~CXSWJagT2%i1AdxK)WT1!uCJ^>leZa zSJ@EwYO$cm`-TyB&h)9{3VXW4n@eV}cZi-lJp5*zplT`13Ar)pk)scKOwhX#cVFc= z9tiH{#w$-9&lor1IzMF5F)dYY1fGVow}%dS4BuVXSWVvG(WXm2*N6(_31Of? z>X4Wn6fEX#Dj`8QA86{nzgoxLYArjw3<-1!)7XJ#DcL|`6uv;2q-ZmITyQ7dfs8a7 zqGCo=7D#b>y(V%+(e8o#UCK!&IylC&jgu!?36?ferJ%W2{qEU?5qplwN_+mE*UG|` z*@C4~P2uL|c;`bsb3=v#hgA|3L+!K;Sw0TIt#uW?yb$mw6Zd&aou@r8JpHs2M8Xh4 zb^l3H*%rjiS^Zn*%FTC>u7`zd%SJyWTa4hJ%<0)e){iuoZ=M%n5yTa&S_80FN+pm<@AJTEap%#86bct z-x2jwRMEs}lk7GECt9e3dA2dKL)xq)vWOXz686blI7vb(!Q$KFg)7TRQ3a6Q?Ihl+ zg-{-Qn9yvUeyhukw}Qx9ZD02{hREC;RTYkH<1_B^cYJ-nAsUVm%ND+QF~=@8zI`MK zP1~*F>w@Ujog4#R<1-`S;5?Bl`3uy+KVVf=0{&6ZLn$@vQys5{+fI@)!my3p&R@Nz&^ zt?teO5_Bv7lxr)Y4Wvj=1gI@cD0C-2Ab=(gra%TTAK9T`PgP*^5kUQYJTN0!WFjFs z@?=1c-WM6Uf9d4JCoXb$Q2F8h#ZoL#s<4Yc%T^tTcZa2(QIpdL8~U;qgpg`@zGPl? zw!BP{r<5P;X7 zL0AYD%ZM+5CbF! zKbk~76S@SMB;f0KysDlSrlnCY28jy73)o-qZ(PUNdEO@Cl*87ZxP%OYGg=%UyU&jk zRLev3S$SUXQ)TPR`2V_HrEM#`X}Ll>Bh0ib-U1`SIM=0_5#35gVjL*;E*WETI12+i5o#gG~(%Ws&;>x7snDYQ!=d7ORQ^ zP2bPw7PZkeAxP2Dj=R**llbPNvGa?&dwf>Z9P7sElvgfd>n|-;6CiKI@-yU#pV#-( zVrv3$e|$0d3wXH(*dzmnW&k)dH8uACb2nba60pS!YQSXCZdp&Rn|ZYuKuw40+xSpH z4EKl)o0MS5uCk@15W6R)USFIop3f>e;L{quacrtLM0qk=9v$8sl!^8vVIS6d-;Gut zmvzgN2MX%kC_{Y>1DohY)bw=o0}tKw#`OakejZ?nYCT`M7RYu(I|7?0gE@d|N?#Lh zSp=PI$(p6_O4U&aYP7Yd3A#lLTCEw|+gNU|mguG*7DN1>n4yzWSOtfWvZVWfkI$`t zS}tslJqtD#Yc>M-i0O0^IHvQ*htfq<&V1}g(#xOzb~GNs#5uPvW@=1Zo6b$V&JZ5V z`jq0`uC-{fVNnu-ghLi19<`VmD2%}6m3vHY)ty_?Gns;AmI#^q&a{kqL$HinDch`( zFd?U}0>nCjygd5FsMYss+?(dNf%C$(Qb0CVM(PTw6_c=2L^ERSkY%3mNR#*S8izP? z;KKFwWcW}K(NPP_xzIpM^MtpI%}gK<2Y0!<)S}QBw>jEj4SSZWh-s^K9gen~AM#4< znoy?R&@VQ4A}i~;dd}4frb>}{W5ROW=F`=OS*$AYq=(`LS%ZL6FZ(af(-Joy&% zhJ$aA52kf~6K3%yG8+BC9;W$r*BAay^3+$V(F4VtW^)g&6P5wDGrb748sXVzx_>8% ziF|u^eRbv?sZ_0(r@xORMc1?6kNYE*!z1CcSQ$bZ^1H zDH;<2ghQzeh#cb`Za4_ADl-(MiR-)X8^3?Tz5lPyPA20%gBKff&h%y;+0YdZtoH?C zSWb`sqXs2H5}EISv%ju!wPXIJU(GX~%mnsuK=5ded7bp&v3?c2F!W0$|1Vt-ywe;9 zGXo$lkX<;(uHV1o9#{EqkW%CCgj$T4Vmdu>83rKs_kPs>~>cNgsMnvacBbeFXG?p%6AZxWJOYMe6Cd(1r znVKr{at+DcrE;23CiT}Q9(FinwG>FyRnp)Z6he#Ug8V!=yU41fG+`OZC15^sM}C;hBy)?0 z^)j!Q1u#q3cXnSA?_?6|ym5}T^ESbB@~}xoGJ!NoNHe$YaHSTSOQuq-R^`Giz@)RN z67#i0r)C0;k87$Gwad2hj(-WJw{R!|Xt)4-ySrXiIRJjo$Lop9Z@^U!V2QHM4p1Za zt4;x^N&>7*04|UHT_5|nKlF3H>*Rg`Mic;!zHf7~gMj~LB#cEs zIa}5o|E{1nR5kSel6`c|%!Av1wM7;K^HeUqB8UtrB@etfV)gQ)h`|R&?5F05;AG|x zV}F*as!|BVq}4MLNu+bC#kN6FT9{w`kUog503vg^A*skDL@{Fn<=?iJH81E6o@lHnEV&EuvDhVkC0K z+%CNVtM_OSU7@JVn2UmOc9a>AdE}vaOd>d97N9ltVV1+23~#SI-p_RSu;LT-Sf)dy z6&tkYM`Gwyba^EA_L5%QAA@gwxqP0F z(;a}9>W)T$pXe7u%;O|bH#1NjY(EX?{eM?L2yFj{*{;u$!+ALH*T^k}?g;j9zm3!3K7fs{(QF&oO z?ub_qWaLArdie8UI_C{gaV^85wxZe7w}CwyNzHASS3D2P_TybauNjb=kIU+qP}nw(a^R&YgL=6LBK)Va5IpnQM!f{~`X8O&aKK zoq!4Zy7|?w8&Y4~o~p9nkRURPc|)<$x_J<@O`eI;>ZQ#hkb|u?_mK6v&G?YKS-s8r zm>=(OIUOr5kK#sGznW9NisK@4l%Uasgf}Z6iLn8@;8K{W59F&f1U0P@e9ZQ~g5^GM zmImG}FS8Hk91ex7bh=`ev{fh?=Cccs;ky1rtBPP2$;V|}<};;jL>`O@FHVy0q7qIx zTaUH&j#vjyMb}77Si6l&0A1xyvdU zZ2rbh9u8oLqJ~WDl)CKnlbNNU4UX{gc!XIxjee+SAt!-0*7}JDFXCow$FK#nL7$}l z1vAS>F+k0vr2FFw8hYq7CaQW*y7L5 z7l&Hu%J9pg-ncA_P7h{uM*-n-PK?m2DEjC|;{-TGiYJn-j==~&aiyJ}1{sKV^X)^} z1Npzm-omJqTyN1^c&k7=Ex4oCVT4_4hMaD<*s|HY;1GW|WnIb;zJ>H~quPN(9z3r) z?iVJ~_GOW3pjME_)R_eB6voMPMjaBi8gWcA{LuvSjNf^m;#Dwo|MatuOmvmiu5K?` zw1h2#t)2^of0A!}6A4Nr$Bbzzxg^@h22*dr3|JI15a2 z5txM1=zo&ANw>aVDbT+FM9nfQXhbJ_T|7f6j?V%}Rf{__AXb5-rHYkM1C_ zb{wjV^1zl*nNF`<8P9;$`Cf0;X`iO z+Be3#AXhX;wP)$ZCCUjMhlv>VndNNYTEpSqI)?cV`LM~JkX99G>2p8(?|^-!J1$Em{lRZrmIHf+`caXAZaHwsR3y}YA>2(up`U|i}GBT>{ns9n9&)mZd)3!ZGR z<;?qq#IrJy74g=)oF!Yev$$QwoCsy`x<#*fJJ{1Ec~E69kQg!>`_Te2>N|<}ySiCD zZ(VC=spsW_fof*Wr7A_NpwO1+Y%?7aiF!of6nI=DI$O7B_s_ZFo5b;N?_06rABD(s zQHsz9?m`M5^LD`{B2YbNcLI@uO@2eC{SIfe8HsliQj4!!->SAb6w9}T7xTM&F^MN( zGH-<*oY_t=Dj0b7&gmqmGHISgibMXBtl<6%67vQspjzD+z4Pe{Bk%D+M(UzlXMv{vWsj)`EH^fF+IL)|4!aMT2@IEbKfa6X_n%S( zAyi69WW%Q4y-77s&V7fK$A4-6=EL6*36|x*7+p$}n#`30&W#I?FZ5^hAoxI zRAQyp{%|sbME&SQuoNfD#%UzASRvnBgGB@5t1M0+e+d;wR;6ujb>ARbMhWK^^Ursb z$Aw_R2&)%s;7F5m>o~rNKs2j?R@f3cb%(#a`U{cuO$>+jNWW2_WxS|#&zuXbQh}q< zxFb=nYsVrBdA%;Yq5~@+(L{z5Z4&!O0%O7v4AhASm|YGuzz&YIae}6cLp_W9L6Yqu z?rZ`L$SQlLrUiTV0ZG0u!}}0Jv#pyeJ)WHj^pZr!-@RwBvq)SHl^RQ|=s^vsta?n8 zuP9%Xaxxx9G+LWkRXlQ#Z@6;kX##Rl(fejJjffe|D83cPY&-dutzL5t*us7s_y_&{ z$k>?)UgdH;FBq$j%wbuRsO#ip&i8jrkGMH9%$<`iXU4~o&0aOynbwrFTX6xWJIXfS zcC|sfWEV53KSQ21$buU#y_TXl2Az2|TU%nDEndheKJtT^ACaZ8vpWsB!5!)Fc&?V6 z>mClmS!*#cpYI!oWCjkVj6jg^FUGSip_r6)@hFwZVIA}#12p4p8vcq~DRiDZ@+JbB zNweZxxwfz16=9RBjLGb&mS550wexA+7i zQ#TkUu<0h~@jF#~$X!bEr(UU}h?iT^);DApkxoT}eMeV`vkz?NU$jiZF~TA=b7?k{ zU$D*16Kh-j8>HsU({iD8oJDonyNk3o&BWpc<-JiOy2U8F^b>GAuAKNso|K`pak3tRUI_ovAE22bv-Z@f;If^=-Zb<&!@?R`V zD2~>vMnYjh3ORHWmf)IEWCn(pRnxFtzwo1qYiUr*4emq`w#%hEW-PtV+mVw8_n~;4J zlQ@|2b0*wqI_a=XKBHJEetA@-57yRDqaNx^lWv^wcKz5+W-JRr)vIlfuL?D`l>^ zbYGY6M6A==&t)A!0x4sPJ3^uJZRf3Fxms&9_omN3bGC=-=$~2O)BJMAAzovIOo%A@ z#e!um(*bONpCLgo3c$fxEo*FJ=GH&$!%xsopy|6WPryz<`@_#KM$p$FjfD~G1gxp! zg9(8$Azs=+)J!58$|-8;7He9i}}Qn2&&vIbHt6& zCCABOZt-AyG(`4@Zm>7aIKV_5_Ln0gnuCK+ji2yY9dbb~d30=PV%U4eV?n}tf5@0; z;uKQ}0wuT5x?s;F=?=NQG*D;$4u_zQo!*^OnEkNcZ+|94w`Ok-mHA*vJ>q=kTy>e^&K4*g!fDum-IJu zkfJ~kR~3%=zs$x8It!`-MFmFsQA|81a>3gQBhsWHkH!79nQd*(W$aGT3K-jSH%lHY zu|b=yj`nq3L|en`LkTQvT>W&JImr5d)*5M*k;4*K16blLD}ficn(0$2yU?0ha^`A> zwf;=T1@879YpLt}^jtn9=BU=u{hp0-d;wY+K`O~gPSK>HNN`PIc`D1UXV{HHnsYhP zqG{vX_E%yjaHnl)MdCp+4xPbFA0@jb;wbS%w*qI%UAWJ(JvQz=-QqFFO`-B{>QWa{ zGQPkMZU&)f({4kfV4Aj@&NIBmZcH+K)4bUCBsA{7`!fp`+!czH9WyTnc)kWcwX)4e zZCCo1ERL!uvmRYec^ufk3`g%;Nb^Y%8w=O6zMrbBbj@B(IvOwLCb!*xs|b+HZf@7A z)hm*BJko$vvqJ~dcs9YLPiO+4OHxa97e#WHr-V%NP;}`dyd~iNb|)e9AZ|J6M4Lr9UTi~fw*(wj zQVzDB#?k9caD&cCJbcHUGMwxmEMk;Xr7(#=k}eZkNx|PTAVL}w%BPFQ-VWtX7m_G?)ro59S_2WQFQ%26o;p9sd633}*Aq^WV&D>h^p(C1|o@69< z&BEkmbC_?SYAz0sJZK5!>Z;1HeH)*9Qx5Mg^g1bGeUZ$)VUOEcD7hMED3T& zMEF>nb#-J|uCC(2-`&q@M8>0xsB=-g!;t7qU)XGWF(A6huXKn z0n*m9GZW2BY{l$m3nz$QF_!V~FL2-azTT93wiFN9Qn_fy?VUonA^^f_yOA^fdcesz z(|Qdv(&vrG4qjOMM;EK!H0$Ry0U;k!kcFN=Hofxb7q~HR8>n^hH>tiU0h-m=eAMtd zVw2))DOR1v1C1qB@DBzKtjj9WOD^t*;a?=t(`sYW!lRNFpVn&zG?a@|O?n^N%6CNw zx%`4?Mye@Xc)p+=C{-8Q7D9PJ4#&UXho#g#vC+_#Ei>yQJ>5Y}eVlse5y;$(7Ej30 z{D146yDaRRrLB(|%+n_8zqV13lMO)(%a+OnKYYkJ$ z>)c6j(E)TW=M7EA1wJ`igb<#6q>o#{6voeEc>~f$ zGtc!2|D!v84wFG_*o8)+5)E4M7}bRk4_zX*b}2&7!oPy&FeG6Z2j9%kri0NUx@Mn=-}G)zkNL4WJy;ViQv z8oh)I+;u?0pNs{&c$djWWaR$-e7(jqp?G5CP$WL*tQ@wr5;UB_2dMSRO#o5?FzD*G zcTpq{YJsLpLPUXbdO$lkN#3$u{)P!kK||w}x#gG5;1!_~tL!aJJD=8XiOckuutj`^ z&%X+ua<<^^aedy)D?)z4FaJ$EWwl^j!5#bb?pZ0v6ovvHi7+aFUd?@_g2y!!Hbl8e z$^CnVhXgHM$J+_WQdt1LX#aYWJ^FC1ukKSYoH`sXECgn;E_Al4I#G2^aNJ+p(P zOe|*@T8cHV#C;UOAVhK~Gy9)S%zhV7F3Lompx;}R-5X|cx1`Ue`+=P1(rau{Gqv6V zw`MfKh2Wn@5-JL!{kNKsy|$9~jixpn&pqz-4oYtI?M%0sSc{8zqgWn2ECS8d&pV^6 zHVLwZ6$({eJh0fQY%deMp@VMCw{}F!LT3R0n?=BXEz#P z5FU@^SmdD-P(?vf%$f$311HO%EBZQ8EuZ#Avju|AdFtTd{DtswfZV2Jl6O5X7fOy- zIUh{`R1OcpI1Pp5oq#V$%uJn6Q?5_a%{QwaDj5g<4PTV4uk5UH7GuVG;M7~oXXMpD zTmb|uoab5X##<*4SW-1E<1jwsbM7r(%j=tbhuMuga<{%$bH;hYc{J9{tPgIWSwOv4 zKy27Dq)VbfHnmL$eMjv%d!S>sHnE18oG-GfV8-RZa|S9=uZhxS%2Sz0w^MUdsq_?c z*UW2;!0@bl49AEcV$0rc70ST#S&f0=*W(k%&rWe4;lf_r#U17Io66_c24i5T%+moB zzx5^723^6?=&juU8 zAm%=!GrPrDu1L3ivs>27$e~g}Cz6T-?@n7yo@-zm^avpA zNAM17Gz8HnK0}S}sgqJG#p{Ph6n*k?n7%yxbQWn? zcCm@r`^*`7E*+v z|3NwBASg_jMtInmKbz0Ss+;`t+;=wBw;(C4A?D?5b#wE{b&npsxplnbk5;yg5FrHv zL%^!udMJsG_?zH&LtAkswGwmVnL-C-b=@o=^1SBin=bEKaC-Y|8Wu55e+-sg8*>D$W%#sQaW zDI&rwIeAWpPya_TEl=duRaG5$(5H7}LL#>oLB&>MZO$BihkhN#`li};1K}01tigRi zguUopt!l<&T7*!{2^eZe{4{x8q}uVAQCO`SX%(IQ%lUkRpmS)Z70?mciy3KS4a!nw zMJ7*iox4}>O8_&T~)GyNevjzU(F z$&f&Y$YGpW<`}HWxbEoz624K!!1SU<*}>7LG+dPZP*YmOVwZ0&hZDqiX&Z+7iC$8^ ziU~Sqx1&Qb>fp{gLQ>8J;WYYr&v@UFD1A=}!yxR=j&`JFeV5tgyQ1TF>OOg^wkmIr zp-WHp{0p(TV(panvR5j6oV3`|WE5L$M8wGYICkdZ8Y?SwPnmjyx$H@s?)jIBmSU1Bos{U2Zr}7zMjWpK8Yl>YFLY8 zPJ&YLps&N}kO1k}?MU+Ctk{$Ll2mSzzJE9In`8g$ZV!=FtjGqG%GZT*EaP4q2TmB} zn0x+r>yLUy_PXU6sD&gACz#?-$j>0sjWi?3b?mS81-i^hWp}>`cU3~@hJU)GMAVw~ zVv1AVo$BAf0wz#>NwgmV?w*WUN3HUQbQEt2nJ5x3`2A^PQnvRh<#BV&rH>T2zzF*u z4Z4biQ584wAdlky-wf^Nf@z=-X)I=wtG>gH;A@WZm;*Y{ne=LfX+Jl-yjkW8vMfKx zd9NkR`uS>5%jo+=A&HGDp}r`pvQsp-**DHRNMx;mP-c0DYg@MLB^OZIHZ){^Y^{JU ztQB|jKk_O2&R+L?^HUC3Co||82+-Au;fQhw5XWaRHwN!hjV@ei8Eks;UFNeow)dfz zYbv{ybmP8pRqw{SgH@X)Loj$%DG>AKM()Iup2Ct&zTg1w((^z}(VqI3#cJvvCRya* zl1sN*BQm6l(RmJ7Wn4*Ej(97UFvw##L!*7WTJ)===r>RE?l*XKkJfqqFrI1TA^uDR6FQbXjCZXeYSWZ zSrP0!&v!M(R>dB?nWoNFkx-~&WkkkSWNct7VrQz}`HKQpa39&EG<_h?fFNE89J}r< z1sVJrnDYaF)eWOg+e8{`tEV!Qsohpn-Pw%i(SOJn#;KvBk1&cU@kcL0lQ&Y-W1#XA zO_O1V!_b^3Wl0mWLt)M1=7fpV^~C;a8{g~XHrsov_olI{ZDDU$-{LC0?X5s+_&Fd^ ze9EDrKkl)mRcKm4V%XDY6ZC9a`{38k#dQ8WkR*_1X!{?~1cpaeIKAWdEE&K@Y#C-U ziD*mr1+{16a%t_**eZjaj>#D$`mhW)A>a4C31tejvtcqJkq0T4xn!f2*JxnCjO7C< zdwH0&7bC9sSJjTMo#xUO0h$kqp~u7K7K0O0us*r3`w zeerXA%e!szd)sj{;DP|+Xov)^|1Y^uiw6Fi8GE?2e_y^6a^bJUfcW+)c~5*V1_||j z037&D1QfvOEHq20ob{8}ybdf^B0;By;8A)ZRxdzrSR#_pv&IWG{-Hp7oGo|w0%yyH zH#<5}eyNw?oQQB#2#aydiYS}Vt%n-eEaTMN~k6i8vDHL8fR5f@EoAqC-6!?M;dWaMS&e*Cu!QO$Ox01F4Y?`8Y15 zxXA~T;PL{k3%2eEGM@zKPlob}+n^Osaj(CQk`VlwFn+P)%KZKUVbY(-IReuN^;={U z-!MJJM}owwXGskc#P1;Y<_&g6N-zuW@nP==vdi*mBWYq^k9Z;^G%|y9xkX3XK97c8<*a0 zj!HF8f9^eV6f>2|!wQJ=wU5*eww1$-j!-qOm{Yqa+;wClIqq>N47$&>@$9ifi5QXZ zT-xxw54xI?AIWN0KQ8hVT|>Op{;@t^dJsL@a~qf-25W0Xgm?bjPC<{V0tW_kl?_I& zmS}hAm4Z7bVWaH#vBgSacgf<$JivIcNvfDJg@++yW1c0~;oPPE)gWV;0pge};L3zt zz#^ke{y~Q?G$m5_D=2_V_Jo~lnV%GTftKAz&BmI@tuZTZi{?c~>p;NmJ*W2?fl&_v zjTpi%Jcv3u|LZu&FTKIok)T@e=RC0W^E9LWQ<4^R9-gyV9N*UP13IpVwT0IkbI*_t zgRY1xD)Iy&_$W|#M2*%O0=I=3obEvMe2V}|W^rc$isrmTLQ2vp=S8xa_9FTu28#X< z96r3bgN^C~!)mn+RX4m|@dOzYa)8cX5u;@+Wnul0uNef5B*ZSSn{P|z4`f{!dL(a6 zr-jJNj>BKtbn5TJSQ%;$Nboc?kLn;egtec&4lqp_Gzh(3Y@i3pM;e%Q7hIg!8N)pL zMJ34OGx7|KvAn{n=s|cUhk9IWbGoCc$5%cT1^X`LK2rvoLrnfASGd{znD zc@-|(VhFwLP(ODKwZ{-4HEGpyzC)EDb z8(@9Cy)$`@#RCfgCqbqwX0dW1EF=G zS9UCr+4t?wTm-pgNe{=@mB`O$Ne5w16Yn6tzLCOv`A>%_M|%e24~lO)U8zR~xl;z5 z3Yuszw~rLtHE2yGs4pp_BpDW_97L8$8Ta3!X^ba7uJV1H2(s;=5A8-n-jMB;ze+i^ ze+PvLv4_mY|E3g1Ecr0%mi$^uQXi0yc-zu&%T(mDP*TJ>povr+6R1sa!W5jeOVVHA zil;Kp@L$Hg#vH~f9hbP!?@`5>puIRs?@{%cpn2G5^eRcDB8>%EWHb|Hg2rL{6NCen zzV6TO^PAp!3HZ`zngvn%^gEezqLU6*gp+gW3!B;x2r_6?))yM;tcO}C+>1JKxp;tg z)GS@Avg?YxZgw5lFM4@~`R%*5ByT70S_ZdN>X`8f#Gjr(S)y+ysF2`)ghnZXg(VoL zH;x}K!5+L(q zPywKQ@hkZSurC8jlE4^}p#NmU3`}a#a)C~&;Rn6EFWzP7U$5%|{auxlnb#u8N%rzB z<>toh00M#V_PTe#Xv2DW>T&0|D=tHgD>CT)r+4}&X`hqnRJQw|(4=uTbmV)@&g-H; z2cI~{c>h^MYsBctbIBVu3a`@dDi^TH65+(_C{fc90GAYl`RkL)bK}^(U*1tzNiYWu zxkbi5GLF(9BuQY@Fh`RY)RxyA1UtOTRTi{*kQv|gIqFvBn;p)?Z`P>boYm#!ku zpGQ!sF~+p!7U;l|z!dy8nYUBW-m#OYi-k6c_mN8IV{J9f6rdFWH6M;!T^AQpFgU&) zroi1#a>P{wHhq7gW#O}c*uH>IcD$^vlq;T1L@SuqZ&@>IT&P)_gmUERfkLkv`Oy4s zSvPc^w1%6Z5w(Fn7^MF80$t5%bd|qmf76HfwpC{cz1wz}^JLv#8obUVJ8=oE*?0o0 zD&i|uDJX=EmGak@+d%=MZ&lTvL5^J$K+=P*HH^g>T#VwP@3PsWb5)j_ILx}7J@zP( z>Gzum>a)z_i%QVkRdswOmTXRr?eTS_#W%SpVxg;1w zB9pCiDo!C7h&kD@p_$K4Zc-CWCr!C@p1&TZeDay`u}UX)+E+O%Ta1A{ly7I&gp2fx z7?a%Q?BN8V`cK@B5;ayvsX2Tqa<7qFc5cX%G!#(_M=J7mg>}RxGhf z^ZXSg=MYg#d09GfeLo|aN?02I-eRxDpo@oVfXtCcT;(p_z_jyfKGZV@X15pmrKrHIEGkRedr6OC8`>Sd&IS_ic!eS zz#)n`?k_;7!OH+iicu_DtYbZXz17IFt#Fvuk+84@DFj9%!S$wBd1@J&7f=Q&lI59_ zKRgl%JwpTps1Y%&u+6vxZTgHo4h)mS_6#^{7t-jF283hZQ^4UJt>87h2qLp;Oatbh zF=7oqE38FlJLtbbiegfqP(kJo0safb8Av)>mRDdgdr)k04Vn0VgqdO*x8;sgnds{Y z79VxJ`X14-l=d_53%ZspQ%8t%*Vi-^ofvP+edj~)!H)D-7G@TPo|AXB7OYu{*jHT~ zF1JHqrhSJQL@FiWjDOu^P6j5K`?0#$4(FEL9 z45fP=zJvR26fWKHmXQ!@QT(%V*J9)^qWRRQ6SBEep0c;#HT8e6L3<<3%dnpW&#MV0 zKl~eS1}7`&&UrsM4z$lJqpc7qrG7^cx;bb_NZKI@vzt!*4Q0vl-jYF4w7Jf=Q_S>| z{E0cY&3i$WJL)_eUZ~tVhQy~5E$2com*`=`SGxpU)}(CEl-F(Xp8=Lfm>H$l4S@UN zdDEv5{Aq6H?hfA<0Y-0D?~h9q|52Nfas#Ycr4j*8NZGW16&8y6T$kxtF00^K5s@)I zSCsR>0iU`#YXs(tB}ld6#kl&4w{EQ!ft;>pcj^`|`p&2mPniuZTs2j3{wLF#zxoOl zenonf;$xE^zPZ2{^SY=WeM1V5Ka809F?-3cGs_7wid5S|2~ID^+zasatsR+LJ37E& zzX{jVAM?x4L2z(y^=Iz1Xp9zcS9bxBFY?ZUCPJE29iagPb`WOj=)|da5dOFPCUy|k z`m`KrYxJjeARe|&P|U;)(gdo&q$9Mq=V9{LViSV73|fTZ;u2klV&+^0#4(g-R5aG#0$(V!Hx(ZIwQmv|Cgb|duX@0{E_I^lT z_kEFo>gZ^^>qVQcq5V3X0?H`*4HfkU9Cz?J}LRwO;dni324)^I<~? zIS6xukPip8pqi(|{Ayiw!Cu#G*n z5a7NE!Fl&X*wz>_plrura^pEEP9%J*^G0*Kn*dwH!Nh!aOj;-5uD#20f}QxKN>wop zPBK{SfNZu5$u?e56z0MvX>DDRL%h0K8oo_`pm=p58>nxX)8aEH{cS_cIPm!$U|GJ$ zqxZ6>a>w?lxt$U<`0I6~ztCLH=s27jRvPzG7gK_$`LlWEFIyk(L>Jva>#(60LWp|e zn*0q36LzJ2?N>I)4z})v-?vuVn~EnfVFJ>xCb;k*r|WA84F0o_EqenX#4zCcoqAn8 zqLionm38tm0{|jl{qRoIKF?N=`!AskUBK#jKs51zt7C!GC4s6){a29t0k5R~-~Eb` zg3Wtjls?Y(eAaI~VPBk`X8S_0tC-jx6RBp*v$B@cY#xr1gW!s*wI!eRxB3B8%$-N^ z=o>qN!y3dctij-n8R-#{Mta{+Fq)Q_k0bGoUrMHKYq>tiMR=NO)7J`L;OefJ0_UiV zCYmJT`S`RRc%$xCbfDEPJY%MGzM3AZE@iOdz>fSOfTB`K;r^QLe(mMmQCM#EPG+eS zF;m0Ne4<8Wv@vU)zAXKCf_NIDnD$@kATU^&ys|0HQC0Ouz|Armq!X&ti^% z_qR_`{kP9x>32-R;{?#f@>>(_M|-q4`QG-w@W&-)gb6L9F8W`Le~I>Po^HRkef!ZTYQ%}q1O}*X!P5X*$39H9M_PF0ShF`?8~&oT z5=*)B7o`>lpReC??ZVcP24tO@PFS5KR(EjE1R<^;rjH_LRTnmG=eL!)g>#k)>vKCs z6hS^wcxk3V!$*#f>$d`R@S^Fx4Od^fJ>dIhmGSnf)br*6id~1e?$6+m3(UycH0^Tb z5T9s8>Iv3ncGd<2S8mL{j-f&|5lY_GQaPTG3gmu9I1bpBy!MbVa2I9RsEIN99?VV- zAYZLIK54RjJUkA37$|XHaOPi_#m-U2Q*~Ik=Azx;~6X9f>80@c_iBeRt8H zxDUP5yuMr^K4DkWQQVq3d8b38Nji)iAQY(vU8Y%3*9#8%8Ry+#gZ@khS8b}2@{DAd zkP|hFI>9Fkf>}q`D>w0hn0w}91h}iQh-=N`{@shy_}w$O`wokFoCJ8efHm`gXyXId z#QLjC3RRKjuOQD~LRq?iJ?A-tsSYf4y;qk#qd~z-wc}SE#96v>pb77<9UK(ZTO3HR zXc7kE3~(6K@i5`9B|R@gwF!V-&Zseg(X!T~k^{R^Ur=Snh`fhKVM%#5NRHNAxTC~~ zaM%;e_NHPlI3oAuwfQZ$&6jOIp+iA$?Mc+T1|np6b0QIaW-YyooJg0fe6wV%wc>{@ zb_pRxpZG?yRXwz7mKJ#$C3z`%5;_Z&lQ$N@h|xAjP!&G-&pPLSNzscH7l=z%EDNlb zBCzrc%#MLe%QMYy1AEH5^PKcYA`9ThQfftyKdiBR^1brtjZ5;<_Y~VdDC6z4I7kHG zxQfI?o(>;cWSeC{0sF5Iw3u!}m<3g%v)PtRlyfWCcwSqTcRd)3oI>Z{)p90~J^U6?{lQrag1Z;;xu z_lHmvhMWOEeFEc!5kl!aLM*x7q@$s~g5nf*xS7SQ-l6Su^~Ue&XTIg#7N^iK(%S8uIlRO#NUI}-g6<>;&~jqn{2^_A`WFeVq+M%<^=QeqlAGQYBE zHej--n+9UH%kKC4X|FUh*_Vz*(5cy*fP=}T$R;Dsb$z}mGcB((OwX&Fe_H|3+Sly~ zAZ-25{t4n91;(6rj|g66rfEv-*#QE{AeGn9l+uHV6>^TT^wfrQsA(6WRNYyb&t@Zs zQS+Y#XBo5N@by$Wrr8jg)o9QG6}B;Ukwr{@9$^PcNWE}dWq%4@-8P9QN^jqQD-k!n zg)4j4vz2%QNMKv}z(0?!Au=XR2Mb4>IsdSgMgK?mzAcFf6zXf#W;dGAWW(7Osyn0h z7@}_NUd<C)ckJ zc$suUrRmBH^-_{y-HTMUf(1b&hhfV^F}7LB_9q6IuVXp~e^zA!GDLxIvbLN=;-?-w z?e7G$7KObRL72{ty-oGzCO*Q~wKn4hU^-8eDVbAji)k7SWTkn7ZgH?!|2`js>X9#~ ztGTdMFxCcDaN*@qJ~`@kHzm-fci^m95zj>tYNG2w%!Q1bvJX5azPcv9u3|p*AyL^_h^xtX zbYLIi0AhoiMerx}yUVS6J4F~NEcdXl+9^Y_ScU=St1%Co@egtAqG7SuFzWiFK$`$+ z%Oz{*MG!;(cb>2dlXnnxe{H{S!M*>o2Ans=>zE&fa{r;EV}0oGWj&!s+;jwH^%N1% z4Zl;}?pbxKe%&MriUAz0U3}}1=C+EucBNky|cs5+^MvF%ZyC{S%|fHN$i3_I8pE+*-@_atMBoH;Og`+K)vzxR5L*;f2$ zc+1owWh}(+MJNytmFD0m+jFT445kH8`=BHrJPr_QBfHyyaXnO$Hbo;9Z z0R80h{W=_sEzwdQ5>}xh6dia}8}u7<_RL3?<96lG--|*46$D}^MW8!R7F_aA7_0kc z=L3tZK!K@Brf>VK+hOG!ITwx_Ta9ak%5kd zKYPM94A&=sbd4YSO#9CB$C7!0Jx4OgaXQ-4Jf>o``Qb!am*eLH6Fc>B&ocr^KG7@x z*Ez1Em}56&Pua;)**cYXP3!q zAATxqJGATPs?9E(N3IfOuE~fk1{4)hGpN#V(Jv}O{WE7x4>aaKt|xzcjZF8y)iX}e z?yntM9)%TN`jERj$X1|s>Njm}_G)o^h2XKn^PmgqcjW~YQDi%?M$84E7(wy}D( zB5o%OUDyp<`H8b|@^Lw4m*{@of%?V4w@1MY7811Kr z9v!!jWw-EK7_uVb11M6N{I(b%biVslh+#SNH#qVvLY}~Jj6JXH7`8q=Etspdozk36 z|to(I0R3wd~<}oP0Y~XQ%{NK*{DNH+7~X<8 zg%id|u=~(w&S7Mn-o~T9->j{M5ncwk9dN!`gVpAOMlkc6P}zZu16?<<-W^&pMg_9| z;Ut0{r?YTBN16+=5RsmRGMIvB~bwq<-DlXG?iECb0sbe|+f27g_)pLo5d;$pdoduRF; zw22k2lXg}E{S%KS4e%CcshU2+^C;O<`lF7n zOd;&iCGoEs29M!hPUDRY+v=5U(^>WlnSbN8@C9o5`2~1j!{H9U+0(9j5vljOO{b@a z^I&(Y=w1yoMR!pYcO3*SwJ}1Cs+xx;XD%hA_>>0@7LDF6xj`auP^;apKb7p73PYqlysybEhP z6WyZx^^$;Nu*o(yHj2S^(Gk4fnWc*ecau)S0iC8cB*?V(4_M5$g%J5KlAQ~5%m<8<>8R>Cdai6k`f zA?|ElDG{Y1yiY5As)W+Ls5iQ@#A_&u`=9$QNmt=qHhc+0pVowq4>W! z;{LX)hTwS{;Oxqc&$jg{M09;WvkZ}MqPB7c`>s#asn1*^Z~8a#sbomm`UQReUqJ0Q4q9pXwA1(HqfWhzM>&xItUX1D-3n7 z`A<2|&V@Wr&lRFh#ZBVU>W>wmO9~ESG6G)LfB2>6l7vBy()Ay-yN}xnk1ZT?=tt^s+gVZ-aW?+6%G9#y3VP&5{3!4u{|+%Y}>Z2iEZ1qZD(TJ zoMgu~C${ZV?{_XwovOa*>c7zIS&zaCmlmNsVh$1w4)$`!73Gx9bCimmM1#WAK2^wI z>oWFLN(asU=;eS&iPhMou&f0AQb7Rb*?jb#J=PFpSpTue&Nun%_s2gSdFZC9L3fjS zkA{FyoVy|Y?q$Kt=iW`_ay;&3Db>;;BKz`RWE7W!)}we@p29Pb9tENWpFDp~?hh~A z+qZ29<{FZiv4p|U=m-;Rbe1NeFDx#bIw8Ze6cB~338X6~P{YqamxsR;X3GoV6pHUl zrj=PjqByej+@v+9)nh%p<70VZ;gnKmtIQ=>)KKwOpKEYx{!kH}Vr#MXRH&2}|I?#Uwg zW=zho2XC&_sdM@nrd_*;-r?bc!coPl9lIZfnVNSu?ek$0Q*Q_kA$V>6*K*rl4e;!b z_+Edmvv&RV3)>8u3E#qZrHWCIWp&n!RofFv2hj{j`akQfxaZF=8@(pgd2A&W+up3Q zUK>$(Hnjqm4|Cj49jn1b7a?HuEKtu#0p5hhi$>)i=Sr(K<-=l=1g}k`*FdO?P`R1* zRB#HRkE^fSi06+)ODWBZma4wZ6bV%`AwB(+yHyq_}S|)Lj!tD z++bq4JO9TSo9Y<&>F|~!NIfSCivHfLvy;c2>%J}3u86x$(!v9=(+NqSvp1u;1qVo=o`|Kifx;anq-UAW8I1T&9aW&_@qY|C@Z>{c!hE| zBJx`(V3H$|6Usj|pvmd^G~qWBDynXn$IuS`=^fc4Vl$*zxWXP4<@F#KBn{EHuz!JN zEZ6Qh&Ocf9p*e!-nYigEl>0enfw`x)( zM2ROFnG*S4WkVY)H&hc%4-enSd4A!)h&F~IEOX_Vn&2iK(nbyz0||w#%}vgrCXlX^ z%%zAF1e`(t%-#$Q6B_C`H2l>Y#s_VN@fa^1D1xcdT#tMDSa}VBvfZq6))G3K=o?gw z5KkFz?A?_`0GWyiEG#6{4-N;$T`dqa6op?vv9NTe;hTYst)HO~&JWsYh=HCo3`>H- z($VHC?>r<{c~r-Sv%7@6ByLQ3xof{1(l#%q>2-}RpO<4uP`(O7MiM+m0wWy{Xb|43 zR=Q^sU`ZG3yWidN_Ix_Jb0ToO%f=x+1IOo($T!iQ(;RxlNEYp;xB0wQe4xr z)|!Zb(%+F;dKwVC+N zlua;J-WqdijZ!~8l;8}HjOij8*<13;GI%fqN7#XjBF7AYVD2a<`HB_??ict=499ZM z1rz7E=tQR8B~LRynRbmS8;p;$p-6O(vPnPEhxPqkN!>Pkhr4qHuBlk9#m1AMp#7@# zZ;@rVeUWkC`WsKr(A{D>nxt8S?)GKi`P@pm7XD9>8`?0v85PeQHV)kko-if0yl0yP zUp0^mW3c?8THXh;xoa}+xy3tbS6~WoMxY592{mCzG|I8p2XZnmc}y#W0Kt~2IC_V$ zs4p&=3DozMp9AXHG1ea{T-sJ@O9CbeJ{)hI4PXq4OFj3i`MiQD4>6-h zcF}qFsw6xYD5!|Q7J>RQGIqR$Y>ZhT-i+#XUTmvO@Ol#{;mJ(2Z*94ukleKypPTVq zxmfV!o#c-~&+DXpQp~wFtm(?{THi`4#)$Q|BeyE2ne1=o9Y~Z0JwlK>2WPAZ&S}Dz zgrqzHskGuVw<6h|<*ya1aIh!r+JkJSB{6^l)KUedC9K){xy1nI-RSo0JsoUcGNrw%7{P5i? zr_Kjx$Y-h}5A!Sth5gYwJQsgrV8aUBWd)RT3z?A$fMZFyhpNnpU3GBn3;te)I*v;LI}?r0-wW zg1$z^h$7AY~x&4T1qkC##}fG##i3>8do~Bnwly{kRQ>e% z@0JQGUOCo~pOwXNUjp~6a`-h*71;A}^SLbO{{5A_dInd1;&6EaP9EXqgn2F;JE&Sz zcqw=qQbyXXA4U=-D9TIy!CU+l(N$yDFHfbJ<(T%K6e(H>_^Ap~_DkZ5 zG)D$U_=D7TCb1~e%!a4hu4_kSwjDgOs&z(L&c#n{CoQs0e6BiN>HJN9j-(Pti&@~& z4dmQL`VfRDCSs&yE9#I@qElaz-1w(}#P*wA($s#^nZy}o%p))jE{`j|&xW8L%ZMtz ziyg_!XF;$GWMsc8bpTR(R{&xkV7V2q@zT9D_K54cn?A5+ZzO%z1!}N@(Jhyy z9?PPLI+c4B;n8Aeb#rA_a!0(`v}x?nm<6^elg%?XvaECplNsJ7e+2u&S5-n^ygE2K z6LHZyski~y0MC>r%x4bU?Jik9*~Jk{v?kBP@`1F^g*ci58+|a6y30l?&LeBMi}`?H z(4f}Ppc+C8QAlX&QfeH_&K~38iQr99^5|lv9}#;#D$UWaFbF<+@Wsz3mOgR@##@dV zMei>$U3CX?IrVQQQvt-)`u>Q4HF9cJbE!xT({|o||26^&4XxwUM2>My9R1xZ$uv}g z6s2AD6g6lr2@``v!$=m-OK<7iBlfU(3vF5=%cY|ObtoSK@iI}CybiSI$IB*f)kcU- z{RNueJ7PR)=o{8W=@=E`;Z82bzXUAtaA=brqd%sQ2h`QO2W$vs|cd#j8rhUJ?ks=){Dw9&B85Fp_rZ$p7Y z)S-m@B!oN82=NHcJe~j3Xw{`m#KiF4>3=@-dY4atu*Y+V8*UQs&k9R^6Q_S}13{xM zb5!u8CCh{%eG+CuSD!ISOB|LG92>(NCN^M;Udlz#=^<~=b%BO6wkk|a)FKOI+oA@R z*lC6e3qt>spy3zRFYWL3QH2hAci80IlOUvWe02ezk1Ks>Pikn3KIcOW2T_;oF1 zTpb&{HaAf;y_|(PtuJ9`+;1;N>72S<>dJ|M_-7mx>qKfzJ|<{CgOQlkb}-o! zm94r5lZk#o&ir;sl4W$}+vdVckDgPh`^lx<*BI}sOZuV3n`vgu`Kf+0{TNrJ{8@c2 zQU9*5&-jUnYvTOTbYOvbf6!*bJ+Lq4$U*oP$kmmT_%$(}nDI<&X>TX^J;dGL5T)K# z|NkFG{y&UI7`?N@ymXwa9acbSLxkw{NEj-CDKS@kvMQ)b$Z%f}^E3d~qeCL3s zD_VdO2etw}dVxq^Utk?g9_p|*CWiX=q_`X5wsLLRbPb2CsT)QwxsQJJ@?&7? z)5h&dt--ll^yg#uap~#DL1j0h+ns9f4z_^jPR*iOdEqDu_VN%R@3y2o&-H=$`5%2LOemN*Jx&$YD?sXC9@r{|lY}*JCggTlpPzPqj2io?H z*GaENO*64bP8rvA;1JYfBD}M~1#*sSc;5PiYpW07s~`<4;Il(V_5Ad4dIIk5)V#06 zRS8<}RCqt!#Z@`%#<~v5OF{F+L9zD?K+9l9^U%Rnt@NwoKVkDzQFb5)ISj#3dqqk{ z6W*7=z6tP35+ZpDVnRtxs~b8q=an+=4DP)X3qfUdbL8ielgf?$GJrE97^sD$^T*v; z!;Le15Ls>QpapG-82W|#n|1a^9>Hs%K#%Z#sS3;QorKqLhUDyYFHBki2M~FyKg3#{ zcnYa}^#RrYAW%CTQt&vA)B1>Wx1)}#ZDvmFX*W_cgaj}|XYLxcMMqd^Wpi4|P-cY{ zSMOf&RvYgOBhb|0*C|lI)0LRdb6{1}Tga`{@EWkxmEQ?YcI_anX(rtdkE3IfiPU-V zZP9l}3UOQ8xLp#W-YFU-6>=-JZwsZ2aADy)(>|uk9OlcNG49%oFQCT4+@?3P8%~LT zt=8|>;|veXScJdg`wI;)Ft6~PHQ}1l| z4syr8qR5)E&9ffd62FZ^8Cj9Z(d!V_66QSXcdaL5-Mg!RokCZB)dkl>ABAf7Y?H!lZH6)A&6TeBg3H{#^VNnYmDd^kskWr35pC{4(X zfMgNNa`QGQTShu|UpB_$H+6n-ZGM_x%%2k40J2fOKNA7Nv4-*$=2yh7#;8Hj5~w9< z#pHDSCL!Za)D?pr$=LUDqg@Z_rI2}PZh8@=WwRCVWp2?aXJssuId-FpOB$6 z7$$n3y&tNbOf zMsX10=}%m#x>5n9YdfblN4c*QfJSYqLP?lM54UwJCV-vYoC!toA;e#YRmQ;#8A*6= z0q%gt130wXfa~FRp0e8~>BCm2FO{=_=$l6~ST|kd?2XMM^wj6jmab~Ic?!AFu;Sq$ zMeYU>&aOHvHXDLcp|Cv6B_GNRIE(lh@bUvt89l7h6N zRIBqqFUo@p+|rJCtE$MY5LU)|p#oqChWv`h6GkR|eh>D;NNPutp!uM?H~&R*WqY}v zF&Ac&l|}8~e0Y-$E*^K_cNQ2`V?4y50+G#-tM`=6t|7ZC?q`SIW>x+A&|(4>od#%) zMyKaG%FKamW6?ngkhXAy@TXoQFuW62ZCG-l9ZaB&I%EL7p6FX*^S4M%lf=<$B;;Nv zLCfN%0$j=@)KMISLEc!Pkf=dU)swpP2OPw6HX%k9J8v3=C%^7NaZyGGe;+skZdZj{ zaqci*)Av9NkM#U31;z5ycwv38LOroewAESRgXsP`ck6=W6x5 zGviLo|G4gEyo8UJukjt!?E6P+aGS>XI)UYT1mAZLY48?Y z|GzUgV0Y{Ll-qhH8`f%=WUzM^SDX1B9lF8eQ?)@L*JO?R*hlIc7Bb!mAM^}UGxf?e z<|HNP?1dwDq@2B6b&GrC8IN^)^!=$ct21K7e%`-Xbv5!ZBF^2wncaloIhcXv`P~ns zMu^YyK2x!DSv1#|^YNG6@meD5%w(Y&_lnkhA(l56Q%Te@N)bW#ZY?ubWIMym)O4ji zw2}7E7Zm3J-c#=_eGPMj&tA302}nui<#9KuZ<~@ay5t8ZA{Y{MtW2D5 z$n_m6lhT9R0FN`3wbqNer+spiCb5XMBtpPH^m?WZg{Jj0=z`S=^hN@53qh0g)%Mzg zq4p1>{)dETMhzprF>EJj^P@Pn0;5An+!Xef^14nV@y}-ADT#BeU%%TYll)@M7uWky z3BjDvWsttNJqL~7_yPa}o}s|2K1#9^v3JA)nBz5`ZXGoli2<`EP257uM5A9}fk#qrUYGh>h~k)I)V=nVJ- zi*k5K-uAm--Ao*O=*Z&r$KlnYAwAOh3Gye!`q7?WwDKJG5ERYd zl2?F-cU@iJULNeqh#!Ey@K(~PT^k}%Am*g?Ql-n@B`0CFIk!9H24Xi>QrPa|KIcx+ zZMX=36l7a;j}U3(6o&BUEW1V!q;(O$>mpQr$|VSVi%)9m7G`$ z0m+3_?zGcK#2^9{GU{y7xC%y8+%L#ch5AAc9i8z?PZVTQm4drA4qFxK5LEGjW8JOw z*}vvt9Q@_u>&ByPqvf7=Xzq3}2z~ld=3e`Spys8S5~(ej<$=QJROD#xyHj?Lt(q_b z0ZY&zY5CTy&`!+u*_MmI;dwX|W_F!0+xT!yY+0K>IGQG2oQPj~qoDJa=oBSP6XC5s zROBF2qwrhjcLfl^3l*Lvx)(sa_w_0A19pH7oH}BeW=ohp=w_c2O9bLB2|*J95fV1K zZ5$IdqQV^O+H_MM)(n%}H|UMdSFeI3yqO|5NN$}YO}!$kSJwz8;d2f>E$rkaPf4}h zMkiLm9?@3C_Q}ffaX0&&e!fr^OVFWkWow?2{nbqbkzb+eMi#g&CXx?VY=b1%=-XGq zaNUXNcn0_!QRqN)WMad2bAF6|40<{_8)r$RS5)7CBE@>`nhDa^4LVt0*L*_{J5*S~ zLhbmFUzT?<{+az`+J`S?Vr$=$m0-UOCiG`KE4}av2(IV7g2E$T^qrF-9S`0Cd@iS z?ma%9`UouAm>Km>;Lw8B*=U8DKB#IheQ!f-AB4-!I>s^&TxN1b5MY)F+6zz&%j8);cL7i^whqJ7f>E{1d;bYYW zfPgy;If$;FrA2dCSc>CZ2WaxYm6AWdzL~PMrNq(4Slyq3Lf>D0!d?Wi9`5Ap128{+ zY#jvsd%ngdejX0jOP0T8>ra0~OMG*71Y6dXp_dKT?kq|=Tc0eCzMAj9wY`37dIB_d z1Zi&y(q3jKJ}i#D9#$W|LFtp7RRVlVxfdG_>d9tgzC!v4jW^;qop4lk1h3nLt9Dt^ zIERw0GUZE*a+lX=b)ly&5gNpgS6eeh5om$_^^zpG{deyFq?w3kdO9PZN0ka9?!;4L zZM+#w__AvJ>*sR>wb>PdDnPx=YnYh-WdK{^_meZ@hseBDCV}1rq&qC4LKjg?wo07m z-R1~`XFwn^!-^?t%MfdTuk8Z8bZsp5VuIoWtzfN^7Z+1FEdYphDVBOojB2!kwLYc# zi&6GBy|p%$SPDrnv0x@zMC^MJ*U>XYwG307&`74@9JAr8a6Y?c{s^p(<#!nsqBUHl!R6@<)k{!J z8Okn3sJ=k2IB^*Sac2Wi6p}N_wx9XTcWC0dU&cY4Y&p*Cg|{B;Nc+fJ1j4!Lw<5ip z|0&LoIJ3I?z5NaDGsE{*!-a8m4SRX=yWtOYoJvu&btQ+syZ*3^(u~T_1awToS5TR( zS~A?ey}VG%#^@M4V|V64h@Kmg|Bs$Xmrlxb?`3#M3wLw`LVRDTXQ^xXdi%ICRRt)| zG%D0)ERH<(s}%iA*~BT`Y*ime(g^Vq)*r_-)hFvi_NXI#9jrucoorpSZs>MvA;WAN z$}nx*g2AO(p>}l#P{p``nz(3GSzQa{;oS)7XyaWR5yG)@v(V(Ky;+_9LP6kH+y{@y z+U0^q09!jjAd~)_&z4l zaNqgZ9B;@Cj`%-2m&BE8M8}fi+6*WmZQQjD>RJhm7-0`Bhktumy?D`Ht&P9!*FgXJ z`_#k!B(92KAQN&h2zgbcn(p=QuR}0boFL)fvs}>1d6?`Q7FZo`rZm>YU``pdk{Mum zwF%P#BaXE_wRhv{s^dw_@fhbmQ9r-=Jb{MpoArpyL*~vqa0&5ub=C(H!NFmD8zl8H zH+-lfsclgWweU{V$u4zxC=i?iQ|YBJYSYS8*p@m)Ob@q8sH!rm$a3e!MiPtoaq_H- ztBto^W%s9KxKv<`ZZU3|)^K0#YiY4KIZ#V@WfaWqxDUg=ZIP?!MC}7U4z1PuJXd}F z8o9MNXi852%JZYMGy9p20F5_H`b@dFr&f1d;WT#2o<5z1i`smRD(};JUg~oTdrI1? zn)&jms~rOX0I%tb-XM2QhM*-X6 zlGS=q4v>;91a;ox~v zEdH4-+l+Z+n^WwDOZodZP5rh*;qV!pql~Y_3MZ{Y{ycjB;{naw+JvD~l^9btqe)iI z6EL#}bB4mR0%oYh#lz6JH}=WOheXXx2cnFr#^VA3>EU?ny4EC+3hcV%bv=chKS7 zh_eE5oV#lVEW-#;`0+D(n)+GGP-NXl&dPs99<+Dq#GA8R>GNG_0ycTmNba>aAxa~lOFrdf zqZuCsxnfm&IIJ*NGyoF&;TeB9{}ime?-th5mxJ`vc0S8L&$`y4-o_QX^S;%y4+rR&eBL4BnE06ZPlkLZ zeLo{NY1(UMje78{FPLJ>*uu`?8!icgr8r1XZdx%Z%3M2Ft7%<&9lW1+wKn;2LB~ z`J=ZGCYb!YbHa}sQ$)>Uwoqmnh2~J2B4ya$^H<)iJUsYkU8RzC9w1dV2tlwU*4#s0 zCrw;k;Ub$ah7CboAtNmzZgULl?WZT0mkWmn=oip5e8*r3+T8=o-$1z!;?(&-bYm@R zJ7WLNS$TE9!>hWZUReg~{FZfW!F_nfZmQ%qj)$^ zl#oNe?CpLm{4+88>YZH(q#)7rWuXLW*uro79LRZZeSh5qAY1#SxFR`>og{LiD<><; zi2o4h7q5bKo9_g+<8X(G96e9=e$D7Rq9V=)r8V^f@cBJodC&{>d|AumvF_MyZR1(-xhP;}UN-AO z-(LUozJ*yWS?D%(*bpp|zI_MnfvldCFX~!cELj`g4hm3Vfzt#9uRVp{NBC41Smx+ai_h@uFk$w&jpR?VVf?1;#dm`4q&S8oA zoTK}^p1De$fMy<`%vAg4<%zWU?j+hs&*_l1p0!S|`VYe}Yjh#wk6pUa>@t)ykF`s9SS1N7d$aio|%?8f}GQMmpKBgB3_Ppf|EktKGZJV z2{d*lRrgz7Ay-wI4fV|f@ zW?CZO|HAci*0PJV1~#MYhkDJ!d`uB3F;;A{b8*@oYFD>1+JWT>Ql%eSj{-XkxcMdR z>^15{=z9gzZW!y}lc8;-4HxCyV(lFPvTot{3P-{?Is%^hsQdzhbGMn*jm-?N>Bb>F zsJb%L=s_imRIj?6KR6R##q>7${9yAQ96ZqqifC2?L%cz23OBf&El&FNU9GyyGv5$Q_>(=m>dqDka zkq@Qod>#mQ`_}f*K>g=&H#7<>77^78)aTyh&o2e2evU;`wHOIJ#>@nTycyBL`gtn8 ztqa0+8VE0791}55cl-qMXAxSgr{}`OYfa!Km)`q<&y_^04{L0P)eyjrVF98(>&e)i zxs`NLW%)v%X>04e{l#ykMV=A*jtNHW-KN2&{!8$g4(K5}?OL_;eTMz-0HYLyA1gf( zO6#{HlO$#8i&j%MOms0UqJL?$ZG4&o1-n>^fsnHhdkRMt$?)cTHlyqJKsOx;h=kc0 z87hns^0E)I<=?K5TsJGTRU;PbRb~l3UF5D5MW%HL*QAv5{Y3;a9r~H`4gzxgus8(q zmC?4E&uAnaWoSamJF2;g$GHY`@?eZgXmlDff{~29e>4yb)%5ZzrqgE;M$ZIz`Iy7l zW;z6JTl9LbN@`fmPKgA~v~_-``-x9Ko$|IEjKyARtj6_P3$gGF?p75lOX9O6hD`j? z0UQRlcLAenbk%$*_qNY#Du5klRKJX<(`Owemr3`MZw9oQd5Rt_nyymzD;Wo;J8t6- zo@G1o>oTk!gcN;W;#&3Se#$}z3+3n_M&Sg2eIrdrxOmm(;rGF2=lQ=<`Td>o(~F>lDV4mGNi zzOU}7Cf;;DBr|K9I64P_D?kLb+yLdp&7IkRCl(2t=4_iQXUJqOLUZ|BjLi-mQW>zW zFS4ULzjy3Hocy(GjM2=DRgF!;cnoRcen`&-N!-4=aeseg55Fbg);bg|@3`@mwS(B<)XB=2`52v+bkLFwL4jw`D`H;a zOj|k|ce2To(U4|$Cx=6>MiaVrb?jsE31qb~Fm!oMhi{`c_T zjx|(9axnJ~Pw1aQ0ziv?8#02}^>()jk8vcZ1!goaWKJqHvZv9LwTY6)lj zdX^E+P94pIW8Tm`%xD^@$7{_a#a1_b7-tehh&|8t+})Qs!vM zYBN+W*@tgA@}^v^RjA#})(V)h8Y#GDab7|96Z3fwU7T_8secZpoOWn0BuAoN#EMV-1HPzu3hTK5`UeF&oAiN^X)FChSe3 zm@`wc$lLLYTVfh?SX!L0ZYg#sEgLXdcreed6g!(P+*l1t{GbRupOD!|j1BzC5d~3D zNy-`L`{sN1hL(9r2+Ohfg|d`wy!ru#Dr$ZZyG9v5E(_{m)0m~4s!4Rtv8+N;83Bh| z>~(@w0YUCt%c=_=YYCPLH=N$sgp^s_@X=-HdSBSWP?S|EL7>rdRg04}QB^u537ZV- z6Q9eW?OgqDnk3en?e1MuX%~A3ei?;#AO>m))UZenyGW?jJ5g7FHceT!?`x9#HcJz+ zJkAkJK`CB{=Qp(kWhqV=g|x)X5^7FNA_pFKa8iS^a}q%Ina8X6PA%dupdR*&hquAZ zgFKn1bofSt3cI|-+FtRr^^UqnEA}MnID|rwtc0zJA@RKG?PY_ia5$IDH2>1EJPKRg zj*ES~uGiFbV!0Oq4bs^Nv<4lenhIr{%F@+N^hO?V&r=aTBN=4Me5L1v9P3A>zzmv; zCSscT2D*E{4bd&h8V|*6UX;bko_MuX(g_k;gzOX*v+V22>9he;j8JriS#ag6YHHVI zt0Krr^}9?P*SFO!db4L6pWN*rr<0Hu`opJo$A8y$?C`)&Pa3?prg_(n*?6!C6n;o- z4sJC$6cexlKAh;TIjp|Pd9HiE?{$k!Eg^Y4fLc)q^N@MC-#Y1PVp1ElgW2cTV7|f2 z5%DDxYssWwcnLE5aq;4YAg|$XKN}1^$bneSYYaj;`>*`faTevmcH68Ej%BPwOk)i} zswmkV0q0vo2ib9us8+UvUkucGvVmw3B&Y@#nAO66dJsL&dC)mNxDYdyoCNB%j(d-i z_SKcfR1*Gj*AJ}4W@UxxC*Usw7koYB#V9!x{3IuBKkWAHYw-plPtf@_hI{mG7>GW4i)lYh;5-P~+(Bag>C` zE6!!tuPY^|J(W*ajeelV;w?hb$-pZLln{S%Vk=77r0*{Q=^PjEOgv>#m7^M+gZ8v$ zIBd^_KX{c(5s4#GpbBIz@cO&JgEBP{uC8cwUz*|?5-uDh_68LKfnp_NXRR)8GN4A) za#1G|!!w{;Q}($q$)87&jzwHOu%cF$&}8O{mxYHbV)YnfXw`f^{DkOIu^NIInGI{u zQ<@0sMZ)2e;~sV`_G`a^bWY6QNn57;FW6oc`*Pj=obq#2)OFJ@*z7)vum&$4?e(FA zF}BX^J|AXSjbPD3IJSTGOqHGieysnuBjvzwNAvZk9l3KWt;Gjh<#t`;S|mDP?&r1+ z+m~;w$f=fb6`bh)YjNDv4`uqg`=Z(_bUbJ1)uX2Joc?ay7g>A#Eg1Zs@3ntMtj*pU zE=qn8G_f$CbLn}U2;aUBpG*B)S;=hD0P;(We^dGDJ9G zyZ#KR-Lw{!|7;R6Ztb73^&W$@Gm?Q=xJl+HgJRkeLWOzbP)__%!i9AhR#`p>w*)+@ z$6-R@Ng27-y6*kA%g`oTAhqrgCNOFNfouC^ia z7+^Qy-wyZ2FW~25Xl=I40!bJjP}5 zym-_1WE;^*+KF-LtYc+V-p!Tq>;UgLOW}cSdNAcEWRL3VHi+ z6gtv2n%Df;P^`toPiOssP>L0_@+~I5Pu%o1vf`zICdBlO1JxmCp1D6Yp~>(dP?W&> zKK2xJ);NAL@IM{W6(w;LUUZ~NRuDseAzxJZW*+xh3}@LReX&NNAz}z2W!ou#EHw$~ z!MC=hT%@C&x0Bdnauh5#vq}4dwBj-g)Y689wXeLA6fu@1Kch0)<2^|ewK%sn4TM^Q zSao8nS(-RF^oKiy!LKQaW+F{R@wK)?lFfXAJs2~eWD$cqHBai(7}ctHMLYc_yPs!_ zix$3OdQx`XKI_(}w5(7gl6}agDT!Hpuk^*Rj!7o}D5<^g;Jf%pPMAKAayT-Sff3G4 zjkdI~s)4Q5_WkGHiorRuj|x`i%T45!<;xj_?}4!o39&v!QcyMN%DmZcM6Mxxp+-ew zpp7BpW!y1wYTI0UCfGdZ8{wJd=|5f#yM7 zW5aMlSgIDZJL&E1WF@(uINpsvesCB4%**#*%W%)d((j3TP><(fah_{?aVn}HeY!Yux?ybMfw>O^mQRQhvfRcG7#|Nld<{`&1_pydBYA5}LzZGOT z9a4imu5rG1P4#u)E%p!vE?n`qONRu{3b$Sr-0>I8;rOY~^ONH-D0FpLDJ`_3R4|*b zkUU8gObQLIbK*VUbnDh z|E|;pb6dLl5Kdo`jmOXWJ2E&Q%BvvfSTf2u|L0DdOn;#&VAW=ch}f=rQ?yOuK57ud zwhv#k^>(oen8Dksc7h|<(}y-wT*koKDKoguhsCYijA%}DS4D5{VOvr#swmLBy{!wn z!t>hr)Hk~u82Q)KU_?@Q;^`6iDo|!BdcbYixw?INc_0$$o=Z)^E|=8Z%HO_-xNASu zY4jKCyT_-ZTXvVZczGf~p6VqyjZ_kWx#{l}35Q_SHhtF)-*^Ejn>a^XMgjgZW%$TI z!9z&9^U@6E`lmThg-1Yc^Sl|nejT@Yi4~zjJ0sK`48iI=dmdkmp$#hYu6HajR)3{1 ztC^@26_^)ac(x`Ns64O#n%)$ZgYP_5KTUby8ICDEal>^`IY~824X`br&rPPdXZ@1` zK7lp)?~b6*X8X6XI;RHo)>^(vC?e6sU!4u^ng0>wUh*AYD)kErPjgSbg4#1y#NNt5v< zbEZiRrMN}=8FMd!MX1ru!5L+nfc}P%)Q%b6m}F{SYjh%q1(GZU%!h*Zf^Xw@Da+OT zu?zH|ba&3Z7gcKn8GdVuKx;PKP{E3YfYdw zQ|3VI6~3RZoC3z}0d=xnFciziGNkSiQS}oaPVD$o8j_rM{WE~Qe|vw_(t;Gbh7=VB zYf4ndMWSkW#n&{fY~7*9zG!*?9#Qc$>IljB@gno%l^tID3IuhrtRnL!K>E#4WoVVsb0V1K>!Z z^3NY!f)Ct9BcN;F9(WC9Fgt|7`g$hUfp50Q>+qgnAI>Lm1929ww0}7sr=(T_Ww0eO z`}Rk2gW8KDc3~0sIA8C>yoLH(#|Gl1VS>NL1(|j`1~A|E;5097O21(Yt#WwV1(|L1 zF#hYirPgo#*x<2-xwWD)%@Ws*(8>UC$LQth>nmq&ecI?-hEg)$=4-#;qADO*d?E=* z&~bVp?0{?5k!|CPXDmz6X6p`Sthg>AXmxqKwgNHX*ONMk;TB`6UpkK$qIj^xFNI%= zo$E7p3@ZYl!RgX0f1{Tq&y+Ooi3yNj{3SDEC`NZc!Ysp~;#idC*|*}kzA^lUMnp=7 zFRF?bAk7(7{GAD_>?vhcTw!rq=W=OkqEA!AVj&4j|N4qvbZ1n!o3o_phWU3FZi@XP z_1mn1kkV>Kp*hoMEjhIT3{Mh=d#B{rId#Hc0@FLTA$dIRfso6!rLQurE2F8%_$Bd| zcqgGs9h5DyIJ`q7agRf$ZJIcQ%^6s!Og3CmY9Brms;>5Q7${0|qWOWqUcMhT3EcAd zRTp_rzA6;wQbE^f8C{EC8DL@9b<5I5BN+`?0D~axLp~er!PrKKtj4dF zxjHL&<&~OciXGg6NjR%kje?BU2|RD!qDe;(jW}$Dq1a-kIoOVVoN-UaIoiIKJpMiX zk!x{WJL0I56W7D|P!!;=-`&p8H;!K}mfHswR&)E}L7PP{8!a)6Oszv4`=Csr1>WLf zIrP)QQRRdae#Yf=KUP>3X2< zO9P?$G5AWLm!=jm<+dc$HQ-K_k%Jw9 z8XGO#G0{o1Xc&42Fia@pniI;z50Hl_>BsGHKRg&6*qY)m$Ck$Z+b>Bxqd`nM4wK3% zWpMUT1Vm8LpP_Y$q8`@?E=e9wmSULa%hi;G(}KMaeRSNBwDvqb$`kGz8U?m*6F)o#V`6EJ?+UZD;aQI z4FM#zAC0YAB)A;O2CF2(3B#%76XlDdRmAy6Z1LbApBbG0LMyft4|W z_tTsIXx0iKzr5r;1iJ_E{-sGrM^OI{e{|!ZY;NvC0C9(5{P+ToWs24hg0cJPzUec` zCS`m6#QbK8bN6PKotZf)gkP?ViaTCeF=-lu!;i;C$`PK!O#r9KD?%m9_lu>*#u$l- zxpSVN!=cN3!+IuyU+P>4Bxf(=1YZ-Ku9JeE!M&^@e2@7FHV##ydT|?KA!QqLkrEf4 z53Y6YW{rWGRIHaUZ7S#U(YhhYzj0h@YQaN*qPv=a@_=@5cShKvIOi>FwB)nU7D8o&@(rivQP ze}u=tn{_HmA{(ilmJ#g`#ac+S&7i-j7wUo)dPqFp&r>wYunldiB;Qp>;-j=dnB5&& z;SY9!>KIufcbYlN^zJ1#kDq<2k}-&j@-8~Lnz>Qq`b$w3jNY9h3|`-6+W@70Nepqn zAPzr3gE~Sy*dshBNbEOi<%Mt`Svu9BgvC>)+(kefi(dH(6kPN9zMd_X%YUO<+zr3u zmJc7uXG>lF9{>+P@V`>@9)bG#2Q)E1f!N6=G3Hpc<%Q%&-sB(1mE}x%{HD_n`iHNMe{A*I0sKDd9lq=AxA%jW z@8M%xHQPHxxB1}z`F~n{D0lyU(CY5P|KB5&_D@IXvjepbdqL;z(Lo1(0>oacd)#UF z8$qYLcW|;#*)?CD90%RQx%g#aP_&v4z zs&m}M{70{#y;eYRSoTg1T0MkvbkaLI?6(8#(0-@CchKs*ZSTW^)#*aRLHk|1dmQxN zvwbKIUrwu)8_1-s-J^;4g{+|;l2Oop|*4x%==xEI(5!Sb<1Q_m}^xBwP66w-EdD%bi z9G@JwgV%?L`+bDnZ};AH_S$&+YdttP>=OY``t1g^bKIil0SZvBzl*XS z-RqrD4kgSS8@xIE5eNmywoY(Zk>-b8>Ne2qu=gI}B0XqG8o`fm+VH-IBqpl0_Kq0| zfPj0)dP!&%=y|O5H|VxsA9P-~yL)Z?dWe92?DX4&N2}Mt0OSZ58~?EdEuT>LaqIv$ z_ETfx290pgc@?zw-vO9?1jEY%U-UbijfjGKZ}@IAZKj5M%eka&Q{Y$bo@kp^!t%$47LL zkYyd)wcZZrmn?I{Nfw_j#sPPRVNL|XGlrcW)zgc_(e7Zc|l5~l(dr6v_;@Pl>utGu2ccji%}q0R_xQLukIs7nGDldAuP zNflTbp^MqEcWc}u{=DoQ@)H?$0)uJ#iYe0j`V>Kd^6pU})8X-|7=MDDIeE}fevJ4s zO-8%M3%UTXd*>mKt(#;#mZ-HAJB1B(aGJ#95xet4Nit&T(ZQ~vAGhBEWsZXNWKIwd z#~APCiZW|-w`m(7J&#P8$8d{3?b_c^(lI<|aqN5r;TDXViSr)hRgg4Cgv7DYk7)$k z3g{v2y~xjto%N{Sqs4c6l7ObPm*2bfu)Oj^crW;@?W4+dKX#JZ|@ogRRSLIm7wv7DEj) zGs_n7EF8unSUP(x?kAh?S?W*mZ5IEgecJ0CfS8(%4L;Jkf+yC<+GZo#&YUB7op@v_zL>>+ibW()Rq zeKmO~j7+3w)P$|yYuLJB48C)^<@DLD?>2GtL;HPr(ub{6c+~E7^!Z6(d4PbD ziRi*^?{|)(+5E}_UfelCb5koL<#x8~ex8cz*b;(k^^V{B8#BUkP-Buy@T#3e6S>3u zL{~Mrq}?_@VdNR{r)hrr>G9T<`1HuC)e$WP!DFi}-Us~j#Qb#9>&UjAnxE)O7ytCk z{M760%Ua(mAAIRSut;&e(7a8Umw_IZK#^u$a>FiLb>y>tCU0lP^aT^K%Q&GyG*-F< zN;&~RG`EaVG6P{anO&I>banuRbCet@X30Y%H#78Z{+%I^;BI^pV~)(?GuZclSRHlt z4gWmU#+X6XCZE;7beGD@hV=3#CDL6DK0X(XOcFiWXN|!0@C#_lrPbZg67=iKOF* zn+wi|p@fvFQ58N1>^Iwg>ECe!ma-k0yuL?!GE7}* z9LG*4r>5_H*6&@Ejf400;kk$4M-yZc2-*)x#Yv>xcojvNjH1VS3#jJ@6_|a;o%> zfnIx{H->Kx56rfndaLx>Zx7$KVNZSdmh^Yy&$r$xN4?Iw&H*Tt;g6l;H~YQTk6l&e zJ3qyWh`hZe%@i6x%Bg4ZC@wPDocLSQ$CL_hggi2Zi3U}b`CzBNW6t47$`n>BF;zk~`)Mu-KeDp<$dM-_5 z2@7UFfAicwd3oGxYqP}EcLy>ws3{LFk~FzkTzEf4m+aGLyOAPwl^0PGoOC*`H72(% z#!KeDZvDkzK8xdQx2#5dNk^+%h0l3&-H(mgd7j<1eaV8_I;eX+L2V20V4^36W_wz-8Xj*Wls@Td172VFE#52EyJ5uN3) zK2ycD8cYwx=qnurlXQ?rzj=h44v(Vw`2pRj+ru-NStJz_y(!GY36wap@bI*xaT_)D z>ZH4e3SYmb!>bn;^1xLr+UfUCP$XPO$wEa5uk^CzTz|9I%2C7cBi@)d)G>aLMg|km zrA$!K9IZZFM|sE0vY2ETG&E+arNbuf5Zl>5(yw+)trOmd=&6JrG{R=fi+>a#@e~a= z{hq3w?mLk3`_ht&HYVQh0LU0S6%M-x?{Vo9R$X3Uua#eXuO&B3qBwRvze4Nyn8OEM z8O<yBg1Mt6=dp3Q1_Ss-Zldh9X-Ugc!bKc6;& zHGZnGv(`YmZ@iF)HUGS`*1-Lz{KA5Zt~F?Q z)aVFR1#&k37KbJE+!oWxXuw*ezc*ft1}ff>tc13Hm>VU}O+9cm{I_K_Gb^aEM@j6zMP&`)+L6rOgWZXZ`P1JbuHQbL~UNRi0v z#nE_t1?tB5G$56iC3{R`j6WRB67h}uF6okxgYI`6(9JEU)Vpn`)MK}lzO+b#ncHIf z*zJs4Y_HdWtyb&6K+G*hYJrW})}1`ugx11vbHTlWh4l>{C>zNA|LpyHdmA^BC=Sox z`V?)?^V+0B$)bEoV#Pj7OO(xDBvMOKPQ0^ucv@sj>WCsaY|@f;Z88fdf#sJPrKr&bZ1AW6SQlS z;p*h{przTwu-yx@9hw81?furthi3OURS0%=cFlI^IGbsR?dn;0jrX95D`2AC&Ucx1 zq>AB0jCL=Kc4$q~o22b_jdl_>QU;86b#op~XS?rALbrPZ^r_rGYH72`u%l>&-o~ul zI9VH89k-4%Ha&BjKr2w(Gc)CVn!zi(n{~3u5$$%+YS%TQ*$!IOjaH5Jr|gIoh01T* zaK9NqtGZ?aw09B9^cN6~Y`UBN0@%nwP(wIkqy5f7)8-u%jwYn{``JUqpgFec?DtNx zpmwcR_;?Q&)8i8_FJP;KkNdssh~HVQfauL1PhDcp)V<_^qU$a5c5+F}L|zQ}C~ z60!T~q@Q^VF`7EW>nl%F3_P&@eCugS+vP*^=p-e5 zKif^eXV-MTB~RzN-_dLi3{YVodY5T`^=chJ6?fsZaz@6LkBPw$Ks>+%a*Lma` zW*Cq(!HB1c()3p7<5j|B@+Vg{K(nby$bHO zjgynK*1cjzcUw@yjvD*cakZP<7HHDy_0dK|BEjAE$7b`yY=|Ynx6=9azbHi} z|BMzYc2vioxWHZp&Jv?KOh{%{m~jTA@9J4FlCYGTV_7!k(qq}9xiX9M=u|1kpqEK4 z=v>s-ppl0{CBRq&$WC9t@o|IoBj7C{U-SW{Ax~*@&|8vPeo1AEy$!AKF=>F1SF#Brc1E&f7EM6q504NH3 z%9)V9Y7a1*Oewq4J>4jBM)V8=vTl>c>12k@*a)f`xdRS1sivo ziGO;zxbH0NotD3eeDqgdz1{;+cc87(;;TL+dNjXakUQFMD0Jv5Wcpl3iye_gEF-j} zf1eBwldli_n*rvc0Ljv{IqSt<2zZ#L&s>* zI6CU=XSl)B*a6NxWX5wQcg(DxO%|d}$O4er=B1|XA3&eF3D-IotRvVGz^J$siJ`AO zvopdA85JbIQPrGN1{Q%L@s$jiXJwuSkvW2n{}0ymZ4IRI;FHmlmkuZAmJ*c3U=ZEj zV+|f)8A>2u28O-_q@d`28B{>XNaxC0n3>Wd(4*ET)NvAzs2`vKzt-G5BjUwNo||S| zZV?9gqo=m-5`&uqYw2}yFtkwcl#{D6V@l7JjZ$j4IZIH3H!;1f7l(&IfDadRx62OI zZT|a14`&7g&!c~4N5xb9_Zn5k85gj%;_9OhjoydM^@On5xR>g;@=hqd5r|qj_^xi{ z(DqI7ws^SVtqA=x4EnHhcOX!LU4MTZbmrBNz`s@`jLfNHj4=7!N^p1^r5{yz6_Jg zY)ALMf#_=RI5o>sic4N;hjHZY#Huc{eZWWQmIXs-lzWqnv$D`Zq>TwlX2}fl=BM+eh z4LaUsYD!&~Gs_?n8XR(C$`G4;7jouiOir`8yQi0qYd*%R(}P#!GP(uUln1#}XrC?5 z&++i$w_JK4vRa747vNxh9xLIR=(w4_dZV1A*NFVHYRDCt?Og(M9?a$w?Fq}9{!hqoCf#kSi@GmSG!}*2M zGctr45Eaa!Z)Z8}6JG}>?T8kx)=HGA=GKw#1Sc3Mg=M%UsC>U1yCblNe)U0g9mZpA za~1SKqk`3sFCw=F>hvuik$!+=z$=5}bePOE6fGr0Z}oybPkx(FCgr$u{A5A(A+WkiLzKBjRBHLldy4NQ}nOPmNDK z@k#HLA9d3}$%8n-;47@fJQ`x2V;Yq6ea?f?B%y3uGVSLCPR;4{^>jiQZ08Q#?hJlv z9Ubg9x(7Wiyz(b8P?8ox;CY5rkQA$@j>EHPTnL;}#5az#K}0-egNk}pCez85fLK-2 zqvDr5o~rmo!zKCSQ8vH9QR7|H9Pm4ltx-e-2cM%kXQP7E8c`%Y%xZxtueFiG01GRW z92s+^A2r3$uzm-f<3_99lR;0&O2-5>O;8=Hq*w_T-^JymvL27OA5+=0$sHoN#Tag@ z?B-avIUu?%&&KgkoPg*G3}+%NdVI}+779LZvxO1L%BL)B2aF0X1p+W(3M_{r7S=jvdTPGpHM6Ist9_SVQAhK4}8-?)x} z9S8Ny9>h{u%Z*lUDDs?i&MBV3S2Z^nmnR0kdQw_ItQt|tKytfp7@Y>~eP=&1gg`_1 z9nNiw81XDyLR0JaCskS0HGi4dpp6kcPPJTXfVp2rk)?Ec9F@~vReqVB=qdC;Kz0xJ zpMU%9_t`{qy>2+Uh~Qe&xPx^jf3NoMFHujT~LBHgo)2#W-ZK zNn4i8zh?OrkMyK71Sr^?GuE7PX2~;A^lWZ!Umduvv+FrV!ud&0-UdBdKU&;Lu@~^)2Cx#m2#3fG1aV_*_k#XuI*{Jsb+e)HfpAqle&3ZHSkbb zZdLv*vbSpvwI6P)W+|zJd6b&k78@UFZK|*Yt2pM zQokEdhgZ3)EZTd;g~^fC!e&LH!OFcHej*RAaYw>i11=}XL zfOKQI;v$9654&H&9dOJg8AsS)K`9q5q6zRO=!<7dDjPB9B0Y;K0>Jvq@nSJXIM9>I z|51&{o9Pl05=T@64+oV+ea=;VLcwLhIZ`f;_-+lGlxyZemz(LF%M}KT`4ny~kxe9= z*8q?QMf2ke5oPK6?iGc$3L>2@V6+8}2Z)h!N&5ruzm!E0bJKHnAu4+(G%YPQkV<92 zEf0u@NqFR{!sTd+g{YIDLRZt_avaXbRDce+T+MbyqBP=SmoO%2Gf92R(hPQU84oXo;%syr4W@I};tD#K zaO^hK%uH@JZFr!CfwwLNSp4L;qnH<`@I203rZyA!)G-{>ewES64(0`5-DyJEoea8! zPWt|!qsmKC9@DQy)WVZi(Ef~;P<<$|MN=RE7WX?#9tNA|*5t6cKDksD!vv@EnrkLs zg>yc|5VbMoe&Yf>R9H8hOhHD5W3G0a-Ewg<7|J%TZDUQ@Xr5hCYg=;D|B6ZgR!yBi z#ccXfvJkSBcUw3SC4EKWX*`=8bL7TJnfb}4g>y@mXZWgNgRBMCCui0OqMrr77MLHL zX-i0^*PF|TP8v#3XbN#SniAZB(^-TR~QKo9RGXd>_sagNC^#xmZXKE-x&sYmhN| z2t#}DuKB*z4k&*>fH_opY4vWif)c*&b6u-&35O~vG~ptx)tU_F@oW)XUq$oz_H4XO z1(0CAcra6C>k!nT5DT4f!gkKcjeC914Aw@%+1wj~`7#V6c;+m*WDaM0Lo8IJQliq~JgaP{s{ zrBqDd-rfJu!Q{sKjdrKq`j4j7yI!t$t0w^Hd9UiPb{)O1 z+asI-H(Gzd{cJb z-#L1}r|48pMBi)f_kHxMzkKEB{h|5upx=>q(HzX{F3elIJ==H7L-X9;X>x4OdVinW zTWG!B_1q911Y^^@ec^&$RkW*B)4QOf=nV4d#>J)i}`m&y>rKQ$+eHfE$JEF^Xd-Iy}eDl zvYXHAzTTyz;`fEU*{#XVExz8Flt50*cRjtazD}`Bec|by4LNs>?W4JwJ;Jw3zAMpt z;Mr;Q`nR6mn4-H_rh0qRv+=v5&i;=*e{bK4v9dR4*cr0S-ae`osyuZ1`!LUj5W9N6 z%I_^>uRWT_OHXg%|C2lM`b#ITQ9iBifbzy-!J(5z{{sm)P<@Z|{k`MvP0Rw@Bz0+Y za*J!;X+E!duBuyqv6I_7S9O40^3vZM_2jhXp|kgk!rnmkR>RFLJFoJ4=c?%Sop1Ad zQwe4NZLVP6xwnh@^8(CsZx{8KyZ+vI6y@rR^%q6G^X>=r7tiy16SoZBb(~sby`IBs zoLBIu)$4m#?0Zk|G)1MK+v?B1E$W>~E3MC)-hwb&c9Lrl=)%DUipa@8IOyalQr~%c zca*y4lJcig=}{nJ%vHyD>f(M7WZ+?580t@Z)!9rc!%**dOy z3u{0D-tG%xm(*U?dK*XGX5-+KXDwZV7J8qa9C1Oo|LC-ve&ySBNfRVOS@RJS%zz60 zAMQGSu1lKg4M=~pNm z2dmyYf7xAE9iun0T<5gyQ9m6Dq~062gvj0|C(4tPPFFW;xKu#BH_JL7>aJrM*6Qe} z`5x52=J5$A&i-X{nUB)mXv(2P@GD%>kWcnIT`YN`3=5yy{l?FOe&c=N0n=6K@9E+E zUCy=oRetX-7K6+=SfA(g#&f0FXnW5nmqL;D*4EwG-=)l?y<6=Mpo{ez?fqtHl|bu# zl7Ar7U%krdO`g;zN6kU^pzXXUy{hN*E;6&a6e+Fu>Cw@k(S3h3ikIS9Cn zFjnsz1=OVy=)Lp!)UEp3y?a5PO5pF!XZRq!+m}#RL(^YqH z4Bhek$-QHF9x}Rvb`#F-PWOGI-TDu%g4<}j_|~QJck$g1ZyBxkRNCWR!?$Rz%L?@t zQ`hq9m3$7+dml9WjnaKu2&Wonm_6gC;1jqyxCF^xXUO z9rQulQLcXO=`F1Zxf6GpNxOs2fm~fIcTDHM`(j*ot+y(VOxjL5&oWO>&|75{Ex1{{ zaIKh4WvQjxSh$`8RBtk#95vhT`yYH4<5#76yN7p~&AOJRgp}Jq1s$s0Kl)^7j4q?P z>iyG)W?L|wB0;zL@24$L2vTl#n%=spYM!gO{rtOXQ8uq z4_2t(=?wgD5$d^e2R(*SCd-vkm zaDF#iOrK#bmuD36cQ+uvP^wb6J-pu-JMib#s~7Yy{IULplW*tM-{9FNrWD5?A=A5oW+xHe#iceHTE!udE&p* zCB=JQPe)wtm(rb~@06-=j3oFRkI=IlJ-ru(uhno0+mZZ}$iW%yg*k8w-=UAeeMynxTmn3_2W#@pUwpWZKQ* z0%K})k+{HYN6TUKJD~%E3MklOG#xI{9W#_m_e^=qUxy12M&UR~$xq7$UkU*FWaKQL zZxgG8qt95s8AFpbKsXY#rGW4#q=L@K1;{Pr(;g=Raxy(%+|XJgNno7WIJ~o_6b`Y5 z&Nv!fAlTQU=VOXJW)h;aEtR}ZQh=lAb2J74tbFk-Ru^E-1zLhDWTXCcI=+fwKU6Lk zi`naE&u(sRwuLy~p3X0xRUZpFyx69V#If~{t^SW`g&tc&KTd<#&mtUsBq9^w51ctu zEJp-r!Q8H=i%8Bffho=7&lu={(F4R1YPQ<`fQeNk|{9HJR>p`ONt@?M8+)U%l?N}FX(j+ z`#&|h%>aG|_4^}S7Y~AWpWw@8I&8N?uPy)g|2BHi?&;G2F46GcCxp`c8Ovn%pchyh5}vShTQA7`ltP7 z@V?VI=pk$@kk{I8_V%#N!puXx8a|Lbyl|T9R4-H#fZaB8iD=4Il@R00_9>*IUArBYsGb~mf`7xQp-84oqFoT`4!IehVHx@755 ziNd>oqfXd%dpNzW0v{Jh4h>pAzNW=oj_@_MviSAVhQ{b(SvUbG_#s)0;_3F~TkRtu zI>gn){oR?b6JBK8-^`+G_ZR2~4_|B~sE7;$I~0JN*D(Qb!ig8o}}9*@Nw{ls`O2w8y-bMt_6?hkE^0xd>&M&Emv@_YB9ER zE_TR;-6>p_yATEdJh|exbsS)_9FHraJSTz_ZL&ZSBg!)bgI4zn$3lO9%)@#e&aWi= z(Nu$X3y7Rh$#bA9z$BCqxU8(ULyI5416Irs|w7M^APldCF{|Q zU@{Hj3(!C!(gCQ@WMYF+fgRQt&y3%3IdJ-msj(uwU_6JLOJFmNz>?7{YHVm^5G?&g zkGdl5VE<#2E^=G-Z@+&YR2pMU7z9WL`xI{!?4x2%H?0WuzKdvnR~15xT2PvuL})dM zyh-6ze7_M?u;%#|N4!;8CHW2ii6=11ena~tS)PdxB`2gGxS%*}F$4!R(DPs`^G6%$ zEF2j~)+9DHZOocEKE}VoHRUpd+tq&KO}~5ERD;oVH5{og4;x3lrWip3g3WB0)P>@4 zFwvEfhzpxvMR$n+q`F~{GpfOid({aRrMyu1D5V-GiOB+3la37Rm~4Y+tr|1XF-^NK zClUZ%8!PH}1psFb9Dt378mF8^c;^xssYZZysJdXUkI|f?+&(YIxF;|R*kWq&;!TX^ zjW8bLSEFcww4ob4A$=Lr?N1WCMzf$U6a#)frCGqGgX5AJm%DWJpUKmMk|4lt7=+`+ zfP?Jl@EDvkw{zUnMw&4Jb`%K2owVw5Y#a{38%^feCre6Dy_GyUQq8^AeNhI znF=!bDIQCdgdH16MQ~E0R$|0x2UQ4bPz=pVriKG|I^Icz>2An?s2; zj}k1begjG|rj3YhXPBaEa`Bpv$61)5RYg0WdF$7u`h-(??bxh*2#blRujxbii9>P8 z=st>qS^Y;FkHh%Di6PiZbDIje@IQ>5Yl*Jh(D@? z-T}P?4*TI?6rC+Ec<}`c@jYpi(Y0tWosoT{@^K)(K0au^JH_mfM`kzdGF;5Z71<7W zpHuX~t#dC`R(W&MT|)(@3P|F%F7k+v2c!4`!^N~C%dZ_H z|NU?0)$`pK=KEj$<+snDuiyXvnD@Uxt#g_}Kzk27makp_C z;H8%UiOiRo7MLVLrHAzw%fMv)$sXE#dJ!ox;cytu7G!K@@h&VoMxuG_Maky(q{WB} zYj85o#e6!}%2Y@_LjdB}MVZHc&rTI~Ec@XYWaY;a4ba*!og1(y^Z%YB?O5xajyQT= zqed!$rz-Uz0Eu+{)My+{_BI@;3FFzG7rK@k)B_qTSxok_I37{nLZrL~1G;|MTU!$z z=Kha=4Z_8}-F{2n|DU4)Aie+B>Hhy}cV~V7|AX%T?ll+Jb?utHPoB9ix6nOTI{;kL zpX&g5@7;VdfWjGGMD)Zv2~f4cDlAcYr_(fI# zY)6Y^7|uY>qSC1&IF8Tec*Bh`8FIwsi?B#gG#_FyAG`=*Ng3@U)No-4s+bXqbkOb_ zKPP0ogj)gKmFTq0u?@^-aMEFY8=xs&{?CCBBi5z?Jzf8=;msswTSIsMMJ?#|8l>Y; z;b2g(P|uAP!|fVD+9O#^eh1hCmjOQ(2;r~BMVp_C=_ps1Y6}6R*ANp!YB?tHI8vs7 z0FLi#npbp-XJ%>}!Q&h6`3Y(S#p-~@oO3*ZfUGH(JWcr37SB`HKp%8x|h z67GO=dB?-l*(y=GWIr4xtzh1RQN+fmd;m>v7fWD4&^!{vFQojgpu$~qrKIHy zZs5Fnmg%GdY7~a2p#6@4RI_#yIq$!?}!o=O8XaR zl`@h=CF~J}Hx|*o;24o69F%=G)A=ZPY5;yJx8FEAUyzSh%zJe{T~eA|VJ}jfSAb)O z6_OWH!k7rpqcP>=eZ9pe*^6xyICs;foFR#?pW?}AdILn9MMK;-%+M7eamW@cSY7t{ znMc#}Dq*8pOyLwsL@NC$uwn&I6|wmUQk4dzB}qqJaUDFjyBt|w%EE&Qwt`QcQ@CLp zh8@x~;Jz&kJAbxWN7{7QB2db#!wLF?y~Sb1K~SYEIi<`v2+d>3S=Ed~<_gV{^JklJ zgbjxbO7}A3IBYmH#}&;uZW|66nM^Z|)L6+VEly11P$e~qv`*aoT)B{nl7ye(woR6X z&+O_Zj&@B3NO?;V0)&>dSW{l_5pZL?4LV+?NrLJ#X7)yKa2la|9pW`xVo?Ir&B6(v z8V06f3fSo%EDBKGq0D*TJ`GN|=Hd}I+Wut)pKnlIhF8W{k4bufc-_8y?C20Cle!z! zl>8qPkI(n#*{c5I_|50%x3RkL^ZZPz{?d&BcS=rh(T|g?1Spnz@U=46;3Z+~!V22_y6cjzQ=UQ_Sgy^XG zNh$c4?q72RO0IGUP!|Lcu)q06b64b#f**pNw4?k`d4^6j_kELDsK~E;a;fYEDZI&E zI-c%_6x}+3Q5_%vm(t(#z{kbMdhyZi)?40Ov|QvXr=hOT+XVDwBSRBdUYn@aQkP}* z@pPzGO!vnRe*4Y4%Yq-!H*<(h@E>CZG7kUf>TiGRBO>60_~gxR6pf=r#8X^layB^f zuzT=n>waMDrkDlBGf3yEcZYv@_Wr2}I)tN9y@(2%w`EFks6RG|5W0_i=vj;3`~9pf zfnvHndqY34XEdKP1Wsw$=yT#%gjXZ)y6ylyCH9Y=s)J^BG z6={Wv^)vkuZzo3)pLA_cT*AgD2prw_Mj}1gH-*F z+y*gJt4)@2CSS6!G#qV9tkN+k@16a@VWV{f3bKH(`&tdJ2=T~9!kQI%*Qy!q>1Ri# zYnCSLn|oz#HL+7y+H3Os^z~R}w@GrRb(b^8>OH{8Vv_gi>nt{XcDIO<`(lDs%RB-E z$yp>dNJf*(g>$zI=Mfep5^KWF_@s>x0RqN6;L2%g%dk+h#P*IZu`>b|7D(ee7jtP} zTMpc-@fND656xRrpZ#CT8c0%R4I;w7ENd)o7r&F(5j6*49EzD;3!Rdjg)73GrD*q8 zVlS#9rrip5D2}1%1Ph9F#@yRqDrWS1V7%v9jy)p+sl?Sbr6+|XZPjyb9;9rkYaKM+ ztzraI(JeZzqEZ2nb3liSEXoKVt~xHL0PMLMSZ5_NeT0iD2MOg2CqA(Ht3?GE6o$s! zmnt@{E0kAA+Kp+mlrx98_hGo0GeW$@nI93|d%)86bk@+4f4y790+W9c(MU%*&YOdG zpOADSFf7fq2cKnwkMyhI7i-gdl^R|HVoOC%BB3Q*2$Zb}Ym{PPfmR34eX}&HAXaWx z*|>+?|4NnjcVx4CdqIT{2gx?S{RVd_rib6P-j-akw4J=8cJZtqFGPpB^URN@{?f4i5MpJ>dO3VNUu z33@fRorjb6{h#~Ui3#~H!<`RX%_GiKuWc#Zj2IA0fxpb(yS3mkBKYPpu{kBfDRFL0 z%3O!Flf$Ew79S6Sy4qWUXP>+DY@by_w>CTWl)gM!^XiTdcLXHO>(x|$mmdknK>J$u z5Uf{o=SWNCo*|z$mR^X9(!yG}bs#CU8oVJ%qto zjEQxY7ncisJ0FJV@kAas!sjoN-hd#=@ByDv^Mnft2t(Bt!E_P@gl>Roc#`RLL=rAx zuhPjV_^)U_MdF~_JC;tu&*srTm+?H3knll&dqYqBWb6y`WzNhVz*JjkODyS>Ln6M4 z0>|*3m2z?Uw_%2((qT{{(cs#aBX+2+@Frn^Q_u($Z8!6UA#F{M3l_h?@q%4^6W3^$ z_j-`GeVzKNo)p0)x%qCL_oAgFrDWZz@Iq$E)3M z*YQ7pR{RgG`8xh*9sjeA|5?ZXtmA*y@jvVMpLP7tI{s%J|Fe$&S;znUA@M&$v|K>^q36~xSQTLyM#;_Z@p#Q+RN*+Xb!gl>l58BlC_+~j>sIY z{w|?25g0E2EaGzh9-mLJQlU(h)5cu9FE`W^D&2}abi}JkMUYU^%iQpG&(OO?WzqP%p0NOOj4s$mwi^8F(2+#d?XZo}*2BK8_}pbH90BE(JX$ zo>y~*Q2>17nN-jjYU{1#l~OTQF1IJYW|XDKA?VQKl&()Iu*y5X6p@uVr&6)d;=aLe zf#Zw%FToE#1mEG)t!@H#wA`hZ^;bt8NYCl}-4~jXvKl-Ic5ctbpCkPRLE}xC!C7NZ z+qp>;|IElId~Yu;nLHca$@6E9PpzQ5fv7X_@JI;2HWuPz8;$+$ku^GgWMRM`mB3;? zHi?k_?w5U_;+g1Ba;y6wbRAs_M3T#}K43G>nep51j=>RX2Ex>iuACZk*pgPgp19VR z=I0mUw9cCNzV%a+THX42XypS$jXju-N9D$+mVO-a2&i**ISNYNOrJl*QLRJO0!Y+6{!%OJmW~yhuOJ1W+ddF8>G@^~r zU;#R{NM0S2br|mbSKC4R-D@^tqp|AZ67IS*3d`#HbrT6gSG`}S9&~(W{b;jWK;?#LG(Eu!yt*M zBCKTOD!TOivvkJbY4N-f)z9HLR#i0^?qxK*8qAjS*))kNf(xqveXE`-a5*i{(w5A( zpFy1{A(Md}2M2J`?Da)Sd)=@3b4K;nrnHZE5SMU5#P9-b+Y2s#f(r>(Hd^oLRCn`u zWXcI>w#^1s=!1?KXWp-kqH#FA3J|$k$-+ZdkFDU$^||HXq|eYXOXu-s0fql+j3xR<}uBmomq981b@H+Hkl{kQazoJd{IkAHZ$1H=s18j z^BI+&5}7&8mBh{i=!ouv@Vj%ZNVSc3M+1dcrJ`YoT<)lyhuwbg#OQBjLyL)VbZpM< ziOt#9V#6co#7P-a`$Y4aMqN3x)6`OBIZ#5W88B=1m?#U}2XA_mYBRqrai`7PUo-OK zmz2Sd@qi&7OGil);Zo9bd<|n^$O1j(K`Anfg}OD?#=3aXft(WK)+9y^u$32L?1M58 zF1yY>>h^!#+1vORxvIHhOgwrKt0JvnGQ9~7K<6X+^J|YP!pEl;R;lR4Xaj8VVo@X2 z2iB~%A)NbAfXt&XnNFx)WONSaZ4AIlZ)7jnG~}u- z%q80I!U*C9liEBaAi3GhZS+9<=Hd2^cmKGI9BKt~4IPwhJDj6N6i{X;G;@=dMn>{9 zeKc!sT-Gd}jL^F~V{@$7)e|whgtk3a2pTr8b__n(@;d|tMJwwFi@J&S=4>vJN6D4P zH;q2M-B#)j^nH?o#hb zYKD?`t-gv6ky!2sGzVw#B2k&395_F^EsiEbATqh3?-P~m#UkE_5$${VQNBEJYY8)2UWcv6!u4mpbKAYzkg`e~J` zJ%HVwAD;VMs0iLb;Ga|9YLhyDp77Y#>A zI6zov?*+u1$6yX|d#(5FM*pRyQaC@IG z7|nyd4YLx;O+K!en6d!yRLE^wLU87_22kjW2t8>ay=E-t_IrY zoG;nI!q#o3V~l1|Rp~(% zC(3S)zwN8}8 zAtWanvgE#_${n@nTU8c>t(!aa%LnZK^Ptt7GeRPGvX8RI-`UmDvkAJA4<( z_?y%o4Cp~(GNN6vv#b#2H}+7Q7C;sE{!3}ILW+&bY-Tl7Hi;s?!={qdnabNynyd7& zeB#Wb6V-LQ)EH*m>CwDbVIE=EsRszuEJYI48avA#)YkIGM~!+xh~`#%F1QAg*4;si z%K8PtISxv|wu~i76%7%w#<2un@1debT~dbXhpc@VahmPBlTn|hDB@ldpm4p!h8z&DvC;tnv#T|SrJN6Z7;fZ@%;&DC0njK?3G^s_)ojED| zG9a%ZLw^=QJDL;m7YqhIyVbT&MYhLwbQ+1+DtaRk3P08tUUdv#=3jHd+6yhsqJOk? zsnDA~+y|LbnJv1DI?y5;I6Ssth@T}eM${N@h7((&$mG$DSVjbT=E;)Ix9Y-IP>b*w zphIISqvPTqGk(6J!=yD|1P=jzcx?JW1cF#{hVFvdhmdbki)ZqYY@ev3#Us{nq>CX5 z`7WL0E6wbm+1k%&6T{sLeNpv-X^8h6V9Y$sMz%Q*fAxD^lI#oijG~gaYu}-|AZrC` z!MeXzguMG*H|9q>C;x3<@y8`wxYhk_?A7-FVbcD+Kj!-Rl#lv7VLg4bN5$kXE!2U0 zENG7~s~~R)M(F3nTuP-Wnp^1mBR1Hyt-3Ft{_j1nbfn+ia71&5$Gbsl)GOtqK}tA5 zb*U~B{|LPFS5#Q*7Gve(?!F{R#y|H?jke|9Z@-p_?H{z0Zvclnu%@VRT9mUcX^#__ zwjEDy>E9RhY8ZyB^2(hG{@l3w`Rfv=PK{|jes4Et=Vsd8VYn|DQPbYNQ{Xy_@3o8H z47IaH)+gh<+6a!~g4Gd~Jr8d zA*zKJsXMk_JX|jRdT{3H22ve)R9gxQIQ5s^mdvSV|IXMYN)gy?2U81OjxbS`Wse#U zAGzA)Q_L`&P$nMkJeZ9r%BvIf876ckL}@pn3bD-z|s98WPl3O`ig zpGY0e>6FgGK}_$;uxmF8$W$cen1Ng<(P3EQ;gftE)))nmJ%{xQL+>Cwkj0Bv9>w8f zp$JNeRuR-j`j8Ad-fB@KoWH}U-JhpoNGN|O65jF@hjBk_A(88GMP(Al>I96qquvTt zDp+XeCM(fea-g9`Qgg|n)TA&3qBT>#O9{i?OM+#j@h1 zN&d}1;QXDGx2xUb!=4MK|Hq3cmkZIQ#kJ=Llc=YY{RilL$m4(p=|taDhbB^ws|CGB z)>6xm#&@O_ZPajLu&JYs=5uQ)HB%BM;!>1i4}zWbDwxhJ`~xr+yqh=hyqbhx3MD?&0K3 zGmgFQ7dvdVGWSo{%;Lu3tgWBBe%0mSCJV-)=NTP>4hg`bljxlktP><|ixB&pmf!)c z^0)mt-{0}`*P!Kd<>Z&>^LMs7y}RxE_x-W;`&WMIH_EzK?zijzRUhId{E-tJ-7f`vmy84 z{)s!|u;|o852t8S8wJn!Ib(+vN-NY`@(q?iZ(Pg zk(s7!)uY6Q(MkMg*NM(iSm2f63A*TA^+rWSrH-`mNJ|H%R74@I3gk1!iW}X-&VM;K zKwa^TX0hCSDm*u@BBA`BYdkmXpMn4_Z^s1Gm#W*9U-C`AqNjb$zqhmPbM8zped+T) zw!fdvSNuEq4Lmx*P97UO^*Qw91)_)b@CNq*l*J&3oUYj6;gwKCX+3Iwf8L~Lw$Hc8dpB=i zyT#Wef44U!Ngi%-TVMDM$-mw0$ysE^6_4h2MsKryNAd1}J0pT{KRNkcf-KlS0pFvN z&hy;wjjSH87bANGkudQN)3>vG-HIWrp=bet9*-c0gUWgaZ}P?Qm#PFTAHG^NUo<)e z`ZB%&2DX&7op_cUJivy5fr5;_r{#j(u7uX%ylvQUfxL|O zM|f;ncuuF=zv{49*tPJT@yhf;JrweA1~qsa4oL+Y?ke^`L$y;Nm#m+z1Pvrw%hEto zDU%8XOs$I0K(6ryr+D~PKX1TW!*kKy183Jidw0WU(4g|@!H=4L?t3zb6$Rc$jhY)4 z;B3x{Z#!67)QY1o7;445YmzBgz0?DF3b|Vv3c;h=;)T-^llV8Qu zI1JLEqHEEw?TyR3Psz3X~m}R-o7qPr^3swhoc$ z#!y7oe&NmmSHA^hESkUPt_Q1Ac~$vetVKH&vOxWtv4MJY!~)XLx#P|AuGPD3S!cx{ zwRH*{BRKt`glS!|TW3xVrI-q`VE1Mu6`F z0*~us@x%xFVbP`JBk_zh$e7?9qI%Iec@2Vx{;(H>PdI?j60e~e`b;)ga&rt z1prUY&`2Rx_|+l>#9_l44}Vs&^4DR2twl2(NN`i`7LY-oEUG7tTyxUWnP(B1X+HHP z=uX2gY`Q81(r^g}jhHez+spgTf_e@=%mB)QKwy+im#( z+q-RiDGEOg)f=0EEtMlM5_wy+-;02&ykWmf*6|#%Zs*Y=v0GPulY%s{DZKV2(5+UO zvFo>R!HQaop8RMB{Aom~P0$OV3|=P{OAM#NYx@(&C;(SfD%)a})OlC?kiiNTR7ezU4{D(Kwq)b_BRuPWg_9H>7|(k?e`RFONJH^Zf@BGQqbUCJU`T;g;z|i~ggDHZP=@T*M8t!f z2u1B@YGlsx6CEiIF+{I;a7~X5ak9NoVLJZz+1heZpjH3nIMJ4oxogmZb9#4T)&-G$ zKfZ%M*qA^h0vwah4xX@38;mmUi-Z*EE{-pP>FmY4h-rLi4J`{ZZRvpf7K!1`NFy&; zoo6dg)NS`7Bpzx_Il$u>nW2Ta{ov&lWo{C>K?MQ_7&w@CXOXYr6xjfcU|t=67n=Dy zkFS)`i8P5~$>;cjSTw!&i2Efa&92*2OR=&=j4{q8T~|xD6eXrQRbW2^xgIntyT2Kc z70?=b2@3TuNB01w9&6zP&FDFgh!xUWx8cO}-ep2ZlYG2ztW-2;GK#OSr#XBO(`Hl3E=lflZr&cDcJ&4K1Uzv_uS38p-vbsfo$U|6EfGL$nxk zJpcmWXZ$-Rc-ml8XQpZ|3=;IU&^+_c{`xoQ_IEQKfkEu%)Bk&;y)U{@m$t3 zWRP_qr6+vTb$0iH4dh1DGylcAl|w+t)_tSee75oQ!*_fs3Mi)30m>qf&jFO8h{~;omaJ$na%`IRGxx8Lz7>25c#yUUwZ5Fed;&RctM#V0k${37(;q=y0!vK+3i z*#(SHVy0hpM`>Yv=@gZR-2`8s@l!9p2bSI!FS42WImmK{CFzDh)G`P4gGaVy{sD{h z4;V1y#HRoGX%8HodnfVe`Q>=CMa8RchjbDR3Z`eazl`#Q$;y#kC zsiGLvL*lv;lG6)qOmCO~!33!Q?XqM3yb_45IuDs?hxt(h4L|F$c;v*@mUtB`L|_v{ z@WKdmLciwhwakHu;Zzho94`u$STEVTXeQFK5ZG<~AW{Wa2v(t#Asm9+!^F=4>KkN# zTF00pNqQ^VGRXb*W5%;X)$gCEJOP%u35>^r;8;pB56m2D2|Pl4I!R$tL8fidKlqJ$ z!JX6XhbUN^37XsIA!EfHzE1C-bT4TP>wK_GuFCg(5~KLC7ublmAM7USh$_nLg7x8-1zagCqj%rWeAYr=Bgy7R;470v<`?+XS(vzHY?j|c z%q7Xvjj7*Jn0ol`mOHIjw}4!%?C*XZ9(^;S1o!3(OzUmhunI}H+Zd{GCqA?9X(0T2 zHSbS%-aBb#RS1!23!}DCgcO=2HRYa?LWq3(IWe-<_-Ocr*Nae`QvvS!4%3QYga|Eo ze8PmU2a&M~I77Iyipj1o!;NxZXOYuQdDfj?GH{VG%y!#d@bgTg3+Dm=H6@v^@3LDfDn z+i#mx(l(^&#m+LjrWGb&0oLK@#_m?%;B2_5>c6t;mg|Fa@jB&t-v=$rIBXFHzCi`P zitykwhHF;%uCCtAZSj+ugc~R+o6OX0n(WD)n^-_yUTYnO&oh1oAco@^GLsyoG8` z`50#MWISZU9!wf}_{-B3eb@`x>nS{N>Ff_3W$dT>wd3#C)1V3Vq)(voD@G;zA7pqk z12TB^k+HdQOc+PX(U}Otq7jn=1DPIBPWn!=;3I&){E_r@`s*16ReHS!-|2R7TqEv@ zB1cbcDx8`~(YmyDxLR;zn?N}!D<|{jwUJq(fW;)uu%_i6Bi10i@8i|jt$a85zvSw8 z7z{G5CT#ECa8oKLEPTcy>tpmzuwZO3ljFbv4A!zT!-$sH=P2#t``trinnHhM+aiOa zhUl415IFL!io%)8a({AmKvZ`UBZhC%5nC z#*P^_B+b}llpCy8k5J3VNackSC(c|w@M+e)Zj0N<6)gjhP!Fqvc}rQkWdjmIP_ykg zRe9_V|D5ale(^?exh!GC4vdk2AG-AL3HQG8iI|xuR)BIDNRQRC4!P~yX1H4VofmH#VgP})6kjY=T!xYi9}yc^`r6;Dn3 zQwSu9!=yCP2`TBSxJN$aJwdOI5f}+j_ZdRq%3w=MbFy5IJ=c^P^4Okfb0~HxL3Kl)Bl|{(!Zwh8L-q+kF=g>NwqG16 z-_+xO`?p@QYhALMc^mQazy;4TL}R493{@m0 zlP}=V`trCJO;*EngY0A5F7a#XQ}RU5_r1+Cj#IWd%!*{Y745(AZ;yvu2HrA`f+5Ca zIkgHjb*OmMI~h(HG^m<#T-xu5IqP3Mk8L2icO`3XaqETne-Vf0s&W_yrhmVVF6+;3 zf;hj9OAE)H^)TkZuCWh;tDz6E2SXlZQ_}QCI@&{wlhpbcj_VFC@BdawS+mx3d#4K5 z2F~vzjZUp@+_F~0VjXP6Y`pRRo(37{)DQlid%dCUhOqJCgAPtfk1$8LEq{% z%ddN=*c=H;N3)VEYgk$g?v2F`Oe|O;{2@&M0~09S*!F$rsqj6#jRHUbP*7b{w_B)P zB+d32umSLO`$=J&_z`XLn*OCG|d1DT7Z48$DFFuJcS2FWsCPKZbM(;T= zt^xIK1g>g-B^!lN_dxkMEFhOS`GTS2-WULe?Yybxn5{KO$d8s>keoI+(*auo$y>GR z+qK?Z!@_oF^P~i08T1|^7=i_-irnKeWqPuI=Vb{I1j=0tfY)S!S>8y2JP|iYdVj9v zxY0^dPc466RERYW*4fBEgHQU*$?kAJ^Jy@qVI})dUdrwBtkBvd*75eU*I7A9M^E2; z7`61~Jk~<|a^><4&be~*WDZEYYBPNBzn!t>i1z{b~UF z65mg$DlNVfV4;^mf+z_h-Q1>b?p;%g>hR$ygz65bKd8aL=q0>GW%T9aS<%jFO_HK~ zN_hBy+e&$Vn4hKSWbuTQb0Rmr%(5P0Dd3qpgef1=AQ4W47fClIVHMy`NY)tmnVp}# zU3u*G*Iic69hz@772-5vN-LN3Fq(VQq;YV?C@TZ#t zGKKt5vo2D!-TaY~JRxZWNYuYAcc1)2nzb*OGtYui*YQIxOibW5R%bZiq-Ui9eU=@j zCh^Fla>6soF%y}W%+D6UF!`QhMQ*l@XTbSXzlCx{3h73vcj+St2!FRPb ztmrZ@HuX1joPxVjM-LQY{RIClbIcIqV4f=C#hWi$ zLrJ24^HTeZ*y^NMrkc31bM)u>MEob9&tLpjAO(?+F++!ex#5^__YqP%K^kc=cC8*M zxGBy2qZ!Iayk4eQf~7)JkVi#C^)1i1p!X`{gH})-UjhVGb^N&Ct7_!VwN2D0rg$P$ z2e~cfp!_^J)Fyl(n=_B404~~qw@O&LF%LO`ZRyMnq65fj^8AO#ql)5PB|qzKmDrIf z#ymagkaw<6A`$>spWiBdlg*@0q954z3L9uP#YFaAE9QWsof99+=vTI5o-zBDC}}>{ z5+dSu3;NZR#nr*5ypO0-=B_T|M!Cz{`S#)Nv8y>>dIBL9%_q@UM?Fwk-^!Oy> zIKO!aF4p^QZOnJ2nRkp*PMNlIDEm8F=^TjIp;d|s?XK{~F&x9e4A_a;sI)ZNK5z$% ztax9eeWq%a@-$iXf>)6bhe3XEw;)sXi<5-~6V1epsobzfF4G=34_T`UVu|F3q{*B| zAEXmw^ZUGgkuNc(t_fJ|S3V_v42kCdJ?z$35-*~M3Wy%NvW=L!k<1`LZHjFb?u~eNIt&lKJFDzN)c+tGl59iJKW7;o_Ur@KJudN$XtKX zt963yb5^8y^@vtwe8bX{ELp#}pgv7H33*kdIVl_t^2Cj&(0g%2Q6FCIJ-+9XFaJ^h z-BdN!lc8VZLkmq$BOde4vLdPwmQHU|90kp+kW=V$(q>Hq@2l<)7ei-XXp6G>b;m0R zD$_?f6N?iYIq_I2=3H=YMHlxE6DTxv6^3UCU zv+UPlHntaS8c~mn)$&;$f}+P-qOmvE9BRxPA3_XYUxQT;#v_dH_e8#*2XA#qYjf2L zC-3#%>3pjiXY~nf@**b#R}9(TTcR&u3NTFgX6{IF9`3?n8-OY!)k;7RF7>HWLhOUT@7em zu*O7Zy!tB}Q@%EVf$DaY!_Z%A%@{t8QM5`e>euB2p#kZGRpEWaKR9x>sqP3%2G%91 zn>pgqpF@+F&V9(V+dUmzr5(dZLyA%eIfE);WC+ls1EO^%>+o6J9%`DwG^nACP`!ym z8In!B-&JM5cP>Ko)ygh$McHCZ$HN?jiJA~g$^CGiZ92;gLx|?=QSRcFmM>9BAsc9@ zZl>20>kmC$iT(yzx=mxa6839zJ-X`(1{kJnQxFd*HmqYWg^LtSu!&}DHI^_OV?SD5 zBmS$K2e)xAVs5qo&cxmIt&aRjzR_^Ho*D?Ugl2Vm2%YYhq9xb}VkKiS37j8>&19I= z4GM#g2~^1DbhlA1FH`c&x6Rd>dErh7G9ah+iXLm%pc%@h5^(Tqgwcc2aOPe$=dor@ zSxl4I4nd1aktp)Bx~h6hXi*%30gb@;R@h-!CQB`2=PqQ@uP02?!ErGI2A!=eKs-VN z5x33FNbSy>Q)31knfZMS5#CS7I_`#K`uq&m4ITi4O&N+Qxjv#KqyUk%z$1awuskd^ z^GqE}O-LeqrSJ$=TZTLgtcB?O+`wF6{qcGTxBZ;mRX{qGu2KIMJ@8!#h^>oWI7q}hg$R6)mDCcF`QX}09RtmSNN zD`~RuUX$6U0!~bAbNIOBY%SniZjT=y-H*dCdOiLPtOT@}E&GvVIgHk7wifQpHI%>?n?NeqNE=>j?be9@}t&q~53%>hcRx-*p?8vUbAjb9BbVe)6AKq9!rL5hFgtZA|9@nY`rFvAvUbTL(YaBZbfr$kl~T^kzp2S^Q_XYxYYb+OgcuwV zz|PKTLfbivI>4ZQ;1qc?>5_OSn6WYY#aAT{H9}h``FAbV?N>T5O$2#`s$$&**6JRT zu0KH$cBWg4*-MaS7nLq4N0nIXVbLZ!@Jt)SJ2uT(h{6{0Mz@ri))7kx@ zFVkb|A}5Lzk5K6C_#=-Gv2%xxEy!nrEbl$oZ;QMo%=K)*+S4>;Qrfx`KQ$93DJmc_ zbhREsL&)TGpMd>TACHZlv8!BO;>@Cj5S{z%*)-nmHM<|B8N5?tP`rXitvgE96}B>t z_5e-lFzwRERHAQzTW`Zx*?60&Pon~4B{DQ`S*E(+bVHtroC&S=2D5Bv!4I$5<0wDW zspq*D^vyWm>8d=`zXdtwtl!X-uY4)Et57!$*i1iLe<87z&PfZL62ems!v^s1p(zz! znX9}-sTOutoOKaZ>OTw8y8j9+&F(5QMQa*X2j!NV#!@TXhY?O;D2`AxV9=d(WeIu` zN0r3U3l?fWlni{jwGLcCf-AEw`lGWhn=3@XC|o$a;Vnp=jbHnrfm;xVTW zXe8ymPCK&FVmEv~Ms+7VR_tfbY;{)C1h*mKw)*HkvJYx~Z%XIR&rr`k?sn>=vXbhOW&Vmp*hFoV#?0oamSm#5IAp2%b3V$j%k`?4=}+eJEIZ(aK1xlJ zp1*>WZ5QlWIDt=W6v+(Rqqi-J;<*J?-i&LQZMsjHqB3wTnelX^*iBS>lymw#=KwGF zBHdpk#?uWgThxpMR1!>ZE9rOG84mBT)Y}8-`fRUnK-y4<>q&wu6N2;`1C8m376Q-x5AbXoZjf=t*U&u zP!?Lk4_d;l+I#WsF(dm`n$B=N(@cCXXge9WB{_VCD%$VsCgSbxYZMOk)U!)-F?IfI zneSwxcenCLX#l=m9B0=1F_Sg3ZzyPRKQh|zE}6S6%5-Fh>YZg8=MjAlMT%iBQ6J*N z-0^=AnOaixgD0b;wM3ScF0*n$-ury_F5s;y_L&9+DZxo1OhtlA zn{gPq%diu9ucqU-9r@v9Srr+fadV5pCiHr2n(srKtur!1@xPjgJj8clzgVy(f#=qu zF;?UBaNSy@$oH2o8R^VwO)xU~oC;mUr0vNERou|&lSX)bov1#CLJ7%o9G1If+gf$73;fBBmFkjqi0*X&~gNuy3^7*AKxf{e%R+m zUajw`^eLeX*f!1xhMSn#HtUjEVa4RuVcoxXhH;!k%E&QpW#E@aK4L9*%_$gF z$29f7m$tS@eZ0f*ztjD#Y2o1Z=C=AC^dRygm+pYfxnJi#jOb8g(bhrNj{s?ZE0_0?iUV8Efa{U<$5?xuGSh%fVq0AR|A1zFSPBTnIjd<)39@HjB= zW|VoFhp99kzv9ObdW0`LPkYB12h2lsJ%cOY6ZFso-x_e?TXLjhXZM(0qWmO7M)8WvOFKrbe}vSxO2@K2#B&>=4;T8>iU*ub@VEC< zxg@#o8GCk?Z2%WDjT}yMqtGI|JzJtmI5@|6--}_5jt8u2%Y;wR;HO$p=$GfR$X@ns zeGvJey>N(i|MYauW^ZzC>0-zVy+b>X@pppKj1No-JT@A-XSL2SmeH zWbvdt8e}RkvMiLLlPGeGVOv^29-`kds=`8*q0H*%<+60Lp(f8e^Uno&A|7Nv*35*pC|THYweifkd@v4_R7PGGkV-1d zL7M9yA3Y>;=W1%d|1o)fnGxzc^Yx?4XN4v1`^^R9~g%Ql}e;wuBinzHI#sW?MZ=5`s0Hp9BflU>itR5sQ(me z$c~G>uJ4|=Lx883yX-9}ODjLpsyT55q5&0PjAis%Z&jzZe|o8}@9m1C>&h-(C(A#< zYBxe;=xz)z$UZ+}Q`SFR?nd?=>n0YrpApt0UK*ux3yhg782KAl-L#{i?r>Brg4C|@ zy~0WJnSO!|lQ6&u!B*NS9-I-HG$i_@XXunvTzxH@WviW4{ZuJE>qIXA@BW8H27XFN zGjeLuA(?L%}1!mrZ-DE>OXeV(a(o$chr+MdEv-xAuyo^y9! z9Fwkd8lzOQ(3w@lMmH_Ld~Jco2+LQMl=v|NF}sL7w(si9(z$zcNEH{Q%d8*cEvjat zmCsH^4aR-k=KbI+@EvDBsuk1U3PO^<*4OEju#GF####ASkJN(?PLyy4seq0l21;HpF3r~+iV51_bT!HOtdK2 z<01&bbgHXAS$qRtat=8OOMyp~aXyM&K|bU9a4jn7G6P4ZX#RChF9qN~A0y*ztV#JC z#mGtmx#&?BnQ--b4`zK6Rd<=JxWR1Vc2$!|sjyG3Xo?PblvANOssctUqq?2uO}#NM z+80PyUk<=hE>_SBAmLQTVXwt^YWb*vx1%sG$lV&61lwU0QB#ga?(2ZlPJ(J{Np_4m?HXwFzRXfF$;DxzW$Fc_as z4P4O_)kN!Lwj}*2L^B`PNW;)PQsZ-C0{Rz%S|@v#ya(({2%0=eb(l&p&$&YfmoX_t z_YKn{PU=5pc;_07a4@IO?e_;&?TTPDUo>py{oSC5^tidqft71lRa(r$kCtqsfK{_z zt5arjGJi^xCk~^LBJ<+#)n-v^?^6Z+L4MvWUCG|VY3t+RS&F0k$(9u5M5$;gfZE)w z>7=w&%-7*f*aRPVFt`U?+V&h9NuCM5aXQnMAcrW879x+wC_ ze>i{9Syp&0wcXY2SoZixGT*6mu}9DIeL)KSST@iG*UWNf1aCGGY}l=v$4)(ygmuI<2xMJdm5#!Ji*DwuJNKNuW&Y zO+$@Khq1IrlqK@$0G#9M7EXE_Y{C(59=-QLl{MFHet2EL*eQ%HOIHL|s2g4^@eUZ1 zWXL8eTHVL<`X?_aWmxzj%JRpKZl4~GsAXht$)Fb%{y{{w--979j0k{&ajskm=3pcn zqYB$_qa!3*f<#nX`7pl=FT(pEeE+9?hYcDA`E5w>a4(>k7hY@o>#?i1Ir;qiW(jC0 zNWk+3AMLr$-0RlgBFN8ck<;qhpX%)Uz_g5=P{&9I-gCKND}H;bnRUn?%SWe^YuCm3==Za@{(0!E^>Q-z?NbGC zc=>ll^0{pW`U8wSSi6k>srtS{_;bCpn|8b1eyZr-sJx7m=5OvWf5xt(^4VMAUcX-N z?d^YhLz{so=Pbfan`Y-2UGM%1h52*W5HP3z;XO3|UwD(mJl@kHk5A^b_I1|%*xP*7 zdra7Qt4zqez}lpF_v(cyW0m*Pci9r^JPfq}NNhFg8vXg@>8SD26YxD0wUgI4p`67= z=_&o`#XomG1Hbk|TD_`YGrzfG@_hO{xYHn8VwOJeWh!?o*X_A%#r~b6<)6Bgjmc}D zzRc@0%U$yByh9eagU^Sd0}Y$a{qoug@O}rl^ZLkzazr0Ve~-ZU+jG9=G+v4V9!;ih z>iXRKg!xZrHiu4aI+Lkl+W+HQ{b-ANKbh)Z{eI1L9zF_IE_2zsHM9DtF1D@Odoubw z^p?A~zb5GC+@rnnbKK;)0Azc2h3l*f75uLXvNh-Mji+;uUZ?iR z8SUZ9{DZg%{Kt*ZhCj5Gv)dFhPN=6h1^3362LJz7+(Z2F^!+kkPw-HnWAIYoPQhgL z_FDI<3fF1CEr;m{8pRCUS`7^yJl`7&(j3wPTH(I90|Rb>tkGTJ!Y9KS`;I9>XU*hp zDX5|wp9Ov=3x(}p9l!_`KAVYG*{?8US{3NQ#nVyA(ltB6 zB)+_E%7yHS8<;?!=R40-<#n7)G_1K(IXB03;rxlOvWwx~4#(a3eYaV!D4{p!brC*j zyQfwM$axB{M(j>ePe`A;8^HU&up@8Rj9>eBPDApw?}ivwSPGX-D?-aA1a#*&LaZA1 z^|!5@y`{#PW%EQIh2bs1W^Vq5ReMcQPZ@yOooTG6@AXBkt6$I)jp2HR+!-H4^BB#$ zdS>8dP3?Ecal%^7{Z6?Z^z*S|>HYqRB;RJ;I_)Y~{#wOz`_0=YZrw6yz<>jX9_7pa zaB6f{bRGNW)L#GIoGY44l4+;P{?_JJj|XS=)-3v*S;j)lA8vH&dVja~VGjPw^Z5e& z8^*uJU;n1ZNA(xSrbeAUe^vj+Py2UM?)w<#jbiP6libka@`qfaEJMePaU?wF@%)RcBN8KBkXwsn$N`-+A}DZ=gD*S$ky|9; zVlgNA`SXJ-3*pcKRw6!V!lkLyw?&3%QeT+Vd0ecIf#!$dj^adz&E%yoW-lM9fJAwl zLyIWIfemN(@5$eJRC|bdC(Z$yaGQ665sNy0ZMrkf2iS^+g2e7m`U)HSSf&$$#bzys z`Ky&63&yQFq!M1K?ni1Hkc+^n00NkhyVV7k4izv_fqN4Uy*MEIB7KPe5UG5Emh_lA zuAn&*a@wMI)*0$9Jh5hQ^Xmb(^rd@>EaCt^A3Pt8xH~cx%`dNW4cn`Hrc<6Scw<8A zNmBV_Y+9rm@up!g!DQ}QUKuX@!K^WqPAL&J9kde21ndeZf$|{h;D4PSCX$`#YT0Ro zux5|v7MwcEE@ZOFxVppnfuHkz5(*J%EQN|g#|Ox3R$g*_GlQI0==aek{J3V?jK_#C z&~$eq4d@MwEeN18hb>^}J#k53_d`4qkLM#iJ@5*>v}w%-T&F9{>MRv9`ZC6e`2Qz4(YUK!;yTQ(B&OKB1mW;0)qtacF&yz={1&+%7Msx zMGxizSRLBqlu%LKJ=`Imy5rF6?@vG4La`H-_e7+9Vr%%~(F+L+jij&O{WF-YdNzy$ zLV%uPxv@0Y`W=QGF@q5cOgCnVfP^hu5-1o}MW!Lm`z;Zoq79IMCv=?7UST`od-EYz z_k(o0kjJVnmkK6$cgZ^O_pl-hhvd8!y0` z?#{UILFZuy8Pu^b3M1?Dk0dWVK}2vwhjrLz6jBQuAiBs%Nx>9BjOG82nnlb&h@U;9pfp#! zZvlwH~SFBrK=$P(* zBx_Xqh1T6oOMK>8(0?Rr{phzGT$o)_#M~1sSNMQqGfaAeTi^dtSqBw^ht&FFhXzR5 zEx;U%FWdifS+@nYOrdBqMg*(d{g*B9*b(-4LcMjmQCRrdHopsA3msiT4k2QdJL=s* zAJ8lwnf3pV%_`ip{+9w9!fb*KH%IPci7x>vfx8MEkbL3?<8Se^6_Ux)m2U+?lTLXt zln!-W;JD?1;9QNW0DjizzhR3{+$#{ibKb4jw<3Oe@|rsbpsW^=i&!42-F03<}1K*(_%R* zK+K{AtWyF>D@glxF5Dbn7c8Juqy=gjDA@4n8&cL9q8OOxYuhB){r*$&j6cP;-;M|N zq+GpPGZ@wCwN@}f{JZ=n;>=Teey9a(_f>H zSo%f?`l!r{EHc8B9geibttuf){1=(+-^Mev%>^OK@P#{icxQtvsm|iqV$CElshxyK z*rIS0uw`_c_`kujk9a~3j##4`)XwR#=%4)P^N~4b*}j;mpTgU+f&j zlY#%hvQQnlJw0lZX@m(QRQY!L-7*4RG9+Lom(PdBe+oLP`H5uKE(-el&m+Gxr>Ae* zVIE{7m)#D)$nKssQ>DMNqb&v~Ezwiw6YA8KO^U4wq0wNkE<8RQ4H4c5X?J9&WNV<^mV1on6ODtO|D<|N!sGU!g=lV8) zQtyH6R)bc}8C2e_!_)GYj(5VCgLuWamj`>m#Pa1b(r~X9F@Mx& zUR=q4CXSteKPHacvx9L9ws=svUNfg07zxZz{w4|N#Mi8CzmF)O_l$9M+94?H(?#+0 z5plL%;Cm4!9a{)46=EU2#4ut!%d#7KURV_3+hI52+*0k6EvtDQYKb^0QNCTXN8=6} zs~VJHn^6o= zf(?#qtoV5G;+8@+LKY#(D;2}fjF!j-g{AzJO@uwcy|u=ONl-qFXB$FZ0I%~ikD^N! zO;}*3&Ng(tq&32}2_$kN^J83@gcXH?{mI)Jj@~bY7pt-!Vu(aNzS~{pLd4wA-3S3L z)a#s4b;Klp4lKLRohiPvqUT=odmZOYtC=W-69l(vLFzzFG6quY;12z?L5a0{6fNxv ze?@AacCRX^q)+bPZO~7qx~SGi5ovZ=iD-YW4zfseS1usaQ0Dn{Dp+>k6I+87bYh)f zi@a;jXsvR^4ioOE2mHC%Fh`X{p1}a!A>x{U8fD3#89R)Ej{?=Lt&WKC<2{^%GqM4c zCg66?4laf14gR?vtjwl(lr)N+TVQ!w8Gl#R+MWE!YBq|^&Be_p1~d^kYtSn)-}|r< zZ0<&!p+_6VzjWuzeW-|HQ)uk@m zc9(72wyV0#F59+k+qP}n=S=Q9^Wo0qCX?(BE6;D(S!I)|7^&j=`qU;QHJ20n{P1zUWkeR^OOepP(( z_=2^NTy6Xpd&JDq!EFQbSe%GVUf9+*{sFI>VA)BRF8WefMV3fqpC(b=`Ea2{LNiqP zOr5}NzEw{>`urE@sAc_pW5@#aQInqV<>1M*TmLgLBRXgz(6L|PnXz$yM; zmLoHDLKVOi-00RA-t4T-r{{&0uy1MaPh$Z*Y!B>V^Fcgu(?vA?e6rHN<>T5~IB_(- zpc?5&rT_@i=zS^F*0QG>E}_a(-)I-Ik%%lFI@W0y16?Q)bJXeh$;Hj>@RoincHi=u ziSMT}C*;LJ+nI@f35YCLasfF+Pg7kdC^LOHyQQFfk7J26ZiFBT%8AvE+uR ze|9`SHnKz6cQ#l$s=3bLHUW*=^qKkWt^kHdc_GRazYF8ArfYcj)%dvyjdWPwHpZML zNKEu*;vH|z<**dGS_}4SP@XNBjy|k!Yx^Jkb;+Tse{c2q5>r2O8Ph%V25C%w5h1en^ zj?YEgr8KCVy#~7X2mHju$MSHFvr;mloEWM5F8TSbWvD zt}a=F!qC}O!?svXklIRhr4G46XOf9cuo|j1Gf^8DKm>aGA0Q&^36k@Yp;HnM5X-+hFW+S%-~D51)2c!gyctzixs^{zsk8+(YUjJ@Mlr1J zL!VsNg{i_A$yYrDE1A_r&RDNL$8f6@6s=Lgl2wbUw0ia67j;G|h?MYA->C%<=>62x zXw79&GH^-pM!L_RpFB8nW`MmBjH`6Y2i(uESaDl^@@A$Gxo|PP7UbNH=Z$^!1sn1h zMQp0L@30Bi7P-dlO`6u)_RKgKa=PLV9vi-oNeRb>1Ux<$1>crLga38#O?~ zG%ubqEkOar(^~gXYsOu?J2fHf6pRMeLmj0u&noH>bpED?n;26g&gMUaa23})d zW!R9gHr<}Y`tx3sXpDH4ECM#$B&2C`e>(c`hAP33bT#bmSRY+~!qpqgZJ0fHEv6kb zDkU?F7{>Gnfn?a>5zN#daPMRaQo1oThEc)jOd{EYxvSk4jJ$+@&OcU+$@$<(kbPu; zk*UB?fe}p@JC^;J8F=wKfLOkC0C9u~YQfGkW&&aH7DKS&B{q>Q9CRV_JsZv0(bh$e z26w_4##n&cAeNefcb)k(^dQmoZxLhLWx%i-naJhu>ExM;mYOs&SwBf@e8#}>tKNye z6|g!&3qhs^Z4cgwf6PX0Ec&@Z2U+^CB??}Cd-BD0Brh2!5a-I-vUR3WjcL7GuvADD zr6S0R8d?=^d!wzRMvGX9U`+9k0u3=f0Y^T$T*f$k! z+9PT^GfbW_s5A${_8iU6!QYG6LBQ5kemU%>bVll^dAVl{(@Qh1L0yI;s^M#*q;gGA zG-r7W>;QiV7R2I1-_CAgE9-yCNURE}#COcqx^%@*1Q3@B>E!?ntznMA%L+{{jQ#p zB|Z+PtV8W&i4Uo~Q*gzuN6U97o^C++;4$>y%(UL;y*M=1aimTi9REIe;@#ln2T(sI zSldf4E8D|~0`ohjk>cntXpgdIqepvQ7TTBe3xcs;bLr2Ttk60nunkf(n<0vSlYV_c zty$-;|5?%~fifrltlwT^wbWx|NPg&EC%Ol9Fprt;U^ zP~E8l#hRL^^i+#vJ}8!us>thUw@Uc)Cd71~0iekWsg1ngpA^OitE3Yl-viXjb!ITD z2ASpx@fQT&A)I#}(T!NLB=DudP?^IP7IT4@G4}NZ)*IV?k30%u9RrJLH}5@WfFHhR zCoc3ri=0RQ-pvp99N?3}Byhr}S01GE|977fWFTrLj?W&&Rf#(^+#Q^;lx$QA`teTH7jO=d+ycHz0f@x z-Q-=&1v9}K)z-^W@`gik+=iKAW)MEeG&?EA6Ns%k{B+(93oZ(y~xuDKGjH@-pwv37iId;9_RXRZ+ zFYOcq^MY#f^=qJjlt1L2zs_%z=>m-bB`aMKBy~ks2iLVCQ)324dly5nz7KKl*!@=* z{@zZP*Us-{;F<4TM03BQz)w`-#MOQ2M2K}9oQAoiyQ9mnIQ^4Qi9#og zIpqA-c3QH!x_q;#n5*DC5csUJ>ZCTL86%sRq$G1j33#afd5kCa>me$Dy?K(imIO=x#N^Erp^>ntgUsdzYvukp09M$r1*4Sy!^Z*+l_ zhWiJB;N*vN+n6F<)0H`WrfBYa2|~W}tLf)XPJb_KpHq8mT$bKkpIGMOW+=G+Zy4IC zl~e?(O8PxnRAs6S*f2rI#CE?MCn>&#BjH}*9mgg(s6haHqQVomaD7}f{qHm=h1KsE zSiOt%9q+7hOpf3Z70K)a0+jVcm&7am_MgBYV-V&M`ip|v{W06sp}eCDmI20Qjz^n> zh~dxF1QfYs5>XD~d*NRI>~jBS{}&^$hlX#;^%UTwI$QE}FKurcP(Wded}*IfcDN^a z`^T^X29w4AH-=$?OFK%xm_IhXnq~c2?~^6G=OqFoe0mE$-ZEmJuk-{N>>FbKV{oAe z`;`~ivc+5yEN?0oe@@O7)>EaOT}HSE#}fU^s3~$aOpSY^fRMEjbuZk&@HDSJGi988 z3bT5S14l~O6P2#0b0w8^$fB_Y)auZ03MKhOTN4y9*#cxa(oJzPn=1L9;GAVjr9fUu z_lke)!~QRrgSd}y3(0^JbxWtN@!I%Ysl3<_%+-HifKUwti)mVl($_WJCJWOjFtTCP zP>py;jwlLO+bat##9DF%HHN;j??I@Vf*4zdT>^$w56{;n)-zn~$%86W=AK;0@5KA* zF={O=Cpxi6GkX2GEYK@^?`EjUC_J%oxiDm}pN$H?pA>N#DF?TesAOiZaFy5zTr*|% zCu@(-1iC_PItjaiH?tsZ^qm$Ca^Sox{`cWzdb+4tGsEHy+sZ6~2_Mr=GssYfjR`Z3O#D} zAelNvrh&4{fvKe?l(en9j>d^A(c6-Sn}C$SOwvw;PTBF^^dziuWv-y}eem zI~?PFEi1zkf!K59uAe~>Y;`_vHC*Mq^&Pj~J>3+}uRu*xSB$5v4uet-yI-$eGva;R zo^Mw3z>PeQx)s1Wm-R0MB%PTe@XJ~!`dd_|-bM=D2t`A-#{WZU7ao@oC3;RP*^tco-6#qHYFkb_%DUxdl9E z2dGK~+K%aECtP%k<_yQUliZ9N9O(Ed8MbV01&u+f7wlig5pI}FPV`7(F7H$&+g8HKxl^kx?pbss~Sp^t5t0gtYjuz zO@~v!NrhtHGwZRMZ)9nd?25k%xgiEyxENA8DO$r9SSFwMvdGdq3LG7zvQzOY;g15orK~QwxDPJ=&Vj|gBQvj9h=qz3zja}wd38trfZ}%|{ipw1TKzw{tUrDq`ojhJN+$J4B*!6~ zPWZXBiV}&#JsY_wSmUP4ld8tKwk0z$R#UDyQE_a`j;i=V5DWpY?)U8J)9LDL0zJP` zPI%eSlN~V+3`7fHr^MeC0M9!Y2m9?_2rziN^o0>oP){tKKN3GW2&i7&DtmtchbL7I zeP6u~_P~6vcP_CPQrzg$heIMpzXc{u-8m>6!^fRj#!3iAm`R3Bw=9r?mb})O*{~u{ z$(bwOE*SB;IGga^bz}rCSmvT_3&^Fzx@-H!s}Wys749m?E?(Z1!dMFe>8H3~tlkvt zs9-2tR>aS8`_r%F1rw9ZvYaSIt;<>~DO<>|JEEaKd||)EoVHE2GQ%OTl_WMIVVW?T znX?7*e^ys>w;KONUhb3jYZ!%;R(6!y)AV{bryhx>^9)&_jhsjrhiH!nz>^O~tu(>SkG{v*G3f>-;%~z)0jXr*N1TEGgXhx4`!^mRtYv*?D?Awj;>Dh8 zvHw#1Y*62v>aShzShi?#lDlg!pH8T+#4~`$+(f#7&5<76+Lb1^hOv!{S>y2tLhXYo zZblN$oiQRc3R@C^RMC1y`ce44)qQda>koj#^AniM!(t8gy4MYxTcm8H5*{FzG+->f z^-cr>4QfL)fYYaHcOcv`&HA&8_X8k$o)Qadwd#z>WW2@sYu`c&Zu0m9-z(e!LZo(oC(IRpO>ch}gbTR~_j6kCB9d5k7{xXm zevGMPVW%}$ZuPIDcH=rNSfBmxly#2sAL2A~)+u$0Px;JoyW>gHs`9ry;D;;Y+0|CJ z!-IU_Q1?jFsZ_m7mkU5f_$jh$2fIz9`I5)U&WkLh$Aw?iNfMMo(L4)?OpL`UAx=|L zf*1oY;$7n;ottq5IPC7yv{aI)m~%9TVwK$-{L@=Ahu}e7XQNcM!)M)+)e*aQTD;t^ z9EP`Uv0VWe>j7f*0Ovd${O{g?Jl}hMz_H}~t2dzF#ZTU8Q4`|Q_tlI;w-2t!O zfG=Ob&maH)HUq)#fEG!ZO`e}kL7#eH&it@!{-6wVW5NkD{zP=8rm^MY$U!q5R7e=R zeMLgF}t=+|F9QTVpD4+{t9 z37)MCah6whr%nDM`3xZI3}|sxPWXV`3eW_@cDWW~d$WG^kWj>nVm2$ta38Xm|4W=< zAHr^tW}z<(%{7NSI>g_Mg!tAcqFt`c0FYI$S$fpY3`By~s-n+2)Gw#+hYp7#G77tI_ zSFX;ATJ!$c&#y>UAJI9hH|`=1d=_r>Vf^qwO-v~g#?(9($8 zKVX?}{zxXO?#u1x! z=_MmEMwz4YJO}e>S3}P49Da@nS{pXsVl>3EFu`J{SZWTFv7VYwmBj^?$&n?5*tX4Q z(JZj3idoQBsU%`mIV|I-B0x;e&7{$#SgQL+iuP~=T~YtDSLzpI2lXq)@?f;r#i?V4 zQOVx2vekQ$Sr-Z+DH`MG#C zRv(gXOP?jjp2F>z^P~?T{>8V3kx5YRjI^+3_?! zcC+Z#LAbc%7*k!Al{>bF!XgADDuPbPC?6~XYJh>1r~WEj41NfbE9Yrf!{0f^Zo!N` zQ2BD8utQdE`97(ts;2!|m<$IG3f~)&MN*+^EK1WG_s5>eNNL}{0VBR#rFAdw#u~R< zzgSNS73*QhD{Dg2xjQR#??tY&D3h6|iXXi)XBD2)B+;7=-cGd~K=V=WDPhHmT7!&N z$1DNc&;tQ$JVf@9Ul8nhz+gGHG;8WSCy51X3;A+Sh_TI6*_v!tkIQM-L@GD=BaOJ@ zXcuHV55ApQyoj$7N41G5t=LiE4Fzpr|PfX>1kJdvLMO*)zEdx=L@ z<7l;b^mN~}@PO5MjO?hZwq}w|$K@}1azpwKK%bbqHT={WsMhl7O zleA{|Aq=d2JM1^8OZNB(r!As7*e&ZS^GIV*VQkcT#RXySNhaLTx<}tiE)c(aB2Ljc z$o5Hya}g!gIs$>==-wm;*B2nxU>*c0lSxWkL`HhVB=?B0vY1d9aAaYK+=}qu$svB^ zjgV1n0C9jX7Jk7{-6R@&sirVtr6OZY@J299D44HVT~-Q8I=)Yx(1D2AQcJtD0*^{h z9EIaExEJVW@~qo5ZhURQe5ME^G^7K;H}+jD4d!fkfHf176`@^TNG`pj|LyWb)+E`? z&6EsRQyB${ZG~`(TKk99n`B^fF?7v{S|YTw03*a)}7DF<0QFNsy9Qc4&l zMi-VGgC%%hPtZ*&0q%pcxUw_i!$Ze!9LNkMH#*v6b#%#8^AyT+7(6>Ry&1KW{H{S2 zOsVD~%Blpf$f^`}_ut9ku-L$vKSIlD6hc+e zwQsb+0X@LWSrR>oW_ug-;If~*WNd{~waIvD`{U?OCb+Q}mJyv>14Q!_G!&#D$?QCg zdW!<}6cx-9{SZ~N^hq@56SP`nA?`{ICE_%I<79=1O;rQ&98q8~xf76>g>+O5KPmq6 zuVsh(?T!6jvNR=&dFFv12);jzm;4>9&&9WNSD+YR4;8#^Ff@gt>K zh@qX*)fm5t!$dg!yaus@BlVm;QpAKsrnaE_ni zIwWJIa`B9zr}ftn`aU=tgObozjCFH`UY({q`-VwdIG|vcU7B-6+U8;jAQYKAaN2=c zuuyps1#Xi(R1qC4VluRg7Kc?pwP}7HZFP*|K9c<~4CX6{jHuFsWIZH)l5*{smFh&e zraBfG>nD@!ZF8wI?w7g%*IH)G26Znbm1Oq4B|msn1Klho=I4Te2QL+=rP9>&WD^4} z=l0DlaFl0T#Nm|JkwfnleqlYmL$)Y|+g`_J;N}fU(;UF28n@tcO^ZdO?E9b6Q=J~u zO^5MI**_n6$e)_QLYUZ36bDSmSD>joCUEx^n4__GYyK^0P<`e9qx1@N&Dl7Ov;J1N zc=<6Te8yV1M)R|QCJNBGC(QfbF7?xm+*!s-S0&+;K5(MK9Z!zD!wE6Qe>@w~=tWqn%xmBCiRzszDQ z5MZYwq>fdu+&ZHsYyErO*<{`MQftK64fIqupS)d!<5HpQs0!!x&xvzGdXL}h_35d( zj&CIXdq(4MPkuCUu_MKRNfppUyI^c}KF+Ika8f92c0_d_T~2(-OXLoosqN~5G|@$N z-54|`bcbyfG2#L+81emIL2*g)O?_B>$hP1=XJ?LV#-vFRi6kNaI84j?|I;{i{xPsW za)m=3YNlMwMvFB<#bhU>CCpQyec{g3FH+1rKI+J?NiXE)<~Cx-{2(-i|4&UkTPO;( z&nakKs#H~LFcteB(MY^MsRkCSS*;h&jh*$nefZ!F0xvV(Gs?eu^rDp8xfYDy7)Epq zHq@>E74fd|n=|2Nu;8E=GKHOLn6r)k(P$>XH#ccq19YUCkb>gI-C1#)yY$)d>2Em8 zu9~MkthW*fCc~w48dra3m-ZBqV5CWiqf|eOibiQY9|GOnO@?N->|cGpVv&Pi(L`O!11L+cLdp*v@vSj8sF zO{@|7-_ha8zggHLg{t)KWvdV2*@;eFhYBXfJZM2zg~1UOhQ^CKUh40J+`6hv9|CF8R6wDYfWBDz^)D zsmDgv+8_`+J87~b0~i5c)|=h^0_u}&nkGp@9e!8bkVEKyjlTqJ<~4&^xfnWuLje=8W+Tp zcRf6~q6Qq54@&X=ew}E{u~qO?wE54cSpc&oDWn0CVezYzj^72r&g#Bz>h6g5LouBJIEIFB_#X&N5AjK4g%=T zg}vSEm&W%Gr;jQKgi6XCtY84BCcgI-UU-q4-CVLhC~cN#@2m@jMm`4yW~gT1m+u^Y zqM4yNI9==l90#|iEp;{!s&pK@>Kq0fEFL*ekTf@zsR9+mMT*tlW#sCmD#S$)Yd%K9 zLq8Z~jyuyv6$!n02)!gMzzc1K!{p>pWLRroQP~!H(Uuc_ijjZbY9k750 zkDtY+F3fh&trPq6`nREiwS2R1)K?v~;^M=nnwoR~Vvoyv(swQBh~>#-c4_H6U&_h{RGp_D5WeFy{;LZCuCX zB~ItY`u-U9CYNa10Z-6^D578`btR`@D1A#gfBccJBdU+QmCL1D>K9jpIJHx5`U%ue zb)Ojp)Myx?dV}RZhX+*q?SE)lY*H#ACQZZ*=|o zLdjsMj_jJA3#>$uv^dq;@B(vpCDiDzem?%}aLhi-64;WV53!z6jeNOxuQjSF@{E~o z3#u^DlU$18OKwA@I7coB$lT{IYTO1%nX>zlwLsJk0{L8qa+z+F0L||uvS3PwAYhr& z;l4_j)AptYB`l&BdeMf5FZwRIXP}TKhFe9LvsRZm{zo z95GfuWz^yR3YQ*|U^U1^iof4gknuk4Nk%RYO$cv}!htn^1S8bY_ckoT-!)Z)_ooh0 z9>}Fhs}-Su>v?yNXI<1b&9lOmWTWDpNR;UUVr5W!0@623UTT3uPfFxHZJORPt||vU zQ$#&8(Vqecsn%cRCMgjw(4;TqKCUTjWfz^t(*iFonPXmG>-xQF9DmJ^va$re+|+1y z($)2kNy3h(vitqkT1-#)3sY`ZE0v*`%ky#h!=%+NADPMXDk3I>dMFrWEuZx$<|o#PlX561wU#afVXl*bPwHyutD^s$t9V zn$x@{{#;#a)F|hlQ_)0M*0Pi1zPNy1y$ZkSRi8is7hh%>=C5)M+aia?KQ_*Cv+LT~ zYWehTJ@Pi-{QTA@@N6!)kN$3VG7LXq&j35y^}cTbc`rE{xWKuzxivtZzdAre`^gQk z_WwOWQs5Qxd91k~+RPccwd&?p+OwX=;9Aqk2Y2>rm09GAMNWzrr1R5){dvQsDOBJ{ z)Z86Z@-kv6XAUwKal6PHH0BV)wdXP_3Q*#&#ToWPNJ_sjVx?WEt`fx}6x(n+Hr~Ne z{?pNwEFbXbV#UPheIe_Rb=C^sY&L%nx7*0OZWC9RY_mG2lx=LS5J!|hOYhnv~>M4$f@af0+f%0H5_3C9np zc|m3BFob=8p!T5!P|XeIugFJ!)WUv3S1VO{9S22m;x^jf;yj&%>TDP(O@wpI_y29%ndG#^b3X95_9ANaJAapNfd zkcBYwGS$3(fi;Lg1Rs=|)=!6S+4)_6Yf_b+E}UJY7&J@XjsApz%kz;$!g2<%B&FnU z=C})RvCU@^2g6AVzhCoY8yqZou5gY^fxiRGH~f%+Z2r3r9LU)i>7h|FvVkt3!1!2B z^0GTpINBO4-7`8e|H1=Q_MmLgo_zs{yHe!jy6 zNBeSY%0{bF&G8&zAFdp6QUWnUQH78g*yd;ULUA1zzD76R58b&_wU<^60Y($cQ@zNL z*K>32q2F{->*)f<7e^ z>Hdq-aT9^DryU4WwKCM_Y}m+-|5xUIkxBxDoHati5R1vCNT^uhr0OThj9Y7p zBHNxUybzGjo%g!0jMNpBif`6zLY6(6XnR#uu@3pzYf;tTV32KYFKApDdWL+JcA}7n z9P>JWnp?Z0PV{~aGc41$aoe$B$K3((Xv7dqGLJTcK&*z9PGiJFEyhtWTPMy@v3(XV zLv)<~(!1htyjSZijz5C^07jvHSeR1qYt}*R^WYfHifY7=(AFzC0V~2-5Xy_4*SEW*ZRRKYKB`BG16(0~UKkk`uMnxP?c>>-%QgI8Wk z212fgh0b6q^kBrYrtFg2|Fk2Bw^T9_kg^0`c~+3f*}Xp24~U9)hKFEc6ZFrTyY9fY z`L~gC{l9MB-c@Jg)J$V_at{XJDnIFlVfp2j-zH2h4s*G0vv!WuiN?OxF9|-7(w_@r zNOOy*-U$@OTt__}m;{SpTR<47et&c6;?WUk{n$4}8vPlI$lTy{>kp8~9 zPxUi*j%=ZB+P1{L^AOg%MgGi_|Hp;`A8zQR5nIu$)S)uib#%dk&gfK8Y8ZssnB? zg7@1diqs+o!|Bl(hfDJ4!WWX{2lANLktAM;I;&y;qvB0_Hv{iH!0OGUX_|QE=f|); z+dpiB(WG3GybM)GUz&?^xK{7%P~V zAVw&WGIU>?62~OaA4xv6aIB)hl>c*ka$g+M^B}-gD$mbS5BD(95Wd7$s_(k|)KNF=9A6|DJMbzyR_Djyd8>9Z2Z&z27 ziU;x}cnXQ)sBQV*H?ey>^Tfr%kp>t|UuKvwY#oObDJ_M?unMMn@KWcY(VE)Fs9c}eJEf1dT3 zU;FvjAcFpao-I)}IEY%B0Gyo@5&PRSuvxm?q8V%x>YhT$2WE?gjz+kFfxZ>DZvb%r z9XL1FxB0Du0W=uPqyM^l!e(51-4mn*5Uu&z0rax`*G~6ZK0N+Md_#r>rcvl9>V;`k zX@>nUe|D4_)d_D9ZPcxxCA}Wc%}waSOD9u#51<0gmGDo@^bt8?7SSQGOny8vS~y=c z$D-rg)S5U#!e%#i@^^TsM#Gl^y>wv*X(@<*yHPC-ceS(Jmrlbip&5k_O3PlIyf8Y1VyQ#& z^^CB{DCDB(Riz(oegeWd3kQB%I{{zXD(oLcw5U0Ak#Y{PncrYFv%#N-DBczPN{BTY z&505~DTgT?yo)Re=t(mVXk3~KKuK#YChM}KHVbuwKrTHHK;Y&rdeKzP_r2J%e7DtgkTr*8$LOTW9gO=> z;WqYB?X=$x_(U`i3TifER(9#;75K|MD~@(cZf@SPG+P^^JceeJ+F_npPre{;X)Yaw zC-Rcbzji1n61?7EtxDk{b6WjvJ^ZYXEMnJx$!Yp8h_-sLD>}p$7s|OJL?BULLiC>^ z^S|&pL0$S0b{J%`qF`fNY+IPw@dFOD$bio^qM20Up;jti#J{t1qC#3i*ih9A9pj?h z0?=-~(im@wSW`~*;}?SN>6n&}C9u>r)l(SZxlDSQjwe(#{N1pLVNyG_kRWPFJ<48O z-8fg3q$OzHjH^v(E-o-gvBqx$Ro8jB!KvROBsFHzw!t!0zG=odDO>a^<9ifbW4MEh z82Y}&qoY+N9l{p}_ zX%p0a(zv@xhA6L#{5S-2WiFg%SHnZCe|5vb5tn9xQN9#cwE)>?o2ELHOKq`kpRK=Qyb{~7V!B^P|F*TW_J*6UXYq!0jo$t|80I| zQ~?H)S8w^8)hXhWy%5u!)jYpHU3;S_U~%bmW;i*^#J8AQN=8)Pd->oUm$;m``xA+s zl|M)FW$MY+(=_E2dhT`9++Cw^Rq2COLS;wivf6m(E7{AN{od`^`LLHDiHXW`)E82? z6Ns1=y88+8Y2yOYQyLG^S$IC$ymu5t>JFwK#uVJZSt?VKkREdUCYQx<4k)@ocwN_H zC`=AOwjV{J0hr65aYk{di6JE{bIQ{xFO_w$4w{be6@7XjIjXP<3YeKZS7Vv?4Nb=; z?(*V#CT_o@np?gK71lkcY0Va4=SnMGl$&490OwqZT!b8} z5r(Jxp9Hw}0jXLmzU$ICr)w_kdpkCE*065ID9Ibf2RiAp0 zF#C1T%tK=TIEtcog1FvVPal#$Z8h>2Eq415%WHURP<@2=Yl)nQYhWbk9b{0Qt9C0k zfdDest{0BZUxwtdWS(H0L;v-3C|q~ugX{c3x5$brf6Twd979cas_O|lC(?{1+IHYL zFd5XWL;Gc@hYhb7mPq<7@Bz3THi@dTlFhCtRv^+kFigXdB&QJy3H}XhQ}f<>K9b zFUhMc*Nx2Zy<-)OmQrbyNVtSo)d7&#-sY z*#8MvownyZS!I*3=*TchN(6X4*jHUiE)}*kJBT`Ux~!7b#O;De^|%~jLL%DLZAkq| z9?JC3oH#DH9cqyVa**Y&6YE=hNNeV9F^)ECsL5K0<$jeM!a?i4(_O*&WRt%5MoQy1 zO>q*|vXo8+0}~rMnS~ZIhcHU_AXOc^lE2x!%`5bOB5-M`bCaD7QVvm!SZJa@5?XY* zcBR*Jger8(Mn>h12(|(u=rH3vjq9Z^?V8Va(1Kz-WJWx=aw&GEJOdtRD~DQMBK3W0 zcYn^F&jVO${4ITLk#^a$G*2(j%e~?ypi66?s~@*>R=pY|}=N9^yB{z5+Ds`M|( zz$o2@84NI#nhs__SxkBI9l|>$8!93Cxx!$hX=|4t^q!n4gRtU<{}HAT20_A|U!_Ws zVSql`Z`)f|Re9UmVCh&kTm~EQT)C8{)7ak-_fbe(Jvi((g69mC(1INslS-$9nu;tJ zhWxX-Vho!0;Nx5$QEQ>%4OjdVb+^uG+7OJHHEYSwAPhf9+2>iHk`*Rd5XE0m8j@?R z3?}(mSe3FdbEEg(wUm}KlD5W^w*OI>st?jNL+F6#K^#yc1ho}!IpS+Y<ILeI>sJ=6xVI{46ZQihd(Oil7lS86)aoZ-->c41KIIrz zDj3A5AB$bj9hIZR`M@4|-NS4*gJ)c%W>kfWzVOG8x%}HXs1SpEGinNC2)pKkgW3-_ zu`pyo)j&{-RogLEJrVPfNi$v7h&eOj5OTPc#7u2-f}#;DTTxXinY*NIQ#r`LSe?FH zyt0Lh0y@0LzRscR2yF=+Vi`O1S)6YzttDQ622JjDR!Wm|eirXMI za*lEd-`x^aEIrm1g{q&AlbLG7LWwCVT(a?GIt)WUfBDp`rPt?FBnxa1;4@^kOk9I# zVL!9pP+ZZyLKZwA$BF8V6aw2*_n15kpv(&i<;vBS$w-Lh7!`S2w)@+xO2)NAE3U`4 z&+VhtoD0GY{dqf)L|3zw}|(XT=u?x>U`LejUwsM zMC&5y2TGo|+vlmBXUrV*I7)`}02?cf%!Gw-cl|Y^eF{H=ve3Vjcuf`I$60opxgnY< zb_8$(MAPu&7sDuR-5qj`?QVby51TH;XaaKZ+Udq6*vQz;U_JB!`9D25PmCq!km+Es z0Z2I(L~n2LCsQ8SP#5J$xwc2p>RWnGIF;{5hd#)PoMIvECCO^G9%?NupE+d9_G}Zx ze$c(f;H{n@W@zOda)3)47A1SbsQ4|d=x(5#vNWsjvI|o7ftFc#gx-tEv!(aR7{!_C zVY}j+c6KTtb|tgL~JXe}{Szy4z+ymBrC`)@dtAcU0_tf}77o>Pa-Eb{jM+^PJ74 zK*#S)*4t*Pf~{Quu<~+1^R~oCzn{UQzX3rn?{(s6nM|CD<*~8h)TMV5rsFyFa(+{# z_bzSl$ybzuc4y!v^= zf(pl}dM*^!TxBENqaMNLxD=It&i-)~dzaxV9aDMUVYQt~yDmktepU=aSL6eM1DCEu zzGR}lZ`d49Dud^iLRS@i`o>pG^&OpB+hez$jvfG07yxH5I!l{JOKHUlU5x?iK?Q;J=niwms! zGnkg74zpPl{~4m*8y4~<aXIM6uWzQ_krRv>cE@xCHqGL~gu zpxl&*mshmg9wX?d*KogTYlcd!bkM=Wg`^&Sn;|7Y93kCbm0`hzvg+lGXJ1n-|A1)E zjcf8(5AE(znU3V6S>0E@EBZi0CWSCPl1$S*?SBCoK<2+7(1x_$6h;c;Eg1-tc}vR? zqa^xN_e>^AfB^2uC!!#UvIuuYf+S8R2!F*^BQB_+l7HVUkb?!BWdb$RH?K^!d|bg(TAgI1eQ zJ*&IRv%%7N95x1VkyQI3U5*;URM4Ob)-%>##MRYDubmqP{vbtg@H6M@n}U1(bg8;Va(}GL=nU@ zR2*+6WTL=|Nu(eF`Q`~Ln|NKDNB>;L^HfE)>QN2SJ{7LsV+eUm)-sJ!*I*1vT`ZH= zxKvVw4bSm@kI13xfripqGz`_XpBxVEXg+7W%%ZkDg(Rq&_T>E_qT4JBa;kV`9F|j_ zETSs>B=;Ay55r2Z68)KQ2hg^NtZ<|Wi4uv1GRmu->;VvXq;`1cN25fNE&~ir&?QIw zs;fPV>O*hjhWY%E+PhP8z1+yc2gl*zAil}uCrj5^c%-I?8Yc*~v%Oc#al+r@^T{YW zS01Zyo9G_yKmYdI@6|)i;eLR>bNB@XJcw{-6jZd?ka1Z|p#u^*9*yw1L>E+;`7nt` z0|6jn&*4%?8Zbtq`F&srZ`KXNrh_(4TD|jd9z@7J6lQ`B`Y{J|D5&XafKDexce0bt zQEUGboKDUCAFHnQG(rJN69K>G+l$JzB<9nckQ3BRB%P|1YGzp?#0@CdWU!i?G(FhZ z9mkt#PvqB2)pyzh^2By$_GAA@Qy($ip`TGGqV(>yd<5z72G3dHFM$E*C^jnSW-_^} zZe%@szbY=qOmdVuVKThELPuE4K4^Qv3e;^$M~Q&#cR8;TEMkD1X=`=ljGVQsLYeN< z>H$l?DTJv<3X1|D`L#~kuZdgIXsTx)OV2M2tca)xZnN3_(xb-XJ#N^O$qYr#H@IA4 zZnUWq6mL)IRRs5fAt(xE!~Q#^!&~AZbywfWoPlcEIcmP~m0}rvX~hVpcV&74@-jD4 zOP(~cl1!-uj1`tvdfp;aDxq{HJT9zB+3#!o|W_Rz%OulnhfvK>=nrpGaN)C z1SPcp4fmcZ6?zBsg!A4y?%73-&FmZI9RIGSN776>bl2$JdvFFffv^_9t;O;cr(C)B zaPG!7v-$M)j?VP~XKph+$ORG74?@hgG2mWWC`FzV@s?D>wP}!79cgZLJRqKnh~(F@ z=~kT-{cuR>e$Ig7g8ha{paeha?j$vl=m^v!PFA4?#PBN4C4vT*t*pT%2`X%Fp_DM; z9HkGaRQrvp@=@7&9Uv-XI~VvkaG>-@XjM-FArYYYWNM=_ss(3DPENy8Js!u4JKb3t zdGmZpH7G6+7lR1X(v>n_sjq%Z`)7t4ZyEadj^@I|I7``A$-<=s zMj>%1;_fqVK<*eg)!epe`t67x8tsE4w4RBsX~IUI1uk{LS;^Q~=q%%PlHm)_WVGk- zAfQfJuJKZcc&{{hQci6h0&)7y9>uQ^8_Tevzc_(1D)BHhJa1$*>QqK%%2IFDUuWUX!niyl`ER|d|F+|F5)j4c_ez_`TW!i=G1#|CRey0?*%^MlxUBU~mJkZ@ zhs3*$iL4(EcW347H2t>I>w`+2eAOan7Wyx{wx&2yH1P_FznlbgoQAGP?TjqYVywlF zx*ks;_Wp`YQ^XrW=gMO$-x{vqnOf-jnd|nMUDF&dIo4%RRmGcC%x}E(K%4dWp*4!x zwS&Ax+~M*qpH3l1d4#%hwh`U!-r9}7aop0raV?+ssBQE=433)Z_wY~i=ly2$;9ul` zMf=cXIHx> z$rxfTd*9lR`Nr*e$MzoZH#H*JX&(3qVDs8G*NcakFB|tv17#*Q*wd|3m|5WSUcsX_ zWh1mr4fgHO7lDEf0?1x`f85$KGF6nm6`~Zmm`tTZv5*&hnGsGp6ab`xeynX0`>#A1 zagvSFG6jmbIHT_xh8z_U>N38#-K};sqrkH#3>j@{r%jtYO=xe{RkX+2;AzFcw z8E9tMf#1M&U}v0}Hr5m5YPfOe6X&=Nfqd5yx!^^&GfX;2PY;H8qK4D6=*|};MJxYn z(aQe{f+gNVH+fs0U~0YrCMxZB8?AP~7i><3`977^t+$h5_DGrxor?2k^k%Wf5E-99 zpPLLl!UFpFUf8{oP;R07iMkboeMq9YpCkMMG^w3^MRz*OyzP=f@n}GEbiYoCv>}vh zSO_B9Q-M;_dtYi)l7+nu4^4Ngr-mCBWwSpsijz}`q1h1 zNrD}>ddH3a{s;F%^iC!}6X1fS5yps%woLRHBP1GVKZ0_DS;X#zX!E$yI=T;*@ytRo zo=N=Tnf&)_Fl(J)#Y9XKz6yHz^3IdD4O`MbQ$!05l#;qtDM+!EtZymlxmaDgSi>=I{`CCxmO4ryln|?790FO9d-`bp(A61Or4K^G20hB2=acA(9`j$W)QxTso;(Ud=$<{aJ!f)A1zEchEVToudGc9Vq1Wo9OkfT^?c<$tA$#1Ap=D5q3wt8d%CYUVYAFWw<%Bmh^ za#yMh#zNt!1(fXBP(L!JAk;sGDgedEXG~jFq%;=V2&ZVX2~s9E8+NVU(zZC&u&PH$z1M(f5Aald{)aZ5EJ)H@3VyKIN3Byod`g1DbhQVlY^ch`^ z$I)kW9-&2YaIwf7Ud@Sdhp$;~KcO_$I-g}Mj?~l4My_>zGRi>6syw6`;K@PdjAn>A z`mrx4cdkgTHkwLrBTF0dDml0tN;_fb!CWxBF9Cq#(q9zP?N*d%x4_?fUN>~L2DnzG z;~>oBf!NiXEY2EcWR6qfHO3AF)34GoXUy)aC%0ib*5m2N&h^H6nBQ58WeZ<&IdFZL z*?UsZpb2<68&Lo$roNl9i!l1)-%vh*vpe-96)&PW2b<`?65OCM(SPQ@d6?48E#Cer zyY`C~(cxPf=dx^g_ItV(+QBURyZMft*0GVse^G=do@6fXPKRTV!Pvi4wF5FRk}#Er zJ9ZsleF6L-ljoc);i7#Rsa8hUJ4L@t()F+;OA41T0ANpa0OD$|a5JQW?7>7<<*8*> zEsZR=TzFt1FP;+5(}LC*gyyRrXS`5oU)wZrTfco=3;%Vx6eSC295qmDKRIahn}fqv z^XR}5^kt0jws}cI|Lucgk4U2f-Y3{`_RF$COGC7_KJRAOO8(M`LQ4U5_ z(DBq0@__P|(J}1+T7{mo2o7&~5fY<1u5+r65w*`;j_gMc?S8hGy<%eJ69nVFUm|kG z?M-WLU+Z#X{E)}UqCjUf_sm9D!t<5mmHYD(S#N(Zl-h|S;2OEHYrP;@P|#d zv7G5$TKF6xQLL8?hJvp2dw7PwQi)^Zd$h-%$I*C{DDSs;gf*py;dnb6xd%+55YtNt zkwglOI%PtKPM_}^y>@-j+3$mP#E;y;Ccwh-P4LfIR-={&om5?*)!^)I&~6=6pc4Sb z(o2R$`qolfC6dAztAV2%kElOQ|i-oeX*#>s$OALu2X2b7^DZ)PbM5Z{S~qA7BgwIL>Q zIh4je{(f7ZIBfwe4gS8_CF;9bhEX+E+;k(#K~2X>V03O`R0g5dajEb5j@m==62G9_ z5bFNN)%181VLsIB@a{|m5K}H3-d%XoDOQD})+Xm@+j> znWKtsFP5Bf8nYgiGEdR{wwK{i9ZV&2lhNFOe-n$znU+$o;KOdS_o3PAdm!KMrou~D z?ykaFUM%^nZCiICrPP2ij%Idnb*b}QM(lnw_hqYyQk=OPG zF<&s9`v|#7Y&9&8fjPNCsu)0i&$3*H%no6ChHM5;Z=aGTD?!kzaG1z-m|SuCfzQz# z9Z%+HVvoaZjx33^;@jlxvzbZFEgFa?Z7~FA0FjpUJoPh(oFnWR{5%o?Dbx4qfLjF5!xD6W*yraumLbww}%xt7X+8 zMfreY+hOmYo}6^L{i=Q8&rG1gGdO5-&C_EM;$y(RrzFOP5suuqbJ6ocFA=)Y0Z57 zL=(}~uaN@x5dieOs+}Fby)jRW0``EvPnw2hPB%?zfX&;xW~|j-C`ePc*rddRab9Lo z_q#;OXGVaa!#J;0cHF+uVsdR8fHdKfD)Ym5bnEpK6WV^tBG~v*t_PvEO`$QyVX7_V z$@XWsojLm$2rCe=YdN=_Lb$-}Y zK|9gpj=kzgxj+RV@v3=Wt>RQ<+9?XH`G_&$Z0?s>V|NxVUSUX zhx3LkCY&Brs1nVlv*nmWkrte$@p{UYC3zr~@mrR)qRfrt%q>TeRdA;0D-z=sE16zL zH<(8`i6=uee~qUElJHiKR9M}X9;86gUSi}9dC;BR$&n+>Kh4SfU>K@}JBLrlce3OT z6*b3VW$`fD-tc>MQBvhHc{!~%q!%qTKWvpWO{E9FV84!A~J|4 z@uKoXpd+&t%SsSdX>eCDdUX&(<83r%DF*`hISp0A9P}b{H!VDH&Tu|W5+mJwiWSI^ z9Zsce<3=A=t#NtUJo29Ljq*P6r??D0GF}?Lr;!{|-I3kU4PRoU>lE1Z2P5^5uW|sJ zYtg_&VNIcYok<5wxr^Fr$y?y@a5z8qNfSJs9zuO6t z@Gena-r?C)WW0pUK`fVC#xvL?ih_mdCX}WQ<@Y!jKp0`n#ln8bQ`Dg5~l)0zNQ+En<9?_7h747 zOrm7$I5T|q=Fk&D1-^%A0O*=sYK5UtItXch% z>G(4{@T%(Un+i!$Nis*qFc-LlOrGj*r`;y^Xj+t&dI=e4-4qZOy`R&qTG(^Nr`dB@ zjclIm^5d#jGK=A5K?pP~2ogCBKq}+#P*;dD+-k|EnyvIqR5xD5^vExG?G=}8dR}}D ztBPf>608|bOdKYpX`pOQB)5&&x!9xT4;zjT^?z8DN@g@-?dnCs4 zia!|5DhI7ze{j-iwfo}Y2rH2J?94bC`7^p-rdLk`uVC{cnk3%u>1$+3_~*<_b)#_x zzt5lL#leMJZ*d7S6_mOE*4xpHk{J{j703Yuc69z`MP0~xtif@HlNPsG3=J{olX_v0fq6N<}k(n zUR!VR^KE43w1H-1KFeFbvsKsco|6#BhE8PFEYHkYrWe8wFw~f(NU+PgGwy$D@Cg-H z&+-;I%wFqrcigaaSR_pm}KAr(j>3|Dn+dfJ?*v6(l(c_c6XD; zDhJaJW?FJ1aF#{jSLfoMd678FAn~g!q{`@t%fzA>L9ehbUu+LWI}$dvBcom>upJB zFmT~(tNub_zukHnTGJkpo!P!Hnq@iJ6bH=4T4!cr+1=rI4Y;PPG#{6)9%=k9&T_&N2>|k_~&;UoUu@Mq2p-H>D24W!qM=n-KUEq zgIqPO%tTO*x3w~^EyjYE&GX>$!%MDI7>4uI%Q_Os{?9;aq zVk7N{x}_~s@eQlzrAD?RF2Y3aGGte#qDx9~BO0h2SRyM9jKBy_uFaQsKIjuw3VKBL z?oe6;2!1+gVciK$ZyX*GbHnNJGdAXVq$?s5jUW-%Jq%~lnJgk_@GN~u9T0=pcA>v1 z#g_+HxTmJ)w4HEf@j_&{($gqeE>D@XDY+H4ax;230-8M8Ju(teh8|f_N74h)_}Eq- z^7RL{LZa&j%-dzGEAe1&n$jFXq51J-aPnjG6MTsdCbqngb)|-va1!dtTXM6rQ0p>z zdSJTod0Lw@Ef+7}Ahb6jC&xS1y_zk~=V+CAiKNRIiS~5d*D`%L<@3?)#$3ibeX5LZ zRRJffN;gf}e1c59x{ypiFuAHlH3jViHtABJ(j&z=Wz+XjmjA7}L~l07YS|0`l=`2%nj3u#y`%IB?)=p& zQL&JcermdsTW13%^8B;!QCY=P9qbS0o-Z34D>D&gcyXsy@;T1dA0)35RRmu|*E6c9 zM;@ygcavbYJR5_Og^G|al36jbiZ9EJFOwodb2jJvn`M)Y?b!_y-(% zw)UW$M67i4lu@D<;1$Onm?Q^SO1{YK|LDO(+v=EUUds+W5s@ zp2))^vC%(;t#jCD9l^hUCMgUBDNVnoJVNAULL`&NNxQ3pYi{1EOtnaMC1Mct`;N@D zRwkiUfnj9OZGPND-XON;apcHW{1uflg)uKD`ofv~w6H)X z?hVH=SZXii<-btKW0>uG{Pd1D#TJ3Y6rdq_vPNwE>R76Z~`B`3OR!+c_o+oonv9 zC31gpzHZt>zX#PzWT%}?;f%g3%3iEo9E;o)>zShUJb-wb;pB4*kY_cKh)!l_7wrsh zxx6PDvsy0pjibbWVET$6B8spuJpV(HIPatb`ogDLfJ@XJ9AjzJeR*JHi=^A}Xfo1} zLI72{^Mx+CG`18-ZPoqv;-gILP{Mu%XW>YP%4NEZRIcu{kwzwA>qX0W#Hp`VTwt{V z1F1N4K7^^dhqM^gvW^E|kv-oW(RVF)u*7n%*H4`zcD)u^F)cGak#AP*4yJj78MXRi zW*H97lQo+Crs&jacluP0g%|9rk?;JNp9yidbSA{&{M-d8J~b7{pV0F!ouQMmI8GPu zqH~M|zb%!Tvp5YS9$%Qd@?G-~iDso?EZB;_LpsjfbJmk&^Y_IvcQqR4i)jAfi_tjj z!=?9+UyC1BSPN(J$=?-6pA3Ni@QGwBFPH_2kbJ?J7?~GA@z}hL?I)m_>j|i20U>_{ zA^K+Ge-83iT$`j1MU$;9k@!E(J+3EJTdZZ@C2nKU)-LklbrPL-xS%yg_iJlv;yoaCE3^Y^^G1}{yss3{LP#uO=hiA`AaWCef^GmqY3$Fq{^&M=9f>-Aw%RmRqqvQoRm2Ocw2)5F z>!nOqb^0n*W^NNI?m|2_?3#oRZ8t5;@QUe$%zMy!zv;8D7UWeyNj$rsbr6rG66QhY z#FMX_xaaZ4Gyu+017JBCxgJwi0-rg+tXBZF52WcbmBFulMRv6Jh})!G6%L%2QJ>{9 zViy8l#tPaGC$Qv{?gcG@A_k1V=B!ZK7Ir(g=*(NR#`@aUOBrSy6EQ?NA5U)`JWD6E z&0zPC>AH>CS+E+`6_paDt;+fHdSOvw&c%v%7F3I_rCOvH%~EPEd|zWhl!fetSW~wv z*-TZRrCO}XLfF#NZs9_B(2S>Kc|A|0rHZgDD2wQ&H$nq9{eQP&-}0iZTLuRKn>{>Nj@Crb4R zZ}a-}df(tknVw{ik&FL>J~Eu>={IjR_(kDK*U|NGc2}9zkaKE5U9b2z3%-FJsx?OD zvOY>j-Acds;waLluN08;AKT~W=f6lg+h6?y{`U*~S&`=VqqQan=jmR~r>>Rm^@0lMwbRKc zsoL7APQu+H`l#VHD}W~aSn4Z-D!Y4mT0UyvmE{Z{=_u^B8k|$AhACXZ12F|kgPQj1 zcMdw0=sF(9Vf8giK_%U?T{&8IIzP*lYsH-2=o(2H{}pNpARDjILvji#^kp>vKVE%5 zogS$8YWcRG+DA2!#m?R#y4v?PJ5J&`!cI>iw5-<{U`+?&^A#ejen2Kc9;4sh22a0# z>Q<@G=23X%f0fn)J{0@?hhV?-lmA4Hl#d=iMQ}U35m^pnDryx5ocI!s9UvV5K*1AE z#35}Y6n>DW>z2T?#}3c3&$k9hymolkuLJG?|_ z>IZe)2WQb`h>zg&*K|-T(JS!d6sXL~8sBgG`4g~sS%d=i0F3`p|0QJ@@jJ1M{C(H@ zemDKz=K6m;x7t3pV7;)ufANcpJ#!YSB2nH#Fjb7r-wD3qiR{Wx@#9z7-XOv&0x3uD z7xGi9c!ValO)HK>X-ii&dAEQvy3LwTptPVp^$lP771QBI_R&Z>YBl{H^+=q(3Mvsw zCbhHEqLJ<#j()8?2~m|6h$2bgiX!!CWgo~(abHq}L-AE%4SOd;TmHQ6rY=gnmpdk5 zW7c!f&ZIjE4bLelNU;0j<@Y+{|0)OH^$fo28~j(t;J?bjH!^ts>SWTbx;>+}o|fkO z96)6u4mdc zjEzdyikY;pk{aK#;A7X_Pj!KI@Q;4|v*G7KXTBZ4EYs^CXnyYdrUW#IZgJS1n$exR z()k zQIIk5n19Lmv?Si0?P6ZNfn3`~&7eU#eQTd(M-nl~t^a5qERFTU-*)W;CmW_+_mMQ<;u0$p-F2KKSn5H; zhzxe#swTOK`P}Xs0$1CtY}uKlBZsxx+}Uk>ww!F}AB;vhIemw7J85(q$IX7T+jH+e z_B6C3S(@E`PcuP5;t3tol^%}Qx18?6yur|RD9drb z>KvztJ)F+&?4{eS1s3_UYqOhmZ!vaX@klHNw1K<~VAuUQMn6V9;yL7u|07I2p{J^n z6;C)XbLyI_Tp6)P#jfL#{yvFr@{;`CgK(HxYavu^!GoMn#+BwHu28k{Zdf1Y1L^UN-IpFJc@bMpH`;z!O3cbZX+HK zQK>1z@vcfuKjeGudUitdr)FASnSLuZHIhU$9g+1^Lmvet8GY=y6keS~Jw4l25+f6Z z>?9U5?Nz;(yb}H?UI%5@94QB|5?5)R13f4SzO7Wvnq(xTR0GtXMGnl02rjeIBwR<= zDgcHm-Ytwu8v3?0pz66S%=`xq!Qvj$1KBK5ZUNT5%m?mnTCHW>uDS>szbIu1$IW=%@ zBJN1mKYOjEYDSY3RW@QsLO`JV7ABGzF2r;FVmeJDIGp#HOcl!EbU9fF(q^tUW|2v% z9cmP!bkxR_yVFiHWDuDe5<%eys-Nk2_t%*wRi)q43kc<-m8o(?#1Lv?vpdS+n`r)4 zLYE}f$v{>pR&wt7_dn5??tuu*L#s5f>oe%y@HeQlnqc{?J0MDstga(alWOKOP-BFt z4>|0M(g0(zte9)+ZPR1VYko$+EWMn{csRx~Uce`qa#)8&K4O^6m!8QnE$TSB6{_SE zg)DSd1zh(VNsdofCOn8klZ0S@LIkMc#JAq^H*G$f?7J>Clq)1DGg{6n(A5?EKV{4*Em?**?c)6H9lITjBN-j zd6Zs{$kLGtQn+#ORQOhMJ<63zX;~KhfWJx;YWvU6oY)?j5N9KEZWGngl!C_js+*9~ zG~O&s@F*R`lTmbAVGHW~0_I0WV>aRES-#a#{t>16nm;2ry4?-Vmy_YDoq-vHP5A3x zosj~;CjL#`)8eve)F(b$!B^7Rq_Rww$P!fwN{YnhpH7CD(e_Su>-D7IrRu)}JJtQ@ z7C0suKZF0sBWrtDHADQwS_n)tWKU<%Y9GMgCj6RMk0xRAtVlFKnxEQeF2dEDK!kL(py8vuhk*;(6x)*tjI* zdNF7{ixC;cz4sBrbr9PQmY5~++>B?)q36!PbmUx>q%wQemyCJMGmIy2K6lyhXp#eH z-CVbBCOhNBDh~-Fh#v*|`hEzY z2PpN{(syPKXqhwtuV!e5wh$4p$*RT$HAv6rG6#K8CmqMG{PJCaORO)eMmXF?dma1f9D9u`1sl&oC(fO))JAgw<3;Ro^>w|C&6d zdcI;dcEcn68e8O)e?11OgD{Ol&G?q}UD`6S)6{c>CZI zNlX;bX|UUCbb5lHMJ*FS2EvJOk;KRn8pcB3DM<@aeI%T5RV0y!0$aTnwS^@CjMgcuK{hU>MQIz%!RkT>(X)3;5^-id&S5C0 zrQ4F!u2sIBqT?GK$2~K7reF-&l*q@SNL-GZBOSD1W4rTHJMD9@!b|E*yX$Im+Nosg z2x3#r{D6EdtEct5r@j8*pn2FhJ?dv7o$|<~t)k;n?Iqg-k!}_8xk;D}#wkh4FIJ98 zCaByG#Iu-Gm0&TVI#|iGGdzGXM#S5A)lRSL>B%Wq;N^`XS z7A#1ImI))#h%HzgUn2Q*0i%ePfo3g0<}0j2n=XOzj9j2hqUj#hDo+W!&9vCs0v9hM z(yN`5W*hJ1*BFd4tO)-^vsu-6902vS;PE0wuigBqY<3m<@!~qV22NKRPA+1pp6t~# z$)Z!@E|V?2nI)^L*_H-`NiwqGXyLycQ!PJ#MlSjg{kkcCv{2jOZ@+xX^-mHheMB^v z(wK=CXbk;Rag9M^>~xg+uNs#H7-P?^4T64IbiIpelq&d zz=^8#Wtz&%zuweJK4gDugfH(nXp+fg;*Kr!d~bVBc=KtyhE8*6>)&E#r7TQUW6|)q z_>X8l4TR+eHQO}3)=l&j&FRd|TS<7XUh2f|v#dVpKGZ+2sx$^luBnh)ez7DUr0g?e zS}U@&Kxwt%NLV#rlV!PVv3jd=Cvie0cCe)LRNIO1xl0Fi#0vjz6g&uzt0bd{w zh2tBnK?(Pz9lTL>X3+%1Uyc3cJo!sDu4WAsf4Cx#U{+RQNd#ad6)HzXOgv>pF{_TIHIjT~td-ml?T z^mt|yu(1so-{Q@l#ei)RE;bh@&deO11{&xXXxt6H?dJUUx2hy{OMT&zWHPhQ8+Ip# zZmCo%l}c45smiBt$gd>2OHZSC&sS5e5{Zhpf$u}ad*PwsJ&Qs@sTJm~R07n8A>^`j zVqNYJVk6g?%txcP5GG684{hAv^5SOkyrmk==42U1;MO5?C4_Q?_u9`H-kZhTp+E>$ zUC1TM9-KSaY}HhYEn*INm0d!OV1w>+fBzRWD%X(;N4L!bvih6mkENFRlgNg>8eY-J zW<>@SJh$s>T7KmS{;>!?X^#b@%&6scKTxC%H zDPhgG!Eg^yY=bS^UR;*(_ob>hMZ^gFiWNf&E9_}JwF!@rL5rvct0-A}l&Kj>tPjvH z$8x^2p~9Gpcw7cU=z;6&{$9 zGoG-q*O=k*n%(@>nPEh3T5fE}frVH+VDhq}wdlw?-vp30Czv>grM@PwpvV(w^tk^t z%*f;|wVj#H)6=cHYa*LK&aI@{E6bmh1!}?8ilF5JtJh-@yw_{Eetk)E;~6>djCkL& zXY&c=QDwW}Fxqsg2Nyrb4V28AO@L-=5ld0HCw)Z4K$X6m8^{mDE$9vg%?$oZ)fi|O z9s>7X^Wf4v^S9Ocgonvy4`$c+NrOS1JLuvi4fGl99x0Lr9ho(3)LKW@gQjCpK60j` z5rl2_eo|O-6@9m7F@D!)ETIV=ci0JL+TptEPr>^h^82_NV8*BRh8-Z5EUpmPz8Jp2 zE1}^EuJB=~CP~1+i^PX))1ShxwumUfGde@zHZ)_&u9S8HChli{ggP|;L)sC?)!fut za>yKd(+_Db=uKelafwfdKGsa3u2pQs%C{($Jv7* zTcfPf!e+?;4R6-HNJ7V-f;UM52ryVO0wS980tBLixQ4X9#MTp+HW#BQf?2s(&K6_n zMXp>ghoQ1%7T@$t7K$Vpj3Sv(Ru9=KkxUrjM&|L3oAqKb;#7h+IafWFfMpk-iBmjp zE1$Dbt1a49=XQ8FKd`G#>^411DbC47&jVwvZPM_vsT%Fc;w}J|uvyxTBykzxhLSh* zm%4<6;1wgM;uvwDL?5qlmIOPw=txE+yksQRWLLVhe8kpWX_QsQL$y@7EEg-71xnSS z!wQaww;G9E|1#+<&T(^j*%5WZaOZ{O%+fo|bAqwVxgY9}+;?b=V%nYD|a zclxJ&-+$T}eq|de_#7N$=`VbIe-Bgpdxw8ZXATbb_tN{B!}Q-$>HUNK!@p^%zkP=f z=x#7wwZGYxHCt3}+57*}55~d>9dlGGciE*3+Z+sGeaI)Y^zrfjHvDs>6>YPt-C%$S zEpF&f{~{oc)t~KjEu4j$S`O52s)=b)=r9NwGw%7GDOfF-nGW??I?1A$c+_R=hLn2% zIW^-aWuBHa$d3&f0T^IWayV!o=nlISg2u&|S(Q~|=5+O`K?iFT1V?7a*6k+>n1k9O z}6!46}Sy{87{!w4JZj9qR4D?lF_@CU7+9gUC=D=E(A zJTb#y#De*;)Fl+V573kE>LtmdVyB7f`D{|FH*!e?G8*d6FsT)ajihGGx;sgNbV550 zWW-_(90q*M5yGE6t2=iIih#^XcQo$_t2}@J(u=N1c!#OTcGgaMqWUwE-^I`hI8 z4y{p- zUCw3~LfP>y1D78>wZ(o2_QPhpQ*n4Si_WWY*0M3K69vV3oXvp+$A&}s9)Y5O)c}_@ z6mT;z>MWa$o;sph+?tHciGg9XIFJNZy*H&HHblP#!L^bee8#^_Yu<_!fyj#n@gm^q;sWgao(r%?=xrBw=jWO)b6SLygGE zaiSq6V;$5Jos-aIORTPGoHLSav`3~xC)?zS%Yx)c*g$jLkq#<59d^?)K@{*Fl1B@H z0^=HXicaqUr+rgg+`yg$NgZ;iw~JgyXDG+|jBXw|A)_vLgF3gjLvmg3-J^TUp_@={ zeQW><;={f{LAM9l{J0t+=AU^Tew!Sw=Q^F_e7|mfh1{DS%&z={GX^Fc$NfaAVrm9DR6f zLsy!-99+l19+A8d5=KSXHb&&KdxgC8z~p>bYvOgv(v2nlHBsrRsT71MOL>)|y(mR4Fx~ShJRdri&!v12whU znN}&*^B3?lcUmf!nm5?0c2;UuvAHv7FQ-vvfqbi+t84r?8KDKeD3luca;{V<7GOOs zRiR<6cnzAp*0{)(%h;}#Yc($b3j9A`t1|7rR&QvhMZgdvs~{+926|a2)rNTCLDPPyoJBtY4S%#m0$Nt~H2Ytws^Fj9fEE%>xvm7QBY#bb=!Q4- z>-E+p=7%L+@uKz~2m{FGpmu?1T&q%_fkw6Z4Z=lw&=4fG_ZLNYUPqD=)pAG+j7*hp zA~dNavNv`dz-wag0b{LXeXem466u&-SdbA@7^ zIW;e0Kf9vmAKWq}lVoT3Pre(YKE;sZ4(>4h%&Tp)hAA5Lh_oPBS?5fDz#D>Go3^bf zELk(W;fq3zZL<6fz|4L)X4hvogdIFbT`Bk~40HY$%?<1Tlwg3x@x5xTUB1XQ5N@zC zsq3s7!z-kLj%jhg{x@uSiFoNejfZ#=314Gx5htzP?oLN@2mg!VC476LZR9t!e|u!X z#V&<5VQr3k8GJJY2#4|55C*%3K*#plhMT_-s!-}e2fnrDVF-?ruP7g(9gCP z<5I5HrX4{%2lAQucaVB*5QgY4I&mo#iV*Tc5E;yY?VJQ+B6^u4sQ}soSfA7xv4ZlO z$1*e*J*jtLEnpK&OJFJ;Ya|*r0pT>^J*UJHXQgtHbsdIf@du6h?HF<$y4JS;DY@YS z{$cU9T&ulnT}HZ(xBn@XYF9uc*9zYh7NV;Faeafai2AHQv8Hn0h|Ef6Zp~0?I%xiq zTqUoyP=TD;yx-r6<@{c6Vd=4?G;}nS#U9o%lj~rlq)^-mw5>Zb0hl~Tk1lD1Qx@PX zP>bCXp{+>WyH$k_fbNXlH{xe=P{Ws#o6^40PK*Ss5LT@DR=Zwo!b&R9EFCO^Tl+Fy zQ^6v1Oj!DaK*9Tt@+T84LJ`8G&tCYfWkSZAw=i+6i6Km6W;J0wWx9C6V?IH;N&BBP zC#N$h0D*Vv`6O^NpTdv@~2q;@9f|dx} zruu~0>qNv`)=+{XzlrN|y2dk*k;%*m&iLNDn1_4PeZ6Z$$!(4!JKf;X-M_OTXC9;L z@H1na&}78fb^t3!e*ZY#?~g9TfZ+!HvNFzaJ_AE&vaDQpW{*P3u5xW0 zYr*v`C?$e>R;5DQ34eZ~+`N@8!op%leqt}Eq^3KL)iu47RJvF`KqIu->c>1Jp7O4T zY#vIjm=o7$;XZVPze#GDR!;6T>CT;*HO7=L%mP^2c~AQIW!e>`lVj|_duTnc4zG8u+n8-$kW;BDT|+$y3A^oH2<15jHSeB^ zl9Nte*XY)k78b-?x!LQ%lq$0*5}}o^8TRZ-3a{d>HY5W0Y6A-&Plo_J_ zqT+>e($2@S+NRk%;fwfGzndExJfnLeQ0a59O61Zg7fLAeK)QHN69FSUJyEzP^uWyA z_heP$W{O8@gdwy$YXZe<$PL~N-hi6L@*urpWB*FN{Lc3jCL%VCthlj(A0G3u_Ne2Xb#>PG` z+D0leEzOaRvH`XZ+fHG&q&`y5O-8iCbsmjGGo3c(#ZSVSN;yG6ScywEq~7z{=}I{n zLvLvKJh+YXL$4f#FbM9^8Z9hGs{(A`#x!&oqmXMEk7_D#rE3oi zJJ3(q?@;(&Y!0^}eixlxw@_d!w>z|jp+3YHj*2%P1YA0;j|%FX_GH)zxR3^=%L7XY z4ofRo%J+sGY|zX&AP565AUct{iv8lI?M0~qfaJ7l_Wbk&22;y&Stbj`GH z*yv7lP`3ig%J*4!wUfa4t*`@(?#);4_~MD*ZuV-sQ<$Q0(N$pz%caHXB&~EF?oFIt zB$k2l!GVto%7r5vd9pd@Xy~p(T@87Nv=^~?Y+)2n6oBOM*zvC~o+&Ct#Q@VQWUWBz z(h>+uVFzP~(|)olESy_&8d0@p;bC@E#pceAq8%v8u(ru0{fY36d3_XNWJw9+hADA_ z(hk2!EYu10v_BtdJnDYpB|aHi7$F5U0;YfnHWD@f@sX-r=u!|GHb}G|?XKj|MXg~@ z_^$3iM_;)~**t`D?3E?Gct+P_G1w%fUW}u+ov6)@AiQESuJ?*>0^_N9hrL5!w|IPl z9Q2^#)9xak3yD%Ep!YQ5E(QGaFGx1`Mn9DHdhYjMDJq9@vHK)keL=+lZ@G$KJGd6x zs`|hP<=14HnDf$c(*lOH1OnqbN86SZ>1{z5Z>8}|Mz^pF5AgzM6z+3zbuJFQi$Y8F zlN#-vn3KLm3JT5&GRUOx!)~e_7Glr6qVYq=`Jv1e133O%qeNStj= z21)mB;logw8cI}7<>86EMk(Pn1;J?XXK!eqoxC*$kx3V^!1%>Gb;a{VmK5;VV|ivt zb4HF7DHb=1{ehw>SW{lT-8dlrk_0BAo&;hqFCI8B6jb9TJ zcRxdKXwv#gfhZRl04G4$zXhK|bs1FNzUnGdge@Ro=+h~?pM}-v(v|j`x`PxRq8E#& zScORV10Vbapa*`?iNMw$+b1s9a)rn}yLPTnz>Rcy&(2?lsp}(4@6l#@{4q(p2%p!~r?5GvZ@io1^%hl@eTXh%TMj+SGAd1Y>3 zK(2G;QW$?6F9&gvYk-)%EY%|zES*}~lVwGV<<%h1r$iy0LDtJNuyoS@5T@eBnY z%$%|SnciCyM((T$ydi_o(%BVZK&Q&NMzh_zgeAy_$NuUts>KiCFcvdut%Y~N+LdBu zf#^vu=F&p(vU$<|SghCDjbizXIJQ{uNsjblHuYC@bNwlJ9DkYo0sI}_(P>Gy9SPbN{ zSg(|t2<5s|E9aV_W0PIXs=%1#R$(y+Eqk;~rlJoA1X#6_`w%f@vd1e^6)(3m>#%k= z+szw!g!a>40;6$LZF*?!XI6$mNlew+9LC;KC7C8aF+CBLDT)e=ENuWb=H|@MPVv$t zEOw&-<`Er^wR_VVF~9TD^{fQi=BYcwKxGQf(fxz9VC2f@HISbdiaxr3xE73jt9~6| z>iwg&V0dPigwg)-N-)Z`Fj>bx2dR}{1NoWU4?5PSEr3(Qdj3s*NB|1>>w%r0i2U)&n zZ76vqObYL&4dL0-vi{~SQG&B6LE1h4p|VMe+R00s4gRBeGO=N>H|tWrm=~ZV~C?&xQ~nb9fsbMJ+1USs)bgg$Y8gdrHXGh zq#iTaLYbYP5{bLR5e0b?L{Wgr`oW+^{4lgehPO|!7%Wbb09ew&OM?k|mgkcp@HTEb zx~W8^jGj^OVcL*8ldEEW`qHJNg6Ytew+G9K-naR+0xa$<}35Jj- zL+unN)Xdbj9-ow5EYEix37V zW_u#rV#{NjHx|{#B4r85AKHjH8JZn{txuko!7o)WN~ZuGZ&ikoeIa}XdwUErV-cN1 z8K5>iua6S7dCebaWLG3FkH_F1Xk zXod|#O4gLpnIjEYh^2-^wdpl2KNIv2;89#U&=S=YE$ydmfI%8Uty;cOCxx%Akc|an^dm4 zu>@Vd;foYwct;+MY`>S#9k>)fX~lAG(P14nN@4F@`!Q z;B%X0I+#&9EuG!zw2galH-J_@e#tmoy1>%Gy^xInb%@te{{1k2B>vD9KOIr21{&3S zSZ#};6F;I7=zPT{eQkv47U7l3wS1IQ6g7tk^s4z{)W#aB1Eg^9nB*)M8f{A>)tN9C zcT-sEU}xFtTFEuu@uL@E%kFPWFG~Gq;d;7meR;k7(z>t?CZt2K>;OL|yp^u1#Ul>+ z57)S!<-1dsIEg8@pXA2HQKpqJSUF{aCg1u@ei1%2alZj7N=tZb$2)$&n`C)Nc~W_$ zxE@xV!obo2iOI|fmX{A|N~Z$cEKMhY^AEnfMB3&(o^n`_p4E%59yl%G%z`JH!j49T zMMqx=SjY)(e=OJqabQF12NQFKB;^dP>CdJa$fOxoD;)@Ixge+|b~!L$QPEvjitM^_ zRM&`xr6X-$(7G0VR*rC4a-)B}&&mj`D9Xk}lvUHAokRtsP0I;{S3kD8UQV%-ug(0m zFdHGy2o{m~>*O0oraxIbuDmit;gM>ohYKr<)BaK!JY>Y9?kd7E8GdoW2g-dRKNIm# z1j8&VPbaJ*mecoD8SkC1xLzJ|OWJE*KDxEe{r&JZ zy-WS-9sbaeJdI|dRP!*Q^KNudnT8~YjEn;o@kk;M0|R4^z6BJ1YWj;nxiNBryw7Ql zQZ4#^jxtLHuey>+jl|#|O;08*F6ZaCKPHqyNUKUPg+D8lLI_?`FonNVD1{JIDVV|^ z8cM<6sE7s<##yUOa3;@aW{voz3};1sNWcd#13X%x@}uivd(xrY}K;GZw5Od*yjL=06A*J|W*)RCvR!N?UP zpi|adVr?!sIK2o~I3`pZH|`>Ii>Q<5k#$&m&XU%mPp)&FBD9P$lJw^aoV8^{k+WXNXCbg9^1 z-C|Um>eFEBgQdM)NGN3y3Z;9*N)*hpLRLt zkH#194L1JuQ`vu;S4?JxRp=xJZZmKPHk@r2^9-GW{2GL1nh`LUX!L8*kP!mr^ov_( zP5XQ)=F~;NoUYJ%TX(u&HDEFU%qc*No*)A+^WwrhbU54+)QCZ+0bdGek&vPw%#tj zIATkJxe(gg+k?a}f&Fm-xLPX|6H(Z>Ya$^O``S%OsV`px%N>>VJ2ZC;`y2M^n|Dp^ zpP%a(!%eK7As@X^*^0{eO;@CeN)iT&NkV`Z329w!bD52?u%d;@?NcWt<2i)o8PZr# z8Ef|Ts+B93s%N!C6xh4DJ~I2JVSi)hMXbJxd3lGT`Wrzc@)<@DDfU%}gl5k8EYfB0 zKY#iBk4y7^PRBdlKQ#Ym_TVs`4d(w${mB3Mo$`Nrj zwF}@D%;V+EK*;@zGtZ7?4-#}41JA_rZ1s490=IA}B_512JN^pIz4- zzL9ADk~P1hElNcC7foaMWtj}WeGWlEroT=~Ln)ozm!&im`4D}H4ZlHdLk`)^fVWa^ z!*x>X^-!;XDd(nD^|3k!BLYiut`LQqmNmLHVLrr%v)T0Z?(W0G!w!Fm6L{Cn#FyQn ziG+5Jqiy)=Z_o&B_?q5ez2#ZPcm#Hi4=jY1?NEME=-b$u8KRF4%UFit*je60Q%)f0 z%`f;&Z4>7lmr7F}cpk&FpM^e8YE!(lU{H85-K7mBD#MZem(+7H{`))Fou!D4VK_xP zH5Ok}P-Da8ahpoH&+!tZp^KE9rp;-~yQp?fblB~R2$T{~unP zhi~m`agI9(2rZ@k=RbrR{$OD(Mc3U@?EU}2A%Nd39;WtMOR;dP#t7GI4pn>k5_I5k zcWB2MwO;*}dX;oR{ZmT=9Pw)#e!X@H={3xmkHeP{{wLrIE#S{zB`Cim^4O9GV|$yw z=fiJ{_y{JGCGMme78PeEExRZv+_J`EAG?#6zBw`DheRB;2+nN-5JE z5t8Vm4&!GJpPxdeI&iUvNs`ErShXR98G`wIEDal@x&)BMIZ!Ebu%idu8}!Iddt>aA zp3JAhj!H2J_H5Wz^rjaVHsQjJiioJ)L}y+}#f`nESKI$&JSz2uKNo4o-iV&?=PZGk z`_vP1{Jonp4a$VwKR!`pQAj1Vx$vhf1KAsGJMHyV;4RJp$g}yjE&0j4RmE2&DSOk| zQsWJc4})84$??&o#S$wf_6CDX@}Y3z*$pdz|9 zrsUCaR6@XhclW{-nKgik#)W0+ zCPnOFKF~2GBp$LbBW`k1Fa4-cqY^gP|CKZw#h?X%?-(M zM|E)H#3rYAcVuEf0|<8B(zWgnl+ z6egl@D;|WZ2;_s_PTt9fp^4#^cz!AFZRE$R=`kY32Z1|xsi!@|nVA!JFF_3>hxKZ8 z8n%H!JjgL9^}~a)pugCdu^ga)97`=CA;h_&fyGK7m*#U2yETOP&T6{-$-uE ztPP+?7c+;6?y;VxVvmAvSo^i=&C)kQN(J-SWc4C>K1;ZK=oktsJ9ZZfBL^woBdpyHN_%n=5xgX_keo&%KC{{u6h;@FfhKM+ z3{5-^&4D6M`26&SK>)iOs|tpMigCn76nn#pC3s51oWnN>QIMdV0WFCNI;*1JHhW;y z^#k}X>M3{uE}i3o^JhBx93N%X{)4Uev?U^P#wf zUIu5i*Sa6#8`TjL1%yeKNT<-kx_mM5DoZo#ji3WM>B0-Fgr6(fl~%l|AK8vvM6?va z+3xMSRN`b&IdVZPEk!2;xek)#Q<|+#IEmdk>63In35lhU zD=bQ@;>Kc?yo~gMJEa`;zOuZ5H`@P;Zo;dBfgLH6s&Efee-OrNcC-Xml^$x%9RtJo zar@`<3M?Qktcg$*y#bb={zph5-+Wpm<2;WHStT<4XudDIVM3CNHS79=5{e`X_0sLK z!$P#mq9Mrj1zb-jo?`T1ykaZ;6N~!C%hDMY$;G~8HR5j0(Ef2566P%m_Zayrs9sCo z+XcQ$#aHZaHUK8DGz7h=J;RuKt10iZ*m#n*bbM~sAPs^RYWPToBP;k*`Rymb=h&)a z$1jqs#hdIV3u8>zUm$%|H$WD8&zI>r(=|~urxIRR+x390f|26d{*E^;LzN2$%szMF zomt9CF0>6mnEg=RqnwKNS3@1wpB<(>K~FS(4>Sn*jf9rs#UV^SFWJsa^NrQbDVJ(& z_mTZvB_4~iy=!+}2=HCnzGR^2bSnj_dfQgCS8R8E^IFsv`-p0Z z&#LaA!W+H!zEOxa{6>=&fSjNoDg0 zCbldA0LL(uO^WcE@NfF~1Vk|M>&hedN8YFo>pN){08^0)w3dU%S*;~z028Z zGwgN-I}?Y%;xE-L%cOLvdm$35-|G%RfFg`5&2zIv+ysyI&98SETpd=i^U1RcFK%Sj ztKw=CifuAGi7lH5eoN$Y>`%CPE=jka7VHEEcX54t!`^8J-}2%Ix==Ba&p9YN&v?io zu;QkeRB2J`+_T*2BV4*I7e!qdI(tL58iv4V={cV#Mym6xBPinDhKJ!3-aAd})$7ZGOR zNK}f49*$Ls8qFO-dln5Wp~%V+PeSLdr-Of^a44azxKe?8i9)x-+L+!3y?;ROf0H7U z)KaY^|Hgm2U$oCB-sU9UG;nK2oSIL(bc@9J#ovNBOTf-Qc;|F*n?a;mrUM12)nK+R z%yA=~{9so&yElm~#W1GDmyXb*#b&MsUIa8yHVFvJ!OJ`*4Xw_3{L3@RSdBwM0 zH}TFIfK%h6mb2_00O}ZBoi3Km-180&7~^2=;9XvH<)bFV9`T)Zaa|%} z)I?NXLhRSyk@PfvT*KMm?>CZxY0GbPxCb(%Q%-yb0Y@w9sioEKiLG&@Bs%BEA1rFS=(sq2=Xqgpb2bR-uB<@!u67@h5OQv3d+5T~e*Evhae(j)X1P?XHkS{OTJ|qBK_D>w3 z7;0TyrBDNF$y!B%D}zj{@D7ekdxSi6+;|$TPwL6&-P4Xw&va%s!qS`q!bM^d1J72kMpH+jXhXgcEGGqZ3UWKQd-d_(&rUl>nUPKG_0!R{D zZudOPj+7EalwZ768&>Xc!#qzr*TW5J6O2-jDV z-Qo#tsb`EpS}tnpbI3kG5RT_2Rf+Kx8v(x9ml8Wo=6H#SU!zehmxQ(}o(H9o&qeR& z286m5#armEmMSTofR~cxymoBPZ`m<0d;ft@0%TW!XPetnF&#qt04 z4)^y`{`h};``I7y|GrcFzmPHKq57l{d-;TxK0e;xhJTKv;4fj3Unm?-bj&>#6-Mvg z>I1s1!|$Zw4LZY%=O#tNQlia-hME!A$^0;M#|<*$SQvSO&P`8PU@VN+Q8i{xSD%7v z&u`*RuPWD%X+=96iz^z)@0WQty7&z`Vz+ax<4gG^7r@FFBtL zF|-T2Jqa>>=7=AH{jixGmnrc|YsZbDMr@3+-hif$vpKNf7%wRSemcgK!|+XG3>0I} z=2OkGxeHwln;5qyBit>(*qsbWA{aAK^!qO!HS-HXW`65nnSY^3nR2kpFN%~Ih>`iV z0W#glUmUHK0%RI1#3Ec8t&CS+vW$rEjVSvbEW4+@QUJda({E(-VJzk|aqZc*=5$|K zTqhQjmxJpV*dvk`?)_s0VcQt#$n>wb*-DnB3*k@JT=bB{*LzUTtp`VJoOKyP$AQE; zi&m-QJz;F$236mLZFEEl|JtBl7f?6qx<4PeMX?r(3 zisQN=94SPk0-QfFY{8e zEjAnZ+-0%dxO`UTz>T~SawJ!oawFJ4WT@i z;ym{#V>`Vyp2W@+KCNK7c-I^DsBjvHfgPs$8$IuOd9a(*)&kyo4Cmj49eQc(4%|3{0aKihg^8EB8G@@GR}>sv^hj?FwQ?rbTpzR|1rb zV1VVqhEWFujy?KA<&C{cdanqQMrsAbbv~Won@cCZnjj4oY69yED6T5_7&t`1J-ck@ zE=w`CCIIo-Mp%CuKP#1ito^CGUZCC`DXg$2R05Y+WlU+pFnS|^ zVBZ%sxv0hH(G6))9^jB32gtu-k0XYFBhXpc<%l+yb$N{@qX+)-UA}S1Xh2_8`t!G& z)5A4~n<{e3LuIAk(d{f~CVY%Tni1n0=$Jy~6+0F}V$ozLvS(opE$P{c?JSwUq$;}H zjO$}?GEtdL(A~ad{z7F=Yy=Qw<^@eIYH`8*4YsJv-(Zh}b7{36M@=S%Kxbi>BidZn zWshlk2++K#>^GbkX%_y81zJj>c$)ND9MENoWk zFS#kdX?F$0Ma{M^Tc@Dgt*Uz4v z<+CE#@G>f|+iv)@_;wwZ#<#Ok4$Zd7 zOlFM-;Q88=I~yulzNV*&bP4Nbbc@USsPrzh9aoA)jHkkNOMA)LZs~w_mJevK;odTK zUoxVdWh46S`l`&eMML@py$l~yrJ)70x|m-ysf+nG`H`?2@I8$0M3GISduu!`W_MOr z)bS|ff@ZwPASonT(s*Rs9_Nd;6=;F>)DB0O z5rFgO3ZvdxHtM0R8{OrTBVyQDgYE>09QHq=*M1qaY}_OIzF^!#`ySnF;HbcK-hp@R zo;ff;etP#*fI#|8_dAqlPt#~Oy)VqlxR+F8?rci2RtW#oQj>=a);0kNwhIAYM9@_h zUWXyrF=q}aPKcBoWQ!=X@JIrpUSPe0!rT93-J-96&j6!^Bc>R4MWgPqFuLjn!#d;% zp+jt8ETYX|_#Mel&zg<}cN_w~S=PF^?!)loT?^Ye3iOG4FV`COb;kUQ`^G(xYxEDj zD8c?Q@6KPaf6PO(M*ph0N-?B^_;~G!`+d5IsIA;b=JzZ$8m(fzovRk`Dt9U8vTVd_ z-t$$Wfqmh$T^3br6;g%zWrLj&w2G}12`Y?`OPsrn(z)l&J_>QOQi09s(PEuP6!j{3 z>!0_I{OLzQ=XPYf;mvxAjtAQHocbG59J{{W20g6Hddt_@)w>~2KE(cKNStM*rJ zY4N7aQTwu9x+Vn$x9w$WC@+)|SuL`j^a*VVx@S)Mi}@&|VloUGk$VAJ5xo+efp~-r zOEd+-dlcCrk3&O|h-h)4gB34yM&Rw~d8J9;@>vb;$pA@vjP6WGq998qU_|t}(gCE7+r0?3eyXzqjT#28tP)eGpr}So0a) z1M{AsH1*2;KW+E7o!x}?Z%veZqlvdCbbG8X{f4Re%Y!*N$i7LPX#87R3qbsJGX7n6 z#{U_clflD5b{Et0x!|cqc>BvPh7S8Bg-^!2@tw_If7|`-x8D=L{$KjL^~)|a(KGEg zzobuMaqX8!ylnesjsIxBZT#|oKm4{K+IOkJdkw`m8_fa~ezOVxK;`%^x;;oI z@!t&nyGQ?K6K@z<|4)45?{@cbBMEJ zsESnL$#e*sUP(5NfK~_5I>Ld$TyGjah{aw!BFaE@PI@YeKab)#brLU#_y#O1dv=dP z3BZUFW?s?1+v#)<3y$?ip1B$?`@&*0>FH4GZf@95+Q_&!M!^PwJ%E6z$HV;t<6u8~ z2#-6D0Bhsin9MhTz{U(XlY+$v8tG!{4U)+fN-AVxZ?ffN2#Vq1+YY2W&-UspJus#nJg$GaZYT8btL&?NaNQ zv!s^($3N2PSOBLZ(XfP60E;6P3wZn7dGYt|i0UHcCi8K}uvst@3=*=frDHG5N%sXS z5G>)g;p<>$2G24_Y`mcwW$zxs)VH^1L)*~l9(o7YlTQGBr#vtwhHaAku@TwAQwjNg{+Fe)H!o#fv;Fbbb^8J3`{(PtmQeg7{GM9dta(1z+>g%~H?YeC&C z69uA=+i8W!6HptvLj!Nkxn#&nVh5ULTnkMykx@<;LZuCYn7-vW8UTX1$@eA1{D z5?q1vp};v3$3u?eqsxWxj}NboD=?8N5|q~w11`|*^bLj9AUL~*8)poMoFaXtTn6TI zfGwXGSBK3f%VyKxn~wwzro95}=e?9>O+3-%2u#u-YxJRLh5bSb8jt!IgDRcDpV5<6 zDnvF7lXh{_nH2WKm<%wiQ$3$;=Pz>gm7$h-1Uc~c2>y|D$=UMX4S|WlYX!7DpaiU zBUa8NS$q39_=x0dMWH+vni~v-te)Apcrj@Y6Kn>OjVW_X`#g?RJ|*qZ(?BI%ldGX# zo>htm>KIH3)dJ6>)MZVR6j5IGHD>`^7s|0KX~>Ge*@8o5&Ah29Uf^@;P1&5yMut#m z^^s>yIP(roNnQooe32H03;l5w8iWudc&|B)T-_O4hleP1NbHM>SdR)By^yA{t!>s= zCb19!T0AZ62Z!dW=0Fq`-jNR;$7%aWZr~`ihc2dmGLqP4{SRRdF{U18h|vdwST>HC z@0pq8i4(u+@?cI4WGA2DA|9_|VTrOpohk9m<9G}L5dW2)r0GdodXk|h8R^L$J=v3< zWa&v(da_SX_N6BW^yEN#a!5}Or6))9ngC1#6DBjCYzLo|Z9BGt|>E z?rDa6TE;%j&`bbY0guI8Zb2UNvDp7U4qI`A{=5-TU0@+T3A<;*!WQO~U~g6- zzEs>@hmV-X0@Bf%dhghm7pym*P@(964tOiDcrk*~FXTEgwZv;#>tjofb#I6fSg=O& z&iEEd-bMsrKnaW>48B=|Fjzc_F#H|+5=I!pLM04COeygdgrUv^2t#cU2X#l7i{Hs*WCpC3%1a}z3 zS6GZ}<8E$(!o2}(1&{c?$4mIyMt^_&mt6h)`q$L&$qm7GSSv3j11o; z+TAXQ$yCb0WNI{uncW2KE4>sR-gd_rn3MQMP-jQrFJ9tG6W=gsZv+3OhuEY3i#YoZ z@&F3x{1wU;_(^*y?n4d)ekRcbO1nVhngGa!84aI-xyvC}2?C=huT!n`n zcL2oE{~#@*+u0*iE~ zzeM9KlrVnRy6CS?*a!zZ!&Bm1jm5{Jt74i!|8m5}fuob^ll?ciLIy!Ih{nDwum zDaJ$6PQ{Xy#T$Qon9eGLXR`6{hcc$JZy|SBLHXp1*jM2mu^U0$6Sfucb0(G4a1(*; zNw};!C3+C^8!|;_vHZNO{EEOqfDdp}fww7@%LK})2r4p_-aL-Sfsp}X z_t@r!G~BsjqgtZ2xUW*p#A>iyIt83bvNM@cf=|vfNv6t*bnm!T` z0>{HxG1X>lpLzx9tPx;S{Lrjdf19-f0A3f~*Xo4@)>^ooX?DlPd@9&E6fHJsh{`F> z@q9t`*?Wi~8yCWs)+nElb-0YMjTw6_lP}m`B+Ab$D+(s9 z@b>)ja;wq+W4y67wat5TWDG#`7cMI$ZD={O-;)5PgNagRuN=+M`vxW8!aP;Qnbb4rtl(gH2ZUoq|0@6U#9iG$i?bz<2C<7iHt znN3M>+CzObTXjUg={QltT-CO;W+NXH0t}685Malt{iEYl%3uN#eFfUzyUvL=wWb=| z%9JJ99&h70vW*$6z1Dm%)ZD=#b$x*of{AH_e!Qdyl=|78PiHKfS)6k+pI>-sCZ&b)zleFa~28he?Y^kO3rf!!v)xOLw|yG~aqhM@E|YbJ%nPl4$@yV+R*{ zP854cE0r?yS)XJxQS=D$X4@BW(i&xM^eD%z?GTSmNHa!wD@q^J{o@q=kM$A8f^{ll zQh11b!$~3Y#v&dP+iHK-a_eUth1fwEAL@H;KOP;j8nhjYK5Il($j`1!K}3q73Vgde11} zp7kk9CpX<4kF}0Ix#gMVSWe15?m3_|R2N^v=pEyK$rZjHr;NQ`=eQG4wAk_d2Pwa5Ab>s@VYw`J@%fpw}JLy!v&*U6lqBs$kDA-BUI3B~p zgJdY#as4$W_txm1r?|p2w4(?83A5FXEWL*t!s_&L1+33>>F^zs+SHg}!c^mNYIJ8T zzvskwV9Ket40cu(n(D|3ZCsS*sR+B)*wBX1fhV4z>%BSI%TOXtb2ismp2&xxF@gFI zu!LH86A3f=!9x>96jgDaQuCgrZ%k_KwlnLIjt)9WyWQ;>-BElqk)-TYEP)`^Gk6+Q zsK29?CR!eKdY&P%XG}-d6Vlc})y3?~K`Zi?tx};~JADgE37wJilqUwhjo^9E*?tmc zs;9ra2rr9dN&Y&Y;_UwgH==+qNegp+$GSY}7W4o*@`8+!p235vklf*oP^N{5yrbKO^ zflV+=Y<6?9ou+G9NPTwc3JXoSpN-JQtgXBZrA*UE%|J}$xjEekZkaj!A=kE1XGT;u zv!Ux@I>W7UpMP2C=8{{+FNe|x;Z?I+Mz~8N{1auD<(Vw-3 z#gYk|1~4{itCXp?2i&huX1g70Fn36_2Srahv-OL)nU(NR`XF9%Y`8js3(ZR$zV>ux zOD+!v0yjNxSqfJy!`2kxDVw@J3_u%Rk(~L&lE1R^r<5F-28_#NK8QR=t~S-5C>JWG z(quUSfmbmf?gMMj=p}iLIG?95Uw|9&>LET7^LP`ijKq#4gQltsf=(_lXnZ`ph~fF+ z#~=%Y?qzhPH|a#QMki@Nd<#XF`4fec`gm9Y?A#n;=}P{gv4gjOjL=rO4j{JOQSz-pV!+Mgz_eruQ==7NwBRriZje|7}3bSXQT>~McS;`|@`?wsS5~mK#>|)w z;a63=08RlbB<{?>>iidHoE^&^B>4V?;d())w)F|D285P@A>N5G=-Qia@Ijz?Yx-oH zgW*hzgSmrEP&ReZ{3UCCN7Hg(|4>24J(?oYuh$JFjX9cUxD|uW6Kihsoa`NQqT5f{ zzp;}f%M6VxZlNI*mSnT5Gv^6zR7?$fj0Ef<74FR*IvLPvBbOxkA-T(?XOe>kpV`fOYJ2`p>)El~YO1(uO@WJCXT_ef1mPP=NosJSMQx8?N zpwaF~$DJQRrc4kQXj7t#zy*5Sn|F;r2pwpYL%|X~t4ppJT@2kWj0($5Ki0vLHuaI? zk)MVQUUC3(XGAaec8FE<-o0VZOmu2VfX2-J#)o}_QeQgA1;{PX0qhNj>{$KT1C1q; z1lpO7^e11Jz}}x&4`93x5bSGSbA#M_jD$0h2Hx=i_V55TOgZvk&w{MZ!Sp#=oGV13 zre%$8O_&dH%%S>vclY7pVTZrO3A~%w;B?6D&_tT(V`zQDSD%GA+VC~K!Fr3^%^lj! zM5h|Z2b5{cMl#vhx3M)dL?6)wXPfAM?ZXSk5^is$`GtY~Y!l}kmr69f9EbKu&qALk zwJ8{F4)Pyxh)bIh@ZJPR_Fq!Z#rW^=9}98{7>~ zMgwZq>RPFCSuVj>fLPB}o26nSsg#zn4N4((u#fRvgIEnllP>m|UqR&QvhMZh?BS}w9St2Y3< z4&||L-nTrE4lu<;znfa)vY0QycOXv@dX}r-B#}MAlh95xN6iBi zpkCtyzn``mC8A@g+AP-Vt;=SqR!v~ti`si26d;>x;jkjjYgOtt(5zO!LAXc{8j_^; z{-Oxa>qugvS`NrTBme^Dn{r8L73kTN`m0ro=jGCQv6?U9+ZqCTUuqNyk6gXfz%nJ) z`1{-q#&g5gaqIv$_EloyB#p3EI@5B6YXDO~FuXkQMWe*oh$xu9-~)iu{#&U~G_OKu zH@gBju=VNC>`F4((+Z0=ytuLEOnSr({pnv+3Cm&_wgm9;63HP!Yno#k%z2Nr%h{)) z9~whz=K+j>`bXdyAnDIt@FZEDi?3;$246h|WJjHRO6gg_)E-0dopIemikcpBZyfdC$5X)eI zl%zb7n6OBt7+D`xwgK(+o{w@ve*4)knw%*R&{#kwn-^(-2{rfFOs>sdCBtf+KH)vR zaIUN?Wx~cV*a#t7thPXl%Aq3Rn{4wg#$xNwM@nLpR3gc~ZEw3B#y#|VePs4f_wSqb zSm!3T^cm|T)Q*jwA{^ss4_pZ}`++`EV7QBbGTIY%yu4`JmhEAdkwEbhnn6WC17;ke zt`GK88I4U}=9fJWOcQKveSpe4UgogZ3U3C$ZIMrygF3qp}SGV=%tv_J;2;!PfE>6DaXQg2IV zrD8o9T3QRvOBsh#-7&k$H1d{&a6D*zXJrfeOjo;7@MkRgqP1h4rQ_SK97@lkX%MD8 ztffA%(E-~V#Jifo+Iyi?;Qppw&c6n6H3NAJbW0;tf(7U!lcd4dDpoYKzN%=XS6{%S z-VinO7qya~04YG$zm}aRu0bJS{F-F5NVK7rg~dkW+KyOvr1r!kY)j$z?QJkGx6`y< z;%em5|5fCQ6eV7aN7S&{~;@K1=2f#rSc znOZ(%MML*aYuZER4}KOg(!_Y21u6yU5$55(RH*|+dufQ1Q>t+5njP5e#h$4~?l|1qr^5c-UF&*h$;fRK3#$-MQtgvAZ zQqJxU&3hw1pIQAr!SdlQ6$OQ8I>YM_byuD#^Z_9jSPZ2ZXxR5=*C=D(K`B{4S*EPu zHxfh2yAiJr=&&_?MrmDgq^vcbCNup}CKS-5);!_Lo*VX>8<&=jeA;w`Mdy(-eXn5A#Hb1Cs+-V*L*q(+Qgc4jdh`AqM&u{ z(W<@lpzTFL^C?NILCZ$>l-+Gu3)+4ZG@Z?m?Jk=lt3f-6g66PUur2s_C1{7p(wn>J zIdTo<#>}2~*{%@2DHQYNT)o(CG;{fP?b=zKmxCn`k2~X0XoqTOQlea8k#BN6iX{#@ zFIK@KD)X$LihqR_2(;mrLKlj!4CNFoerOh}4fLS8MZJ~fB=%YI8l6NSOmK4L^BSNV zRAx`Yv;VpULy!VgNN2_78(z8a)+Mjjrsr7WP+cu~GvGf%;F8~NmCh-y1gT%7N4Y&y z-3CjFadqq@WaPWy#y#TAl$|J)xld%1dt{c4dW0ti+wo{a?9C;Cqw;q&6Z09gDVt@H z^bmzuyOP;=vZx8kNwBH#akAoG`vhtKk=63 zU@u8MXC*#sJ+H510GzBZ5oGgW)0RQG6}iwTeJmE5B}CIRlzgnAYT^lxT+VXI;WvZi zVMJ3gs&9%px#_c8@$5L4MtW#@$gp3Pq-l6_6( z^7&$;(JmAl`Fe@%HENq&N1#>|<(Y}fs`WsoFKrynj4=i<;L;LJ9NGnG)fA(8Y+ z%FAY;S{LRxCg9)|PiwVuF<151jA)bY+9iWxI03_^^a^HcAxJ=f*Im^iy4P-zWQbcY zDM_-39)#6T`h{DduIL4caJLqTIM!x(hrRv;Mww0W=zelVHicU6*MyUFEs6~iT|ST#v4y@%fMJu=q^}WtAY@NcvU1#RKLC!u#dx=E4!<*owX|uWnp20s?~~ z@Q@27wcZZ1Rg#|iqs~0n>ZpX&q#VA1L6D~kLrfY4hFpl$bamB5lGAe~`+U2}P{lE7 z7$N{Mr93d03xueLv~MIlML488NK0wk0Z568d(utoy05es zI$}~MPJ%j+Y9fYlo2$zxyJmd*CS=)Lp`Pf4gxbpWJyT;TxA+;x56ZJg!a=D6xM&gb zL-yM*!F4DdrNk)%auOx7(VUJH4t#b<8`P_;?-Amf)wgA#Aw8X$l}Alh6vB{k zP`vu+wc2QfL;Hf!Qbr>%Rsmnc!ub^_o%A0(NGjfyXv&8`TG@J81JoizW)by6U`n=4 zq?is;^Cb4SAD=J2|5q>O3YFpx68aCl|CdVbr33f>vhe!H{lD+

x_8{z${27xzt+ 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ʥLV2%|xE-nnSOQwlZWbN+2A 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 sTv`YGMV^4-7-stc<-@v@F6droJ?x-7>z5bh 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

4)j0$-HPpi;G-1s?O(Qi8u_u};EvRRBZHwq@ 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%0Am4X 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%0Dy_?Yp{)vbaCT>F!R>$ZR-z7h@-lL&{4L8R2 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 TR?+F9 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 z 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

J-DA#Z~;2K&-v~O)z;1iII0tFAD+3hVL^i7!6 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%0A8+tv5m>z&TMs#1({7&qaM%a-yd5;f8)QY7> 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%0A9Ct@s=`{* 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%0AdZa{sizR^SPB2j|t6A?HGAAFro%-2!z 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 z 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%0Aao#@^)Lis;8UcrL|nxKZ4tGw=Poe9e93m> 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 z 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

JhEQ*JtO!M6?@a^uj)xNzx``oBk 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

S)3N#%m@V3U;kfe#i)+b<|N$-dyeC~Su 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 z zV^}ESsPxBgc#<1rW5@u?5fPX8p=~WIKpaJQs8J($-+M)YJtrgTLPH1WBF^g z;($@7sL}{1zX$0-ahSUs5TIgiqG{IDv}T6N$fXJ!n{@j3Pw6~dC9O*b<@HpXp1#lQ zAd76znoU2y>9hTG;MpJ}g7f?0l}A`#H|z|=*MKgQV}B#dtFvo8R0;ZfL)f+GJ66`P z!99(CI8LK`jO3^#;+^|<<-vhX2UN)&B?dLk9xCAGBD4mIRp7qq1NX@J+3;cTn-;0? zZ`6UVMFEApF23$&y<$}?7I(YMe8izul6(b(UHzwtNwX~L?kxl93QjkZ$^4>~Anw0$ z9aT0{pf6|V_uWw`bO4%`g=+Y-)lEp%qh0UPo}9WFXsW3p49V_hBO|i=+M*r5r2bwz zUSVq`dg|)#f~x{Hys3nb^S$1pWRf_k!IvQit#%nLNzG~)H=p=ApSW}8@f6QxWy}(1 z!KA6vP+ndjK5aY7l+&=gMcpj3)>QpwU|klQs7Ngp|AeeO?Lx*e6f5u zUH*O0Qr{rDI<^JL2{y$^NCku#>5UoyA%cg41^oyG1!QMfkGyB$LS zwqnjRLrb5WqboxCK7{IeA_JapXT6g>PLp%LhEDH}#4G|#v$+PK@n?Mx`()x`b%l)0 z3eB$^%k|x{4o&q$&Rlh8&9t-VkSaFQ$jzK=rX;@i5Nw-g5y?3I!KO@ViE7hN z2EKxVB?Xhv;H9)fb$R%9ZR04g8&e;I( z0C=GZ=0pZzLsA#qKC>qENt&dj?`ka$}pL%(1N{G8D+$?vb{H2f=g*9!REbV2_Z+YM2Q<` z?e^8PU3%WmW$R9U8F+ru`}C1A&u_z1yWL^cWWa97H<{8*Tf5byGqqhGw(qCS7dMCe*m1&PS3Wzu zcWmdQn2&gqV)_bJzqG%(^vXY$H~rBB@ooQm*E*bCG;Y#?T0!_mf6{V%@)7O} zUAQibwtl4E2t2lJ8f^D7zi5sy>@Hzk;%lq$V4u>w-^B4-x4U+INVo&76)}I7>mHLh zss%r zFvgkyblR`8dzJhC=b!^fg^%{Qsn2N| zZMmS{0?CC`GGzwr@MQ5!7wp~1;PPW??uh1|ExAOt$=UL9H@pYj9otT!_Kt0So zzxp_u#^>IY{!unb&B*2h&puKzeQ#lr1;zS9hbPRp0UkYmSGPFAKUsMaRk`(?DcBYi zr2mTE_6o)iP}q{}7nF#frp=RuT;29L)oKOj5QO+CuOk))W?q2ZFpVq;BcDF}y@J;4 zJXHKR#@|wK%;^=(K^TW6qu`s|&PvKy%wgM@KWSccVM~!7XchSG%93g=F+Z5hWHg=E zmlebul=389bNcLtYkh9!;uVV2Q zheEw{dCtZ>(>D;YiztKIf~1Gffg!Pp()Y(yzi>)mEqV5@S|#QyQ$k+ckE+`3C_3xp zh<%kFW7#E7W(|FNs;Wly5jZbkUjd$EFP!+VkAnoYM`(IeBinqj?pGg(*Ac>KG_xX* zhXwP6*3#zE;uDNxd29fm30QN6t%pV(Q=da_uGdnRk##16kN9OdJ7G@I1!6UeTzl6| zSC^}kQTgVKNEhmiu~G&(H(o*gvpHu6p1fT0#Z#*0Km1H|XJh+%c~_{NPAxLu`v!Xn z>FtBvhTpbb{Qc`&soxR%DVn97AuNyh*-kQ3bmZr4*Oq>(L z_nMBjt7zX-jvl2Ag_7OcO)d+0Pjj+M`;53(CuX3{9%q29LYG~FHk{Apo6El@+k$?7 z5CL44)U%#iX#Sq8jhg5iUX6Y=&Tr;7mcP$m*;h4uT0b`}R()ExGB;#59vX)^AWa?BthE)X-~0+5S*_LO0&G)xijAQ!4)O8kA>o{?Pu;H@SHXFw57Td7c754j|rJM2H z`s0>+r8h04Khpk;_aD`QxbKSjgYal7;5|hLqvC0(M)KX`20S$<@DY3kknV z7lt`1zY{tGE*&X(?!^E+Oh_ZI{)g;6KVHkxxg3 zv7=xYAk2|qyg+bDd(jBz)0@ty8qBDL{2gcfM%qSXyB!C6Kj`bkrH5J$sefA;XQ71z zTJ1MsBSzIY_5M|Rk!Z{!H#;8l!IN&xqMbfbN1i~8bXbQ%Nf4tFyoCUxg_o2%-4{B% zC0};#Hi(F*oRLE>Xw+9bKC-K8U}E69+dXnvXX7yImD2A`!?+>IrgMt+%7|n5 z{8Xjl&w2^N$jRm`Ip7rGJ3ms#62n1)rQByK8S|=#QM$*J(8*>eSVw83jLvMVukgl5 zkB1Vo!lrDLp(+xzn{wC(RB$&5S6q0!mUA91WZXOSg3r?JO*AjubJ)d;}kd~_|s9(CZu1dgisq+SQkMZd%g0VqN;9MXY zEo4QS;=mb&pdGr2f!ie(=Q<38828Y|%zBS`=Imm+)kwwpirUlsu&>ZYaHTVMMd2iA zMEPxBQ%b{O^+z9{@sAY$%I=ql zIn+c1Od9Wx(&nU#q1g52Gff)f=;%Vt6Ir;TLpk*Y;x_c!u^4VMTbxGoRqGWG~a;*SCmhIq?@j%IY)s1nokXjr|+p zj$~i92AM+4>v0iUkluc>;mf%ad-rNh_=zHTBE*Z7!L)4qQ3YaeBN$0SS*ENer~M(` zHtkK};YBM|Y4*e6Uzd}=CXzDp`pfG-53;z|f zCms&Ra0C7Xb3$hH8j3wds_YbD<+zu|JXq``FXnt}(1;^9;pb4UMH)5?WUX5e6}a3r z9Ya+oV(DPNHa#d~urR#sA+6V~8n<-C7cniWl;ZT_@|9wSu@) zCc;WX;vA8T*WVtxg9&v32=EJposJa_)F&#Ze#27eC;S^XW3>gIR0uxQ{b54V@FDn} zMCb&^>q8dLVkxNUa8;{Z=wS+A8iG}XO5k#j=(>X3nxspMHn9kOuPdnj;=oj4O)hT* zyEmoI$i^KG8u$yNCQ72VKF;5Lh1^J^mZ|_VXyS;uFs|N^*`JUej6Jax`&89~)U@O^Eb@J(>$uCAF!#Rc z__#6{kw#ucXloBoqNA}L`Qj#|W(JDDcwM1FaG0$i(l&ALpn0xjG2=nyc%|urF6Em+ zyH@S;ddfIix)Y8K8RI>SH!oynY+RLlrlKOpo{WC%3uoIFSrsQkygtk9@})e}87-1*7R20qRDd-2X?vxXg8<9wVN2`sI$hl*S$k69O6 ze+(`d^d^1CA)AxAH@X6x^YqK*2z(h)mlgNR)~b zRlh)?MYl55 zGwyrmLv^98PCoj=SEoVwjt7Bh;98vKiGjzKx2{}9@(wgRZCsbe&#&u64GW3;QaljP zZ%G@C!6*f@j3&aRuOP)xMjAy;x&`~AJ>%*JI*_+d#XPQU>(RdIiH-uOz77xEN)AH`^6o*=g?&o`j^}tCw;MdNpuA*^^P7qqQfsP!2_k0)n|Z=YF!HtBDrJ*V zKcDJTBvCA1%!*@1y`)-?N%tlIt=FV`GjSK7@4UjkmITEa=fM~xUoz>W<>=6BtgHz^ zxW(f_1=`J{{2#s30%i467($H`;XqSp9f2ZuLF4AU8N&p<=za&sK(7{b(gt9f1~4J7OWz08@*0~#bkzBiN)HWgl=a+~J|&v=fy z!Hw1vo=C=J@lsuYQZ6AF<0UB8ku+_RKMjCyY4r=A-eQQ0GM1IW6BKj*aN@<6VIp+c zOJwyz;qvlrj~Z{bM_Bj344-$n2B0h#(#nh&EkMNYR?VO%0EqK%Q;Ce~`2YQhW zu6S~J_}u@7C4tLnQ@rVR7@zQuK`Hm<3{92Tp{ajxbL{A2Zl&DjqcbBHOJv|o7`=EDx8gHB3v}BY&qLp24 z=yZnP(|)Tzc@7)m?&=VIDU27q|LG9@D2x{z^4mMqzK9Ay*lzJfS&eX9?hud4cta9| z>e9gjnsmkQ(v8#G-`z)V3OmR2jNu{{4D~9C<{}XcbuNnLau5vlGmd%w2_r;)(=}8A z3(iP7%5>lrTb;4WD3H*qYKAK2It>pgR;LfX)p3Z<2{QnB?qTsFMxB#8MRD6 z3Ie78Yj4S8GMKNR1x;=_^A|~son~HoTs|;dR!yZ{t8OXnP@uPLKHwU}f|?10w#{#7 zHINQo7n(fxen4^H*knhd$VKV8G2&L3_X|`dQjUIr%oKnDbPUh ztS^jR&S&uiRzW&YSV6laJ}H*g2t_NjB>M`@pXriVRJi=9%~vx!2wHZ$2ItFY>%v&;X(6j=k46jh~ z;sIScK7lbD<-o~2R3NDJ7^&Z$!Shz{_*W8gX1*u$9==1&G5&B229A(|x``ssG?jUb z($3%xxcAR8u6sINsNmZ!!#eYQJ~X2Y7*pXq>B?*6COD||()L@E0$5Z8OMq_5jWn>+Z-csGa}nH=#LsV)PAA1a0&bKK-A%8Q7|5UXD;#!%K_H-F-J`RgO~-z;+0|VI}WI$z!`6f74cYVas+T&X0Ca|hoHai+iQ?B zkNCUC?V>ofeLiZK1Cf1-w>j*hc+j0;Z`#X#)|FB`3|>oUs2vE*UPtSiD2Q%gema=Y zkY7i2nXX}QV0$S(5D#yl{|C#-Q0=sD@s|G!`yHdG4R+MFjhhD$a`Vu)cbf+Y@~yW$ zDG>RmGrBNk8Pv8g{b*T&ybK=n{be`yyqF&JhZne~1G>(2f~2SJE0y5&Cte>e+-sT3 z!k_3}C6F0k#$VJbLSden)T|0;8Wqju|Af4j`TdY7hAKJ!kiQPL-7GJrS~F^MFNjX2 z>$&!EWd5CvB52-i6}X!5ME@QJQ}FnHy#wRo>&$!dTr(ZN-IS~7`$ISwlI#82Ctsjt zHDKG6r&=W{7oT+-k+EkY@s(uU_|MpDWecEV1S}mV95-gi_Vl+Oa~(L_#i=JXXriR+ zdL^i`$* zwBtj)C3CSrVZt!1ijmyz7!y;k8Uf8s{zmRMeo;g1dr*J>Zx-gA8l;T+F3OGl-8QX> zOU*Rx+@N=w7m1PX9oQf+T)eVCL_NzoJ&2%ls&M+9IwZ*(s!1)NNqE5G;3Pee&M7b6 zOlRWtV9}q>DR0mM9YN1BKJ`f~`Ml=#VIX_241prGQZ(piwXvZ2A0?v+Dgm^+Q3j`x zz{SMz)(XEdwW6L?xJ-8k;PD<+7-8CR6P*#b@_Yrg+`Uc<4&SwEFUB%$jd~GLLA_dT z3xT7u(@;4hHqTa>R=lG24}^|itwaSNHLRB~^>0WVN7aX+1W_2rC-%9Q$Oq2g@8&z6 z+sd0LBFE)`we?C5_(Md1hc9ofD)H2~hQA!)7+QC0o`M7`(G63CCKu3>Ys^jSl2s(dg~L1azE&fQ&a0=LrlW=76@EIcrDFJW(}_*LLG_H5UvrI$?iN1h z7j~`vNd_%fXEDeQlN15y8jK;dt36925>+q&)A0c#XxuF9`#o8=SVn?YhS*bl4aAM& z_7EqEk1UB?0S-XxFAER!F)*EY!%*PlJA)f9S76lLIUz;%#Gdu&wDQ1+yGg`F#?_h% zhgzkI1Fq1g^7z|q5xxVu!FaBUDq~UF4mf_pFDF6Z&%%x+`~hE*;e?RG2DZGOS~$J2 zdXf^#9hsIv2@7KbM|y`$*$NT(4~#nWdVg!!tp4|5=v6G6j0+-iwlP4V=s$A|6WaR( zi7oG`$=vTZ*D@bctOwH8&|!nEj*ogXppfg+=e(F5l!62LC~>w zpkxd(wHIvufN}V_=#Dgz1sWP;pHa}%67?2YA#~_u@xZfx+o}G;Zq*)~&9u&rv#&%D zVFL~@3Vq_vYsWLr$RG8Qm{RK(G)69j(J}&($#|mGY6C=y!ClZbVeiM%HLQfwP`9fU zw8a)rJp|kJgmdQZ#LP~prDK0x(TzyPaCc|N$L%Ke9Y+ou863CZdhj*P{kz+*jnj}G zj$m5tCTUHpwoLY?h90)y24u`=bf_+*beCVSB4i=dkJf0RFd)FT2-@gQgz*y?#Y;5I zFss%dYh0)(r1TX=xOP@OZif2RDwUYj%j+9udIJl5@{Wfdyw|&Dx!b7N=3IuK?)Q!B^MZmqL+< zM{%@J2f;coLm4y_2cYpa?KGW`4p5}*)-cCY`p%0ZPuFa9vi~Ed%17$LrD2fr#b+GDl_m>et21|?ZNK{Lt!R>_z|>M&r>XHGyTFPQ% zogP9KeUG)uIzp#DORXRy8!={$U=<>?V^rZc(vc?>Rc=I~cjK7qf-yVih(KfV>Q~-A zX9zthQ2#VPxj`!L4K8MJ(}UE~Vkp|j?+LB}xcTw{r~#o0MyL)5NJW@yAvtS_poRDE zvrn(>Y~g>8!GX~E++bp~oDT*orlLz8GeSQ08#vnQ;KA~IgtmMq+j<7i2aQwYwtOqW ztLI)LYbfkm=Jp4S>i=`fV+JMf*b%hXgJ5FziR+snk*Dlk8&PP@>|qJ2eQ(NQW)oek z5#ZNFzK4NUjirU~YV;teOaRw$w#KKC?JDn2=JKVb)AGDH|sf7*!Z)Xp}Y! zfVGRV(J9#OMH(b*hFqC269S7?hou{)a4!y55+I?)}CTq!n2hdQInc{dvTZ?q718MA&2dj zyT++Xg`|a8X>8Lr6}6}n{{J;tgr~4~Bi>>+givNE)TTDe9jAUMlpxc6d z6KsMdE9~3>58gXz!`+jL`!%dupa|kf1|uw2U^m4QXHaY^9|T?Qs*!=!o=cYBe|*YI zh@5enuAmX-0|RUdNA_zWU~@7IJoYrh$m)j#k1zY>9<&3M4?wZsO&!4;N`m6jhZUXr z17=i`iR+>f_A?XrzOU34vTU#e;B42^_&*aN6Z`(Zo}EK92R{{u13(hDeD5y}X$W2J z(H~I*);X<3@5Z7o*)=0ZNNSMWrxyZl_kBrgXw*IM283;x$b#)Hr=3^&t~(X7$83zZ zYFLuU*E7HcmX7QR+N@kEj^b)0gb!Z*=lO2?xmUWwUZ~;Csol0G>l?2+0!x>1L3o93 zMq^3#QtEiReTYEIoXR!z!6nMEmc)>sZSq9L%*-%^R!ew180bUL(BUQ95V?t)Q(sN> zC!E-704=jsH&A9gauwCukz|`xK%3W7Rn^wxdZ7Whi5}o$yn!&vnsRIm1Z`;0bxCY^ zLwpN$le2Y8-#rH==ip5JalxI4qbt6OKh!jyThEqi)DMHHd<(4$AiPKmF$MR9uE^QX zaP-j|k3!CL;4ij=qHfu4M}JMLM^D|!nL#ffO9NgU9arVA)DM_mJM84#lb}99gUDrs zT&PjTrxoKx4_JvTMi#R|M!mZbn2t*)cHIQFaq^`Naa!SZJv!t=x?&_lD+^UTI>=N* znHnf}dFHC{B3SSAa10f3rg!nLs($NP5?Z!g7q^t?Jtw^8tKL3!Azc3=2*;}AK@Nwn z;^_rCQ3c&M8ZdHm2F6V2QE?~r@;al>*Keow{Ke8l22lnzYyUY(*N3mhl&>qf^pUvX zSav&jrvV7rB#}xP@$?%X#1PTI)=7qL7S;>lJ@fnu-e;SiD(*ol&|kN!2Pfv;?sLtt z+W~2Vt+8jyr-LZf>cOzgVsq?v>S|3!408AJpVndYWp;!iaGg_#xUqWh-sn8|l6&mh z4vC1yjXZLcb_T$3H1x6NG#3aAw1CPdQdKo1AN@&AVP7QyRqQTBmSDCSUNDSx1iaDF zKV_@S1el;f12)0gnjw_w zBdny;O{@(Hb2Ti_*Q4tR`r6_Z<6AEs{5oD6tae60;!W=|6!ALR-JfsQ_b(l+RpM09 zkdOxXp>!zbAAO<6tEg4p*{mYs&WwBVS!BiBNjEFjEFyBLZt_6QAwHUpi2(TN08gCg z8@kMG zjYGhAw$62CC6oLPBCzDMhu}NQ_ghJ&Ub82Zg`o@yk^7Ew6k?xg+Uo~~TWl@T`nD#@ zv}^v=4_>^M8RYB`({kIO<82BL;MBWG|0_!Oz2EBxK$$0HW6)x9PnxfDiygK(rq1}q zdcJRfSVtSygeFKiiVF|!{~@|*Ur*t!DMOBe+$vs^(P|l{DrY!`9q4qxA%ozbRadY2#U~-m&M$it{0|3PEH$N2Gm=Rp_&9oy<(&t zr5`nnl%BR?4xAX`#!yWU<05bG59V?W_Dk<-HdF_aV>EA5Dj z`4lF@6)T31NfQp?Xi5|%5dLl#OIbJUR1oJ(^<=Wd9nAhe4Je9pruyGfc0^Hr!(ceE zly%o*Mx)#q@A**aag=q}vPP@i81F&<6Ql&a)y`B;l$e>M|5g&HLDizseo6gipUOm_ zXs%yY=rw#6Ixh0K!+4$-zDz3vR=D-5i)#91lA#WPPkRgI+pkW z@P2>Jp(O4|>i>p^h=UQvQaZ1s_0&64p%CLUR<`fYa0G^_<3^A$@UG)Y?#*Oqi;p$!nCnVUW9!4jo zq8b2f%+0OA4hgm?e*s{Z1~0}b#=oq^J7dCbc{LKk1`;!cq6_>c8{SJDiIc$8g$fC> zBXJUPT_}=c8HSMNIn(In;8^ItY4mau3D^H@y^^!4;eQF0Mk)Jfx8M>gjZz67EY~X$ z?9yO!MgRnRB=~MJA6tNZ8f>##6Dq&~z*eg@q3jRTZ!?K6T-P+tT&0(9l1w3(R4*Pq$T3Ea@!C|m02X})x zR{dQ|IWrO}o}pCZiYe$297^EK0A`D$<{1VBUP&A>SgUt^ts~7f9c^>UC^#2}ifg)( zMtK`%UjegOj|woGMj63uc~mKdasg(C3>lnB15<)y37n5P3%05!OV4=1S1eYsuao;Z zUu84lD;5`dn({O_B-jhJD;8tOY+sBpPdvJ|X9<5VMrtQ~&0+-0 zHFy%fW^plD!}W&ABarYli*@dY6`K6je8U-bw`hP_9#gqG7+4ObG~>PZSA}@MCS=!O zvZ5!#XXBA;+<*z)`1$FHtE#UnQ-4u5p3(XxzGqQ4o+ps_zUUNQR_bHqyTlKSdQUTr zkfl+MgF*9|lsfZY{qgL=3Axdb$t0!zo1)Sh6Gml_$WHF9VPVPm5*a+EM~mfG*h#*u z)g|C7Lx!rnibW8o!+VqHpD?=QX39HmH%!Qs9UleVc;C zNl1!`xa#1(Xq31TO23R?tkFggYEOGq#OzGGochi^0pc zXBVeu7q3x>`NZ8K6Uv3X3ZC#-0Q)j{BXDgJF*_Y>wDU2#kntIP0L&Mr+~V)2Q)j6Tk+u#}-4YPG1Z?FJv&-Tf2|E5X+wZZ}c-$WoC z-HJU3OavBpGJ%jL@bZ;h3wBF@FfF{=LmD=|mkFWKRqZPR7E1Yq(CTgpSiC|)Xm%?- zFxwRpLc6;qU|||b2n}zAfZ48)B%VNEVMBo7Lo63=!v;x0mm7z5UzEMk>j@`+o38;IKvUKKE6ax$jTA&W+& zsqKgswT(NMM)O77@9hXACIa{lY^`ah>vdTI%i&lF`>5DJ9b%q2$7v97b|v682)I@R z`u(?`T#tMO&x*i&K^Khz0=|)e&h}1^0uTsxC*alygq8&8Q2+vwB>{RAfB?;jAUznf zz~uxIbH<#3%c1?QAb}V;8SupBb$xc#J3n>8u0clxXo3Y5xI#l#69Em+OheWb0S(_s z!zc+7dgxX^mAmEV%^u=PfoEX_DVD3}PiOr>k@?&nq!ReYS6H1<;9GRQw zj7K}nmB{K~4P6m!I8~`cDN5~V*S0U_uEhXwH%pczZpYNQTD2mUYQl=Xn7#gaAwT3HVSVmktivK|N|b_5t@z0*x-u|y47$#~MK zoJbjAU!Gq{f!=_Yg0;s;RqTHzD63|dPw)fR3Xhf;2%M!%?aE{>ejWn{4o zx{Deb$!QwUF1O;{0SLgNVGht9YmU&h)@2(w5b%Xpm%Td?9SCRx+X6Zi(4r8k(2;;% zrL%?LEDvZ}^gqA6xXF2T`Bgv*c7L4q%paopd`>xeIsoS__a?N$la~Lh>&u^hE?hMc zJD4rTDTyad|JN$My8kvE%2`YRPi%7vjg4d89#yt*F=o&{tyG-Bl&!uFm_=Tq15TAw z7_u@$=lQJu^Tlc=I=cXxyg%f4*ynDCv5b#RcwfdR3?9?_TlAk!gp%Ve`tLd>yxf1+ zW$@_bV=;TKCyXClA~vgR!moS4`vM;1!nH^Q@PY9DHtmN(`_si|c@6;|F){*N;I3ph zHI1jYy%H^n34l&yv?M0LuF;jzQaAvhX%jN+amCzEmaD~x96La}EE=Q>L@%YbX=f)a zU?L)OH0|wVnydm%B^$efK|8+boz{*ldFCmfZ?$RP+icph)Aw);pudhR*kh$)W5CWumW>-u2C(-}}S6-o;6;-F-j@ z*63FE0nJ=s*I(A|;`XnGl}b6Tmys}ZC#vXzKQLa1MoV7gHds=Id8Vv~g4 z0D+{^6P5zsjS7V}0UgjIj|SYzy2ioC35laoA;k4W9t|Mi@PkpIz;>fTp-v!Q2)&SFW1DHo3N+d^ z)I6h)$^y;Q+`!nhj~mmSgtpCStT|-`-~$0~Ot=B~P)uNKo;N9{u6f>=9Bh{JmKf5p zO7rG+nJjEp^X7Kh!0q!>qn;n}l0C3@@$MXk{f0@S256~9q#5lqLj4xW>dXKgn9=t< zIwW;g>xD(%0Uep!22w9CXf(-fL)%eHuFo#%bHZaQlUkukO=SbgX`Ng;|4tLlXuMp)D$^P@e#f8_)Mr-pBmgbnRAB%m zhM{aR^Pz=mTB8$k#ardcb6lS(!;x7Y&2)nL7J5L{wE#5Z^_&f+i+gk5y;?A(QZcE2 zJoq#lj$oZGvWJ%A*D9S(hPRT@1W40~C$|}y451Y+Wv$twPty_U2vVYDy$NnZtkwt6 zbU-tzsg0E$0392woA;J<5|K{Dw_U1i<+uUwnxpY5V3^Ai2zd6sv6?K?*;o#80X!S5 zvsLHIY4d;vS2O0_&6~^Xvzwm>u+5!uYm6(JYl)_A9d#rtLjpQ9qd6H8(A=#fOaC_5 z%$GySvB(W#0WD$`nls<%c12;zaar??5v$OQjoNW@{O~Tl9o}HC}!J zv?uVYQVNM7Yi{IAc%v_l8}a;xaXbZA63C##B%gjt&pKmrka&hy(Rl`B#p z0BD}y@K`jo9d{-4W+~wTP4L_0RqvwTe~W|dvO}iPE{_JJ%TAX@3uTF*_pmSZB{aXc zAyW3WbK`)!8(Fm-%596*4L6RY_clq&aV+)Rh~|0CtS5I9p4ZG;dN*;z`NpJjr^h$P z9NHDmGK~~uAI?5u*|u+Po0puDKz#51@vEL70VF)H( zifG)TIL{NW%k$dROGDfUpdC(b!Xq3G1U8CPp37 zT@|#{88t?g0vhXQT%)%Ga+!)gB*OBUF)O;*b-30O4mvjoNqSP1wAv=nP@Ml-%8 zr)Sr_lbg%ypJg<2U$8{`T-*Jtx5q!<^nSV#Ce07Hwyn^iFlv3+vMyh-B}^SJN<>d6 zBR*zJ!C$@n@${7|3q+1b-B&6|`Bv{GoD6B#b|SYe-s*kMlM2p8*CYl4+99Pt*G2>d zw987MHf?)S+ww*WXy43loVDBWX?do}ZvvjwuQ%K0&PvDktoWVB(>B*;`&XB5&rW{+ z!@J|Rbz#`?gUF_R0Uz79-xkCjKML&IC-J1`q?V2Frac)C1SKHgS;;C#Z>9^@vg1>F z*BV-|_5(WM&?@@S(DS%!K#M((9RphIx!@O`XDGNEOqqg!fM)KD=qP&j>I{v#YQoP5 z9}7TJk&kU8eP{G3y(@(#Z+(8uoNbmp=k%@&cQ??KF04e#TQr~smyy{m+jgb44U$OE^~AUj(a;ZQUq+`RtgFnT z`FNMyWmE9Z4Z5MQpR0BSJ`cK)d>X93h@%z@9KUeUy7gH0@_dmAQppoMjI)OEwdjF8l!A0V! z_YXaf%l4RiECVTF#fAodXW+fTay4hskug4=jlTtSEM|ulD>MT-;jLS|O|C!(UCU_e zLEF(A(4wwe7Q+Bd7e5!{!z*aI`nl-KT|xU?$#*Ms@W_r=uY2z=f2@ZtIAKU?53%*d z$|9$07&(?Z9oc$hztWU+)NDO=t?_Wow|gH4);k^9J{|Q;;;Htdu2uhAWy(uDoo$fD zZ!@TG+xP5rpKSa74tT2lfc2LR%q~iRC;eS(iA;D`1VD$9=ZEMngXoA0j;rOB5nMTd zMr@Ip=8E?OsZgjB*gBDjK0`==j?ZJfP+FtnM1&T%G7gQIAm0RNSS6+52cklO8Ay{$ zN>nO@TgiF2p=gdQ(C`dnY2vBaH;<+KCO{+LUZg%4yn7MQ2<>t=UCB;L6+#k!^DhJh zB58%oF9PV;GVPN5A{9c7_b7KN@zRe35^1k7Ez*P!`L|o7gaSKfERIH-y9qV6%EG21 z6y-O_33!6%lq<_Sfc77;Ck0xV2dbtv7EC130f+u%)Y5aj-g@}%H^bF%zOHKl0L|Al1gTu9CNrUJGB@ePEA4n~SgkQxQnf@I&VZQEWLK7I z>jq5}^mbw|vc7?nc;6RtbWZN)!}VsBzUSPx03Yym8Tl-}B{~$#Dq0YTL;~aVZn&B9 zgn$5F8B(WQkc(+MaY$E&#N3OE+rPT&FNR32n2Lc@ZgZRE;Pg$$gl@0A(>Kpfi{ua2 zy+7pP#_g18TN+$VQAB4|G-i&=nrNod$Xu;jWB+}j?OMAeI$+wyow8$WI~3Z!H@_r!)_QqBC&GJoP4CTR=_A^v(86Ai)~DOeozynv=laH~U>l+dKi4+} z-n3gF-Y4;}+AiUU>-XQ9Mvn1vePdPa4he+J3)s}VLwv-&fF6F+ei_Hy3)tY1K*GF$ z%>V+PkZy@GTKoHkg zX(nA%08N|v3TJKEX*ucIrbZ{Mg@EP{U8S-v4t*-{AJ9x{T$_!t((AI=KBhXvv&_=R~|V`l9K(3usPAyLxwhb=gIY-fD4|&WM~ifOe(g8wQ`yB;d0AR&#$c$@u^sn5&5MJQr}A zlyD?h(6MmDpaN1jW&oYYGgcGqhuO#K8SNxtm$qmT6k6y81<53a0v>%*0Re{>>2h}n zDW@V3U_8&ajS9&_laRAzJu8!t>Z3-IagYwF%d8K>sWc2RzjU|7SB0G;OoTl@Gwu0= zBCi^NY97ak+&Q0B6R|42@+e)wu?@oZ-Gs>I2z1)JK>y~nr~#z50)uOM5;0*fJQvo` zKA(W2{Q{s7zPE6M=o`T!$I^vZ_Ox^+L$oi^%`SL$nXzsd&&g%wQ2+)be zMSVb~Qv@^>BeHb>kyk39S+|K!Z#_{H)lpN(K-nABY4tVl2&mfDX-KtSVke z>~nyY#aL0h4QPWPsxGYz|G8baE3&PyNh!3=#Y2g4B-)jGK27KM>j!SeT+i%U%H0D`aKdthrsUyW6#=fp(2; zvwJL{J(G6jnw7KxP0N>!d?UiJd!j;677qcPunNJ}Hbc8Qxm};BUS)Gr0JL~hsNdWq z=Jf?Zz1%gp149uAO?ysPYCe*ZY*#e8#8d*BOOt(e9GDbrfKE&kAPrp5<)uRHH)|nbO~tg zHnG(%3Vg#RXD{v|f^6z`!>%bIK5xeWv}@8&NV_JX z@4JAuxr>Yzn>i_-gc0i_sFI(|?-l~9hp}vYQ&C}g!qK+<&Fw~xe9+#D2W=!9K@3}L z*I=TF7X$7Y>{V7PO;N!R8ga?i*%iDR}t@$<&j*0j4pCLVi(+-^3q za0EmGg96d+BFgGd>Lz~<9n0EqSx|AEt|O@b+Dd_p6!L&fVAP4TPO5+={ngrHGMx(n z@UhixoNGNXN*TJU}NVm%6voWs@8)1rnJml#O{(0*5{Q?VRone^UN#*+Ry^5-^cDdN#Chc4p}BcW}NuDgjR zBNn1jvJ#V62+%%RcT)$i7*h@-0k&A3xnLBaL%H*tIp2LiM`Y*q*o{`xJGmY-5Qv3r z01d?_fljzr*V4e`ex9x}uI-@9R{2ZK0~fFyw@wY=GKh8`vGGc?Oh48ldYiAFm;;)0-XGJ z@$T(gqx>97$F*$9XWPrO8f`3D;x^O_l`WfwqdSY?E~5u zN}QN`9@w|t963OTR_HTauSCxyW6XSm2GN68 z!{O6f*mc4cN7Akn9xut~niI)q9SF##iHcp5L^BlyjyLNC8@#_ob2^_gf0-7rC@)|@ zM@F<#xlmeLKr@%#;kvBECGcOI7}2b@#C4LcvFBR_dBfib(2m`EQ+FUhyXLleHBaL0 z(DR1J4xoLz`DS_^n8%#+&jNJFqSd`ons7izc0H$gE#Y}>oK901ExvU?Csyy>@{dwz zm&#RfeSC3hNFr6Bx%lPH>^5B~@n+3scLB63qQ$s#Kzl}~38ms0Jq#!FHrf|z1gZhx zDg-KYz>L~5OE+UU(!Q?KjPJQAR$ky$Kt~p6zHLLSydyLY=)|(;1h=^^7q(YjW84x2 zv}4=zcH@9{ZF){`ZGiS{+UCaGk@7MaRyd#oyHTSSIG{t@QEO+{0Ccp&e%>Ge=-963 zR9+82CuFAUe1)xs^Rcuuc{CdC$jjAamJaTQ8Ej3AONC2l0Z)5Z*F7xsaEf$rcS+}C z)BZ^519Nn?9?GdA0qwHrdsCK6KzpWIgM7(AK>IdUOZt!ibRgrG}t6HIqIAB;D%rDM@H8SAJfugE@xb#N!^uM9pU zCvWW%8_k8bT@n3xGWT2o?Fm;0HFfOG z0nxsp=i-=Cn!SrMOP*=IDb3!6WsW^S$DBS&(=hK*KqKLLV62n_Xvz&uqs@C1pdG1g zed!d?WYTE`$MeaMpb+q$IQC+8L_qr-+T1vx198-)3PXqv#kNg7j~)r5CMSgibS%xd zoZbo03DdU4vEaIt8V=XFu5?p4uW)TAjA|sCE0>EqnOhQOhZ01$D%yKwR|td1@9$!X zbIbJTjyvcdzv{g_eqF`8UF-DfRPV8DHG#*m`(z=CxK#aRI*BLw_HQf1w0{1VLq)g?$Jmfp%ZddFMrBpz(xIe6z}%0uLkd5 z9%~0l2QU4bjM{Ah-R4~YD*^}^EI*G$XF-q9A|nAZy*^DKVrM`Xn-X21T(TH&r5H#N z7=YK2Rw$oK76Wde*-gMDive%TgQ@CZgU^fAm_a-I-A~kMYP3Pc<_yx=aKiT7jlAFZggW>7#4kgDav}p)Cc@?(w(LaAcA}K%(Wyfwl8CAk zyhe_{&M^ygJMz`_DfKRva{-ii7s%0$=-`pJ3#T?5yo;};GNVAdw3CHI;kMqsOFCH; zTB{r+y}oDl0@>v6DfRkf;4OjA^{ut{M|@yC00o8HMh^mM0ICEum0AZBfzY}On!;^s z5JIU7_ZD4<#4g-hbRn|s0>_E5br(2JjBUF>)>#4q@-jAXlH0X@0fv)YItSCJIDxl5 z$jn~gl72fQTQsM^TrQ?2;Th1xG9Fo$B?YuE^xTYQvVp3r5~ey3w1|M_A~~1CRhB9u z5;`J1MaowvGTt``#8R#fb?L#Z4dhi7&6b4xWvDn?a080^2l62DOFnC4B7|L(GsS;L9##R-N$8%(z~tNI;GN<6-g1tb;%_ zQ;p!0g$@JIoC~Af@CD*phAY@$J(;C4jnFQo2So?ak)40ZB+E9v;v>xW&glEoK`{XUeZjr zSlXg`7q8DQdaOAL&_w+Kh1n~h!25ifPE8{=&`|kDCi6-5P)3!sXe1Ui3Vl79mc#W4 zdt#f$Rux9ROXSdY2$Jd#g6+<7yo=0A@@CN8Meb$Z!|9sVskrY3j$?DSk44^e+@01K$(xR6IUn>{ z7&s>0G`gn&4IADxjRnh_r?&EI;7Gh_49o(2EXd%Ql?)y@iD9ph?}dSDBNM1HXROQ^ zxHi0LqQUZJJ(z^QYy%C?N};CHq%_T8fh&cYom`$@Nug$e8?Xs!&?UV{5<;d{26Sjn zAIGK*3`(2OuX;aSU0&Y|-XC8Nj{Ad>7JNR#K#*@D%Ft{v+h)E>?OXMoV@9s{MdhYKH%@qfOf2h z`x}Uwhx=r3b$NDiW7=VWCb6bYGz%!6Ouq~!?pVMR>q!kT=0Q6<9Y{(BK>OCi^bJIf z!&GtuGQ!KBZ+d-}CZ7yl#lHz-gy@jVaMQbZ-+Oy`)#G0Y(DqCB8;BYQ>D^hL40gF$ z4{jF=%n--Wq`c)?3!lDh0GeI2l^U*dvUqDr!|%#D=EUrH0Ttp`vIw$X|K|ASU7u^) zHB`~el!NwaGMrvC9n=BMolCNnyFk-f-c-jg;mu30J-SK;5C|Uem!f>)FcT6bfdV?T zxgd_e!hK>g;$DHhWL~}e@${8@b$oq%Zdm!HrOsld>`v6Y>;81pyEuiJMx*Gv{_$%@ zQU#inXXwe`_4VbuE72uap$VfP?AdCvvvfXQrGJyG(SYX?(P}9~^eP54?Uh_VRf|~Y z_9YYua7RY}?DYjKuxoMS3U)j)b|Y$>b-$2yZ(Z+n__3KHRAtUMZ zE>4h><>e7XyGc5`5w$s;^o>VfAf}6qHV^_$xhe>o;5|ntLL5fzbfM6cNmWhID$SOQ zd6o)6wSZ=FUupjCUB5p&f%E=^8A~!denlstmir)`-%sW#f#!9n#eSs*ezW?N4qm@n zl0ER*{R&Q|cfCC4Fdj}s@&mvVhtptzm)*s5jINjJ*0-2Zsz*T6vA~Ve2EyhL?s#?D zji`+*ug5v(^Ti!YGp5EFIYq6!<0}|#Y1L6tp!IR)^MASlRp+r7=Q8i6P(mW00zu!L zAD<{kGg$&cbeqi)tOPjy`tNSu^e%1$3f#FgT#X(kz}}f+UXnSuT4b5v&M3(&}fpVPvRsionYE;K`)lZVZyFf zAP@<|uo$h~<$|m2i0GKzDf+OW-u7zEH&eU-p5S0OA#6hJ08PcD4zh>gc=35)a^C^8 z^_3q-^c(1!b_ygr%;wHuyny5W*7UMmT4|60ms2$4@ON53d*=HBXAuW9tKh}Sg7a{_ z+KkZbx|lJUI)FxCJkI$-I{_643vG`#%lx7%#4iInqA!Ye+ic7Pm7SmJkg&z_EAQ1D zP=TPIaRiRF@eF54Pgdn+K3!({*%jGWZ z4nC30U5Wjz;Twn=&u}u&JwY322D=FxyAid!-fUM8Uu-I%vh3B4su3(+nAt2H6USW= zSsizZ26x;g5pk~J=9;w5514;rxJhnAlRK8CSsp{3a51T|sNBwOo8!{;rt)`OX$%7B4_Y78<@)`e`vz({@@7uK;vxJ~BB2FQ8fNXyX$#i7G<%rbtp|VGOzIIDRT>VTc}g1O9PLW_U_(y%kg}*Nq44I%o0pfTqErZI zUrG=NLZx8t1N08k((Xi!lf0Gp)r<1FjnEBQ`yraO@(iA|c?-}Hdvqw5iP3D#URVIl zTGT6&fB)+A_~w|OrbN86h|c70NZHZ}V+n1R3#sx++R%xqOO=9On9b6_ZEHQc+sDK~bxpvnEB} z7`SDZtKRk5CAW})#tz27-H93}K0m29^Cjl#9B$SR+3+r<4gfEawqH$vUt5&P8>E*0 z$?;Wh(7*ce_(VF;e0x8YZy;)S-7KVMaSQR?-K=T55w*L(=UV*~cIh#@5PjPD5%$U< zNVbj}4^pA<1>oBY`55HestQ{^Q7KbCufH9wChN(lh$IIzlleoYP-~yg{GkZoZCJRF z=L910Qm(c$Vfd2gkPnLpYawEI6IwHI})`s z854T;CYu0FSKtz!LbX>e&m|Ql1X~X`q`U~~GsWk52DHx`tJJnDIdmxkO#RnW?ZYW5 zU;rJ;=dF}770@>EMko`G)4O@b(6EWeDC0U*ymZ4a7ic83M!-O4-s($2Y6WsKFsQw` z&7e|7cEahLk~k3UNbYC4=Erh#`%x9?SyP)A&>${S$|9q@C`X2c8d}&?xJVs9o1Eq= zE_k%RH_%|6=Ibj92O%3h5GDqoL0b^jAS#)^4_`^r!w%;5Zy;*i1h?jLgS|MUQZ6fv zk-`u`@A|sktr?nBcIV#d+12s&&Ckk4BGtYPBZpODp)hbeym!CAEOKbq zw8<~-ZbP5+O8~S-vLe2E`}RpT&$#>NKACu@%eXRTfDXj{NcLe5qfqi;uWKGy8WAZA z<&GpO3Uj*29!QTVK=Z|-Um9Jw!YJ8o8Sh5a$loo$6{ZG}8^&FsTyF0|88#%h{4jQQ z_RrpdsMUs5Dse6^`aPbeD|nsis_%Eh(Rx9%0~Pgs(zxa>BQA|I;C;zx4x6p0fQq?W zjWU2*demR#Ib5a60Dw*e-?`F0$;ruXNE!TL z3($hOoOBz}oWXyq^yK}N!^FUEUHG4Qx*Ad(2WXPt^1ho&IUwF=Rjw+wRg5GE6GN;P zt~$;e4$z@gxEyapf^$tsm7vo*2dX7|*8{;!0qA(g?Pw>Wb~v` z{>oz(JrW)8R{?ZU8m>31R0~r~^C2HxNBoA9_B zQ9Erf=T23pxud(*Zba=gcEvuRO2N{WUZ5E=v$+iqBYkRfbi_#!U1SF~pG=O9*^M6M zFWi^=+@JtD*>$7eg{XO>&o%dM5XzeSh%n?I=NAd+l)((72yk&(XUBmtq9AhJ-B@uq zqBe$3oqh`aT7*hrK+_Y%LKMw-sSwd*FiHJT$_u)z7X$ZW`ZcTL1Kz_u4=)zoSRF&ZtX_YI7{jcU!7s`OXc-)#w-$`X)i{81JPaY@8i@PjBZD5ksD~z zg&K9K!c^ycWWt*?0k13hD&6P$>vYU}(f|!}rEX!Bc{>_6cOz2#6kt3p_{jdASS1QNgkLg!KkE}NcEC})q zbWLxHWUCVf924uLxnHFxx7&m!%F zqUr6B&0=SwwhnAnE8U0+qXe41sINRVFk|p7`bt}(wvO7{tWrG9(5McA&0NssA&rR5 zeNn2j*Z__w;6q5z-D3iR@|Se9Sr2cg#32%}Atabe6l5DAt9(I&@UcL7fylALtmx4B zrua5XqC30gbD8gerfZRosPx$ev6rIZi5B1@^)%&OgJ_?3f<5WSg~Tn-S3nn`R}}!2 zNt90&1L%-UD|C8x-8;Fty#CpgATHX$m*X3V+B-QI*JT*X(K3s>390ZH&7NBV(i*up zWw?l<#27z#Z^&@5rO_nupKmWEMP`LWY%frM15vXAZd-cKuqnijv3Q?hQ;5lE%ZedF z)w7Xa%jMPns)DcJKLBV?xV+_o!b00VeR(^zmQ@Is5df2#Maqc`2++RpDt(70B2%an zY0=On5YMm7TKIU!3`DyTwNrGg;SO+Xx?RMvs2JVGZpASwnfVJ zmxRlMTqc>~c^}X_E~VXw+NTf9@)Z3{6-J;L8zx9*yJR=j=x#)JO+Lu)LUDIT9qw*K z&0AZqk5*kFu~|veA+5W)@RlMn@rC^I;ci>jZbWSi zUzwG+XiRxqafbP(l@QP|dBGvG5EEJ(Adnb6=1ads?iDN?u7rKZadzExcOhzdxB!cq zw7{{mqrrJMqTf&rfDFn)nw~VL)i4yHU%n7eYD%9PJAp;|)QoLAw2P?16}AA$Z8=;u z60!h|i1%12J#-Y|U1T|@c|dbfO7D-&`Lttq$0()Uh+5a_$Og0F$28BKMbh-hobRRP zY_^%oeey^zbjp;$;5i1rxqjDInZLx=Jz;qmVj=)-^g_R5rFTHn4u7X-{j0afaQOZt zXZQjF;SNTOor&&tWyETh+?6r*B4g$UK3XUCVk4TJDL^NN=&s(y4Hv5D##9oMiefsK zJ?XTFfOd@LlPU$OeOgmmQ}ak+t}*4HgWiKyn#$Pclrf{#6peJ*V$P+@K(udi&gT8q z03BGBOrZ-|#6IT?+dq44-YESYondz)YTkXXueIxyDcfdDB^BA$<~|XsekpXqN3wMX zL#5u6rYPuI`R+5VQ`J7U=Y}Dtd>pvuobo~la%@i1k&bRXTK@uQI!#B#1R~q4;=m}~ z@RwRZhk~LN`o3N*zRC(upb<%iRUAmZRtunGo5DU^=>#OeC6`*RCbNk$)$tKTao9EK zTBV!ouD%|-5w(uoa1vLJ+=vNZkK^KowXGi`jT6D;mc~Ow+pEmJfvBA(>it>&Ow@8K znma~2?M8Ix{6w5M0yINIB`+!BG7iNhi*)Xm0=m6qUtPgQdA5f_97u>adhg|xK0w3% zTJjA&msXwa`=_&PXgNg28Um3qGqw6n!89;OvQqYT*|tU zqkUo3piWJynH3YxD@4sKuA(F0Lpgti3cbKkR3b75&=H@=Y(!KiZlEnP-E(?#KqnUI zisi}-F_ra1_g^If%GQe&?_m&ASx-RVH|%sJns%DP88`bz#FSq~B?X>X3JcIaS4C7i zlStt%fDT9x!L1*x%Gxe(!oZmVFhT{+6q9S*)q=PIW4n3pnaQ^v-D;K=zxxwTunX=*Qp%X z23V;ZAz(IU)q%aN#evdJjv$X)-;Gy z=yt9n&%Z2(b5VFmTuQLNy6$0ShSN$0?#WoRW+ap?Ty5oplgkUZTOA9U20+`dt8XB> zLpX;}GDXw$gnd-pz7(2FL{f1$$Q8saJ}|l(@z%P8%0g02G7tAZsqc}b@T|%UIPz{PnUS1oXT5tx=Q%!A*%nAagl6cG+VMXVq?Yy zi9r*7d1MA>4L9+-Lh-F_MX3dvE!&O&fOjlHS9RFxd@^SGz}1A}{fVn+Z#S7^H=?#K ztL7x331vH1nS+4ES6>I|{aA;}GCc}R`ISGz5ziE)Pkg!t?d39^_xo>6dmvRM10#Fk zr3WBWOmC&CF^MlklFN}<3eBo$ww4G(Hojzs#1`K`bZ1)7I`!^G)XL0I&Fmq( zyepi^>{eHzJ*z~+j93JCDNW3_q6gP{U@oP~DR2NCN(MVL^7A@NKu7E$t4r@W{6Pz7 zI^-?03WZ7nE&Xk$Kc=@<;--GdD5iQ1bzO*I3P zFfp3}@HR~eGHw!eMIlb>bUzKJlQC7nG^fGamqjyhj^5e6ybDpg6Kb=X4zf?9>0-pE zg-Ie#KLoqqayne6QglEPS-6jLHw8cka!x-f85N+zZ_4RsNz~4^n{Ad$l{yXIFr8Cg z`aqMhOjs2!NTS#zCt|@TPEL#x@iHX)uqAQV%0plB@<=Fq@5#%v*B9^3%|&UF9qhf| zK-4ZFy^eA*?8~tyRXZ>#v_*TbN-rhYdlTB;TQMA&`W~A00A2k;qzeZE2`R^9pNC7c!8M_by}G2cT+TU1J3H2i-ifGfD4f2oYKPKR z#D7kcjruPw+eXEk5cRL*7WwQ-{M{uFd!qIw7mTXeB;ZuDMJ8`qJxbWIQ9W92_@*$@ zBr&e1T(EUXG`*fk0v<^qVM`jt*!lOW>=nz%UU$dh8aooT6MYIN8-aa*=FSnfyAZWW z=4g|45ox-+By-%AsAZ+{iuA;+A)sjp)xwyPPm7OKrddS$hGKE@z}x#5e*;nDAXO_I zp9w^PX828IlP!r_8W6g0wr6W87d6m~L@T?_c*$f(2XwrPRg@}d2Q*k+;Z`>#>l(bS zLn_2ULio5^%;6rGuH6+$7>K#{cs0qt6+f#RwWR*1A{)Gq>lwdG(+L0W(al%bi_H(>5`9M1lNB+v#$Tj z3*zkRP48NnhVfmNu$i_NF3?EC>eph4KdPS=-of-j7Yf|Ltlsj*z9zDuFPwv=7 z=W^E3XQ-h+I~i2f1F*fW(!b@Z=rKnzwko_#7CZ$sdq7-VLU(%CJyYrtuj|>%tKUG> zN{^JARdXqc4y6a04toLH+E|#50ovVF+TDeyU9zmXDe17H>G2Ds&^QUVI3U0sR>v1V zo8@9}$HQtjqP96cipvZ~{rrGtXcA23Y#;}q>BKPG(@wS+0s+a32kpQsUZntN z(u)U~#GIKL@jhKItJG!~>N@}dhjkdtOLl9mC`o{hU9x)P9R zUkEI&NQ0y4BIBe%%K4z`Y%XY|5gi)5d-9#1I>`VXiRM}{6)~V=3!4GMcz{j}(U~I8 z1YKi1w7~LIEWPsEwkRhKXjd?i8=?pS?Flh0+3-^;zqc>T4D-!uG3U{Noy<_*yOzS< z6@;vc%5evnC0Mjs0)c2(>)b9x?Nn65(I{Q2&1SinXSiFp_6(pIGxIiHs07aPCK)7L zs2vso8@%sbpS|J^FRvSRcMJdwK=Z$~+li>9)~PHN&2HyFbI07fyAidop}w_wax`6o ztBEMqP)-kd&R)G|3fde%8}lHcxJ_SM08QsXYSe3%hI2<_?QTS^0trr2a}*rVj0~)QSHVKNm61UuYsCu5Um98wI8dN+2}1KO0{ zPAItu=vcH#8zkf%Lejs1=q@SEMdPN|<-HVCt#Xwun@dht(r}E)Y6Q_PcCD4Gt%(9O zv9VX&R>fTq(Ehjh!rBtGRbQ0uFB#(v0yF~)r#(^wuFxT04?b5_NXYfNwYwsK4jMRgW6W6bMCudg!SrwN=JBsT&5jC?&>lRB> z1)BCgsNX=;$`j<(a*(OSeS(`c&`g-LsoIldxk}OdbOT&DBMeKP)9tce@eM@@s>lhv zV=9QkM~DF0H55#iwkt=pMLWN#5LcNR^OheWocPB_%KlUhA$}&G_&9wL3UKc2uU;I^YSh>YdCdyZ4aPnpK;6t zU{)15PGX2@l5ThoYDCDb;(fWaHV`KFu&)8|WFtXzxLZh)1EOQ2%gtoYx!gFc>&C^qw{MMyRj{K1bvL56d8P7{03uCCaN*S) zDWP4NmqouMC*Wcj^9V?3JOJ(QCc5uNbf=8{QiK-J3`n(2wNtYE9fVw#R%65=q9fLO zO1pyO8yAC)O=gTQyyuJ)@WEY?MQH%f+1V*%C!*E@TGRH~%!UUvnYum_g+{OFx;_<) zwwPxU2)K6j`}i8NK*Qsm)k}U+sn*oJljwvmY3__OW2m+)6naK97gu~^78n4%W3}bo zh}u=QP_mZ1u7M`!^r7M#)(e;)kn)C8IN8SQNnN=GXiD2+7s(Fj$bLP315qolZa!Ol zjiw{HW^4Tsp@GBauqOt3IG|;WSkMAv7CrWc%<1T zbhu)XIXVzDu*%hDf$|voKz}9BWTNfT#H%CkStBptBcb)>VlrR5ixI0VC45qfTm{;J zM2tfRJZndP`5(O#lQTF3qiTyM){ATI@00sJoP> zM83!18dup$xkV0WR!%S9A4{j|0RYw|qTOA}UxGt7M*z^i6`CG~;+TKJBWrxVy!i<>Czl(6r7+-Cx!#8v-Fuz^(_8 z(Kp?Xf_O9lox&jnwZBRAW5sa>|dR#gRv#N?S5O8Dy zn2cVHE=#}_38-{UG6B!n1H&u$#xXGTfM(6Qj49Z9T*@SWq2Rf!BVG1gSCCNW3t317 zbj-E=$FmF1l@$%H%U$N)U7Wq|UH7F5(w^&eY1LMqQAMoV3TTH7fTp@Y5O6I!PfQ-5 zJxerk_XPBgby;>JYL&;;a*zUXjy!3S04+NG|DjB*!V`$-h^jo;+Eg(D2(Vd0m%!4pu4j1n#pSo-1#!R2!_DL_RVqsP4k?Kh4+ccL*muh704fp)oO#G#Mw|F zKwi)kK1-)}DjV21%~*WUrSQ#znr}aFY>r7`1Ok^I0XQa8$!SCrAlR|-{_Fq(+Lzux zmoud92YmN&5BNNojRUd!A=LrArm20DPk3J7BUaceH)G)yfB+o=rQQIgOeJHcW8n=* z7R)8+Rhc^JmJV$9+^{R)W0MU6@D4u(h{2*eKXyP)C#gRhVq zbuD%QVFo!XSYdq8Q^6Zw+{ny=Lx}|=&wLDI4?~B=`)2$~*hZtk*nhrx#G5$KkvT9D zI1o5byH$wm zDV?46j`!YRrkNtmqu^iy)Y|7Ug3JE&-y9Flgfv({Arbon1fIeFcT0*V$Nd{2O$bmd zjYc#@Bv4YjKD+9jpE_Ze=_OEeL~5GAmflG)@LaxsK#%0y0)KuQ7{;qKEYbY|0+r7A z(nuk(_F)d7N^eeFsXIU*F!bict#rpVbtja^xvZy;(F3R9&k z&}1@?Sq_p%`?FfM?Q=s+wA;`U0y@|QU02fqI@|@_@E-Jb3GLmTs5$Pm$}*Dn*rTj( zHMA55<8|p+!Slo&gCOG7>}v0ie`=k4 zf#VkB;7=nt&z_v?ntRt~{hSV5GfFx^XrvQJbn2u1FdL3oI-yZ==O+vC5rxkkevhu$sA9tBlWeVfJ|K5KKs&ULi7GZZT*;{ySQP?z5|-rKXu<#-cBWXsH7>I*=^Hp z8PJKT?WWWyrP1z=^}2Q< zY81-!8)^^8;d;HwG@DQ~Ni|*GC*yPjo{9Rn!bD0cpb^`rvIZ)2KyEZ@kHOR0NnBy8 zpt3{PYT2QBb1|C?rz&P8YoLh=11HaVC+>MZeCFb~K!n_>U-vG0*T-)M{dX^Ku6w+D zKj0IKmBuB_@^*+d{05>H39e4xx+vvi2a8AAfu!OcWIt@Z39T*OLzPx!1SBz_|7g8&v+={jb zXFfQsvlA$gI!ATjft;IH>K6DT^knzedm#fYpgGa$+3WMGhTq`QBG@gbN}mtqn9ep+ zX-q?DOqKMs+}utlBOIVXIv+1v6i7jS;ZAUoD5$VT5Fay%{czth6ckf$WD;2Qm6^? zG`=mw!U?=wKM=j=@}K0%^YaRh^M`cRk_P}C8{_Y8=lsYe{Fz(72#n_xKJK#bp7ZS* z#HyTc@ry~-91VDhZ&kIMywb5dqgrGu*HXaq_t8ScR*^<} zIWT<)Y^FgU+U*M&;6vdZs=^;By#PKEDl6u1pi*ZJ?iQ;V^A6-T+Ri_GaY_};0(|n{ zNNQ{(YIz&WBiOem4)LN%m)|dNoCL7OJHmdWC5PeacCua#S6@lIYnW_wJ%kP@4@3&j zX31IpZIf+?a$a`c_WdN5Rou_Blc+^WILRsj@{w8)m zqJ@rfwy$kt$dbzpUF;J_J2J2B(&~!>HgDG*k(bX;IR9+n7SfIy9Sk4X+fA{VxmU+62N=* zHV93jx&v`|+&xq-`C|KEG);gfFK%OX^&VWkdnwg-Q24+?byzZg4ebEv*;K}Sgxy2w)8!PlarY#25i?2HPc?t=4 zj~Fl1Atuh8-(^m)_U)Zk+XD%Qzxl#2$Xzfr3lL#y(SQSiL{+ z2LsUXgaaWz)$S(qu|X;dMCF1kRsot*F0{lN=2iqGLRl=ykM+?Sn4(>U4)BrvuHI%U zz{kS%T!&_97iZeD-4Dovy$~zX^rK+{!me~L5tLIJE$FxOJs1{~)VgcZDOYSE>Wc>6 zqYGzMY}lF5x-Z{F^8!Moh6B*SBeOP~bIS3l44H*WY%=uR(Qt|Gvs}+3{wf5`e{}^h z4A8M;heKBHn7AgfQDvYsN@dIOd^(zrFjkZ9vVi9*YM(ILk2;#MfsG~oNfqyLJ9zKn zX@`+)j7@$EpD=5Ea zF$|KJfZ*7$_tWrwCH;kc#Q5x{36;P3$sM$+A z(Xyb_`Fv^s!29;5q4jE$wb~ENuDPtUqMw8Y>!c()B0dstGR2Las&u6B7LLXIMKno_ zRvpPBARrB6&zcOZ^D%!~d?dGzpzBy|9|eWx_95c604%BY0q-(`&?L(xAj!N2c#oTc zyvve#JD?3~4R@A%)+amYvh17hw~}!?pzUF$J&V@@7WgvI?vG~|PDsB2>x`4rh`IZx zSt|zUgtKjeC}9fp(j*9bSVa~oJRZaR(t z?>(|TNm~j|K>N&6C{8m|>w#e4!JJ{*H;&yDfr80@9nXTnG@aA!M`CvMVozW)d;mVS zFz>RK7QhSsU9GdQrHb$Zm%NkdTakrEKo_@C$;>LN3J3%SCv4$J2ehSyfR-o#Pv`eP z@7=t)Jgt+I$$OqulFS9pwdu)=@6ut6nPfg$nSF za4*)SDTZS@!ObdM6nL>o3YD$`fKLoZFPbEH$Ns=)E|M4_nINiD+Uq1dAgD z+QJ4RwHNyqky%0DSVU$OLjtS9MU}fi&NZo7O5YV`e+fJb-<4dNXm5~!_pSD~l0v-? z9KIfOA`WQ4`wm$cECa$wR~jr8Q%vR=8fth~R-h4C_#ff%OavS%d~B!cs!*tgjxhMP zaCT375eI~!FTZ9EUQOo1sk}FZ;x)6uNqpdC5ZdWWxWG#euiwLBX%dz7D(}(cD1na0 zMlk4LIM}ABvacoHH)uXYL7mRVsp@_#mRQ3}Ov?cH@R2ci6^k-ZaV&sl4KQt2C~c2x zCiepxF_Rifm43t!4RIC|!$o_X-m`w7LDXgEt~?w*d3@`X@sJ7YY}s7^?OKIF>EUZT zkp)!wxbiF+o0J@6_}tbDS523shc%58ClhEqYd=(aQ@k?3-ZdZGfh;g33n>8&lg>{F&jEB~W5Jy;K{9}kEiAZn zst}E5Y$#i=PV`JgnO{F3tv8TtMFD)mm@_$#0xDZ!NX6Hcx)(WC6wypxAl#1&7jxyM#cYc}!4=v!MHz&S zC!I$|)elneO#)uvI?@Q(cy%gnP!fI<9U4@CQk-g7S`hg-)yxp5x~0)1Q5q5r);u5) z^Ngs4v)n&hl66CevyE%GIoiSt-L4oqoQs%(hcS>aML(zW5ua=w@Gg7TR0&ISqjFwz zJ8jri0q+UnN`;dI6Ey>9);r#;Nd;gV{WRg~RZ^h8FlU6uyMGmjkXJ*gWkchvl zsLv`}gs4LUIxfFO9X+TF3k;#K&8%xr*LIXag@6(^`?oy%0@;2OvdM7txI`Po&noeFRGdJKF zpMHZMSb-+wj;ib>dDa8kYe#Ve%;sDf=J!282^OpkvGYrR44a_+-~at-BDl^f@r=PP~vWi&uA^z5R--hrnB< zvKWrXMC22oU4xOf%;iA#-D9rp>Kw3eTMPp+M|~?4k?~suI)M;INXy-u437~Uf^T?KUdzz0s<2_z!JbjZ2f!!VXp=GyE!rQOghFskqYLHCQ~ zn3{gooCJdY7x0dF#RU?Exd9TK(`(B)g55$RDH6MWQwxld_e-dpv!A!x#o4dvE6Nv)$PWH?1hH#hA?(a zvFTF!L%_S7MzpwPO5v`6_Y4}*t-+Yx%Ylk-KA5?^3(%}~`daz5Z#9yP8ZRcz1TO+jd#~+pAZk&BpcTMJyQha_YS79i zD_{HpA9C?u&9JG_E&E;(9g1(Kbl?LZseqeh6HS^vmA`@3Ex($~C)oqHA|k2^VcmIx zPw53{N6zTAb%+segh0l%zQ(Gcmj;?pj~B^fj4Ab^t|@W(PFQ7lwImjEvUw40Y^oOmo2P) z5gGiLCm1b5neT?#T2&h)_z6hFkAw`TruE308>>nr$x+>l-0mYgeO|kA5~5kJQnTe7 z(5`t71t*Hg^`y-7>1dn{O}FdFC6yJeQeSL#-iV4`tYl-t>!;LwXs|v=eRUPGGi$m4VowbB}cixYu_ z%cdnVCsm3(&tSZ&hJUxik0Z~QFRLRlD;3}a))g<8$1g5Vdz=#x;6u{07ej{3rp(BT zY)ZhMXa#*XnJuS+M-z~X`Czb;B}{vYCuAqU*RnWb{jSApX`g@PkubSWv$a5u&!BA1 zfE)R)Wx60fiYM|dvnVrBJPf{;F+#E$MYM^qoD&NrXyn@{+8SB4dG$!-ht^3O+IN`9 zkE}C@Z0$Hzd~9%-lH9K&U&?B%J#!?3ZA1qO)+Ko94i!jusB&3!mA!wkSU-@S@IZ#K zU6^XN$3HxxRNyquI^LgJ`}owx$z>%!d#QA} z$!ww#6_STOKRRE~=2kvLh>$$EH?-f}?fNl^57@p}(4phgeGhHWPT++kI0 z3$XgSTr=o4x1AiH_ujreJFZZ9FVfMiJjaP+LuGF2i)%q;Vd4~`f?S(Qrpt&4eG#}8 zSI(%Qgq?vkz)%Txp`zZ5q7v>%h3-qV8x?vNOX3}Jer;%?WLO5(C} z6nC9ns4#OBcikPS(0%cCqY~3p{2i!pa};-j9jNegWXroK2lI0j?Lvi}qj*OubYGI) zsL*rdba$Y_&XMEnK!u$nN8nvl#!i-|G!KdjAtfC5&(NH$i<$^G3_!Pe_WIQc%3R7q zjD#*%*Hl*TDv^LCQjvCUwXTddnF0|)KKp=B5!;2ctK;z) z1D8%77LyTgF9ss9&3hD)+Qa3ttyTphRHp5-JUjbvI=vmjC=6G05zm-1E#WA@8>ox= za+TgqIM>UVFfFx4A)ijpg#(DVwr(N+4caE}kb-nEa;(eimb7sl@Va?G`@6pMH_*0y z>0-jwB}Z6$K$>59IC8mWjf^6y5D9sn%PWj$0@{A%v0g)QX;j;t=j>_Q4*zklKbYL7 zCczm=x7Rv=YYSGMKf;v9>^Squm?h%S=D6d&ym9Afm+eCJJ?K*NB@s^~f_u0kG9D~e z%#Z*P-`JB+!|6mN41<|pY*sMuusPI;Se-?aPnezgo=Nr{Qzkw{pP$NWDMv^ANv4l6 z-fIZZv3Wh|U6xlJ#DqnUoDXqQeQV}Kzcq3^fe68zjrZUcD6!8oXGJs-mGD5s6W;?S z)#%3sM0}Pda0HaM3hVF?Q?>MPgQnG#Ep$lx@7XPIKeA;gJ{fQ9fBOb)Puq5bZtneT z>4?}*ME)txZ;6f<2VH@PVJU8jI3^}s;wqB17a-z_Oek^_pgmzJz8cOZ)31VX9LP6? z1|jYR0($|KtLYRIwmf2A5*HN^5jJV_DHHIU^jN#mRCu55g20?0g4|BbQivB5`8rVq z!Oi8qa^v6!B9u1hVlKGqba7~w91w?rZChTfj5~Xy%1K9t zk(2qyT9w4A#ehg+Qfct3!HeUr{dHpG^gX}PqGt>c*kaX%(5uNCSI>T!X0Tl`iPbz1<-cL8Zi#~iO z1j#2(vRfIl-G~|k+7-=v%vQ1(WlL$WC@b&fN&iY!pA@|U6C~`tsS?g#a_AYUKA&B1Gb1viV@!Qvz*M0e_n7H9?%&{9$JLXU{Rg{ZFGm>6Y z#feC0Lc&08;%5GNHC!4T{S(HZi3H4WB;e8NNbLV`o!93E$(~7ehXkBQbdmI%pRamM zGV2Q3WzagEr8szi_JoC{`9W&ir=^;^!QZEoTZ5t|Dead3`S$E()ur_E{7MmM6#;Eg z2!+LE?mfYEC+GdabvjBX%k_2ow~bPM(qbWDv;=S^MF)J6U!Ti^gk-QEDlx>#HpWbg zsSS7SgfLka1U7Sw4o}BYtPl`zNCIVeFjC^9gOPyC_CTcxTj}xSM}n|cA_3$>ByzHt zuR%aPo8K)s0>0P-7y&VzG!O_#0?129gg+ii0-<>pgfMv^5U~WzN$eB>njib;XXiZ~ zEhjQ05J=b_G%{+1D$_`AP@+QROBNUdk{*4*fqq8BZ0_f8Z}em z)eYBXoj`207Pw;(2qcEB72`g6ZuXL}Yrh(40z4T3RQ6Tg2%dyIN8g!(GM(tA9?*P`$rROk&9`H` zZZHJsn6c_UEJ$Wv67R5)w+l)l0Y~0^xLs#Uz-7-Ovrwf7cm^?_kPch-L?Gjf5~^87 zjt$%JdN>~sSL~1gfzWCbWNo5J99f=;v_}{a;J4xXB9(+Z7rcl&$&BJ55JMZIVZdY1NRsDsc_h~rYR8Iw+B@+)iyB4b{`Gu%|<>mCrWJAQ13( z)I8Ufoo_PmK?cF0SFX)y5v-zxVS>7AX5^V*LvcU6{l)skR#Zx z)#yToSh7Eiba{TNtUInPn`d| zqDVL*ygIvr%_AEk)8V3Bj8hJsaQPmqp2l3fo8KkOZ@P7rS2%VCXdBBGCw7rV=5*CcrryYYAVr?jUB)d&?#%l{s$~R z513Vz$nI5bx7=YftKvfrUm1fj?Au>;MWVXXC*UJ~{O9-3`3dhJs_?M|_ptE>fKN!* z%=+Ln6%YJw$njp5PVZC*8J}Jr&=$Nm7Nq%5;=S?hJy!NqyvN}^wtZZ=hDcYy`y%g- z;S&2PWvitDKH%RU+Bd|10X~$+@Am6D%_Ka@dv}v%mPaaw#E1Zg9 znJh*ygtwb}QVHRA=}L9g+23Rj?DPYk=f2Tmwc0G#Y8GJQfptLPU7mX$jKO<=_l)h2 z#rA!veN&h=-~)E{ReUx|OK^6qQj!Y*A9Aygc7@^e9`m(srYYM#6?F#t=JoN#shVy~dPqF=sKlNk7-nUAn_+7xe;@)N4J7SM}e>MKq z_ykgc8FPijt6LviDF^VuBlgrr7r=>d=K^$SG5hQc0zMLVUgORm$KvRt%$LpunUBe- zx!t=~>1+W5h{bW+JDA^1NbV~oR^xq@it#EcbD1(&0=l>+6%FExQ@Jp63242NON9VM z!X5QLu8x1~4f;2|EAJRMX)$8F4*=c1zAJEr1S$bQgwD7LA#77s66%KYFkGc<{&39b zYwU&hQkoke5m~%QA(b&CVha-T;v#HR#EVEX;t*D76NYp2{U&BgUciWi{TU|1W8zNr!XZz!iGByy@+kbLheOkF&5%tcbu+GFQk>~ zI2?DD?$eqU>p%@8T#FYGSE}Q1+?i+VHzs=m5=_>FoBrVV4FU!l;Qw)pT)}$$ZSB znFy_+|er-R#ckx6Y6VI$D%lgo=&x$=y+z607L(HP66EB&k`UUPlny;aBn&+dQ@ zn1B~mTSBgt1n7|Lc`;i`*qJZpBYM-J0+rNz_pgj)&;T8qt1YW57e-cREp#H4vD@+t zT5!1@P<7OFEgog}MY90N+&BfWTQ%y!0NOEfJ6jS6&`b!l>NIkVkmwcAo_XHdb!G%19p#K!=7M=3dL!aN4zGd_YI+N>f$Fb>%2JuM41KIzX!6 z*}J90uU_&-(9o0aAGxE623fwol;dMv5C$UdEiE zjD;KlO)zs&DO(ju7ia)F;$jthe|XosIOz?JFMej+-2rW#;p_<**M7#1tkbj|MxbR?s5af$T$26W77#&6zS_l{4`PV-{`q@IRJ8_)?a z<6*mNR8ghXg2`1hWz(s82}>ScfOdFEsW3(5ZX|7|L?@KC*P=+xV#=I)p=W_+L`*>Y z<}n{FzjE)*NvBuEQLoM7q!rHL@+e|?+Wy(=3k>MST8B*AkwK;xV%Y&5b2%Ivdnt`h zSV^P0O37vBJCX4wq_~{C#sQk(wOeTWN@R$<4WK2tG&9Mik;H4NP~mXI>I$96 z=XX{^WC@}fZ=)u&GFf?mK*-7hxF?B9F+fK)lSUH(bSzgC?Djr$HUd_Y1+h!XYdbQyIZps76&KIfIC)n>e8wlP36_u#XB{~g{ewv_XJ2ylE+1Ir+?`3_^|lfIsbBClRJM_l9AmJC`yDKe*sD2Z1E3v~N^L&lgi}DfHZw+NZveDsp$y!tR#dbp zpndT)kQI?GWvQv@Hv|O@pvf!C?cnPDkH*|HfF@FZpZG2DQo9P01Y*OMelKn5L@qk5 z(X;A2RlN#2uXyI&4SWI3566EM2spBMDRa9}vTD3guAJFowWjlo0NS*><(KxlxwS-F z*aow7w3v@686XJEVl``IcPT>&?oY8+4v0Bm0d3SK@&o`K)7J@|VeDS2dxGeMJBLx} z-n-5XJwq5#V)tfOZVdFk;UsLkYgOzCjth8eP#)Qtpjx&zX}H@7{Q&fN|^h zK&XF9w@vU``y#?*0B}R@GGbcX8cj=WIB;f7rW?jKqgGcVSI`NmRih}Z+V~oUI)OrX zyEi#6xRkXe&+^J%`73B9Uu;tY&Lm(50xq}O)(g{B2hg5L8dxCbli~oNeR+q&{esij z06MU9Bf@JQf#%&D&CWP3SDeYpz~)A=S=t|tK$01bz7ps}l=ck@6VlpJ(a*`JDQRud z%G0gRS!<12wgW)Bg8M*K?xup_3mOE+y?plymL@FB%-~q-#s-d)HXJ|)^d4)cvLS6Q zgzE*ZA&j{IX)Q-;*-x~t0*zSYdDGY>2E(q1PUsu%dpMI`{ai*<)A_{#?HKhy?C}a{ zmtSxB$*^90q@Bb7?a`2Ahh&y zC9Fk&W|?lg$!CTuA6Igys#ZT^m2gR7Z!~Kz9^WGjA=?e7CP;I(JD?%!rR5LdIN*-gNC=~=!&MH7BHrH(C=HR); zBUMmId9Gul{v53)>vmO3K)V(SYi09mUp)Zr3A@9+X;*Z8bK9zb8FA?WbYSIn0}F+0 z+u(mHd1?VV633idAO$*R(b7$+KqnTCQe@>zL{kQest_daYo24jLPzT_O|(mkt@@fO zo5um|*?H~GH#2B|)I|H-^;m^QgYJ^Mz{x|oM z|Bc5)b5ze_-rdU!B5rTi`&;uQX`m%#$RA|G7ND8a^z*}HHC-+iVwO)Y?3&&Ei2DvX zj6lumbY;?Rd!Z|-a5LG}&>Bd0}9d1L2HH=O|P)gh4=CXhzUH zNU0V89f_(;+5sF>A&)CGV%qpXQE2096d3D;p;#FZAlP{8wJN8p^}VQT8CqBIEZ`;- zs5z!MOuj#Wwz!Ze*J$GE4rtG0-4`-Gc%>b~>`wO$M2+rr#cS#WtkM}51vaKtx+ol= zE#y%)THg}`R0{VCE{e>HVsqRdufvNHS*A%dT@^rO_I?;nYH3nEF+e4k<+@CH3P3xO zOk=R`d18QyWNp!Ck1Gkvhx1g>K5Z(h#=ddu8PJ?g=VedGq*0a<>Es;4@@0&l!n>SqD#RcGZW6@A2t6cmpn@*<@8HiUP z*go6En0((R42AWo@F~+v>%d`jAAokv;t6a1@Et=O>Am2)4rt$~_9(N)5@-u$(LJXu z@*NA2aGebqo^c|hRiC~80Xnu&v2lJ+zLOZuAC!GCM^mPkc8tVg{gAF&0YHFu>UP~%!S=5R@*0&g%Lh1ltV0_17rG=nh!X2KDePtAm;VUfaY@E-28lH zjEwQ!*g{Rm_!9%#WPlOQHs7ZVFvPJ&d$0SY0mgho{RX1O8!C}|g3dnZdz`;SH9HSu zQw6k*)_t+WJeIAU7|?X6?qKo2#e^XgM#LY*+L>Q}PFK zQBby?TE>oSbH`@v@ck}(*Qy)?T-&~5aPAj-?pqw%yujdlLiWBwQp;=6S0V49?_1G4dLnSf!0C*Bm!{ni^&C zso$0b=VhO=__VYmjLZyZSG07=)(1b}{3n##!*Kjpw!Vcz`{ru`r}GCiZ_~C|u@)Ae zjP<_oDT_}nYo)l?1ib%*=~{{C#KiZ4w~ZfmP2#4IAJ(_Y-!)Q|Y?fG7P1!r(k~l%4 zfOhTd45O*Wm(Xqdt{CJ{GR<%@#nKe5#F;*4CbEiW_Cw!F0h^|)wq6O)fhpe%A8rBY zP|B@f%7=jjA|uBOmmG6=i;$Jr4<()z!>|w?b5aTSBK^T zEWAh500XpVPASC({`*W=O4+uuGfe0rK7bZ;&Ka`f`;?8P8lEBgPxuk9h1|>yS&ac5 zTV{9UUG06w(o(VL3fZLnn9Yc6j)nrX%`VB_9b(rQ>dE{4`Y{&>m9zWVfA&tfXgEOo zCi9~tQ!%N)O3k&*GjV9pnoCI&d<#p9UNdRiMGnwRDzLKhGOzDLw85&!oroHpblFp} zLV-RJ8x$JW_m;YtmI8r*V`J_Zt*G4bfObu>cY?9Ur=nVv<_ccEe{+2d>%7m^i32nj zTJZAhrVKA&ip&9;a~e{R!SJJSGyyua-sD;eXFx|5rWQp<(pgvNP-M2#U43A+)b3sk0YLj^ zxrU9C2&lN2n(9~3A_6+3Z%w<1%HnOlGgh4mvLkP!qK9)f@5&JLar45{}O&$uR zHos`8%>&2b^>apFv%qnUInL+=XBur4oKNSP2ei*6i@AFFw}yqyo=A;btqK3eb+Z>JfKa2efMw$JI(_U!V;MZn&glIof9gIklOi ziwNh@r_h0vHYE2};w&ZsXE8ZH6&#kg=t#aRig%`fvY4Fqk9C4iL*))Yw|Nb~d#7)# z@IZhtnw-ATPWw3RxjN1nJis-IxON4U*`$Wf(9A{$m;hQf(N)r|w2kk8_C$24&CBz6 z)x2f^?c1SYB-5sY5uk(J+MZ)LY`bRa8O@0omcQaaVQ{eeQz}&fI3abu5 zfg_Nay5N|)keRyRuuk_%Z?XKG?^|%pQYoqe%J!4H+>F+lN6(2cj%hXu`u71*`_Ej3_Ly>W+{8y1+>qjXX#AzwgGe?wmp{`2Xx4z?`K@vyb>Lm z(0o=iKoh*yzrGs0e|g;3eo`QiZ8AD$I3R2`09FJ}hSL#RTt0Cg)QSLMwkZhY5hCh% zo-nr%7`(h73ApkrYz#KDfUw^b1oR*p)M^1?!m0IOG@al9FAQS95~voqxW8a~ z5XwFHVjP1=Ch*coAT|u5!4?%nJSXa_@W=V$^Bl&2j!g7}xGTTHvFR0Jo)dNApuzEA z21hnK3$be$1Gy?Y5b#VrcxmVX&56B}L2;Ycg_H(L*?f05nWrFjELP*m99CL}6ardf zebOLOP|)zK-iv_LR-Y)TWte6ICvgX(^-3CvHbWox`i<+okgg<%jgCWt=Vm~eiqK(7 zWxiOg7OTN0CX2j6GuM0d>Tn3kuTBKz6t9j1+#oa&aA*Q2gV(Q?gZU&|FJ0HCf-wpL zL`s5_XMn$eFRuonKX`p|f^Smrgj^y-($S0bvHhQOVOf4f=16aZuRen?Rso$>MB&b#_%@Zy@jti3DLu z6X;iq%eD>xpc#psGL<+50!29B$oHkduJQ^}D7kpP- z6Iy&1cIoXEmt(F?;Z|ZnAR?Dzg-IN#EH4mWPNf?k^8|>?RCTukE)f=CX+kpYR@cWDr%Eyz+)b8(A`@uJJX~X7!{8V< zV=wl_*9&*vV^HRhJ4J8CC$_1CLdpPDq76=;fKCLo*7Hr452zk*XBzQCw=1CeWTyq% zVbF4E?E>vGXxYQMKzj^&m1din5$y}_ZE%u<3h-tz+)TQU&IeqJJ1MO=+nL)OnY^w~VS^&UvG;5$3aLW=`@*TezCA%Cz7 zg=O-d3tp?C@7wg8*6{*5F!fyU{S5uk)N_ev{K#_4qR~c<6URI;y|*;xfpNo=dLB3i zZqJ5%{7e|Qk1j6lS|^Vg!Gd$&Sg91+xYymmz%j`g!XV&xD|O2ecdH%i=%P!|WT_Oi%VCy%UaZDVG+po#2^0gbOxPq`5lC19*G1zhQAJ)qvO&fV z37ZZQP?Ed4yMo|87_V;cX=fcE;K-7@x|OH^PRujPr?LY|#69}`mAX0NW%26x`WRk| zk1+`eD-YfrxA{VhJ@CmMXtQ*YdSEc#aMqfTu=OATbndIa2HS&>e1*ms2$$c`x+3N` z(ly0M6J+@?i;yrel~ZPzuAD$ZjyO7k+Ko72Wx^gP|DDM?of*0T1RSylRh?+yI=oIa zjCRq9ZuP9N$q6()Tbf%_n!OeQI^^9q z$M>rtOw(w+WYL5P>g481QP`rDuk`2PWZiPr0t&Ge1w;?-7Ax2>n|d+I2vtzXRQ6o? zHT;mULY=+_)_&IL$s`j71L-(c?=oMkCwG&P$}mv#fC36GO#xTk>6+(C zbm7zxnvV@GzKU^XAg2-04^cO~+MG1|C@ zFwx+>toG_S`h4@AVc_OM*@Vd9ILUTg# z7O&1^MFVs!YZgAQhSIFlrovpYfm#g-4+JP{3*KZdk9$|9J20Rf@-|axelr(300bx{ z_{k}BAkTZPN{kFi;|ZXtYX`;zv>E^7a5ZV`wt$4sYBc&PhC`vtOvTNc84#eePqtoy zEA$o-wio>pEfVT#*uL}tiD!@j4Xo{>rz~QuYXk-R)bF`Q(Hz2PfKcLSKSp^&DxU{%U%qoqy;_jZ_ z(bF;3t5AVnm02wfJi@FB1R6wIG+-=#Jbg9zDH-^#Xkd&y@&eS{XxIu+kr%Q~Q)8Ia zbewtvaibv&MyI)-NVNy7<~%CxMAn+F9qHO=y0&3nvLFRy6MKbqdkOemX$er9BPB}% z9mi5%yxk2}>Bp=>z};nAY7uA{wWJYD?uMla`C={R-p66bJ_O~i@))oY49WHE*BU z#S;%`(1%p9jV`f%r$C@Vq(!53;4;-+fJPw9O8;TFO2@?|YB8oI(tu8TMtcXh-vkKI z%R}PLTo@||#5?bpRRRqn?H#i^no{Q7C`g#mY^yQoO3Z!~c5Rd(>K)qYqNC8UMN{1m z83oLHZ_xYcMs|V&G*dz3A^jpmXP0Q-Qu(7aNA;TppaZ(pJ4Sy^*^Cz@IjV`c`mxkHidqWj+QpG?Hk7@BZcg^#2yibe?6?=gwjG(7iv} ztS8f>*+*w~cetGXv)bswe^C^uf8oFSzfL#kI?lg1ZWsoh6S$G{FI@)U92PwOFjB=S;uSzdG7vtE1^+G@KsYPUc6;bT!@ku5;YEg z(od6V=K;$!+-}w#_&3D&o~%-gsQ-EhpqmGPWuw((2_4w1mz#CgS9murH*h^ztf0$Zfy~`zKL473`DAjZ+ZwK5lfiDy z7wgVGZkYQ|vCXsQ@A|iA`0X5D8BQg9(?v%It9F__8NoQ+ra&nh-lfy8olORB{CTo| zP;{UFwS(tS2fZED`D)GCtZ&Y_x9lV&dKNT4|{tDXBYjODe{?D{g%K7yI}DzAMte>o0DHbC~TH`ybXHexHsW7M+)y$rRHmeo(*Y&l!Ay6!9CCxobMPExuFz=^XqWz8b)L!?)cZ9(~v8 z!XLm3`1P}n10Qq)&pIyrJ^l(u@nlrP!vEJPBJ0C3Fe@lJIN!s~dU1cbosG#qQw^vQ3}E`Im4^AGh-uxOtkeb|Sdb=07ychCm@ zq#o`(Y5xpsI~|T5DyzMq_6UxtCr5wD5g)Q&zkvULa`@|~2S=TM`?t=o#wkW}kDnaC z6G#bh_@)OrX`p-n+vuZT6t!RWe%TvM7g-7~i|>6fPH#8&xYKr^o$4~~y!d}QM}JX2 zKR<#e)kqYtUYwTs`BdMwa9k9%%C^)=|E9OUgUKA9d9kmA0{rG*7t8DgY;61QPoDqr z?80;5gzZ36Ds$Z8Zryo5$u_VRpZw-Goj>`{!#{VPcm6n;j~Ab_&czL$?a5F3&q{pg zpCN$?{^SUu3KaTBXUES&zxMpG`23gc(y$mL4#St~lh4($gwLO7=|mq>N~}1&?03|~@bK_ZVP0-~ z_HwbBqQrnL_=iEQ74__NGT(f8o=)%fpY6ZJzdP!0_+>K%iRjDo8LT__?X-8&!9P3t zYxTsdRhqu+pTe*CU$DUNat|^jFo}BPvhP0co&SU#hkrV+;VilAAGzwcdAj~QT&2%P zaGm-clY@cUpo zVSX2%)78g}M%)iGSO^v3cytZ(LnuF|^hm*`m6cu3)E3r3lYxHW)oS}*Dg{eNYlO4C zN8>46Lmyzf)DNh;CEWed^3Z{AS3`A2e{$Z3#ioRroYJY1d(eK&A8 zpP|UHN@0&5r3EqAi{Q!h%Vhn;d5U`|1}Mx9ge5bl95lnnd?Kf-oa{DNCa zDA^j1v={sMzx!~|gSZEKxjs9!A_Fk9kH9`J_MfYN+fS*lfz%Te-k%-l;x|uUJlRK8 z4~P-!^FH=`HJrovz1UYO9sNP|VKjR2q&%?SA7A(X@%ZHAF`U`|UitJr@)jzKR#@?3 z)k45Js6y1o?>i+c;cenEN+6Fr|K7Pz*Q3wlCr>-ycOD-iQCKx3QCLw`qUz)Kj~^?Y zOaVH4aj<}8suXEM*n!}vSJ7m^Y9PR5%i(I&`TqHnJ$TWJn-^WcE;rf3li$M%eYUR@ za+y-NS^!UtEBCx^dzdX%rdgI8~l-(Oz8P&Y_;8n{)Hwi^rXUpC9KZYpz|xT_ZdCaCCI=kHs%X_vOh&?7txARQF%?@%!SOJA9&5 zQUAVwIKI8#|9)Q`GU|jQNP+ZJC8a)oUz~?DDRq7lq+sW+l2RYPFHT#0o#Hqtj|ey+ z@?-PKlWcPfqUe+2w`b3tXU`<>!ZxODMPo*bX|-o8CM-acMj&Ug$a z$0|F5_c#90>l1fN87`F4lYaF{UwSgAJ{j;&o}X4)ha0iRnvkG=9)Ao|zk@M9{CgL__mJRP|+VP*7=e?*SVOE~na3nU$WMEIkeKx76}EZm3Ec9oi&JE4#DCFoi(6FlBA?4+`B|Bhs&eKWXSw zRPBEEUEaYqrYav$P(4KTn`7--i8EZhwZ1y44?pBTjEXNu>Rx!Dbw}8NY2JbSo4g0p zdJo_>{I5!zGC*CD?)#H{^z1-eYjucUzB_w+3X=^}jz6Pbsngll!Ee&T`4i=xdX|kB zS#gb1{w1A?g9+LpIvGY*d|hlh55rGsXSJDk9xILi$zpytxyK(%A^LIdO`{d|Il;pU z!L5m-bV_=LBZ1_{i}~ZVZUpH+Q(u0bOs6chIfzJTOkS=Qx5L}%*G@W~tUFq@a&$X~ z|2uqm*3m^RrCyB}qs=UxuT=sFrFb2u>)~XY9cl=&uI?CGcotdPyY0m7k~cE(-&yVKl(u%zwiNdrMvFE zh5hS&ZvX??JGr^M{&~MJdgU{6o3B1p&EnT^Ya6}5?|;ZY=$qMJ;2Uh=!{PAgz&Wb^ zxLzF%pa1>n`1yb4U*ig%4`=^?-+y@l|Fivear;;G?V)M`J{|6NlyM6+ypN`6&QaZh zSJQfuvx~F-8`#j57WhCZ3ipdY0bYDk_bLEsU2$U!P)HcSeeCT!6dbj&thRL{a{q@G zP8}#Yj)kf18@sFb?iLZCp^mN`Uv&<%#Va8v$LIU!4js7Z^=}IFI?dLHFaGV*aD`6P zPjJ{28$IiE_5S}zYfcL6)%E4;exWKTzU-lM&HmG(L$Ft;W}4OaDLGKhXEAMx6*a3J z{`$iaaP@~HVC#c|+kR;i!kTUSg@(L&s_))H#Tif!uU1799M${jP4D=$cfFkzZB?Pi z!J)>XPGDy^ygkkWzPx%?&3^9br1VC=YL7|YR=#rh86(HJuLnBUKx~_$N57+oML%?? zW}tkBUp>h;$D%`n7sNL8qFDO4onoiz{zjspqW0SFI@j71n|q;;;JiM3=wu6Ya2+qw z4EJ1g$la&}!(&`WpVQ8$Jl2Ou1ET^{EUnhLT@B}>heJ3)i`mw^^rydc{`{K{N3~Xt zke?2$o+^YcZAH?Oh%%cECUY3n>GZ|cIREGa9JW_aJ0JGp4|Sz``e9#x+Mc6NQGo_$ z?}z>7^IG`X0rFOA0=nCNUT#7|lyQ%f#r3MK4FE32dPM;nu zay#8XyN}~9SJ%DsDgz>s;^pX})bL1@Ab$%PIr) zUFYKP5JE99`H!^307QrJH`~1dpEhwk%I*S3E6{(O zM-}8=av;tf;snB%xqp7DqXvMMvgD%-k7iS77`*_B=hw5P?sgvhfWl%e*a7Y#a|AqA zK@Y_%9WLhS<7Z`r1nzR3Vg8KjQ1N3&rTxm3n+obl_Z=plF-BqQfJq zv)fjb@L$Gd;9PW+6Xsz@k8|PJslpU)FXi;-w##lLR90_OkT2 zqur%CD&ZDz2#gHIP>k_TwOHbS;N=8}6g~#<-oGfXu6rjZ zrD5XWAEVJPd&N{kjRbl>DZgw* z0k#m3Lh`4JAIi%={`4I>iPT(9CI#zF3QvP)>T;AVrto9dc|OfOex6U~*%U5Ro2go~ zsdhKngJw`+@S@m5_wpIuF8G|!_WIW+gVPsBWzOlk?LT>I%E}7T*r&O!eSg z_hIl>*{GnGZviDa)k$E{)mP}cVv};e*t>jpgDvH@E{Q;~R)PPQ3&p9k&FCXK03m_g z!X*(va4wUmWegmp-ZHmn;m6C$XSHu>d1Y_!s(1bNh4TH_I|2S1E%%UnfN!pkFJMex zTrIc-9O-i`l(>6*+=z6F?h3l^p5-I+h@?34Bi0`6WEBR6D^v}7UNBRXU{fE z9qNLs5MygJNAL9pm80r~N@fg;X@=PW$Jt_UFL&&JQP>;zia>xDrTf2nMjeGO;6%#- z#rdm#EZac;s{EP!?1ZPPjUJBn>PI5|IBZB0+*l6F7F56moV3j@zyOtPfb20J52vs( zDXY%GKi~?s{AI6kRwIR%__5VF9FYUWZ&^jGV}22P~mJYOBRDXNvUb0)epd~18a5;zJ43&R3`fzC*IimVs8tb^R9MhV^V zUQXt?u9~X{7Zu#1;hFLgyh&>wBpz0CjP!~lg?OfS@mfEVM~~(1m(-&di*@>ap(Y$X z4CnVs?f|(-jgQjGmDiL4IMES&^Uh`t+rK*4fpmV7PgNA$aJAUvGRfnMmybKeb7}(c z^xIPdgS?@3si%8-6e?eot0n)e-m3B$qaQC$-l~z)fpEo;R9_JGemxerwRIM%DzqNl z?NjO*q^$P4r+b=g<%>NfbiYt88ZiNf>26BNkx`Lf(A#O)X4les8fJlx;XtNx9^SG7*{5>|;B{BNw;Q>B*vpS48MA@%v0y70hJ z^t4m_{T64mlsWn@^tbB$)Hmv{^7p4(NrZW{{QYTFJ~2LwpDNF*cKUw-U>e&5NB5hZ(f%FSGTr`F-qEr)dUi(KNL`iRePrGfO6cItP& zy**9(`y!xrZ?A0R`_}zhe-C$0*o9txU*AjeJxK2*usf;lJu7xfJgfCSh~XvW{8Cw|lL>hhFb(hvoZD$z_BVK|QhskW}^e_)vbI z)OR=7eQ(jY@M(eN`WEw1`b=L+s#m6tx)!Z6bVkn$w5MbAd`2nv4sQ~wyp}RLU=fk; z>oZ@QQ9jFIzzdWZ5{S3>PmorVDwWzQ#f&&!FyTiO2hq1=j8(^u_xDudPdX>TuY zQuSObH&vsBsuX4n81no4ZPX&tzvoJsy*=Pn{n|>=uzjzCg?bFX)I!T%u6_Al-Ax6R z&l^RrZy-aVf^*ihadhldid~XMlZxRSkj`0uwy$C z+Y9B>3T3#zWtBD$NAo-C@w%>TZ%?tfURT%WPq!R?u=w@iulM#o$-h^=*1|;&gB$a7 z`n7?5zPj7uo8RX9O!L`%V`+S?mtOPRd?V2tIH8LML9U{UF5*4(PT#3s>QRoYaQ)t+ z(YV^hL!}LxsnNzqb&IH0!!Wp_xxol7)Y;eB?P7{{rSl)1^H+o7jz1_LL$f3aK?U{m zqXBwd;=7bq&%%_f)f>3XpEh*suyK@^OB4o*_n*w+=$WV+t`_9BG|+&lGB3cHRD3&l z$g>(e$^)B~d7xsaJo?Lr?vapm zXQNA~r5TjQN%;S&0pgJwCE&zo`@bW`sWcOx3{iekCgRHPrK3F%Xb!~>MMLo0Q*9wo z@Vv2aYAufq#MXZMTVSCd_JrXCem(lN(zQM>b&f}cmE`torq2E&0zDH??3Cn zb$U8nb#y|c`y3)cigF8XqAaD1SyRijp`! zrz*;AsTI9n3h}VinQ!Gq*k8(*&I74FWWPCjwr%w(+A7s+JNS0=)5WvOuzC36V1P#c z!qr*B5sc0c&|es);!O@7wtCNh8>4IIUG}7~looWK?QgFL`_Hsbw%S)U26x>7etuGW zt_1HtrP?SBy4!bsRym4o+R@Kd;B-qj%6k4xF@b7AU2GAF%++i|t(R>x<+CMvdq;Z8 zyjk9!Vytg(P{SWTKRv&^xO{td^QKd4`*FUKmg#5$m;4b{97Q5(cW5i)s&*+fsuf)r zjmj?Q>q?~)cmygbrlRJ0itnJjzxH#zRaHaxRR8k)^wrtL>)!R%_1VQu6+L)+d3@Sw z4B|8GiT0>EEU5X~j!DZT_ROM_o$~Sy4?d+VX239tP_CrLo;dmTpKWeo5Wfsmr0qZO z_W-BeIFh)d|j~{-|yEnP<>@dx7(sCFQYy@-MVg~ z1L#7T(~9H;%HpyjkkMa1xmGqro?tL zD8~Lm3IuS7RFCxhBC2GGboulLM#@rBWX{kaVcudo*e3@A#d+)Xi~5;#u!jG={p&CL z;>nh`e6WDWv2E;??o+9<(PxxaJm>nI{J6^5jSxT-+vDrx+4l}BY4`MzhgJi8VXZ4i zS%Q&6HHD`Qu|ZlEg{PWw?HL>l_RFe$wQYl#oX zU~iA74a|WOKrS>WtuYe7Ao-jMK9v7Zdb(|8rJA#t_UU2UG6)3s`4CaDRL94o_xF^=l5ybZs|rEUC2Ao7>`QJxij#8=e74)rzh+7m3Pyltz($g z>&ma1XUBNdXfo%j#*%mBB!uJ04aI{>0 zzxU{g*7JS%{pr)A!^0ms%D+Nql0s*#=XYfiEEF$~)T6JSKFv=N-RS;z|NZ}zJ|ur@ zHGDtpY%9dPw50}RIRCoUq8$EdF?#s3_Q6^%)7;j)N?}ANpVFEMSovtd6)~ONrYc9f z4mFuCa*rA1n~RpD$-J5)YrI+jVRZ7T*uB+#Dfezxt0EWdNG0zpS6Wz>8D< z^Y4ex4hGK-;AZo5d&7AGEMAYnE4`pG%f*Ky{pHaQ6yO2NP}CoP_)I^l(qGjd#jogx z@gmW97`~#PEmLAO0LAw-3WKj30Q`!681s2G9)_>DXZ`lGKKE?Uel}p9&022=Us*o; z7ae^^KRs?!9&?n(53LCwKhTe+qt>J8h<@~5XS#39-w3~E=6u%T5BQ3HR)uvopH^R% zp+q{yy7^wfaJ4`p^zg@@RPLnZ=W(u*?-WfUw*0ZPpDW=@{d;HIHT}ykRBtiTywMT- zieX~RiCBMlxmtYrNS z9hdU^;ftCOjA38!waR*hN*cAv9vmG#`~C1~sb$S~I3y1EB12X>IQ;d%8z1Ors{!<_ zr>q_truCM-Bx37k{FjMPd8JUl)`4lgFLM z_%?dd6+WXb#E;jDkLmm|D)|@lDF$%hFz3cI5CiAG`Hf1qQ3)rX zV|qjU13HCi2R?k5e^_sWzP0jspv0ovEE{0+M^ANNYd%Qo>YaO^sEEA^ji7M(Aapi+wufNS(a$lkT(aj@2z z2{hXttaF{8g*m07qg8BdV_HFH3@h77VR#WND~)@Z4%jZWko(0V%9kT&G-(cUK}ajG zMJk0gq#%K=QxA*TvfR-N)LbVRq4xXS!i-8DRp_oPV+1?6inUV-jdix|vD$jo&Q#ra zk(}OM@y{~y|4-1zqd#Nx|A$)qzo8e^cJ)?Ywuf3*+;Ovq$=$lv+!JW;scx`nPiXGH z^`DCO>@T6;klq(C+Cap(gC5jsfGIg$~wj6N6&QW z8l*qM$SyXkQTpsaEsR3K&3ClY?UUh}f=H*J(#grFnn2Z<<$p7f`e9G^s!*(JI{Egf z5(>f2c=+d1%vO8ne#QA)0}g@m_eF2=R95*ZvMz%h@}HGo()#N%t;F^G?!&={-xmi? zj?7>3`wrP!yAhBrpp7BU6;k71+@Xe3*Z;P8`(H4En8oXPuQFoAVE%t(ScfazQy!>hW^&^#yDzyusvezrf^q=S4EumaSA* z?x{Wu+c{3`FU9MZ!`gX1YPPF6qc%>5i-V)X@zJ(Fhgt4A*ZENN|AUql4L$m&Z`HZ1 zgKM@W=M)^b8nvaI-)GN$55Gs@P?DhH;r1Y0fq!tGV#JnXl{H7NR~cZ66xpKmojxt<4}p1%OusGVZ3c&GW{ z7^C2n>zU%pqI_?fut9oBWOL;zYe*fFwewcTvWCyQ+ zFn(LSc6ov0u5VT%4%Xdh$TxV2)~dekMI(2#XKoow_L8w&=G*-Lq&tRIcr_GPg@$TL zX{eSj4wm|>@*FLM;pOuC8m|rD8{DVc0h|aZ66%m)oFDdEg!a`|x^3&jzRbki;7#KNY`>t2D=3nzwh`uW#?REoJL!E7`jEWj3z7J$%@H?^nO~ zx8DcV@5{G`i+iP`55vm$PVEP$97koKtPG|4ylrPx>)3W)N*{vl&*fLeGfP-!^R*r! z+=Kp9PVRO(w-Z>IvHZ(y_~){lS>?sxLpcG}@5hzzA1Yrz6yH9~hNJEG_^D)$Y*t|o zRh1XMuY6m6r;ExJUwNj01F8@V;D5oZyR)!cqRetemzj)POp3lA6u=Zu0Nc-|E}EiedhJ{z?6!WZV4v(sOwqua`Io|}jmF>6PB8r+&$BT#;IMwytKq0YVl$ttpQC?q z{c9kzncre+rABWz)Ai(bS}Z61J^C~6Z_A9sS4#Fr(NYD_XDYYz_7qov#g+Tp3a?wO zCkp8lr4xKc*=tGLbB5-J>mMaO0(qx-K-Y~RJJoE79V!{6D6WnzXXm|(o8!0mn7Tkb zx!BfTxEoHUxp%rQ;DA*{b-3sBezBUYA7-8B&r8u=<#8N;f|uB=78{i!b)~&l4xd&> zxcaWOaYm}oItRyZUti+LJW*e$v42_&dkuS}pTg(yDSWz6DEw*o{O^B0`qT0A|NOIZ zLVdI?tG!)|wE@s%w#yPQ4K{!N9PPA9GI$OTeOjzkS%QPwJK(Pa{VVp#Deuy?AJ8!y zhHI2Q|I?d?Kc|z~cvwsHQSGhD@c*WFc7A&Nw%)(0QK?P;{OsmvB9MgN>*P9*SVDg~ z96bN?uO0o*pSsSUbIQfmNYEZ!zCCrEZ43OascJm@`e`wku;-~Na|g~ZFAm)L_W1ly z)3<*<{Plr$*O-&@uYW+&OFN|lcb-B% z|CC3t|I7dV@BbhF%eUa?&SCe^y+6wH#*~R^meYSi8(sJ>iURd7{MY=~@!>be4a2~5 z0@rc=rRxNN6aGu5`@doU;C3-wbvpmDS}fMmbEe<_5B=}EUmb0-)sfQ79^FpnM=F0X zrmlLDC;xf2wO*+_7RT4G-)~D*qF7kX8C2}U2bhWoepG~Oxqeh2-o@$Q^4-nVJ1i>v z-Q;eLI_-*WPlfHZ5*$?$8&w!o%5K!kZ&-M$Y61xJYQ>($~l{?H@algXC)!#4XDKa>%{^_2a|81 zz|lELx_PDhg5Goj4GpLHNBufl1l1V|Rd4b)`qQ6btpBmM9aoinY_wi!F}1i5s4sI3 zdgllWuxoe`DT(^sFC8bYyr|0Vj%wt++^GPa<$&;Se$)9^c=D-|-wS;HhOb; ze%OX$YNJH)-7kBMUyG0VGrv@VIQJhPj2=HzC9P>@di>!-_pyfkP-B2?-l~F|D@Dfl zYmcg&Rr|!G$yZ?{U)jB)O9{xFP8210j_1)(F-}R#ZyZ`?$ z+W&Fa&mPK@so7{Xf$O!pimlS;D%QEkYoC{p9(Oc@phu#L8^&@D*+b{>u*pF1{p=Im zQ=j7(hs$)p%R;jir=}zr+_D+s(C+qBm({=s5oZ>$8 zTG7kb&i>xX<;5$wH0ZiSoyO0YdQ&B&9l;)qG3TS98b_@2wWo^vsUOfpbf8=7!2fiv zPL5SKif8u@bo2Nb9)uP#nyM!!^ZL*gV_C4Y-CH-iuV%XX(&|mOJY&Z)|2&Q%80MeJFaH#F*@av3 zk+$WN-BXR@|PC|cI-uP7r|U@-l~ta8vX5&xf63yuf;Q3 zv5pNK*L>_-SWeNX@*IBA;yL{Ce-6+6x3?^D5Nx@QBJ#hH?P|llWjl9wz9V0ZXS{+< zN7D&bJ232Y`BVRdoo+<@T05QY*0=9;)z_*H ziDo5?N8T*=_VCtGJ=EdaQ5XHxwWRVpKG6KVc22_Yl}%dxT;0;jpWQ9_2E6*_s7IP~ zasjm*#_HeO#;Sy?M8=E8yiT%g18eblw$UYjZ~_h{$l^HgzdJZk-GYDAHB$XOfsPel zz~%4Y0KVEohdAId_2p`Y@kzffUgOurT>ctaAs_WulldfjNXL8s*D&$FLH{#O|4FKU zv;N2N!mi)l>VG2C|M-6B{a^jh|2F-9=lN$W@w2V}IqV#whF<#&W5F<8o>|+>Z@;3S zZ|S33Enld7WT%V8$4Rc|h6ex+8}WL9!2#pW-Da*!d47*IpH(%qDtK=}Lr3uGEbkQEAgW_{HJ>IQWaK$t!|{Pf>1^NWxl>04D*1jX~Jl zuw8_gjAbj0)PjzsZlzmd31;5s`x?I|`<r@Kcp-+W<7@@h*#z zABOHZOf`)>WEt9l1Xkj)qZr4Grl>k|?sQ=;!zoK-0SAqWsc6a;rdZrtyf9O!WkUxB zzE_Ey!SDqb4sPFd20g|z84xjAp+gSC#r2cI5-Rtv>w6uXpmh@=0YXJsI;W)+r>y3? z{nnX2@;K$vfxugueS?S>BKl4cEDBZhRdjd8*_AZi^b0A+!ivJ(4m*%4=~^<1y) z0V0qeIwWu^~dHbmx zMKIxx-GB1R5=Izgx^(>H1k^6w5yoR^28FMH;Q{W&B~PUi*#d{}WC_^74lm1UvFJGz zF47v*zJh*gs~o_`V(4%yn(t1IPtQ7Uwog0Tt2xTU-Q+adZW2{G0ZX2BH}0&VifZa37|$I$>PQce+y0X=|Q#zDAr z$nwX&Kuj6yQ8c1jL!0*`G|#zUr>-s&1MAV=@v&7Z+GT09Zv*&j>z!j@B$fUrzhQ>;LUYRCY5;GgXj=gtD zz>-Qq?29GR0z}oqo{n4eox{KrLjuhv z1_hbp(C#~;b+*0pGaHn<(&%n9a^S=QOJcXV$3qDjQ8~H$2_2h7Eq#uPu3jgiBAcQp ztWIYyaGV#d-A)I6g`?%-8a^C3@6M#>^=$fwnf^gx0)(Y>Ptk9?B}yAcbw18)qD~kS zEcJH(sQyGgtTg1q(HQ}3H4<BMwPvCVL!o!xgO7Bs2kSVKRRok9!1UHIXfW*ZM1Yb zi^jfnO6iz0Re|?YS%}$KwwHczv{g*1;Gl6!w6;C$I?v`BKzT zGoLC8Xd^D;gp3oA0#j^8mE#fVs!_;F6|s_o;wZrRx(r?^ZLXC9IO?dG(J0k1N}Xb) zwI9%XI%LZYwI_IGd=t7mlZEFZ~_vr5-yvN}aO zW>yL8e_6hu4`ZR9SB>YW5$NJpH;!EnN7>Ltt@;)kZ8e`S^&?uvqI(YcY8yR569Wy( z>FRW{nl#@cXwt2%27ax}_eULjon>R+u-Reqwte{X5-gr zl!u`);v*NT(qPE6HEK%`)k)5+qpmfE`h|^LFS;-e3XBK!k*p6`>j*-3Y=8^KG1wil z;nVFv^F4|ZV&+-tFaeYc9BuOC;~yLjEDFOy%F1OCc}~^KR>db`zLibVI%HSJmX_$k z1KBt83$QGd46K})3@i=#^C-%9bnqz1W()u*Lo?v|k+P;Ykpx2)fi=P$!7Ze1}Iv9}Z$L`D~Ja zDMKtpU{%45IAA%>=_PAakhDvrkxrFZHcDjKB2p=R3W`<0Nh*Up6UB1KG?j%;JFyIu z68j8?p>z&N)S2|*D3*;S`|+TLq2mndy&QRYCFoB=u)FR>>0 zo!WjlrftmPlL7!F@~vj(TTA6z%gBctn96vkx3r9mu(>4wLJHM2=S;LOr;1hEnW=?4;UoSh~WpWyOml@fdZZezG&CJI2F5E@zLv}W*Hp-S& zC-N&1EaG0$nQTH`na5_VO`)KQnW6Hjl&ra>kQwGgU`kdWu0}>juSOYJ2B?7@Wun)t zDv_*2+2}Q^!XPjz41%mRIYAL{l#Ac9GP=Hz%k^cJ#aQe8E?#yT?dOE75oQ~EHM;PY ziIGN~@RE@Q+0ZBtzGaPrjIp4HLNk_0{JA!;=Q<<9h1u$h%tlKtG|DCuGO{vL8s+5o ztkD`8C<`x{3#2hLmr-MwnJMLtB`TwN*o=ZEGi#JEQnRoW*kuDr;VnCpa$h68CBzxs z>>}*$B36L8=gh@S{JpuBDIp^(vHnp;dd+G;U|<2fWMu(H-^c@RnQ&s6g3L_XiwE0P zn+F4#8zXvR_D6~{!%>m^9J7RykyDJD#ad35!Cq?~FPZgV|Ao#h&=yb=;5-sI4Pcm#M%;$Qs1`|Zah_tj=|#wmedZ};F}eghLpZVCoY@4}Ig>Q6Yo zJ}ho>8Sb|fa#P&Js3&yDVN1Ez*>3an6nMqZzCa&~%c6+-5#qDD!Y_&U0-E_*Kzlw5 zIInyb*w7E`gbvl>l&yH~J480Tb=drV;M=_pYdwTTCDq56^+WqcirwiEQa5tn$%}!k zqS2j!Dy`-C5dd{{u!%fB-WXIb(byCpHZAN}u`r$(I z8OoU-0Y9dE21@M)Q@@4d>EF;&cFIQ#=LY|(mx+XqKj=Xbu^|?9XfYKHEDeQ17UG|b zA{-hlT?WJd!M}_W6s0Juz#9I`EU=bcpn?A~3pBC{ocC+z1OK}3hL;(IP}Gz$X&3+w z|74Wl$YSX-Is}}0pt2bmfrrL_8K5cVR#t&k{Fhl^HM_tX{>v<|mR+FRpg);Kvd0xz za{QN3f}%!c%pCFN@+WKlWWcXc8$;L9>S!J>s$3C0*Cq2t5rdS4Q;OT+?W}!Z&XHp?L zDafBJIz%5bOS<$gtBmVs;|~4H#GT9nbZ+9m8HFf4bKHHePk*K${rG0w>7C0T-aRws z;cA5cvQXq|l)3Sda(SqJr_>FU1pm?3#SD4}%rgC%Qrr%`I{kU*`}m;@9mdPd^$`U4 zFRSZ8CMJwNb;BR{@3d~iw|YbVOv!`F`t;|a@13ju?TkEEEAnUB^oO;n(-YWUkN!+! zn&5;>f3oN{BxfQ_%@`_W23kAsKP z{J^JzUkbB|&EO?7iP-wNTQe+->f0s#>lZj7n!BB&hWRZy z99qI+sBcR_^CA_@$ji}^=Z}|2$Ai>^A=|klf{FJihpvfo*r1{9dc{)ij;s_HzNc1_ zjE3Cq7nfRRyVDke(Z%wEgFOp&Hjc!=&o>upl&yObf8;dw>e_+!#Vc0=qiGamW?yDN zo3*Z{wI1bRW~@^gzK8&-s0@lmlcK*0VI=Z0DhSg207FBOn|jC_%10&k+E`dvBt>4^ zVXlaICNgRUW?XXe29~cv*^!IvamsSTlnk*GpCCx5+ zbevT(8gnjnbWB=q3k%At^8)F;8tgod-#Lp?&rV-ADHDYZ zDCuB4JZm@wn{ryws@$ARne};h5}?6BTt~K){F;F^3uG~555sjy&&z zMPPzo7fsYhR0?tw#1J(#%TNRTs`!P){HXLSKU%k}Qu4zm`0$B8q*l{{5dslGL>_7v zpsCPyikWQz$UMarAkXkZg%8iyWZHsUFED246r9Mnc!uj|9Tpgcp~3%Bt0;=bNWNXC zR{k%o8KxsuS5{Rt>SD7z?IK2`7{bJ78`=v2rbQ?K^!hrN3rM@O_pMBy^&91 zNX8&v7R71;c=VzQV0g7M^hB59BE0$yte{&OjWEV$be9kBOQsv*h2&S|YFrL`>igrz z8*=WcHFwGH_mP`rb_DKYTx9HN)mq1<*Q+t4r$j>hji?CDDuo)W7K-h=_sf-^K0I#U zm!7Q`9t1#LC#(RZU`Pr#gwoC1sFg)>bZBIrnQsWP#7C9H3N(w*)EEggDjPD;Q#5?) z6OTtUMDx&=8={coOJ(qe3^UUh+$PIr6&b|io`_gxJ<5{0qW?>kj_V@JfvB}>?IqC+ z0(6E-?njgnS^N5Nq&VEJiuO{wRx|O9cqs84mM5dpfbK#xx)DAT1Aw8p3TpIm%ax2l zRl1d@J5yp53WX@Tn`~a2ZmKC41)4?y5Ql~qjz3W8v1GRBI>-GJE%{t$5=mR++t;ITzS~rR$Lv9sf z0rFP?4*GIf>W&7J5dX0od1&d~`;T|`AC~T^nIiMQMX3NT?(PKz#R#V^k2djyZ3}NZRz*@BBQ0N-Nxa+D z?>8$l{zYa>m;sh%zR1nwabKv^)9unHcHKB=n4eO71=wCA`~7BPp1JQ{+82&7K#i;cx{t=B<5nuOMuhhJx%&=ZP!NK9?u?Nj zFq>wMjTsZ)hP)V?G;3#$MiqkuZEiMF189=%7#2qvmgA%H!038vc!AFzD~4NwDrYuv zA#GFjnVZ_8*qscaJCK^pgCaxA+>SZr3%2BWcjD!*-o*JC<>iOl$lIwR@9MY4 zk^m%Gh7?s&u)6{_q;QY^94neSFY0?K^16jWP$*Ls;w?H5yGCCt&?0hXf$~vV<{G0F zUpegH>57~^!hhe##FE8)y_|299`3ZVza<)<&mi*m=D|hJOP2Ik3C_}zGcjFAC+PrM zA{$>T_}O|y67iTkEiH(TIK~W-v~E&4qftW4EzyfwDQ0D#-fS`DE?^@*nx?dTzTr$> zAVlp*NFp;RwOl87sI5lTS&REed&ldN=vPTDS|}IF>Cr8r+%4K0GO`+#RZ(=6ly#W< zZsrP+h!-yHHg^uTPn#Vwvg;i0K~fu->m^uvOC@}Xc=e=QBL#!}Lo|F=SBh7@+bgNA#&fuhUOLC3cq3(RabHv9wWjBz0ldnnR=wS& zsN(E7&WT*dseI_qm@YNYk6^%_?#7n^yZ19aA;c#?WA=^dw;oM%r!o^Uz6dj-;fjI+ zqU!~`um|GQamUG=b2R)bHgD!!$=Ojkr%h5cJ1XaclawIs7L9~eR=*~35>uVt#B=F% z#Y@h$X7pm|^zrKW-?e07Ir1x=e&9F{WbvHqZ|m;cy8BOGcNx2$`21N;#;o;9k=ADI zndx;|e{fyS%#p7@ye{kC*5zMVm-TP!Qm)IoT$lB~d0i%X$n0e{|5n&|aLF~kt(I@Q z*nj9QwtaALyfbqz%U&9Pb|?8lmi8fz_G>TQcn2B}_p$M9xBRyL|AW{6{#o;I)}sH0 z%ilP^{}j&eXt%kiLC(FC@u`Ul$LaWtnp(}XuOaR{Io&@x`|=h;YuT`)JHGid+iSeq zKflKUvHG*^IQe;}Rd4)x!Lf$ZJnRJ5sn*91;PJej?)jHx&pbWUgh3(C&|D;xUQscw zO8v=~lP~GN`d>k z(y>rYbXcRwFQQU2q_^+d_cfj({)S|4iD}?tqJfZsNnyT@85b6dOZ~fhs;IA3QZTZk zgB}7n7N6+3Jq*Ky8phCS3?_*FDZ_O%D8c5Ic%-RzYzsAk)AXqWlaZ{e=7lwiE|U5* z%dP~b{~^l~qC_wx>mQa%>oS6aGR;A%5gNMXgwCY(HA78|mEzDb2ijyugr~^hI5eQ4 zwp1jjr3?kdNbM(fOp6oUc353{hO-qj&MOt$@9Ax+{h@^OY4j@ABU&LkFx7+Ia#YL~ zZ9SY1XQ}_mm@*w`A52_?h8bPc7zeXkU81bG6exb?*#AWFL0ur_?FO{t+N{ky@%%CN+s3yFgM!uq1VmMhBT{BcHT)1 z386HqM26A`lqV~X7Tz)?|A`SlPo|lKSe(Zu^G->1m0@W4#U6I8hy(RcQER?A>6|Mv zrm|4nq(mlioEXoB@s<*~&{t6+Q)@ewDNJUf2u_JykfzYE_8yacj8zv)xX+sdVNdLrU)1Qc{ND8AYrWMTznC4Wi zBGeUDt&(Q#jj`iQvB6ZiqVcCp>6weq5ZTp_OwnZ^kBv#rqEyvK!^jR>bUBAn8Q zY~yqezJjr`CmsiF1*UEipt8GkJCw^Q6XBjS0ESO6dRgaQr#Bgn>K4v;)G`bd*9kiV z|H5Kh{PH96kX>fsM)}du?m}n%kbKmc1@-y6+{eE#c}k`l6s-fh>Am>m+=j|G8M`&)l(hLA@4X4T+3nM#{Uh}4@dj%He4g46qPXnlkjZKh$FC&4|DT|Lr*$I^ zdNS0n8na3`a=KxaoV+D>K=$?~qKz=r&XiaH18*r73GzIPrX(a280GN|@+bXz#kh=t zgiQY8a@kv#a>tZxEW1&G{Z^;YF`d0ym>bigcdI){477eQxJ4iwNs)4>GoK8|?s7nOj4U3~DKEVACj%K(9N9YzVhs=?iF8$n7q=K? z5&ditmO!bVqh84;9fo(b#~8|8EU!axgup&51nqwKPBFq!Lg|wqutmW>o%DxJ-;RAn zlVHP%oDM`$jL!-qJqZSN7P5JL6ccddM`)JK_K)UK6w_5X>0^j^gRF`f-A87PMqw4~ zLbD6zM-{(gA^K=pdV?ePZ1_yrC7J!mO&c-&K;`(!BviaorRPI)rJ9+Z zaofyQSx>A=L$lnIMmsV#%AxL4U41XPOid(&UrpTyuGLxuslRZn6Wu zI6Bd0iL*|X5FRjT*Xsj{iegkFt_?;Ho^@9r`b4eWu9a0o;)hLax_Q#fySRwM+DBN# z&(`rDO3aFF6r8n7rDrIi-N>n9rYAi%qTz3cjK?)C5Nt|4d zxBR>-Wr=DGm0PkY{ujVxxV%d23Rw8R>S3E-E zd~{5_(z+(kiSe9&IB$WIsBA?(QnQbGOs-WWS&UM&D)2%=xe~tc$7o?q>FlprGDbQc zk@OcW`w@rvi$78OE9~jEP`;?g(0KQTHus1rrfeez+AN&vY9W(vFhh36t4ahF?&wJxJ!Nj^bI z=odxIB%Ja{C@P#Ro)HLt`5Cu)NuTScN5n)a8NpT+QeLMCrJaBc)QY=vqb%g zEI~21<|%P>#wCu<<|%;Db}2hNWaM8IE#U55dk~HOI;Uq}5NoCu*hId)j;k3gvNu=s z*zHK~-|Qwt-&zAFOCA;EWjeCTSj_hT`7iC!$N})cDa&ZZ)yz&!xxB`H7A11feuDAN z=obc8Z76yG;^ytKF_ZUQd;2F6128`E7XbLj!Tt*_h;fE9hF!icCmG>IZv6yR$n zSp@Hw<|#yXK(frR*O;%!s!?Qhz9MTzk-3JM?qp<<@N%v}RyRIsKIy7wzUJ+iqc9(~ zMUp60Qp=F$YHTa&Ul7iRL`IR`oJC$mB`)VF(A?1lobG%D%w|!Ht2v9kGE2?XxL1eU zQS&fj)jWl^jiqPLxAbHJYagsch&% z6ntu~=22j9-98M%HCF>qPoo9~!CVCF_1<1HD#d}j<|?><9F=nYxn}J6Fd9H~);HgJ zIyTnRT=o2X`XZua81ZPXu{(OXf7FbIk3y!+h3{`8Y`>nTz}`t``($4i;*h3uV#V41 zPAAb)z>cxo{elL+G-lyqzDYRU+rco#5iR7f#`6?CJ7_iEMOz++Ii9EBNh?|bqi`<# z-#Lt^NOu^{N8%cX28nA7=P7gqJ)*D*N6nYIuo)0}zM4BnaNIq?c+4+%b}$}u1WScu zW_Q&KbKpknAle-<-11xq)jC+|95&Bh9q*cDRruvOL3GYew|AN*01n4I9}z#<2YfbY zIE81Pr|5s5Z2uh9O5w!jYVc`<{b4W{_P2JTv0 z&&R-?oHlp1&y2mThvy!0iJAn!4E~YN@nrO=nWDSEi944#TS!^8mIZx^o#(am`%|W% zU7hB|V-lvys>tPB+_PCs3@;DqY2b27z4@2zrvQ42RHDusSUA$r;Rpk*0x zAw~)1aK-i`-FB8$sW#zdesRjjv~GbM$Y}+%EH@F}38gC>158VFS)fbaBV}ACQ??rg zGxA6>NP=I7e*#11%R>3UxuV!M`n3oj|iGF5x$~Gxzuhm)+&YVD;0l& zp2)R)-lgoSeM)gu7s1(1>k1zb#nYi{YZ&3zmy2Wiq$VqDvX8P_IR-Ia(m2a-9%2O0mn!B~$ObK^+T?QH@P4 zI)GK4ky-ABNJt?=8gZ3Uzwj3{dCYfrhb z5+Mm{gMY3ud@<$R84!!5FMz42wWN0!&bXtZDBYoM6$T?4h^5254SZ9Ju<)!v?-Zr$ zaIY*1hp^itg)9g^P`g_GiZYSnzbHOE+@mldtU*BoUoQ&`@xdV?-ZW2J`^QI{Jea5; zPNnbh4+l?_jWD3csI&@PH;YKmNto&9Dx%7pN&^97;rSyHRL0Wi-ffd>lc|?u;25tQ zujiw>Ug7%sx{AXE+*s8QE@}mtO^x=ZIrjRJ^cn@JXx9WKfiSNNcQ_h2XsTh4IntGA zp&f=JT0WX(hy(l92~@*+PS_1xYAym{XsX7tye+HB5KV-USI_7Xz!HWET}8t}lHG6&a45A&Pi0 z0>~@>8ucB@nBmqe$)wb~Ma_0NcufX2V&H%VD7vi#U5(9~xRDk=D+CT*y0t3vEt zBA)4CyW;Gjgist}2o{XhHx@%59)CnP&p}w?CQ<-8R29SUEJ$@JxZ;*5;ItzbUMLF{ z8xd0J5mSj^h!`4aFn2UZ_avp3xFxenEQH)opEi$=H*)*Hs_q}bk@RS%ncLky+ZKnf z56<>a4w~ZV_^9=2`?R^6gPgK6Zx}QCt^>o^wNcrq>wBaf()9<39=*UGZ-|g|t^A=o zR(QfqNZ?lc`J#zG>k7*j+s_H@HfYxIHc*Z>_XqV>CN8u9zcdfuiON5QY4_X%T@ru~dzkweW(;3n^xW@j!h;5X7!xw5|kj`CSM}?f5qy952^}-i$ zwqMNJPUUU?_wb}Dq~82oDfbK5Oj>vH2G{6SpZP;Xi|@kkDl0#Q;`w)#AA16c5mZ~| z-Tj$mty>-LXx`hH7Ud-qT2F)d{Fxe%2`t8G#-LH>B^NjF?Vbv>ZH5Wfyjt zOGn(u!dZlviM2+B5r)Eh{e#BDdnGzjBfKRj!|cQD5tAgTa|&Ifz1Au#C}j(WG^;Mf zA?gX;jMewo2SkqtomDw(vLc}Rq)HYn@LaamQ>~PdGyw)t56l*spEJ0VifqmY6)Z#fhPv8O$FFSu+b!MQcu{d zELtK`ht`zsC5uQ^I{SU&1IA}+w`m4MDAhrRcJRpwl=fS+7O5<4g!Hf_)Hm8D=`2OH zY#0h(x>=dJ@p>CHR=Co#x^@DGG@+0<;+Lw{`sH^&^ACYhEu9$jQ#3_8OS-zw#w&5q?PJT(@JI4?Z2d&${_G~YK!i0B=YBoR$p0LRc)x6b#|4W zYI~#k6Ju-)Z)uJhIG(KnQ^yJD}DYP(l;dUm7d@d ze3#BAcdYkbI ztg#;=f$9$X9g`EG#{8D*UKdibDuleh;%q%5->;alASK1$=;Z%f^xp}BuSWfu{y%xL zI)(nPJ*hAM0QCRKleLxlTH}X0(*L#k58vqjzm5Kj$~BYWuJ85T3zVI(3PlYNqo(v} zoG#D?(z#*tSj;BB)#MkFt?;Rx-3gqN+JR1xsvvYYQJ0eS`DoOIKrQz(hvCf=Ac+&VUbDAHhz-Jw%@zxF{q7WJQ&QS2aZ zq4YMiAU7%`=$OXxbv#^QBA!YsIDS$B9A3Kpv7o|q$k0O@{~)yu4H$BCr+|sZ{vkLt z7ZQq|7}9BesHB`WRW_Q%IZM-=My1sh&smxfAS$i!VXo4i&*-6wYkXUtr?iP$aR?E* zNr=`w@CbAD3}{52t0$MvU}UkxS0^RjpC#V8OvYhS>(3}cFWyV7n-7BYE|2+b9XSlb zVX-F_XkLfxT}NUs=>hEt*8{H5?kVk`p3}D{gE88qujfSSzf4j>RVidXAzhuo8KEm- za@7O%u6das<|9JSj3>S%&P0!`}S zs8eCJl<2=x`GQV}xIg4iXa_j&Nzmm%fco7aaPU5m6y{|%M-0qTcp ze@93FLsn`zcN~u;JGH7dW)_|opGr($s&==^LcghZ#5wtBk47Oq zmr`)vUOFC+kvwa`)6wx6UkUeJr&rc11l@?^=dq1$l2H>N6Oqa3h1VlT?{ei<#VaR( zxqwmZb!{{XLAO;foX+svLF}lC;*0crhNuFIawizt5fTQ(ba=-LXFS!AwkJ@b0jniA zHzTMQR|R}Xw++Yp)}H_xLF?(k4KIbJQ2@8+qhh3Lb7?xJ;s`KtqA`J@H2KsDV+aI} zfm(^Yu`nDr#8F_))ydEafWlwdgNYNGD)vebOzF51uB6&zo8F~){?Q$CrTCmzQDMj(ofwzqGT7n!0a``Xb{Q z6iy3d428JhdP$m}g2mEB)P;v$&6=4{jx)*}MA;H(F<$Xw)vGU3Q@2ZF!=lw!Xelv02pvE1qG?H@Ed9e6m{KZ1ue;xN_=aK9y%m)yel{GJ>2v&pvn1_ggu;$MtCO=I1lT_kvMb< ztcKeqohM@SdZ>DyMtL|lz!_o2epz7TD{#{#mH^f;#ffo}C(M@^n4~d`_!exk1{ZdL zWf4QahnN-2Xh6?L1#{*zkrjv+l*|yfhBL|kww20P(MM0*Qp4ub#B}PCBz!SuCA~=) z+zXOElWfM;iXuG*t;uC=_Vaa^yM-(;Z0MCs{PPU|aFX#~>yn&(!oEpg(5#2b0w-+b z+K#A!3fsZhLd=sIiPV-;PVWa{I2j_1E-3D#0F*AVrz?w$#6Cq@=L^n_JLcQm=o$_U zdeki&o*N`+V*a1Y8Q7egBSF!rh8-1`rxS9eb&8u%#>S9SDxSi6D$lr9OehKSLmHmu z2|{JukWRY71WXQMLh7G*VTeIhJ|48g$HjIFV@1S&rL}GT5)KFG*ir}TKnoI(AFOpt zW}fz;?>W~pO~Fm1+~>@2Abau7FCw}!j}h@6L`U-VSh>?_gBMWY`0$b7Bs9|q-PlTO z|A;29g=`kBYJ-g-Ji(I@qB6!sf(@7!2~cjP!vqtRQmAk{n2o&?(Cnq0fMN?hvY<2?h=t<%KtdUrQ8XmW;?P3!2~#~h{x8GJg+C@3 zJTW+~<`MwF7VFQGxIfB_xTZHaL$z4~XElX*)A7r?s=Xb=)R!a;pnyX!nlJZ{U`9!) z0)Ej|6ECB^- z?IoiG0>SGENNv|J9o21zK*L=Eg>(-ntW>u*z+*Nf%)g;cnBDD8pbYFsD&7)K8^Jeq zNJFZ;y7Y|d;^;-N8ek`M$11zoxqNptGWrH@j~}yQ`C>a1+(jp*|7V2{kY-Sd6h7JuyDuRj3=7(kZ5&C$e z_*t;9_+0B=;X=ZZxO@Nc?*7BlJq^P&FhG*f+wtAKI3M`kPhm9c95@W;OE8VG(djJg zc!W1PvG0S%#m8YJoKpMap41# z;Zi&>Jl(+jC1@fa?{u1hEMZkbN(MCJv{*m22KhYY{NfKhjrm?Bvx1z)?L^Qs zl+)B1dVm&%yo$i>Lx!TA49q>~3D3hlg6Aw;nVKJ4VQ+$8A_o37wgo=X6#fN&|BiliP zw=+x+5;4xCFUFxfD)N#b@{s` z=fV44GA7B}WGs?Dm(Kr-aE6QwaFZl30+6sejI^`o=%=}If?2%`(!C7k=waDuTmNlQah;w4~8 z;e;=<3+?hk374dVM8iq0ri3!Z)69}?RG5IlWK{AiDrcamUSUGcawg^=zKQ`6k5P35Fzj#;KU0Yx?kx!LOAeKaP_yBXsWkjyg{lv*-ejHc}T7O_=E6wgokrmU|n zjaecShv>6r*kUEDcXIQVlFWvTA0%CX0W-{}0tTOKu{txX+-K0XJ&B^gm(<(iO|vbc z2x}SA8)aIL@U&7&N%iEGml)5}jxn5bk7j-n%pRv8Jx)RPI0YHwl(gf;<*2(Iq`RHf zS&`ZUzW7)ax0B4Fv&?HDMNIJ<94Y6m8mk+(TWKzXLsycKGV+&F3@XL+xbaG3yRQ1e zLoL6MhZRO9+N8<%Mxfs_&6sdl+T-^4$fv#4*sbLTX-=?GYnx@>q#>FuL4zlSlwmm| zG@LNnNx69@HB%64g;WdMP(e6hhq%Ujx3N%HmmVgN@(yX_Cwj)7qp&1yIY{=Ej*)Rw zr#Ji^NlY>SAq(b_;c|Kj`FzH95b*wihu5mKv(&qXWZR_8r93&-WK29>uhO*gIYSL+ z7YS4mZ0D&H-A5Yz$z{minTBiG+@jd=N3hYO$dB0plnqhgOi?`BY{7n2mQqUPHcyJ! znH3a~c-@fUL@UlfCz1$ipgF6yBsRaoe`xlXv&0g0FK{m|$8Z)aiN^ABy~0YZC{~mX zxWq}||K@ao#Sz=EUsLu_^Q=_`OT#>MdM>hc=M&8sO!%%{?q`^C?t0|ti({J+LxSR9 z)~3^-_~N-sg2Xbh%D~eN-7&>A4E!sXnB7ash(*?Jzzy={Yp6kC;h{seZt>>UtBDqe zh{cAI2lLi}Lq6BA9{U_+kX+z;S&E0|R0&7|oskSxJ zZG$!#W2f2%gF({Ge_`{WW)l>tZTj6whJ95ARBc-`A%#Lg}{ z;RNRS0%5P4#oHFK_dLwVZIc#h7=i6MSIz)PNe>S=u3aC=WenaUu|YvyJ2(5Qh?#KKvod zB4y{{90xOS6)B>*#xNuoFkfik$_{YVdc1x^6!}!eUS@h3jv?roh}|5NnT^lVjjo(WH;}WS{M^Jk9vczeSEc`) zq_nBtJjoDm6y>x1o64eI3e>B(`cDX@RL`>maW?ft{%F6_F% zHyj;{=9}ixnP|P*J~+ti?{Nfa|EvW(#?jg7J~aRMv?X3Np#$W;l4?Kt1u8g&LfF;l zX$OWA+I&#ffLbTboqb4vA!|ZMw@-g53*ujnTFw7?4VmGi*xf$dehK|9#)nM4jGEqk;BiLISbBC$@Lr0IXdNOBMqBY3)m#qoLh-C8tM| zl&{J^MyoTEX0W!{MPQFE-LA1oNSY7yqlt>rzxWe_JQW@Lw*8#F?m~%b*B_Qtu(|0} z$$)w04x?G0^zaB$9RGHif|=|@jUV{$qKvrws<{nkvW`4npi1g1nL+BTPR*dcJh@g;Ah&@(X(r$RA zhcD^#Ci35l=L`T%5kS>ThIilEQcfft%n!6atUW>Dq1ODA`vm(T*6R6H5@EC5M~Kjd zHr^2R@rX!!^vK6*rC9;08>l(HW&;Ne5iP>;L>x@KDgdgn)+5TSSpU^L>c@JKzcW>8 z@8hb|az+zM(9(}@^1T07!A>h8^|8OKkj!nUW6NW<)XJsLpp>PPt-Kv)qYkY4Ncy0BLdWh5!zxZAX5EV!LR8i48tzqGQPgq- zsSx+a=IW24A_k6kF}_6iTS`k)N&eh>5@x=$qBtwrmrTlGuDoz_y`H)kuV;inR^LmJ zjMFF)-QYz6JE^LeUH`f+9^JX>q?mZr=oeNbvt-{A(sii@oOQ`$%BSS*t(z4IIObO< zLL2uxL*DD&lZzo?i5rpsV61*G%<5kT(0 zgD=g)q~NiKN1s8+63RVPPAVhC>#=2{bhM;IlQOPzPy4CIsJY}rDhN89M-knGrY`EL z8^Xf4>MxF7$^$XFARdl*#?q>@3-QvdJ$Z*Tw}_4fKc6xt6 zW>pz|mn+a{2&MFNk{)AeI8Q5V*O;sI!DJ^ehzI%dHQX9tYY?Xn_Fu@o++sTi!_fie zSytKr*qdp9mb1%dz^Ac}SXJOuyVEaA<#mq1q$XHYlar8{fh+h*lJQ(hC|>{Rr=Px9 zC=Ot9Uquw2`zliKoFM?0P5aAY@7!0Ac+0kY4Ka7_t4O$We^t1h%aCi!Uj9XCcJ5CL zvSrD?D%i_?x%66oWTBoV#~~)NPD-paQSu&SeUo|4z(&7%~64h&lIlq|3RlB3RCS4ViN8D~OYG ze^HX0`-?*4++UC%=e~~UIQLhj#<{N}FwV^-E6$0p#!ThDif}mhmE^*?2Smc$V3IsZ zq-(A-X(l!kt**0Wo7(3HizL^HI3{JAWKdQcjGp;pPWEw~+8HOZ1#mlJVn{<`D+5J~~FJcP^3};sF59 ztVKN2vE1-vd*|n3>;O^5kLBf3ycnNyi`>1bMVHGmLoO%JP?!;y*U`%k1#pYxr5!q0 zhVMVX(d3Th3)0pZB}*~=`*rev6t`AF*)l7#k{%VGz^XH)k9el+dyyk{t($}g>Xtr4 z_C3>nJb9Gvd)f^-XEZ+WiE1$xTl8+qP~}}1<8pfpN6^04w(iUFR1H-|vNQ2m3)1?~ zi7m1AV@#D@$CJ9#Qwya46l?n>K&OJSOe>!*IZbv%WtYq1==H(DeGUd-j(L~z!YLDP zsHRnC2^z_xpr@Sh2LMir6r_6eLI!mm zwxttnSQnXWWKVd&6aHk%gy-+D&-cb$2lLLgDw-~Y)0~jD%r)s!NciRVE4jO=R7)8= zVtHK0e77Ns7t?fP`9qa*lra1iHcf}hh5vLTRP8b0NI6ZG3~xAJP*!0m7uGV=d&2T) zO1@}JrF2%-g7TZA?Zf5+>kR&MkV?u$rl2Q)+?Uh!s%j;CiijM+d3p$wANuA7!VkDZ23j%He-Z=WED}fO|;4C6ZCot%1%d^tR{Xb z(meG;$=8RJ88Ivi_P#w3w- zQ|G5Xp=vuZ&;SW_=1WQI8Ese8xu@|-zzR~Z zf*G)aIIP%M%SQa^p^kVv^Z!paiho!9mz5tHYmxu|I{N=#TW+j=^Z)LH65ZzX(3Q2iT~PQT<1|uC7{0UY($z18W-Sbr7v8XdX2!diNZ|z}mJKO(EI`>h z+&|hoCi7@ARijrZ@ir3owZ_hsBVGZrLJRN`w~AZXf!w=H_s!&gn2Zz2$NzKqMln5e zRuy$HSx^~0)rP%B>}@snwr0GAmv-!1*DQEBw7bS@H~t#9BWKt%5`eawpJSkc?rQAK zY=hf#%toB|%{uLHY`ogBD!Rb-4F;}RICLDdNkc#0sB_P3MQE1nCEm>O>|Gi!PB-?F z_!b9qK0%+nW`b+Ng>~BfWV{b9?a%}VY>(L+*q)3x{~T|Y%-%UyBXg`muWr1;WEpQa zYs)_+UawYSa~&IKjQJ3~{x*VDV7!lkN$s7Rb$#lFKP2AkjTpe8*;L270FKn`TQ@Yn zPh8{WQ*e&hvltB`a1CZ3`V{`Fk5W)E)1wH*fQ`3{g#vZGquTltaZB= zKBMEov~qZm{%(x%+avam7AdhK-xIy)P%No@r;H9qJ~^yjLW~CT9z{GzQeY>Y z8IBUL)@2~1{7{zB;hkh`-wk$8D%e02GuL$9De5cnJTh!ZxJh9~Or z8rf%`^w6}liQd2{%%E21@i$pR3YSK}p-;V-8EH zQXnCpN~sBUI2Wbm-xu#b6yJX=-G6vodJlhVc|ZwL34?B9Btm?yT{tSBGR0yna;A_o z`K8FWiwt9R+C11k+keyS@V({n=`Wi&gRFrX`Ri<0b_?P>OuZ*rIFzOR-de`edGWB&GG*v66A91mXf^%njWbm?~BAH zqR&Y7z8E+Io5GWf?C~Y~h9SS!w@S6wLLC_^iZzGKVG|b&>tn^C(p4=7cE)gak&B!FZSNlxN@LVrK3TN6@?@DCZb zP}kT8I1Q!rtALfhb=c>(6DjpYU?Yz~)Y)<1pn$CER5`OdCdWY7%c%1*`m5WeCMhL2 z30lSzgjUwrl7=07D%k-J^)}=gM|w(9yH4I!hnM~YIB@hmbv~d=?n{gn;s}iB!I$H( ztpgOCT7TeQpz9{`%Y-Vcc%!;=-ILoSRUrdYQG~7M?E6N066Z9?)j?<~7&3ZmCaBNCCTu$(-RiJWYkexhUJ%SGkHZ38_0yp#bQ}Bnu+34Cm>g!Ju2kEn1}vgGUiex zg;8*>0iFtm8H!d_8@74A9j{k5$FOK;*Pa4Yl5l|McP~60P=WB;K>JW?XBzE_x=@xd z*vHk-u|0VT)I&n|>@*;;mITg>zG-jAdKM_cHwCvcQ>s?%PA2xL%9bMLWRHOF(Je1U z)21%oB8T@zA%qmmN`lDDROH+o#e91lC( zbgp0|?qp)o!f4*54S|dRb@Agd^==3!ZtR~(7GDxg|M?*Qx3;>PE^$+1o8^@d9JWRrM0kO1enePxe0ko3wJ_iu5OC% zWl;2kUa?>oN{^w!O1;F?^J=xUAvMH8tmVYY4pL#A=7ZT-2Vk`vOF3S`c+Ikr#7yhllzg75pa(cY` zdgp9<1}wgJu>G=ixZV00>RIU@sQdQLZu7vxcyrw9 zbl&bC?H<2vtu$mhy2cl8_Rc!H2M02#_4);+0+fRs>1@*czc@JF`B_*kx?M*5|9!9T zTl`69GBPf&F8{Q=dcJH$A7a_?zgkV4a^S^YJowm~?St1%*pq<6w!PaUKnC39GYqE6 zVv5t3cH5}g0EsQ%jj)242LnrH6??-gg^I{kGcEf*a@N3As+McKpH|>lvY~r&`7l!> zU#1n3wjWu;qdYdvE;&z+V2(H(t36mxe28X=!cifZX%!wg7xq9~!eP$HEbjmJ|KWwo zkCn#q@{??%xMbe73Kn3E?(Hfob(c{iTl{xbYGhZlz00M0XEyLGuzLK0PyW_u`H^7J%?)a7u_n~74-AlA+oQ#E)4Ea(l zS!4weg^WR&TJ@5|RMoDMxRLQJn?%%D^cL0vhg?>pxQoNeQKVy^L&j31o)ld3Zm<^G zeTOmklH^>FV_XPHbjBtg=wp23hoP%QTUU+@0mNNXmLM{*jNY{!?MW5oZ-GCMCLBtr zV!<$kZV$Hr5^T7hDNth>;7iBv_hCH!VC0m=e@{I43wXcG5vQTH5TntE6Bzpn-nOHO z-Qor~dhQN#0GVK|qEpdwA3}R?qK9XS07Iw0$C&dB==q4vcFoo;g~K zXGS4>-@W{h2t=roI2NILlL38T7|VFY`2OP-zn6@NYpR~8qWAea)YkZ5#({|H*=`-xJFVu~tVZLldFYJe%}&5M z`FW>RZ#+Bzqk1D8f0_yE;MI2P)hrmK5)cQWL^JAYEXSzt4^TZ8MnXE9MrjxYJ94fw z(_Igjc!%Plu|7A+_-;o|hawhi!~$O$s}N4jnTX_i7!KZ$@Fegj(Lxz0jgP3q&mU`T zX^6)yLKPUglO%f0bd{{x68pI}bnf}AQHs&hABpx-?Xz6TiH^$EY}DEW!j0OZalqV; zGKKACbLVRc3MbYp?a~bR%Ns^K%EU*hn~nbBW3!@y#@!o1A7dpSLAyzakSd2B*uLJd zE!F6T+^{%`5JKKE>vcV?Cr_U?kN41WL)y)SpE~)w2+Vy4N))@pQAxCZKJ36(d^hST z3;J4`383Rm27{srf>R7QGXV4h$0=eDWN~_rHvzuRYQbb^mdDpGDNfNUinyv>4TIBC zP~fjS3ltD522{ov7#bQTXTyR&m~jTkKb*ifdq?kI(mlFRz($!ZqQtBwJ_<+YH3^M~Zfo1wM4x zgjk`t`kd9SDErLGaz-6=8N>aC2P%?PS(G(%6jaf-%hECzf>e=+Lp20F1?9$g;kTIsmV0elQ z8?Z(JL?=3D3TzCu5;ey%&Z>Vlhg6@z8P&5nA}powTz~z-vC86?>eJX6(QfA!iez6} zTq+eYJm8r2h9$wzOXZBTQi;kX`Jg#hZHY-2Ezgz)6sVd^!VHsV7U^ViID=G=y54X{qqaTUmWi&ulnK|DX z?O-5@mKgO;omI`{&cbOetDG05r4Y2|kf0k8FVR1HaN!42kaAij^o&bjO3Ncxj;eDo4oQbULZ z9;jdv+81+Glg#*qmCdfV^iFjSk z?}GAOa8YrQ|*TA8h+@4mi*>lcO^YJGP$p8cw_Xko7vOSCrOm5@} z6d5bYij+g|+~NX7yda<1c!liTjG(m$9pIzWSX5@jD`nbHx~!b0^zpuQub_VC(z`)9@jWS#r=xkTDcsYD@Dbj z{p-ER1M(22ZdY4wOq|Ci(S*Yg5F{^0yoS^H5 z4%vfV+dO3ORfZ^#2+OEl=0Mvb@CO52IFmpCU#Nz96!`2sj1doY=wPTJKa4iIO!vr2 z6p<;ne}sOuJLJ3i0LC(pLt0}vRe)ou@s4NY!F?nuePQL}pRCkS=a<)k$4~~HRCT;d zQFY7+q{n$tG;hX%t&MZT4H`GQ*Hc!#61yuAma4wdG{9J60axUDevXuy-b2IGELo_u zVU2@{W42z9VJSLtbv>znTLE@WPc0YNAjLe_n>ZWF*jK#k zj)6p5`QKnxVNgF8GRioi-Gv97UpXU{9u#rob8xWVI@|me1=jqnLQB2C+IR&~A(ru1 zL>DygQ$|4=ITO%KoHWBfAzdQh%s>)cg@BZuk&rGO-KaqbI46^G94+8C)V<8(S4bc% zL*rB+sD9uGX}B1|RtC$K{BDzNwDc83D2!GD+?tBq4z3*u1r{NytlEZcEbW1YdZ?@j z$v!W!o~|?+l&k?(pDuB_qE8EYwq!2ZeV#78gd`SQB69)h;r`9aDvXPSN)lO2799^q zoB87K6P%kzq6Tk@F1@4wlxs$y3nNhohCJVp%_@jjuTRkRzBp^19*X9>{j;3ROe^|V zZHJWq?N^*N)X^m4dFjxJ4aM08o=GYyXn6^nbkY#+jt93~95Tangf8reFa-|n;sf7f zeNEm|g|UYM9fq^g`EQ+`J+5AUww7Q4)R=~! z+|h`_TfyK$Dy*u7CHgK$S1sF&xml2w(~f2XaPt<(FAW^_t{@32@-?EiRKX2!sfIbj zu|HBwm4q_{6vmdQz%|1%#?Mq(%U0MtjsR>D;z*oN#!;Lb35Glf@Per5>NR_%{ib_8 zpNCsA9OdYng49QA8uD#l!G_4nqxdC>IzqMvXLhMF_A3g`xl`eF)r-dC8ZFd&vm6WJ+n^870siWQXqP3==Ufhm3X_P> zqRlCCg7rIV?=J(59;qbQ7=T)bwPM>_d@tJL4@+dwMvsqUfo$J@Y(aEpGp(OgB?)=9h_o;+!;pfL_90|?l5BVBOTcjU#D__qytkTmT)=J_o z--Yeky2s6po~`>0m;~&8zMF3V0ITMtd-M@262+o6o%+1_xdQ){$o~@*uH@^rjAF&2 z)OP-iA!8^aN~u$9z5_aXMAsXi`Oof)&w9)fD%QG+#FVu?XtkG`w#-)WpcK*ZRi}6P zS^jp;J$?-O-L-mswKML)JXM$4CCp#`@Yn053moWN=ZxaYoHg6Uuh5&K8naTTy3{EG zVt;NP?NZaul-6(tE7fs5iTdnfQBl3T!KIqH%yqSpv7{=+#A@ON(ugWv zFxEw7#<~!RK7UqCOSNV>(I6r-s?){eqt7sm*d``TNrI846f=lXN75n~-VPF?8WN&n zzEMgNqB&vYW%0~L@e$Cfg_8=fL1Tv^(dbNDlEor6gdDdS`+(dWvL@3k*LUdzF}#v# z%pNiaBbi1%8AzV92TW9s{(STF`~Qyo_ZryxYIylC_y2*?-v6pMR@c^kSgS8DH_-m` zhm~*g-@jS@t7Lg}w#hF88NtAeM9x0H|5yW}{`qs^S1TudeZT?y4olout2MIDlUQR( zxgQ;Lbq?hqR8(wX-Q<xmY4ENvpU8H`oIC`M&Dh zn8z>nX{WtUNuTRl6ezu+kv}AKoQB6wVB)WRIHTDCiYX98*9piWTNhY;drStYaM-C( zgkL=OI{}vL%VL>0tJLE|OPZ;i49)(;Q zizPThEk&lWa5$PM8{3dAUq`oi+Xz7Lc5*DLy9WpKg{Gc*fhRyG9M=q?CtkARwm}=! zHCo5Q8I}f~dx~;V>byh4iKBmRcRyX*0iE_n(1vq1JT4-5&xf_j4(DW8jCJ4}$T|&A z+s7^Rn?aJqVc7G--ftJ9Q8eQVB;SrOiKW>Q9+5nI0kCHQFr}MD9V`Fb$~l7!)FQ0r zB!V4YVr&UXJ`J2xaI-SSz{#p`b5FK~Kf+*L!g`bV>Hw;QW0c}U>%Rj1M=k_?m3=J- z01wfBApJ@D-&kJxM*si4{@*E1HOE6NWacVBCK6Nut-)&~rkPS|N3s#0g6t0Hb}3*- zGr~eaGGG=OP3ITUKAbE)@t713MIrBp6fz?DpP@%>KsgYWg-i%C%1$VE2b*3*2)u-c8pj)qI<&U*e4 zYg;_Gm3L*s(3nkTVGmU1^HNjLhR027@sUcVfmEJ`7ouqM$$TmclF5^SO|DddhNE%^ zu6t620ovB7!mm;RQPJ5k>4Dxr7Tupn1LV1_I|Z-QtAM1oqzzNXm@H|ift2f};C3$o zql(KvtgTHcNf|NT2V^#M(Fd|L>ar7dw@e z#@F2cpFCNeHvdoR^_9f@uL2|RZU6r_?*HP29}JM^-g*3(gR;O`W`&siRZ*#k|F%8n z5AomV@8;=mzdgshjcVv_;YObablP0N2oa8byV3v(o@e(in-*}qDlM1yHw*1{0l$tm z3wXf5=U}*5=sAM|DuRn0Is~`_s5%_ONeHrbHw)+8?n(pm4*CQ8BHXkp_DEFDfExxD zyzr_$&F2aHusF;ba|$|rkKg>D@8MCDdguHgS}1woL=SbC*ZLtWi0hyrSc z(zzuK1DezC!@m(Zr-eB=|828Sg}*qJq%8xve2XT&`L0RlXI3Pmna5X{8~owb|~kRW@`6(r7;{=;YGMZJP88f!xutY`FtHV zI{Zj5(4{>GF_msFRV&eH{`qEMjAd#kPgV(~ZI2T1d4x~YW_TEFS_~1E%q6`S`Jwd8 zs`ds0Yh8aIP-hvL`QQl6#}Oo0a0b`!-Q^o-C_JJ*3498No5f!}_`&&WY#qHm_*Gmu zf|9PIv}YD3K#i1cm8uqA<^vc}>2*5(u;1xWP2mtGQ&cW2yy9kr!DMb;#is_Id!6BA za82!@UaN#K=yF2O2|Es~H=RQz=p5($cn0~dzSAr}!fA#UanOx;wM=o^=Uy8!z)$De z^>|zg8%AD&HzhB;P~KQ$WnM_5%)JP%NPN0YR2l2y6fihVQ^2U!m;<94-sgrV``Ay_ zm&mDLV%(?{R7|AY-2_~n+k~9TtzZY;)f8w*qrAat0<_9(LQZ9lAg^UWUgOMbDadOX zkQ12|nPXZsz1~824UP5rqqav-;sK{yF=MO+fNTU!h#>mh!$# zqrO0mFmf_wT~I^$z|6!^jWh?EqTJHE@0=Ygv&T4(A4AS;_L~NBXz}Y)h^5tRSE_ot@KPPR@=? zg>@w6&^qS^*@tMC6&F31pZGiXwLPYxI6~v>-IBoO9+1anXs}~8xCV2)J`8L5I~?Qt zD*A7J{`4t^y@x`rS2&!_cb(%G|6Ss7Lw2C;VGb43UR6m6EJLD6E+r7g`;@{Mg)8jo z5(xi@IE^wQZkT~J9fS!rvdg&{D3kX#zdvXB3)fM~!UI;F)747LrfDOn2atCpCSXzJN32 z#RaO%@18dII^+cdo_RCr9LiHEpYaHYG{Z=M8C{6V@rphS#y=jfKqLL3JFfHtptKc= z?&So0?8`oNXpSpi1fmK1bnV>x@kzxQ^sBx)Z6sJM$WenN%827x?T$t=YuC>J*!2?t zWv&d6m^B76c7D+idp8QA&}p|fv05@tEEu+yYQf^F7LoXNdz0)`KcfNX@ygPtmD+iq z$0!Ldeq4#hC=M{|m_iY9d6besW9JkNGl;{?IGEB*PyAg*FQN$1y3|aP`M0qVm?J6GHmr0?+ygQrSJ( z-$B8a+qJk$QnnNNRg{HxWMl{a=y#0o@zVzjb~4T%na7VZ!lJ`N21gk`iUfc0ERy0e zflHLEHFAk*4inE7oHy|e2s{+N+aad&UQ}f8n9AEhxf1%^JK5ffFZB5%qdH)LHx(Dm zeJg%M71Y}MkL?;OpsE18YM`*cmK8q{MeQ|DS+amU4d|Q$4_a)tDqSEtK>VLMB;@aC zr@uG*9X~WYa5Rv^fUA7kD8TAZ_xX8Peh%NLS?7j!*Utt% z>-dlbKJyIG?kV8<2+_XHs&D2&LRFVKMPzm}<0R2O&+Oy$^MnCdIf0mRrf7E!(CNI{ zCyT6hXPz$F!D?2^XC5+Ev!SnLL0`*;KI_1d1wHfB(H>?(pLzJmgg)&A(hi21&7b2S zl2uLiX`~(2vnrW=D5)FpzvhudUx`N-;ss!W3o~!T3&2e8+#A{u1v#|`Tl+8e=K_Q`Hp)a}lS6_7(z~XsnsEy>{Xc^veM%UK0=9SMGQ#&)04;f z)lzBQvSj)5z_CB!V-zrY|0rXuWu*Dc!G`@DUWZOcML|1lZtos8&FM6AOr1$1&+KVb z^T(qu-*CFxRh*)F879eiEWU@m@Iwi0&dsTtISY$lHVvs+ph?fK=GQD9T%n?t>DEU! z?V?@mV%W3Z-Rgb2LO)r7bxV1p^;ltdbjuZD_&TnHrjx^rNA3Uqdm}rAwR?D?({llg z-mdihj$S@P_Ya36SmqG64k5YH_~FTqk}dRy=$E8#PX-tTlpL*uI_M=i_PKUM--as4 zfRS8Ap)(r%%qWzL&qBStTwW$!LcCW~U!X_v;g{nU&&XYm4Vw|vxY#XmRAaP3%ouwE zmLA4jV)1tsv~^>++nz}qC>r;=fi1Dm(3f*sRJvE@h4BfCR zzlG#miU$*UsN8e>*ij!hMbUccj8E8sOzYYmcQ0YuJ&NyqI`L2)S$?$2xl|BQEZdrl zoZuDo@ze?Z!31qS&)gwWXDMg_#%@Qd1V86`JKSKb9Jrot6;dVbc|P=ez~m(|$dAY( zp>--w69Tp3y26Wqr|vncnrByr-;K&BU`{L-bQ+a@bv9l#FIu~;H@Y zImQ691MsoflhyC)Pb`_xbFXAVx_3L!J?dSoe(t8uht7&C@GUV6@$YY24QqO5;p7H* zrH15Qp_R3NcyfG-PNy92$_;#vd`@23fy*lE!0?c1F)*@-bR^so(mj&)O1LPld0m@0 zT3o`)O0d#Bgh1Zfs^l5aMkkc(f`H2EH@oX?ulK3#U5D^j4reYe`#_d_K>UahY$-M_SgC9t4ojEWthVQ0p+m@UGQu%w4|l`0 z8kR7NnWiu-Jq9QxMGGSVI1z6}zu81jAScQ_|0V=dNPkhgX{gNHV^oP(Pj}aX&z;SxS5q-x@N8V|d-| zLbs<5$?zJupXht$kRBM?SKJIgAEFtIx$ zQKM0+!C`slhAs+JGi(2FW9?j2Ju1}pq{JDBThVGUxtD$_qecTah=lDHh%E+cLE35$ zn8wAJ1{%otkXbU=b(*%wr6gFt9;-x}#oy4KFV`YJqn}Rnt4K#+=!5tSE%GY#tnp1= z#+gVI>FnXPT4XMkjdGFpUBg5$L$;2tKYBoufl$XOI0c?iuDAN0Um^b_aNel&N8N4( zIPyt%T#-%yCeN}9)lE$SN?zWwrj zMHjQ^f!s#tm4K#0=7-Qx=+ON`dXB+v^#{I9o}ih%MrHxmpXVp?B69;Bodk3Oa=j}j z9J?3HOi!O8jeW6=j$#*FCp0x1-XLTNV@RgV(Soi@=4*a1} zpTL5!eUTJeJN^Z3tSU^Y*|j=ptMe`pkxQ;T2243Wl|Hi}vwP+C&=sp{2Up>u-%%Ld z7?#8!A(?IJ`Q<{c*M9H$KVOn(weZD%NL-)aZ(L|M>n zQGANnnUq559w6nwA0g9Pole`Lp~FXX%#OcmOz@e;WF`$9h8G-rfs~Fop1>+P=_WY< zG--scYbUVZ5`|OrE)L`x+fRcwz$*{<7beD#-k2uBSM$}m83jpbo{vtM-L5+(Q8Liu zfqm1FdKDoJ!EH!=Npb}1J@rCpQE2!9Ta%TItaBx>EsutBDk%ghjS<$ z0H*Oo(@{(b+M+yB4m)7qPdiW@0qprmfM_x0(A_b$BPGF!^-gx7BZVVn&~-8Tu;>bM*N+eC|l2Jvgt8LTA$R;f(4G$$vCTPVj37M*GQXiiOE)nG~d? zS~k5^t+78+GYgaPqO~hpe)kiMwmebuIsNyEgFeT~e2i5SqiB#mYh=l9vf3%LSegTW zBnLgc59@-vFFLPV&CdQ2I`(azsh#Ye1QVIOt1C>C?b z8?x2$t}Sv&jY5f-8uOjz8PZLawv*6SD37{lp1Shk-3laTfGjZ zYttyDm`Ee0%0d9G6_ep%fET~1hSF9_MEN`a{@km0*YI%u+r6Yprh*FZ>6{P$!UtUl z4Xbq#Lx(R8zw4*r8#;W`YM^394H(xTy8=52Uu8{zhhzi39S0xN!HI$IY49SJew(Z| zrnD1P+ly7(lhul88Ez8;+n>^`^VF#JvuZ!@o3j>&9a9`kOj;6pOmWbFkLl*D#cMEi z2jdk4tH~Nn-9e)QNH*Y8u~-Fb(<)d?SFn~{!J1jYTD$^NgD_sfFjax6L1gCT?#^Z5WIN zKc`ldE|aLwC}37$@L-Cg-#K}`zl+xHrUK_wUCo$s=i68Nrw1p;#|P5MMY0M*`4b*t z%A*&U*(rs#o2@Jd8Zl>Dc4+!vB*X1=7~o|JNTAw_T#NoKCN z&UGP!MykY^`g9>p>Y}u@jC^aUd@+^gLYnZXw7AxAA%hC&S`uo^h0F!0lGBST`%7%J zV#_0)s`B!wHgHskwgg6S-!4*~c1dZu)#4&Z3QeiJiVrYG zn9J%Lcuwn21_K%>QA`iKtcYf-#Lx^Gqnf`c=*&-k+2Z0(%xpPcO7zSFZvz%n%-#&FZZmS}#bufya5 zbAA_=iV+Z7VyPDGoHmLF)GFgR>Y6{0r?S@ps-8aRs26EoChg zC^QS2skJi?wDxmTNro2aO!%fs(@gk>$Gfi&nh&&A3-M-xO2Np!cTUn*MKe|4z{oZ( zJs3wP7=!#yiUjU)9At6k0CfZYM0pge!~oo@us0HyzPxSlM*X}`x9&bS6O2^jF-uIV zP|8kZh0v9I*_YHe=7jGvx|)Oye+amwv@rjPsb$qtnV&x>3kSWU5ZjTop1D&S&jT*h zWG*(BV76(RYcnlhl~PP|qt>Py&nbe*3zWelXL8`4qXwq3=TGJ~e4Z)6n%?wd6=&3e z`_fc8guA4$bTjObHZbONomR-$VocEe(RTCTU z4Bo)t`3wu1%!$b|qKPhJ*M)eCF(J>@7$9GUF+$L$0HcFo$N&stO$v9gb6>buj=J#W zAR;n?HH+oF&_|C$T!sUrpxCb}#EV-QYTU>u;i&AakVdsyPhri4Aw_Ea2M`lNWMoRD!mBPBxzXBH{>0Nm66)(= zt_wSps?5CodFr$*ho5tEY4J3Nzk5D$)c)x&n_n3OlE~qW@cu6wxwm;Bu4C8@c$2 zqalwR`oN)|8a17FQ4f*GJVyJHG49CXtYMc6cJiGw?!fD^+d$z)|Ze zh|Jm9c#o7ss$>w@M77zT3U&Xc6?~o_UI|@U16Khxq}e({qu;31>}~%GTB6-2T6#OT z*eKBOW7A01d_O~DZ|=IYwL_ee)mrzs>&hxYejM z58wSQ{$JKs;9J7~%ks*%_)q_4|1S{=!1jlmA-sr}J3AKre5Bq{Oap~Z|UI>&2x5__y zhMPB5p%iz*bnZ~O5a>@|#Vuec;+fz824Y=&J+}?ejq|WqL9Hx%00cFh=Ep(CJ1~7Y zgrw{87kxNb@G-Qs2M6uGL3f(<5unp?hYrSf9M9-`(#1nGdT=J9xuFrvaQu+;`;c_| zkn;MFa{7?;`H*t?Fx#c4mGZsghmCyX?cea4BR^OPho6}cjC;R01bJ5#ciL&CT;?Pi z5xLAU8UT-vOMiM$Ap=6S)RzN;l{4W(=KyN zuo*YxiL3_HwG61*RZbl0S_V`ztA-l83{ShrF`;JMg(tFVsPP-{w96V3Y}Pe)B5yPX zi3{gUe><^}$h>k+7l?4;t2xk_C%%B9_3f()a&M&H4x00v|0aWR;C`(D01ur1>h-nNr2n6l#<%m| z|9k%bA8`LakKg~KJO2hd=rq}kaNMgK)*TO@0t{d4?kKE3=+&Qdk$=E%KG43=-Tz4X z?|n7u{}BBLivOgMjQ{$>lPBNk|G$_1OBDEf$UonLbi0!HMsmP~*mjT^4u&YaJ~hl4 z%Vk0D7P7hrYnxt;0%)3?(AEH5b8jFe{3^1+`8>M*Md{!7bnRWV_?4aXY02O?m^jwg z_3ipMi1@xkl&+&uVs1f*!mzhix%u%)=gDe8Y;Fm|O>v=28Teym=zHT>j&m=aVQprP zi+*F6oxyg(tVTex%y2b&Fw1%PU>11t+_44 zt64xG*~l81x*@2R>Y2Fvts65kmoBQhV@GrMG8#nY$4 zY98+a5z%@KSRe$}nQFPqkM4=%hs4o<0%)EzPY+6&pN0I2vdb2nVGf%mu?30Gb5MoR zfcu>Jm}q%)6yfP3{eReTR5+5T;RS$-^i{Rn%nu!qGj6704^#&-KZ~pm==SsGIJLd8 z^)*+E<0YatYf&{DNXhRRt)G@LqaUgl#>hX=83W>+oiR#$>&##1Ol|=^!fCZBb;g#; zTMrVFh;AfDBs#^b{TrCV^k}3=LX^AeuP?-90mip35s00gk``aW;knX9u`W;nF{7Mb zV6qVtujlmtFWy1Syl?oA@KFDs8={N#U9tPaTlAzBg_eW&JlY~`&{oT~0&K=a9uq}v z9X%$Z`@@s%vsd?O#o+R)+z5;E@`VNMv$czD7J66nq%$18&`|{)}m;%PNtL<9p85(uv$EaW#>B-f&TxIJnKfXt|kwR&* z$z~%IcG0X_3G)PvOti5NOpn<{`1Bl2+01BT1dBAWxoLuJ`x4!GK2CL_3R&TQq}2ki zh+Z;^364BFRw{B6xFe;cmZt(^W>U(89&m7RJxL~)bpQ5|qU=4+*QP-%=&`I7L=}1v z2bH04soRpsI(yV{$tH2b7;p5qF$4r7mqlbPSNW}4t>#QL_*jH#c>WAHyLz{0C`+Q3 zZL;o*Rh|hH)u91!YJySUaoYUSq6(a=hv!<7;*W?ewP=DLQSsyin3MFp7LPxr06nj@ zpJ#V9r4}o}JwkBpaA`3O5w^{qh-{rhkSL0RL)*4(+qQ4pwr$(CZQHhO+qT_PZ#{pP zI(7EhC4!N1?jW~(p`8LlkDC9I!vd2F3SwGZx%HH+=oo(;FBcw6!%%OJmg01M7^?L! zPXodY3_nhWE~uqX*+=opJe{G#(ei!!;%;XWdXYlPh)IZ%Un9Rz3Vd?gIN)B?hR9ax z`)(ZEl4a2w0vF09%8ed*Ag-`+H&ieFSf4>us}7OzOm(M9QpZIOwNofHt&>r*U& zmC(x2?V>ETtWBduA&-{+DOkI_GoJ=pOT!y97TPVY)wLLj6M`(OT{PwH`;ePS_7GjH zgk6|n>Qm-C84@*M0thZ_tYYH2!bRF zHz_)J9EpRtkA;tATOC0iqpQwMnu4OISh2X0-r7IUMMoL65^j0E6n1wsd7 zL(nf4PX>p#8f6R~Aa*I7V{D55l6EDtB1Hr2O88A-GbkELi#|zDgD#i#v6endDUZx$ zwjZ@uT!D^T?YASw81cG{K6}~{v&bYcX`N07Xg;`LaqB;uCqBCmU=zuG;sl=|ko)4oJfNh583pga zw!qW^kheyOkOj@wEx0)edS1huUkc<&wanH)@%p-h%ep#@C+f%_C`MtAvieE|p3;^E zatwp`Vv;vwY9Pst_kksT31Uw(@(v&LK(`Vmd=I49C%zVZtl@^CPFKW*U4F}IImwIe zUa4JU*ENunxASGk!PM()_1@Tk8xpB-!0-t+JG#13-%axTZb1xNhIOVEZY#qBK688F z_*{nd3-5WJMgt4F9LL0>TvsE$uq;`033TAiS(ZQv=1TfkgdYu3*<}cX1?~w00T3Mn`lg*m(@7U1VZog_pK@NM7ITPGlrhSAN!%9k!4X4o^m4`mX<=&hL4Q5A7L zrSNJeZ~txC;?G+;;!>8*_Y z0bDxi+G+$4QYl#wCwZD+IUIU1u-SlBjqBI(sL`=vv$zsI3hBE+w~kTKU5F*{PnxRH zHdm-z%2devnW8}@s_9)1+NZFmBxD;_`HkeGnieTaJ$VB-`3C|+)LVjZOWrbXnN zj~~N*ov81f{@2Wd1xg>}&pEjJ?Z}YR+|Ap81U&fTJ@8ek0YwQYbNu2nhold>>+oG4 zdYoaYz{7QVSY$c8vxWImM!M5IcQn8kW~^0INtJH987K!7nh2Kt6q2ot@<7h07 z&q=;{%bs5|A5ZIkxx6qft(SMlEP05sDxW-w@h?lt2p9Ew-i=xDG=-25Drm;FIMjIZ9Hf&tznO7qwo0GOnC zEntzYxNQ6EMly$+i;0U1?g%4QBQ<3i3K#Agb`cv4fgvECfuK8jf6uu)IIz1wJFl0u zm3j<0zj6PdKxWQEntvidTNp++B0uak<0fm8l->Em{0oCRlo#JZfR%q3UOh1mDh>q} z%HJk&9PPO~gz6qZWE>^NIES(qJ7?tBVoVx6m5Txlt~duSf3HZO^SjUCLjHEGNsE=P|BU!!O}y_ z=Q4L61OLmumfXkyp_PEQe1=MMMCKX%H?-dJ;Dm=eH2J_m=i@(+?=yGa`CsIb#ZS*x zU1X>uvNIu_#!76{iVYIftU|3d|L;K>`_Aqbkp`!ipE1`LVLZ9dM@9FiizV4IBXiPY zAG(mx)GJ9hsy2T__*Sj3tax}|$D)Qwmje+#@dS|fC`M%w1?9A>Evuq^VCE{ zF^5i=&H5#2gwXld?FZVht*L)PoV6IUJi=i4x3t*38Zv9z-}QgFB+{ri9QZ2Rl` zt|rIi*-Ywhv)Jp#BfqvvJDiN+-!AB)#08N8=C9sH1_pp^2RWw;3kt6iOo;uKycn)w zS#^SoE%+$(y>)87pYl|_dZG9*={a?j1sKLRLUtDf;Lu@#1uM!ff9 zO*v{;?ON!hFwr4B@?Y<_W8^I%p!&L=z3p1_GX_WJ*v<|OTLC<{-!5wJ12_A?RkAea z2F2%2!W`~^Shd247#t`Cb`Thd<>p_{_cNDYKTYtgDp?ZCV4U@6?*o#?%rTnL)n;|N z_`Utp&+`Lb!Yg$%eyg((YKtSkXDB+QwYdk#6(>f{yqM)Srgr72&VHrv+rm2k)BrV* zQE_hbnqT*pOH~5$8sNT1BxThO^q=P26>Rn6sQ;Y8(Ttw=8M!%IOw^6I*>H07>PSD0InL>cq(KGq4* z!Pz%*VCmI3r8`PlB;vH{RA*3AY}4@sifk%gau!gc=$`QcI}ij}Zx`cV&US3g&hTu+ zs&558aAFu;`a^qk2xog=9pQg>phi>=bQ}7dy0?beMB^sLwd&oj^||f{!DnuYW?vDf zwUQ2aE zr|Z5&v-e9zB=}h5#n~v|h$H9d{0PM*1V|me5yN5wo6~(~^3`EFL$tiwBD)?OB$}e0 z-kPcNfH@#`s=3>hub#IMM}A-P_dAQ}JBS|4Vb{(_vHZh8F|2iQ2;DC}J7U!4ngRPh zM92tr(bx{BDce?pc+3m*+6Y9vhvY4zkuZYMfKF_n5HA20hZqq}Az{wspt3$r=0+3z zRc}wEa9nPdbdKeuPIxF~qjhH(mfB>{>8jmeF|D*TlvT7QaT0gRn~iA*EfM!d+=ZL_ z5md*0nFY2T%}CFsQJmjgT`XnQ z@wSZkdfzv`);wRu;!|qyc&o;k&WyDQBWb+?hpWD>^c*dB0?GO)I{t`??!I4FlB5wT z3XIB~dZN7EMV&74W+cnRVW{GaL+8uO563#$`3dmjWz0-W^h^Y}UAygH54ozkxqNi& zqS{zo@mddUD5*zA94c(bk0q9r)J6d)9?Lo!cIvXHC?x~JGvtis_lh~)(5cA0hLaB! z+AwhYx+ukJ@mpd7ELWzk`k;oj?IqEzb}q$i(fo&4lW{t#9<`kYBW%RPMJ8-G6|?tIsljqoe=` zm+v^xTWJWk2#r|Ol3zG0%oxeWKN$Wbv0-$=(aIw|-7}t_y4>J%i!tQ10BaOi6xmcr zfoxum4=iUvuzs6}qH|iXl@-CbA+J~aG39c-REW{BBRA+&tMDKmn`teCH~^TdbYO;t z7CJ$Op;}=%F_6g479Z*OAQP3iPDRFM2xdk#CY8r%KHiDZ6+S8#r(<}IU+xA=2psLU1o40F#$+dPPHUP(mBfj||ADBQm;c=4!sK zgi8b;yIq#9G%hkpW4=ZVDIEe#VqalyeleVZkuQ`FsGaM}tf~% z%tp;zpEUm*Ye0xiT^%KTxPM|r}1VWm$i_Tq*yJPpg@&o z)$6sgy=#+eJ81TzJvj>nYdLW7Ym6+z^MUA83QjeKH@`n*>U#G4hO{?W0jbi&5n>cV ziX>S2fKikG<$(r0WT-EzW5=FuyHkif6p~y>S>x? z=(yW+Kk2R6=EZAcV6Og0wR90iQD$nYz5!YzSA+_>R z5((y$mc2FquU{2?l9AXZhprkc`t_5c`s9x1L_;}nnpW&|&p6~eu+F=M^!;$~89e z)soAaRow0uLZBZ^n3@QhWS3a-U&^B9WGxq0wpk1?CmN>>o^27M;8l8H?tMsLZ07=A zTc(*I{2iOU)H+Me*onQ!QF+ttwRPiApoRvQ{iUr9kWUQg^~kTYST&W9b5RaiONKl$ z?#A@_*7It7leq>}Dnk*B6fE0OZp_jL#0;wT=!dfI&&&B)Ftq`XJ^cL ztYo#!2kxp89ArCh@?nVC9FTrh0}xX%zs7sYU`a9j2_;?9*#&r~4BKa-bvEAS5AT9^ z+a8y&9Og>FO@|MUDBM_Kp>3SAAq_YfA(qT&z|bUZzcBBfc{*LdBJ??j3+ z+}30>tlH#%t#9$vJPMT+UaNzRtIP=)(W`DrR7HAqDP4@d+PoVs;s%o)$vrA@4TVX( zE)lKo_~sGc&nK<-M|$kS=8~i8K&JAI4Dtqjey+@vSz2g8BPH0698AW_q`hLjm>vN! zd;RY((1k$`dda3gtJ4n_wVHn)mds%}7H6nG;cHUtjLbcsj103}b^m$dE^ukBn-Q~3 zAT<}8BC}XB-ktAI)P&BMTcfRWXErl1+8T=}JAJ5t4$L?)vlzo*!_?QUqB_2W)>8e*?iW|TFF9?n+6@sgP-|J$IX+sj9j)J zFkZNy%9$dToT{#Hk|r5r;DdX4Ub7DeH?R3st7AK=4Cz$$w#WUUSrHOfF@0})(+{d* zcE(-GJ3g;Cm)kdR43Wz>oX-_kS!LLckg8l;M9*`6vf6p^s~_HHkJ<9!%LjdDMU)cw z3rz1duM=I6uoDR}gLf8F-YpwWM4la&Ct08tbz{%(ZM|3}=71fVoK#u)h!KVW%##R0& zkND&BOs$q5vO+ZBMMNDq*^wf3()dRHc^}Y@OgJrY#Zs7v zpl;Dw0%ltdqjK?00srQMGnDnosqJ@|g)x9mZrslTULGcWE@4QOWq$eqOs5oXKlpH4 zzF!|Hk!X2)cFCLH-qQ`V^MYpEZlE3pj0opQuURZD!57mQey8{|DQc<`VeGs{#Qk*y zG_!IjmU&c+m@PQ193b`-#Tex%w&3X6S>)39VkJLp)&?fXOYC^IKQU4iLr5ouoQJ2GP$i@7<{L0Pq=0%6;2* zaTCck&sv2pXB)zFatJNLIO=$L0<3_DTXuJXuX*~91c>EXP0xwfFOd14F-Rxkqx6Mj z0c2a_sgs#EZ4fs+>-|koP|i(~>MWYkyDRmq0m)DSFNQpWNx^)|LKqo@)Bz}0v`zRC zYPnm%UkXBhh=;pIc)H0Gnb>22^A_f5hsB+#C#6LR?RO;ezI= zbpuoh?&MLIPC5g`bL7~59+8kgr54ZODM%W%s!Fb~W!lTl{);&3G!9>XOXnzo9ztrq zW&?sMAh;>oD(W)`gC9KCTrNQZ6%_Lz=LI3fgdUX_5fLX&9BNM#3F(!?krzp54uKn0 zLe~z-#-eqPDuZ&y$j*XLqD+FdD}$$E9jq77HWVBh0s%(;_emTmvGh?_@jE!JNwVNm zfi-$)V*&_xL+@@Pqj)JB+_a(@wZR4Z6IHZ<6v)U}!Kq5Ky4G|osoiy?|N@st^g=TO#9JBD@J6={8BZvKi^NW>Mq^9E0PQ0P5 z>;|5SF1Tjcs!cCVT-Y|GD#Zcy1qPvX!{?luGYt12ZQHa~+RY^EK!9X9u+lq7r&9)O zTXlv82*7_?rMg>qFzfNsBsSWg=6h}sMGink2~#(Slkf8s!+Y`B)#n^H=`Q+vg=?r( zHDC=i^Gr<$r~A0HfA;*TC4+M3!Qn8-1^&SWlLPX-fozn1n!;b~Axl-Mha?r8{haxSMTr6;3p#2a+x zbMX}FYPANNB9~K^r5V6{%B+H2-b1n4QCwp*0C+sl%rpG2*k+iYj_@i7l0M%2u7y+l&g^KE&Ox@liKh7CY|Oc zVKkVXnni@;fI-6F@KlmjEyxb_o^Y_K8c1MRl)qH1qEQb$tek4b>+j#tSXw|}gqJ1E zj&Cg73xN#?#A9RH$K|o6l1XHW-KRQHun&NtctuO68&^xj52j!Hton0WyWP+F1bJJKP2F&Ab5-)<5;1H z`EFZbcuT z&JR64l}^~_6j96ZILw<_?GMn`5RQTu`Jl)X1UIaCaHCo?W#~sW+1o-fJFP3$KsV;N zXO7bo;@pt?NEy{chD??7oaM6C^toZ-!Y=a$DcER!!D`#>*Nnd34aL+PTzo@#IHPQW z+V|r>m{W#kUouW#)gjV|_*n1l#oPH$`}+nqLFjed#YHIf1H2EeU(e=$=O)yeMqgX> zaj{xvU)+xO%?(`1P#s=id@c=3{SPq>btzCt`&JQ7ZSsS$2>(sci6Jw>vt9Ar^8?z1 z{w5`mq-MCI!6Ze#LMjOU^nPeRxoYV&FSLi9V*@% zPz%Tb`?rXe$MZKM{G_yvn_uhQw9UrK`AwY2qMQIR!Jls(t&Bluz>gI$R(gv7d=FEW zAd?-Pk&j^>@L4$a0RIKHPA!k(&|;7fNP-lKc}o%7@xJC1)5s4P?*o_tZiHJbTtj_p zRb+Um8kP`qj>ESv07B%aXnns6lXx>E1gYCQ9tIRQo^7J%!jJ9JHAPRl2c&8{XOdf9 z!wBbp09rC?jkJ+QLAm#;U2GY7`F8=qM9qYoqP`IT$D`r9Y8*z6o0U?23fSVJfi~-3 z$4>#eRcD(L&GX}+@B(CH279LIs62VcYJ(@RZ^tF{56;KZjkpa*d!yGz>G}Q8(V#@j zy#2Txgq7`uXm#K;C9NZ~}&KC}+PY&Ca-Xf-VEgfTjgKi^H=eyjd)Sigofi~lY*@LG7%125vc|B7@| zG&#;$c6AXT&{$)+T4dWQ^@uj!4!AQI6oY$XL$X;IWW-YAk{twwV9V{l5@qjj7~;QK z*l@<=?Wo4}et9f2wm=&q!@vqbVpdeN4mF6U_mz_C1&EPfwFdi1XMBc7*ns;_)mI1p z*CKL4EoZDYO$ILF&6w{A#s9%Lc68MYW>B4Wv}r^#gVd(g^jv?lwd)9ysp=#<+b~q{ zNcvaJeB{!$`<2h*+%7mo=W3Z&j@=h~NX0%>%`6NYh}^`RI?{8mWGS26w>m!`j2vhP z43rd0YV@3XZIFRPI)%+E=tcJ?5zw0bO|Z>CA@o~bvOJn(dW&j)fSrSD6b3UsbI9ro0BzY^ zlgZOEM4UQ5ze3Vv=S#CiKQs&w8_R%*#HoU<+?vRV`u>$TOqOdtN`iJby?qa4eP;b- zgS9OEoK+U7O+hl<&HVV?U|}bLXpFoM2?jbc(sdETKo-p01}+9JvOeM3w=R6&!z3nj zvQfbp86R%B6~G3AetH$fB9@iITW)QV22i(VSqz%g7Ox3j#G+?;+WU#%?29KHRPzaB zT5+GV3?0>gEbj01VO|dx7Z;ZD2RJVC#Mu365c#tI>;v8Oy#EAj{MEkK3&UYzfO0{% z4bS#s?{JB}aBf=$Tw06~c_T1IFPTPw8}!H?rZXLS4!=dGNA3~L17c-4g$HS4aYDW3 z!(OaD8U!_AGGkp}deW#BK(?LnPzE5m#(_<2Eb1%g^?m*Qz43mf48&>R2|Gi%KTv%T z69qh|-I~3(!9g_2^i-2gTDJDVf~%t}+dhK{MMzLBabk4QsFW^ltmZr(dKp^1<8_i6 z%|1Q+H9^856*@gAF_eFq-%LqcH>4 zo>wpOqy2bE+%`6g?K$%j95j8})LOBnU@!HZ$awtz2j67e#ubD3oL3Z+D5?Mu+GL2f z=%i&dIwU^5y~ZG*Ot!FE&{ktAjUIPP-1tjviRN~Ni*rPTEahPNOu;k`w@pf*c$P?Z`-|7HO%)(9lZ(_RVRS4wY&(EB z-Y>LYLpfVqY@}MsgVf(n1NveDn`W%|Y(#*QP~0j^N!pjgyEV5z*eQcKPV_J~oLg~< z>0Z=7-iQ4?fc1Llg+S(a2RE1?UsBhcTb~PF)o;O1nf}WWBlT{6T6(9%SL>*lY6lh8 z$uU!Z3Np`&=!J|yE=l4PSK;DK`Lv*pB_1xT+(Y#_r!w#mO|ves0&w~>V^*)PyUea~ zg@&hAf+V=sJwYJn@Y4v;CZ2!ijqsnX-E_Hb#^LD7tBSn?xqLQwcQ(i6!(5l{-D$O? z{1gcex9-Jvn5$0E2_OM06vvs$>{h9qEams86>1bakmn1RMb_rPCeGFe8L3=sHPh;!ca^c?|0jwR4W z?$$(|r^k*k3dQi?5qTd15KJ!6Hi1X7`eULcO0tf4H(l0I5_a&4K6U!Z80ZA`bGF3r>H67Gu3h$@tu>7=cN z@$t&Yp$a=|MAc})A`if1iK`zc*efyiRtTWWXVr5XseFer?LSE&yp>n_g@$i$t_wf} zeb1n+Q-b8BGk@W5?hL&(j;~2oxm58iC~AZ!c_eT)Z+fT2mH$=JlmRZA0feWip#%~! z%urG>2A~zEu-rg2Ry|jHMp8iHmc-KwwEfG}m!P|CD7jW6zG^ZCyL0i|*FN0vr<~R4 zb^3c}RJARpv;gx?FsLR8JTUDDOl9XZxg1W1c&b9M(NUK(sC|oTjUT=RWG8V_guI|4 z0ISzknn@JG2`E`z(*u}vz_e@xVZI>atEBwpNR(kLQcqg%8D-{Lq{s zU3~J$@MoN54nRt)Ma~cE(;6RV;_OVS!}_UQwv3~0nGA9K zEL`GOP0Llt`tO69;Qd*?N?Du0D?q|j#&{^v$uz{8^u{e2?3ox&GC>UVy}Xjs0fgkW zLvbTKWdv@m5_-h#Znq-DNoGx_{o`#X%B(*n_*xLViD=!dLd5zda zKz;tLAC%SBi@Pq9o4>B81T4gPi+bpBA!;JBuoH98=0yd}MJs+_CHK}Qg<~-}TAuhV za&v6v)x#!;U*C%$KsNm5o^dh4wLN(ZHJlh^Ti=F)6rW+1LO=wP+5)MN%nck^`o_S& z0u&OrsFGF%&uALEmE8bd=a)jHa)CAN;)4orL3u3TMG}__h995mF$+CvXT(NX zX3)VOChnL_(6`w+3*D3*BX+y|9)NoQy*aI_C#|ou2HHdJc2=OgJ5#{KRko%~sZUsB z5Zb!9Yc~`S`A;F9ew3VZ;|+{SAk1L*pgX3$zMjHW&pAFCX~^LifGm#ymBax5G>{fr zv1Us9g=bvFV0o-?6YHdM{-Ql@1 zeor~}Cn5L>0^|U->gId(G*aLm#+g*j1?(A4?u&e!RzWBAdsjYxH~Xyer@^>3-{(gg zq_~!uGx>rAoS%+t5>BaXg0P->bf;@amr9k2gw*jv)#lK_TA=$_7^ACZ-W^+K&|azP2w+oH+f(ZU zhW|`$eU=%IAD(Z!Wov#$USNq6y(i~7DnZIfub9xcrGtyoN3R;59s8bO8tCTLq(IS5 z8tS1n-Q?CU|+BSSV|p@H)jzU9`*GR;U}WsPU;s= zL&U}$;QbeCgVy*%UxD+ubC1FY;e@Y6-T_R-GTF4kN$SMn+#s|1awbM}ii<`HL6KF8 z0Ej5t@+zfs_xdA#a1$bQ8(X*-cCZ|_T3m3ibwkLK%TdGc__h?V<>FUW8QY}$WXE{g4w!_UuxRW`Y_`CMU53PB+#;0+Ula2 zILEbgDc_;56zk2Z(xFc*CP_V#gGrGV^br-Y38)*@KfR>}G?vM7S0KOG2g#kq%Y<@V zX%k*KxEAWZmAU^)tlJfGtbPjYvz2eLP`~BRg{sy5)$(9kl-JGIrbp9VbgRj`N89`& z3pm5Xui1YS_51PmVs((anGspk#3=K&-D!c$a{BD@Z z8a`kh_&(x6HEV2xdSdBPI2DxKqhEwe>ySQg5%Ba17t#<(7cJ$vhsO8sr?&G?_MSu2 zL4TDulAB~~BHIRYrfi6A5@!NM-ib1DtVGy?=Sl}9Aq$wSa3XITQ>lj1&}u#}#8NtB zK;5QJInpK{>dbwvvwLLW&}@z@ddGvtbyF=wvc*@0fQg-|c}Vi8!5a+C0h13~&%)95 zm;8`90P2wC?8=$cgWFMF1?`T&9(riuxK({&RLr$70u8NPMYT&x&PZKsZ>iYrByIWY zO*M823&>6VyD8Fd^?nZd`$@RA|BIv$s`=5wp@9Xa%C(L9a)tHbD6Zv1%;rOUfopqj z|0;Ton||05)%6H;yw?X}2r451t|%ALF3ejE6x&y>yMG7A>6M&U-}|$Eq`(tVmM)8z zFr@@qi1SpSDIWml^N>0l+|!e|k{|BmDYv|~{Oql8r*7&D{@z>YeI`2`vP`{Nj!JaG z?U{U!m8@h@v89)ZMiiANf=WHM-w$8#FE_wQulNV~&8v16g{55YWl8);c~$NY=2Wm2Py8oV3fbl>;6bYrDPYhMI~D3r+SHHC{>FvT@2hj3Ryx%e zpgrUjM6q1E;3sVB7SP39AIfZ?653Lr!Mp1moC!K`U=8S=u6^7O2d%O_`#>%B8#w4i zybA*^apqg+9jUeMGR#vA@%}P?lBPo$w>KnCt)s?wSvADkC`Mx>_a?M0c$WOB@l_&fy}vQ_Sx9g-Yj1 z?i51wWnk}(15Qnv*~C(rvfGa!K1YK9AHAYODrQqMVxUT}r(1>CdK%onN>*5WCA>r> zvyi{Cvw?{e4&0o=yeje0u`s^lE*y#fm#x$q@BP~={*hETzFB#HP5+*f=* zJ&}>BCz2DsC|9Jxk80bdS`hgY7Ax!*vc)lGbTGSSCvsiICTOs$(!R$wmau1po4+^O zvroueYcGtj+zG!umq=h6oMyCQ;GyCxo%V7dBM>mkE^jnWE5Jn6(h3xGN-gC)kxgD( zB?z`d&Egm5v-Kw2=EX+K&+1WxqZ=j4(I?|17T2M=7dPv~{v@GPkv;O!wS@8u71!tY z17OwYjO=f@SR$?%>>fcuCH#jGxXeN>M9jdL|Cy07y*>bc%O}E+9m5HwQ9(Y@nmBu} z70doOmENxPl0U*#){f|E@E{Cd6ytFzg&?$a{uOY`x=W|Kp48)NoF4z9g-WmLyHlu( zj}|BkAHcy22@T+YWl%W7)nm#c+|c*Ho1}`fXe|i&Ba(suJA!#PIi(+DN;!LuY-v_M zoSWl%yC0w*4F0S0SnJ7MGQWzjyLu*%8y%S*s{Re@{L;TVW!G=J_S@)c=+J7eG{c9p`2f%N->>pjvO^xMuCD)D=j4LULj2_qJ;F>sPz4yOpBDb zy;{+h@WW7uKoQEmL83*BvAKs=e zxz2)#j3Cmg$w(heW$#0|3M_;X=jW`TF>j-;9s(c7fs|nIKINZN0_!ds(NW)JK_j_ zfZvLm`^%ymf9kN2I)IddVUcoR;A~8C>|jR`?4O%NI~8&(;lUS{II@6U__nbvK9`9g zCNx>RW_giD^tSmcMF6J0wCcf`T*p7$DcA#!$OusRj=)HJ{eN9&_du3=+R3Y&qr zHPid95Inb0AK~^LvapB&#nyo$?Xo$@P)My205}aw@ub=?v=x*X%4DjeGcx2lCLqUe z{;DjQ+$E+uF(YE8DA2a^5X_@qQJ%Wt(>mNHL)0FEFx#qN2nS^g zSyi5tSFo%x0W6#UHjqI{Wf{P^2E__pHf&(@r`J5$^7nOvr2hVAkNlNok>P7d%%z24 zgewQdP#e1Ykm8kSoYQp$0WjwhPW-kSHF67239B9*vRO|M`?MB(q5ljd%p=YWIGm$lC1xJ zU^%zHQ?hx`_wcW;{oFr)kCfJt`PKBp2-BS1pWJDG)<*9D%Q6r!-%QO#lk3K6!pqTc z80QjMxI0^f`&1n9Yf-81ZYJ@=z%>BBJbPiZ<=f zk0KQ;tL55~K@jZ_>`#OW=&El8lrm2i!Q$&o5(z@v@9W%g*`N*R5G5?JPBH|Q3|SO8 zbqiW{gIgCC_XsS!2<@Xw4-eV3GLCkd){SA@vs>IfmasP26I&{!a>ZpcJ{2qWjaSmq z%o8Wm_5`@y)N8ve=R7r;1f7Q@DF6fZVbxe8HUkicY8WdTBPGk^TuKOaR*qbc?V zl=9(4mth4j+x#<4Gq0<$mCM3W+Mj8N$h1UYHYi{q&?kQEQf9zgq*O{Lj5{@0%qQ4T z4cwTq-b7^zpC6fxHLMSNrREsG=WoZPdpenOD#3K~u66K6-58;yEF z2LpgBGOHHH?F9_qh_W0HZH*Ep?B`%_4m!LT2e=c5(~ZbaPKnL1(yPr#1Aa<$HRd8$ zO3X;FG+6eL0K_y!R$@E*VY}nrbL!GUa6^*_E$)~v6o92`$&F3sg6pNzDDVG#GW)7C zl&BD{l%O;;%>Y9gx&<528!+iA-H${Out+GTj64p)L|Ujq7q^tQrVb{*#+GOePw1CR zBU49<2_0_Z8LOQa9DcExlm%XZ#249*r2zV6y)T$pn;zXlXLosTo81F!9|GCRDQ!Cm zbDxZh(>b`~6x`c9yd9*gmJLhJ60|5z-9meq7;;H{v;&#p$dW~acuU^C8F$nsAz+4C zg$a$5p@YppTLws*u)>6!1dgPj_9LgJ_u{j15gQ^q2^DUdlGRzqq4uyIE3{*9)Qt#t) z*#mT_jh$V8vGj&3dq_P^hiFWlc(-7@Wi?q1mKZCG^sDD8raGdsa!O7=x+6!r?JM_4 zTUuCc*e5(OoQg%6i~UNdB(N0pEYsns*8^(e`@cVaRj5z{OqoMrB7IaV z!+q;x?mZCZnkBGBq+4OSo(MX#+bsYL8i2~e&oRMG2U8OZA+Y+w6QSuQ^7|_i_o2sJ z6}ke6pmDV-ZVcum@h+8W++UCtF{?XP>*o9zIf9E%@v|qEEZ3|9p5{K!Z1mL)f_HbNEmrbu_RGUaIO8`Y zXpzt(iBiR8rc4a5GWQi$NPoXkrEk+#6VyNQWRF9%xVh<`kMnmAyfcxPD zB$;Ko$wl~WR>JZpSV}tAC$!g&6qH*1JCRECAsvv)+Px1Kc*OLu_55?_ctpOpNr5kc z>h70=WqqRh0AmEv2Igc9WCjl~)bm^xHyIqiwDa5owX{D;Hio@TIQtffDOGl7n#v3@QkTfRkwBK4JepU5 zkDQtZ525XevfL{S{K;hU9}yK2=dl5No*PND&G;yR$dmlHE#6iZ{C!iBGZtEfRE}Vt zE502BN6u-2dEJcPhOgA-ibsC%$2nGkk(F2KxYG zN;g~%-7-hU&&M)LxmImGICFY51j!(83|p0hp5!+NcuBbtBwtrA)mA25r7qp5#2}Qn zR2xgw6gSM96w+S^V7eAMRJ+qvA{J5!=srG(fn)rA<9-feFRXVA&|!qi&+`hjF-0rp zs0U*p0={Mz=Nu$CV)^nU{_gkB*E+9C8{&zv5w({dz1*KztJnjQ^QD?o$a|SHS39VHw&vA?_Yg;d70FmG;`KG(e(s`^ zH}z8CAi)^n#3X>Hv?$*~IG9cv^Cn{Fc17Jboat7wEE^wmHU&yn0PClbdmQ)n8@?&g z20nKCjkKr35^t&-HANf%2ixUp1gmA8w<*AjK_^^>=a1+UlO}Zf%P-zxRSw z+x;ado)Jw%`VuSlyFT^J>FT6*kZwfAGhrGj(m1XDB97PiHclPt0)fITpaWRz| z+NkiHYRXY>>}X5{Tx)cr5i*9OyEJ}lia8Q7zd}B&Z;ev(Z2ra54O{N!n~4>?9a!oI z4xGQ_M~A12RL9|ou3=7Fa0Xrf&H8}o9YE7G(0}TlHsUp6=c$zj+)J0_R{nb6c@}SL<>N4Pr%+9^CFSO0nmwMg7Gx) zC^Q%e;@4tuw4q&TfVzc4Pn|S%q$KBAl}pCDpLBhWavz9_pU65pb<_<;kKbmWgPA_C zPd)_%N8JQ40_EO5QliKS#vtbxup4!w3S<2iO5Rxn9uXtMv!ajvXI%O=2C?-^V;+!HF6Yn66rZl#`t+k-DtOoA3 z{-jXUP%k_ZY&bsl>@YG`X~EI)6uE;$8pW3PFAqki4x}j0iVaUJa(R1aJMb)?r(;ZG zeuu7u6AglI=5%;BD9i4E13zPkZuso+f_`*O8IjPYfW^5IdQl3rF3Hqd0*V#{cC;bI z?&>8m0X(>myC-6|9<(OMkV;%6cI=6;FCjiBUA!#$HzAvxu~^s>-4k<+ky9H4h@t1APba^K(o1fqoq}e#%7yyy;vpe3 zH6epN*O7TNLG0nTpXon+lA|Cfl}XNH46SbGSOO^a?Wt z5E?e=+7l;Q$6#`4EjdEfl4fH6UbE3%p4Ob%DaE_Pl%Ou?N~7Y%`D_VO@1ZL!8G=CY zPg-KSu{@KLc)vvT|1!X&I7zgL+iZ?k{bRb%i5UXBaznSA0;Gd6JP8ou*K+H1f~x~Q-FrW@%y{njS*SskBkc1CQ=7!k5CtI9E3QF4e8lDBwf zR};;cBmRe+E}85L17$5=IFzDTVUw**_Z^s_DRGP9lLn2*t0bPTQ?$+M=Uu5IIxGsQ z$A4;>>l5bEQljaLka{GoU9+RVWkR@@<6fNkO%3CUq`1W_b_y~~-eN3v=lWxQsv}%u zglwVMx2uW17EtcY_D6r0|G5?g{)Z|?UjK*XdHu$0YWo+k;O1h%&gygvY!U}E={g)t ztNNx8-RdD`J2y@{_tDTjHu{Wbwm**r9V3P^znnNSs=pz$|v%ds?rw6J1EE_qLA%2m-3_`nB#0K6j>3Fk?8#Y1v zi4PlPOPG>rHmSY#2%$Py6u+DXI$bluk6{Xye>GA6R1?+^J^N z3~ihj=g;Xn_^6NY_v}%!s39@@?;ro(q2Dj;A1z;DeXhXcf(D9ccELH*COyRD4FIBL z*ef}dCC&(EN3StpFzx>HZTurhp$s5Ehrw}S>;C}>K=!{1@5KU%`DL2cK1K~T)RRQ* zwTTx&K%s;?CRe{HHx3mXq za!^fPfljv1UR86_1OrpZVNCuGYQCqB8>mhsZ%W<+yhJOo;n)!IftxJ#b(E2Y%aUbZ zrOTFV%3qn9>{;K&Akpg9MS~2Tu1_wtVbE=I*`c6^3Gnf5%a7E7N9au0%Igu4%|`Hr z%1uGJV2VO<0QS8ej05*Z+o7pS3I&-2lOum}MmusRr4l;fouS)ysAjtW>a3+ zq1!zJKwR0)*< zZ6oPLPK7KgC3Jf3`(b?iO1mJm2$NP|4)P*w{rjW?Z5vO@!!>2 z`zrk3lP9aw_`l_~`VUF|?}r~6-}t}3<3HS66XDlY6v%Q;(^ld>d>Jy0SQt{<)S+jy z!j#M4Po(SvrK>8m0LKe)Bo`)Cl+Gs?7q^-+F-ug%I3~#~WK*bJ6%uczgMrx0U6CTT zv=_|<&c$Q^6C8!`7S>1cc+Q@QrM#7s!4%PHqYPRIkT5%1gUZW06&d3H$ohAoN8#ny zs^fw4-*RJR8Q1>`Y|E%-D04cJ0EzW5*iwo(GU$56!pQPnKtKZiD-?aXtFy}}KIIzt%$u&+VO20BhQ$q~R%Ki}8&n3ARz;KR` znXE$ixXixJ@$95bLZlYt2^$=tsE2AvBAZg@R3|{ToxxbpT6vOARdo_zvN{n~ziA^DWicsM)%jt8EHn6jC^9Gp!KDh;nU_aKXtpCR<|pYyXhK3 zXS8WmzUF^4AnfU9-0>$thXRdkT5V4bvK@Znc=uAaW%qzMyWu#%;M%n-U}k(a2rgrXUZke`z|LURzmssF{RAEt;uT zKTx}K2CfSUZR%@z*12eLlI>ol<$ZltFn=kn|!yV!%YBAp~p;g1aq7i zigi(}E}>5%sWTPfmnxxFggUtE{HVsq!)fUzSt43WO6Y2pq$hqFx&5QE^)&jV+NgXu z?H{oleU19686V#?Pg}s7Z|eFNBE;93)Q)cEQfonHl2OaeJg^A#=bfERu@oB>!)G|O zAGrJM(7!rr~KJ&Z6VbhXuLHJMY!M_M<$gh@P93tPToWC|-$wk3+R z>`SURQ-O3Y#xRu))_JlSXLf*xOBKusaz-mWJMX&b*i7Y3X5E3Ag}Dl%%zB!WS(((y zO>_tEUU+FR05x(NGtQbVq^#X8ZL8e~IT!+d7S^H)A^bEP_guevxz+Y!X#@8>k>~`0 z#~FvV>lI6P1g~FgTd$nKfaHsVUK=PgP^){rV>8NNrIHdb!7Ey{e0;&p6j5s<1D;>2 zHBM&FH%2Wr!}=mNnmT+VN+_$QYcg`P727T0(}fQk74*xbQL25w6$YwVw$P$wvw^tn zA(>XWtW>k;qKr0B4ERDJVSRrfigr-?^43iwnLFfMrc27MdLSjq{Fh^eJV4as?^OnZ z9G^6gfH-vI_R~3QzB~I9C{o#1l_rrTFLP{)2xSaAF!>d6NYN=poobP5IRzuimGm-5 zgROf$34wfa=#-G%QTNLXP{O25B7mgH?e;4)TAAiClX1=qjcJYneVp#M1 ziX9G-_2Cy($#Qzp`={W1joyf}frMHqw|K`bGWTIRu)?T}oF3!wVtg(avoW5AZz|f; z!c5>k6)^EXmtJ>KVRI40Rw*7P`B+P|$p6G~6l3cns%k374^SE$rAVXxcjMJFov-8MS9dgDMM61Cs*>)aq?~h5+e_H(G;UF!78i@G8#e8|*i>H#RQb4$cSt z>PKA0sWlA%PcS`t@D(#{*1mq-q*G^XMSa}etmdiDDJkF$%@;b}iE7Se@| z{l`_f+zpnv@^!_Q!BTHmGtob6P^E9(3f_X#w8Z6noCii@o`3Xbp)MR@#hnVzS%!MbZFDg56=H^AOew2 z*jTfVTez?R!i^JDmhaitVC^eAgX1^XM%&&Qo*kUO-uW8;K6rOX|AlSiw9_FSNS+?^Itvr~=Hanb#?N<$Lp`8`IA`d+`GJ z_WLbMD!1?+=8wi`J)1)o#N}pSL|8bvW%2mnKK{*k6&VM-QvgrjHRj9Z-Fij8qV(x2 zcxVlJ496_1Af{6Vs$*{gCprTfPqxf896R3)qJW7E3EHm#9J2(%fG1WyWBJIa@vvM6 z^T#BBn6+WoI9)I~ib8KOwv4qa!WY|(ajvuRU0(L^1aGR;;{QV&aCBH{rc5wf=opAL zk#kO4c7A$#5ew%o7Z{7|ygND@qI^8V_l}Q-7uo*ZkNbE3aPa2f{qaT8&oPAJ<6`>M zw%LOWfP0gfpM4b`(^ui+p;}iYaMx9~j5ix?*1l}=+nf8p?AMZCPn*}(oFJtO2O(lj zI!U*wAoKJocCJ+B`3syO@cY|&!ch@h;HR21{0#+jEb{H_N!26a5FHQX3~JjEe`E}b zUf}$pKfj$l5h&sg{iSA3^n!vnZTs7KlT-p&;|1<`qd=d}HX7=2ZTa1e%6b7RNc@u) zv9n#tjWEe%? zwsQhCEZAFtjv+cJ_{+&U%2x0UhU1|-^$zFrp$E?Hcc3m(^YHR)k2ISWEshSzxZ0fF z7XiC7ma9jceh!b1@#LLPvoRdjgVDpF4z5EOa8n1Sfnt=Lq=DK%6t&I6m43>^E5#w` zm3(JlPsF0fcnJ~VRMt?MW%^*lH5&f|G2F=qktm6@EpJlEJ$)}a=ou&Hd-tEPt>W_- zW?$%)S+Jb5HPz1`;;fm7nk{kaB35_&_(2`R`#d2;vyDr61B3Fx`mY*NxN_iQefspp#za=2A{ z28XHPIl6eDJNTWewI(Z)R>q942y;w7r;0=WXPB{}{#$q!+g0+|F!Yo7X3H4b=kir{Xc&U4<@hxI34k;(Kx!IRHzw!!>}Z_^e= zx4~-pg6cea^dSj!b~Ud{ZQsy)4wrO<=hvjw=GSJE#P_>qkFe`&IIX)<;fdvdZ*ZO+ zUSK{URwC7=o;OSq7}a{sg}X6hN5)pSPNzs(QXPt@18t}+R<}~~`@9vk(bFDpD81gH zf&!G10!*??rnCSbZ$Blijn3SA!bA;8mtt0xsvo$9(K4ZH;S%Z)U6Q8VjV|qGuMNFd zsZNsDC&}xR_;r?zMbbZ}xPQ!~e`>zjPrbgEdWAQ*=9AxCPs zeejO4iO)Bg8VqAgbTB=Os(=O2%mN+fO7ytNRywaH{)fPYR2WgFNf2i|>^FY#g@GCM z@Zd(wV+o5>>>VY9ESrDuXe8|AAZ?RUt`#01BrWOzkvP+Gxm4e|3#V>=zn&r z)oIZoi-7)Tw|?yZ`rhk*vC@Z|HrF@vM{c;U1B~W@XzYJ7hfj1o`((x)7sloY4*nQN zk?txb z`OFAs_m~qETu{SfP&%=C;Hn2#1rHO3fd)3G;|9|uHE^)W7`m5KGud@QpABdOjkw-* zSOT3*A6b)G7FKj%U}->Nv^SbJ>~VvP4KEz$`2pct8yo0&fg_?98@LN5Vao`gZMdsd zuoo%M+{@DVWHd(Lhx(NfX-olK&hn=>Jl` zsg?`>Ig^_p++7yy$4aI|3{Z^do4gi8RttY7sRjLSM_oij+7gf^jafiRHzq3qbYW@Bm*MIFI!Q;ALAo*TcW9;9|c z#b$T%CTHe1L#%Iy*jdPrdHDbB{O^w&6L0ms{6BW9-7ffltRMcLf2040&Rh>Hz7>|} z;V3KLcVRt-K0ur83(q0#KzPVge;Q@-f{+YiIC*Qxw8uzF~Yz5#j zXDP|Bh78AzzAZ?pxL1!Vj}Xif_k23-L%Q_DNdbk>qTSdYo%R_|@W~Te<Iah7Eeg{TvncUXCWSuoH(1 zKl?g!MMMeprm*x>|M|h4-)#Ys+L=bWLD3s%debY&HA#CIYR?|@tLd`S4WN&U z1wlU|eV(liYP4^#r+i-odMKbq8Sg~KHSyA|KMy=_QGZEo%zDj79|c^q`q1vdjd%Zm z_V1-`#3?qTQ|_y5XC`}GrLXVQa9<`jVPiH@E>6%RGo}0k3{OL`mE2EoEZe{W?i#-u z;IWB*p~s9d1S>wxNTDz7x0HV`21lLdGuOaVTt=h85`?i@F^@vks3NOU*7?iCItPBI zKGZbZalajMKIH>i+#C4dtI!RE$NnuA?3K;^TD0Fq;Pv578t%W@!wyKfeXjm-^#Qh= z?x(#pC^KwJBmYsYnY&}`%Dw9=0PHTWKkOyWLr5_>I6sf%E%Fvta^FS2YOwq0SYob? zlm`hqW#{@U8onW3Dst|-=7=~-c(azb+C8RNI%uKy2@C{|eEgJv-Is&(KJ^V!>ZO`)J#u&uhgeZ2kKSS#NN+UYr_uoVRZ?!BdS^u?KO^E+*wtt-e@?HL@ zEISy%1RHc&Le@aAz0WW!gUh4g#s2=A_b0F6?1%jgK)gOWdpkIHCLVL?!Pi&#BNFJv zrQ=Q}&Uila7NPU{Kv1fsh6d4zZlXV14#ne(A(Pf8I&e5t1I8Av~ z&9EdRi*9;EtYl*ywR#7YDV z6Sk_m$gm{>HeN0kaJYjKYss*yM?P0MvxyihQDk(Q2x292MXe@7i)~A>;wdhTmB^J& zk3p{UY62Q6p(LOJF6P+&1M{e>7VvHFNnOk8qFLKrWvDCWhPc zqS+xOaw%ym!~>MKdoR3Q%F0!Uhe|m|Y)^|7D(7g8G?iGX*@aj|H$7;&sY9gQgl1~; zITdt2gj)(71PS1GA-8lpl77}1C5V;uGZpJQEw(Mgvi;9WtYjGQrP7?jc4gRwce4y< zvY{5S68Z9j5awX%^p7TMvjkQ!{UcT)UtrKMb<062!g7fms}W73D<49F5;IKKmKUv? zCAuvImT4f;Hh0@{tZt<57Da1#`uevRuNyYIU3uBQrtof0UAD^mgRYIHylmaD+f#^` z%4SBaqMsi$ZSJ)cZN6QH6G%X%!pr(v|3wl^UJMwm@o<1o-U3mBD_oQW!L0Ry+ofkjN+QKt&bz_I+tb5{PMH>U zO3*3OsIHREgv^|jk4aGyp4(LD$ZdFQ^EOG*wG7oURWHGp-Uc~c0I}vhO1{~e zRY*18O2~?=bki;&D{`>HWf)ao{<#4kZ<{7+B#^QZb8xErt6{V?&xPrQc68qN)7C zk#I#Pqlv&Bxf!Wvn8NOcWG`~3A*@v^3}-F3+X~BB%dj@lncWJ8wI%(mb5}C3qM!8) zYbh*eosQLRYe!(vwPuTn_qhn}lo||#1k83<`AJGkWnh7xaB)2RWR}seMc!owE}>S7 z+{+AH!bTAImt%Eyw1(p)BGpo`s%LgAojR;s4m3Nqat$K-s-4SLv*!#iPR|D@1hdI! zj&I2)E>1v-&Jd7KT;cu7ncPYuegt0X!?y*vAGkui+36^wBUFkC!)x>nHCPksglkqo z2nUoE!QG}N_D2bp42ci!BGmckO_{@bJ{$S2|L8!_s~jv-G)~{0vFL*3Jc)f8wpe+hTxOORFjffehR(6}l)XxvSOc6eVi{@>KmtEVINYBv} zwKigDLODZ!Ee(w!mL`@{RXVX0O1-L7237IEY6hNPl`q>)Lat=T7WAKXYaZPHc*tEhksEExL^OS%R~ zyQ`Vksg2-`#a03lctZxSBMU(XW`X}rIRUiRlnXCFz?55SnI)&h;>!^rVgiRHy*i|0 z=@-24cwoVVPdc`;bgf&6$b#=;<`qrdAOW|9N@dKz0+Bq03=uJnv`cO#8+fl1xfL|8hQC4g78AXpAFuzU@HiLRfLt0p29LwRh)r4(#rFSN5i~O z@QEPCkmGfXWB8u7d>P}|_O_;!c^C$(3CFSGXv3d=KRPknDHg^g)a<7uG^3r0hn67L zkheeIf8zSv8sSkhz>1>`3+>N4FT>gR4wo~+JPCz%$iaa(_C?c_)$HiONy%9PR#WbK zF`bp`yZ4IieNDB~Pf5U%ZL<#NfeHKE9F__~6h=hBrYxu>t;)Nj5v28S!<+-h5^c3+ z3YlIZv_yNYIasHTTY{*<7_3tUE!|G-z+dqitiVT@{!}betP2j$&y+MW(qal#K~CZ( zf~$6QSfU_AK^4F=iqlr^d$-JP>1M1KB26JpL)i?d0_ZE^X7r@Z;KfJXDf|X3LHMEy zPx~T=H>G%9{}WX=2qG9o?UyMZmS8ixs0+|rz4RwVyj=<(g!Fs9DXuwKf@KmBJ`QyP z9;QUeBIUn^PYHohwhqd#Ax+|b26}T*BrVdBjbnK@dMAY+MoA*$k>mO|qOR3%Zsi{}gmshL?N_fOY3%=RiG=Sr(DvQ_dtdG`m3vkrX%;$9PLFN{ogI zo}(cZCC&<&m(H?meKYvwzV)c(qjJt$wmi2L?L6x>pJ_Dc|G%L!z0+We~PDLSiN1$Hv~z zepS^isr3XqkDa@XcPD_ltGc>gUDe&{&YS$8`EAq1oC))A*YRd4T}bn~gXrjq2NU9Z zA)f6HwebyZL~(TyTGyNDZuc0dIPIMbPL8|3<{^uQ6U|iro4`ek4G|54jA<<6O6qhP zA|T4tM*vC;LWHr6G4bG^BfjexfM3h-2s`Mt zJKgZS0CQ#uH<3=ltBpl-2{%J`KAWX&$gjW3oPHt3kEUbHHEyzam$q4Xf5|wZ{wi

Tb{-DNJw3E}4&&Z7Owc}E!3GZ*B1d-o4PND0>JJNbuwf~&};yuP#GKX#STF%1LTi(e#L@)i|t`Im^+fZcgf)n)` z8;jgi&ZI$OBSYIfM;k4A+p3YWf)))5q@~=nQ+C4w&2dJSC_~T6 zzj-chX!TKn$Cz@60^Q3|`swE~`&>YC7d4@DZMe&y@cQfPjNjoA)c6;xo!8D^)~+J; zs@1f5FVAaOk186IlHWVJSDZI2N@|aIb;oW^eoWZ$wL>+e%KsbNLw>Pk32T(2g)$TU zXOB!bU2N#D?B)3*JNxUod$C?RKRX}4JijQvgv#fiY!=0JhJ+H@2ufjGe>^#Jm0g1ig07#SarOFy-J6Y~ePzNtIua(%# zatY_;jS(yVsWh@J*TXM!3&!*Z-rX`QaUF+(m}UnpN-7pQ8d=q;cTu_W8*);WNb2TL zbn>zASm1XJMT8)Ld|yRP&{f&K`0yzm*a*_&SMZe1KR=v5K2#o*hZhg$)&shr2lOuw z=cR}9a=BJvvSi8OdHQrW(hxpD)lVK7_Cg z($P`$A&O9!eFg`gX^w6Qr%aE7i^z!BQoxFs!}RgR?ThpUA@P!-mo+6`PGU{alCUpA zfqD%nl2!2jGl_MT5GD^@$awiLRH&%-r;@XlY$FQ)7~zo+Sz=IGfHK0vb0wXJ0ykdt zmQ8#faY9RS1qiMrwef_8{oj-h*-kD49xr+@1{da z+>3dP#f(fcGj#ZV_dn-$KNdUq@N9YQOMsI2_lVpXS{!7W)qXwSCiF4bPrX0q&MDRh+tx@SrB zIh-p!hjC;(Pwpw*o=EpFKEWUyeIii=6c^jQUi)M5YcuSzu&DpM#-et_y|CwDmED54 z3R8;wrQkFOirs5t;z_Y29Yc|PEb@)$(`XpVBWfuEUBg%SOnjpy`gmeEu4K0&uDnT& zEwLaH)1^j|pNYW7cpxdsAJh6o!q(x4V|pflFiWcixlcS*L-f>P%zrIXFE`cY`>7|Q zrCe1N7*hr~JqLjdsxHJ9bCsbSQme*q`2VCfgJJ%&ZxUy9;TCo9b;- z9D(m{c}Ex@6&H+%kq+nTm^>w=_yZFBDHSmct#4L%bLFR+=w~#{C*Y4*vI?o$Qi`9f zxLEm3{?0{!je8RIGkf(qeLiD>xuwt4DY@QA_Jq5I92JX{KT6?<2sikgy&q@zb7WGK z!9xNmYIwo=o@30IX5BN-(F_xhgSfqhmfRVHv4xmFch_kQ_6J{nBcI>ukCnJT&ibFH zT@J1J^ee6YExP}CV`Hna6<`0`*x3HD{`Vc%|L~A)lU4y~1+cIN^528VW$o4&d)Ir7 zU@eZ}Vq5`lN*`U@GkChPX6$i4$fwicfwjlMs%yqBm4l&|N^92ot8#4zZ$KBOKU7P~ zxu>u@@J?kFn-uFmEBGCA!#~zt>HjhI4?cOaqq^7s_4VvOd;K4LL!H+D>+o%}z72k2 zv#||s;D`Nx7yD;q_U<(;`+v}#d*&L`8CW{M(w%uW8|xmPX{=deHnJ^zF@y0J0K99> zW4Ah^lWd_PB!ap%!aD`w$NRzCokHQt@R;dVJ>1Y$by&5Ed$p^!W!|%Q-S$3vVCNJL zaPLA_*1g?@_yZk`=D51I_cz+cRJ}Bqvi4R109PNgs?Lh;gZk31^zcypTVVy_+B2vn z9x9j_DWJ>M9fei3cmZ@VzHiPpUgR&DYgU zR`sZ#>?cm#&-kID`6!qSoflSCN(^tUsJgsDSp4un#Zaz;E2UEW39;5qSk-WC(Nd&P zpzvY9A>)4&qrlfUExqt1_J6mtt+~^$YyUapKMeodVE>I~^Hp;bexm(1H|sy_|2vKU z!u$)QhQIPxU@?*hHDH?S>eEZz;e~IED;Ssyr4jf6=YHndwM(l8s(G`E8Gr zO)CUjs+W~)O!P29!u@h2$bdc#_emPwnD*_&0Qtx)oJe>sCs7VuW;LGy74SaUcBkDR zG-VVc&GqCiz|UyoqpZerAbkQxNdkJEhK$4+H6$GHE84h|)p#bH-?Y<6wtci8>H2is zlyJbWXxr1Qwlm@Uwx`Wx+x>U#O&N)Mtw~7W*JiYJH>>q*K)-o+GllI3r`@Cd&Fzf{ z6OEZZ9m{;2j${0vX7N77CnfIq?nPZz14VKI$e88^BmR`_fOXMJ_Ou(k^SXYILnZ96U2Gcc7JvqSyH z@I0OU%FD z&r9%h5XUx$qeLl!LOMI!WUBrTS7nL<4=5L1!)!T0?psroweINb-kyup9uIwYeNEBF09!A* za+N7mPoNo&^&1%#J`*UQ#2D$gi0R&2o_06HSq~za0~$^ipf866EUR+SDQDbwstP<& zF3#wK|9hc?9SjIur_%MHVdBDApWy0H&9Y7V3UuTXzAs3SMf|s@Ua*?yXqIb|fetm# zbBxQmNBjOkb4R)cx{!s)utw&5tjl;?XX4?7uPs6El}I(-xeHVtAyF<+>N`0MXf4#% zT8#bxK}I8jiq>=R`>?t6gDd?4;t`rV0KDOrSE%8O!#drs0?fa)9dq0Q3l+mRo`m3d z^BMW?6kN+Anpq)6GJI9YY`25`6@Z0ve>bu3R~_K=7W!ap$v2>IZdN%$;94 z;NCzJ15e~RmT67FHKTnW9v`ip_D(w8ejjCH>D*PwUWqUnR~GdT_p`9#Y_k};4*Zmx zSuOlOjQ^&e_@N?SC-_@9|6gx58jZyI-`0=$zwZ_Q9sSmS*Y0)q)y~Ng27evyqDTp} zOH*gYRJ#IW38JwUQ??rl?%QMAjq0W0v6*dHp6-Nowp#2jrg6z^x(|(s%jy_jrOQh8 z4E=^?mi_7n7Q`g2l{5AI;NbA$@Ze3i{ZT!Be^fbB@9yr@?(bc-)BAWjIJv;rf}x!M zI;(G8s3(VS0L6+A3>A{V@X&{Zj~E!og>^4ZPP@lY0pCJb-yvZq6fGfTd2|f>?|K~R z>7b$>wNEQpRiIC&Vc74zO9jDJ`!<_sPKDvES}wz5_!zC1TOtIkYcw6cucTb9iw%;<^~ze_P*ZVA3D+o#v!XPkhLA-$^Z>x;wmx5L$TIbFzjBa z{@5`YV(k>N1uPN${2(5v>JHd`_ig+A;Q*J#kiID%u_1dXcp8gF$6;7-(vn9y4D<51860X zR^_lV;JvbO(-0kDE@}=%35>&F{CLPtej3BMt8{z4lU|E;Fe|Z&xXcJG;r=4ugZP9X zdQ}y9$d%0m%Ujv$$f9gyc%$9ncFl$9iKw`-AYWsuu2Ys@4Ra6|N4q>d%b9n+#5zl=8yuAEa9l(R^4kU9*ZjwlIQ z_8)|8i=5DB6^qdTq?JX1)KXe1+tRAO`0kdq% zUnO{vxYAb<*)ciB6Kr3~G{%ODqa@I4UV$g^uBUE_S@^YvVJ%@ID6PN1r~q7?ZNc|{ z0*mo>SD(qqMJi8~C0gN@>kq+G@SpfJ5$OaK_@n?- zC>GIy>=)&zBd9gis8+GaA&Sv(q*w%_EJ9QfQUjWh4M0!pTSW|tLWr5SxCw|}LV(M^ zF9Go8&r&C5%XH#20JyR>b0Gk*D*(VP&Vj37-0^QqZ#B&qaM=VCA!8%E6iV3O3u)Qm2!rMALZ zB_4Pgx{FY6A*iO8K*N*XP~8liV}`u9g0PNWbeYC;=QtY7wYmD)P6hXp0xH9$DP%x3 zaqMZBchmk>;?$M)~GX{4wVoazRJf;{RaFzR6<;? z)a_f`8!Iyb&(MMo9=eK&06rDQ)xW}Lyx}pTB2t65Dl0sTz$@1A)r<;d;I}AT+JXyR z#a*8j2C)eBfj1(OWkg5s{AwOG3MT2VrK;$lu=R>i5X0lRO~d*`H3WbCsk#Um^a~e> zp_^CNz%dmc(!>Dm6%Lk=i5$o02BuJmiv&*ZO)+-hp>RzX_Yk`?+j0#QF6LTvCME7i zq@LQ&7!W~!fi<|7=bnAi$y8{{3wz{~P~ngqENF^pvzcjdf#4Jx(urUZZ9{ZaU?V0I zQ7hLrh)7|0jRqUfr_+02qlfD2b4J#qKEP&Z?P|dLZLqt{%Hj<&`H+5 zZ~|@$?a?r^gltE^fFDl4#3oz=+d~r&V8)oB#M~Vo2a75wE)*7MQtgY6XGt=B9SXEt zREEfyD#NE4)aE-%O%Nh2El%Le4LKQ(qJ;C9n5C8l5^%7I7N3q|mcW5yZ5q)yswOHY z*b#?<(KQ03rGt=F8CI$-aaD11bS3m-LeG5V;pUZ~I%ajyJ~^0)?`uQ-GWlv2civfk zd_q$xRu#A_)lF4=T)m6O0xgOqXtb|!_k?;=nE-u9)czW|VxziIZ7Q z5dLfbs6FVs+vALzYToF&qEvh~Qf(>dAR<9cYdjh)a{DQ=+GGyOQzN|=&(T(jfe2ZR zk7lmFyQJvPxp3+7_e{BVq0T^Tfj6E-wbWlANaspRk|bxin6OgGB@2oA4e_dU67DCQ zO%ioKw0j5bH-|#N(j3>!Y3=Q|2krPgCO)TVYyW+(8=F=NL^SlS4VNb3#M^K)r_9#F zpFYL-u<6ql3V1z^Nxi~(>W!^N`b?ZG>Ls)^s!N;O;cRY(@`gR++zzXy(^C}MUgUFl zq+C?JqJZAbz*1Q?F+rRPTFHYAs7g>i(R{pePqP`EP|0+M_atYR>FIE$h8vQ@ZGnzL z$LUKN&s#OXv~ijVVv0Lbez4y?9@Ht+U`32^VMOd1yhQS&U*oG-9la0}a=kU4Mq&(>}pKWwR+yKs1Z( zu*-W7L#f@u3goz*-U)jfOr`;8%FRgUk22sA)Vu?SrkcwKd^TN1(t+T;=qj zQ+eO-RXQifm0tI-a@aYn^xyR=kXKiF`<3I9|LF~s7&;%r@D8}yQj+5c<(ui_2x{LX zWfaL8GjfIAHu05UpbCt}foKM#3Mz*ggvcI*q){I*P~lO<-AtncyHok}=J2;ScnRb7 zPW30X8gh&J`t!;z+itKK?lb_To@U}I!D@C-Z{j^&T{t`nIzR&yY0&dI`h6mk%fElq za3xKqP`6cBEv&Mx<<8OKV#W%C4T$wpzcMUKqyXH%tQI5)`Au!M`!!3Pu+spRoOJ zdq>)xHj?~oenneh9}o+1_=@p38)9(68yho-WHK*!cm#y4H6Rv&kIm-4Z&hDvUEs_l z%hhEj=;s@U`t(f1=|FrT<4rM0z^1m_tqG_p-j!ViW}Lsft$1BGNCZ_kKx-kQS_-$8NJff2gtyW|=rAy0>6 zkL?BOj{Fp&3P{xBn=9ut>~Drs7Ii3xVvyuAvu*KK5fnu zpyn+`$iYyVM8smEDlf%G0`TA>I{;Kgos@J0kVo;)gcg^M2ewHXF0iiChG2vZKr^1;xRWO%Bk?wf`PVNfR+_d4mp5Tg3dV~U@;6xr?U0HqEZJyD*!61^c9$m`wJkZ ziA#^-wH>8oDO7L=LDbTeazZ_buT8Pa2vtXRSJyXEd&s{BzxPFp{wTPAa_KiI@)SA= z{Yg{nx{m?!Txo6udrTOVo~-~O(o#iQtkC?3ufodd*lIm6yg7eiM9zQg$ZBaP72JM{ zb=kXEaK^!O&$7m6+QW~I#OyBWCEY75k14i!ZR)TT{WyHK7$mx?n6A`6v@YA79x&Nn z)$9dUsl2be`uW5!b*N(N*#4?Ylo=s^`m0gS%+x{1hHHL*L2cO`;KO-e@UJLfw8TN^ z{&Z*rZHl6iNOLz{Cb9u&BbUpmXHDzI^9dc>j_=v}Ms2TdRqO|Vc5RWUS?@^-^tYhR z?OOfyyEof@ZsD=FeEjTV&&%>#TfjtAGSqbW zhWtetI87HXf!fufLh2Vq3_Rv3MsrQngt5l#c(uc~j4c36J;W@_9<#*kFt4PA=*}as zFaT585*XRv0E6`K#qh^+40H^8+@f$1CV?f-GPiSk6?_qwJCn`|zNwe35e@)TQhAE=6>OTYuLqRHUL=tvobiG{8>c z-ECnUiWc|wbZKd;urbXHh~`oi!ydm)h)h;?Q{mppq47p(J=gWdL+FOYoDEOWz-CWS zC0pV=RYa84O-5#C#C-QQ#S!De=8L9fGGdlz03m9DroeXWK2v;a%&Ce2Oih>T^)>O!?-XJ(;rC zyc-eW^dlU8-lMmVXw&@8R(FPUE67K=Um~TD|x6HoarK z`R?L%y^XVzFD4R{ODbEE?IL<_XqjHox1yEk)Yb)toB}-Q|HJVE7j?~06qG(-d+LNR z#{uJ>*9TjUhn=Caj{*SKCR z1Bz3#{>!`SxfVsU+r&hNUK&pq4NmYhzho3)LXLqyS~~gEAKcz!m<7CD69guvXz^Si z6ijFzqoc0W1yoS6gG0p4kED@7bOX=*EmS=v{G{R;mqn0nl!Jtye&d`Y81g8g=R`_X z3S|#G$~LHxVmhN`w_NiLg6P+l%r9+h(Hm8p``FCmKG^*WAD}W`v{*Eq|2GCH@ab^5{0m&ys3(# z@l{5D`KZ(#r8=nW=;%mPs48^AbtoTMoyh~=O#Z>*KTVcn)cr2-C>w3NzI*)F;{I;X z|NC&iocMol;t?Oa;(c{za0`Eg-KX_nu_LG?5c3a0{}C}ozH9uigWdg7fc_8mlKY=G z75{;{sIyPa4)$>OcL{R<)@KkpAB25#xmYUYi@W*aJ~1y$&+3`kVl)4AGJ)a5(?5G? z34?5bil5FiYh$0^J85vM^-K*3Hr8*Xn1DW*zpd)UV*7kMXQ^q7}^F%ufA6L!8&vLYUe!4dS&u=#Q!Wtjoo& zq38l^p7CA}6^1NO2Jzxu5bkcwEwzDb4wegcOw7Cy?lGVi8cZ#iNFNh9X61_zxuh_Jx@S$*O%(J=Y2BXC}~QcR4^$ zg3*!&h=AeXV@T#8Yg@h16upBOmKWutvcPiIJk!~%m^up>+U0a8`^=r9xj!^?bs}1Z zULhEEN`|=d2Ug(05JX@F5kBEj5d;UY&zbg?v*^$ZUM_7(&4Lk}*z^Q?KD@_9spkAX zx1y)UCZmzYVj}?X%s&>TjFpaX{g-uy{r{;eeL3K=A8v3D<{fw2r|+Kcez^TX*nsDI z&6?XhnnpAQhkS%Q^K?O@h=@k*F^jYGX(3S%hJUPq{s4^zmLMqkd8mC_%0flFhU9Ad?NS z8nv65jE`kx@PAJpBc*T#w-n!ez*I(`cOeliGylr*+eXt_q=5;n{OBo|wWjDDmjh{p zTT-h$)hBm|NJiF?3B_;3kaq}p zT5oqu7UM+(@S_BH6`0-Ckn2T^Hu5H>o8r)wzsJ*|Fj^tttW@hEge}DMcRrD`{_ofBA6lAgKQamCtr9Vs zbyF~f&f9vEpFF;=w;N}_k;vjalS5X`W~o(eoAoG2kx2!x`Y#~j<8eO-`lGQu;EF{^ ze^)m_z-lTOe7ovJ92m{yupjn|N3kd| z(;Gq7$e0oI8i~WX3esz**)!{Hn3Iu^B2&Vio;T2?I2x8^3fNY?UW@A!&6G$xjf;95 zAkFm13XQ5_$qF+$XzS-w^DwSYt&-e$ub4fM(Zs!CuYL2 zOb*&KR}d^_Djh17S9GX^RwD3W8)vDnTL0MruzNHARt5lT&;QHC(E49W&i^*@$d8>I z@+bR$M*oY!%$_0b_lDMB@C_KiTKW&&|9(&|?j`iU5&D00)0FZn^s}e!*?_YB#O&wC zrGLv^2-o{94wL^l`!2_H+IiqMzPX#hZ+JV4FJ z!HWnSV<5|6iuPENNpEw zG-==wrRSDqK&dLWpn-v%&c`$~lxR#AZH#y$M@tq;dO02A&3>*ku`p^4TE>x^{@~Wl zA*$fDXCzyrTxd>jL;V%jK<6GkB*zq<580%Tw{sB(mC3$QYq0CP@HSR7R-wU$A(_L2 zd}Ys>9cha?b`clj&7dY6J1;Du^kZAuB`k!Nnt-p-^56g-EZ)5Z?Zdv3U0I!V{ zv4|7;|MBP_{@J6)JX#eQv+?)W|CCF+`$77L{}TG&#Pe*M6qfG1@X4MQ@IIwf3LP3S zF3wmr!^?E~pH|iZif6T`{o;J1ado-OUklZmv zf=VB?e1FmZgpQIN35%}I{P3)~-5+zLEclbAr?$2TO~7>SEz-NSsMB4$+N_;5Fq$&d zb$efD?w zfBN(A3;a2Of4Q#FEo49b-gUdruAb+zAL$R{c`jX`MX`o-4;?zwCE&B&ZZ|!&-P=m{ zqmeGBceUfx))!Pit*Rp1z5jC+q_*4`+}(8dekT{#gLDaSbg$C81;E0_F$PbTBI+9d z_BWwxj?wwh`6hL&lmE+ydx7B8vQN$%&7bq=$xddD>jm~Fp5w-~b7%CIFH=zTa*EOgy%^7$(jymfnI*jl5`%O&GF)A)Zl1OqE#usVJQ~Uq` literal 0 HcmV?d00001 diff --git a/src/script.h b/src/script.h index 1bf820d..53522cf 100644 --- a/src/script.h +++ b/src/script.h @@ -2,9 +2,9 @@ #define SCRIPT_H #include -#include -#include -#include +#include +#include +#include #include #include "stats.h" #include "wrk.h" diff --git a/src/wrk.h b/src/wrk.h index e503676..2c7951c 100644 --- a/src/wrk.h +++ b/src/wrk.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include "stats.h" #include "ae.h"

4H+Zj;Y~`-BI-)Vor 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

>Tb{tq@aOKa6bLEK&ZbFQ%dR8%NI_p5LFm|Fvyj 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�iS!0=eZ-6BFBkM} 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 z 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