[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v5 07/11] target/s390x: vxeh2: vector {load, store} byte reve
From: |
David Hildenbrand |
Subject: |
Re: [PATCH v5 07/11] target/s390x: vxeh2: vector {load, store} byte reversed elements |
Date: |
Wed, 23 Mar 2022 15:28:31 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 |
> +static DisasJumpType op_vlbr(DisasContext *s, DisasOps *o)
> +{
> + const uint8_t es = get_field(s, m3);
> + TCGv_i64 t0, t1;
> +
> + if (es < ES_16 || es > ES_128) {
> + gen_program_exception(s, PGM_SPECIFICATION);
> + return DISAS_NORETURN;
> + }
> +
> + t0 = tcg_temp_new_i64();
> + t1 = tcg_temp_new_i64();
> +
> +
> + if (es == ES_128) {
> + tcg_gen_qemu_ld_i64(t1, o->addr1, get_mem_index(s), MO_LEUQ);
> + gen_addi_and_wrap_i64(s, o->addr1, o->addr1, 8);
> + tcg_gen_qemu_ld_i64(t0, o->addr1, get_mem_index(s), MO_LEUQ);
> + goto write;
> + }
> +
> + /* Begin with byte reversed doublewords... */
> + tcg_gen_qemu_ld_i64(t0, o->addr1, get_mem_index(s), MO_LEUQ);
> + gen_addi_and_wrap_i64(s, o->addr1, o->addr1, 8);
> + tcg_gen_qemu_ld_i64(t1, o->addr1, get_mem_index(s), MO_LEUQ);
> +
> + /*
> + * For 16 and 32-bit elements, the doubleword bswap also reversed
> + * the order of the elements. Perform a larger order swap to put
> + * them back into place. For the 128-bit "element", finish the
> + * bswap by swapping the doublewords.
The last sentence still needs to go.
[...]
> +static DisasJumpType op_vstbr(DisasContext *s, DisasOps *o)
> +{
> + const uint8_t es = get_field(s, m3);
> + TCGv_i64 t0, t1;
> +
> + if (es < ES_16 || es > ES_128) {
> + gen_program_exception(s, PGM_SPECIFICATION);
> + return DISAS_NORETURN;
> + }
> +
> + /* Probe write access before actually modifying memory */
> + gen_helper_probe_write_access(cpu_env, o->addr1, tcg_constant_i64(16));
> +
> + t0 = tcg_temp_new_i64();
> + t1 = tcg_temp_new_i64();
> +
> +
> + if (es == ES_128) {
> + read_vec_element_i64(t1, get_field(s, v1), 0, ES_64);
> + read_vec_element_i64(t0, get_field(s, v1), 1, ES_64);
> + goto write;
> + }
> +
> + read_vec_element_i64(t0, get_field(s, v1), 0, ES_64);
> + read_vec_element_i64(t1, get_field(s, v1), 1, ES_64);
> +
> + /*
> + * For 16 and 32-bit elements, the doubleword bswap below will
> + * reverse the order of the elements. Perform a larger order
> + * swap to put them back into place. For the 128-bit "element",
> + * finish the bswap by swapping the doublewords.
Dito.
I assume Thomas can fixup when applying.
--
Thanks,
David / dhildenb
- [PATCH v5 00/11] s390x/tcg: Implement Vector-Enhancements Facility 2, David Miller, 2022/03/23
- [PATCH v5 01/11] tcg: Implement tcg_gen_{h,w}swap_{i32,i64}, David Miller, 2022/03/23
- [PATCH v5 02/11] target/s390x: vxeh2: vector convert short/32b, David Miller, 2022/03/23
- [PATCH v5 03/11] target/s390x: vxeh2: vector string search, David Miller, 2022/03/23
- [PATCH v5 04/11] target/s390x: vxeh2: Update for changes to vector shifts, David Miller, 2022/03/23
- [PATCH v5 06/11] target/s390x: vxeh2: vector {load, store} elements reversed, David Miller, 2022/03/23
- [PATCH v5 05/11] target/s390x: vxeh2: vector shift double by bit, David Miller, 2022/03/23
- [PATCH v5 07/11] target/s390x: vxeh2: vector {load, store} byte reversed elements, David Miller, 2022/03/23
- Re: [PATCH v5 07/11] target/s390x: vxeh2: vector {load, store} byte reversed elements,
David Hildenbrand <=
- [PATCH v5 11/11] target/s390x: Fix writeback to v1 in helper_vstl, David Miller, 2022/03/23
- [PATCH v5 10/11] tests/tcg/s390x: Tests for Vector Enhancements Facility 2, David Miller, 2022/03/23
- [PATCH v5 09/11] target/s390x: add S390_FEAT_VECTOR_ENH2 to qemu CPU model, David Miller, 2022/03/23
- [PATCH v5 08/11] target/s390x: vxeh2: vector {load, store} byte reversed element, David Miller, 2022/03/23