[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 01/13] target-arm: A64: add support for conditio
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [PATCH 01/13] target-arm: A64: add support for conditional select |
Date: |
Fri, 06 Dec 2013 11:26:37 +1300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0 |
On 12/06/2013 10:51 AM, Peter Maydell wrote:
> + if (cond >= 0x0e) { /* condition "always" */
> + tcg_src = read_cpu_reg(s, rn, sf);
> + tcg_gen_mov_i64(tcg_rd, tcg_src);
I wonder if it's worth adding that 0x0[ef] case to the generic condition
processing rather than keep replicating it everywhere.
> + } else {
> + /* OPTME: we could use movcond here, at the cost of duplicating
> + * a lot of the arm_gen_test_cc() logic.
> + */
Honestly, arm_gen_test_cc should get refactored to a real test (as opposed to
branch) sooner rather than later.
Longer term it's probably worth recognizing the special case of Rm==31 &&
Rn==31 && else_inc as setcond as opposed to movcond.
> + arm_gen_test_cc(cond, label_match);
> + /* nomatch: */
> + tcg_src = read_cpu_reg(s, rm, sf);
> + tcg_gen_mov_i64(tcg_rd, tcg_src);
> + if (else_inv) {
> + tcg_gen_not_i64(tcg_rd, tcg_rd);
> + }
> + if (else_inc) {
> + tcg_gen_addi_i64(tcg_rd, tcg_rd, 1);
> + }
I think better as
if (else_inv && else_inc) {
tcg_gen_neg_i64(tcg_rd, tcg_src);
} else if (else_inv) {
tcg_gen_not_i64(tcg_rd, tcg_src);
} else if (else_inc) {
tcg_gen_addi_i64(tcg_rd, tcg_src, 1);
} else {
tcg_gen_mov_i64(tcg_rd, tcg_src);
}
> + if (!sf) {
> + tcg_gen_ext32u_i64(tcg_rd, tcg_rd);
> + }
I do wonder about the usefulness of passing SF (as opposed to hardcoding 1) to
read_cpu_reg to begin, since the ext32u that it generates is redundant with the
one here at the end, and likely cannot be optimized away.
r~
- [Qemu-devel] [PATCH 00/13] target-arm: A64 decoder set 2: misc logic and bit ops, Peter Maydell, 2013/12/05
- [Qemu-devel] [PATCH 08/13] target-arm: A64: add support for 1-src RBIT insn, Peter Maydell, 2013/12/05
- [Qemu-devel] [PATCH 10/13] target-arm: A64: add support for bitfield insns, Peter Maydell, 2013/12/05
- [Qemu-devel] [PATCH 13/13] target-arm: A64: add support for logical (immediate) insns, Peter Maydell, 2013/12/05
- [Qemu-devel] [PATCH 04/13] target-arm: A64: add support for EXTR, Peter Maydell, 2013/12/05
- [Qemu-devel] [PATCH 01/13] target-arm: A64: add support for conditional select, Peter Maydell, 2013/12/05
[Qemu-devel] [PATCH 11/13] host-utils: add clrsb32/64 - count leading redundant sign bits, Peter Maydell, 2013/12/05
[Qemu-devel] [PATCH 07/13] target-arm: A64: add support for 1-src data processing and CLZ, Peter Maydell, 2013/12/05
[Qemu-devel] [PATCH 05/13] target-arm: A64: add support for 2-src data processing and DIV, Peter Maydell, 2013/12/05