]> git.sur5r.net Git - cc65/blobdiff - src/cc65/codeinfo.h
Fixed a bug
[cc65] / src / cc65 / codeinfo.h
index c4be2c7566d93facf9af09ea3ad04a9ac9efbc7f..55a2e9c18da1cb6675846a626ee887cff49b89b7 100644 (file)
@@ -59,28 +59,44 @@ struct CodeSeg;
 #define REG_A                  0x0001U
 #define REG_X                  0x0002U
 #define REG_Y                  0x0004U
-#define REG_SREG_LO            0x0008U
-#define REG_SREG_HI            0x0010U
-#define REG_TMP1               0x0020U
-#define REG_TMP2        0x0040U
-#define REG_TMP3        0x0080U
-#define REG_PTR1_LO            0x0100U
-#define REG_PTR1_HI            0x0200U
-#define REG_PTR2_LO            0x0400U
-#define REG_PTR2_HI            0x0800U
-#define REG_PTR3_LO            0x1000U
-#define REG_PTR3_HI            0x2000U
-#define REG_PTR4_LO            0x4000U
-#define REG_PTR4_HI            0x8000U
-#define        REG_AX          (REG_A | REG_X)
-#define REG_EAX         (REG_A | REG_X | REG_SREG_LO | REG_SREG_HI)
-#define REG_XY         (REG_X | REG_Y)
-#define REG_AXY                (REG_A | REG_X | REG_Y)
-#define REG_SREG        (REG_SREG_LO | REG_SREG_HI)
+#define REG_TMP1               0x0008U
+#define REG_PTR1_LO            0x0010U
+#define REG_PTR1_HI            0x0020U
+#define REG_PTR2_LO     0x0040U
+#define REG_PTR2_HI     0x0080U
+#define REG_SREG_LO            0x0100U
+#define REG_SREG_HI     0x0200U
+#define REG_SAVE_LO     0x0400U
+#define REG_SAVE_HI     0x0800U
+#define REG_SP_LO       0x1000U
+#define REG_SP_HI       0x2000U
+
+
+/* Combined register defines */
 #define REG_PTR1        (REG_PTR1_LO | REG_PTR1_HI)
 #define REG_PTR2        (REG_PTR2_LO | REG_PTR2_HI)
-#define REG_PTR3        (REG_PTR3_LO | REG_PTR3_HI)
-#define REG_PTR4        (REG_PTR4_LO | REG_PTR4_HI)
+#define REG_SREG        (REG_SREG_LO | REG_SREG_HI)
+#define REG_SAVE        (REG_SAVE_LO | REG_SAVE_HI)
+#define REG_SP          (REG_SP_LO | REG_SP_HI)
+#define        REG_AX          (REG_A | REG_X)
+#define REG_AY          (REG_A | REG_Y)
+#define REG_XY         (REG_X | REG_Y)
+#define REG_AXY                (REG_AX | REG_Y)
+#define REG_EAX         (REG_AX | REG_SREG)
+#define REG_EAXY        (REG_EAX | REG_Y)
+#define REG_ZP          0xFFF8U
+#define REG_ALL         0xFFFFU
+
+
+
+/* Zero page register info */
+typedef struct ZPInfo ZPInfo;
+struct ZPInfo {
+    unsigned char  Len;                /* Length of the following string */
+    char           Name[11];    /* Name of zero page symbol */
+    unsigned short ByteUse;     /* Register info for this symbol */
+    unsigned short WordUse;     /* Register info for 16 bit access */
+};
 
 
 
@@ -96,10 +112,12 @@ void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg);
  * load all registers.
  */
 
-int IsZPName (const char* Name);
-/* Return true if the given name is a zero page symbol */
+const ZPInfo* GetZPInfo (const char* Name);
+/* If the given name is a zero page symbol, return a pointer to the info
+ * struct for this symbol, otherwise return NULL.
+ */
 
-unsigned GetRegInfo (struct CodeSeg* S, unsigned Index);
+unsigned GetRegInfo (struct CodeSeg* S, unsigned Index, unsigned Wanted);
 /* Determine register usage information for the instructions starting at the
  * given index.
  */
@@ -113,6 +131,9 @@ int RegXUsed (struct CodeSeg* S, unsigned Index);
 int RegYUsed (struct CodeSeg* S, unsigned Index);
 /* Check if the value in Y is used. */
 
+int RegAXUsed (struct CodeSeg* S, unsigned Index);
+/* Check if the value in A or(!) the value in X are used. */
+
 
 
 /* End of codeinfo.h */