Re: [kvm-unit-tests PATCH v3 7/8] s390x: Add vector tests

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

 



On 27.03.2018 13:55, Janosch Frank wrote:
> Short test of the vector, vector enhancement 1 and vector bcd
> facility.
> 
> Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxxxxxxx>
> ---
>  lib/s390x/asm/arch_def.h |  18 +++++++
>  s390x/Makefile           |   1 +
>  s390x/unittests.cfg      |   3 ++
>  s390x/vector.c           | 134 +++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 156 insertions(+)
>  create mode 100644 s390x/vector.c
> 
> diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
> index b67afac..99abe18 100644
> --- a/lib/s390x/asm/arch_def.h
> +++ b/lib/s390x/asm/arch_def.h
> @@ -183,6 +183,24 @@ static inline uint64_t stctg(int cr)
>  	return value;
>  }
>  
> +static inline void ctl_set_bit(int cr, unsigned int bit)
> +{
> +        uint64_t reg;
> +
> +	reg = stctg(cr);
> +	reg |= 1UL << bit;
> +	lctlg(cr, reg);
> +}
> +
> +static inline void ctl_clear_bit(int cr, unsigned int bit)
> +{
> +        uint64_t reg;
> +
> +	reg = stctg(cr);
> +	reg &= ~(1UL << bit);
> +	lctlg(cr, reg);
> +}
> +
>  static inline uint64_t extract_psw_mask(void)
>  {
>  	uint32_t mask_upper = 0, mask_lower = 0;
> diff --git a/s390x/Makefile b/s390x/Makefile
> index d80ca96..7188daa 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -7,6 +7,7 @@ tests += $(TEST_DIR)/skey.elf
>  tests += $(TEST_DIR)/diag10.elf
>  tests += $(TEST_DIR)/pfmf.elf
>  tests += $(TEST_DIR)/cmm.elf
> +tests += $(TEST_DIR)/vector.elf
>  
>  all: directories test_cases
>  
> diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
> index 63135d5..3943861 100644
> --- a/s390x/unittests.cfg
> +++ b/s390x/unittests.cfg
> @@ -49,3 +49,6 @@ file = pfmf.elf
>  
>  [cmm]
>  file = cmm.elf
> +
> +[vector]
> +file = vector.elf
> diff --git a/s390x/vector.c b/s390x/vector.c
> new file mode 100644
> index 0000000..42550d7
> --- /dev/null
> +++ b/s390x/vector.c
> @@ -0,0 +1,134 @@
[...]
> +/* z14 vector extension test */
> +static void test_ext1_nand(void)
> +{
> +	bool has_vext = test_facility(134);
> +	static struct prm {
> +		__uint128_t a,b,c;
> +	} prm __attribute__((aligned(16)));
> +
> +	report_xfail("Vector extensions 1 available", !has_vext, has_vext);
> +	if (!has_vext)
> +		return;
> +
> +	memset(&prm.a, 0xff, 16);
> +	prm.b = prm.a;

The other functions now pre-initialize prm.c, too, so I think we should
do that here, too? Maybe simply replace the above two lines with:

	memset(&prm, 0xff, sizeof(prm));

?

(In case that's the only problem in this series, I could also do that
while picking up the patches if you agree, so you don't have to respin
just because of this)

> +	asm volatile(" .machine z13\n"
> +		     " vl 0, %[v1]\n"
> +		     " vl 1, %[v2]\n"
> +		     " .byte 0xe7, 0x20, 0x10, 0x00, 0x00, 0x6e\n" /* vnn */
> +		     " vst 2, %[v3]\n"
> +		     : [v3]  "=Q" (prm.c)
> +		     : [v1]  "Q" (prm.a), [v2]  "Q" (prm.b)
> +		     : "v0", "v1", "v2", "memory");
> +	report("nand ff", !prm.c);
> +}

 Thomas



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux