fix compatibility with ancient gas
[cyclone68000.git] / OpAny.cpp
index 9d45a01..64e2bfe 100644 (file)
--- a/OpAny.cpp
+++ b/OpAny.cpp
@@ -112,7 +112,7 @@ void OpEnd(int sea, int tea)
   }\r
   if (opend_check_interrupt)\r
   {\r
-    ot("  blt CycloneEnd\n");\r
+    ot("  ble CycloneEnd\n");\r
     ot(";@ CheckInterrupt:\n");\r
     if (!opend_check_trace)\r
       ot("  ldr r1,[r7,#0x44]\n");\r
@@ -126,7 +126,7 @@ void OpEnd(int sea, int tea)
   }\r
   else\r
   {\r
-    ot("  ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
+    ot("  ldrgt pc,[r6,r8,asl #2] ;@ Jump to opcode handler\n");\r
     ot("  b CycloneEnd\n");\r
   }\r
   ot("\n");\r
@@ -159,6 +159,58 @@ int OpGetFlags(int subtract,int xbit,int specialz)
   return 0;\r
 }\r
 \r
+void OpGetFlagsNZ(int rd)\r
+{\r
+  ot("  and r10,r%d,#0x80000000 ;@ r10=N_flag\n",rd);\r
+  ot("  orreq r10,r10,#0x40000000 ;@ get NZ, clear CV\n");\r
+}\r
+\r
+// size 0=8bit, 1=16bit\r
+void SignExtend(int rd, int rs, int size)\r
+{\r
+  if (size >= 2)\r
+  {\r
+    if (rd != rs)\r
+      ot("  mov r%d,r%d\n", rd, rs);\r
+    return;\r
+  }\r
+#if defined(HAVE_ARMv6) && (HAVE_ARMv6)\r
+  if (size == 1)\r
+    ot("  sxth r%d,r%d ;@ sign extend\n", rd, rs);\r
+  else\r
+    ot("  sxtb r%d,r%d ;@ sign extend\n", rd, rs);\r
+#else\r
+  int shift = size ? 16 : 24;\r
+  ot("  mov r%d,r%d,asl #%d\n", rd, rs, shift);\r
+  ot("  mov r%d,r%d,asr #%d ;@ sign extend\n", rd, rd, shift);\r
+#endif\r
+}\r
+\r
+void ZeroExtend(int rd, int rs, int size)\r
+{\r
+  if (size >= 2)\r
+  {\r
+    if (rd != rs)\r
+      ot("  mov r%d,r%d\n", rd, rs);\r
+    return;\r
+  }\r
+#if defined(HAVE_ARMv6) && (HAVE_ARMv6)\r
+  if (size == 1)\r
+    ot("  uxth r%d,r%d ;@ zero extend\n", rd, rs);\r
+  else\r
+#else\r
+  if (size == 1)\r
+  {\r
+    ot("  mov r%d,r%d,lsl #16\n", rd, rs);\r
+    ot("  mov r%d,r%d,lsr #16 ;@ zero extend\n", rd, rd);\r
+  }\r
+  else\r
+#endif\r
+  {\r
+    ot("  and r%d,r%d,#0xff ;@ zero extend\n", rd, rs);\r
+  }\r
+}\r
+\r
 // -----------------------------------------------------------------\r
 \r
 int g_op;\r