* src/mcs51/gen.c (genCodePointerGet): inc dptr instead of loading acc
[fw/sdcc] / src / mcs51 / main.c
index 402993d8a2e9f377e9672a2dae9718f1a497900f..c1b18ea0b34b13abacb85fd877a23162dc320b7c 100644 (file)
@@ -122,14 +122,27 @@ _mcs51_finaliseOptions (void)
     port->genXINIT=0;
   }
 
-  if (options.model == MODEL_LARGE) {
+  switch (options.model)
+    {
+    case MODEL_SMALL:
+      port->mem.default_local_map = data;
+      port->mem.default_globl_map = data;
+      port->s.gptr_size = 3;
+      break;
+    case MODEL_MEDIUM:
+      port->mem.default_local_map = pdata;
+      port->mem.default_globl_map = pdata;
+      port->s.gptr_size = 3;
+      break;
+    case MODEL_LARGE:
       port->mem.default_local_map = xdata;
       port->mem.default_globl_map = xdata;
-    }
-  else
-    {
+      port->s.gptr_size = 3;
+      break;
+    default:
       port->mem.default_local_map = data;
       port->mem.default_globl_map = data;
+      break;
     }
 
   if (options.parms_in_bank1) {
@@ -264,6 +277,9 @@ hasExtBitOp (int op, int size)
   if (op == RRC
       || op == RLC
       || op == GETHBIT
+      || op == GETABIT
+      || op == GETBYTE
+      || op == GETWORD
       || (op == SWAP && size <= 2)
      )
     return TRUE;
@@ -690,7 +706,7 @@ PORT mcs51_port =
   {
     glue,
     TRUE,                       /* Emit glue around main */
-    MODEL_SMALL | MODEL_LARGE,
+    MODEL_SMALL | MODEL_MEDIUM | MODEL_LARGE,
     MODEL_SMALL
   },
   {