poke-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 2/2] pkl: move type logic from insn `asettb' to new insn `tya


From: Jose E. Marchesi
Subject: Re: [PATCH 2/2] pkl: move type logic from insn `asettb' to new insn `tyasetb'
Date: Sat, 18 Feb 2023 18:43:11 +0100
User-agent: Gnus/5.13 (Gnus v5.13)

Hi Mohammad.
OK for master.

Thanks!

> 2023-02-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>
>       * libpoke/pkl-insn.def (asettb): Remove instruction.
>       (tyasetb): New instruction.
>       * libpoke/pvm.jitter (asettb): Remove.
>       (tyasetb): New instruction to update the array's type bounder.
>       * libpoke/pkl-asm.c (pkl_asm_insn_atoa): Use new instruction.
>       * libpoke/pkl-asm.pks (array_conv_sel): Likewise.
>       (array_conv_siz): Likewise.
> ---
>  ChangeLog            | 10 ++++++++++
>  libpoke/pkl-asm.c    |  6 ++++--
>  libpoke/pkl-asm.pks  | 12 ++++++++----
>  libpoke/pkl-insn.def |  2 +-
>  libpoke/pvm.jitter   | 36 ++++++++++++++++++------------------
>  5 files changed, 41 insertions(+), 25 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 180b0902..1b2df01d 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,13 @@
> +2023-02-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
> +
> +     * libpoke/pkl-insn.def (asettb): Remove instruction.
> +     (tyasetb): New instruction.
> +     * libpoke/pvm.jitter (asettb): Remove.
> +     (tyasetb): New instruction to update the array's type bounder.
> +     * libpoke/pkl-asm.c (pkl_asm_insn_atoa): Use new instruction.
> +     * libpoke/pkl-asm.pks (array_conv_sel): Likewise.
> +     (array_conv_siz): Likewise.
> +
>  2023-02-18  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
>  
>       * libpoke/pkl-asm.c (pkl_asm_insn_atoa): Do not use `PVM_NULL' as
> diff --git a/libpoke/pkl-asm.c b/libpoke/pkl-asm.c
> index 0fde2cd9..4e0bcc33 100644
> --- a/libpoke/pkl-asm.c
> +++ b/libpoke/pkl-asm.c
> @@ -231,8 +231,10 @@ pkl_asm_insn_atoa (pkl_asm pasm,
>           the array.  */
>        bounder = PKL_AST_TYPE_A_BOUNDER (to_type);
>  
> -      pkl_asm_insn (pasm, PKL_INSN_PUSH, bounder);  /* ARR CLS */
> -      pkl_asm_insn (pasm, PKL_INSN_ASETTB);         /* ARR */
> +      pkl_asm_insn (pasm, PKL_INSN_TYPOF);          /* ARR TYP */
> +      pkl_asm_insn (pasm, PKL_INSN_PUSH, bounder);  /* ARR TYP CLS */
> +      pkl_asm_insn (pasm, PKL_INSN_TYASETB);        /* ARR TYP */
> +      pkl_asm_insn (pasm, PKL_INSN_DROP);           /* ARR */
>      }
>    else
>      {
> diff --git a/libpoke/pkl-asm.pks b/libpoke/pkl-asm.pks
> index fd7fe365..c1cd4635 100644
> --- a/libpoke/pkl-asm.pks
> +++ b/libpoke/pkl-asm.pks
> @@ -668,8 +668,10 @@
>          raise
>  .bound_ok:
>          drop3                   ; ARR
> -        push #bounder           ; ARR BOUNDER
> -        asettb                  ; ARR
> +        typof                   ; ARR TYP
> +        push #bounder           ; ARR TYP BOUNDER
> +        tyasetb                 ; ARR TYP
> +        drop                    ; ARR
>          .end
>  
>  ;;; RAS_MACRO_ARRAY_CONV_SIZ
> @@ -697,8 +699,10 @@
>          raise
>  .bound_ok:
>          drop2                   ; ARR
> -        push #bounder           ; ARR BOUNDER
> -        asettb                  ; ARR
> +        typof                   ; ARR TYP
> +        push #bounder           ; ARR TYP BOUNDER
> +        tyasetb                 ; ARR TYP
> +        drop                    ; ARR
>          .end
>  
>  ;;; RAS_MACRO_CDIV
> diff --git a/libpoke/pkl-insn.def b/libpoke/pkl-insn.def
> index c086bdf1..36f495c3 100644
> --- a/libpoke/pkl-insn.def
> +++ b/libpoke/pkl-insn.def
> @@ -293,7 +293,6 @@ PKL_DEF_INSN(PKL_INSN_AREM,"","arem")
>  PKL_DEF_INSN(PKL_INSN_AREF,"","aref")
>  PKL_DEF_INSN(PKL_INSN_AREFO,"","arefo")
>  PKL_DEF_INSN(PKL_INSN_ASET,"","aset")
> -PKL_DEF_INSN(PKL_INSN_ASETTB,"","asettb")
>  
>  /* Struct instructions.  */
>  
> @@ -384,6 +383,7 @@ PKL_DEF_INSN(PKL_INSN_MKTYA,"","mktya")
>  PKL_DEF_INSN(PKL_INSN_TYAGETN,"","tyagetn")
>  PKL_DEF_INSN(PKL_INSN_TYAGETT,"","tyagett")
>  PKL_DEF_INSN(PKL_INSN_TYAGETB,"","tyagetb")
> +PKL_DEF_INSN(PKL_INSN_TYASETB,"","tyasetb")
>  PKL_DEF_INSN(PKL_INSN_TYISA,"","tyisa")
>  
>  /* Branch instructions.  */
> diff --git a/libpoke/pvm.jitter b/libpoke/pvm.jitter
> index b623fc91..03b4c06e 100644
> --- a/libpoke/pvm.jitter
> +++ b/libpoke/pvm.jitter
> @@ -5143,24 +5143,6 @@ instruction arefo ()
>    end
>  end
>  
> -# Instruction: asettb
> -#
> -# Given an array ARR and a closure BOUND, set the later as the array's
> -# bounder function.  This is a function that, once executed with no
> -# arguments, returns the size of the array.
> -#
> -# Stack: ( ARR BOUND -- ARR )
> -
> -instruction asettb () # ( ARR BOUND -- ARR )
> -  code
> -    pvm_val type = PVM_VAL_ARR_TYPE (JITTER_UNDER_TOP_STACK ());
> -
> -    PVM_ASSERT (PVM_VAL_TYP_CODE (type) == PVM_TYPE_ARRAY);
> -    PVM_VAL_TYP_A_BOUND (type) = JITTER_TOP_STACK ();
> -    JITTER_DROP_STACK ();
> -  end
> -end
> -
>  
>  ## Struct instructions
>  
> @@ -6266,6 +6248,24 @@ instruction tyagetb ()
>    end
>  end
>  
> +# Instruction: tyasetb
> +#
> +# Given an array ARR and a closure BOUND, set the later as the array's
> +# bounder function.  This is a function that, once executed with no
> +# arguments, returns the size of the array or null.
> +#
> +# Stack: ( TYPE BOUND -- TYPE )
> +
> +instruction tyasetb ()
> +  code
> +    pvm_val type = JITTER_UNDER_TOP_STACK ();
> +
> +    PVM_ASSERT (PVM_VAL_TYP_CODE (type) == PVM_TYPE_ARRAY);
> +    PVM_VAL_TYP_A_BOUND (type) = JITTER_TOP_STACK ();
> +    JITTER_DROP_STACK ();
> +  end
> +end
> +
>  # Instruction: mktyc
>  #
>  # Given a list of argument types, a return type and a number of



reply via email to

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