Hi,
> we should probably do:
> if(srcreg != dstreg) m68k_areg(regs, srcreg) += 16;\r\n");
> m68k_areg(regs, dstreg) += 16;\r\n");
OK, I added your patch plus other MOVE16 instructions in the table68k.
For that purpose, I added "Al" meaning absolute long. I also enhanced
the table68k for better (I hope) flag usage information and control flow
information (an extra field).
Some optimizations can still be made for MOVE16 instructions by using
do_put/do_get mem functions instead of put/get functions and thus
avoiding the double byteswapping of the data. But as we are not in a
critical point yet, I left those as is ;-)
The MOVE16 instructions in the new table68k look like:
1111 0110 0010 0rrr:40:-----:-----:--:12: MOVE16 ArP,ARP
1111 0110 00ss sSSS:40:-----:-----:--:12: MOVE16 s[Dreg-Aipi],Al
1111 0110 00dd dDDD:40:-----:-----:--:12: MOVE16 Al,d[Areg-Aipi]
1111 0110 00ss sSSS:40:-----:-----:--:12: MOVE16 s[Aind],Al
1111 0110 00dd dDDD:40:-----:-----:--:12: MOVE16 Al,d[Aipi-Aind]
% EmulOp instructions
0111 0001 0000 0000:00:-----:-----:-R:00: EMULOP_RETURN
0111 0001 EEEE EEEE:00:-----:-----:--:10: EMULOP #E
Since, I also temporarily disabled ARM, M68K, SPARC optimizations, I
won't commit before tommorrow night. I deactivated those because
optimized flag handling are now used under a common interface. i.e.
optflag_test_*, optflag_add_*, as in the latest UAE sources.
Bye.
--
Gwenolé Beauchesne
|