some more optimizations
[picodrive.git] / cpu / Cyclone / Ea.cpp
index 22e5939..642a42b 100644 (file)
@@ -284,27 +284,29 @@ int EaRead(int a,int v,int ea,int size,int mask,int top,int sign_extend)
 {\r
   char text[32]="";\r
   int shift=0;\r
-  \r
\r
   shift=32-(8<<size);\r
 \r
   DisaPc=2; DisaGetEa(text,ea,size); // Get text version of the effective address\r
 \r
   if (ea<0x10)\r
   {\r
-    int lsl=0,low=0,i;\r
+    int lsl=0,low=0,nsarm=size&3,i;\r
     if (size>=2||(size==0&&(top||!sign_extend))) {\r
       if(mask)\r
         for (i=mask|0x8000; (i&1)==0; i>>=1) low++; // Find out how high up the EA mask is\r
       lsl=2-low; // Having a lsl #2 here saves one opcode\r
     }\r
 \r
+    if (top) nsarm=3;\r
+\r
     ot(";@ EaRead : Read register[r%d] into r%d:\n",a,v);\r
 \r
-    if      (lsl>0) ot("  ldr%s r%d,[r7,r%d,lsl #%i]\n",Narm[size&3],v,a,lsl);\r
-    else if (lsl<0) ot("  ldr%s r%d,[r7,r%d,lsr #%i]\n",Narm[size&3],v,a,-lsl);\r
-    else            ot("  ldr%s r%d,[r7,r%d]\n",Sarm[size&3],v,a);\r
+    if      (lsl>0) ot("  ldr%s r%d,[r7,r%d,lsl #%i]\n",Narm[nsarm],v,a,lsl);\r
+    else if (lsl<0) ot("  ldr%s r%d,[r7,r%d,lsr #%i]\n",Narm[nsarm],v,a,-lsl);\r
+    else            ot("  ldr%s r%d,[r7,r%d]\n",Sarm[nsarm],v,a);\r
 \r
-    if (top && shift) ot("  mov r%d,r%d,asl #%d\n",v,v,shift);\r
+    if (top&&shift) ot("  mov r%d,r%d,asl #%d\n",v,v,shift);\r
 \r
     ot("\n"); return 0;\r
   }\r