[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [Qemu-devel] [PATCH v3 02/40] s390x/tcg: Implement VECT
From: |
David Hildenbrand |
Subject: |
Re: [qemu-s390x] [Qemu-devel] [PATCH v3 02/40] s390x/tcg: Implement VECTOR ADD COMPUTE CARRY |
Date: |
Fri, 3 May 2019 14:46:51 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
On 03.05.19 05:45, Richard Henderson wrote:
> On 5/2/19 7:09 AM, David Hildenbrand wrote:
>> 128-bit handling courtesy of Richard H.
>>
>> Signed-off-by: David Hildenbrand <address@hidden>
>> ---
>> target/s390x/insn-data.def | 2 +
>> target/s390x/translate_vx.inc.c | 94 +++++++++++++++++++++++++++++++++
>> 2 files changed, 96 insertions(+)
>
> Reviewed-by: Richard Henderson <address@hidden>
>
>> +static void gen_acc(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b, uint8_t es)
>> +{
>> + const uint8_t msb_bit_nr = NUM_VEC_ELEMENT_BITS(es) - 1;
>> + TCGv_i64 msb_mask = tcg_const_i64(dup_const(es, 1ull << msb_bit_nr));
>> + TCGv_i64 t1 = tcg_temp_new_i64();
>> + TCGv_i64 t2 = tcg_temp_new_i64();
>> + TCGv_i64 t3 = tcg_temp_new_i64();
>> +
>> + /* Calculate the carry into the MSB, ignoring the old MSBs */
>> + tcg_gen_andc_i64(t1, a, msb_mask);
>> + tcg_gen_andc_i64(t2, b, msb_mask);
>> + tcg_gen_add_i64(t1, t1, t2);
>> + /* Calculate the MSB without any carry into it */
>> + tcg_gen_xor_i64(t3, a, b);
>> + /* Calculate the carry out of the MSB in the MSB bit position */
>> + tcg_gen_and_i64(d, a, b);
>> + tcg_gen_and_i64(t1, t1, t3);
>> + tcg_gen_or_i64(d, d, t1);
>> + /* Isolate and shift the carry into position */
>> + tcg_gen_and_i64(d, d, msb_mask);
>> + tcg_gen_shri_i64(d, d, msb_bit_nr);
>> +
>> + tcg_temp_free_i64(t1);
>> + tcg_temp_free_i64(t2);
>> + tcg_temp_free_i64(t3);
>> +}
> ...> +static void gen_acc32_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
>> +{
>> + gen_acc(d, a, b, ES_32);
>> +}
>> +
>> +static void gen_acc_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
>> +{
>> + TCGv_i64 t = tcg_temp_new_i64();
>> +
>> + tcg_gen_add_i64(t, a, b);
>> + tcg_gen_setcond_i64(TCG_COND_LTU, d, t, b);
>> + tcg_temp_free_i64(t);
>> +}
>
> As an aside, I think the 32-bit version should use 32-bit ops, as per
> gen_acc_i64. That would be 4 * 2 operations instead of 2 * 9 over the 128-bit
> vector.
Makes sense, thanks!
>
>
> r~
>
--
Thanks,
David / dhildenb
- [qemu-s390x] [PATCH v3 00/40] s390x/tcg: Vector Instruction Support Part 2, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 01/40] s390x/tcg: Implement VECTOR ADD, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 02/40] s390x/tcg: Implement VECTOR ADD COMPUTE CARRY, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 03/40] s390x/tcg: Implement VECTOR ADD WITH CARRY, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 04/40] s390x/tcg: Implement VECTOR ADD WITH CARRY COMPUTE CARRY, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 05/40] s390x/tcg: Implement VECTOR AND (WITH COMPLEMENT), David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 06/40] s390x/tcg: Implement VECTOR AVERAGE, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 07/40] s390x/tcg: Implement VECTOR AVERAGE LOGICAL, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 09/40] s390x/tcg: Implement VECTOR ELEMENT COMPARE *, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 08/40] s390x/tcg: Implement VECTOR CHECKSUM, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 10/40] s390x/tcg: Implement VECTOR COMPARE *, David Hildenbrand, 2019/05/02
- [qemu-s390x] [PATCH v3 11/40] s390x/tcg: Implement VECTOR COUNT LEADING ZEROS, David Hildenbrand, 2019/05/02