]> git.sur5r.net Git - cc65/blobdiff - src/cc65/codeinfo.c
Fixed wrong code generation for
[cc65] / src / cc65 / codeinfo.c
index d5db42c557fb5259848a6f4d2d05f59ec5ef302c..fb6bea66702922544b8b4607099eeba86e2f0e55 100644 (file)
@@ -81,6 +81,10 @@ static const FuncInfo FuncInfoTable[] = {
     { "aslax2",         REG_AX,                      REG_AX | REG_TMP1              },
     { "aslax3",         REG_AX,                      REG_AX | REG_TMP1              },
     { "aslax4",         REG_AX,                      REG_AX | REG_TMP1              },
+    { "asrax1",         REG_AX,                      REG_AX | REG_TMP1              },
+    { "asrax2",         REG_AX,                      REG_AX | REG_TMP1              },
+    { "asrax3",         REG_AX,                      REG_AX | REG_TMP1              },
+    { "asrax4",         REG_AX,                      REG_AX | REG_TMP1              },
     { "bnega",          REG_A,                REG_AX                        },
     { "bnegax",         REG_AX,               REG_AX                        },
     { "bnegeax",        REG_EAX,              REG_EAX                       },
@@ -94,6 +98,7 @@ static const FuncInfo FuncInfoTable[] = {
     { "boolugt",               REG_NONE,             REG_AX                         },
     { "boolule",               REG_NONE,             REG_AX                         },
     { "boolult",               REG_NONE,             REG_AX                         },
+    { "callax",         REG_AX,               REG_ALL                        },
     { "complax",        REG_AX,               REG_AX                        },
     { "decax1",                REG_AX,               REG_AX                         },
     { "decax2",                REG_AX,               REG_AX                         },
@@ -113,14 +118,15 @@ static const FuncInfo FuncInfoTable[] = {
     { "decsp6",                REG_NONE,             REG_A                          },
     { "decsp7",                REG_NONE,             REG_A                          },
     { "decsp8",                REG_NONE,             REG_A                          },
-    { "incax1",         REG_AX,               REG_AX                        },
-    { "incax2",         REG_AX,               REG_AX                        },
-    { "incax3",         REG_AX,               REG_AX                        },
-    { "incax4",         REG_AX,               REG_AX                        },
-    { "incax5",         REG_AX,               REG_AX                        },
-    { "incax6",         REG_AX,               REG_AX                        },
-    { "incax7",         REG_AX,               REG_AX                        },
-    { "incax8",         REG_AX,               REG_AX                        },
+    { "incax1",         REG_AX,               REG_AX                        },
+    { "incax2",         REG_AX,               REG_AX                        },
+    { "incax3",         REG_AX,               REG_AXY | REG_TMP1             },
+    { "incax4",         REG_AX,               REG_AXY | REG_TMP1            },
+    { "incax5",         REG_AX,               REG_AXY | REG_TMP1            },
+    { "incax6",         REG_AX,               REG_AXY | REG_TMP1            },
+    { "incax7",         REG_AX,               REG_AXY | REG_TMP1            },
+    { "incax8",         REG_AX,               REG_AXY | REG_TMP1            },
+    { "incaxy",         REG_AXY,              REG_AXY | REG_TMP1                    },
     { "incsp1",                REG_NONE,             REG_NONE                       },
     { "incsp2",                REG_NONE,             REG_Y                          },
     { "incsp3",                REG_NONE,             REG_Y                          },
@@ -150,6 +156,12 @@ static const FuncInfo FuncInfoTable[] = {
     { "lsubeq1",        REG_Y | REG_PTR1_LO,  REG_EAXY | REG_PTR1_HI         },
     { "lsubeqa",        REG_AY | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI         },
     { "lsubeqysp",      REG_EAXY,             REG_EAXY                       },
+    { "mulax10",        REG_AX,               REG_AX | REG_PTR1              },
+    { "mulax3",         REG_AX,               REG_AX | REG_PTR1              },
+    { "mulax5",         REG_AX,               REG_AX | REG_PTR1              },
+    { "mulax6",         REG_AX,               REG_AX | REG_PTR1              },
+    { "mulax7",         REG_AX,               REG_AX | REG_PTR1              },
+    { "mulax9",         REG_AX,               REG_AX | REG_PTR1              },
     { "negax",          REG_AX,               REG_AX                        },
     { "push0",                 REG_NONE,             REG_AXY                        },
     { "push1",                 REG_NONE,             REG_AXY                        },
@@ -162,7 +174,8 @@ static const FuncInfo FuncInfoTable[] = {
     { "pusha",                 REG_A,                REG_Y                          },
     { "pusha0",                REG_A,                REG_XY                         },
     { "pusha0sp",       REG_NONE,             REG_AY                         },
-    { "pushax",                REG_AX,               REG_Y                          },
+    { "pushaFF",               REG_A,                REG_Y                          },
+    { "pushax",                REG_AX,               REG_Y                          },
     { "pushaysp",       REG_Y,                REG_AY                         },
     { "pushc0",                REG_NONE,             REG_A | REG_Y                  },
     { "pushc1",                REG_NONE,             REG_A | REG_Y                  },
@@ -175,6 +188,8 @@ static const FuncInfo FuncInfoTable[] = {
     { "regswap",        REG_AXY,              REG_AXY | REG_TMP1             },
     { "regswap1",       REG_XY,               REG_A                          },
     { "regswap2",       REG_XY,               REG_A | REG_Y                  },
+    { "return0",        REG_NONE,             REG_AX                         },
+    { "return1",        REG_NONE,             REG_AX                         },
     { "shlax1",         REG_AX,                      REG_AX | REG_TMP1              },
     { "shlax2",         REG_AX,                      REG_AX | REG_TMP1              },
     { "shlax3",         REG_AX,                      REG_AX | REG_TMP1              },
@@ -189,6 +204,7 @@ static const FuncInfo FuncInfoTable[] = {
     { "shreax4",        REG_EAX,              REG_AX | REG_TMP1                     },
     { "staspidx",       REG_A | REG_Y,        REG_Y | REG_TMP1 | REG_PTR1    },
     { "stax0sp",        REG_AX,               REG_Y                         },
+    { "staxspidx",      REG_AXY,              REG_TMP1 | REG_PTR1            },
     { "staxysp",        REG_AXY,              REG_Y                         },
     { "steax0sp",       REG_EAX,              REG_Y                          },
     { "steaxysp",       REG_EAXY,             REG_Y                          },
@@ -205,17 +221,37 @@ static const FuncInfo FuncInfoTable[] = {
     { "tosdiva0",       REG_AY,              REG_ALL                        },
     { "tosdivax",       REG_AXY,              REG_ALL                       },
     { "tosdiveax",      REG_EAXY,             REG_ALL                       },
+    { "toseq00",        REG_NONE,                    REG_AXY | REG_SREG             },
+    { "toseqa0",        REG_A,               REG_AXY | REG_SREG             },
+    { "toseqax",        REG_AX,                      REG_AXY | REG_SREG             },
     { "toseqeax",       REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "tosge00",        REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosgea0",        REG_A,               REG_AXY | REG_SREG             },
+    { "tosgeax",        REG_AX,                      REG_AXY | REG_SREG             },
     { "tosgeeax",       REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "tosgt00",        REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosgta0",        REG_A,               REG_AXY | REG_SREG             },
+    { "tosgtax",        REG_AX,                      REG_AXY | REG_SREG             },
     { "tosgteax",       REG_EAX,                     REG_AXY | REG_PTR1             },
     { "tosicmp",               REG_AX,               REG_AXY | REG_SREG             },
     { "toslcmp",        REG_EAX,                     REG_A | REG_Y | REG_PTR1       },
+    { "tosle00",        REG_NONE,                    REG_AXY | REG_SREG             },
+    { "toslea0",        REG_A,               REG_AXY | REG_SREG             },
+    { "tosleax",        REG_AX,                      REG_AXY | REG_SREG             },
     { "tosleeax",       REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "toslt00",        REG_NONE,                    REG_AXY | REG_SREG             },
+    { "toslta0",        REG_A,               REG_AXY | REG_SREG             },
+    { "tosltax",        REG_AX,                      REG_AXY | REG_SREG             },
     { "toslteax",       REG_EAX,                     REG_AXY | REG_PTR1             },
     { "tosmula0",       REG_AX,                      REG_ALL                        },
     { "tosmulax",       REG_AX,                      REG_ALL                        },
     { "tosmuleax",      REG_EAX,                     REG_ALL                        },
+    { "tosne00",        REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosnea0",        REG_A,               REG_AXY | REG_SREG             },
+    { "tosneax",        REG_AX,                      REG_AXY | REG_SREG             },
     { "tosneeax",       REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "tosora0",        REG_A,               REG_AXY | REG_TMP1             },
+    { "tosorax",        REG_AX,                      REG_AXY | REG_TMP1             },
     { "tosshlax",       REG_A,                REG_AXY | REG_TMP1             },
     { "tosshleax",      REG_A,                       REG_EAXY | REG_TMP1            },
     { "tosshrax",       REG_A,                REG_AXY | REG_TMP1             },
@@ -223,9 +259,21 @@ static const FuncInfo FuncInfoTable[] = {
     { "tossuba0",       REG_A,                REG_AXY                        },
     { "tossubax",       REG_AX,               REG_AXY                        },
     { "tossubeax",      REG_EAX,              REG_EAXY                       },
+    { "tosuge00",       REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosugea0",       REG_A,               REG_AXY | REG_SREG             },
+    { "tosugeax",       REG_AX,                      REG_AXY | REG_SREG             },
     { "tosugeeax",      REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "tosugt00",       REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosugta0",       REG_A,               REG_AXY | REG_SREG             },
+    { "tosugtax",       REG_AX,                      REG_AXY | REG_SREG             },
     { "tosugteax",      REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "tosule00",       REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosulea0",       REG_A,               REG_AXY | REG_SREG             },
+    { "tosuleax",       REG_AX,                      REG_AXY | REG_SREG             },
     { "tosuleeax",      REG_EAX,                     REG_AXY | REG_PTR1             },
+    { "tosult00",       REG_NONE,                    REG_AXY | REG_SREG             },
+    { "tosulta0",       REG_A,               REG_AXY | REG_SREG             },
+    { "tosultax",       REG_AX,                      REG_AXY | REG_SREG             },
     { "tosulteax",      REG_EAX,                     REG_AXY | REG_PTR1             },
     { "tosumula0",      REG_AX,                      REG_ALL                        },
     { "tosumulax",      REG_AX,                      REG_ALL                        },
@@ -351,7 +399,7 @@ void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg)
              * use and change all registers.
              */
             if (Debug) {
-                fprintf (stderr, "No info about internal function `%s'", Name);
+                fprintf (stderr, "No info about internal function `%s'\n", Name);
             }
             *Use = REG_ALL;
             *Chg = REG_ALL;