/* */
/* */
/* */
-/* (C) 2002 Ullrich von Bassewitz */
-/* Wacholderweg 14 */
-/* D-70597 Stuttgart */
-/* EMail: uz@cc65.org */
+/* (C) 2002-2006, Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
/*****************************************************************************/
-/* Code */
+/* Code */
/*****************************************************************************/
unsigned OptStore1 (CodeSeg* S);
+/* Search for the sequence
+ *
+ * ldy #n
+ * jsr staxysp
+ * ldy #n+1
+ * jsr ldaxysp
+ *
+ * and remove the useless load, provided that the next insn doesn't use flags
+ * from the load.
+ */
+
+unsigned OptStore2 (CodeSeg* S);
/* Search for a call to staxysp. If the ax register is not used later, and
* the value is constant, just use the A register and store directly into the
* stack.
*/
-unsigned OptStore2 (CodeSeg* S);
+unsigned OptStore3 (CodeSeg* S);
/* Search for a call to steaxysp. If the eax register is not used later, and
* the value is constant, just use the A register and store directly into the
* stack.
*/
+unsigned OptStore4 (CodeSeg* S);
+/* Search for the sequence
+ *
+ * sta xx
+ * stx yy
+ * lda xx
+ * ldx yy
+ *
+ * and remove the useless load, provided that the next insn doesn't use flags
+ * from the load.
+ */
+
+unsigned OptStore5 (CodeSeg* S);
+/* Search for the sequence
+ *
+ * lda foo
+ * ldx bar
+ * sta something
+ * stx something-else
+ *
+ * and replace it by
+ *
+ * lda foo
+ * sta something
+ * lda bar
+ * sta something-else
+ *
+ * if X is not used later. This replacement doesn't save any cycles or bytes,
+ * but it keeps the value of X, which may be reused later.
+ */
+
/* End of coptstore.h */