poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] pvm: add new function to get current dispatch


From: Jose E. Marchesi
Subject: Re: [PATCH v2] pvm: add new function to get current dispatch
Date: Wed, 11 Jan 2023 22:58:03 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Hi Mohammad.

Thanks for the patch.  OK for master.

> 2023-01-11  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>
>       * libpoke/pvm.jitter (wrapped-globals): Add
>       pvm_literal_dispatch_name.
>       (pvm_literal_dispatch_name): New global constant.
>       (vmdisp): New instruction for pushing the name of current
>       dispatching strategy to the stack.
>       * libpoke/pkl-rt.pk (vm_dispatch): New function.
>       * doc/poke.texi (.vm dispatch): Add new subsection.
>       * poke/pk-cmd-vm.c (pk_cmd_vm_dispatch): New function.
>       (vm_dispatch_cmd): New variable.
>       (vm_cmds): Add `vm_dispatch_cmd' command.
>       * poke/pk-help.pk (.vm topic): Add `.vm dispatch'.
>       * poke/poke.pk (pk_print_vm_dispatch): New function.
> ---
>
> Hello Jose.
>
> On Wed, Jan 11, 2023 at 01:42:06PM +0100, Jose E. Marchesi wrote:
>> 1) To add a corresponding `.vm dispatch' command to poke.
>> 2) To add a help topic for it in poke/pk-help.pk
>> 3) To document vm_dispatch in the @section VM in the manual.
>
> Fixed.
> Thanks!
>
>  ChangeLog          | 15 +++++++++++++++
>  doc/poke.texi      | 23 +++++++++++++++++++++++
>  libpoke/pkl-rt.pk  |  5 +++++
>  libpoke/pvm.jitter | 14 ++++++++++++++
>  poke/pk-cmd-vm.c   | 20 ++++++++++++++++++++
>  poke/pk-help.pk    |  5 ++++-
>  poke/poke.pk       |  7 +++++++
>  7 files changed, 88 insertions(+), 1 deletion(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index e9a306f5..d1a75413 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,18 @@
> +2023-01-11  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
> +
> +     * libpoke/pvm.jitter (wrapped-globals): Add
> +     pvm_literal_dispatch_name.
> +     (pvm_literal_dispatch_name): New global constant.
> +     (vmdisp): New instruction for pushing the name of current
> +     dispatching strategy to the stack.
> +     * libpoke/pkl-rt.pk (vm_dispatch): New function.
> +     * doc/poke.texi (.vm dispatch): Add new subsection.
> +     * poke/pk-cmd-vm.c (pk_cmd_vm_dispatch): New function.
> +     (vm_dispatch_cmd): New variable.
> +     (vm_cmds): Add `vm_dispatch_cmd' command.
> +     * poke/pk-help.pk (.vm topic): Add `.vm dispatch'.
> +     * poke/poke.pk (pk_print_vm_dispatch): New function.
> +
>  2023-01-11  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>  
>       * libpoke/pvm.jitter (wrapped-globals): Add
> diff --git a/doc/poke.texi b/doc/poke.texi
> index 9ca92915..54cd398f 100644
> --- a/doc/poke.texi
> +++ b/doc/poke.texi
> @@ -8800,6 +8800,7 @@ with the PVM.
>  @menu
>  * @:.vm disassemble::                PVM and native disassembler.
>  * @:.vm profile::               Profiling Poke programs.
> +* @:.vm dispatch                PVM dispatching strategy.
>  @end menu
>  
>  @node @:.vm disassemble
> @@ -8841,6 +8842,28 @@ Resets the profiling counts in the virtual machine.
>  Outputs a summary with both counts and sample information.
>  @end table
>  
> +@node @:.vm dispatch
> +@subsection @code{.vm dispatch}
> +@cindex dispatch
> +
> +The @command{.vm dispatch} command prints the current dispatching
> +strategy in PVM (provided by Jitter).  There are four different kind
> +of dispatches:
> +
> +@itemize
> +@item switch
> +@item direct threading
> +@item minimal threading
> +@item no threading
> +@end itemize
> +
> +@code{no threading} is the fastest one and the least portable
> +dispatch, and @code{switch} is the slowest and the most portable
> +one.
> +
> +Jitter by default will use the most efficient dispatch which is
> +both stable and available for the current configuration.
> +
>  @node exit command
>  @section @code{.exit}
>  @cindex @code{.exit}
> diff --git a/libpoke/pkl-rt.pk b/libpoke/pkl-rt.pk
> index 30cfb33e..f81b17f6 100644
> --- a/libpoke/pkl-rt.pk
> +++ b/libpoke/pkl-rt.pk
> @@ -290,6 +290,11 @@ immutable fun vm_set_omode = (int<32> omode) void:
>    asm ("popom" :: omode);
>  }
>  
> +immutable fun vm_dispatch = string:
> +{
> +  return asm string: ("vmdisp");
> +}
> +
>  immutable fun __pkl_unsafe_string_set = (string dst, uint<64> index,
>                                           string str) void:
>  {
> diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
> index 0e547786..d81caa76 100644
> --- a/libpoke/pvm.jitter
> +++ b/libpoke/pvm.jitter
> @@ -165,6 +165,7 @@ wrapped-globals
>    pvm_literal_newline
>    pvm_literal_formatf_fmt
>    pvm_literal_formatf_styles
> +  pvm_literal_dispatch_name
>    libpoke_term_if
>    pvm_exception_names
>  end
> @@ -934,6 +935,7 @@ late-c
>      static const char *pvm_literal_newline = "\n";
>      static const char *pvm_literal_formatf_fmt = "%%.%u%c";
>      static const char pvm_literal_formatf_styles[3] = { 'f', 'e', 'g' };
> +    static const char *pvm_literal_dispatch_name = 
> PVM_DISPATCH_HUMAN_READABLE;
>  
>  #define E(key) [PVM_E_##key] = PVM_E_##key##_NAME,
>      static const char *pvm_exception_names[] = {
> @@ -6780,6 +6782,18 @@ instruction note (?n pvm_literal_printer)
>    end
>  end
>  
> +# Instruction: vmdisp
> +#
> +# Pushes the current dispatching strategy of current VM to the stack.
> +#
> +# Stack: ( -- STR )
> +
> +instruction vmdisp ()
> +  code
> +    JITTER_PUSH_STACK (pvm_make_string (pvm_literal_dispatch_name));
> +  end
> +end
> +
>  
>  ## System Interaction Instructions
>  
> diff --git a/poke/pk-cmd-vm.c b/poke/pk-cmd-vm.c
> index 54c92780..90b25c33 100644
> --- a/poke/pk-cmd-vm.c
> +++ b/poke/pk-cmd-vm.c
> @@ -104,6 +104,21 @@ pk_cmd_vm_profile_reset (int argc, struct pk_cmd_arg 
> argv[], uint64_t uflags)
>    return 1;
>  }
>  
> +static int
> +pk_cmd_vm_dispatch (int argc, struct pk_cmd_arg argv[], uint64_t uflags)
> +{
> +  pk_val vm_dispatch, retval, exception;
> +
> +  vm_dispatch = pk_decl_val (poke_compiler, "pk_print_vm_dispatch");
> +  assert (vm_dispatch != PK_NULL);
> +
> +  if (pk_call (poke_compiler, vm_dispatch, &retval, &exception, 0)
> +               == PK_ERROR
> +      || exception != PK_NULL)
> +    assert (0); /* This shouldn't happen.  */
> +  return 1;
> +}
> +
>  extern struct pk_cmd null_cmd; /* pk-cmd.c  */
>  
>  const struct pk_cmd vm_disas_exp_cmd =
> @@ -166,10 +181,15 @@ const struct pk_cmd vm_profile_cmd =
>  
>  struct pk_trie *vm_trie;
>  
> +const struct pk_cmd vm_dispatch_cmd =
> +  {"dispatch", "", "", 0, NULL, NULL, pk_cmd_vm_dispatch,
> +   "vm dispatch", NULL};
> +
>  const struct pk_cmd *vm_cmds[] =
>    {
>      &vm_disas_cmd,
>      &vm_profile_cmd,
> +    &vm_dispatch_cmd,
>      &null_cmd
>    };
>  
> diff --git a/poke/pk-help.pk b/poke/pk-help.pk
> index 53b2c7cc..0885aa54 100644
> --- a/poke/pk-help.pk
> +++ b/poke/pk-help.pk
> @@ -330,7 +330,10 @@ Perform an operation related to the Poke Virtual Machine.
>  .vm profile reset
>    Reset the profiling counters.
>  .vm profile show
> -  Print a report with collected profiling information."
> +  Print a report with collected profiling information.
> +
> +.vm dispatch
> +  Print current dispatching strategy."
>    };
>  
>  pk_help_add_topic
> diff --git a/poke/poke.pk b/poke/poke.pk
> index c13364d2..b1797015 100644
> --- a/poke/poke.pk
> +++ b/poke/poke.pk
> @@ -80,6 +80,13 @@ fun pk_bounder_unbounded = any:
>    return asm any: ("push 7");
>  }
>  
> +/* Print current dispatching strategy of PVM.  */
> +
> +fun pk_print_vm_dispatch = void:
> +{
> +  printf ("%s\n", vm_dispatch);
> +}
> +
>  /* Load some poke subsystems.  */
>  
>  load "pk-table.pk";



reply via email to

[Prev in Thread] Current Thread [Next in Thread]