Hi! On Tue, Jul 07, 2020 at 04:39:58PM +0800, luoxhu wrote: > > Lots of questions, sorry! > > Thanks for the nice suggestions of the initial patch contains many issues:),
Pretty much all of it should *work*, it just can be improved and simplified quite a bit :-) > For this case, %1:SF matches with "=wa"? And how to construct cases to > match("=?r", "wa") and ("=!r", "r") combinations, please? operands[0], not operands[1]? Simple testcases will not put the output into a GPR, unless you force the compiler to do that, because of the ? and !. Often you can just do asm("#" : "+r"(x)); to force "x" into a GPR at that point of the program. But there is nothing stopping the compiler from copying it back to a VSR where it thinks that is cheaper ;-) So maybe this pattern should just have the GPR-to-VSR alternative? It does not look like the GPR destination variants are useful? > + rtx op0 = operands[0]; > + rtx op1 = operands[1]; > + rtx op2 = operands[2]; (Please just write out operands[N] everywhere). > + if (GET_CODE (operands[2]) == SCRATCH) > + op2 = gen_reg_rtx (DImode); > + > + rtx mask = GEN_INT (HOST_WIDE_INT_M1U << 32); > + emit_insn (gen_anddi3 (op2, op1, mask)); Groovy :-) So, it looks like you can remove the ? and ! alternatives, leaving just the first alternative? Segher