- if (shift) ot(" mov r1,r%d,asr #%d\n",v,shift);\r
- else if (v!=1) ot(" mov r1,r%d\n",v);\r
+ if (shift)\r
+ {\r
+ ot(" mov r1,r%d,lsr #%d\n",v,shift);\r
+ }\r
+ else if (v != 1 || (size < 2 && type != earwt_zero_extend))\r
+ {\r
+ switch (size) {\r
+ case 0:\r
+ ot(" and r1,r%d,#0xff\n",v);\r
+ break;\r
+ case 1:\r
+ if (type != earwt_zero_extend)\r
+ {\r
+ ZeroExtend(1, v, size);\r
+ break;\r
+ }\r
+ // fallthrough\r
+ case 2:\r
+ default:\r
+ ot(" mov r1,r%d\n",v);\r
+ break;\r
+ }\r
+ }\r