From 77d752107b7dfc49cc6ed042ddb85018fac142e9 Mon Sep 17 00:00:00 2001 From: Jeremy Studer Date: Tue, 14 Aug 2018 16:39:56 -0400 Subject: [PATCH 1/6] Add unshift_* exprjit templates --- src/jit/core_templates.expr | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/jit/core_templates.expr b/src/jit/core_templates.expr index 5ad1698c2b..a8ffdbba50 100644 --- a/src/jit/core_templates.expr +++ b/src/jit/core_templates.expr @@ -987,6 +987,46 @@ (carg $0 ptr) (carg (const ("E MVM_reg_obj) int_sz) int)))) +(template: unshift_i! + (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) + (arglist + (carg (tc) ptr) + (carg (^stable $0) ptr) + (carg $0 ptr) + (carg (^body $0) ptr) + (carg $1 ptr) + (carg (const ("E MVM_reg_int64) int_sz) int)))) + +(template: unshift_n! + (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) + (arglist + (carg (tc) ptr) + (carg (^stable $0) ptr) + (carg $0 ptr) + (carg (^body $0) ptr) + (carg $1 ptr) + (carg (const ("E MVM_reg_num64) int_sz) int)))) + +(template: unshift_s! + (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) + (arglist + (carg (tc) ptr) + (carg (^stable $0) ptr) + (carg $0 ptr) + (carg (^body $0) ptr) + (carg $1 ptr) + (carg (const ("E MVM_reg_str) int_sz) int)))) + +(template: unshift_o! + (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) + (arglist + (carg (tc) ptr) + (carg (^stable $0) ptr) + (carg $0 ptr) + (carg (^body $0) ptr) + (carg $1 ptr) + (carg (const ("E MVM_reg_obj) int_sz) int)))) + (template: splice! (callv (^getf (^repr $0) MVMREPROps pos_funcs.splice) (arglist From 14f6956c63c4cf65d41d4241e7a2eea46a5d61a9 Mon Sep 17 00:00:00 2001 From: Jeremy Studer Date: Tue, 14 Aug 2018 16:40:29 -0400 Subject: [PATCH 2/6] Add existspos exprjit template --- src/jit/core_templates.expr | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/jit/core_templates.expr b/src/jit/core_templates.expr index a8ffdbba50..d5aad9c1ec 100644 --- a/src/jit/core_templates.expr +++ b/src/jit/core_templates.expr @@ -1047,6 +1047,13 @@ (carg (^body $0) ptr) (carg $1 int)))) +(template: existspos + (call (^func &MVM_repr_exists_pos) + (arglist + (carg (tc) ptr) + (carg $1 ptr) + (carg $2 int)) int_sz)) + (template: atkey_i! (callv (^getf (^repr $0) MVMREPROps ass_funcs.at_key) (arglist From 8a70d24d056b3cde2db46a4005d576fc4544b49a Mon Sep 17 00:00:00 2001 From: Jeremy Studer Date: Tue, 14 Aug 2018 17:37:11 -0400 Subject: [PATCH 3/6] Add ctx exprjit template --- src/jit/core_templates.expr | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/jit/core_templates.expr b/src/jit/core_templates.expr index d5aad9c1ec..7cf8cd56e8 100644 --- a/src/jit/core_templates.expr +++ b/src/jit/core_templates.expr @@ -1438,6 +1438,12 @@ (^getf (^repr $1) MVMREPROps ID) (const ("E MVM_REPR_ID_MVMCompUnit) (&sizeof MVMuint32))))) +(template: ctx + (call (^func &MVM_context_from_frame) + (arglist + (carg (tc) ptr) + (carg (^frame) ptr)) ptr_sz)) + (template: curcode (^getf (^frame) MVMFrame code_ref)) From f59288038fd551d44c50e0dea71efdd08d5859d9 Mon Sep 17 00:00:00 2001 From: Jeremy Studer Date: Tue, 14 Aug 2018 18:19:48 -0400 Subject: [PATCH 4/6] Add getpid and hintfor exprjit templates --- src/jit/core_templates.expr | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/jit/core_templates.expr b/src/jit/core_templates.expr index 7cf8cd56e8..468871cee1 100644 --- a/src/jit/core_templates.expr +++ b/src/jit/core_templates.expr @@ -1823,12 +1823,25 @@ (carg $1 ptr) (carg $2 ptr)) ptr_sz)) +(template: getpid + (call (^func &MVM_proc_getpid) + (arglist + (carg (tc) ptr)) int_sz)) + (template: assertparamcheck! (when (zr $0) (callv (^func &MVM_args_bind_failed) (arglist (carg (tc) ptr))))) +(template: hintfor + (call (^getf (^repr $1) MVMREPROps attr_funcs.hint_for) + (arglist + (carg (tc) ptr) + (carg (^stable $1) ptr) + (carg $1 ptr) + (carg $2 ptr)) int_sz)) + (template: getuniname (call (^func &MVM_unicode_get_name) (arglist From c1b7b5494aba9778d9c2618fab7e792d39156e6c Mon Sep 17 00:00:00 2001 From: Jeremy Studer Date: Tue, 14 Aug 2018 18:23:17 -0400 Subject: [PATCH 5/6] Add paramnamesused exprjit template --- src/jit/core_templates.expr | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/jit/core_templates.expr b/src/jit/core_templates.expr index 468871cee1..c5e52cbc4f 100644 --- a/src/jit/core_templates.expr +++ b/src/jit/core_templates.expr @@ -1842,6 +1842,15 @@ (carg $1 ptr) (carg $2 ptr)) int_sz)) +(template: paramnamesused + (let: (($ctx (^addrf (^frame) MVMFrame params)) + ($csite (^getf $ctx MVMArgProcContext callsite))) + (when (ne (^getf $csite MVMCallsite num_pos) (^getf $csite MVMCallsite arg_count)) + (callv (^func &MVM_args_assert_nameds_used) + (arglist + (carg (tc) ptr) + (carg $ctx ptr)))))) + (template: getuniname (call (^func &MVM_unicode_get_name) (arglist From 5b6d7fd3f2d1dc25ac4b23ea8b2ee754aa7e1c4c Mon Sep 17 00:00:00 2001 From: Jeremy Studer Date: Tue, 4 Sep 2018 02:08:41 -0400 Subject: [PATCH 6/6] Fix unshift_* templates (no destructive '!') Remove destructive '!' character. As bdw explained in his feedback, the '!' identifies an op that doesn't only fail to produce a value, but also has a write register that is explicitly populated within the template. Since the unshift ops don't write to a register, it is not correct to mark it with '!'. --- src/jit/core_templates.expr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jit/core_templates.expr b/src/jit/core_templates.expr index c5e52cbc4f..35ded79903 100644 --- a/src/jit/core_templates.expr +++ b/src/jit/core_templates.expr @@ -987,7 +987,7 @@ (carg $0 ptr) (carg (const ("E MVM_reg_obj) int_sz) int)))) -(template: unshift_i! +(template: unshift_i (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) (arglist (carg (tc) ptr) @@ -997,7 +997,7 @@ (carg $1 ptr) (carg (const ("E MVM_reg_int64) int_sz) int)))) -(template: unshift_n! +(template: unshift_n (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) (arglist (carg (tc) ptr) @@ -1007,7 +1007,7 @@ (carg $1 ptr) (carg (const ("E MVM_reg_num64) int_sz) int)))) -(template: unshift_s! +(template: unshift_s (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) (arglist (carg (tc) ptr) @@ -1017,7 +1017,7 @@ (carg $1 ptr) (carg (const ("E MVM_reg_str) int_sz) int)))) -(template: unshift_o! +(template: unshift_o (callv (^getf (^repr $0) MVMREPROps pos_funcs.unshift) (arglist (carg (tc) ptr)