Introduce two new setcond opcode variants which produce -1 instead of 1 when the condition. For most of our hosts, producing -1 is just as easy as 1, and avoid requiring a separate negate instruction.
Use the new opcode in tcg/tcg-op-gvec.c for integral expansion of generic vector operations. I looked through target/ for obvious pairings of setcond and neg. r~ Richard Henderson (24): tcg: Introduce negsetcond opcodes tcg: Use tcg_gen_negsetcond_* target/alpha: Use tcg_gen_movcond_i64 in gen_fold_mzero target/arm: Use tcg_gen_negsetcond_* target/m68k: Use tcg_gen_negsetcond_* target/openrisc: Use tcg_gen_negsetcond_* target/ppc: Use tcg_gen_negsetcond_* target/sparc: Use tcg_gen_movcond_i64 in gen_edge target/tricore: Replace gen_cond_w with tcg_gen_negsetcond_tl tcg/ppc: Implement negsetcond_* tcg/ppc: Use the Set Boolean Extension tcg/aarch64: Implement negsetcond_* tcg/arm: Implement negsetcond_i32 tcg/riscv: Implement negsetcond_* tcg/s390x: Implement negsetcond_* tcg/sparc64: Implement negsetcond_* tcg/i386: Merge tcg_out_brcond{32,64} tcg/i386: Merge tcg_out_setcond{32,64} tcg/i386: Merge tcg_out_movcond{32,64} tcg/i386: Add cf parameter to tcg_out_cmp tcg/i386: Use CMP+SBB in tcg_out_setcond tcg/i386: Clear dest first in tcg_out_setcond if possible tcg/i386: Use shift in tcg_out_setcond tcg/i386: Implement negsetcond_* docs/devel/tcg-ops.rst | 6 + include/tcg/tcg-op-common.h | 4 + include/tcg/tcg-op.h | 2 + include/tcg/tcg-opc.h | 2 + include/tcg/tcg.h | 1 + tcg/aarch64/tcg-target.h | 2 + tcg/arm/tcg-target.h | 1 + tcg/i386/tcg-target.h | 2 + tcg/loongarch64/tcg-target.h | 3 + tcg/mips/tcg-target.h | 2 + tcg/ppc/tcg-target.h | 2 + tcg/riscv/tcg-target.h | 2 + tcg/s390x/tcg-target.h | 2 + tcg/sparc64/tcg-target.h | 2 + tcg/tci/tcg-target.h | 2 + target/alpha/translate.c | 7 +- target/arm/tcg/translate-a64.c | 22 +- target/arm/tcg/translate.c | 12 +- target/m68k/translate.c | 24 +- target/openrisc/translate.c | 6 +- target/sparc/translate.c | 17 +- target/tricore/translate.c | 16 +- tcg/optimize.c | 41 +++- tcg/tcg-op-gvec.c | 6 +- tcg/tcg-op.c | 42 +++- tcg/tcg.c | 6 + target/ppc/translate/fixedpoint-impl.c.inc | 6 +- target/ppc/translate/vmx-impl.c.inc | 8 +- tcg/aarch64/tcg-target.c.inc | 12 + tcg/arm/tcg-target.c.inc | 9 + tcg/i386/tcg-target.c.inc | 265 +++++++++++++-------- tcg/ppc/tcg-target.c.inc | 149 ++++++++---- tcg/riscv/tcg-target.c.inc | 45 ++++ tcg/s390x/tcg-target.c.inc | 78 ++++-- tcg/sparc64/tcg-target.c.inc | 36 ++- 35 files changed, 572 insertions(+), 270 deletions(-) -- 2.34.1