X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Flibjit.c;h=942696670724d907957850bb2d52be46e82efba1;hp=0b4989b1dd2f92f35cb96dd2997e8078633cceee;hb=ef4e043826e92afd32000b7d945cdf86a6e9a223;hpb=14969a8b4386d7c38e90775e1c57886c9bf3839e diff --git a/src/libjit.c b/src/libjit.c index 0b4989b..9426966 100644 --- a/src/libjit.c +++ b/src/libjit.c @@ -23,13 +23,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include "php_psi_stdinc.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# include "php_config.h" +#endif #include "context.h" #include "call.h" #include "php.h" #ifdef HAVE_LIBJIT +#include "libjit.h" #include #if HAVE_INT128 @@ -215,7 +220,7 @@ static bool psi_jit_init(struct psi_context *C) return false; } - context->signature = jit_type_create_signature(jit_abi_cdecl, jit_type_void, + context->signature = jit_type_create_signature(jit_abi_fastcall, jit_type_void, params, 2, 1); if (!context->signature) { jit_context_destroy(context->jit); @@ -252,8 +257,9 @@ static bool psi_jit_composite_init(struct psi_context *C, info = pecalloc(1, sizeof(*info), 1); info->eles = psi_plist_init((psi_plist_dtor) psi_jit_type_free); + psi_context_composite_type_elements(C, darg, &info->eles); info->strct = jit_type_create_struct((jit_type_t *) - psi_context_composite_type_elements(C, darg, &info->eles), + psi_plist_eles(info->eles), psi_plist_count(info->eles), 0); darg->engine.info = info; @@ -272,7 +278,8 @@ static void psi_jit_composite_dtor(struct psi_context *C, darg->engine.type = NULL; jit_type_free(info->strct); - psi_plist_free(info->eles); + /* just free */ + pefree(info->eles, 1); pefree(info, 1); } } @@ -307,7 +314,7 @@ static bool psi_jit_extvar_init(struct psi_context *C, jit_context_build_start(ctx->jit); info->get.signature = jit_type_create_signature(jit_abi_cdecl, - psi_context_decl_arg_full_type(C, evar->getter->func), NULL, 0, 1); + psi_context_decl_arg_call_type(C, evar->getter->func), NULL, 0, 1); if (!info->get.signature) { goto failure; } @@ -319,7 +326,7 @@ static bool psi_jit_extvar_init(struct psi_context *C, info->set.params[0] = psi_context_decl_arg_call_type(C, evar->arg); info->set.signature = jit_type_create_signature(jit_abi_cdecl, - psi_context_decl_arg_full_type(C, evar->setter->func), + psi_context_decl_arg_call_type(C, evar->setter->func), info->set.params, 1, 1); if (!info->set.signature) { goto failure; @@ -565,6 +572,9 @@ static void psi_jit_layoutof_type(struct psi_context *C, void *orig_type, { l->pos = jit_type_get_alignment(orig_type); l->len = jit_type_get_size(orig_type); + + assert(l->pos); + assert(l->len); } static struct psi_context_ops ops = {