// Emit a Move opcode, 00xxdddd ddssssss\r
int OpMove(int op)\r
{\r
+ EaRWType eatype;\r
int sea=0,tea=0;\r
int size=0,use=0;\r
int movea=0;\r
\r
if (movea==0)\r
{\r
- EaCalcRead(-1,1,sea,size,0x003f,earwt_sign_extend,1);\r
- OpGetFlagsNZ(1);\r
+ if (sea < 0x10 && size < 2)\r
+ {\r
+ eatype = earwt_zero_extend;\r
+ EaCalcRead(-1,1,sea,size,0x003f,eatype);\r
+ ot(" movs r2,r1,lsl #%d\n",size?16:24);\r
+ OpGetFlagsNZ(2);\r
+ }\r
+ else\r
+ {\r
+ eatype = earwt_shifted_up;\r
+ EaCalcRead(-1,1,sea,size,0x003f,eatype,1);\r
+ OpGetFlagsNZ(1);\r
+ }\r
ot("\n");\r
}\r
else\r
{\r
- EaCalcRead(-1,1,sea,size,0x003f,earwt_sign_extend);\r
+ eatype = earwt_sign_extend;\r
+ EaCalcRead(-1,1,sea,size,0x003f,eatype);\r
size=2; // movea always expands to 32-bits\r
}\r
\r
else\r
#endif\r
{\r
- EaCalc (0,0x0e00,tea,size,earwt_msb_dont_care);\r
- EaWrite(0, 1,tea,size,0x0e00,earwt_msb_dont_care);\r
+ EaCalc (0,0x0e00,tea,size,eatype);\r
+ EaWrite(0, 1,tea,size,0x0e00,eatype);\r
}\r
\r
#if CYCLONE_FOR_GENESIS && !MEMHANDLERS_CHANGE_CYCLES\r