_mcs51_genXINIT: xdata initialization is 13 bytes shorter now
[fw/sdcc] / src / mcs51 / main.c
index e7af479f8541dc41d4a29f9449d5ec062c21215d..30adbfd850308cee8f7fefcbd0bf22d97fcb4729 100644 (file)
@@ -157,14 +157,11 @@ _mcs51_genIVT (FILE * of, symbol ** interrupts, int maxInterrupts)
 static void _mcs51_genXINIT (FILE * of) {
   fprintf (of, ";      _mcs51_genXINIT() start\n");
   fprintf (of, "       mov     a,#l_XINIT\n");
-  fprintf (of, "       orl     a,#l_XINIT>>8\n");
-  fprintf (of, "       jz      00003$\n");
-  fprintf (of, "       mov     a,#s_XINIT\n");
-  fprintf (of, "       add     a,#l_XINIT\n");
   fprintf (of, "       mov     r1,a\n");
-  fprintf (of, "       mov     a,#s_XINIT>>8\n");
-  fprintf (of, "       addc    a,#l_XINIT>>8\n");
-  fprintf (of, "       mov     r2,a\n");
+  fprintf (of, "       mov     r2,#(l_XINIT >> 8)\n");
+  fprintf (of, "       orl     a,r2\n");
+  fprintf (of, "       jz      00003$\n");
+  fprintf (of, "       inc     r2\n");  
   fprintf (of, "       mov     dptr,#s_XINIT\n");
   fprintf (of, "       mov     r0,#s_XISEG\n");
   fprintf (of, "       mov     p2,#(s_XISEG >> 8)\n");
@@ -175,10 +172,8 @@ static void _mcs51_genXINIT (FILE * of) {
   fprintf (of, "       inc     r0\n");
   fprintf (of, "       cjne    r0,#0,00002$\n");
   fprintf (of, "       inc     p2\n");
-  fprintf (of, "00002$:        mov     a,dpl\n");
-  fprintf (of, "       cjne    a,ar1,00001$\n");
-  fprintf (of, "       mov     a,dph\n");
-  fprintf (of, "       cjne    a,ar2,00001$\n");
+  fprintf (of, "00002$:        djnz    r1,00001$\n");
+  fprintf (of, "       djnz    r2,00001$\n");
   fprintf (of, "       mov     p2,#0xFF\n");
   fprintf (of, "00003$:\n");
   fprintf (of, ";      _mcs51_genXINIT() end\n");
@@ -305,6 +300,7 @@ PORT mcs51_port =
   NULL,
   NULL,
   FALSE,
+  TRUE,                                /* little endian */
   0,                           /* leave lt */
   0,                           /* leave gt */
   1,                           /* transform <= to ! > */