Sky Flyer via llvm-dev
2016-Jan-28 09:31 UTC
[llvm-dev] Decoding Conflict - Decoding a register value
Hello all, I am having a decoding conflict which practically is not a conflict but I don't know how to resolve it. Here is the conflict: TST8a 0011000000000_ TST8d 0011000000___0 The conflict is in the register values. it is actually like this: TST8a 0011000000000*a* TST8d 0011000000*ddd*0 *a* can be both 0 and 1. but the value for the register *d* as defined in RegisterInfo.td starts from one (def D0 : TestReg<0x01, "d0">,). I mean *ddd* is greater equal than one. How can I tell the Tabelgen/disassembler that *ddd > 0 *so that I don't get any conflict? (There is no such a case that ddd is 0b000 so that the TST8a and TST8d cannot be distinguishable!) I don't know how clear I described, let me know if I have to explain it better. Cheers, ES -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160128/79324217/attachment.html>
Joachim Durchholz via llvm-dev
2016-Jan-28 10:05 UTC
[llvm-dev] Decoding Conflict - Decoding a register value
Am 28.01.2016 um 10:31 schrieb Sky Flyer via llvm-dev:> Hello all, > > I am having a decoding conflict which practically is not a conflict but I > don't know how to resolve it. > > Here is the conflict: > TST8a 0011000000000_ > TST8d 0011000000___0 > > The conflict is in the register values. it is actually like this: > > TST8a 0011000000000*a* > TST8d 0011000000*ddd*0How should 00110000000001*0 decode? AFAICT that would match both patterns and satisfy d >= 1, so in the situation as stated there is indeed a conflict. (Disclaimer: I know nothing about the decoding infrastructure you are using, I'm going by your problem statement and by what I learned from toying with instruction decoding with x86 and 68k, decades ago.) Regards, Jo