fix another case of movem PC saving
authornotaz <notasas@gmail.com>
Sat, 18 Oct 2014 17:22:32 +0000 (20:22 +0300)
committernotaz <notasas@gmail.com>
Sat, 18 Oct 2014 17:22:32 +0000 (20:22 +0300)
Main.cpp
OpMove.cpp
app.h

index 13efac2..b6f49c3 100644 (file)
--- a/Main.cpp
+++ b/Main.cpp
@@ -169,13 +169,14 @@ static void AddressErrorWrapper(char rw, const char *dataprg, int iw)
 }\r
 #endif\r
 \r
-void FlushPC(void)\r
+void FlushPC(int force)\r
 {\r
 #if MEMHANDLERS_NEED_PC\r
-  if (pc_dirty)\r
-    ot("  str r4,[r7,#0x40] ;@ Save PC\n");\r
-#endif\r
+  force |= pc_dirty;\r
   pc_dirty = 0;\r
+#endif\r
+  if (force)\r
+    ot("  str r4,[r7,#0x40] ;@ Save PC\n");\r
 }\r
 \r
 static void PrintFramework()\r
index 338dab1..0d5f670 100644 (file)
@@ -406,7 +406,7 @@ int OpMovem(int op)
   EaCalc(6,0x003f,cea,size);\r
 \r
   // must save PC, need a spare register\r
-  FlushPC();\r
+  FlushPC(1);\r
 \r
   ot(";@ r4=Register Index*4:\n");\r
   if (decr) ot("  mov r4,#0x40 ;@ order reversed for -(An)\n");\r
diff --git a/app.h b/app.h
index 9d01957..5a064ab 100644 (file)
--- a/app.h
+++ b/app.h
@@ -58,7 +58,7 @@ extern int  arm_op_count; // for stats
 void ot(const char *format, ...);\r
 void ltorg();\r
 int MemHandler(int type,int size,int addrreg=0,int need_addrerr_check=1);\r
-void FlushPC(void);\r
+void FlushPC(int force=0);\r
 \r
 // OpAny.cpp\r
 extern int g_op;\r