[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