diff options
Diffstat (limited to 'src/comp.c')
| -rw-r--r-- | src/comp.c | 68 |
1 files changed, 10 insertions, 58 deletions
diff --git a/src/comp.c b/src/comp.c index 0c78e60fc43..0eec2e5db01 100644 --- a/src/comp.c +++ b/src/comp.c | |||
| @@ -31,7 +31,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | |||
| 31 | #include <libgccjit.h> | 31 | #include <libgccjit.h> |
| 32 | #include <epaths.h> | 32 | #include <epaths.h> |
| 33 | 33 | ||
| 34 | #include "puresize.h" | ||
| 35 | #include "window.h" | 34 | #include "window.h" |
| 36 | #include "dynlib.h" | 35 | #include "dynlib.h" |
| 37 | #include "buffer.h" | 36 | #include "buffer.h" |
| @@ -676,7 +675,6 @@ helper_GET_SYMBOL_WITH_POSITION (Lisp_Object); | |||
| 676 | static void *helper_link_table[] = | 675 | static void *helper_link_table[] = |
| 677 | { wrong_type_argument, | 676 | { wrong_type_argument, |
| 678 | helper_PSEUDOVECTOR_TYPEP_XUNTAG, | 677 | helper_PSEUDOVECTOR_TYPEP_XUNTAG, |
| 679 | pure_write_error, | ||
| 680 | push_handler, | 678 | push_handler, |
| 681 | record_unwind_protect_excursion, | 679 | record_unwind_protect_excursion, |
| 682 | helper_unbind_n, | 680 | helper_unbind_n, |
| @@ -3946,52 +3944,6 @@ static void define_SYMBOL_WITH_POS_SYM (void) | |||
| 3946 | } | 3944 | } |
| 3947 | 3945 | ||
| 3948 | static void | 3946 | static void |
| 3949 | define_CHECK_IMPURE (void) | ||
| 3950 | { | ||
| 3951 | gcc_jit_param *param[] = | ||
| 3952 | { gcc_jit_context_new_param (comp.ctxt, | ||
| 3953 | NULL, | ||
| 3954 | comp.lisp_obj_type, | ||
| 3955 | "obj"), | ||
| 3956 | gcc_jit_context_new_param (comp.ctxt, | ||
| 3957 | NULL, | ||
| 3958 | comp.void_ptr_type, | ||
| 3959 | "ptr") }; | ||
| 3960 | comp.check_impure = | ||
| 3961 | gcc_jit_context_new_function (comp.ctxt, NULL, | ||
| 3962 | GCC_JIT_FUNCTION_INTERNAL, | ||
| 3963 | comp.void_type, | ||
| 3964 | "CHECK_IMPURE", | ||
| 3965 | 2, | ||
| 3966 | param, | ||
| 3967 | 0); | ||
| 3968 | |||
| 3969 | DECL_BLOCK (entry_block, comp.check_impure); | ||
| 3970 | DECL_BLOCK (err_block, comp.check_impure); | ||
| 3971 | DECL_BLOCK (ok_block, comp.check_impure); | ||
| 3972 | |||
| 3973 | comp.block = entry_block; | ||
| 3974 | comp.func = comp.check_impure; | ||
| 3975 | |||
| 3976 | emit_cond_jump (emit_PURE_P (gcc_jit_param_as_rvalue (param[0])), /* FIXME */ | ||
| 3977 | err_block, | ||
| 3978 | ok_block); | ||
| 3979 | gcc_jit_block_end_with_void_return (ok_block, NULL); | ||
| 3980 | |||
| 3981 | gcc_jit_rvalue *pure_write_error_arg = | ||
| 3982 | gcc_jit_param_as_rvalue (param[0]); | ||
| 3983 | |||
| 3984 | comp.block = err_block; | ||
| 3985 | gcc_jit_block_add_eval (comp.block, | ||
| 3986 | NULL, | ||
| 3987 | emit_call (intern_c_string ("pure_write_error"), | ||
| 3988 | comp.void_type, 1,&pure_write_error_arg, | ||
| 3989 | false)); | ||
| 3990 | |||
| 3991 | gcc_jit_block_end_with_void_return (err_block, NULL); | ||
| 3992 | } | ||
| 3993 | |||
| 3994 | static void | ||
| 3995 | define_maybe_gc_or_quit (void) | 3947 | define_maybe_gc_or_quit (void) |
| 3996 | { | 3948 | { |
| 3997 | 3949 | ||
| @@ -5114,10 +5066,10 @@ maybe_defer_native_compilation (Lisp_Object function_name, | |||
| 5114 | 5066 | ||
| 5115 | Lisp_Object src = | 5067 | Lisp_Object src = |
| 5116 | concat2 (CALL1I (file-name-sans-extension, Vload_true_file_name), | 5068 | concat2 (CALL1I (file-name-sans-extension, Vload_true_file_name), |
| 5117 | build_pure_c_string (".el")); | 5069 | build_string (".el")); |
| 5118 | if (NILP (Ffile_exists_p (src))) | 5070 | if (NILP (Ffile_exists_p (src))) |
| 5119 | { | 5071 | { |
| 5120 | src = concat2 (src, build_pure_c_string (".gz")); | 5072 | src = concat2 (src, build_string (".gz")); |
| 5121 | if (NILP (Ffile_exists_p (src))) | 5073 | if (NILP (Ffile_exists_p (src))) |
| 5122 | return; | 5074 | return; |
| 5123 | } | 5075 | } |
| @@ -5690,40 +5642,40 @@ compiled one. */); | |||
| 5690 | Fput (Qnative_compiler_error, Qerror_conditions, | 5642 | Fput (Qnative_compiler_error, Qerror_conditions, |
| 5691 | pure_list (Qnative_compiler_error, Qerror)); | 5643 | pure_list (Qnative_compiler_error, Qerror)); |
| 5692 | Fput (Qnative_compiler_error, Qerror_message, | 5644 | Fput (Qnative_compiler_error, Qerror_message, |
| 5693 | build_pure_c_string ("Native compiler error")); | 5645 | build_string ("Native compiler error")); |
| 5694 | 5646 | ||
| 5695 | DEFSYM (Qnative_ice, "native-ice"); | 5647 | DEFSYM (Qnative_ice, "native-ice"); |
| 5696 | Fput (Qnative_ice, Qerror_conditions, | 5648 | Fput (Qnative_ice, Qerror_conditions, |
| 5697 | pure_list (Qnative_ice, Qnative_compiler_error, Qerror)); | 5649 | pure_list (Qnative_ice, Qnative_compiler_error, Qerror)); |
| 5698 | Fput (Qnative_ice, Qerror_message, | 5650 | Fput (Qnative_ice, Qerror_message, |
| 5699 | build_pure_c_string ("Internal native compiler error")); | 5651 | build_string ("Internal native compiler error")); |
| 5700 | 5652 | ||
| 5701 | /* By the load machinery. */ | 5653 | /* By the load machinery. */ |
| 5702 | DEFSYM (Qnative_lisp_load_failed, "native-lisp-load-failed"); | 5654 | DEFSYM (Qnative_lisp_load_failed, "native-lisp-load-failed"); |
| 5703 | Fput (Qnative_lisp_load_failed, Qerror_conditions, | 5655 | Fput (Qnative_lisp_load_failed, Qerror_conditions, |
| 5704 | pure_list (Qnative_lisp_load_failed, Qerror)); | 5656 | pure_list (Qnative_lisp_load_failed, Qerror)); |
| 5705 | Fput (Qnative_lisp_load_failed, Qerror_message, | 5657 | Fput (Qnative_lisp_load_failed, Qerror_message, |
| 5706 | build_pure_c_string ("Native elisp load failed")); | 5658 | build_string ("Native elisp load failed")); |
| 5707 | 5659 | ||
| 5708 | DEFSYM (Qnative_lisp_wrong_reloc, "native-lisp-wrong-reloc"); | 5660 | DEFSYM (Qnative_lisp_wrong_reloc, "native-lisp-wrong-reloc"); |
| 5709 | Fput (Qnative_lisp_wrong_reloc, Qerror_conditions, | 5661 | Fput (Qnative_lisp_wrong_reloc, Qerror_conditions, |
| 5710 | pure_list (Qnative_lisp_wrong_reloc, Qnative_lisp_load_failed, Qerror)); | 5662 | pure_list (Qnative_lisp_wrong_reloc, Qnative_lisp_load_failed, Qerror)); |
| 5711 | Fput (Qnative_lisp_wrong_reloc, Qerror_message, | 5663 | Fput (Qnative_lisp_wrong_reloc, Qerror_message, |
| 5712 | build_pure_c_string ("Primitive redefined or wrong relocation")); | 5664 | build_string ("Primitive redefined or wrong relocation")); |
| 5713 | 5665 | ||
| 5714 | DEFSYM (Qwrong_register_subr_call, "wrong-register-subr-call"); | 5666 | DEFSYM (Qwrong_register_subr_call, "wrong-register-subr-call"); |
| 5715 | Fput (Qwrong_register_subr_call, Qerror_conditions, | 5667 | Fput (Qwrong_register_subr_call, Qerror_conditions, |
| 5716 | pure_list (Qwrong_register_subr_call, Qnative_lisp_load_failed, Qerror)); | 5668 | pure_list (Qwrong_register_subr_call, Qnative_lisp_load_failed, Qerror)); |
| 5717 | Fput (Qwrong_register_subr_call, Qerror_message, | 5669 | Fput (Qwrong_register_subr_call, Qerror_message, |
| 5718 | build_pure_c_string ("comp--register-subr can only be called during " | 5670 | build_string ("comp--register-subr can only be called during " |
| 5719 | "native lisp load phase.")); | 5671 | "native lisp load phase.")); |
| 5720 | 5672 | ||
| 5721 | DEFSYM (Qnative_lisp_file_inconsistent, "native-lisp-file-inconsistent"); | 5673 | DEFSYM (Qnative_lisp_file_inconsistent, "native-lisp-file-inconsistent"); |
| 5722 | Fput (Qnative_lisp_file_inconsistent, Qerror_conditions, | 5674 | Fput (Qnative_lisp_file_inconsistent, Qerror_conditions, |
| 5723 | pure_list (Qnative_lisp_file_inconsistent, Qnative_lisp_load_failed, Qerror)); | 5675 | pure_list (Qnative_lisp_file_inconsistent, Qnative_lisp_load_failed, Qerror)); |
| 5724 | Fput (Qnative_lisp_file_inconsistent, Qerror_message, | 5676 | Fput (Qnative_lisp_file_inconsistent, Qerror_message, |
| 5725 | build_pure_c_string ("eln file inconsistent with current runtime " | 5677 | build_string ("eln file inconsistent with current runtime " |
| 5726 | "configuration, please recompile")); | 5678 | "configuration, please recompile")); |
| 5727 | 5679 | ||
| 5728 | defsubr (&Scomp__subr_signature); | 5680 | defsubr (&Scomp__subr_signature); |
| 5729 | defsubr (&Scomp_el_to_eln_rel_filename); | 5681 | defsubr (&Scomp_el_to_eln_rel_filename); |