Hi, Richard. On 2022/9/30 22:54, Richard Sandiford wrote: > "dongbo (E)" writes: >> >> We tried to put `S_H` in front of `NIL`: >> >> ``` >> >>     #define OP_SVE_Vv_HSD                        \ >> {                                                               \ >>       QLF2(S_H,S_H),                                      \ >>       QLF2(S_S,S_S),                                       \ >>       QLF2(S_D,S_D),                                      \ >>       QLF2(S_H,NIL),                                       \ >>       QLF2(S_S,NIL),                                       \ >>       QLF2(S_D,NIL),                                       \ >>     } >> >> ``` > Yeah, good point. It should be in this order, like you say. > > The fixes you mention look correct to me. > >> But assembler will fail in `match_operands_qualifier` :(. >> >> ``` >> >>     match_operands_qualifier (aarch64_inst *inst, bool update_p) >>     { >>         ... >>         if (!aarch64_find_best_match (...)) >>         ... >>         if (inst->opcode->flags & F_STRICT) >>         { >>             /* Require an exact qualifier match, even for NIL >> qualifiers.  */ >>             nops = aarch64_num_of_operands (inst->opcode); >>             for (i = 0; i < nops; ++i) >>                 if (inst->operands[i].qualifier != qualifiers[i]) >>                     return false; >>         } >>     } >> >> ``` > I think that's a misfeature of the F_STRICT handling. Does it work > with the patch below? We cannot find the `tree-data-ref.cc` in binutils, it is a file in GCC? Is `0001-data-ref-Fix-ranges_maybe_overlap_p-test.patch` the patch you meant to send? We also found a way to fix the F_STRICT matching failure. See patch below. :) The main point is to give another `find_best_match` try when we get a qualifier mismatch for HSD operands. Thanks, Dong Bo