[svn:parrot] r42287 - in branches/libjit_frame_builder: . config/auto config/gen config/gen/libjit config/gen/makefiles src

darbelo at svn.parrot.org darbelo at svn.parrot.org
Fri Nov 6 00:46:12 UTC 2009


Author: darbelo
Date: Fri Nov  6 00:46:11 2009
New Revision: 42287
URL: https://trac.parrot.org/parrot/changeset/42287

Log:
Fix errors after the merge.

Deleted:
   branches/libjit_frame_builder/src/frame_builder.c
Modified:
   branches/libjit_frame_builder/MANIFEST
   branches/libjit_frame_builder/config/auto/libjit.pm
   branches/libjit_frame_builder/config/gen/libjit.pm
   branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_c.in
   branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_h.in
   branches/libjit_frame_builder/config/gen/makefiles/root.in
   branches/libjit_frame_builder/src/nci_test.c

Modified: branches/libjit_frame_builder/MANIFEST
==============================================================================
--- branches/libjit_frame_builder/MANIFEST	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/MANIFEST	Fri Nov  6 00:46:11 2009	(r42287)
@@ -1271,7 +1271,6 @@
 src/exceptions.c                                            []
 src/exit.c                                                  []
 src/extend.c                                                []
-src/frame_builder.c                                         []
 src/frame_builder.h                                         []
 src/gc/alloc_memory.c                                       []
 src/gc/alloc_resources.c                                    []

Modified: branches/libjit_frame_builder/config/auto/libjit.pm
==============================================================================
--- branches/libjit_frame_builder/config/auto/libjit.pm	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/config/auto/libjit.pm	Fri Nov  6 00:46:11 2009	(r42287)
@@ -12,7 +12,7 @@
 
 The libjit library implements just-in-time compilation functionality. Unlike
 other JITs, this one is designed to be independent of any particular virtual
-machine bytecode format or language. 
+machine bytecode format or language.
 
 libjit can be obtained from L<http://freshmeat.net/projects/libjit/> or through
 your distribution's package manager. Developer documentation is available from

Modified: branches/libjit_frame_builder/config/gen/libjit.pm
==============================================================================
--- branches/libjit_frame_builder/config/gen/libjit.pm	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/config/gen/libjit.pm	Fri Nov  6 00:46:11 2009	(r42287)
@@ -38,22 +38,17 @@
             frame_builder_c => 'config/gen/libjit/frame_builder_libjit_c.in',
         },
         wrapped_vtables => {
-            get_integer        => [ ()           => 'INTVAL' ],
-            set_integer_native => [ ('INTVAL')   => 'void' ],
-            get_pointer        => [ ()           => 'void_ptr' ],
-            set_pointer        => [ ('void_ptr') => 'void' ],
+            get_integer          => [ ()           => 'INTVAL' ],
+            set_integer_native   => [ ('INTVAL')   => 'void' ],
+            get_pointer          => [ ()           => 'void_ptr' ],
+            set_pointer          => [ ('void_ptr') => 'void' ],
+            get_string_keyed_int => [ ('INTVAL')   => 'void_ptr' ],
         },
         wrapped_funcs => {
-            get_nci_I => [ qw(void_ptr void_ptr sys_int) => 'INTVAL' ],
-            get_nci_N => [ qw(void_ptr void_ptr sys_int) => 'FLOATVAL' ],
-            get_nci_S => [ qw(void_ptr void_ptr sys_int) => 'void_ptr' ],
-            get_nci_P => [ qw(void_ptr void_ptr sys_int) => 'void_ptr' ],
-            get_nci_p => [ qw(void_ptr void_ptr sys_int) => 'void_ptr' ],
-
-            set_nci_I => [ qw(void_ptr void_ptr INTVAL)   => 'void' ],
-            set_nci_N => [ qw(void_ptr void_ptr FLOATVAL) => 'void' ],
-            set_nci_S => [ qw(void_ptr void_ptr void_ptr) => 'void' ],
-            set_nci_P => [ qw(void_ptr void_ptr void_ptr) => 'void' ],
+            Parrot_pcc_fill_params_from_c_args =>
+                [ qw(void_ptr void_ptr void_ptr ...) => 'void' ],
+            Parrot_pcc_fill_returns_from_c_args =>
+                [ qw(void_ptr void_ptr void_ptr ...) => 'void' ],
 
             Parrot_str_new          =>
                 [ qw(void_ptr void_ptr UINTVAL) => 'void_ptr' ],
@@ -62,8 +57,6 @@
             Parrot_str_free_cstring =>
                 [ ('void_ptr')                  => 'void' ],
 
-            Parrot_init_arg_nci =>
-                [ qw(void_ptr void_ptr void_ptr) => 'void_ptr' ],
             pmc_new_noinit      =>
                 [ qw(void_ptr INTVAL)            => 'void_ptr' ],
 
@@ -146,10 +139,10 @@
     my $_arg_v = $n_args ? ", $arg_v" : "";
 
     return { decl => <<DECL, defn => <<DEFN };
-jit_value_t
+static jit_value_t
 jit__vtable_$entry_name(jit_function_t, jit_value_t, jit_value_t $_arg_decls_t);
 DECL
-jit_value_t
+static jit_value_t
 jit__vtable_$entry_name(jit_function_t f, jit_value_t interp, jit_value_t self $_arg_decls_v) {
     jit_type_t sig;
     jit_value_t vtable, method;
@@ -173,37 +166,85 @@
     $_ = jit_prefix_type($_) for @$func_sig;
 
     my $ret_t = pop @$func_sig;
+
+    my $vararg = 0;
+    if ($func_sig->[-1] eq '...') {
+        $vararg = 1;
+        pop @$func_sig;
+    }
+
     my $arg_t = join ", ", @$func_sig;
 
     my $n_args      = scalar @$func_sig;
-    my $arg_decls_t = join ", ",  map {'jit_value_t'}     1..$n_args;
-    my $arg_decls_v = join ", ",  map {"jit_value_t v$_"} 1..$n_args;
+    my $arg_decls_t = join ", ", map {'jit_value_t'}     1..$n_args;
+    my $arg_decls_v = join ", ", map {"jit_value_t v$_"} 1..$n_args;
     my $arg_v       = join ", ", map {"v$_"}             1..$n_args;
 
-    return { decl => <<DECL, defn => <<DEFN };
-jit_value_t
+    my ($decl, $defn);
+    if ($vararg) {
+        $decl = <<DECL;
+static jit_value_t
+jit__$func_name(jit_function_t, $arg_decls_t, jit_type_t *, jit_value_t *, int);
+DECL
+        $defn = <<DEFN;
+static jit_value_t
+jit__$func_name(jit_function_t f, $arg_decls_v, jit_type_t *va_t, jit_value_t *va_v, int va_n) {
+    int i;
+    int n_args           = $n_args + va_n;
+    jit_type_t sig;
+    jit_type_t  arg_t[n_args];
+    jit_value_t arg_v[n_args];
+    jit_type_t  carg_t[] = { $arg_t };
+    jit_value_t carg_v[] = { $arg_v };
+
+    for (i = 0; i < $n_args; i++) {
+        arg_t[i] = carg_t[i];
+        arg_v[i] = carg_v[i];
+    }
+    for (i = $n_args; i < n_args; i++) {
+        arg_t[i] = va_t[i - $n_args];
+        arg_v[i] = va_v[i - $n_args];
+    }
+
+    sig = jit_type_create_signature(jit_abi_cdecl, $ret_t, arg_t, n_args, 1);
+
+    return jit_insn_call_native(f, "$func_name", (void *)&$func_name, sig, arg_v, n_args, 0);
+}
+DEFN
+    }
+    else {
+        $decl = <<DECL;
+static jit_value_t
 jit__$func_name(jit_function_t, $arg_decls_t);
 DECL
-jit_value_t
+        $defn = <<DEFN;
+static jit_value_t
 jit__$func_name(jit_function_t f, $arg_decls_v) {
-    jit_type_t sig;
+    int n_args          = $n_args;
+    jit_type_t  sig;
     jit_type_t  arg_t[] = { $arg_t };
     jit_value_t arg_v[] = { $arg_v };
 
-    sig = jit_type_create_signature(jit_abi_cdecl, $ret_t, arg_t, $n_args, 1);
+    sig = jit_type_create_signature(jit_abi_cdecl, $ret_t, arg_t, n_args, 1);
 
-    return jit_insn_call_native(f, "$func_name", (void *)&$func_name, sig, arg_v, $n_args, 0);
+    return jit_insn_call_native(f, "$func_name", (void *)&$func_name, sig, arg_v, n_args, 0);
 }
 DEFN
+    }
+
+    return { decl => $decl, defn => $defn };
 }
 
 sub jit_prefix_type {
     my $type = shift;
-    if ($type !~ /[A-Z]/) {
-        return "jit_type_$_";
+    if ($type =~ /^[_a-z]+$/) {
+        return "jit_type_$type";
+    }
+    elsif ($type =~ /^[_A-Z]+$/) {
+        return "JIT_TYPE_$type";
     }
     else {
-        return "JIT_TYPE_$_";
+        return $type;
     }
 }
 

Modified: branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_c.in
==============================================================================
--- branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_c.in	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_c.in	Fri Nov  6 00:46:11 2009	(r42287)
@@ -7,9 +7,10 @@
 /* HEADERIZER STOP */
 
 #include "parrot/parrot.h"
+#include "pmc/pmc_context.h"
 #include "pmc/pmc_integer.h"
-#include "pmc/pmc_unmanagedstruct.h"
 #include "pmc/pmc_managedstruct.h"
+#include "pmc/pmc_unmanagedstruct.h"
 #include "frame_builder.h"
 #include "frame_builder_libjit.h"
 
@@ -108,12 +109,13 @@
  * JIT functions
  */
 
-void *
+static void *
 Parrot_jit_create_thunk(PARROT_INTERP, char *sig, void *priv) {
     struct jit_buffer_private_data *p;
     jit_function_t f;
     jit_value_t jit_interp, jit_nci_pmc, jit_pcc_sig;
-    jit_value_t jit_func, jit_st;
+    jit_value_t jit_func, jit_pcc_sig_args, jit_pcc_sig_ret;
+    jit_value_t jit_call_object;
 
     /* populate private data */
     p      = (struct jit_buffer_private_data*)priv;
@@ -128,39 +130,43 @@
         jit_type_t arg_types[] = {
             jit_type_void_ptr, /* interp */
             jit_type_void_ptr, /* nci_pmc */
-            jit_type_void_ptr  /* pcc_sig */
         };
-        jit_type_t f_sig = jit_type_create_signature(jit_abi_cdecl, jit_type_void, arg_types, 3, 1);
+        jit_type_t f_sig = jit_type_create_signature(jit_abi_cdecl, jit_type_void, arg_types, 2, 1);
         f                = jit_function_create(p->ctx, f_sig);
     }
 
     /* get the incomming args */
     jit_interp  = jit_value_get_param(f, 0);
     jit_nci_pmc = jit_value_get_param(f, 1);
-    jit_pcc_sig = jit_value_get_param(f, 2);
 
-    /* get the wrapped function */
-    jit_func   = jit__vtable_get_pointer(f, jit_interp, jit_nci_pmc);
-
-    /* allocate call_state */
+    /* get information out of the NCI object */
+    jit_func         = jit__vtable_get_pointer(f, jit_interp, jit_nci_pmc);
+    {
+        jit_value_t temp = jit__vtable_get_string_keyed_int(f, jit_interp, jit_nci_pmc,
+                            jit_value_create_nint_constant(f, JIT_TYPE_INTVAL, PARROT_NCI_PCC_SIGNATURE_PARAMS));
+        jit_pcc_sig_args = jit__Parrot_str_to_cstring(f, jit_interp, temp);
+    }
     {
-        jit_value_t sizeof_call_state
-               = jit_value_create_nint_constant(f, jit_type_sys_int, sizeof (call_state));
-        jit_st = JIT_ALLOCA(f, sizeof_call_state);
+        jit_value_t temp = jit__vtable_get_string_keyed_int(f, jit_interp, jit_nci_pmc,
+                            jit_value_create_nint_constant(f, JIT_TYPE_INTVAL, PARROT_NCI_PCC_SIGNATURE_RET));
+        jit_pcc_sig_ret  = jit__Parrot_str_to_cstring(f, jit_interp, temp);
     }
 
-    /* init pcc */
-    jit__Parrot_init_arg_nci(f, jit_interp, jit_st, jit_pcc_sig);
+    /* get call_object */
+    {
+        jit_value_t ctx = jit__CURRENT_CONTEXT(f, jit_interp);
+        jit_call_object = jit__Parrot_pcc_get_signature(f, jit_interp, ctx);
+    }
 
     /* get the outgoing args */
     {
         int nargs = strlen(sig) - 1;
 
-        jit_type_t jit_args_t[nargs];
+        jit_type_t  jit_args_t[nargs];
         jit_value_t jit_args_v[nargs];
         jit_value_t jit_regs[nargs];
 
-        Parrot_jit_parse_sig_args_pre(interp, sig, nargs, f, jit_interp, jit_st,
+        Parrot_jit_parse_sig_args_pre(interp, sig, nargs, f, jit_interp, jit_call_object, jit_pcc_sig_args,
                                       jit_args_t, jit_args_v, jit_regs);
 
         /* get the return type */
@@ -178,15 +184,16 @@
             }
 
             /* get the incomming return */
-            Parrot_jit_parse_sig_ret_post(interp, sig, f, jit_interp, jit_st, ret_v);
+            Parrot_jit_parse_sig_ret_post(interp, sig, f, jit_interp, jit_call_object, jit_pcc_sig_ret, ret_v);
         }
 
         /* clean up args */
         Parrot_jit_parse_sig_args_post(interp, sig, nargs, f, jit_interp, jit_args_v, jit_regs);
     }
 
-    /* deallocate call_state */
-    JIT_ALLOCA_FREE(f, jit_st);
+    /* free PCC signature bits */
+    jit__Parrot_str_free_cstring(f, jit_pcc_sig_args);
+    jit__Parrot_str_free_cstring(f, jit_pcc_sig_ret);
 
     /* end JIT function */
     jit_insn_return(f, NULL);
@@ -198,275 +205,340 @@
     return jit_function_to_closure(f);
 }
 
-void
-Parrot_jit_parse_sig_args_pre(PARROT_INTERP, char *sig, int nargs,
-                              jit_function_t f, jit_value_t jinterp, jit_value_t st,
-                              jit_type_t *arg_types,
-                              jit_value_t *arg_vals, jit_value_t *arg_regs) {
+static int
+Parrot_jit_create_arg_regs(PARROT_INTERP, char *sig, int nargs,
+                            jit_function_t f, jit_value_t *reg_v) {
     int i, j;
-
-    sig += 1; /* ignore return character */
-
     for (i = 0, j = 0; i < nargs; i++) {
         char c;
-        jit_type_t t1;
-        jit_value_t v1, v2, v3, v4;
         switch (c = sig[i]) {
-          case 'I':
-            t1 = JIT_TYPE_INTVAL;
-          read_int_reg:
-            arg_types[i]  = t1;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_I(f, jinterp, st, v1);
-            arg_regs[j++] = arg_vals[i] = v2;
-            break;
-          case 'c':
-            t1 = jit_type_sys_char;
-            goto read_int_reg;
-          case 's':
-            t1 = jit_type_sys_short;
-            goto read_int_reg;
-          case 'i':
-            t1 = jit_type_sys_int;
-            goto read_int_reg;
-          case 'l':
-            t1 = jit_type_sys_long;
-            goto read_int_reg;
-
-          case 'N':
-            t1 = JIT_TYPE_FLOATVAL;
-          read_float_reg:
-            arg_types[i]  = t1;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_N(f, jinterp, st, v1);
-            arg_regs[j++] = arg_vals[i] = v2;
-            break;
-          case 'f':
-            t1 = jit_type_sys_float;
-            goto read_float_reg;
-          case 'd':
-            t1 = jit_type_sys_double;
-            goto read_float_reg;
-
-          case 'S':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_S(f, jinterp, st, v1);
-            arg_regs[j++] = arg_vals[i] = v2;
-            break;
-
-          case 't':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_S(f, jinterp, st, v1);
-            arg_regs[j++] = v2;
-            arg_vals[i]   = jit__Parrot_str_to_cstring(f, jinterp, v2);
-            break;
+            case 'I':
+            case 'c':
+            case 's':
+            case 'i':
+            case 'l':
+                reg_v[j++] = jit_value_create(f, JIT_TYPE_INTVAL);
+                break;
+
+            case 'N':
+            case 'd':
+            case 'f':
+                reg_v[j++] = jit_value_create(f, JIT_TYPE_FLOATVAL);
+                break;
+
+            case 'S':
+            case 'B':
+            case 'b':
+            case 't':
+                reg_v[j++] = jit_value_create(f, jit_type_void_ptr);
+                break;
+
+            case 'p':
+            case 'P':
+            case 'O':
+            case '@':
+            case '2':
+            case '3':
+            case '4':
+            case 'V':
+                reg_v[j++] = jit_value_create(f, jit_type_void_ptr);
+                break;
+
+            default:
+                /* don't catch errors here; fail elsewhere */
+                break;
+        }
+    }
 
-          case 'b':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_S(f, jinterp, st, v1);
-            arg_regs[j++] = v2;
-            arg_vals[i]   = jit__Buffer_bufstart(f, v2);
-            break;
-          case 'B':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_S(f, jinterp, st, v1);
-            arg_regs[j++] = v2;
-            v3            = jit__Parrot_str_to_cstring(f, jinterp, v2);
-            jit_value_set_addressable(v3);
-            arg_vals[i]   = jit_insn_address_of(f, v3);
-            break;
+    return j;
+}
 
-          case 'p':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_p(f, jinterp, st, v1);
-            arg_regs[j++] = arg_vals[i] = v2;
-            break;
-          case 'P':
-          case 'O':
-          case '@':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_P(f, jinterp, st, v1);
-            arg_regs[j++] = arg_vals[i] = v2;
-            break;
-          case '2':
-            t1 = jit_type_sys_short;
-            goto call_get_integer;
-          case '3':
-            t1 = jit_type_sys_int;
-            goto call_get_integer;
-          case '4':
-            t1 = jit_type_sys_long;
-          call_get_integer:
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_P(f, jinterp, st, v1);
-            arg_regs[j++] = v2;
-            v3            = jit__vtable_get_integer(f, jinterp, v2);
-            v4            = jit_value_create(f, t1);
-            jit_value_set_addressable(v4);
-            jit_insn_store(f, v4, v3);
-            arg_vals[i]   = jit_insn_address_of(f, v4);
-            break;
+static void
+Parrot_jit_fill_args(PARROT_INTERP, char *sig, int nargs, int nregs,
+                    jit_function_t f, jit_value_t jit_interp, jit_value_t call_object, jit_value_t jit_pcc_sig_args,
+                    jit_value_t *reg_v, jit_type_t *arg_t, jit_value_t *arg_v) {
+    int i, j;
 
-          case 'V':
-            arg_types[i]  = jit_type_void_ptr;
-            v1            = jit_value_create_nint_constant(f, jit_type_sys_int, j);
-            v2            = jit__get_nci_P(f, jinterp, st, v1);
-            arg_regs[j++] = v2;
-            v3            = jit__vtable_get_pointer(f, jinterp, v2);
-            v4            = jit_value_create(f, jit_type_void_ptr);
-            jit_value_set_addressable(v4);
-            jit_insn_store(f, v4, v3);
-            arg_vals[i]   = jit_insn_address_of(f, v4);
-            break;
+    /* fill argument registers */
+    {
+        jit_type_t  jit_reg_addr_t[nregs];
+        jit_value_t jit_reg_addr_v[nregs];
+        for (i = 0; i < nregs; i++) {
+            jit_reg_addr_t[i] = jit_type_void_ptr;
+            jit_value_set_addressable(reg_v[i]);
+            jit_reg_addr_v[i] = jit_insn_address_of(f, reg_v[i]);
+        }
+        jit__Parrot_pcc_fill_params_from_c_args(f, jit_interp, call_object, jit_pcc_sig_args,
+                                                jit_reg_addr_t, jit_reg_addr_v, nregs);
+    }
 
-          case '0':
-            arg_types[i] = jit_type_void_ptr;
-            arg_vals[i]  = jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL);
-            break;
+    for (i = 0, j = 0; i < nargs; i++) {
+        char c;
+        jit_type_t t1;
+        jit_label_t l1;
+        jit_value_t v1, v2, v3, v4;
+        switch (c = sig[i]) {
+            case 'I':
+                t1 = JIT_TYPE_INTVAL;
+                goto pop_reg;
+            case 'c':
+                t1 = jit_type_sys_char;
+                goto pop_reg;
+            case 's':
+                t1 = jit_type_sys_short;
+                goto pop_reg;
+            case 'i':
+                t1 = jit_type_sys_int;
+                goto pop_reg;
+            case 'l':
+                t1 = jit_type_sys_long;
+                goto pop_reg;
+            case 'N':
+                t1 = JIT_TYPE_FLOATVAL;
+                goto pop_reg;
+            case 'f':
+                t1 = jit_type_sys_float;
+                goto pop_reg;
+            case 'd':
+                t1 = jit_type_sys_double;
+                goto pop_reg;
+            case 'S':
+            case 'P':
+            case 'O':
+            case '@':
+                t1 = jit_type_void_ptr;
+            pop_reg:
+                arg_t[i] = t1;
+                arg_v[i] = jit_value_create(f, t1);
+                jit_insn_store(f, arg_v[i], reg_v[j]);
+                j++;
+                break;
+
+            case 't':
+                arg_t[i] = jit_type_void_ptr;
+                arg_v[i] = jit_value_create(f, jit_type_void_ptr);
+                jit_insn_store(f, arg_v[i],
+                                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL));
+                v1       = jit_insn_eq(f, reg_v[j],
+                                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL));
+                l1       = jit_label_undefined;
+                jit_insn_branch_if(f, v1, &l1);
+                jit_insn_store(f, arg_v[i], jit__Parrot_str_to_cstring(f, jit_interp, reg_v[j]));
+                jit_insn_label(f, &l1);
+
+                j++;
+                break;
+
+            case 'b':
+                arg_t[i] = jit_type_void_ptr;
+                arg_v[i] = jit__Buffer_bufstart(f, reg_v[j]);
+                j++;
+                break;
+
+            case 'B':
+                arg_t[i] = jit_type_void_ptr;
+                arg_v[i] = jit_value_create(f, jit_type_void_ptr);
+                jit_insn_store(f, arg_v[i],
+                                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL));
+                v1       = jit_insn_eq(f, reg_v[j],
+                                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL));
+                l1       = jit_label_undefined;
+                jit_insn_branch_if(f, v1, &l1);
+                v2       = jit__Parrot_str_to_cstring(f, jit_interp, reg_v[j]);
+                v3       = jit_value_create(f, jit_type_void_ptr);
+                jit_value_set_addressable(v3);
+                jit_insn_store(f, v3, v2);
+                jit_insn_store(f, arg_v[i], jit_insn_address_of(f, v3));
+                jit_insn_label(f, &l1);
+                j++;
+                break;
+
+            case 'p':
+                arg_t[i] = jit_type_void_ptr;
+                arg_v[i] = jit_value_create(f, jit_type_void_ptr);
+                jit_insn_store(f, arg_v[i],
+                                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL));
+                v1       = jit__PMC_IS_NULL(f, reg_v[j]);
+                l1       = jit_label_undefined;
+                jit_insn_branch_if(f, v1, &l1);
+                v2       = jit__vtable_get_pointer(f, jit_interp, reg_v[j]);
+                jit_insn_store(f, arg_v[i], v2);
+                jit_insn_label(f, &l1);
+                j++;
+                break;
+
+            case '2':
+                t1 = jit_type_sys_short;
+                goto call_get_integer;
+            case '3':
+                t1 = jit_type_sys_int;
+                goto call_get_integer;
+            case '4':
+                t1 = jit_type_sys_long;
+            call_get_integer:
+                arg_t[i] = jit_type_void_ptr;
+                v1       = jit__vtable_get_integer(f, jit_interp, reg_v[j]);
+                v2       = jit_value_create(f, t1);
+                jit_value_set_addressable(v2);
+                jit_insn_store(f, v2, v1);
+                arg_v[i] = jit_insn_address_of(f, v2);
+                j++;
+                break;
+
+            case 'V':
+                arg_t[i] = jit_type_void_ptr;
+                v1       = jit__vtable_get_pointer(f, jit_interp, reg_v[j]);
+                v2       = jit_value_create(f, jit_type_void_ptr);
+                jit_value_set_addressable(v2);
+                jit_insn_store(f, v2, v1);
+                arg_v[i] = jit_insn_address_of(f, v2);
+                j++;
+                break;
+
+            case '0':
+                arg_t[i] = jit_type_void_ptr;
+                arg_v[i] = jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL);
+                break;
+
+            case 'J':
+                arg_t[i] = jit_type_void_ptr;
+                arg_v[i] = jit_interp;
+                break;
+
+            default:
+                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
+                    "unkown arg type '%c'", c);
+                return;
+        }
+    }
+}
 
-          case 'J':
-            arg_types[i] = jit_type_void_ptr;
-            arg_vals[i]  = jinterp;
-            break;
+static void
+Parrot_jit_parse_sig_args_pre(PARROT_INTERP, char *sig, int nargs,
+                              jit_function_t f, jit_value_t jit_interp, jit_value_t call_object, jit_value_t jit_pcc_sig_args,
+                              jit_type_t  *jit_args_t,
+                              jit_value_t *jit_args_v, jit_value_t *jit_regs_v) {
+    int nregs;
 
-          case 'U':
-            /* TODO */
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                "arg type 'U' not yet implemented");
-            return;
+    sig += 1; /* ignore return character */
 
-          default:
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                "unkown arg type '%c'", c);
-            return;
-        }
-    }
+    nregs = Parrot_jit_create_arg_regs(interp, sig, nargs, f, jit_regs_v);
+    Parrot_jit_fill_args(interp, sig, nargs, nregs, f, jit_interp, call_object, jit_pcc_sig_args,
+                             jit_regs_v, jit_args_t, jit_args_v);
 }
 
-jit_type_t
+static jit_type_t
 Parrot_jit_parse_sig_ret_pre(PARROT_INTERP, char *sig) {
     char c;
     switch (c = sig[0]) {
-      case 'v':
-        return jit_type_void;
+        case 'v':
+            return jit_type_void;
 
-      case 'I':
-        return JIT_TYPE_INTVAL;
-      case 'c':
-        return jit_type_sys_char;
-      case 's':
-        return jit_type_sys_short;
-      case 'i':
-        return jit_type_sys_int;
-      case 'l':
-        return jit_type_sys_long;
-
-      case 'N':
-        return JIT_TYPE_FLOATVAL;
-      case 'f':
-        return jit_type_sys_float;
-      case 'd':
-        return jit_type_sys_double;
-
-      case 'S':
-      case 't':
-        return jit_type_void_ptr;
-
-      case 'p':
-      case 'P':
-        return jit_type_void_ptr;
-
-      case 'U':
-        /* TODO */
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                                    "return type 'U' not yet implemented");
-        return NULL;
-      default:
-        /* FAIL */
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
-                                    "unknown return type '%c'", c);
-        return NULL;
+        case 'I':
+            return JIT_TYPE_INTVAL;
+        case 'c':
+            return jit_type_sys_char;
+        case 's':
+            return jit_type_sys_short;
+        case 'i':
+            return jit_type_sys_int;
+        case 'l':
+            return jit_type_sys_long;
+
+        case 'N':
+            return JIT_TYPE_FLOATVAL;
+        case 'f':
+            return jit_type_sys_float;
+        case 'd':
+            return jit_type_sys_double;
+
+        case 'S':
+        case 't':
+            return jit_type_void_ptr;
+
+        case 'p':
+        case 'P':
+            return jit_type_void_ptr;
+
+        default:
+            /* FAIL */
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_JIT_ERROR,
+                                        "unknown return type '%c'", c);
+            return NULL;
     }
 }
 
-void
+static void
 Parrot_jit_parse_sig_ret_post(PARROT_INTERP, char *sig,
-                              jit_function_t f, jit_value_t jinterp, jit_value_t st,
-                              jit_value_t retval) {
+                              jit_function_t f, jit_value_t jit_interp, jit_value_t call_object,
+                              jit_value_t pcc_sig, jit_value_t retval) {
+    jit_type_t  ret_t[1];
+    jit_value_t ret_v[1];
+
     jit_type_t t1;
     jit_value_t v1, v2, v3;
     switch (sig[0]) {
-      case 'v':
-        break;
+        case 'v':
+            break;
 
-      case 'I':
-      case 'c':
-      case 's':
-      case 'i':
-      case 'l':
-        jit__set_nci_I(f, jinterp, st, retval);
-        break;
-
-      case 'N':
-      case 'f':
-      case 'd':
-        jit__set_nci_N(f, jinterp, st, retval);
-        break;
-
-      case 'S':
-        jit__set_nci_S(f, jinterp, st, retval);
-        break;
-      case 't':
-        v1 = jit_value_create_nint_constant(f, jit_type_sys_int, 0);
-        v2 = jit__Parrot_str_new(f, jinterp, retval, v1);
-        jit__set_nci_S(f, jinterp, st, v2);
-        break;
-
-      case 'P':
-        jit__set_nci_P(f, jinterp, st, retval);
-        break;
-      case 'p':
-        v1 = jit_value_create_intval_constant(f, enum_class_UnManagedStruct);
-        v2 = jit__pmc_new_noinit(f, jinterp, v1);
-        jit__vtable_set_pointer(f, jinterp, v2, retval);
-        jit__set_nci_P(f, jinterp, st, v2);
-        break;
-      case '2':
-        t1 = jit_type_sys_short;
-        goto create_int_pmc;
-      case '3':
-        t1 = jit_type_sys_int;
-        goto create_int_pmc;
-      case '4':
-        t1 = jit_type_sys_long;
-      create_int_pmc:
-        v1 = jit_insn_load_relative(f, retval, 0, t1);
-        v2 = jit_value_create_intval_constant(f, enum_class_Integer);
-        v3 = jit__pmc_new_noinit(f, jinterp, v2);
-        jit__vtable_set_integer_native(f, jinterp, v3, v1);
-        jit__set_nci_P(f, jinterp, st, v3);
-        break;
-
-      case 'U':
-        /* ignore (failed elsewhere) */
-        break;
-
-      default:
-        /* ignore (failed elsewhere) */
-        break;
+        case 'I':
+        case 'c':
+        case 's':
+        case 'i':
+        case 'l':
+            ret_t[0] = JIT_TYPE_INTVAL;
+            goto fill_ret;
+        case 'N':
+        case 'f':
+        case 'd':
+            ret_t[0] = JIT_TYPE_FLOATVAL;
+            goto fill_ret;
+        case 'S':
+        case 'P':
+            ret_t[0] = jit_type_void_ptr;
+            goto fill_ret;
+        case 't':
+            ret_t[0] = jit_type_void_ptr;
+            retval = jit__Parrot_str_new(f, jit_interp, retval,
+                        jit_value_create_nint_constant(f, jit_type_sys_int, 0));
+            goto fill_ret;
+        case 'p':
+            ret_t[0] = jit_type_void_ptr;
+            v1 = jit__pmc_new_noinit(f, jit_interp,
+                    jit_value_create_intval_constant(f, enum_class_UnManagedStruct));
+            jit__vtable_set_pointer(f, jit_interp, v1, retval);
+            retval = v1;
+            goto fill_ret;
+        case '2':
+            t1 = jit_type_sys_short;
+            goto create_int_pmc;
+        case '3':
+            t1 = jit_type_sys_int;
+            goto create_int_pmc;
+        case '4':
+            t1 = jit_type_sys_long;
+        create_int_pmc:
+            ret_t[0] = jit_type_void_ptr;
+            v1 = jit_insn_load_relative(f, retval, 0, t1);
+            v2 = jit__pmc_new_noinit(f, jit_interp,
+                    jit_value_create_intval_constant(f, enum_class_Integer));
+            jit__vtable_set_integer_native(f, jit_interp, v2, v1);
+            retval = v2;
+        fill_ret:
+            ret_v[0] = jit_value_create(f, ret_t[0]);
+            jit_insn_store(f, ret_v[0], retval);
+            jit__Parrot_pcc_fill_returns_from_c_args(f, jit_interp, call_object, pcc_sig, ret_t, ret_v, 1);
+            break;
+
+        default:
+            /* ignore (failed elsewhere) */
+            break;
     }
 }
 
-void
+static void
 Parrot_jit_parse_sig_args_post(PARROT_INTERP, char *sig, int nargs,
-                               jit_function_t f, jit_value_t jinterp,
+                               jit_function_t f, jit_value_t jit_interp,
                                jit_value_t *args, jit_value_t *regs) {
     int i, j;
 
@@ -476,64 +548,61 @@
         jit_type_t t1;
         jit_value_t v1;
         switch (sig[i]) {
-          case 't':
-            jit__Parrot_str_free_cstring(f, args[i]);
-            j++;
-            break;
-
-          case 'B':
-            v1 = jit_insn_load_relative(f, args[i], 0, jit_type_void_ptr);
-            jit__Parrot_str_free_cstring(f, v1);
-            j++;
-            break;
-
-          case '2':
-            t1 = jit_type_sys_short;
-            goto set_integer;
-          case '3':
-            t1 = jit_type_sys_int;
-            goto set_integer;
-          case '4':
-            t1 = jit_type_sys_long;
-          set_integer:
-            v1 = jit_insn_load_relative(f, args[i], 0, t1);
-            jit__vtable_set_integer_native(f, jinterp, regs[j], v1);
-            j++;
-            break;
-
-          case 'V':
-            v1 = jit_insn_load_relative(f, args[i], 0, jit_type_void_ptr);
-            jit__vtable_set_pointer(f, jinterp, regs[j], v1);
-            j++;
-            break;
-
-          case 'I':
-          case 'c':
-          case 'i':
-          case 'l':
-          case 'N':
-          case 'f':
-          case 'd':
-          case 'S':
-          case 'b':
-          case 'p':
-          case 'P':
-          case 'O':
-          case '@':
-            j++;
-            break;
-
-          case 'U':
-            /* TODO */
-            break;
-          default:
-            /* ignore */
-            break;
+            case 't':
+                jit__Parrot_str_free_cstring(f, args[i]);
+                j++;
+                break;
+
+            case 'B':
+                v1 = jit_insn_load_relative(f, args[i], 0, jit_type_void_ptr);
+                jit__Parrot_str_free_cstring(f, v1);
+                j++;
+                break;
+
+            case '2':
+                t1 = jit_type_sys_short;
+                goto set_integer;
+            case '3':
+                t1 = jit_type_sys_int;
+                goto set_integer;
+            case '4':
+                t1 = jit_type_sys_long;
+            set_integer:
+                v1 = jit_insn_load_relative(f, args[i], 0, t1);
+                jit__vtable_set_integer_native(f, jit_interp, regs[j], v1);
+                j++;
+                break;
+
+            case 'V':
+                v1 = jit_insn_load_relative(f, args[i], 0, jit_type_void_ptr);
+                jit__vtable_set_pointer(f, jit_interp, regs[j], v1);
+                j++;
+                break;
+
+            case 'I':
+            case 'c':
+            case 'i':
+            case 'l':
+            case 'N':
+            case 'f':
+            case 'd':
+            case 'S':
+            case 'b':
+            case 'p':
+            case 'P':
+            case 'O':
+            case '@':
+                j++;
+                break;
+
+            default:
+                /* ignore */
+                break;
         }
     }
 }
 
-jit_value_t
+static jit_value_t
 jit_value_create_intval_constant(jit_function_t f, INTVAL i) {
     return jit_value_create_nint_constant(f, JIT_TYPE_INTVAL, i);
 }
@@ -543,11 +612,33 @@
  */
 
 /* custom wrappers */
-jit_value_t
+static jit_value_t
 jit__Buffer_bufstart(jit_function_t f, jit_value_t buf) {
     return jit_insn_load_relative(f, buf, offsetof(Buffer, _bufstart), jit_type_void_ptr);
 }
 
+static jit_value_t
+jit__CURRENT_CONTEXT(jit_function_t f, jit_value_t interp) {
+    return jit_insn_load_relative(f, interp, offsetof(struct parrot_interp_t, ctx), jit_type_void_ptr);
+}
+
+static jit_value_t
+jit__PMC_IS_NULL(jit_function_t f, jit_value_t pmc) {
+    return jit_insn_or(f,
+            jit_insn_eq(f, pmc,
+                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)NULL)),
+            jit_insn_eq(f, pmc,
+                jit_value_create_nint_constant(f, jit_type_void_ptr, (jit_nint)PMCNULL)));
+}
+
+static jit_value_t
+jit__Parrot_pcc_get_signature(jit_function_t f, jit_value_t interp, jit_value_t ctx) {
+    return jit_insn_load_relative(f,
+                jit_insn_load_relative(f, ctx, offsetof(struct PMC, data), jit_type_void_ptr),
+                offsetof(struct Parrot_Context_attributes, current_sig),
+                jit_type_void_ptr);
+}
+
 /* vtable wrappers */
 @TEMP_vtable_wrap_defns@
 

Modified: branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_h.in
==============================================================================
--- branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_h.in	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/config/gen/libjit/frame_builder_libjit_h.in	Fri Nov  6 00:46:11 2009	(r42287)
@@ -41,23 +41,30 @@
  * JIT functions
  */
 
-void *
+static void *
 Parrot_jit_create_thunk(Interp *, char *, void *);
 
-void
-Parrot_jit_parse_sig_args_pre(Interp *, char *, int, jit_function_t, jit_value_t, jit_value_t,
+static void
+Parrot_jit_parse_sig_args_pre(Interp *, char *, int, jit_function_t, jit_value_t, jit_value_t, jit_value_t,
                               jit_type_t *, jit_value_t *, jit_value_t *);
 
-jit_type_t
+static jit_type_t
 Parrot_jit_parse_sig_ret_pre(Interp *, char *);
 
-void
-Parrot_jit_parse_sig_ret_post(Interp *, char *, jit_function_t, jit_value_t, jit_value_t, jit_value_t);
+static void
+Parrot_jit_parse_sig_ret_post(Interp *, char *, jit_function_t, jit_value_t, jit_value_t, jit_value_t, jit_value_t);
 
-void
+static void
 Parrot_jit_parse_sig_args_post(Interp *, char *, int, jit_function_t, jit_value_t, jit_value_t *, jit_value_t *);
 
-jit_value_t
+static int
+Parrot_jit_create_arg_regs(Interp *, char *, int, jit_function_t, jit_value_t *);
+
+static void
+Parrot_jit_fill_args(Interp *, char *, int, int, jit_function_t, jit_value_t, jit_value_t, jit_value_t,
+                    jit_value_t *, jit_type_t *, jit_value_t *);
+
+static jit_value_t
 jit_value_create_intval_constant(jit_function_t, INTVAL);
 
 /*
@@ -76,9 +83,18 @@
  */
 
 /* custom wrappers */
-jit_value_t
+static jit_value_t
 jit__Buffer_bufstart(jit_function_t, jit_value_t);
 
+static jit_value_t
+jit__CURRENT_CONTEXT(jit_function_t, jit_value_t);
+
+static jit_value_t
+jit__PMC_IS_NULL(jit_function_t, jit_value_t);
+
+static jit_value_t
+jit__Parrot_pcc_get_signature(jit_function_t, jit_value_t, jit_value_t);
+
 /* vtable wrappers */
 @TEMP_vtable_wrap_decls@
 

Modified: branches/libjit_frame_builder/config/gen/makefiles/root.in
==============================================================================
--- branches/libjit_frame_builder/config/gen/makefiles/root.in	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/config/gen/makefiles/root.in	Fri Nov  6 00:46:11 2009	(r42287)
@@ -443,7 +443,6 @@
     $(SRC_DIR)/longopt$(O) \
     $(SRC_DIR)/misc$(O) \
     $(SRC_DIR)/multidispatch$(O) \
-    $(SRC_DIR)/frame_builder$(O) \
     $(SRC_DIR)/frame_builder_libjit$(O) \
     $(SRC_DIR)/nci$(O) \
     $(SRC_DIR)/oo$(O) \
@@ -627,7 +626,6 @@
     $(SRC_DIR)/key.str \
     $(SRC_DIR)/library.str \
     $(SRC_DIR)/multidispatch.str \
-    $(SRC_DIR)/frame_builder.str \
     $(SRC_DIR)/frame_builder_libjit.str \
     $(SRC_DIR)/nci.str \
     $(SRC_DIR)/packfile.str \
@@ -1205,19 +1203,11 @@
 $(SRC_DIR)/exit$(O) : $(GENERAL_H_FILES) $(SRC_DIR)/exit.c
 
 $(SRC_DIR)/nci$(O) : $(GENERAL_H_FILES) $(SRC_DIR)/nci.c $(SRC_DIR)/nci.str \
-        $(SRC_DIR)/frame_builder$(O) \
         $(SRC_DIR)/pmc/pmc_unmanagedstruct.h \
         $(SRC_DIR)/pmc/pmc_managedstruct.h \
         $(SRC_DIR)/pmc/pmc_nci.h \
         $(SRC_DIR)/pmc/pmc_pointer.h
 
-$(SRC_DIR)/frame_builder$(O) : $(SRC_DIR)/frame_builder.h $(GENERAL_H_FILES) \
-        $(SRC_DIR)/frame_builder.c \
-        $(SRC_DIR)/frame_builder.str \
-        $(SRC_DIR)/pmc/pmc_fixedintegerarray.h \
-        $(SRC_DIR)/pmc/pmc_unmanagedstruct.h \
-        $(SRC_DIR)/pmc/pmc_managedstruct.h
-
 $(SRC_DIR)/vtables$(O) : $(GENERAL_H_FILES) $(SRC_DIR)/vtables.c
 
 $(SRC_DIR)/gc/system$(O) : $(GENERAL_H_FILES)  $(SRC_DIR)/gc/gc_private.h

Deleted: branches/libjit_frame_builder/src/frame_builder.c
==============================================================================
--- branches/libjit_frame_builder/src/frame_builder.c	Fri Nov  6 00:46:11 2009	(r42286)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,141 +0,0 @@
-/*
-Copyright (C) 2008-2009, Parrot Foundation.
-$Id$
-*/
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER STOP */
-
-#include "parrot/parrot.h"
-#include "frame_builder.h"
-
-INTVAL
-get_nci_I(PARROT_INTERP, ARGMOD(call_state *st), int n)
-{
-    if (n >= st->src.n)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-            "too few arguments passed to NCI function");
-
-    Parrot_fetch_arg_nci(interp, st);
-
-    return UVal_int(st->val);
-}
-
-FLOATVAL
-get_nci_N(PARROT_INTERP, ARGMOD(call_state *st), int n)
-{
-    if (n >= st->src.n)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-            "too few arguments passed to NCI function");
-
-    Parrot_fetch_arg_nci(interp, st);
-
-    return UVal_num(st->val);
-}
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-STRING*
-get_nci_S(PARROT_INTERP, ARGMOD(call_state *st), int n)
-{
-    /* TODO or act like below? */
-    if (n >= st->src.n)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-            "too few arguments passed to NCI function");
-
-    Parrot_fetch_arg_nci(interp, st);
-
-    return UVal_str(st->val);
-}
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-PMC*
-get_nci_P(PARROT_INTERP, ARGMOD(call_state *st), int n)
-{
-    /*
-     * excessive args are passed as NULL
-     * used by e.g. MMD infix like __add
-     */
-    if (n < st->src.n) {
-        PMC *value;
-        Parrot_fetch_arg_nci(interp, st);
-        value = UVal_pmc(st->val);
-        return PMC_IS_NULL(value) ? (PMC *)NULL : value;
-    }
-    else
-        return NULL;
-}
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-void*
-get_nci_p(PARROT_INTERP, ARGMOD(call_state *st), int n)
-{
-    /*
-     * excessive args are passed as NULL
-     * used by e.g. MMD infix like __add
-     */
-    if (n < st->src.n) {
-        PMC *value;
-        Parrot_fetch_arg_nci(interp, st);
-        value = UVal_pmc(st->val);
-        return PMC_IS_NULL(value) ? (PMC *)NULL : VTABLE_get_pointer(interp, value);
-    }
-    else
-        return NULL;
-}
-
-/*
- * set return value
- */
-void
-set_nci_I(PARROT_INTERP, ARGOUT(call_state *st), INTVAL val)
-{
-    Parrot_init_ret_nci(interp, st, "I");
-    if (st->dest.i < st->dest.n) {
-        UVal_int(st->val) = val;
-        Parrot_convert_arg(interp, st);
-        Parrot_store_arg(interp, st);
-    }
-}
-
-void
-set_nci_N(PARROT_INTERP, ARGOUT(call_state *st), FLOATVAL val)
-{
-    Parrot_init_ret_nci(interp, st, "N");
-    if (st->dest.i < st->dest.n) {
-        UVal_num(st->val) = val;
-        Parrot_convert_arg(interp, st);
-        Parrot_store_arg(interp, st);
-    }
-}
-
-void
-set_nci_S(PARROT_INTERP, ARGOUT(call_state *st), STRING *val)
-{
-    Parrot_init_ret_nci(interp, st, "S");
-    if (st->dest.i < st->dest.n) {
-        UVal_str(st->val) = val;
-        Parrot_convert_arg(interp, st);
-        Parrot_store_arg(interp, st);
-    }
-}
-
-void
-set_nci_P(PARROT_INTERP, ARGOUT(call_state *st), PMC* val)
-{
-    Parrot_init_ret_nci(interp, st, "P");
-    if (st->dest.i < st->dest.n) {
-        UVal_pmc(st->val) = val;
-        Parrot_convert_arg(interp, st);
-        Parrot_store_arg(interp, st);
-    }
-}
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/libjit_frame_builder/src/nci_test.c
==============================================================================
--- branches/libjit_frame_builder/src/nci_test.c	Fri Nov  6 00:33:50 2009	(r42286)
+++ branches/libjit_frame_builder/src/nci_test.c	Fri Nov  6 00:46:11 2009	(r42287)
@@ -110,8 +110,8 @@
 PARROT_DYNEXT_EXPORT void   nci_vfff(float, float, float);
 PARROT_DYNEXT_EXPORT void   nci_vV(const char **);
 PARROT_DYNEXT_EXPORT void   nci_vVVV(const char **, const char **, const char **);
-PARROT_DYNEXT_EXPORT int    nci_i20(int, int, int, int, int, int, int, int, int, int, int, int, int, int,
-                             int, int, int, int, int);
+PARROT_DYNEXT_EXPORT int    nci_i20(int, int, int, int, int, int, int, int, int, int, int, int,
+                                    int, int, int, int, int, int, int);
 
 /* Declarations for callback tests */
 


More information about the parrot-commits mailing list