Le 13/08/2015 01:09, Richard Henderson a écrit : > On 08/12/2015 03:43 PM, Laurent Vivier wrote: >> >> >> Le 12/08/2015 19:05, Richard Henderson a écrit : >>> On 08/09/2015 01:13 PM, Laurent Vivier wrote: >>>> Signed-off-by: Laurent Vivier <laur...@vivier.eu> >>>> --- >>>> target-m68k/translate.c | 34 +++++++++++++++++++++++++++++++++- >>>> 1 file changed, 33 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/target-m68k/translate.c b/target-m68k/translate.c >>>> index adf4521..b7d15e9 100644 >>>> --- a/target-m68k/translate.c >>>> +++ b/target-m68k/translate.c >>>> @@ -2035,10 +2035,42 @@ DISAS_INSN(and) >>>> TCGv dest; >>>> TCGv addr; >>>> int opsize; >>>> + int exg_mode; >>>> >>>> + dest = tcg_temp_new(); >>>> + >>>> + /* exg */ >>>> + >>>> + exg_mode = insn & 0x1f8; >>> >>> Likewise, surely we can decode EXG separately from AND, and avoid >>> doing so for >>> coldfire. >> >> I agree for CMPM, not for EXG. >> >> Let's have a look to instructions encoding :) >> >> AND 1100dddooommmrrr >> >> ddd data register number >> ooo opmode, invalid: 011, 111 >> mmmrrr ea mode, if ooo = { 000, 001, 010} invalid: 001000 .. 001111 >> if ooo = { 100, 101, 110} invalid; 000000 .. 001111 >> >> EXG 1100xxx1oooooyyy >> >> xxx register >> ooooo valid: 01000, 01001, 10001 >> yyy register >> >> So, EXG is an AND with >> >> ooo 101, 110 >> mmm 000, 001 >> >> which are invalid combinations for AND. >> >> IMHO, EXG looks like a wart on the AND and should be decoded like that... > > Hmm, perhaps you're right. On the other hand, maybe we should rename > the function and_exg, and also properly check for M68000 before > accepting exg?
I agree. Thank you for all your comments. Laurent