ot("\n");\r
}\r
\r
- if (type==0 && dir) ot(" mov r3,r0 ;@ save old value for V flag calculation\n");\r
+ if (type==0 && dir) ot(" adds r3,r0,#0 ;@ save old value for V flag calculation, also clear V\n");\r
\r
ot(";@ Shift register:\n");\r
if (type==0) ot(" movs r0,r0,%s %s\n",dir?"asl":"asr",pct);\r
ot(" mov r1,#0x80000000\n");\r
ot(" ands r3,r3,r1,asr %s\n", pct);\r
ot(" cmpne r3,r1,asr %s\n", pct);\r
- ot(" biceq r9,r9,#0x10000000\n");\r
+ ot(" eoreq r1,r0,r3\n"); // above check doesn't catch (-1)<<(32+), so we need this\r
+ ot(" tsteq r1,#0x80000000\n");\r
ot(" orrne r9,r9,#0x10000000\n");\r
ot("\n");\r
}\r